Принудительно остановить советник в OnTick()

Я делаю советник для backTest.

Обычно программа работает так.

  1. Ontick() называется до конца определенного периода.
  2. 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(){...}-ручник, не имеющий возможности выйти из.

Другие вопросы по тегам