Любые вопросы новичков по MQL4 и MQL5, помощь и обсуждение по алгоритмам и кодам - страница 1853

 
Alexander Avksentyev #:

Получиться по очереди будет закрывать каждый?Когда сетка это так долго, ока закроет нужные.
При закрытии последнего, может случиться так, что уже ордеров 10 нужно закрывать и вот по очереди все закрывает и тянется это бесконечно долго. 

Закрывает безостановочно.

Закрыли один, проверили что вернула функция OrderClose, если true - продолжаем, если false - обрабатываем ошибку, критическая ошибка - выход, не критическая(проскальзывание) - продолжаем.

Если дилинг не совсем кухня, то 15-20 шт. закрываются быстро, в районе 2-3 сек., в противном случае, до 15 сек. Правка, были случаи, что до 2-х минут

Если это мт5, то закрывается почти моментально.

 
Vitaly Muzichenko #:

Закрывает безостановочно.

Закрыли один, проверили что вернула функция OrderClose, если true - продолжаем, если false - обрабатываем ошибку, критическая ошибка - выход, не критическая(проскальзывание) - продолжаем.

Если дилинг не совсем кухня, то 15-20 шт. закрываются быстро, в районе 2-3 сек., в противном случае, до 15 сек. Правка, были случаи, что до 2-х минут

Если это мт5, то закрывается почти моментально.

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

 
Mihail Matkovskij #:

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

Нужно правильно её обработать. Если критическая, то нет смысла долбить сервер.

 
Vitaly Muzichenko #:

Нужно правильно её обработать. Если критическая, то нет смысла долбить сервер.

Конечно нет смысла. Но через определенный интервал всё таки стоит попробовать закрыть этот ордер (позицию). Потому как. Во первых, открытая сделка не может висеть до бесконечности. Во вторых, сама позиция не может вечно не закрываться. Рано или поздно сервер примет запрос на  закрытие ордера (выход из позиции). А если ничего не делать, то будет то что я говорил выше. Депозит может уйти в сильную просадку либо слиться.

 
Mihail Matkovskij #:

Конечно нет смысла. Но через определенный интервал всё таки стоит попробовать закрыть этот ордер (позицию). Потому как. Во первых, открытая сделка не может висеть до бесконечности. Во вторых, сама позиция не может вечно не закрываться. Рано или поздно сервер примет запрос на  закрытие ордера (выход из позиции). А если ничего не делать, то будет то что я говорил выше. Депозит может уйти в сильную просадку либо слиться.

Тут недавно проскакивало, ДЦ отключил возможность автоторговли на сервере. 1 минуту назад была, а потом отключили.

Всё-равно будем пробовать закрыть?

 
Vitaly Muzichenko #:

Тут недавно проскакивало, ДЦ отключил возможность автоторговли на сервере. 1 минуту назад была, а потом отключили.

Всё-равно будем пробовать закрыть?

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

 
Vitaly Muzichenko #:

Тут недавно проскакивало, ДЦ отключил возможность автоторговли на сервере. 1 минуту назад была, а потом отключили.

Всё-равно будем пробовать закрыть?

Ну тогда можно вызвать 

AccountInfoInteger(ACCOUNT_TRADE_EXPERT)

А также

AccountInfoInteger(ACCOUNT_TRADE_ALLOWED)

И 

TerminalInfoInteger(TERMINAL_TRADE_ALLOWED)

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

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

Документация по MQL5: Программы MQL5 / Разрешение на торговлю
Документация по MQL5: Программы MQL5 / Разрешение на торговлю
  • www.mql5.com
Разрешение на торговлю - Программы MQL5 - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Mihail Matkovskij #:

Ну и ошибки в результате неудачного закрытия обрабатывать соответственно.

Только не знаю, если вызвать OrderSend, а сервер запретил торговлю, то OrderSend вернет false или запрос отправится сначала на сервер, а потом он вернёт ответ? Если второе, то  OrderSend вернет true. И тогда точно нужно добавить функции () для блокировки вызовов функции OrderSend. А если первое, то запрос даже не отправится в очередь, поскольку OrderSend вернул false. Логично?

 
Mihail Matkovskij #:

Только не знаю, если вызвать OrderSend, а сервер запретил торговлю, то OrderSend вернет false или запрос отправится сначала на сервер, а потом он вернёт ответ? Если второе, то  OrderSend вернет true. И тогда точно нужно добавить функции () для блокировки вызовов функции OrderSend. А если первое, то запрос даже не отправится в очередь, поскольку OrderSend вернул false. Логично?

OrderSend возвращает тикет при удаче :)

Пойду наверное в ветку для новичков

 
Vitaly Muzichenko #:

OrderSend возвращает тикет при удаче :)

Пойду наверное в ветку для новичков

OrderSend в MQL4 возвращает тикет. А в MQL5 это bool. Я привык рассматривать фикции MQL5. А MQL4 немного подзабыл (поскольку уже давно привык портировать приложения из MQL5 на MQL4). В MQL5 вообще bool OrderSend как открывает так и закрывает позиции и ордера создаёт/удаляет. В MQL5 есть функции для ордеров, сделок и позиций. А в MQL4 int OrderSend для входа, а bool OrderClose для выхода. Еще есть bool OrderDelete, для отложенных ордеров. И в MQL4 только ордера, которые делятся на рыночные и отложенные. Заставили меня вспомнить чем отличаются эти два языка. :) 

Таким образом, всего знать нельзя. А запутаться проще простого.

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