MetaTrader 4 自动中文语音报价脚本
初来涛客,很喜欢这里的氛围, 各位dx的各种经验也给了我很多帮助,
自己初入汇市,没有多少经验, 还只能向各位dx多多请教.
以前学过点编程,写了个mt4的小脚本希望能对大家有点帮助,
共同来繁荣这个大家庭.
btw: 感谢正版提供的资料ftp下载, 我就是从那里下mq4编程语言文档.
另感谢唐老师这两天发的汇评增加了我对欧系仍然有一定回调空间的
信心,有望减少目前被套的损失.
回到正题, 这个脚本是用来配合MT4平台再汇率变动时进行中文语音的
自动报价, 具体包含有如下功能:
1. 可以设置使用买入价或者卖出价.
2. 可以设置两次语音报价之间的最小时间间隔.
3. 可以设置是否报出交易货币名称
4. 可以设置是否报出两次报价之间的点数变动
5. 可以设置两组需要进行语音报价的点数范围
安装过程如下:
首先需要下载微软的TTS语音引擎, 以及简体中文的语音数据包.
下载页面为:
http://www.microsoft.com/downloads/details.aspx?FamilyID=5e86ec97-40a7-453f-b0ee-6583171b4530&DisplayLang=en
或直接下载连接为: (包含引擎以及中文语音数据包, 约130M)
http://download.microsoft.com/download/speechSDK/SDK/5.1/WXP/EN-US/speechsdk51msm.exe
下载完按提示安装即可, 安装完成后你可以在控制面板中找到"语音"设置项, 在其中的
"文字-语音转换"标签页里面能够对语音进行相关的测试以及语速设置.
(中文语音在下拉表中名为Microsoft Simplified Chinese) 如果这里测试能正常进行
中文文字的语音朗读的话则可以进行下一步
另外这个微软的语音包以及引擎是系统标准引擎, 安装完后很多其他程序可以公用,
比如可以进行文章/网页朗读之类的,虽说效果不是很好,但也还算用得上.
然后可以进行脚本的安装, 只需要将附件"自动语音报价.mq4"复制到你MT4
安装目录下的experts目录即可, 比如你MT4安装在:
C:\Program Files\MetaTrader 4\则复制到C:\Program Files\MetaTrader 4\experts
再重新启动MT4, 就应该可以在导航窗口里面的智能交易列表里面找到自动语音报价
这个项目, 安装到这里就算完成了.
使用方法:
首先你需要开启MT4的智能交易系统, 在工具栏上点下启动智能交易的按钮,让其
处于绿色的按下状态.
然后打开你所要进行自动报价的商品的数据图, 再双击智能交易列表里面的
自动语音报价, 然后确定就可以按照默认设置进行报价了. 如需更改设置, 可以
在确定前点数如参数页里面进行更改或者在随时点击数据图右上角自动语音报价
旁边的圆脸即可弹出设置窗口.
设置项目名因为MT4的限制只能为英文字母和数字,这里做一下解释:
只有当当前商品的价格处于[RangeMin1, RangeMax1] 或者[RangeMin2, RangeMax2]
的范围内才会报价,这样可以用来避免不必要的报价.
默认为所有价位范围 [0, 99999.9], 即对任何数据进行报价.
这个范围需要根据自己需求以及货币种类进行设置使用.
比如现在EURUSD在1.18下附近波动, 上升阻力位为1.1800, 则可以将Range1Min设置
为1.1800, Range1Max设置为一个足够大的数据比如99999.9, 则汇价升破1.18的阻力
位都将自动进行语音报价. 如果当前在支撑位1.1800附近震荡, 则可以将Range1Min
设置为0, Range1Max设置为1.1800, Range2Min以及Range2Max保持为0即可
当大幅度在支撑和阻力间震荡时如需同时设置支撑和阻力范围可以通过Range1以及Range2
配合进行设置.
以上是对单种商品的自动报价处理, 如需同时对多种商品进行报价, 则另开一个数据窗口,
重复以上步骤即可.
如需要临时禁止单窗口的自动报价, 可以将设置里面的Enable设置为false.需要恢复时候
重新改为true即可.
如需要删除单窗口的自动报价, 可在该窗口点击右键选择智能交易->删除即可,但该窗口的
自动报价设置将被删除.
如需临时禁止所有窗口的自动报价, 点击工具栏上的启动智能交易将其弹起为红色即可.
重新点击即可恢复.
如需完全删除自动语音报价, 在智能交易列表中的自动语音报价右键点击后选删除.
附件"自动语音报价.mq4"为mq4标准脚本源代码, 大家可以直接用记事本或者MetaTrader
系统的编辑器打开后察看内容验证安全性或者修改.
欢迎大家提出改进建议 :)
另: 附件好像只能上传图片, 我将"自动语音报价.mq4" 附录于后, 大家可以复制这部分
内容到记事本后保存为"自动语音报价.mq4"即可.
名称 类型 说明 Enabled 布尔值 选true(是)则表示开启报价, false(否)则 临时禁止报价. UseBid 布尔值 是否选用买入价, true表示用买入价,false 表示使用卖出价. SpeakInterval 整数 设置同一个图标两次报价之间的最小时间价格. 以秒为单位,如果该数值设置为0, 则将在 语速允许的范围内对每次的数据变动报价. SpeakSymbol 布尔值 选true表示标价同时报出该商品名,如果同时在 对多种商品报价时候可以用这个帮助区分商品种类. false表示只报价格.可以缩短报价语句便于对 一两种货币集中监控. SpeakDelta 整数 用来控制是否报两次报价之间的变化点数以及变化的 范围. 设置为0表示不报差价,否则如果两次报价 间变化大于等于该设置数值则报价同时报上涨或者 下跌了多少点. 如果该数值设置为1则每次都报 变化点数. Range1Min 实数 用来设置第一个报价范围的最小点数. Range1Max 实数 用来设置第一个报价范围的最大点数. Range2Min 实数 用来设置第二个报价范围的最小点数. Range2Max 实数 用来设置第二个报价范围的最大点数. LogMessage 布尔值 是否将每次报价记录到只能交易系统的日志窗口.
2楼
"自动语音报价.mq4" 源程序如下:
老正: 我传了个zip的在21楼 解压缩后把里面的文件复制到指定目录里也可
//+------------------------------------------------------------------+
//| 语音报价.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright "[email protected]"
#property link "www.talkfx.com"
//---- input parameters
extern bool Enabled=true;
extern bool UseBid=true;
extern int SpeakInterval=10;
extern bool SpeakSymbol=true;
extern int SpeakDelta=1;
extern double Range1Min=0.0;
extern double Range1Max=99999.9;
extern double Range2Min=0.0;
extern double Range2Max=0.0;
extern bool InitSpeak=false;
extern bool LogMessage=false;
double LastPrice = 0;
int LastSpeakTime = 0;
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
double GetCurrPrice()
{
double p;
if (UseBid) {
p = Bid;
} else {
p = Ask;
}
return (p);
}
string CurrencyGetName(string c)
{
if (c == "USD") {
return ("美元");
} else if (c == "EUR") {
return ("欧元");
} else if (c == "GBP") {
return ("英镑");
} else if (c == "JPY") {
return ("日元");
} else if (c == "CAD") {
return ("加元");
} else if (c == "CHF") {
return ("瑞郎");
} else if (c == "AUD") {
return ("澳元");
} else if (c == "SGD") {
return ("星元");
} else if (c == "NZD") {
return ("纽元");
} else if (c == "HKD") {
return ("港币");
} else if (c == "CNY") {
return ("人民币");
} else {
return ("");
}
}
string GetSymbolName(string name)
{
string str;
str = "";
if (StringLen(name) != 6) {
if (name == "USDX" || name == "_DXY") {
str = str+"美元指数";
} else if (name == "GOLD") {
str = str+"黄金";
}
} else {
string left, right;
left = CurrencyGetName(StringSubstr(name, 0, 3));
right = CurrencyGetName(StringSubstr(name, 3, 3));
if (left != "" && right != "") {
str = str+(left + "兑" + right);
}
}
return (str);
}
string GetSpeechText()
{
string str;
str = "";
if (SpeakSymbol) {
str = str + GetSymbolName(Symbol());
if (str != "") {
if (UseBid) {
str = str+"买入价为";
} else {
str = str+"卖出价为";
}
}
}
double p;
p = GetCurrPrice();
str = str+DoubleToStr(p, Digits);
if (SpeakDelta != 0 ) {
int n = MathPow(10, Digits);
double diff = MathAbs(p*n-LastPrice*n);
if (diff >= SpeakDelta) {
if (p > LastPrice) {
str = str+"上涨"+DoubleToStr(diff,0)+"点";
} else {
str = str+"下跌"+DoubleToStr(diff,0)+"点";
}
}
// Print(LastPrice + "->" + p + " : " + diff);
}
LastPrice = p;
if (LogMessage) Print (str);
return (str);
}
int init()
{
//----
//----
LastPrice = GetCurrPrice();
LastSpeakTime = 0;
if (InitSpeak) {
string str;
str = "开始进行" + GetSymbolName(Symbol()) + "的自动报价,";
str = str + "当前价格为" + DoubleToStr(LastPrice, Digits);
SpeechText(str, SPEECH_NATIVE);
}
return(0);
}
//+------------------------------------------------------------------+
//| expert deinitialization function |
//+------------------------------------------------------------------+
int deinit()
{
//----
if (InitSpeak) {
string str;
str = "停止" + GetSymbolName(Symbol()) + "的自动报价";
SpeechText(str, SPEECH_NATIVE);
}
//----
return(0);
}
//+------------------------------------------------------------------+
//| expert start function |
//+------------------------------------------------------------------+
int start()
{
//----
if (!Enabled) return (0);
double p = GetCurrPrice();
if (MathAbs(GetTickCount() - LastSpeakTime) < SpeakInterval * 1000) {
return (0);
}
if ((p >= Range2Min && p <= Range1Max) || (p >= Range2Max && p <= Range2Min)) {
SpeechText(GetSpeechText(), SPEECH_NATIVE);
LastSpeakTime = GetTickCount();
}
//----
return(0);
}
//+------------------------------------------------------------------+
[ 本帖最后由 老正 于 2005-11-16 10:58 编辑 ]
发表于:2005-11-10 13:12只看该作者
3楼
非常感谢你的无私奉献!
韬客外汇论坛TALKFOREX.COM
发表于:2005-11-10 20:18只看该作者
4楼
好东西,真大啊,不下也顶
韬客社区www.talkfx.co
5楼
最开始给出的微软中文语音开发包文件是比较大,因为里面包含了开发库, 工具以及语音识别录入等很多朗读不需要的功能, 刚上网找了找,发现有独立的中文语音包, 只有2M不到, 下载后在自己的WinXP下试用了一下暂时也没发现问题. 想避免下载大文件麻烦的可以看看.
该网站链接如下:
http://www.ccview.net/software/ccspeech.htm
WinXP的一般下载上面的"简体中文语音库(男声)"即可, 其他低版本的Windows可能需要下载一些其他组件,具体可以看该网页上的说明.
声明一下本人与该网站无关, 也仅测试了一下该网站上的中文语音包, 不保证该网站上的软件下载的安全, 请大家下载后自行验证查对.
如果有非WinXP系统的成功使用也请发帖说明一下具体需要安装哪些组件方便后来的朋友.
[ 本帖最后由 wfy05 于 2005-11-11 11:29 编辑 ]
韬客社区www.talkfx.co
发表于:2005-11-11 04:59只看该作者
7楼
已经用了,很不错,谢谢楼主
发表于:2005-11-11 05:54只看该作者
8楼
谢谢楼主!
试试看。
9楼
再补充几点说明:
1. 刚才试用了一下那个中文女声, 感觉效果不如男声, 数字语音不清晰,连贯性也比较差. 而且这个女声不注册的话还有很多限制. 微软的那个男声数据可以免费使用无需注册. 音质的效果也比较好.
2. 如果安装了多种中文语音数据包的可以通过系统控制面中语音设置来调整默认使用的语音, 另外语速也可以在这里调节,男声的那个可以稍微把语速调快点加快报价,120%左右的语速感觉不错.
3. 可以通过直接修改mq4文件后再MT自带的MetaEditor编译后增加修改自己想要的功能或者变动默认设置之类的,mq4语言说明具体可以看正版ftp里面的文档, 语法和C语言基本一样,学过C语言的会很容易上手. 功能也很强大, 看来MT的确是名不虚传,以后我也打算长期用这个看盘了.
4. 第一篇帖子里面给的微软那个SDK 5.1大家就不要下了,130M太大而且还需要先在第一个连接中下载其他一些东西, 没有SDK的话不能直接使用. 用我后面帖子里面给的那个2M的中文男声就行了. 原帖没法修改了, 后来的注意看一下.
[ 本帖最后由 wfy05 于 2005-11-11 15:23 编辑 ]
发表于:2005-11-11 07:37只看该作者
10楼
楼主,是否能把程序修改一下,使得在看碟的时候休息报价呢?现在只要看碟,就不会有报价的声音
韬客社区www.talkfx.co
发表于:2005-11-11 07:55只看该作者
11楼
这东西好,谢谢
不识庐山真面貌,只缘身在此山中
12楼
原帖由 步步 于 2005-11-11 15:37 发表 楼主,是否能把程序修改一下,使得在看碟的时候休息报价呢?现在只要看碟,就不会有报价的声音
韬客社区www.talkfx.co
发表于:2005-11-11 08:38只看该作者
13楼
用了很好,再次感谢楼主
发表于:2005-11-11 15:07只看该作者
14楼
现在是看碟的时候,他实际是报价的,但是不会出声音,可能是由于播放软件使用了声卡的缘故,看来是没法解决了
韬客社区www.talkfx.co
16楼
原帖由 步步 于 2005-11-11 23:07 发表 现在是看碟的时候,他实际是报价的,但是不会出声音,可能是由于播放软件使用了声卡的缘故,看来是没法解决了
韬客社区www.talkfx.co
发表于:2005-11-13 12:57只看该作者
17楼
原帖由 wfy05 于 2005-11-12 22:31 发表 我还以为你是想放碟的时候关了报价呢, 我这里都挺正常的,我放DVD, mp3, 报价一起都没问题, 除非你声卡本身不支持多音源混合输入(或者是声卡驱动缘故,一般不是太老的都应该支持这个的). 你可以先试试放碟的 ...
韬客社区www.talkfx.co
发表于:2005-11-13 17:23只看该作者
18楼
好了,设置完毕,等待开市,谢谢。
发表于:2005-11-14 05:49只看该作者
19楼
测试完能正常进行中文文字的语音朗读,然后把搂主自动语音报价.mq4复制到记事本,粘贴到experts目录下,关闭mt4,重新启动,但是未能在导航窗口里面的智能交易列表里面找到自动语音报价这个项目. 哎
冷静观察、稳住阵脚、沉着应付、韬光养晦、有所作为、决不当头。
20楼
原帖由 在水一方 于 2005-11-14 13:49 发表 测试完能正常进行中文文字的语音朗读,然后把搂主自动语音报价.mq4复制到记事本,粘贴到experts目录下,关闭mt4,重新启动,但是未能在导航窗口里面的智能交易列表里面找到自动语音报价这个项目. 哎