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

MQL5ウィザードでの「ダーククラウドカバー/ピアシングライン」に基づくトレードシグナルとCCI

皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを作成する方法をご紹介します。特に「ダーククラウドカバー」と「ピアシングライン」に基づくシグナルで、CCIを活用します。

MQL5ウィザードは、クライアントターミナルと共に提供されるスタンダードライブラリのクラスを元に、即使用可能なエキスパートアドバイザー(EA)を作成することができます。自分のトレードアイデアを素早くチェックできるので、非常に便利です。自分自身のトレーディングシグナルクラスを作成すれば、具体的なシグナルを生成できます。

このクラスはCExpertSignalから派生させ、LongCondition()ShortCondition()メソッドをオーバーライドする必要があります。

ここでは、トレードシグナルのモジュールを作成するために「ダーククラウドカバー」と「ピアシングライン」のリバーサルパターンに焦点を当て、CCI指標で確認します。このモジュールは、CCandlePatternクラスに基づいています。

1. ダーククラウドカバーとピアシングラインのリバーサルパターン

1.1. ダーククラウドカバー

ダーククラウドカバーは、上昇トレンドの終わりに現れるベアリッシュリバーサルパターンです。初日には長い白いキャンドルが形成され、2日目にはギャップアップが生じますが、2日目の終値は初日の中間点を下回ります。

Fig. 1. ダーククラウドカバーキャンドルパターン

Fig. 1. ダーククラウドカバーキャンドルパターン

このパターンの認識は、CCandlePatternクラスのCheckPatternDarkCloudCover()メソッドで行われます。以下のコードで確認できます。

//+------------------------------------------------------------------+
//| ダーククラウドカバーキャンドルパターンの形成をチェックします。 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternDarkCloudCover()
  {
//--- ダーククラウドカバー 
   if((Close(2) - Open(2) > AvgBody(1)) && // (長い白)
      (Close(1) < Close(2)) && // 
      (Close(1) > Open(2)) && // (前のボディ内で終了)
      (MidOpenClose(2) > CloseAvg(1)) && // (上昇トレンド)
      (Open(1) > High(2)))                 // (新しい高値でオープン)
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)メソッドを使用して、ダーククラウドカバーキャンドルパターンの形成をチェックします。


1.2. ピアシングライン

2日目のギャップダウンは、下落トレンドを継続させます。しかし、2日目の終値は初日のボディの中間点を上回ります。これは、底が形成される可能性を示唆しています。この価格アクションは、バーチャートよりもキャンドルチャートでの方がはっきりと認識できます。2日目の終値が初日のボディにどれだけ侵入するかが、リバーサルシグナルの成功率に影響します。

Fig. 2. ピアシングラインキャンドルパターン

Fig. 2. ピアシングラインキャンドルパターン

ピアシングラインパターンの認識は、CCandlePatternクラスのCheckPatternPiercingLine()メソッドで行われます。

//+------------------------------------------------------------------+
//| ピアシングラインキャンドルパターンの形成をチェックします。 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternPiercingLine()
  {
//--- ピアシングライン
   if((Close(1) - Open(1) > AvgBody(1)) && // (長い白)
      (Open(2) - Close(2) > AvgBody(1)) && // (長い黒)
      (Close(1) > Close(2)) && //
      (Close(1) < Open(2)) && // (前のボディ内で終了)
      (MidOpenClose(2) < CloseAvg(2)) && // (下降トレンド)
      (Open(1) < Low(2)))                 // (前のローより低くオープン)
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)メソッドを使用して、ピアシングラインキャンドルパターンの形成をチェックします。


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

ロングまたはショートポジションをオープンするためのトレーディングシグナルは、CCI指標によって確認される必要があります。CCIの値は、クリティカルレベル(ロングポジションの場合は-50、ショートポジションの場合は50)を越える必要があります。

オープンポジションのクローズは、CCIの値に基づいて決定されます。以下の2つのケースで行われます:

  1. CCIラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は-80)に達した場合
  2. リバースシグナルが確認されていない場合(CCIが次のレベルに達したとき:ロングポジションの場合は-80、ショートポジションの場合は80)

Fig. 3. CCI指標で確認されたダーククラウドカバー

Fig. 3. CCI指標で確認されたダーククラウドカバー


  • int CDC_PL_CCI::LongCondition() - ロングポジションをオープンする条件をチェック(結果=80)し、ショートポジションをクローズする条件をチェック(結果=40);
  • int CDC_PL_CCI::ShortCondition() - ショートポジションをオープンする条件をチェック(結果=80)し、ロングポジションをクローズする条件をチェック(結果=40)。

2.1. ロングポジションをオープン/ショートポジションをクローズ

  1. 「ピアシングライン」パターンの形成は、CCI指標によって確認される必要があります:CCI(1) < -50(最後に完了したバーのCCIの値が-50未満でなければなりません)。

  2. ショートポジションは、CCI指標が-80のクリティカルレベルを上回るか、80のクリティカルレベルを下回った場合にクローズします。

//+------------------------------------------------------------------+
//| マーケットへのエントリーとエグジットの条件をチェックします。 |
//| 1) マーケットエントリー(ロングポジションオープン、結果=80) |
//| 2) マーケットエグジット(ショートポジションクローズ、結果=40) |
//+------------------------------------------------------------------+
int CDC_PL_CCI::LongCondition()
  {
   int result=0;
//--- idxはエキスパートアドバイザーの動作モードを決定するために使用されます
//--- idx=0 - この場合EAは各ティックで取引条件をチェックします
//--- idx=1 - この場合EAはニュースバーのみに取引条件をチェックします
   int idx  = StartIndex();
//--- ロングポジションをオープンする条件をチェック
//--- ピアシングラインパターンの形成とCCI < -50
   if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (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のレベルを下回った場合にクローズします。

//+------------------------------------------------------------------+
//| マーケットへのエントリーとエグジットの条件をチェックします。 |
//| 1) マーケットエントリー(ショートポジションオープン、結果=80) |
//| 2) マーケットエグジット(ロングポジションクローズ、結果=40) |
//+------------------------------------------------------------------+
int CDC_PL_CCI::ShortCondition()
  {
   int result=0;
//--- idxはエキスパートアドバイザーの動作モードを決定するために使用されます
//--- idx=0 - この場合EAは各ティックで取引条件をチェックします
//--- idx=1 - この場合EAはニュースバーのみに取引条件をチェックします
   int idx  = StartIndex();
//--- ショートポジションをオープンする条件をチェック
//--- ダーククラウドカバーの形成とCCI > 50
   if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (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ウィザードを使用したエキスパートアドバイザーの作成

CDC_PL_CCIクラスはスタンダードライブラリのクラスには含まれていないため、acdc_pl_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_ADC_PL_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ウィザードによって生成されたエキスパートアドバイザーは、トレードシグナルのモジュールからの「投票」に基づいてポジションをオープン・クローズします。メインモジュールの投票結果も使用されますが、そのLongCondition()とShortCondition()メソッドは常に0を返します。

メインモジュールの投票結果も「投票」平均化に使用されます。私たちの場合、メインモジュール+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=15、MA_period=19)。

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

Fig. 11. ダーククラウドカバー/ピアシングライン + CCIに基づくエキスパートアドバイザーのテスト結果

Fig. 11. ダーククラウドカバー/ピアシングライン + CCIに基づくエキスパートアドバイザーのテスト結果


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

MQL5ウィザードで作成したエキスパートアドバイザーのコードは、expert_adc_pl_cci.mq5に添付しています。


関連記事

コメント (0)