Автоматическое закрытие ордера после заданного периода и/или SL - страница 4

 

Пожалуйста, используйте кнопку SRC для размещения кода . . . .

 

Возможно, вы пытаетесь закрыть ордер дважды...

if (OrderType() == OP_BUY || OP_SELL) 
{
bool Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red); 
openbuy = 0;
opensell = 0;
}


if (OrderType() == OP_SELL) 
{
Closed = OrderClose(OrderTicket(),OrderLots(), OrderClosePrice(), UseSlippage, Red); 
opensell = 0;
openbuy = 0; 
} 
}

Вам нужен только один из этих ... и использовать ...

if (OrderType() <= OP_SELL) 

который охватывает OP_SELL и OP_BUY читайте здесь: https://docs.mql4.com/constants/trading

 

Я изменил код следующим образом:

for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))
       {
       if((OrderOpenTime()+3600) < TimeCurrent())
          { 
           if (OrderType() == OP_BUY)          
              {
               bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);           
               openbuy = 0;
              }
           if (OrderType() == OP_SELL)          
              {
               Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);  
               opensell = 0;
              }              
          }
       }
    }

Теперь мне нужно выяснить, как я позволяю коду считать opensell и openbuy до 0 при попадании в StopLoss или TakeProfit.

 
nirvanamac:

Я изменил код следующим образом:

Теперь мне нужно выяснить, как я позволяю коду считать opensell и openbuy до 0 при попадании в StopLoss или TakeProfit.


opensell = 0;
openbuy =0;
for(int i = OrdersTotal() - 1; i >= 0; i--)
    {
    if(OrderSelect(i, SELECT_BY_POS, MODE_TRADES))   //==> select also on magicnumber and symbol
       {
       if(OrderMagicnumber()== magicnumber && OrderSymbol()== Symbol() && OrderType() == OP_BUY){openbuy++;}
       if(OrderMagicnumber()== magicnumber && OrderSymbol()== Symbol() && OrderType() == OP_SELL){opensell++;}
       if((OrderOpenTime()+3600) < TimeCurrent() && OrderMagicnumber()== magicnumber && OrderSymbol()== Symbol())
          { 
           if (OrderType() == OP_BUY)          
              {
               bool Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);           
               openbuy = openbuy-1;    //openbuy--;
              }
           if (OrderType() == OP_SELL)          
              {
               Closed = OrderClose(OrderTicket() ,OrderLots(), OrderClosePrice(), UseSlippage, Red);  
               opensell = opensell-1;    //opensell--;
              }              
          }
       }
    }

Выберите непосредственно magicnumber и символ, тогда этот код будет написан лучше.

Если вы используете его так, как вы его сделали, то вы будете закрывать все открытые сделки дольше часа (также не из этого).

 
deVries:

Выберите непосредственно magicnumber и символ, тогда этот код будет написан лучше.

Если вы используете его так, как вы его сделали, то вы будете закрывать все открытые сделки дольше часа (также не из этого).


Привет deVries...я попробовал и теперь буду проверять с TP и SL...спасибо большое...
 

Вау, теперь это выглядит хорошо :) не производительность, а советник с SL и TP

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