利食いは様々な手法があり、何を使用したら良いか迷う人も多いのではないでしょうか?
私も色々試してみましたが、やはり基本的なものがわかりやすく、検証もしやすいと感じました。
記事:シグナル以外のパラメータ最適手法に記載した利食いの項目をMT4プログラムも交えて説明していきます。
Table of Contents
固定幅をpips単位で指定します。注文時の価格から固定幅分の利益が得られたら、決済となります。
外部変数Limitへpips単位で固定幅を指定します。
Limitをポイント数に変換し、Askに加算した値をリミットとして注文を出します。
if( Limit > 0 ){ BuyTakeProfit = AskPrice + (Limit * dPoint); // テイクプロフィットセット } iTicket = OrderSend( Symbol(),OP_BUY,iLots * 1,AskPrice,iSlippage,BuyStopLoss,BuyTakeProfit,"",Magic,0,Blue); // 買い注文
注文価格から最低利益分の利益を得ると、ストップロスの位置を変更します。一度利益が出たら、その後はマイナスとなる前に決済してしまう利食い方法です。
外部変数TrailingStopへ変更するストップロスの位置をpips単位で指定します。判定したときの価格からTrailingStop分マイナスしたところがストップロスの位置となります。
外部変数MinimumProfitへ初回の最低利益をpips単位で指定します。
判定は下記の関数で行います。(買いの場合)
TrailingStopをargTrailingStopへ、MinimumProfitをargMinProfitへ渡しています。
買いオーダーを見つけたあと、現在のストップロスより(価格-TrailingStop)の方が大きく(ストップが浅い)、最低利益を得ていれば、ストップロスを(価格-TrailingStop)へ変更します。
void BuyTrailingStop(string argSymbol, int argTrailingStop, int argMinProfit, int argMagicNumber) { bool result; for(int Counter = 0; Counter <= OrdersTotal()-1; Counter++) { result = OrderSelect(Counter,SELECT_BY_POS); if( result == true ) { // 最大損切り価格と最小利食い価格の計算 double MaxStopLoss = MarketInfo(argSymbol,MODE_BID) - (argTrailingStop * dPoint); MaxStopLoss = NormalizeDouble(MaxStopLoss,(int)MarketInfo(OrderSymbol(),MODE_DIGITS)); double CurrentStop = NormalizeDouble(OrderStopLoss(),(int)MarketInfo(OrderSymbol(),MODE_DIGITS)); double PipsProfit = MarketInfo(argSymbol,MODE_BID) - OrderOpenPrice(); double MinProfit = argMinProfit * dPoint; // 損切り価格の変更 if(OrderMagicNumber() == argMagicNumber && OrderSymbol() == argSymbol && OrderType() == OP_BUY && CurrentStop < MaxStopLoss && PipsProfit >= MinProfit) { bool Trailed = OrderModify(OrderTicket(),OrderOpenPrice(),MaxStopLoss,OrderTakeProfit(),0); // エラー処理 if(Trailed == false) { } } } } }
この関数は以下の書籍を参考にしています。
FXメタトレーダー4 MQLプログラミング 堅牢なEA構築のための総合ガイド (ウィザードブックシリーズ) [ アンドリュー・R.ヤング ] 価格:3,024円 |
指定期間の標準偏差を算出し、注文時の価格から標準偏差×倍率分の利益を得ると決済します。
市場のボラティリティが大きいときは利益も大きく狙うタイプの利食いです。
この標準偏差とATRによる利食いはこれまで紹介したEAには入っていません。
外部変数は3種類を使います。
- BandsLimit:標準偏差による利食いを有効または無効にします。
- BandsLimitPeriod:標準偏差期間を指定します。
- BandsLimitDeviation:偏差倍率を指定します。
以下は買いの場合です。
Zscorelimit = iClose(NULL,0,1) + iStdDev(NULL,0,BandsLimitPeriod,0,MODE_SMA,PRICE_CLOSE,1) * BandsLimitDeviation;
指定期間のATRを算出し、注文時の価格からATR×倍率分の利益を得ると決済します。
標準偏差と同様に市場の変動幅が大きくなると、利益も大きく狙います。
外部変数は3種類を使います。
- AtrLimit:ATRによる利食いの有効または無効
- AtrLimitPeriod:ATR期間を指定します。
- AtrLimitMulti:ATRの倍率を指定します。
以下は買いの場合です。
Atrlimit = iClose(NULL,0,1) + iATR(NULL,0,AtrLimitPeriod,1) * AtrLimitMulti;
利食いのパラメータ設定は特に必須というわけではありません。しかし設定することで含み益を市場へ返す量を減らせる可能性があります。
基本的な利食いだけでも試してみるのも良いのではないかと思います。