指定された期間および/またはSLが経過したら、自動的に注文を終了する - ページ 4

 

コードを投稿するには、SRC ボタンを使用してください .. . .

 

それは多分、あなたが2回注文を閉じようとしていることです。

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; 
} 
}

これらのうち1つだけが必要です ... ... そして、使用する ... ...

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;
              }              
          }
       }
    }

さて、StopLossやTakeProfitを打つときにopensellやopenbuyを0にカウントさせる方法を見つけなければなりません。

 
nirvanamac:

私はこのようにコードを変更しました。

さて、StopLossやTakeProfitを打つときにopensellやopenbuyを0にカウントさせる方法を探さなければなりません。


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--;
              }              
          }
       }
    }

マジックナンバーとシンボルを直接選択すると、このコードはより良い方法で書かれるでしょう。

もし、あなたがそれを作った方法で使うなら、あなたは1時間以上実行されているすべてのオープントレードを閉じます(また、この1つからではありません)。

 
deVries:

マジックナンバーとシンボルを直接選択すると、このコードはより良い方法で記述されます。

もし、あなたがそれを作った方法で使用する場合、あなたは1時間以上実行されているすべてのオープントレードを閉じます(また、この1つからではありません)。


こんにちは、deVries...私はそれを試してみました。
 

パフォーマンスではなく、SLとTPのあるEAがいい感じです。