トレーダーの皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを簡単に作成する方法をご紹介します。このツールを使うと、事前に用意されたエキスパートアドバイザー(EA)を、クライアントターミナルに付属している標準ライブラリのクラスを基に作成できます。詳細はMQL5ウィザードでのエキスパートアドバイザーの作成についてをチェックしてみてください。
トレードアイデアを迅速にチェックするには、自分自身のトレーディングシグナルクラスを作成するだけでOK。このクラスの構造とサンプルについては、記事MQL5ウィザード:トレーディングシグナルのモジュールの作成方法に記載されています。
基本的なアイデアは、トレーディングシグナルクラスがCExpertSignalから派生し、次に、LongCondition()とShortCondition()の仮想メソッドを自分のメソッドでオーバーライドすることです。
ロシア語の書籍『ベストトレーダーの戦略』では、多くのトレーディング戦略が考察されていますが、ここではRSIやストキャスティクス、CCI、MFIなどのオシレーターに裏付けられた反転ローソク足パターンに焦点を当てていきます。
最も良い方法は、ローソク足パターンをチェックするために、CExpertSignalから派生した別のクラスを作成することです。ローソク足パターンによって生成されたトレードシグナルを確認するには、CCandlePatternから派生したクラスを作成し、必要な機能(例えば、オシレーターによる確認)を追加するだけです。
1. 「3つの黒いカラス」と「3つの白い兵士」の反転ローソク足パターン
1.1. 3つの黒いカラス
これは、現在の上昇トレンドの反転を予測するために使われるベアリッシュなローソク足パターンです。このパターンは、前日の終値よりも低い位置で終了した、連続した3本の長い実体のローソク足から構成されています。

Fig. 1. 3つの黒いカラスのローソク足パターン
「3つの黒いカラス」パターンの認識は、CCandlePatternクラスのCheckPatternThreeBlackCrowsメソッドで実装されています:
//+------------------------------------------------------------------+ //| 3つの黒いカラスのローソク足パターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() { //--- 3つの黒いカラス if((Open(3)-Close(3)>AvgBody(1)) && // (長い黒) (Open(2)-Close(2)>AvgBody(1)) && (Open(1)-Close(1)>AvgBody(1)) && (MidPoint(2)3)) && // (下位中間点) (MidPoint(1) 2))) return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS)メソッドは「3つの黒いカラス」ローソク足パターンの形成をチェックするために使用されます。
1.2. 3つの白い兵士のローソク足パターン
これは、現在の下降トレンドの反転を予測するために使われるブルリッシュなローソク足パターンです。このパターンは、前日の終値よりも高い位置で終了した、連続した3本の長い実体のローソク足から構成されています。
このパターンは、2日目のキャンドルが1日目の範囲の上半分で開く限り有効です。2日目の終わりには高値近くで終了し、非常に小さいか、存在しない上影を残す必要があります。そして、同じパターンが3日目に繰り返されます。

Fig. 2. 3つの白い兵士のローソク足パターン
「3つの白い兵士」パターンの認識メソッドは以下の通りです:
//+------------------------------------------------------------------+ //| 3つの白い兵士のローソク足パターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeWhiteSoldiers() { //--- 3つの白い兵士 if((Close(3)-Open(3)>AvgBody(1)) && // (長い白) (Close(2)-Open(2)>AvgBody(1)) && (Close(1)-Open(1)>AvgBody(1)) && (MidPoint(2)>MidPoint(3)) && // (上位中間点) (MidPoint(1)>MidPoint(2))) return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS)メソッドは「3つの白い兵士」ローソク足パターンの形成をチェックするために使用されます。
2. RSIインジケーターで確認されたトレードシグナル
ロングまたはショートポジションを開くためのトレーディングシグナルは、RSIインジケーターによって確認される必要があります。RSIの値は、ロングポジションの場合は40未満、ショートポジションの場合は60を超える必要があります。
開いているポジションのクローズは、RSIの値に依存します。これには2つのケースがあります:
- RSIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合
- 逆シグナルが確認されない場合(RSIが次のレベル30(ロングポジション)または70(ショートポジション)に達した場合)

Fig. 3. 3つの黒いカラスのパターン、ストキャスティクスインジケーターによって確認
- int CML_RSI::LongCondition() - ロングポジションを開く条件をチェックします(結果は80)、ショートポジションをクローズします(結果は40);
- int CML_RSI::ShortCondition() - ショートポジションを開く条件をチェックします(結果は80)、ロングポジションをクローズします(結果は40)。
2.1. ロングポジションを開く/ショートポジションをクローズする
-
「3つの白い兵士」パターンの形成は、RSIインジケーターによって確認される必要があります:RSI(1)<40(最後の完了したバーのRSIの値は40未満である必要があります)。
-
ショートポジションは、RSIインジケーターがクリティカルレベル70または30を上回った場合にクローズする必要があります。
//+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場へのエントリー(ロングポジションを開く、結果=80) | //| 2) 市場からのエグジット(ショートポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::LongCondition() { int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします int idx =StartIndex(); //--- ロングポジションを開く条件のチェック //--- 「3つの白い兵士」パターンの形成とRSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (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. ショートポジションを開く/ロングポジションをクローズする
-
「3つの黒いカラス」パターンの形成は、RSIインジケーターによって確認される必要があります:RSI(1)>60(最後の完了したバーのRSIの値は60より大きい必要があります)。
-
ロングポジションは、RSIインジケーターがクリティカルレベル70または30を下回った場合にクローズする必要があります。
//+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場へのエントリー(ショートポジションを開く、結果=80) | //| 2) 市場からのエグジット(ロングポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::ShortCondition() { int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします int idx =StartIndex(); //--- ショートポジションを開く条件のチェック //--- 「3つの黒いカラス」パターンの形成とRSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (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ウィザードを使ったエキスパートアドバイザーの作成
CML_RSIクラスは標準ライブラリのクラスに含まれていないため、使用するにはacml_rsi.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、candlepatterns.mqhファイルも同様に保存してください。MQL5ウィザードで使用するには、MetaEditorを再起動する必要があります。
エキスパートアドバイザーを作成するには、MQL5ウィザードを立ち上げます:

Fig. 4. MQL5ウィザードを使ったエキスパートアドバイザーの作成
エキスパートアドバイザーの名前を指定しましょう:

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

Fig. 6. エキスパートアドバイザーのシグナルプロパティ
この場合、トレードシグナルのモジュールは1つだけ使用します。
「3つの黒いカラス/3つの白い兵士」に基づくトレーディングシグナルのモジュールを追加します:

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

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

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

Fig. 10. エキスパートアドバイザーのマネーマネジメントプロパティ
「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABC_WS_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ウィザードによって生成されたエキスパートアドバイザーは、トレードシグナルモジュールからの「投票」を使用してポジションを開いたりクローズしたりします。メインモジュールの投票結果も使用されますが、その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.02.02、PeriodRSI=37、MA_period=51)。
エキスパートアドバイザーの作成時に固定ボリューム(固定ロットでのトレーディング、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリング使用せず)。

Fig. 11. 3つの黒いカラス/3つの白い兵士 + RSIに基づくエキスパートアドバイザーのテスト結果
最良の入力パラメータのセットは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。
MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_abc_ws_rsi.mq5に添付されています。