对不同的交易品种执行时,市场信息(价差)返回0

时间:2019-07-14 13:26:32

标签: mql4 metatrader4

我正在使用metatrader4在Windows 10上编写专家顾问。

我的代码
我正在遍历所有符号以获取价差。

// for(i...
string name = SymbolName(i, false)
double spread = MarketInfo(name, MODE_SPREAD);

Print("Symbol " + name + ": " + DoubleToStr(spread, 4));

测试环境:
我使用的是Strategy-Tester aka backtester,必须将其设置为特定的符号。就我而言,我将其设置为AUDUSD

我的意外输出(日志):

// everything else is also 0.0000
Symbol EUREUC: 0.0000
Symbol EURCHF: 0.0000
Symbol EURCAD: 0.0000
Symbol EURAUD: 0.0000
Symbol CHFJPY: 0.0000
Symbol CADJPY: 0.0000
Symbol CADCHF: 0.0000
Symbol AUDUSD: 24.0000
Symbol AUDNZD: 0.0000
Symbol AUDJPY: 0.0000
Symbol AUDCHF: 0.0000
Symbol AUDCAD: 0.0000

问题:
如您所见,我得到的唯一价差是AUDUSD的价差,这是我设置的策略测试程序可以使用的符号。除了我将测试仪设置的符号以外,还有没有机会获得不同符号的价差?

我尝试使用不同的符号进行尝试。我总是得到所选股票的点差,但没有得到其他所有股票的点差。

非常感谢您!

1 个答案:

答案 0 :(得分:1)

MT4:

仅允许单货币测试。允许进行多时间框架测试。 实时性没有限制(例如,您可以计算美元指数并将其显示在指标窗口中)。

MT5:

根本没有任何限制,可以同时进行单一货币和多货币测试。测试开始时,请不要忘记bool result=SymbolSelect( symbol[i], true);以获取您需要的所有货币。如果result为假-很可能您忘记了后缀或拼写错误。 在视觉上,您将拥有主图表(在Tester中选择的一个图表-Symbol&Tf),但其他图表在Tester的下一个图表中可用。

从MT4切换到MT5很难吗?取决于。
指标似乎更让人头疼(MT4:数组设置为序列,因此close[0]是当前的bid,MT5:反之亦然,所以time[0]是最早的已知日期);在这种情况下,您需要始终将两个系列都设置为truefalse,并在此设置一些不便之处。
另一个问题可能是,如果您使用MT4指标或库,但没有源代码。恐怕在这种情况下没人会帮助您。
如果使用DLL,请记住MT4是86x-,MT5是基于64x的体系结构。
对于专家顾问,可以从官方网站的代码库部分下载fxsaber的特殊库MT4Orders.mqh,然后以MT4样式编写。