Предлагаю следующий простой и надежный вариант установки или модификации. Для этого используем цикл 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().
Благодарю! Взял на вооружение. А чтобы вдруг зацикливания не произошло, ограничил цикл десятью попытками.
bool open=false;
int ticket = 0;
int j=0;
while(!open && !IsStopped() && j 0) open = true;
}