Как в MQL5 сделать возобновление работы советника после паузы? - страница 2

 
Stanislav Korotky #:

Уже же есть такая кнопка - называется Разрешить автоторговлю на конкретном графике. В MQL5 коде советник может (а в принципе - должен) проверять эту опцию MQL_TRADE_ALLOWED - её вставить вместо проверки if(Stop).

Это просто опция проверки, с помощью нее никак нельзя приостановить, а потом возобновить работу советника из кода.

 
Можно добавить параметр-плацебо, к-рый ничего не значит и ни на что не влияет. Если нужно переинициализировать советник, то меняем значение этого параметра в настройках... Но имхо самый изящный способ подсказал выше Артём, с диалоговым окном.
 
Denis Kirichenko #:
Можно добавить параметр-плацебо, к-рый ничего не значит и ни на что не влияет. Если нужно переинициализировать советник, то меняем значение этого параметра в настройках... Но имхо самый изящный способ подсказал выше Артём, с диалоговым окном.

Я рассмотрела этот вариант. Но заказчику надо, чтобы торговля советником просто останавливалась при просадке и потом через какое то время можно было ее продолжить.  Получется, что все это время диалоговое окно должно быть открыто. Мне кажется изящнее просто добавить кнопу на график и по событию нажатия кнопки возобновлять торговлю советником.

Сейчас сделала так, что советник просто удаляется с графика после просадки, что тоже не самый изящный вариант )

 
Elena Baranova #:

Я рассмотрела этот вариант. Но заказчику надо, чтобы торговля советником просто останавливалась при просадке и потом через какое то время можно было ее продолжить.  Получется, что все это время диалоговое окно должно быть открыто. Мне кажется изящнее просто добавить кнопу на график и по событию нажатия кнопки возобновлять торговлю советником.

Сейчас сделала так, что советник просто удаляется с графика после просадки, что тоже не самый изящный вариант )

Потом вариант с кнопкой будет работать и в Тестере в визуальном режиме, если я не ошибаюсь, а вариант с диалоговым окном -нет

 
Denis Kirichenko #:
Можно добавить параметр-плацебо, к-рый ничего не значит и ни на что не влияет. Если нужно переинициализировать советник, то меняем значение этого параметра в настройках... Но имхо самый изящный способ подсказал выше Артём, с диалоговым окном.

MessageBox это самый дерьмовый вариант из всего спектра возможных

его вообще можно использовать только в Services и только под подписку "осведомлены о последствиях"

 
Maxim Kuznetsov #:

MessageBox это самый дерьмовый вариант из всего спектра возможных

его вообще можно использовать только в Services и только под подписку "осведомлены о последствиях"

В целом вы правы, но учитывая это

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

Как в MQL5 сделать возобновление работы советника после паузы?

Elena Baranova, 2023.11.07 16:16

Нужно остановить советник после просадки, не удаляя его с графика, а потом возобновить его работу нажав на ОК в окне запуска.

Останавливаю работу советника, устанавливаю значение флага Stop = true и в начале OnTick() пишу условие:

if (Stop) return;

Соответственно для возобновления работы советника в OnInit() устанавливаю значение флага  Stop = false. 

В МТ4 это работало, насколько я помню.

Но В МТ5 обнаружила, что если просто нажать на OK в окне запуска советника, не меняя его параметры, то функция OnInit() не вызывается и соответсьвенно флаг Stop остается равным true.

Не могу понять, как в МТ5 возобновить работу советника, не меняя его параметры, а просто нажав на OK. Был перерыв в программировании на MQL, не могу сообразить )

Буду благодарна за подсказку ) 

ничего страшного.

А вот если запретить открытие новых позиций\ордеров, а отслеживание или трейлинг надо оставить, то это катастрофа.

 
Alexey Viktorov #:

В целом вы правы, но учитывая это

ничего страшного.

А вот если запретить открытие новых позиций\ордеров, а отслеживание или трейлинг надо оставить, то это катастрофа.

MessageBox выкидывает системное окошко, и пока оно открыто советник (это отдельная нить) не получит новых сообщений OnXXX, но это не значит что их нет.

А вся система в целом (терминал) будет вынуждена эти сообщения/события к нему как-то чистить и слегка буферизовать.

---

MessageBox - удобное отладочное средство. Но в продакте его не должно быть. 

 
Elena Baranova #:

Это просто опция проверки, с помощью нее никак нельзя приостановить, а потом возобновить работу советника из кода.

В зависимости от того, включена эта опция или нет, советник может включать или отключать торговлю на ходу, без всяких диалогов - и разумеется это из кода происходит, только не в OnInit, а в торговом событии (OnTick, например). Это та самая кнопка, которую вы дополнительно собираетесь делать.

 
Elena Baranova:

Нужно остановить советник после просадки, не удаляя его с графика, а потом возобновить его работу нажав на ОК в окне запуска.

Останавливаю работу советника, устанавливаю значение флага Stop = true и в начале OnTick() пишу условие:

if (Stop) return;

Соответственно для возобновления работы советника в OnInit() устанавливаю значение флага  Stop = false. 

В МТ4 это работало, насколько я помню.

Но В МТ5 обнаружила, что если просто нажать на OK в окне запуска советника, не меняя его параметры, то функция OnInit() не вызывается и соответсьвенно флаг Stop остается равным true.

Не могу понять, как в МТ5 возобновить работу советника, не меняя его параметры, а просто нажав на OK. Был перерыв в программировании на MQL, не могу сообразить )

Буду благодарна за подсказку ) 

отслеживать просадку

и делов то

 

То есть просто не разрешать торговые операции

Зачем весь советник останавливать,? пусть работает

Флаг TRADE я обычно использую

if(TRADE==1)

{

...торговые операции

}

Причина обращения: