error 130 при модификации ордера

 

Добрый день. На других терминалах у меня такой ошибки, в общем-то, не замечено. Но вот я столкнулся с другим ДЦ и понеслось..

Одновременно, открытие со стоп-лоссом и тейк-профитом возможности устанавливать нет. ДЦ не разрешает. Поэтому приходится устанавливать ордера без стопа и тейка, а после уже на следующих типах добавлять стоп и тейк.

У меня изначально все проверки давно уже прописаны и на стоплевел и на фризлевел. Большинство ордеров модифицируется без проблем, но некоторые не модифицируются. Вот это мне и интересно.

Вот что мой код выдаёт при попытке модификации рандомной шортовой позиции:

Trade::isStopLevelInterfere { Условия на stopLevel не выполнены! type = 'OP_SELL' | price = '1.30198' | newSL = '1.30249' | newTP = '1.30096' | stopLevel = '0.00050' }

Вот скрин рыночной ситуации. Ордер открылся на последнем баре с индексом 0.


В принципе, выше видно, что:

Ask = 1,30201

Bid = 1,30199

SL (Стоплосс) = 1,30249

TP (Тейкпофит) = 1,30096

stopLevel = 0,0005

freezeLevel = 0,00015

Почему не возможно установить стоп и тейк?

Тейк и стоп необходимо сравнивать на расстояние стоплевела от бида?

 
int stopsLevel = (int)SymbolInfoInteger(_Symbol, SYMBOL_TRADE_STOPS_LEVEL) + (int)SymbolInfoInteger(_Symbol, SYMBOL_SPREAD);
                  

Попробуйте учитывать это в вычислении значений уровней в пунктах.

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

Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
Документация по MQL5: Константы, перечисления и структуры / Коды ошибок и предупреждений / Коды возврата торгового сервера
  • www.mql5.com
Коды возврата торгового сервера - Коды ошибок и предупреждений - Константы, перечисления и структуры - Справочник MQL5 - Справочник по языку алгоритмического/автоматического трейдинга для MetaTrader 5
 
Viktar Dzemikhau:

В принципе, выше видно, что:

Ask = 1,30201

Bid = 1,30199

SL (Стоплосс) = 1,30249

TP (Тейкпофит) = 1,30096

stopLevel = 0,0005

freezeLevel = 0,00015

Почему не возможно установить стоп и тейк?

Тейк и стоп необходимо сравнивать на расстояние стоплевела от бида?

Есть такое понятие, как базовая цена ордера. Это цена, по которой ордер будет закрыт. Рыночный ордер Sell закрывается по цене Ask (открывается - по Bid). Значит, базовая цена для Sell - Ask. От цены Ask уровни SL и TP должны быть не ближе, чем размер Stop Level. Таким образом, должно выполняться неравенство:

SL - Ask >= StopLevel

Подставляем данные:

1.30249 - 1.30201 >= 0.0005

Неравенство не выполнено. Ошибка справедлива.

 
Nikolay Mitrofanov:

Попробуйте учитывать это в вычислении значений уровней в пунктах.

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

У меня тоже появилась такая мысль. я всё-таки, сегодня нечто подобное сам реализовал и заработало, хотя.. ошибки в журнале всё-равно мелькают. Думаю, неужели от них не избавиться никак? И это нормально когда тонны ошибоксыпятся в журнале?

Понятно, что можно их не отлавливать и не отображать, но это тоже не вариант.


Nikolay Mitrofanov:

Есть еще такая таблица. 

https://www.mql5.com/ru/docs/constants/errorswarnings/enum_trade_return_codes

Она полезная.

Это для мт5, в 4-ке такого нет. Мне пришлось одну вещь писать в 4, хотя я этому не особо рад..)

В 5-ке проще. Кроме того, в ней, хотя бы, можно отладить ситуацию, а в 4-ке вообще ничего для этого нет. Убогая вещь..