ホーム システムトレード 投稿

MQL5ウィザードを使った「ハンマー/ハンギングマン」パターンとRSIを利用したトレード信号

皆さん、こんにちは!今日は、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つの条件が考慮されます:

  1. RSIが逆のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合
  2. 逆信号が確認できない場合(RSIが次のレベルに達した場合:ロングポジションは30、ショートポジションは70)

RSIインジケーターによる確認

Fig. 3. ハラミパターン、RSIインジケーターによる確認

  • int CH_HM_RSI::LongCondition() - ロングポジションをオープンする条件をチェック(結果は80)
  • int CH_HM_RSI::ShortCondition() - ショートポジションをオープンする条件をチェック(結果は80)

2.1. ロングポジションをオープン/ショートポジションをクローズ

  1. 「ハンマー」パターンの形成は、RSIインジケーターで確認される必要があります:RSI(1)<40(最後の完了したバーのRSI値は40未満でなければなりません)。

  2. ショートポジションは、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. ショートポジションをオープン/ロングポジションをクローズ

  1. 「ハンギングマン」パターンの形成は、RSIインジケーターで確認される必要があります:RSI(1)>60(最後の完了したバーのRSI値は60より大きくなければなりません)。

  2. ロングポジションは、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ウィザードを起動します:

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)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリング未使用)。

ハンマー/ハンギングマン+RSIに基づくエキスパートアドバイザーのテスト結果

Fig. 11. ハンマー/ハンギングマン+RSIに基づくエキスパートアドバイザーのテスト結果

最適な入力パラメータのセットは、MetaTrader 5クライアント端末のストラテジーテスターを使用して見つけることができます。

MQL5ウィザードによって生成されたエキスパートアドバイザーのコードは、expert_ah_hm_rsi.mq5に添付されています。

関連記事

コメント (0)