Скачать MetaTrader 5
Авторизуйтесь или зарегистрируйтесь, чтобы добавить комментарий
Пополняй счет удобным способом. Здесь их 4!
iperevalov
8
iperevalov 2016.08.25 20:26 

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

Ниже представлен фрагмент кода, в котором перебираются ордера с конца. Ордер, открытый по советнику и другими выполненными условиями, закрывается с половиной лота. Затем этот ордер, закрытый на половину, необходим изменить - перенести 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
11025
Vitalie Postolache 2016.08.25 20:36  

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

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

iperevalov
8
iperevalov 2016.08.25 20:46  
evillive:

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

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

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

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

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

Alexey Viktorov
5175
Alexey Viktorov 2016.08.26 06:14  

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

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

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

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


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

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

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


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

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

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