Метод TradeExpert() класса CAccountInfo игнорирует положение кнопки "Авто-торговля".

 

Класс CAccountInfo

Метод TradeExpert()

Приведенный ниже код предназначен для проверки метода TradeExpert(). Ожидается, что при включенной кнопке "Авто-торговля" на экране увидим значение true, а при выключенной кнопке "Авто-торговля" на экране должно появиться значение false.

// Класс для работы со свойствами торгового счета
   #include     <Trade\AccountInfo.mqh>

   CAccountInfo account;  // Объект класса для работы со счетом

...

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
{
   static int tick_count=0;

   bool ok = account.TradeExpert(); // Получает флаг разрешения автоматизированной торговли

   Comment("Count=", tick_count++, ", TradeExpert=", ok);

   if (ok) {

   // действия, если авто-торговля разрешена

   }

   return;
}

Однако, советник на каждом тике показывает только одно значение true, вне зависимости от положения кнопки "Авто-торговля".
Почему метод TradeAllowed() из класса CAccountInfo игнорирует состояние кнопки "Авто-торговля", ведь он для этого и предназначен?
Так и должно быть или это ошибка в коде?

MT5 Build 1340 от 13 мая 2016 г.


Ответьте, пожалуйста, еще на один вопрос, нигде не могу найти ответ на него. Верно ли или нет следующее утверждение: "Авто-торговля запрещена во время просмотра/редактирования свойств эксперта (горячая клавиша <F7>)".<F7>)".

 

Вы запросили информацию из AccountInfo. Вам никто не запрещал торговать, так как подключение к счёту не с инвесторским паролем и брокер тоже не запрещал Вам торговать.

Чтобы узнать состояние кнопки "Авто-торговля"

 
Slawa: Вы запросили информацию из AccountInfo. Вам никто не запрещал торговать, так как подключение к счёту не с инвесторским паролем и брокер тоже не запрещал Вам торговать. Чтобы узнать состояние кнопки "Авто-торговля"
Значится, чтобы получить разрешение на авто-торговлю, действующее снаружи, т.е. со стороны сервера/брокера, надо использовать обращение к методу AccountInfo.TradeExpert(), а чтобы запросить разрешение на авто-торговлю со стороны терминала, надо обращаться к функции TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

Спасибо за разъяснения.

 
Eugene Myzrov:
Ответьте, пожалуйста, еще на один вопрос, нигде не могу найти ответ на него. Верно ли или нет следующее утверждение: "Авто-торговля запрещена во время просмотра/редактирования свойств эксперта (горячая клавиша <F7>)".

Ссылку на это утверждение дайте, пожалуйста. Если это в документации, то надо срочно править документацию.

В MQL5 всё управление экспертом производится через очередь сообщений. Что проиисходит при вызове свойств эксперта?

1. Открывается диалог свойств

2. Если диалог свойств закрывается по крестику или по Cancel, то ничего не происходит

3. Если диалог свойств закрывается по OK

3.1. Если входные параметры не менялись, то ничего не происходит

3.2. Если входные параметры поменялись, то в очередь событий помещается событие deinit, событие смены параметров и событие init. При этом нужно иметь в виду, что если у Вас эксперт зациклен, то эти события так и не отработают. Обработка событий производится в строгой очерёдности - пока не отработано текущее событие (OnTick, OnTimer, OnTrade, OnTradeTransaction etc) следующее событие даже не начинает обрабатываться

 

Кстати, запрещение на торговлю может быть выставлено конкретному эксперту. Для проверки

MQLInfoInteger(MQL_TRADE_ALLOWED)
 
Slawa:

Ссылку на это утверждение дайте, пожалуйста. Если это в документации, то надо срочно править документацию.

В MQL5 всё управление экспертом производится через очередь сообщений. Что проиисходит при вызове свойств эксперта?

1. Открывается диалог свойств

2. Если диалог свойств закрывается по крестику или по Cancel, то ничего не происходит

3. Если диалог свойств закрывается по OK

3.1. Если входные параметры не менялись, то ничего не происходит

3.2. Если входные параметры поменялись, то в очередь событий помещается событие deinit, событие смены параметров и событие init. При этом нужно иметь в виду, что если у Вас эксперт зациклен, то эти события так и не отработают. Обработка событий производится в строгой очерёдности - пока не отработано текущее событие (OnTick, OnTimer, OnTrade, OnTradeTransaction etc) следующее событие даже не начинает обрабатываться

https://www.mql5.com/ru/docs/runtime/event_fire 

https://docs.mql4.com/ru/runtime/event_fire 

NewTick

Событие NewTick генерируется при поступлении новых котировок и обрабатывается функцией OnTick() у присоединенных советников. Если при поступлении новой котировки выполнялась функция OnTick, запущенная на предыдущей котировке, то пришедшая котировка будет проигнорирована советником, так как соответствующее событие не будет поставлено в очередь событий эксперта. 

Все пришедшие во время выполнения программы новые котировки программой игнорируются до тех пор, пока не завершится очередное выполнение функции OnTick(). После этого функция будет запущена только после прихода очередной новой котировки. 

Событие NewTick генерируется независимо от того, запрещена или разрешена автоматическая торговля (кнопка "Разрешить/запретить Авто-торговлю"). Запрет автоматической торговли означает только запрет на отправку торговых запросов из эксперта, работа эксперта не прекращается.

Запрет автоматической торговли путем нажатия на указанную кнопку не прерывает текущее выполнение функции OnTick(). Функция OnTick() не запускается на выполнение при открытом окне свойств советника. 

 Я по этому поводу обращался в сервисдеск.

#1041418 

События клиентского терминала - Программы MQL4 - Справочник MQL4
События клиентского терминала - Программы MQL4 - Справочник MQL4
  • docs.mql4.com
События клиентского терминала - Программы MQL4 - Справочник MQL4
 
Eugene Myzrov:
Значится, чтобы получить разрешение на авто-торговлю, действующее снаружи, т.е. со стороны сервера/брокера, надо использовать обращение к методу AccountInfo.TradeExpert(), а чтобы запросить разрешение на авто-торговлю со стороны терминала, надо обращаться к функции TerminalInfoInteger(TERMINAL_TRADE_ALLOWED).

Спасибо за разъяснения.

Смотрите еще раздел справки Разрешение на торговлю
 
Andrey Barinov:

https://www.mql5.com/ru/docs/runtime/event_fire 

https://docs.mql4.com/ru/runtime/event_fire 

 Я по этому поводу обращался в сервисдеск.

#1041418 

После того, как Вы закрыли ту заявку, реальные исполнители, на которых была назначена данная заявка в ответственность, её больше не увидели. Не успели проследить, поэтому не поправили. Извините

Исправим в ближайшее время

А оригинальный вопрос звучал несколько иначе ""Авто-торговля запрещена во время просмотра/редактирования свойств эксперта (горячая клавиша <F7>)".

 
Andrey Barinov:  ...Функция OnTick() не запускается на выполнение при открытом окне свойств советника.
Да, точно, помню, что где-то читал об этом, спасибо за ссылку https://www.mql5.com/ru/docs/runtime/event_fire
Проверил, оказывается, все-таки открытое окно свойств советника не мешает запуску функции OnTick().
Документация по MQL5: Программы MQL5 / События клиентского терминала
Документация по MQL5: Программы MQL5 / События клиентского терминала
  • www.mql5.com
Программы MQL5 / События клиентского терминала - справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Rashid Umarov: Смотрите еще раздел справки Разрешение на торговлю
Да, спасибо, исчерпывающе.
Причина обращения: