Запрет торговли советниками. Программная реализация

 
Ситуация такая. Торгую корзинами валют. Одновременно открыто в среднем 20 графиков, к каждому из графиков прикреплён свой советник.
Каждый день возникает ситуация, когда профит по Эквити начинает измеряться 10-15% от депозита. То есть на 3-4-х графиках минус, 3-4 графика в нуле, на остальных графиках (10-15 штук) - небольшой профит, но который даёт плюс "несколько процентов к депозиту". Ни стоп-лоссы, ни тэйк-профиты не отработаны.

Задача. Закрыть одновременно все позиции и сразу же запретить торговлю советниками.

Всё успешно реализовано. Ну, закрытие всех позиций не рассматриваем - это просто. Обсуждаем, как запретить торговлю советниками ЛЮБЫМ способом: отжатием кнопки "автоторговля" в терминале, одновременным закрытием терминалов, одновременным отсоединением всех советников от своих графиков или как-то ещё.

Я реализовал запрет торговли советниками через глобальные переменные так:
- открываем произвольный график и в начале дня прикрепляем к нему советника, анализирующего Эквити и закрывающего все позиции
- если Эквити превысила определённое значение, этот самый "контролирующий" советник изменяет значение глобальной переменной с 1 на 0
- первой строкой во всех моих торгующих советниках прописан if, проверяющий значение глобальной переменной, и если оно равно 0, то происходит простой return, то есть советники продолжают быть прикреплёнными к графикам, но тело не выполняется; кнопка терминала "Автоторговля" не отключена.

Вопрос. Как проще реализовать запрет торговли советниками?
 

Выключить авто- торговлю через win api. Но зачем это вам? У вас ведь:

sdm02808:


Задача. Закрыть одновременно все позиции и сразу же запретить торговлю советниками.

Всё успешно реализовано. 

 

Глобальная переменная которой управляет отдельный советник (полицейский) и проверка состояния этой глобальной переменной в каждом торгующем советнике - это очень хорошее решение. Кстати этот же "полицейский" должен:

  • также закрывать все позиции
  • сбрасывать глобальную переменную (чтобы торговля возобновилась) на следующий день
Преимущество такого подхода: никаких dll, в каждом советнике буквально пару строк - проверка глобальной переменной.

 
Vladimir Karputov:

Глобальная переменная которой управляет отдельный советник (полицейский) и проверка состояния этой глобальной переменной в каждом торгующем советнике - это очень хорошее решение. Кстати этот же "полицейский" должен:

  • также закрывать все позиции
  • сбрасывать глобальную переменную (чтобы торговля возобновилась) на следующий день
Преимущество такого подхода: никаких dll, в каждом советнике буквально пару строк - проверка глобальной переменной.

Спасибо за "очень хорошее решение". Конечно же, "полицейский" закрывает принудительно все позы и выгружается с графика, а на следующий день при запуске возвращает состояние глобальной переменной.

‌Отвечаю, зачем мне нужен второй способ запрета торговли советниками.  Во-первых, "моих" советников много - это получается, что в каждый надо втыкать блок анализа глобальной переменной - можно забыть, да и лишние затраты времени и труда.

Во-вторых, они уже как-бы "готовый продукт". Теперь же приходится опять влезать в исходник и прописывать блок анализа.

В-третьих, возможно использование "чужих" советников без исходного кода.‌

 
Evgeny Belyaev:

Выключить авто- торговлю через win api. Но зачем это вам? У вас ведь:


А не подскажете, где почитать про использование win api? Применительно именно к MQL4
 
sdm02808:
А не подскажете, где почитать про использование win api? Применительно именно к MQL4

Закрыть одновременно все позиции и сразу же запретить торговлю советниками.
Ну, закрытие всех позиций не рассматриваем - это просто.

.‌..

В-третьих, возможно использование "чужих" советников без исходного кода.‌

Закрытие чужих поз при отключенной автоторговле будет Вам та еще задачка.
А включите - эти советники поменяют свою логику и наштампуют кучу новых ... )
 

Я не понял, в чем проблема ?

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

 
sdm02808:
 

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

Во-вторых, они уже как-бы "готовый продукт". Теперь же приходится опять влезать в исходник и прописывать блок анализа.

Для этого существуют подпрограммы и шаблоны.

Блок анализа - это одна строка в шаблоне советника.

При правильном проектировании структуры классов советников - блок анализа автоматом возникает во всех перекомпилированных советниках.‌

В-третьих, возможно использование "чужих" советников без исходного кода.‌

Ну, это, на мой взгляд, глупо. Чужой советник можно использовать исключительно только на условиях открытости его содержимого.