Новая версия платформы MetaTrader 5 build 3180: Векторы и матрицы в MQL5 и повышение удобства работы - страница 31

 
Aliaksandr Hryshyn #:

Ошибочная ссылка, вот правильная:

https://www.mql5.com/ru/forum/387081/page23#comment_27521647

Визуализация советника Test2(клик для анимации). Советник ничего не делает, только использует индикатор From.

Индикатор From на каждом баре копирует по 50 баров со стандартного индикатора MACD, т.е. значения должны полностью повторяться.

На анимации видно, что обновление происходит только каждый 12 бар

Смотрим код индикатора. Вернее его инпуты

input ENUM_TIMEFRAMES period=PERIOD_CURRENT;
input int InpFastEMA=12;               // Fast EMA period
input int InpSlowEMA=26;               // Slow EMA period
input int InpSignalSMA=9;              // Signal SMA period
input ENUM_APPLIED_PRICE InpAppliedPrice=PRICE_OPEN; // Applied price

Смотрим вызов этого индикатора

int OnInit()
  {
   MqlParam params[5];
   params[0].type=TYPE_STRING;
   params[0].string_value="From.ex5";
   params[1].type=TYPE_INT;
   params[1].integer_value=InpFastEMA;
   params[2].type=TYPE_INT;
   params[2].integer_value=InpSlowEMA;
   params[3].type=TYPE_INT;
   params[3].integer_value=InpSignalSMA;
   params[4].type=TYPE_INT;
   params[4].integer_value=InpAppliedPrice;

   ind_from=IndicatorCreate(symbol,period,IND_CUSTOM,5,params);
   return INIT_SUCCEEDED;
  }

Что мы видим?

Первому параметру индикатора передаётся значение InpFastEma. Первый параметр индикатора - period, которому передаётся значение 12.

Новая версия платформы MetaTrader 5 build 3180: Векторы и матрицы в MQL5 и повышение удобства работы
Новая версия платформы MetaTrader 5 build 3180: Векторы и матрицы в MQL5 и повышение удобства работы
  • 2022.02.10
  • www.mql5.com
В пятницу 28 января 2022 года будет выпущена обновленная версия платформы MetaTrader 5...
 
Aliaksandr Hryshyn #:

Тест запускается на M1, соответственно и передаётся M1


Ещё раз.

Первому параметру индикатора From передаётся значение InpFastEma

В индикаторе From первый параметр - period.

Неважно, на каком таймфрейме запускается индикатор From. Важно, как он вызывает MACD

   ind_from=IndicatorCreate(symbol,period,IND_CUSTOM,5,params);

На текущем символе и периоде 12

Уберите из инпутов period

input ENUM_TIMEFRAMES period=PERIOD_CURRENT;

и всё встанет на свои места


PS либо поменяйте код вызова из эксперта Test2

int OnInit()
  {
   MqlParam params[6];
   params[0].type=TYPE_STRING;
   params[0].string_value="From.ex5";
   params[1].type=ENUM_TIMEFRAMES;
   params[1].integer_value=period;
   params[2].type=TYPE_INT;
   params[2].integer_value=InpFastEMA;
   params[3].type=TYPE_INT;
   params[3].integer_value=InpSlowEMA;
   params[4].type=TYPE_INT;
   params[4].integer_value=InpSignalSMA;
   params[5].type=TYPE_INT;
   params[5].integer_value=InpAppliedPrice;

   ind_from=IndicatorCreate(symbol,period,IND_CUSTOM,6,params);
   return INIT_SUCCEEDED;
  }
 

Верно, спасибо за потраченное время.

Скажите, а можно исправить последовательность вызова индикаторов в случае, когда вызываемый индикатор имеет больший таймфрейм?

 
Aliaksandr Hryshyn #:

Советник Test2 - пустышка, просто загружает индикатор и копирует данные

Индикатор From - использует индикатор MACD визуализируя два буфера по 50 баров.

Везде одинаковый период(пускай будет M1), но обновление данных происходит только каждые 12 баров.

Есть такое для MACD:

А это в исходнике MACD :

Несоответствие видно при прогоне советника  Test2 в тестере стратегий при визуализации и логировании(по 3 последних значения двух буферов):

Тестирование индикатора  From отдельно происходит нормально, всё соответствует MACD.

У вас ошибка в коде советника. Добавил пропущенный параметр, значения индикаторных буферов сходятся


Файлы:
 
Aliaksandr Hryshyn #:

Верно, спасибо за потраченное время.

Скажите, а можно исправить последовательность вызова индикаторов в случае, когда вызываемый индикатор имеет больший таймфрейм?

Нет

Таков порядок обхода таймфреймов в потоке обработки символа

 
Rashid Umarov #:

У вас ошибка в коде советника. Добавил пропущенный параметр, значения индикаторных буферов сходятся


Я уже понял)

 
Rashid Umarov #:
К сожалению, нет времени. Вы должны разобраться самостоятельно. Либо пусть смотрит тот, кто писал код.

Понимаю, что нет времени. Кто писал - его уже нет на портале, к сожалению.

Не знаю в общем, что пока делать - полная апатия.

 
Slava #:

Таков порядок обхода таймфреймов в потоке обработки символа

Почему, если раньше такой вот индикатор, при повторном вызове отдавал новые расчетные данные, а теперь не отдает? Точней отдает только в визуальном режиме тестирования.

 
Aleksey Vyazmikin #:

Почему, если раньше такой вот индикатор, при повторном вызове отдавал новые расчетные данные, а теперь не отдает? Точней отдает только в визуальном режиме тестирования.

Вы слышали что-нибудь о #property tester_everytick_calculate?

https://www.mql5.com/ru/docs/basis/preprosessor/compilation

Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
Документация по MQL5: Основы языка / Препроцессор / Свойства программ (#property)
  • www.mql5.com
Свойства программ (#property) - Препроцессор - Основы языка - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Slava #:

Вы слышали что-нибудь о #property tester_everytick_calculate?

https://www.mql5.com/ru/docs/basis/preprosessor/compilation

Да, слышал.

Но, согласитесь, логично, если в прошлой (пусть последней 2021 года - точную версию не помню) версии все работало, а потом перестало, то дело не в этой настройке.

Да, и потом, она не помогает.