Модификация ордера

 

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

Ниже представлен фрагмент кода, в котором перебираются ордера с конца. Ордер, открытый по советнику и другими выполненными условиями, закрывается с половиной лота. Затем этот ордер, закрытый на половину, необходим изменить - перенести Stop Loss на цену его открытия. Ордер не изменяется...

      if(Bid >= Bonds_Main)
      {
         for(int i = OrdersTotal() - 1; i >= 0; i--)
         {
            if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
               if(OrderMagicNumber() == MAGIC && OrderType() == OP_BUY)
                  if(OrderClose(OrderTicket(), OrderLots() / 2, Bid, SLIPPAGE, Black))
                     Print("Ошибка закрытия ордера на покупку");
            if(!OrderModify(i, 0, OrderOpenPrice(), 0, 0))
               Print("Ошибка модификации ордера на покупку ");
         }
      }

 

Если вы измените строку принта ошибки, добавив туда определитель номера ошибки, уверен, вам же будет проще добиться ответа на этот вопрос.

 Print("Ошибка модификации ордера на покупку №", GetLastError());

 
evillive:

Если вы измените строку принта ошибки, добавив туда определитель номера ошибки, уверен, вам же будет проще добиться ответа на этот вопрос.

 Print("Ошибка модификации ордера на покупку №", GetLastError());

Спасибо за быстрый ответ.

Дописал. Вывело №4051 - "Недопустимое значение параметра функции".

Исправил i на OrderTicket(). Вывело №1- "Нет ошибки, но результат неизвестен". Вроде бы все в порядке. Стоп лосс переносится на цену открытия, но это ошибка не спроста. Что она значит?

 

Так делать нельзя.

При закрытии часть ордера происходит следующее:

1. закрывается ордер полностью.

2. открывается ордер с оставшейся частью по той-же цене, но с другим тикетом.


А посмотрев ещё раз повнимательней так делать нельзя в квадрате...

if(!OrderModify(i, 0, OrderOpenPrice(), 0, 0))

первый параметр функции должен быть тикет ордера, а не его порядковый номер в списке ордеров.


ps; до конца дочитал только потом...)))

В этом случае лучше сначала модифицировать ордер, а потом закрыть часть его.

Причина обращения: