皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを簡単に作成する方法をご紹介します。特に「3本の黒いカラス」や「3本の白い兵士」といった逆転のローソク足パターンに基づいたシグナルを、MFI(マーケットファシリテーションインデックス)で確認する方法です。
このウィザードを使うと、MetaTrader 5のクライアント端末に同梱されている標準ライブラリを活用して、すぐに使えるエキスパートアドバイザー(EA)を作成できます。トレードアイデアを素早くチェックできるので、自分のトレーディングシグナルクラスを作成するだけでOKです。詳細については、MQL5ウィザードでのエキスパートアドバイザーの作成を参照してください。
このシグナルクラスは、CExpertSignalから派生し、LongCondition()とShortCondition()という仮想メソッドをオーバーライドする必要があります。
ロシア語の本、「ベストトレーダーの戦略」では、多くのトレーディング戦略が考察されていますが、今回は逆転のローソク足パターンに焦点を当て、ストキャスティクス、CCI、MFI、RSIのオシレーターによって確認されたパターンを探ります。
最も効果的なのは、ローソク足パターンの形成を確認するために、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. MFIインジケーターで確認されたトレードシグナル
ロングまたはショートポジションを開くためのトレードシグナルは、MFIインジケーターによって確認される必要があります。ロングポジションの場合はMFIの値が40未満、ショートポジションの場合は60を超える必要があります。
オープンポジションのクローズは、MFIインジケーターの値によって決まります。以下の2つのケースで行われます:
- MFIが逆の臨界レベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合。
- 逆シグナルが確認されなかった場合(MFIが次のレベルに達した時:ロングポジションの場合は30、ショートポジションの場合は70)。

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

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

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

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

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

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

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

Fig. 10. エキスパートアドバイザーのマネーマネジメントプロパティ
「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABC_WS_MFI.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、PeriodMFI=37、MA_period=13)を確認します。
エキスパートアドバイザーの作成時には、固定ボリュームを使用しました(固定ロット取引、0.1)、トレーリングストップアルゴリズムは使用していません(トレーリングなし)。

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