【MQL】トレーリングストップを設定する

損切りを少しでも浅くできないかなと考え、トレーリングストップを設定するコードを書いてみました。

パラメータ(#property strictの下)

input double TrailingStop=50; // トレーリングストップ幅

この場合、損切り幅を50Pipsに自動修正します

トレーリングストップ(OnTick内)

for(int i=OrdersTotal()-1; i>=0; i--){

   if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==true){
      
      // トレーリングストップが設定されている
      if(TrailingStop>0){            
      
         if(OrderType()==OP_BUY && OrderMagicNumber()==MAGIC){
         
            // 現在値―建値>トレーリングストップ幅
            if(Bid-OrderOpenPrice()>TrailingStop*10*Point){
            
               // 逆指値<現在値―トレーリングストップ幅
               if(OrderStopLoss()<Bid-TrailingStop*10*Point){
               
                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),Bid-TrailingStop*10*Point,OrderTakeProfit(),0,clrBlue)){
                     Print("OrderModify error ",GetLastError());
                     return;
                  }                  
               }
            }
         }
      
         
         if(OrderType()==OP_SELL && OrderMagicNumber()==MAGIC){
         
            // 建値―現在値>トレーリングストップ幅
            if(OrderOpenPrice()-Ask>TrailingStop*10*Point){
            
               // 逆指値>現在値+トレーリングストップ幅
               if((OrderStopLoss()>Ask+TrailingStop*10*Point) || (OrderStopLoss()==0)){
                  
                  if(!OrderModify(OrderTicket(),OrderOpenPrice(),Ask+TrailingStop*10*Point,OrderTakeProfit(),0,clrRed)){
                     Print("OrderModify error ",GetLastError());
                     return;
                  }                  
               }
            }
         }
      }
   }
}