Strategy Tester 中的未知符号,但 Metatrader 中的实时数据不是
Unknown Symbols in Strategy Tester but not Live Data in Metatrader
在策略测试器中有许多我无法 select 或无法从我的智能交易系统 (EA) 中获取信息的交易品种。事实上,MQL4 本身似乎存在错误。我正在尝试在我的 EA 中自动买卖,重要的是我能够从其他交易品种获取交易品种信息以计算我需要的正确手数。这在策略测试器中似乎是不可能的。
以下 EA 在调试器和策略测试器(均使用 GBPCAD 图表)中 运行 时提供不同的结果。
int OnInit(){
if (!SymbolSelect("USDCAD", true))
Print("Couldn't select USDCAD");
if (SymbolInfoInteger("USDCAD", SYMBOL_VISIBLE))
Print("USDCAD visible");
else
Print("USDCAD isn't visible");
double e;
if (SymbolInfoDouble("USDCAD", SYMBOL_ASK, e))
Print("It worked");
else
Print("It didn't work, ", GetLastError());
return(INIT_SUCCEEDED);
}
在实时数据的调试器上,打印如下:
2020.08.23 11:25:20.011 Exit Backtester GBPCAD,Daily: USDCAD visible
2020.08.23 11:25:20.011 Exit Backtester GBPCAD,Daily: It worked
在 2017 年初附近的策略测试器上,打印了以下内容:
2020.08.23 11:26:01.200 2017.02.09 00:00:00 Exit Backtester GBPCAD,Daily: Couldn't select USDCAD
2020.08.23 11:26:01.200 2017.02.09 00:00:00 Exit Backtester GBPCAD,Daily: USDCAD isn't visible
2020.08.23 11:26:01.200 2017.02.09 00:00:00 Exit Backtester GBPCAD,Daily: It didn't work, 4106
其中错误代码 4106 according to the documentation 指出该交易品种未 select 在市场报价中编辑或未在“可用交易品种”列表中找到。
但是,运行下面的代码:
void PrintSymbols(){
for (int i = 0; i < SymbolsTotal(true); ++i){
Print(i, " ", SymbolName(i, true));
}
}
int OnInit(){
PrintSymbols();
return(INIT_SUCCEEDED);
}
在两种情况下打印相同的结果,其中包括 USDCAD:
2020.08.23 11:38:03.235 Exit Backtester GBPCAD,Daily: 18 USDCAD
因此 SymbolName 证明 USDCAD 可用,而 SymbolSelect、SymbolInfoInteger 和 SymbolInfoDouble 证明不可用。
为什么会这样?
我不相信这是可能的。策略测试器只从当前图表加载分时数据,而不是另一个市场的数据。因此,所有其他市场都不存在,因此无法选择。
在策略测试器中有许多我无法 select 或无法从我的智能交易系统 (EA) 中获取信息的交易品种。事实上,MQL4 本身似乎存在错误。我正在尝试在我的 EA 中自动买卖,重要的是我能够从其他交易品种获取交易品种信息以计算我需要的正确手数。这在策略测试器中似乎是不可能的。
以下 EA 在调试器和策略测试器(均使用 GBPCAD 图表)中 运行 时提供不同的结果。
int OnInit(){
if (!SymbolSelect("USDCAD", true))
Print("Couldn't select USDCAD");
if (SymbolInfoInteger("USDCAD", SYMBOL_VISIBLE))
Print("USDCAD visible");
else
Print("USDCAD isn't visible");
double e;
if (SymbolInfoDouble("USDCAD", SYMBOL_ASK, e))
Print("It worked");
else
Print("It didn't work, ", GetLastError());
return(INIT_SUCCEEDED);
}
在实时数据的调试器上,打印如下:
2020.08.23 11:25:20.011 Exit Backtester GBPCAD,Daily: USDCAD visible
2020.08.23 11:25:20.011 Exit Backtester GBPCAD,Daily: It worked
在 2017 年初附近的策略测试器上,打印了以下内容:
2020.08.23 11:26:01.200 2017.02.09 00:00:00 Exit Backtester GBPCAD,Daily: Couldn't select USDCAD
2020.08.23 11:26:01.200 2017.02.09 00:00:00 Exit Backtester GBPCAD,Daily: USDCAD isn't visible
2020.08.23 11:26:01.200 2017.02.09 00:00:00 Exit Backtester GBPCAD,Daily: It didn't work, 4106
其中错误代码 4106 according to the documentation 指出该交易品种未 select 在市场报价中编辑或未在“可用交易品种”列表中找到。
但是,运行下面的代码:
void PrintSymbols(){
for (int i = 0; i < SymbolsTotal(true); ++i){
Print(i, " ", SymbolName(i, true));
}
}
int OnInit(){
PrintSymbols();
return(INIT_SUCCEEDED);
}
在两种情况下打印相同的结果,其中包括 USDCAD:
2020.08.23 11:38:03.235 Exit Backtester GBPCAD,Daily: 18 USDCAD
因此 SymbolName 证明 USDCAD 可用,而 SymbolSelect、SymbolInfoInteger 和 SymbolInfoDouble 证明不可用。
为什么会这样?
我不相信这是可能的。策略测试器只从当前图表加载分时数据,而不是另一个市场的数据。因此,所有其他市场都不存在,因此无法选择。