Я пытаюсь создать динамический Take Profit программно. Для этого я использую OrderClose(), чтобы закрыть ордер, когда разница в пипсах готова. Проблема в том, что он закрывается выше OP_SELL и ниже OP_BUY, и я не знаю, почему это происходит.
как я мог это исправить?
Попытка
void executeTakeProfit(int mn, double points){
double _diffPips = 0;
if(OrdersTotal() > 0){
RefreshRates();
for(int x = 0; x < OrdersTotal(); x++){
if(OrderSelect(x, SELECT_BY_POS, MODE_TRADES)){
if(OrderMagicNumber() == mn && OrderSymbol() == Symbol()){
if(OrderType() == OP_BUY){
if(Ask > OrderOpenPrice()){
_diffPips = NormalizeDouble((Ask - OrderOpenPrice()) / Point, Digits);
if(_diffPips >= points){
if(!OrderClose(OrderTicket(), OrderLots(), Bid, 0, clrNONE)){
Comment("Error Take Profit - Buy");
}
}
}
}//buy
if(OrderType() == OP_SELL){
if(Bid < OrderOpenPrice()){
_diffPips = NormalizeDouble((OrderOpenPrice() - Bid) / Point, Digits);
if(_diffPips >= points){
if(!OrderClose(OrderTicket(), OrderLots(), Ask, 0, clrNONE)){
Comment("Error Take Profit - Sell");
}
}
}
}//sell
}//magic
}//select
}//for
}
}//execute take profit