ホーム システムトレード 投稿

MQL5ウィザードで作成するハンマーとハンギングマンパターンに基づくCCIトレードシグナル

添付ファイル
315.zip (6.48 KB, ダウンロード 1回)

MetaTrader 5のMQL5ウィザードを使えば、トレードアイデアを素早くチェックできるエキスパートアドバイザー(EA)を簡単に作成できます。自分だけのトレーディングシグナルクラスを作成するだけで済みます。このクラスの構造や例については、MQL5ウィザード: トレーディングシグナルのモジュールを作成する方法を参照してください。

トレーディングシグナルクラスは、CExpertSignalから派生させる必要があります。さらに、LongCondition()ShortCondition()の仮想メソッドを自分自身のメソッドでオーバーライドすることが求められます。

ロシア語の書籍「最高のトレーダーの戦略」では、多くのトレーディング戦略が考察されています。私たちは、ストキャスティクスCCIMFIRSIなどのオシレーターによって確認された反転ローソク足パターンに焦点を当てます。

トレードシグナルを確認するためには、CCI指標を使用します。CCIの値が臨界レベル(ロングポジション用の-50、ショートポジション用の50)を超える必要があります。

1. ハンマーとハンギングマンの反転ローソク足パターン

1.1. ハンマー

ハンマーは、小さな実体と長い下ひげを持つローソク足で、下落トレンドの後に形成されます。このパターンは、ベアリッシュトレンドの終わりを示します。

Fig. 1. ハンマーのローソク足パターン

Fig. 1. ハンマーのローソク足パターン

ハンマーパターンの認識は、CheckPatternHammer()メソッドで実装されています。

//+------------------------------------------------------------------+
//| ハンマーのローソク足パターンをチェックします                    |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHammer()
  {
//--- ハンマー
   if((MidPoint(1)<CloseAvg(2))
                                                && 
      (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && 
      (Close(1)<Close(2)) && (Open(1)<Open(2)))
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_HAMMER)メソッドを用いて、ハンマーのローソク足パターンをチェックします。

1.2. ハンギングマン

ハンギングマンは、小さな実体と長い下ひげを持つローソク足で、上昇トレンドの後に形成されます。このパターンは、ブルリッシュトレンドの終わりを示します。

Fig. 2. ハンギングマンのローソク足パターン

Fig. 2. ハンギングマンのローソク足パターン

ハンギングマンパターンの認識は、CheckPatternHangingMan()メソッドで実装されています。

//+------------------------------------------------------------------+
//| ハンギングマンのローソク足パターンをチェックします               |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternHangingMan()
  {
//--- ハンギングマン
   if((MidPoint(1)>CloseAvg(2))
                                                && 
      (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && 
      (Close(1)>Close(2)) && (Open(1)>Open(2)))
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN)メソッドを用いて、ハンギングマンのローソク足パターンをチェックします。

2. CCI指標で確認されたトレードシグナル

ロングまたはショートポジションを開くためのトレードシグナルは、CCI指標によって確認されなければなりません。CCIの値が臨界レベル(ロングポジション用の-50、ショートポジション用の50)を越える必要があります。

開いているポジションのクローズは、CCIの値に依存します。以下の2つのケースで行われます:

  1. CCIラインが反対の臨界レベル(ロングポジション用の80、ショートポジション用の-80)に達した場合
  2. 逆シグナルが確認されなかった場合(CCIが次のレベルに達したとき:ロングポジション用の-80、ショートポジション用の80)

Fig. 3. ハンマーのパターン、CCI指標で確認

Fig. 3. ハンマーのパターン、CCI指標で確認

  • int CH_HM_CCI::LongCondition() - ロングポジションを開く条件をチェックし(結果は80)、ショートポジションをクローズする条件をチェックします(結果は40);
  • int CH_HM_CCI::ShortCondition() - ショートポジションを開く条件をチェックし(結果は80)、ロングポジションをクローズする条件をチェックします(結果は40)。

2.1. ロングポジションを開く/ショートポジションをクローズする

  1. ハンマーパターンの形成は、CCI指標によって確認されなければなりません:CCI(1)<-50(最後の完成したバーのCCIの値は-50未満でなければなりません)。

  2. ショートポジションは、CCI指標が臨界レベル-80を上回るか、臨界レベル80を下回った場合にクローズされなければなりません。

//+------------------------------------------------------------------+
//| 市場へのエントリーとエグジット条件をチェックします                      |
//+------------------------------------------------------------------+
int CH_HM_CCI::LongCondition()
  {
   int result=0;
   //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします
   //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします
   int idx   =StartIndex();
   //--- ロングポジションを開く条件をチェックします
   //--- ハンマーパターンの形成とCCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50))
     result=80;
   //--- ショートポジションをクローズする条件をチェックします
   //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(下向き-80、下向き-80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
   //--- 結果を返します
   return(result);
  }

2.2. ショートポジションを開く/ロングポジションをクローズする

  1. ハンギングマンパターンの形成は、CCI指標によって確認されなければなりません:CCI(1)>50(最後の完成したバーのCCIの値は50を超えなければなりません)。

  2. ロングポジションは、CCI指標が-80または80レベルを下回った場合にクローズされなければなりません。

//+------------------------------------------------------------------+
//| 市場へのエントリーとエグジット条件をチェックします                      |
//+------------------------------------------------------------------+
int CH_HM_CCI::ShortCondition()
  {
   int result=0;
   //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします
   //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします
   int idx   =StartIndex();
   //--- ショートポジションを開く条件をチェックします
   //--- ハンギングマンパターンの形成とCCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50))
     result=80;
   //--- ロングポジションをクローズする条件をチェックします
   //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(下向き-80、上向き80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
   //--- 結果を返します
   return(result);
  }

2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成

CH_HM_CCIクラスはスタンダードライブラリのクラスに含まれていないため、ach_hm_cci.mqhファイルをダウンロードし(添付ファイルを参照)、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。キャンドルパターン用のcandlepatterns.mqhファイルも同様に行います。MetaEditorを再起動した後、MQL5ウィザードで使用できます。

エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します:

Fig. 4. MQL5ウィザードを使ったエキスパートアドバイザーの作成

Fig. 4. MQL5ウィザードを使ったエキスパートアドバイザーの作成

エキスパートアドバイザーの名前を指定します:

Fig. 5. エキスパートアドバイザーの一般的なプロパティ

Fig. 5. エキスパートアドバイザーの一般的なプロパティ

次に、使用するトレードシグナルのモジュールを選択します。

Fig. 6. エキスパートアドバイザーのシグナルプロパティ

Fig. 6. エキスパートアドバイザーのシグナルプロパティ

この場合、1つのトレードシグナルモジュールのみを使用します。

CCIで確認されたハンマー/ハンギングマンに基づくシグナル」トレードシグナルモジュールを追加します:

Fig. 7. エキスパートアドバイザーのシグナルプロパティ

Fig. 7. エキスパートアドバイザーのシグナルプロパティ

トレードシグナルモジュールが追加されました:

Fig. 8. エキスパートアドバイザーのシグナルプロパティ

Fig. 8. エキスパートアドバイザーのシグナルプロパティ

任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を使用します:

Fig. 9. エキスパートアドバイザーのトレーリングプロパティ

Fig. 9. エキスパートアドバイザーのトレーリングプロパティ

資金管理プロパティについては、「固定取引量でのトレード」を使用します:

Fig. 10. エキスパートアドバイザーの資金管理プロパティ

Fig. 10. エキスパートアドバイザーの資金管理プロパティ

「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードが得られ、Expert_AH_HM_CCI.mq5に保存されます。これは、terminal_data_folder\MQL5\Experts\に保存されます。

生成されたエキスパートアドバイザーのデフォルト入力パラメータは:

//--- メインシグナルの入力パラメータ
input int            Signal_ThresholdOpen   =10;     // 開くためのシグナルしきい値 [0...100]
input int            Signal_ThresholdClose  =10;     // クローズするためのシグナルしきい値 [0...100]
input double         Signal_PriceLevel      =0.0;    // 取引を実行するための価格レベル
input double         Signal_StopLevel       =50.0;   // ストップロスレベル(ポイント単位)
input double         Signal_TakeLevel       =50.0// テイクプロフィットレベル(ポイント単位)

は次のように置き換えられる必要があります:

//--- メインシグナルの入力パラメータ
input int            Signal_ThresholdOpen   =40;     // 開くためのシグナルしきい値 [0...100]
input int            Signal_ThresholdClose  =20;     // クローズするためのシグナルしきい値 [0...100]
input double         Signal_PriceLevel      =0.0;    // 取引を実行するための価格レベル
input double         Signal_StopLevel       =0.0;    // ストップロスレベル(ポイント単位)
input double         Signal_TakeLevel       =0.0    // テイクプロフィットレベル(ポイント単位)

Signal_ThresholdOpen/Signal_ThresholdCloseの入力パラメータは、ポジションのオープンとクローズのためのしきい値レベルを指定することを可能にします。

LongCondition()およびShortCondition()メソッドのコード内では、しきい値の固定値を指定しています:

  • ポジションをオープン:80;
  • ポジションをクローズ:40;

MQL5ウィザードによって生成されたエキスパートアドバイザーは、トレードシグナルのモジュールからの「投票」を使用してポジションをオープンおよびクローズします。メインモジュールの投票結果も「投票」平均化に使用されます。私たちのケースでは、メインモジュール+1つのトレードシグナルモジュールがあるため、しきい値の設定にこの事実を考慮する必要があります。このため、ThresholdOpenとThresholdCloseはそれぞれ40=(0+80)/2、20=(0+40)/2として設定する必要があります。

Signal_StopLevelおよびSignal_TakeLevelの入力パラメータの値は0に設定されており、ポジションのクローズは、クローズ条件が真である場合にのみ行われます。

2.4. ヒストリーバックテストの結果

エキスパートアドバイザーのヒストリカルデータに基づくバックテスト(EURUSD H1、テスト期間:2010.01.01-2011.03.16、PeriodCCI=25、MA_period=5)を見てみましょう。

エキスパートアドバイザー作成時に、固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリングなし)。

Fig. 11. ハンマー/ハンギングマン + CCIに基づくエキスパートアドバイザーのテスト結果

Fig. 11. ハンマー/ハンギングマン + CCIに基づくエキスパートアドバイザーのテスト結果

最適な入力パラメータセットは、MetaTrader 5クライアント端末のストラテジーテスターを使用して見つけることができます。

MQL5ウィザードによって作成されたエキスパートアドバイザーのコードは、expert_ah_hm_cci.mq5に添付されています。

関連記事

コメント (0)