Как гарантировано открыть и/или модифицировать ордер в mql4

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

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

2
3
4
5
6
7
8
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 будет посылать запросы на открытие ордера до его успешной установки.

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

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

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


Поделись с друзьями:

Один комментарий на “Как гарантировано открыть и/или модифицировать ордер в mql4

  1. Алексей

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

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

Ваш e-mail не будет опубликован. Обязательные поля помечены *