皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを作成する方法をご紹介します。特に「ダーククラウドカバー」と「ピアシングライン」に基づくシグナルで、CCIを活用します。
MQL5ウィザードは、クライアントターミナルと共に提供されるスタンダードライブラリのクラスを元に、即使用可能なエキスパートアドバイザー(EA)を作成することができます。自分のトレードアイデアを素早くチェックできるので、非常に便利です。自分自身のトレーディングシグナルクラスを作成すれば、具体的なシグナルを生成できます。
このクラスはCExpertSignalから派生させ、LongCondition()とShortCondition()メソッドをオーバーライドする必要があります。
ここでは、トレードシグナルのモジュールを作成するために「ダーククラウドカバー」と「ピアシングライン」のリバーサルパターンに焦点を当て、CCI指標で確認します。このモジュールは、CCandlePatternクラスに基づいています。
1. ダーククラウドカバーとピアシングラインのリバーサルパターン
1.1. ダーククラウドカバー
ダーククラウドカバーは、上昇トレンドの終わりに現れるベアリッシュリバーサルパターンです。初日には長い白いキャンドルが形成され、2日目にはギャップアップが生じますが、2日目の終値は初日の中間点を下回ります。

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. ピアシングラインキャンドルパターン
ピアシングラインパターンの認識は、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つのケースで行われます:
- CCIラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は-80)に達した場合
- リバースシグナルが確認されていない場合(CCIが次のレベルに達したとき:ロングポジションの場合は-80、ショートポジションの場合は80)

Fig. 3. CCI指標で確認されたダーククラウドカバー
- int CDC_PL_CCI::LongCondition() - ロングポジションをオープンする条件をチェック(結果=80)し、ショートポジションをクローズする条件をチェック(結果=40);
- int CDC_PL_CCI::ShortCondition() - ショートポジションをオープンする条件をチェック(結果=80)し、ロングポジションをクローズする条件をチェック(結果=40)。
2.1. ロングポジションをオープン/ショートポジションをクローズ
「ピアシングライン」パターンの形成は、CCI指標によって確認される必要があります:CCI(1) < -50(最後に完了したバーのCCIの値が-50未満でなければなりません)。
ショートポジションは、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. ショートポジションをオープン/ロングポジションをクローズ
「ダーククラウドカバー」パターンの形成は、CCI指標によって確認される必要があります:CCI(1) > 50(最後に完了したバーのCCIの値が50を超えている必要があります)。
ロングポジションは、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. 5. エキスパートアドバイザーの一般的なプロパティ
次に使用するトレードシグナルのモジュールを選択します。

Fig. 6. エキスパートアドバイザーのシグナルプロパティ
私たちの場合、トレードシグナルのモジュールは1つだけ使用します。
「CCIで確認されたダーククラウドカバー/ピアシングラインに基づくシグナル」モジュールを追加します:

Fig. 7. エキスパートアドバイザーのシグナルプロパティ
トレードシグナルモジュールが追加されました:

Fig. 8. エキスパートアドバイザーのシグナルプロパティ
トレーリングプロパティを選択できますが、「トレーリングストップを使用しない」を選択します:

Fig. 9. エキスパートアドバイザーのトレーリングプロパティ
マネーマネジメントプロパティについては「固定取引量で取引」を使用します:

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に基づくエキスパートアドバイザーのテスト結果
最適な入力パラメータは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。
MQL5ウィザードで作成したエキスパートアドバイザーのコードは、expert_adc_pl_cci.mq5に添付しています。