MetaTrader 4 自动中文语音报价脚本
61楼 电梯直达
原帖由 韩儿 于 2005-11-15 21:34 发表 呵呵 谢谢回复,又重新试了一遍,自定义里面的已经没有了,可是还是不行!!!!!!!!!!!:(
发表于:2005-11-15 19:17只看该作者
62楼
十分感谢WFY05!
但是,如果用 SPEECH_NATIVE 不行。不过,调用您所介绍的《中华经典朗读》就可以读中文。很怪。
韬客社区www.talkfx.co
63楼
原帖由 presentation 于 2005-11-16 03:17 发表 十分感谢WFY05! 但是,如果用 SPEECH_NATIVE 不行。不过,调用您所介绍的《中华经典朗读》就可以读中文。很怪。
韬客社区www.talkfx.co
发表于:2005-11-16 02:34只看该作者
64楼
原帖由 wfy05 于 2005-11-15 22:57 发表 具体是什么地方不行? 是按照默认设置的对所有数据报价没有还是只是设置好范围后不能正常工作? 可惜论坛只能直接上载图片,要不我上载mq4文件估计就没这么多麻烦了.
韬客外汇论坛TALKFOREX.COM
发表于:2005-11-16 03:00只看该作者
65楼
遇到矛盾 先站在对方的立场上想想问题,先试着去理解别人
● 如何使用WinMTR查询平台连接流畅度
66楼
原帖由 韩儿 于 2005-11-16 10:34 发表 呵呵,先谢谢wfy05,这么有耐心的回复解答。1。按照默认设置的对所有数据报价没有报价,2,设置好范围后也不能报价。问题在:照默认设置不能报价??
韬客社区www.talkfx.co
发表于:2005-11-16 05:25只看该作者
67楼
原帖由 wfy05 于 2005-11-16 09:24 发表 不客气,你用的是什么操作系统? 我这里手头只测试了WinXP. 你用系统控制面板里面的"语音"进行预听语音如果能朗读中文的话MT4应该也没问题.
韬客社区www.talkfx.co
68楼
原帖由 presentation 于 2005-11-16 13:25 发表 谢谢! 我用的是W2k with SP4. 控制面板里看不到有"语音“,不知道用什么才能看到。 另外,在MT4的”报警“里,选择”VOICE“的话,Language只有一个选择ENGLISH。 我把所有的“中文”的改成 ...
发表于:2005-11-16 06:36只看该作者
69楼
原帖由 wfy05 于 2005-11-16 11:51 发表 对, 你默认设置都不能报价那缩小范围后肯定更不能了, 我记得你前面都还把默认设置报价调成功了的? 你按照前面的再试试看先把这个解决就行了.
韬客外汇论坛TALKFOREX.COM
发表于:2005-11-18 04:02只看该作者
70楼
太好了,非常感谢楼主wfy05朋友,语音报价一直找了好久。
试用了一下,想请问几点问题。
1.修改设定时,怎样保存?例如修改时间为20,但按确定后,再看仍是10。其他的选项也是无法保存修改。
2.能否也在MT3版本里应用这个语音报价功能?
3.MT4里的图表所显示的价格,是买入价还是卖出价?
4.我如果只想按MT图表所显示的价格报价,每隔10秒报出图表的价格,例如内容是:
欧元 1.1722 欧元 1.17XX
这样 其他的内容不需要,那应该怎样修改? 5.在语音的选项里,常规里有名称连接,这个选项是什么意思,有没有作用?
这样 其他的内容不需要,那应该怎样修改? 5.在语音的选项里,常规里有名称连接,这个选项是什么意思,有没有作用?
韬客社区www.talkfx.co
发表于:2005-11-18 06:16只看该作者
71楼
原帖由 bsun 于 2005-11-18 12:02 发表 太好了,非常感谢楼主wfy05朋友,语音报价一直找了好久。 试用了一下,想请问几点问题。 1.修改设定时,怎样保存?例如修改时间为20,但按确定后,再看仍是10。其他的选项也是无法保存修改。 2.能否也在 ...
韬客外汇论坛TALKFOREX.COM
发表于:2005-11-18 06:16只看该作者
72楼
原帖由 bsun 于 2005-11-18 12:02 发表 太好了,非常感谢楼主wfy05朋友,语音报价一直找了好久。 试用了一下,想请问几点问题。 1.修改设定时,怎样保存?例如修改时间为20,但按确定后,再看仍是10。其他的选项也是无法保存修改。 2.能否也在 ...
发表于:2005-11-18 06:24只看该作者
73楼
原帖由 韩儿 于 2005-11-18 14:16 发表 好象没有这个功能,只有在一段区间内报价,列:1.1700-9999.9则在大于1.1700开始报价,0-1.1700则在小于1.1700报价。
韬客社区www.talkfx.co
74楼
原帖由 bsun 于 2005-11-18 12:02 发表 太好了,非常感谢楼主wfy05朋友,语音报价一直找了好久。 试用了一下,想请问几点问题。 1.修改设定时,怎样保存?例如修改时间为20,但按确定后,再看仍是10。其他的选项也是无法保存修改。 2.能否也在MT3版本里应用这个语音报价功能? 3.MT4里的图表所显示的价格,是买入价还是卖出价? 4.我如果只想按MT图表所显示的价格报价,每隔10秒报出图表的价格,例如内容是: 欧元 1.1722 欧元 1.17XX 这样 其他的内容不需要,那应该怎样修改? 5.在语音的选项里,常规里有名称连接,这个选项是什么意思,有没有作用?
韬客社区www.talkfx.co
75楼
原帖由 bsun 于 2005-11-18 14:24 发表 不会,你说的已经是进阶功能,起警示作用。我理解为随图报价是最原本的功能,默认就可以全范围报价了。MT真是好东西,楼主真是高人,只要添加一个文件就解决了我的烦恼,我还下了数十个软件在那折腾就是为了 ...
韬客社区www.talkfx.co
发表于:2005-11-20 18:44只看该作者
76楼
建议将
double p = GetCurrPrice();
下移至下一个IF下,否则每次都计算价格,一来太浪费CPU,二来我这里会出现GPF。
这个script真不错,可惜我一直无法讲中文,只能改成讲英文了,听了,唉。。。。经常反应不过来。
韬客社区www.talkfx.co
发表于:2005-11-21 07:48只看该作者
77楼
原帖由 wfy05 于 2005-11-20 20:48 发表 1. hoho, 看你后面的这个问题已经解决了. 2. MT3我没试过,如果MT3到MT4的语言接口变动不大的话也可能能用, 但这个一般只有向下兼容,向上兼容就很难保证的. 不过我觉得MT有新版本的话一般就用新版本了, 老版本的话没有维护以及后续开发什么的时间一长就跟不上了. MT3也就MT4刚出来不成熟的时候短期过渡用, 我知道MT的时候MT4的服务器以及功能都很稳定了, 所以就跳过MT3直接用MT4了. 3. MT4线图里面的价格一般是买入价, 至于报价你可以自由选择买入价或者卖出价, 因为点差基本是固定的, 一般感觉还是用买入价就行了. 4. 你所说的这种报价格式目前不支持, 你如果自己懂MQ4的话直接改动倒也容易, 因为做这个脚本的时候还是考虑通用性以及大部分人的需求, 所以叉盘之类的也考虑进去了. 如果你只是对常用的一两个交易货币进行报价的话你完全可以选择将SpeakSymbol设置为false, 这样用也完全可以满足需求而且相当简洁 (一般需要实时观测的也就1-2种货币,通过数字范围也能知道是哪种货币, 比如EURUSD 1.2左右,USDCHF 1.3左右, 货币太多的话就算报名称听着也混乱) 最近有些忙,以后有时间我再考虑做点这方面改进. ...
韬客社区www.talkfx.co
78楼
原帖由 presentation 于 2005-11-21 02:44 发表 建议将 double p = GetCurrPrice(); 下移至下一个IF下,否则每次都计算价格,一来太浪费CPU,二来我这里会出现GPF。 这个script真不错,可惜我一直无法讲中文,只能改成讲英文了,听了,唉。。。。经常反应 ...
感谢啊。暂时就按你的方法,把SpeakSymbol设置为false,不知道语音文件是单个的声音文件还是整合在一起?数字9的读音很含糊,如果能替换为其他更清晰的读音就更好了。
韬客社区www.talkfx.co
79楼
再发一个新版本的,对脚本结构之类的有了比较大的调整,可以对报价文字进行更自由的定制.
不过一般人用前一个版本也基本能满足功能了,有兴趣的可以试试.
说明如下:
1. 更新方法:
同前,可以直接更新后再用MetaEditor编译或者导航里面删除老版本后安装新版本并重启MT4
2. 变动说明:
1). 设置基本同前,最主要的改动就是增加了Format设置项
Format为字符串设置项,用来设置进行报价的字符串格式.
其中, 用"%"包围的为动态变量, 比如%PRICE%表示PRICE
变量,这里是用来表示当前的价格,在输出语音前将会用
当前价格替换%PRICE%
目前支持的变量列表如下:
SELL_CURR 表示当前卖出的货币名
BUY_CURR 表示当前买入的货币名
PRICE 表示当前商品的价格 (买入还是卖出价格取决于UseBid的设置)
ACTION 表示当前是买入价还是卖出价
ADD_DIR 表示当前报价与上次报价之间的价格差方向为上涨还是下跌
ADD 表示当前报价与上次报价之间的价格差点数
其他任何不在'%'之间的字符都将被原样朗读出来,
转化后的字符串中空格不影响朗读, 标点符号将产生停顿.
(一般为了简洁就不用标点了)
用起来实际上很简单的, 比如默认的格式字符串:
%SELL_CURR% 兑 %BUY_CURR% %ACTION% 价为 %PRICE% %ADD_DIR% %ADD%
这个格式实际输出时大概就是这样的:
欧元 兑 美元 买入 价为 1.1810 上涨 1点
比如前面bsun提到的需要只用直盘报价的类似" 欧元 1.1810"就可以用如下格式:
%SELL_CURR% %PRICE% %ADD_DIR% %ADD%
(变动点数范围仍然可以通过SpeakDelta参数调节, 设置为0则不报变动, 可以不调整格式)
另外注意如果需要报美元在前的比如USDCHF, 则用格式:
%BUY_CURR% %PRICE% %ADD_DIR% %ADD%
还有比如之前的最简单的报价方式(即SpeakSymbol=false时, SpeakSymbol参数现已经删除)
可以用这个格式:
%PRICE% %ADD_DIR% %ADD%
就这样, 欢迎大家测试提出意见 :)
//+------------------------------------------------------------------+
//| 语音报价.mq4 |
//| |
//| |
//+------------------------------------------------------------------+
#property copyright "[email protected]"
#property link "www.talkfx.com"
//---- input parameters
extern bool Enabled=true;
extern string Version="1.2";
extern string Format = "%SELL_CURR% 兑 %BUY_CURR% %ACTION% 价为 %PRICE% %ADD_DIR% %ADD%";
extern bool UseBid=true;
extern int SpeakInterval=10;
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;
string StrListGetVar(string & array, string name)
{
int i, n;
n = ArraySize(array)/2;
for (i=0; i n1+1) {
out = StringConcatenate(out, StringVarGetValue(StringSubstr(str, n1+1, n2-n1-1)));
} else if (n2 == n1 + 1) {
out = StringConcatenate(out, "%");
}
start = n2+1;
}
return (out);
}
string StrList = {
"SELL_CURR",,
"BUY_CURR",,
"PRICE",,
"ACTION",,
"ADD_DIR",,
"ADD",,
"BID_PRICE",,
"ASK_PRICE",,
};
string StringVarGetValue(string name)
{
return (StrListGetVar(StrList, name));
}
bool StringVarSetValue(string name, string value)
{
return (StrListSetVar(StrList, name, value));
}
void DoSpeech()
{
string str;
UpdateVars();
str = StringReplaceVar(Format);
SpeechText(str, SPEECH_NATIVE);
LastSpeakTime = GetTickCount();
if (LogMessage) Print (str);
return;
}
double GetCurrPrice()
{
double p;
if (UseBid) {
p = Bid;
} else {
p = Ask;
}
return (p);
}
void UpdateVars()
{
StringVarSetValue("BID_PRICE", DoubleToStr(Bid, Digits));
StringVarSetValue("ASK_PRICE", DoubleToStr(Ask, Digits));
StringVarSetValue("PRICE", DoubleToStr(GetCurrPrice(), Digits));
int n = MathPow(10, Digits);
double diff;
double p = GetCurrPrice();
string add, adddir;
diff = MathAbs(p*n-LastPrice*n);
if (diff >= SpeakDelta && SpeakDelta != 0) {
if (p > LastPrice) {
adddir = "上涨";
} else if (p < LastPrice) {
adddir = "下跌";
}
add =DoubleToStr(diff,0) + "点";
} else {
adddir = "";
add = "";
}
LastPrice = p;
StringVarSetValue("ADD_DIR", adddir);
StringVarSetValue("ADD", add);
return;
}
void InitVars()
{
StringVarSetValue("SELL_CURR", GetSymbolCurrency(true));
StringVarSetValue("BUY_CURR", GetSymbolCurrency(false));
if (UseBid) {
StringVarSetValue("ACTION", "买入");
} else {
StringVarSetValue("ACTION", "卖出");
}
return;
}
//+------------------------------------------------------------------+
//| expert initialization function |
//+------------------------------------------------------------------+
int init()
{
//----
LastPrice = GetCurrPrice();
LastSpeakTime = 0;
if (InitSpeak) {
string str;
str = "开始进行" + GetSymbolName(Symbol()) + "的自动报价";
str = str + "当前价格为" + DoubleToStr(LastPrice, Digits);
SpeechText(str, SPEECH_NATIVE);
}
InitVars();
//DoSpeech();
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);
if (MathAbs(GetTickCount() - LastSpeakTime) < SpeakInterval * 1000) {
return (0);
}
double p = GetCurrPrice();
if ((p >= Range1Min && p <= Range1Max) || (p >= Range2Min && p <= Range2Max)) {
DoSpeech();
}
//----
return(0);
}
//+------------------------------------------------------------------+
韬客社区www.talkfx.co
发表于:2005-11-21 10:37只看该作者
80楼
多谢 !!!
程序写的很好!
[ 本帖最后由 presentation 于 2005-11-21 18:39 编辑 ]
韬客社区www.talkfx.co