Скачать MetaTrader 5

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
iperevalov
8
iperevalov  

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

Ниже представлен фрагмент кода, в котором перебираются ордера с конца. Ордер, открытый по советнику и другими выполненными условиями, закрывается с половиной лота. Затем этот ордер, закрытый на половину, необходим изменить - перенести 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("Ошибка модификации ордера на покупку ");
         }
      }

Vitalie Postolache
12428
Vitalie Postolache  

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

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

iperevalov
8
iperevalov  
evillive:

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

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

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

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

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

Alexey Viktorov
11383
Alexey Viktorov  

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

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

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

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


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

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

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


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

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

Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий