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

MQL5ウィザードで作るRSI確認済みのブルリッシュ・ハラミ/ベアリッシュ・ハラミトレードシグナル

添付ファイル
313.zip (6.47 KB, ダウンロード 0回)

MQL5ウィザードは、エキスパートアドバイザー(EA)を簡単に作成できるツールです。標準ライブラリクラスを使用して、トレードアイデアを素早くチェックするためのトレードシグナルクラスを作成できます。詳細はMQL5ウィザード:トレードシグナルモジュールの作成方法を参照してください。

トレードシグナルクラスは、CExpertSignalから派生させ、LongCondition()ShortCondition()メソッドをオーバーライドして自分のメソッドを作成する必要があります。

トレード戦略については、ロシア語の書籍「最高のトレーダーの戦略」に多くの戦略が紹介されていますが、今回はRSIで確認されたリバーサルキャンドルパターンに焦点を当てます。

ここでは、RSIで確認された「ブルリッシュ・ハラミ」と「ベアリッシュ・ハラミ」リバーサルキャンドルパターンに基づくトレードシグナルを考察します。

1. ブルリッシュ・ハラミとベアリッシュ・ハラミのリバーサルキャンドルパターン

1.1. ブルリッシュ・ハラミ

ブルリッシュ・ハラミは、下降トレンドの中で形成されます。大きなキャンドルの後に、そのボディが大きなキャンドルのボディの範囲内に収まる小さなキャンドルが続きます。このパターンは、下降トレンドが転換する可能性を示し、ロングポジションを取る良いタイミングを示唆しています。2つ目のキャンドルはギャップアップでオープンします。

ブルリッシュ・ハラミのキャンドルパターン

ブルリッシュ・ハラミのキャンドルパターン

「ブルリッシュ・ハラミ」パターンの認識は、CCandlePatternクラスのCheckPatternBullishHarami()メソッドで実装されています。

//+------------------------------------------------------------------+
//| ブルリッシュ・ハラミのキャンドルパターン形成確認 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishHarami()
  {
//--- ブルリッシュ・ハラミ
   if((Close(1)>Open(1))              && // 最後の完了バーはブル(白の日)
     ((Open(2)-Close(2)>AvgBody(1))  && // 前のキャンドルはベア、ボディは平均より大きい
     ((Close(1)<Open(2))              && // ブルキャンドルの終値がベアキャンドルの始値より低い
      (Open(1)>Close(2)))             && // ブルキャンドルの始値がベアキャンドルの終値より高い
      (MidPoint(2)<CloseAvg(2)))         // 下降トレンド
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)メソッドを使用して「ブルリッシュ・ハラミ」パターンの形成を確認します。

1.2. ベアリッシュ・ハラミ

ベアリッシュ・ハラミは上昇トレンドの中で形成されます。大きなキャンドルの後に、そのボディが大きなキャンドルのボディの範囲内に収まる小さなキャンドルが続きます。このパターンは、上昇トレンドが転換する可能性を示し、ショートポジションを取る良いタイミングを示唆しています。2つ目のキャンドルはギャップダウンでオープンします。

ベアリッシュ・ハラミのキャンドルパターン

ベアリッシュ・ハラミのキャンドルパターン

「ベアリッシュ・ハラミ」パターンの認識は、CCandlePatternクラスのCheckPatternBearishHarami()メソッドで実装されています。

//+------------------------------------------------------------------+
//| ベアリッシュ・ハラミのキャンドルパターン形成確認 |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishHarami()
  {
//--- ベアリッシュ・ハラミ
   if((Close(1)<Open(1))              && // 最後の完了バーはベア(黒の日)
     ((Close(2)-Open(2)>AvgBody(1))  && // 前のキャンドルはブル、ボディは平均より大きい
     ((Close(1)>Open(2))              && // ベアキャンドルの終値がブルキャンドルの始値より高い
      (Open(1)<Close(2)))             && // ベアキャンドルの始値がブルキャンドルの終値より低い
      (MidPoint(2)>CloseAvg(2)))         // 上昇トレンド
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)メソッドを使用して「ベアリッシュ・ハラミ」パターンの形成を確認します。

2. RSIインジケーターで確認されたトレードシグナル

ロングまたはショートポジションを開くためのトレードシグナルは、RSIインジケーターで確認される必要があります。RSIの値は、クリティカルレベル(ロングポジションの場合は40、ショートポジションの場合は60)よりも低く/高くなければなりません。

オープンポジションのクローズは、RSIの値に基づいて行われます。以下の2つの条件で行われます:

  • RSIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合
  • 逆シグナルが確認されない場合(RSIが次のレベルに達したとき:ロングポジションの場合は30、ショートポジションの場合は70)

RSIインジケーターで確認されたブルリッシュ・ハラミ

RSIインジケーターで確認されたブルリッシュ・ハラミ

  • int CBH_BH_RSI::LongCondition() - ロングポジションを開く条件をチェック(80を返す)、ショートポジションをクローズする条件をチェック(40を返す);
  • int CBH_BH_RSI::ShortCondition() - ショートポジションを開く条件をチェック(80を返す)、ロングポジションをクローズする条件をチェック(40を返す)。

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

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

  2. ショートポジションは、RSIインジケーターがクリティカルレベル70または30を上回った場合にクローズする必要があります。

//+------------------------------------------------------------------+
//| 市場へのエントリーおよびエグジット条件をチェック |
//| 1) 市場エントリー(ロングポジションオープン、結果=80) |
//| 2) 市場エグジット(ショートポジションクローズ、結果=40) |
//+------------------------------------------------------------------+
int CBH_BH_RSI::LongCondition()
  {
   int result=0;
   //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックで取引条件をチェック
   //--- idx=1 - この場合、EAはニュースバーでのみ取引条件をチェック
   int idx   =StartIndex();
   //--- ロングポジションオープンの条件をチェック
   //--- ブルリッシュ・ハラミパターン形成とRSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40))
     result=80;
   //--- ショートポジションクローズの条件をチェック
   //--- RSIのオーバーボート/オーバーソールドレベル(上昇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 CBH_BH_RSI::ShortCondition()
  {
   int result=0;
   //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックで取引条件をチェック
   //--- idx=1 - この場合、EAはニュースバーでのみ取引条件をチェック
   int idx   =StartIndex();
   //--- ショートポジションオープンの条件をチェック
   //--- ベアリッシュ・ハラミパターン形成とRSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60))
     result=80;
   //--- ロングポジションクローズの条件をチェック
   //--- RSIのオーバーボート/オーバーソールドレベル(下降70、下降30)のシグナルラインのクロスオーバー
  if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))
     result=40;
   //--- 結果を返す
   return(result);
  }

2.3. MQL5ウィザードを使用してエキスパートアドバイザーを作成する

CBH_BH_RSIクラスは標準ライブラリクラスに含まれていないため、acml_rsi.mqhファイルをダウンロードし、client_terminal_data\MQL5\Include\Expert\Signal\MySignalsフォルダに保存する必要があります。同様に、acandlepatterns.mqhファイルも保存してください。MetaEditorを再起動した後、MQL5ウィザードで使用できます。

エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します:

MQL5ウィザードでエキスパートアドバイザーを作成する

MQL5ウィザードでエキスパートアドバイザーを作成する

エキスパートアドバイザーの名前を指定します:

エキスパートアドバイザーの一般プロパティ

エキスパートアドバイザーの一般プロパティ

次に、使用するトレードシグナルモジュールを選択します。

エキスパートアドバイザーのシグナルプロパティ

エキスパートアドバイザーのシグナルプロパティ

この場合、トレードシグナルモジュールは1つだけ使用します。

「RSIで確認されたブルリッシュ・ハラミ/ベアリッシュ・ハラミに基づくシグナル」モジュールを追加します:

エキスパートアドバイザーのシグナルプロパティ

エキスパートアドバイザーのシグナルプロパティ

トレードシグナルモジュールが追加されました:

エキスパートアドバイザーのシグナルプロパティ

エキスパートアドバイザーのシグナルプロパティ

任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を使用します:

エキスパートアドバイザーのトレーリングプロパティ

エキスパートアドバイザーのトレーリングプロパティ

資金管理プロパティについては、「固定取引量で取引」を使用します:

エキスパートアドバイザーの資金管理プロパティ

エキスパートアドバイザーの資金管理プロパティ

「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABH_BH_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.03.11、PeriodRSI=37、MA_period=7)でのエキスパートアドバイザーのバックテストを考察します。

エキスパートアドバイザーの作成には固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用しません(トレーリングなし)。

ブルリッシュ・ハラミ/ベアリッシュ・ハラミ + RSIに基づくエキスパートアドバイザーのテスト結果

ブルリッシュ・ハラミ/ベアリッシュ・ハラミ + RSIに基づくエキスパートアドバイザーのテスト結果

最適な入力パラメータを見つけるためには、ストラテジーテスターを使用することができます。

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


関連記事

コメント (0)