我在使用iMA函数的MQL4中开发并开始测试EA。基本上,该程序将当前candle的iMA值与前一个candle的iMA值进行比较。当我使用Strategy Tester (每个刻度)测试EA时,我的EA不能正确地打开和关闭交易。我的意思是交易不是在正确的烛光下开始的。在进一步研究后,我注意到,在当前的烛光上,数据窗口和图表中的iMA值是相同的,但它们与“打印”值不同。前一支蜡烛的值是正确的。当我在谷歌上搜索时,我发现2008年有人报告了完全相同的问题。在2008年,似乎没有一个解决方案。现在我们已经进入了一个新的十年,我想知道是否有解决方案?有没有人知道MQL5 Strategy Tester中的iMA是否可以工作?
double MAEMACurrent = iMA(NULL,0,3,0,MODE_EMA,PRICE_CLOSE,0);
double MAEMAPrevious = iMA(NULL,0,3,0,MODE_EMA,PRICE_CLOSE,1);
double MASlowEMACurrent = iMA(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,0);
double MASlowEMAPrevious = iMA(NULL,0,10,0,MODE_EMA,PRICE_CLOSE,1);
打印(“MAEMACurrent”+MAEMACurrent+“MAEMAPrevious”+ MAEMAPrevious +“MASlowEMACurrent”+ MASlowEMACurrent +“MASlowEMAPrevious”+ MASlowEMAPrevious);
图表和数据窗口:
MAEMACurrent: 1.95552
MAEMAPrevious: 1.95572
MASlowEMACurrent: 1.95201
MASlowEMAPrevious: 1.95097
打印值:
MAEMACurrent: 1.95538
MAEMAPrevious: 1.95572
MASlowEMACurrent: 1.951086
MASlowEMAPrevious: 1.950972
从上面的示例中可以看出,MAEMACurrent和MASlowEMACurrent的“图表和数据窗口”值与“打印值”不匹配。
这是我第一次提问,所以如果我遗漏了什么,或者我没有遵循正确的提问协议,请让我知道。
发布于 2021-10-12 11:17:03
首先,始终使用"NormalizeDouble“函数将值四舍五入到适当数量的分数。在您的例子中,如果分数后面只有5位数字,请使用以下代码将"MASlowEMACurrent“和"MASlowEMAPrevious”的值四舍五入为5位:
double dNormalizedValue = NormalizeDouble(MASlowEMACurrent, 5);
此外,切勿将图表上正在进行的蜡烛的值与指示器或价格函数(如iMA、iClose等)返回的值进行比较。请注意,即使是非常微小的时间差也可能导致两个值的差异。对于其他值(在您的示例中是前一个值),因为它们都已关闭,并且没有任何变化,所以您可以将图表上的值与函数返回的值进行比较。因此,iMA的工作情况与预期一致。
https://stackoverflow.com/questions/69502698
复制相似问题