Бета-версия платформы MetaTrader 5 build 1910: Свободное перетаскивание графиков и .Net библиотеки в MQL5 - страница 12

 
Andrey Voytenko:

Обратите пожалуйста внимание на это баг: no history data



Файлы для воспроизведения ошибки здесь https://www.mql5.com/ru/forum/1111/page2304#comment_8930335

А если выставить валюту депозита USD, то тоже будет no history data?

Andrey Voytenko:

Перепробовал разные настройки в тестере, поведение не меняется.

Была такая же проблема, после изменения даты тестировния всё заработало. Затем при возврате к прежней дате, тоже работало.
 
Slava:

Аха. Попытались сделаать рационально. Сходу не получилось.

Бывают случаи, когда ExpertRemove может "поломать" загруженную версию эксперта. И все эти случаи однозначно проидентифицировать сложно. Поэтому вернулись к старой практике - после ExpertRemove загружать эксперта заново

Смотрю, что Incorrect-выходы починили. Но в чем принципиальное отличие от ExpertRemove - не пониманию. Могли бы Вы разъяснить, что происходит на каждом проходе пачки заданий Агента и как на это влияет ExpertRemove?


ЗЫ Сломанные проходы так и не подсвечиваются, к сожалению.

 

ExpertRemove выставляет стоп-флаг и говорит терминалу/тестеру что эксперт должен быть загашен как можно быстрее. Если в эксперте после вызова ExpertRemove есть бесконечный цикл без проверки IsStopped, то загруженный код точно будет испорчен. На глобальной инициализации что-то может быть недоинициализировано - опять код будет испорчен.

В тестере можно, конечно, дождаться окончания выполнения глобальной инициализации, либо OnInit, OnTick etc, но тут могут возникнуть вопросы какого фига эксперт не завершился сразу? Поэтому поведение, как в терминале.

 
Slava:

ExpertRemove выставляет стоп-флаг и говорит терминалу/тестеру что эксперт должен быть загашен как можно быстрее. Если в эксперте после вызова ExpertRemove есть бесконечный цикл без проверки IsStopped, то загруженный код точно будет испорчен. На глобальной инициализации что-то может быть недоинициализировано - опять код будет испорчен.

В тестере можно, конечно, дождаться окончания выполнения глобальной инициализации, либо OnInit, OnTick etc, но тут могут возникнуть вопросы какого фига эксперт не завершился сразу? Поэтому поведение, как в терминале.

Спасибо за развёрнутый ответ! Получил информацию, которой не знал.

 
Slava:

ExpertRemove выставляет стоп-флаг и говорит терминалу/тестеру что эксперт должен быть загашен как можно быстрее. Если в эксперте после вызова ExpertRemove есть бесконечный цикл без проверки IsStopped, то загруженный код точно будет испорчен. На глобальной инициализации что-то может быть недоинициализировано - опять код будет испорчен.

В тестере можно, конечно, дождаться окончания выполнения глобальной инициализации, либо OnInit, OnTick etc, но тут могут возникнуть вопросы какого фига эксперт не завершился сразу? Поэтому поведение, как в терминале.

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

 
fxsaber:

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

Вы видели когда нибудь в логе эксперта/тестера запись "abnormal termination"? Это и есть последствия порчи исполняемого кода.

 
Slava:

Вы видели когда нибудь в логе эксперта/тестера запись "abnormal termination"? Это и есть последствия порчи исполняемого кода.

Видел. Что такое "порча" исполняемого кода? Думаю, все таки терминологическое непонимание. Т.к. не укладывает в голове, как можно испортить исполняемый код.

 
fxsaber:

Видел. Что такое "порча" исполняемого кода? Думаю, все таки терминологическое непонимание. Т.к. не укладывает в голове, как можно испортить исполняемый код.

Снятие программ из Таск менеджера делали?

Хотели бы вы после этого передать управление такому коду или перезапустили бы от греха подальше? Вот и у нас так - нам приходится прерывать выполнение, чаще всего зацикленное.

Код в данном случае - это не просто исполнимый код, но и масса блоков данных и различных кешей, которые явно не в консистентном состоянии после принудительной остановки. Единственно правильный подход - рестарт с нуля.
 
Renat Fatkhullin:

Снятие программ из Таск менеджера делали?

Спасибо за аналогию, стало значительно яснее. 

Хотели бы вы после этого передать управление такому коду или перезапустили бы от греха подальше? Вот и у нас так - нам приходится прерывать выполнение, чаще всего зацикленное.

Что имеется под словом "код"? Понимаю так, что пришла пачка заданий на Агент. Агент один раз распаковывает EX5 и хранит нативный код, как начальное состояние для каждого прохода пачки, вне зависимости, завершился аварийно проход перед ним или нет.

 
fxsaber:

Спасибо за аналогию, стало значительно яснее. 

Что имеется под словом "код"? Понимаю так, что пришла пачка заданий на Агент. Агент один раз распаковывает EX5 и хранит нативный код, как начальное состояние для каждого прохода пачки, вне зависимости, завершился аварийно проход перед ним или нет.

Код в данном случае - это не просто исполнимый код, но и масса блоков данных и различных кешей, которые явно не в консистентном состоянии после принудительной остановки.

ExpertRemove не для игр с оптимизацией рестартов придуман.
Причина обращения: