皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを生成する方法についてお話しします。特に、ダーククラウドカバーやピアシングラインとRSIを組み合わせたシステムについてです。
MQL5ウィザードを使うと、クライアントターミナルに付属の標準ライブラリクラスに基づいて、すぐに使えるエキスパートアドバイザー(EA)を作成できます。自分のトレードアイデアを素早くチェックするのに役立ちます。自分のトレードシグナルクラスを作成するだけで、すぐに使い始めることができます。詳細はMQL5ウィザードでのエキスパートアドバイザーの作成を参照してください。
トレードシグナルクラスはCExpertSignalから派生させる必要があります。次に、LongCondition()やShortCondition()のメソッドを自分の方法でオーバーライドする必要があります。
ここで、ロシア語の本『最高のトレーダーの戦略』では、さまざまなトレーディング戦略が考察されています。今回は、ストキャスティクス、CCI、MFI、およびRSIオシレーターによって確認された反転キャンドルパターンに焦点を当てます。
1. ダーククラウドカバーとピアシングラインの反転キャンドルパターン
1.1. ダーククラウドカバー
ダーククラウドカバーは、上昇トレンドの終わりに発生するベアリッシュキャンドルの反転パターンです。最初の日には長い白いキャンドルが形成され、2日目にはギャップアップが生じます。しかし、2日目は最初の日の中央値を下回ってクローズします。

図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日目のクローズは1日目のボディの中央値を上回ります。これは、底が形成される可能性を示唆しています。このプライスアクションは、バー チャートではあまり明確ではありませんが、キャンドルチャートでは明確に認識できます。2日目のクローズが1日目のボディに浸透するほど、反転シグナルの成功確率が高くなります。

図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. RSIインジケーターによって確認されるトレードシグナル
ロングまたはショートポジションを開くためのトレードシグナルは、RSIインジケーターによって確認される必要があります。RSIの値は、クリティカルレベル(ロングポジションの場合は40、ショートポジションの場合は60)よりも低い/高い必要があります。
開いているポジションのクローズは、RSIの値によって決まります。これは2つのケースで行うことができます:
- RSIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合
- 逆シグナルが確認されない場合(RSIが次のレベルに達した場合:ロングポジションの場合は30、ショートポジションの場合は70)

図3. RSIインジケーターによって確認されたダーククラウドカバーのパターン
- int CDC_PL_RSI::LongCondition() - ロングポジションを開く条件をチェックします(80を返す)とショートポジションをクローズします(40を返す)。
- int CDC_PL_RSI::ShortCondition() - ショートポジションを開く条件をチェックします(80を返す)とロングポジションをクローズします(40を返す)。
2.1. ロングポジションを開く/ショートポジションをクローズする
「ピアシングライン」パターンの形成は、RSIインジケーターによって確認されなければなりません:RSI(1)<40(最後の完了したバーのRSIの値は40未満でなければなりません)。
RSIインジケーターがクリティカルレベル70または30を上回った場合、ショートポジションはクローズされなければなりません。
//+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックする | //| 1) 市場エントリー(ロングポジションを開く、結果=80)| //| 2) 市場エグジット(ショートポジションをクローズする、結果=40)| //+------------------------------------------------------------------+ int CDC_PL_RSI::LongCondition() { int result=0; //--- idxはExpert Advisorの動作モードを決定するのに使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします int idx =StartIndex(); //--- ロングポジションを開く条件をチェックします //--- ピアシングラインパターンの形成とRSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (RSI(1)<40)) result=80; //--- ショートポジションをクローズする条件をチェックします //--- オーバーボード/オーバーソールドレベルのシグナルラインのクロスオーバー(上昇30、上昇70) if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70))) result=40; //--- 結果を返す return(result); }
2.2. ショートポジションを開く/ロングポジションをクローズする
「ダーククラウドカバー」パターンは、RSIインジケーターによって確認されなければなりません:RSI(1)>60(最後の完了したバーのRSIの値は60よりも大きくなければなりません)。
RSIインジケーターがクリティカルレベル70または30を下回った場合、ロングポジションはクローズされなければなりません。
//+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックする | //| 1) 市場エントリー(ショートポジションを開く、結果=80)| //| 2) 市場エグジット(ロングポジションをクローズする、結果=40)| //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition() { int result=0; //--- idxはExpert Advisorの動作モードを決定するのに使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします int idx =StartIndex(); //--- ショートポジションを開く条件をチェックします //--- ダーククラウドカバーパターンの形成とRSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (RSI(1)>60)) result=80; //--- ロングポジションをクローズする条件をチェックします //--- オーバーボード/オーバーソールドレベルのシグナルラインのクロスオーバー(下落70、下落30) if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30))) result=40; //--- 結果を返す return(result); }
2.3. MQL5ウィザードを使ってエキスパートアドバイザーを作成する
CDC_PL_RSIクラスは標準ライブラリクラスには含まれていませんので、使用するにはadc_pl_rsi.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様にacandlepatterns.mqhファイルも同様に行ってください。これらはMetaEditorを再起動した後、MQL5ウィザードで使用できます。
エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します:

図4. MQL5ウィザードによるエキスパートアドバイザーの作成
エキスパートアドバイザーの名前を指定します:

図5. エキスパートアドバイザーの一般的なプロパティ
次に、使用するトレードシグナルのモジュールを選択します。

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

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

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

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

図10. エキスパートアドバイザーのマネーマネジメントプロパティ
「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ADC_PL_RSI.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.02.23、PeriodRSI=20、MA_period=14)に基づくエキスパートアドバイザーのバックテストを考えてみましょう。

図11. ダーククラウドカバー/ピアシングライン + RSIに基づくエキスパートアドバイザーのテスト結果
最適な入力パラメータのセットは、ストラテジーテスターを使用して見つけることができます。
MQL5ウィザードによって作成されたエキスパートアドバイザーのコードは、expert_ad_pl_rsi.mq5に添付されています。