Ещё раз про ошибку 130

 

Здравствуйте,

возникла следующая проблема (в mql4):

советник совершает последовательные попытки установки стоплосса для активного ордера, один раз за бар, с помощью OrderModify. Сначала стоп находится на близком расстоянии от текущей цены (требование заказчика), и модификация не проходит. На следующих барах контролируется, что стоплосс находится на "нормальном" расстоянии от текущей цены и от цены открытия ордера (например 20-40 pips), и, естественно, все "детские" ошибки типа неправильной нормировки аргументов исключены.  При этом, для многих ордеров, если модификация ордера не удалась с первого раза, то потом она никак не удаётся и при последующих попытках, несмотря на изменения уровня стоплосса. То есть наблюдается что-то  типа блокировки модификации данного ордера. Код ошибки каждый раз - 130. Это всё в режиме Тестера.

Естественно, я ищу в своём коде баг, но пока не нахожу, тем более, что он совершенно элементарен, типа bool res=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,arrow_color); кроме того, он работает без ошибок для большинства ордеров. Но вот если первая попытка модификации не проходит, то потом и остальные не удаются. Поэтому, если кто-то сталкивался с подобным или может указать ссылку, где это обсуждается, буду премного благодарен. 

Спасибо. 

 
Arkady Segal:

Естественно, я ищу в своём коде баг, но пока не нахожу, тем более, что он совершенно элементарен, типа bool res=OrderModify(OrderTicket(),OrderOpenPrice(),sl,tp,0,arrow_color); кроме того, он работает без ошибок для большинства ордеров. Но вот если первая попытка модификации не проходит, то потом и остальные не удаются. Поэтому, если кто-то сталкивался с подобным или может указать ссылку, где это обсуждается, буду премного благодарен. 

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

Выведите Print текущего времени, цены ask и bid, расчетные уровни SL/TP и точку входа при получении ошибки.

Если для первого и последующих ошибок текущее время одинаково будет, то у вас зациклена модификация ордера и Ihor Herasko прав. Если же время разное - проверяйте цены и учитывайте step out (минимальное расстояние SL/TP от текущей рыночной цены). Обычно при разработке скальпа или мелкой сетки такие моменты возникают :)

 
Спасибо за комментарии! Естественно, это был баг. Извините за шум. 
Причина обращения: