Особенности языка mql5, тонкости и приёмы работы - страница 71

 

fxsaber:

Обсуждение статьи "Визуализируем оптимизацию торговой стратегии в MetaTrader 5"

fxsaber, 2018.02.22 08:39

Во фрейм-режиме OnInit, OnDeinit, OnTick, OnTrade, OnTradeTransaction и OnTimer игнорятся. Только OnChartEvent пашет.

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

Откуда такая безапелляционная уверенность? :-)

 
Dennis Kirichenko:

Откуда такая безапелляционная уверенность? :-)

Из практики, вестимо.

 

Тогда вопрос. Фрейм-режим - это режим, который в общем относится к Тестированию или нет?

 
Dennis Kirichenko:

Тогда вопрос. Фрейм-режим - это режим, который в общем относится к Тестированию или нет?

Косвенно, относится. Просто в этом режиме советник может быть запущен в Терминале только самим Тестером.

 

Хорошо. А если в советнике есть обработчик OnTick(), то что, он не будет работать во фрейм-режиме?

Имхо, тут нужно уточнить, что обработчики фреймов выполняются самим Терминалом, а всё что является обычным для тестирования (OnTick(), OnTrade(), etc. ), передаётся Агентам тестирования. Отсюда, фрейм-режим - это особенный составной режим тестирования, где Агенты интерактивно взаимодействуют с Терминалом.

Вот как-то так...


Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Особенности языка mql5, тонкости и приёмы работы

fxsaber, 2018.02.22 09:22

Косвенно, относится. Просто в этом режиме советник может быть запущен в Терминале только самим Тестером.


А почему косвенно? Например обычную оптимизацию тоже можно запустить только в Тестере.  

 
Dennis Kirichenko:

Хорошо. А если в советнике есть обработчик OnTick(), то что, он не будет работать во фрейм-режиме?

Имхо, тут нужно уточнить, что обработчики фреймов выполняются самим Терминалом, а всё что является обычным для тестирования (OnTick(), OnTrade(), etc. ), передаётся Агентам тестирования. Отсюда, фрейм-режим - это особенный составной режим тестирования, где Агенты интерактивно взаимодействуют с Терминалом.

Вот как-то так...



А почему косвенно? Например обычную оптимизацию тоже можно запустить только в Тестере.  

Потому что это боевой советник даже во фрейм-режиме. Именно по этой причине нужно в OnChartEvent проверять фрейм-флаг, иначе вот такая беда произойти может

sinput uint Range = 100;

#define SETRANGE(A, START, STEP, END) ParameterSetRange(#A, true, A, START, STEP, END)

void OnTesterInit() { SETRANGE(Range, 0, 1, Range); }

void OnTesterDeinit() {}

void OnChartEvent(const int id,const long& lparam,const double& dparam,const string& sparam)
{
  static const bool IsFrame = MQLInfoInteger(MQL_FRAME_MODE);
  
//  if (!IsFrame) // без этой проверки Терминал (не только Агент) начнет выставлять ордера на реальном счете во время запуска Оптимизации
    OrderSend(_Symbol, OP_BUY, 1, Ask, 100, 0, 0);
}


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

 
fxsaber:

Потому что это боевой советник даже во фрейм-режиме. Именно по этой причине нужно в OnChartEvent проверять фрейм-флаг, иначе вот такая беда произойти может

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

Однако! Если это так, то, имхо, это некорректная работа советника в режиме Тестирования...

Вы большой молодец, что заметили!

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Ошибки, баги, вопросы

fxsaber, 2018.02.27 08:01

Вывод про советники на OBJ_CHART

  • Работают OnInit, OnDeinit, глобальный конструктор/деструктор и OnChartEvent.
  • Не работают OnTimer, OnTick и OnBookEvent.
  • Из евентов ловит только CHARTEVENT_CHART_CHANGE и кастомные.
  • Через OnChartEvent+EventChartCustom советника можно создавать "события" для OnTimer и OnTick, но не OnBookEvent.

Поэтому возможно одним подключения соответствующего инклудника (пример) сделать любой торговый советник полноценным - чтобы работал (OnTimer + OnTick) на любом виде чарта.

ЗЫ OBJ_CHART определяется через CHART_IS_OBJECT.

 

Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий

Обсуждение статьи "Управляемая оптимизация: метод отжига"

fxsaber, 2018.02.28 08:45

tester_file считывается только в том случае, если он существовал (содержимое не важно) на момент компиляции.

Если mq5 скомпилирован, когда не было соответствующего файла, то даже дальнейшее его наличие не будет восприниматься в EX5.

Поэтому если в OnTesterInit генерируете файл для tester_file, то убедитесь, что компилировали советник при наличии хотя бы пустого передаваемого файла.

При наличии директивы tester_file кеши Оптимизатора не работают.

 
И включать файлы из папки Files_Common через tester_file нельзя...
Причина обращения: