どうも、izuです。
今回はMT4による自動売買でトレーリングストップを導入するためのコードを紹介します。
<スポンサーリンク>
//+------------------------------------------------------------------+ //|トレーリングストップ | //+------------------------------------------------------------------+ void SetTrailingStop() { int modified; double Max_Stop_Loss; double Current_Stop = OrderStopLoss(); double Trailing_Stop =300; for(int i=0;i<OrdersTotal();i++) { if(OrderSelect(i,SELECT_BY_POS,MODE_TRADES)==false) break; //取引中のトレードを選択 if(OrderMagicNumber()!=MAGICMA || OrderSymbol()!=Symbol()) continue; //マジックナンバーと通貨ペアの確認 //買いポジションの場合 if(OrderType()==OP_BUY) { Max_Stop_Loss = Bid - Trailing_Stop*Point; //損切り幅の変更 if(Max_Stop_Loss>OrderOpenPrice() && Current_Stop<Max_Stop_Loss) { modified = OrderModify(OrderTicket(),OrderOpenPrice(),Max_Stop_Loss,0,0); } } //売りポジションの場合 if(OrderType()==OP_SELL) { Max_Stop_Loss = Ask + Trailing_Stop*Point; //損切り幅の変更 if(Max_Stop_Loss<OrderOpenPrice() && Current_Stop>Max_Stop_Loss) { modified = OrderModify(OrderTicket(),OrderOpenPrice(),Max_Stop_Loss,0,0); } } } }
注!)MAGICMA(マジックナンバー)は自分で設定する必要があります。
トレーリングストップを導入するには、相場価格の変動に伴ってストップロスレベルを変更するプログラムが必要になります。
今回のプログラムでは、購入価格から一定の値(Trailing_Stopで設定)狙い通りに動いた時点からストップロスレベルをする仕様になっています。
if文のMax_Stop_Loss>OrderOpenPrice()を消すと、相場が狙い通りに動くとすぐにストップロスレベルが設定されるようになります。
この場合、相場が狙い通りに動き(1)、すぐ反転(2)、そして再び狙い通りに動き(3)出す時には、(2)でストップロスレベルに引っかかる可能性が高くなり、全体としての勝率は悪くなります。