Принудительно остановить советник в OnTick()
Я делаю советник для backTest.
Обычно программа работает так.
Ontick()
называется до конца определенного периода.OnDeinit()
OnTester()
называются.
Однако сейчас я хочу остановиться в OnTick()
и перейти к 2).
как это,
void OnTick()
{
if (cnt > 100) {OnTick();OnTester();//Finish program here}
}
Я думаю, что я мог бы остановиться в OnInit()
(чтобы проверить первоначальную настройку пользователя и т. д.). Однако могу ли я остановить EA в OnTick()
???
Итак, я хочу сделать следующее:
Вызов OnTester()
изнутри OnTick()
и закончить программу.
1 ответ
Да, это также возможно:
Синтаксис:
void ExpertRemove();
Советник не останавливается сразу, как вы звоните
ExpertRemove();
устанавливается только флаг остановки работы советника. То есть любое следующее событие не будет обработано,OnDeinit()
будет вызван и советник будет выгружен и удален с графика.
Итак OnDeinit(){...}
- обработчик активируется "автоматически", один раз при первом вызове ExpertRemove()
Системная функция подняла флаг предварительного завершения.
Если ваша логика требует, поместите этот вызов в "вручную" OnTester()
обработчик, полагаясь на то, что он вызывается, как указано вышеif( cnt > 100 ) { OnTester(); // having the "killer"-ExpertRemove() there ... }
и вы сделали.
Вы могли заметить, там не должно быть опубликовано OnTick()
-взывать внутрь if(){...}
-code-block, так как он никогда не позволил бы выполнению кода достигнуть предварительно записанного вручную вызова OnTester()
, но останется в смертоносном бесконечном цикле бесконечного погружения вручную повторных входов в OnTick(){...}
-ручник, не имеющий возможности выйти из.