FX自動売買 MT4損切りのプログラム

損切りといっても、手法はたくさんあります。どれを使っていいか良くわからないといったことも多いのではないでしょうか。

今回はベーシックな損切りについて、 MT4でのプログラミング方法の概要を含め説明します。

前回記事の損切りの最適化に記載した項目を説明していきます。

FX自動売買 シグナル以外のパラメータの最適化概要

固定幅によるストップ

固定幅によるストップとは仕掛け値からマイナスとなったときに決済する価格を仕掛け値からのpips数で指定しています。

不測の事態に備えて必ず入れておきたい数値です。

外部変数ProtectiveStopへpips数を指定します。

注文時にストップロス値を設定します。BuyStopLossへ外部変数で指定した値とpoint値を掛けてマイナス分を計算します。以下は関連部分を抜粋したコードです。

if(ProtectiveStop > 0){
   BuyStopLoss = AskPrice - (ProtectiveStop * dPoint); // ストップロスセット
}
iTicket = OrderSend( Symbol(),OP_BUY,iLots *1,AskPrice,iSlippage,BuyStopLoss,BuyTakeProfit,"",Magic,0,Blue);  // 買い注文

時間によるストップ

発注から一定の足数が経過すると決済します。日足で実行すると1日単位、60分足であれば、1時間単位といった具合です。

外部変数Closetimeへ経過足数を入れます。

OrderSelectでオーダーを指定したあとに、以下のコードで比較しています。

iBarShift関数でポジションを建てた時間と現在時間との足数の差を算出します。

comptime = OrderOpenTime(); // ポジションを建てた時間の取得
/* 必ずクローズする時間  */
if( (iBarShift(NULL,0,comptime,false)*Period()) >= (Closetime*Period()) ){                // ポジション時間からバー経過数へ変換し、クローズ時間と比較
/* クローズ処理 */
}

反対シグナル発生によるストップ(ドテン)

買いポジションを持っていたときに、売りのシグナルが発生したときに買いポジションを手仕舞いすることを指しています。売りポジションの場合は反対になります。

外部変数ReverseCloseへTrueを指定することで実行されます。

買いシグナル発生によって買い注文を出す前に以下のプログラムを入れます。

if( ReverseClose == true ){
  CloseAllSellOrders(Symbol(), Magic, iSlippage); // 売り注文クローズ
}

標準偏差によるストップ

これは今まで公開したEAには入っていません。

指定期間の標準偏差を算出して、注文時の価格から偏差に指定倍率を掛けた値分マイナスとなったときに決済します。

市場のボラティリティに合わせて損切り幅を調整し、より最適な損切り価格を得るのを目的にしています。

実装によりますが、複数ポジションを持ったときは、最後のポジションを基準にして算出した値でストップが設定されます。

外部変数は3種類を使います。

  • BandsStop:標準偏差によるストップを有効または無効を指定します。
  • BandsStopPeriod:標準偏差算出期間を指定します。
  • BandsStopDeviation:偏差の倍率を指定します。

Zscorestopへ損切りの価格が入ります。以下は買いの場合のコードです。

Zscorestop = iClose(NULL,0,1) - iStdDev(NULL,0,BandsStopPeriod,0,MODE_SMA,PRICE_CLOSE,1) * BandsStopDeviation;

ATRによるストップ

こちらもこれまで公開したEAには入っていません。

ATR(AverageTrueRange)を基準にした損切り価格を設定します。注文時のATRに倍率を掛けた値がマイナスとなったら損切りをします。

標準偏差と似ていますが、こちらは市場の値幅に合わせて損切り幅を調整するものです。

標準偏差同様、複数ポジション持った場合は最後のポジション基準の損切り価格となります。

外部変数は以下となります。

  • AtrStop:ATRによるストップを有効または無効にします。
  • AtrStopPeriod:ATR期間を指定します。
  • AtrStopMulti:ATRの倍率をしてします。

Atrstopへ損切り価格が入ります。以下は買いの場合のコードです。

Atrstop = iClose(NULL,0,1) - iATR(NULL,0,AtrStopPeriod,1) * AtrStopMulti;

まとめ

固定幅、標準偏差、ATRによるストップのいずれかは必ず入れた方が良いと思います。とんでもなく市場が反対方向へ動いてしまったときの安全装置となります。

時間によるストップ、反対シグナル発生によるストップはシステムによって使うかどうかを判断します。

コメントを残す

メールアドレスが公開されることはありません。 が付いている欄は必須項目です