Один и тот же советник может работать в двух режимах: фреймовый и обычный.
OnInit - функция обычного режима работы советника. Поэтому в нем Frame-функции не могут быть задействованы.
Почти все On-функции разделены по режимам. Но, например, OnChartEvent отновится к обоим. Поэтому при оптимизации нужно быть аккуратным
Форум по трейдингу, автоматическим торговым системам и тестированию торговых стратегий
Особенности языка mql5, тонкости и приёмы работы
fxsaber, 2018.02.22 09:47
Потому что это боевой советник даже во фрейм-режиме. Именно по этой причине нужно в 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); }
Похоже, это впервые озвучивается. А значит, Маркет-продукты создают неприятную уязвимость... Причем обойти эту уязвимость очень сложно. Обнаружить - аналогично.
Спасибо, что подсказали. Получается, я не могу использовать фреймы, чтобы как-то менять логику работы программы при очередном проходе при оптимизации (изменить ее логично было бы именно в OnInit)?
Ведь OnTesterInit() вызывается только один раз в начале, так?
Спасибо, что подсказали. Получается, я не могу использовать фреймы, чтобы как-то менять логику работы программы при очередном проходе при оптимизации (изменить ее логично было бы именно в OnInit)?
Ведь OnTesterInit() вызывается только один раз в начале, так?
Проходы вычисляются параллельно, отсюда и такая архитектура. Если хотите влиять на проходы, нужно делать последовательное выполнение проходов - оставить только один включенный Агент.
На тему влияния есть статья.
- www.mql5.com
- Бесплатные приложения для трейдинга
- 8 000+ сигналов для копирования
- Экономические новости для анализа финансовых рынков
Вы принимаете политику сайта и условия использования
При тестировании сохраняю некоторые результаты оптимизации во фреймах, чтобы потом использовать их при последующих проходах, но не получается их прочитать. При этом файл с фреймами Exp1...mqd создается.
Вот в таком коде в OnInit
FrameFilter возвращает ошибку ERR_FUNCTION_NOT_ALLOWED.
Кто-нибудь сталкивался? Подскажите, пожалуйста, что не так.
(Кстати, OnTesterInit() не вызывается вообще, что тоже, мне кажется, странно)