iMA неправильно отображается при обратном тестировании

#mql4 #metatrader4 #mql5 #metatrader5

Вопрос:

Я разработал и начал тестировать советник на MQL4, который использует функцию iMA. В основном программа сравнивает значение iMA текущей свечи со значением iMA предыдущей свечи. Когда я тестирую советник с помощью Тестера стратегий (Каждый тик), мой советник неправильно открывает и закрывает сделки. Я имею в виду, что сделка открывается не на правильной свече. При дальнейшем исследовании я заметил, что на текущей свече значение iMA в окне данных и графике одинаковы, но они отличаются от значения «Печать». Значение для предыдущей свечи правильное. Когда я провел поиск в Google, я обнаружил, что кто-то в 2008 году сообщил об этой точно такой же проблеме. В 2008 году, похоже, решения не было. Теперь, когда мы вступаем в новое десятилетие, мне интересно, есть ли решение? Кто — нибудь знает, работает ли iMA в тестере стратегий MQL5?

двойной MAEMACurrent = ИМА(нуль,0,3,0,MODE_EMA,цена закрытия price_close,0);
двойной MAEMAPrevious = ИМА(нуль,0,3,0,MODE_EMA,цена закрытия price_close,1);
двойной MASlowEMACurrent = ИМА(нуль,0,10,0,MODE_EMA,цена закрытия price_close,0);
двойной MASlowEMAPrevious = ИМА(нуль,0,10,0,MODE_EMA,цена закрытия price_close,1);
Печать(«MAEMACurrent» MAEMACurrent «MAEMAPrevious» MAEMAPrevious «MASlowEMACurrent» MASlowEMACurrent «MASlowEMAPrevious» MASlowEMAPrevious);

Окно диаграммы и данных

: Текущее значение: 1.95552 Текущее значение: 1.95572 Текущее значение: 1.95201 Текущее значение: 1.95097

Значение печати

: Текущее значение: 1.95538 Текущее значение: 1.95572 Текущее значение: 1.951086 Текущее значение: 1.950972

Как вы можете видеть из приведенного выше примера, значения «Окно диаграммы и данных» для MAEMACurrent и MASlowEMACurrent не совпадают со значением «Печать».

Это первый раз, когда я задаю вопрос, поэтому, если я что-то пропустил или не следую правильному протоколу для того, чтобы задать вопрос, пожалуйста, дайте мне знать.

Ответ №1:

Во-первых, всегда используйте функцию «Нормализованная двойственность», чтобы округлить значения до нужного числа дробей. В вашем случае, если после дроби осталось всего 5 цифр, используйте следующий код, чтобы округлить значения «MASlowEMACurrent» и «MASlowEMAPrevious» до 5 цифр:

 double dNormalizedValue = NormalizeDouble(MASlowEMACurrent, 5);
 

Кроме того, никогда не сравнивайте значение текущей свечи на графике со значениями, которые возвращаются индикатором или ценовыми функциями, такими как (iMA, iClose и т. Д.). Пожалуйста, обратите внимание, что даже очень небольшая разница во времени может привести к различиям в двух значениях. Для других свечей (в вашем случае предыдущей свечи), так как все они были закрыты и никаких изменений не происходит, поэтому вы можете сравнить значения на графике со значениями, возвращаемыми функциями. Итак, иМА работает так, как и ожидалось.