Не получается получить профит и закрыть ордер

 

Не судите строго вот мой код

 Имеется 1 открытый ордер, как получить его профит и если он больше 10 то закрыть его, почему это не работает? 


OrderSelect(1, SELECT_BY_POS, MODE_HISTORY);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) { 
           
       double profit=OrderProfit();
       Print(profit);
               if(profit>10){
       
       OrderClose(1,0.1,Ask,3,Green);
}
}
 
OrderSelect(0
 
eevviill:

Там и дальше проблемки:

1) MODE_HISTORY. Зачем выбирать ордер в истории, если речь идет о рабочем ордере? Выходит, что нужно так:

OrderSelect(0, SELECT_BY_POS);

2) При закрытии ордера используется его индекс, а не тикет. Нужно так:

OrderClose(OrderTicket(), ...);

 

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

 

сделал так , и теперь выдает ошибку при закрытии: OrderClose error 138

Не понимаю  это ведь выдается Если запрашиваемая цена открытия сильно устарела

Что не так как исправить ? 


OrderSelect(0, SELECT_BY_POS);
      if (OrderSymbol() == Symbol() && OrderMagicNumber() == mn) { 
           
       double profit=OrderProfit();
       Print("profit",profit);
               if(profit>10){
       
       OrderClose(OrderTicket(),0.1,Ask,3,Green);
       
       
       }
}
 
Serg95off:

сделал так , и теперь выдает ошибку при закрытии: OrderClose error 138

Не понимаю  это ведь выдается Если запрашиваемая цена открытия сильно устарела

Что не так как исправить ? 


Cделайте цикл и не будет ошибок! И сгодится для любого количества ордеров!
 
Serg95off:

сделал так , и теперь выдает ошибку при закрытии: OrderClose error 138

Не понимаю  это ведь выдается Если запрашиваемая цена открытия сильно устарела

Что не так как исправить ? 


Как минимум, добавить RefreshRates перед вызовом OrderClose.
 
Serg95off:

сделал так , и теперь выдает ошибку при закрытии: OrderClose error 138

Не понимаю  это ведь выдается Если запрашиваемая цена открытия сильно устарела

Что не так как исправить ? 


Цена закрытия должна зависеть от типа ордера. Для бай Bid , для селл Ask.
 
khorosh:
Цена закрытия должна зависеть от типа ордера. Для бай Bid , для селл Ask.

А для Buy и Sell общая цена закрытия ордеров будет OrderClosePrice()

Не документированная фишка mql4 проверено, работает.

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