市场信息(价差)returns 0 当针对不同的交易品种执行时

Market info (spread) returns 0 when executed for different symbol

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

我的代码:
我正在遍历所有符号以获得它们的点差。

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

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

测试环境:
我正在使用策略测试器又名回测器,它必须 设置为特定交易品种 。在我的例子中,我将它设置为 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 的价差,我已将策略测试器设置为使用该品种。是否有机会获得与我为测试器设置的不同交易品种的点差?

我试过用不同的符号。我总是得到所选一个的点差,但所有其他点差都没有。

非常感谢!

MT4:

只允许 single-currency 测试。允许进行多时间框架测试。 实时没有限制(例如,您可以计算美元指数并将其显示在指标 window 中)。

MT5:

完全没有限制,单一货币和multi-currency测试都可以,实时相同。不要忘记在测试开始时为您需要的所有货币选择 bool result=SymbolSelect( symbol[i], true);。如果 result 为假 - 很可能您忘记了后缀或打字错误。 在视觉上,您将拥有主图表(在测试器中选择的那个 - 符号和 Tf),但其他图表在测试器的下一个图表中可用。

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