Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Узнай самые обсуждаемые темы на форуме. Заходи в раздел Стена!
Denis
7
Denis 2016.02.06 04:40 
Здравствуйте, уважаемые собратья по торговле, прошу подсказать в чем моя ошибка)
Пытаюсь модифицировать отложенный ордер (на демо-счете, в тестере стратегий) но в логе получаю кучу сообщений подобного вида (как по buystop, так и по sellstop ордерам):

2016.02.06 08:51:05.067    2016.02.03 15:56  TradeServer CLJ6,M30: [2016.02.03 15:56:15] Ошибка модификации ордера! Код ошибки: 130
2016.02.06 08:51:05.067    2016.02.03 15:56  TradeServer CLJ6,M30: OrderModify error 130
2016.02.06 08:51:05.067    2016.02.03 15:56  TradeServer CLJ6,M30: openprice = 32.46 takeprofit = 34.46 stoploss = 30.46 stoplvl = 0.0 freeze = 0.0
2016.02.06 08:51:05.067    2016.02.03 15:56  TradeServer CLJ6,M30: type = buystop

Стопы нормализуются и рассчитываются правильно (в чем можно убедиться по логу), вот код, на всякий случай:

double currentPrice = orderType == OP_BUYSTOP ? Ask : Bid;
double sign = orderType == OP_BUYSTOP ? 1.0 : -1.0;
double openPrice = NormalizeDouble(currentPrice - sign * OrderOffset * Point, Digits); // если тут поменять на OrderOpenPrice() или поставить OrderOffset = 0, чтобы получилась старая цена, все работает нормально
double takeprofit = NormalizeDouble(openPrice + sign * TakeProfit * Point, Digits); // TakeProfit и StopLoss = 200 пунктов
double stoploss = NormalizeDouble(openPrice - sign * StopLoss * Point, Digits);
       
double stoplvl = MarketInfo(Symbol(), MODE_STOPLEVEL);
double freeze = MarketInfo(Symbol(), MODE_FREEZELEVEL);
Print("type = ", orderType == OP_BUYSTOP ? "buystop" : "sellstop");
Print("openprice = ", openPrice, " takeprofit = ", takeprofit, " stoploss = ", stoploss, " stoplvl = ", stoplvl, " freeze = ", freeze);
       
if(!OrderModify(OrderTicket(), openPrice, stoploss, takeprofit, 0, Yellow))
 LogError("Ошибка модификации ордера!");

Причем, как я уже отметил в комментарии, если убрать модификацию цены открытия (брать старую с помощью OrderOpenPrice()) то модификация проходит, но мне нужно перенести ордер целиком, а не только стопы.
Документация говорит, что перенос (модификация цены открытия, вместе со стопами) отложенных ордеров не является чем-то сверхъестественным и вполне возможен.
Пока сделал костыль с удалением и переоткрытием ордера для модификации, но все-таки, в чем может быть проблема, стопы ведь установлены корректно?

Alexey Viktorov
5181
Alexey Viktorov 2016.02.06 05:26  
Неправильная новая цена отложника тоже даёт ошибку 130. Если STOPLEVEL = 0 то чаще всего брокер использует спед*2 от чего тоже можешь получить 130.
Denis
7
Denis 2016.02.06 06:45  
AlexeyVik:
Неправильная новая цена отложника тоже даёт ошибку 130. Если STOPLEVEL = 0 то чаще всего брокер использует спед*2 от чего тоже можешь получить 130.
Большое спасибо! Действительно проблема была в цене открытия, т.к. я упустил из виду, что моя новая вычисленная цена иногда становится меньше текущей, а для ордера BuyStop она должна быть больше.
/
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий