Чт. Ноя 21st, 2024

Предлагаю следующий простой и надежный вариант установки или модификации. Для этого используем цикл while.

Установка ордера:

bool open=false;
int ticket = 0;
while(!open && !IsStopped())
{
  ticket=OrderSend(Symbol(),OP_BUY,lot,Ask,300,0,0,"",Magic,0,Lime);
  if(ticket > 0) open = true;
}

Здесь цикл while будет посылать запросы на открытие ордера до его успешной установки.

Модификация (ордер должен быть выбран):

 bool mod=false;
 while(!mod && !IsStopped())
 {
 mod=OrderModify(ticket,OrderOpenPrice(),sl,tp,0,Yellow);
 }

Все очень просто. Функция OrderModify типа bool. И пока она не вернет true, цикл while будет посылать запросы на сервер пока ордер не будет модифицирован. НО, если стоп-лосс или тейк-профит рассчитаны не правильно, советник уйдет в бесконечный цикл. Тут надо проверять и только после проверки уже отправлять команду на цикл.
Если вдруг в процессе торговли произошло зацикливание, надо отжать кнопку автоторговли в терминале и цикл будет завершен. Для этого в коде предусмотрена команда !IsStopped().

от drivermql

Один комментарий к “Как гарантировано открыть и/или модифицировать ордер в mql4”
  1. Благодарю! Взял на вооружение. А чтобы вдруг зацикливания не произошло, ограничил цикл десятью попытками.
    bool open=false;
    int ticket = 0;
    int j=0;
    while(!open && !IsStopped() && j 0) open = true;
    }

Добавить комментарий

Ваш адрес email не будет опубликован.

Этот сайт использует Akismet для борьбы со спамом. Узнайте, как обрабатываются ваши данные комментариев.