皆さん、こんにちは!今日は、MQL5ウィザードを使って、ハンマーやハンギングマンパターンに基づいたトレード信号をRSIで確認する方法についてお話しします。このウィザードを使うと、MetaTrader 5を通じて簡単にエキスパートアドバイザー(EA)を作成できますよ!
まず、トレードアイデアを素早くチェックするためには、自分自身のトレード信号クラスを作成する必要があります。このクラスの構造と例については、MQL5ウィザード:トレード信号モジュールの作成方法を参照してください。
1. ハンマーとハンギングマンの逆転キャンドルパターン
1.1. ハンマー
ハンマーは、小さな実体と長い下ヒゲを持つキャンドルで、下落トレンドの後に形成されます。このパターンは、ベアリッシュトレンドの終わりを示唆します。実体の色は重要ではありませんが、ブルリッシュハンマーは高い上昇の可能性を示します。

Fig. 1. ハンマーキャンドルパターン
「ハンマー」パターンの認識は、CCandlePatternクラスのCheckPatternHammer()メソッドで実装されています。
//+------------------------------------------------------------------+ //| ハンマーキャンドルパターンの形成をチェックするメソッド | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer() { //--- ハンマー if((MidPoint(1)<CloseAvg(2)) && // 下落トレンド (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // 実体が上部1/3 (Close(1)2)) && (Open(1) 2))) return(true); //--- return(false); }
「ハンマー」キャンドルパターンの形成をチェックするためには、CheckCandlestickPattern(CANDLE_PATTERN_HAMMER)メソッドを使用します。
1.2. ハンギングマン
ハンギングマンは、小さな実体と長い下ヒゲを持つキャンドルで、上昇トレンドの後に形成されます。このパターンは、ブルリッシュトレンドの終わりを示唆します。

Fig. 2. ハンギングマンキャンドルパターン
「ハンギングマン」パターンの認識は、CCandlePatternクラスのCheckPatternHangingMan()メソッドで実装されています。
//+------------------------------------------------------------------+ //| ハンギングマンキャンドルパターンの形成をチェックするメソッド | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan() { //--- ハンギングマン if((MidPoint(1)>CloseAvg(2)) && // 上昇トレンド (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // 実体が上部1/3 (Close(1)>Close(2)) && (Open(1)>Open(2))) return(true); //--- return(false); }
「ハンギングマン」キャンドルパターンの形成をチェックするためには、CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN)メソッドを使用します。
2. RSIインジケーターによるトレード信号の確認
トレード信号をオープンするには、RSIインジケーターによる確認が必要です。RSIの値は、ロングポジションの場合は40未満、ショートポジションの場合は60を超えている必要があります。
ポジションのクローズは、RSIの値に依存します。以下の2つの条件が考慮されます:
- RSIが逆のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合
- 逆信号が確認できない場合(RSIが次のレベルに達した場合:ロングポジションは30、ショートポジションは70)

Fig. 3. ハラミパターン、RSIインジケーターによる確認
- int CH_HM_RSI::LongCondition() - ロングポジションをオープンする条件をチェック(結果は80)
- int CH_HM_RSI::ShortCondition() - ショートポジションをオープンする条件をチェック(結果は80)
2.1. ロングポジションをオープン/ショートポジションをクローズ
「ハンマー」パターンの形成は、RSIインジケーターで確認される必要があります:RSI(1)<40(最後の完了したバーのRSI値は40未満でなければなりません)。
ショートポジションは、RSIインジケーターがクリティカルレベル70または30を上回った場合にクローズされます。
//+------------------------------------------------------------------+ //| 市場のエントリーとエグジットの条件をチェックするメソッド | //| 1) 市場エントリー(ロングポジションオープン、結果=80) | //| 2) 市場エグジット(ショートポジションクローズ、結果=40) | //+------------------------------------------------------------------+ int CH_HM_RSI::LongCondition() { int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます int idx =StartIndex(); //--- ロングポジションをオープンする条件をチェック //--- ハンマーの形成とRSI<30 if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (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 CH_HM_RSI::ShortCondition() { int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます int idx =StartIndex(); //--- ショートポジションをオープンする条件をチェック //--- ハンギングマンの形成とRSI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (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ウィザードを使ったエキスパートアドバイザーの作成
CH_HM_RSIクラスは標準ライブラリクラスには含まれていません。利用するには、ach_hm_rsi.mqhファイルをダウンロードし、client_terminal_data\MQL5\Include\Expert\Signal\MySignalsフォルダーに保存する必要があります。同様に、candlepatterns.mqhファイルも保存してください。これらはMetaEditorの再起動後にMQL5ウィザードで使用可能になります。
エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します:

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

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

Fig. 6. エキスパートアドバイザーの信号プロパティ
私たちは、トレード信号モジュールを1つだけ使用します。
「RSIで確認されたハンマー/ハンギングマンに基づく信号」モジュールを追加します:

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

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

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

Fig. 10. エキスパートアドバイザーのマネーマネジメントプロパティ
「終了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードが受け取れます。これは、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の入力パラメータは、ポジションのオープンとクローズのための閾値レベルを指定することができます。
ロング条件()およびショート条件()メソッドのコードでは、閾値の固定値が指定されています:
- オープンポジション: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.03、PeriodRSI=33、MA_period=2)です。
エキスパートアドバイザーの作成において、固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリング未使用)。

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