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

MQL5ウィザードで作成するRSIを活用したトレードシグナル

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

こんにちは、トレーダーの皆さん!今日は、MQL5ウィザードを使って、強気包み足(Bullish Engulfing)と弱気包み足(Bearish Engulfing)に基づくトレードシグナルの作成方法についてお話しします。この方法を使えば、自分のトレードアイデアをすぐにチェックできるので、非常に便利です。

このウィザードを使うことで、標準ライブラリのクラスを基にしたエキスパートアドバイザー(EA)を簡単に作成できます。具体的には、トレードシグナルのクラスを自作する必要がありますが、その構造や例についてはMQL5ウィザード: トレードシグナルのモジュールの作成方法を参照してください。

1. 強気包み足と弱気包み足

1.1. 強気包み足

強気包み足は、下落トレンドの際に、小さな黒いローソク足の後に大きな白いローソク足が続き、前日のローソク足を完全に包み込む形で形成されます。この時、小さなローソク足の影は短く、大きなローソク足の本体が前日のローソク足を覆っていることがポイントです。

強気包み足パターン

Fig. 1. 強気包み足パターン

このパターンの認識は、CheckPatternBullishEngulfing()メソッドで実装されています。以下のコードを参照してください。

//+------------------------------------------------------------------+
//| 強気包み足の形成をチェックします |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishEngulfing() {
   //--- 強気包み足
   if((Open(2) > Close(2) && // 前のローソク足は弱気
      (Close(1) - Open(1) > AvgBody(1)) && // 強気ローソク足の本体が平均を上回る
      (Close(1) > Open(2)) && // 強気ローソク足の終値が弱気ローソク足の始値を上回る
      (MidOpenClose(2) < CloseAvg(2) && // 下落トレンド
      (Open(1) < Close(2))) // 強気ローソク足の始値が弱気ローソク足の終値より低い
      return (true);
//---
   return (false);
}

このメソッドを使用して「強気包み足」パターンの形成を確認できます。

1.2. 弱気包み足

弱気包み足は、上昇トレンドの際に、小さな白いローソク足の後に大きな黒いローソク足が続き、前日のローソク足を完全に包み込む形で形成されます。

弱気包み足パターン

Fig. 2. 弱気包み足パターン

このパターンの認識は、CheckPatternBearishEngulfing()メソッドで実装されています。こちらもコードを見てみましょう。

//+------------------------------------------------------------------+
//| 弱気包み足の形成をチェックします |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishEngulfing() {
   //--- 弱気包み足
   if((Open(2) < Close(2) && // 前のローソク足は強気
      (Open(1) - Close(1) > AvgBody(1)) && // 弱気ローソク足の本体が平均を上回る
      (Close(1) < Open(2)) && // 弱気ローソク足の終値が強気ローソク足の始値を下回る
      (MidOpenClose(2) > CloseAvg(2) && // 上昇トレンド
      (Open(1) > Close(2))) // 弱気ローソク足の始値が強気ローソク足の終値より高い
      return (true);
//---
   return (false);
}

このメソッドを使用して「弱気包み足」パターンの形成を確認できます。

2. RSI指標によって確認されたトレードシグナル

トレードシグナルを開くためには、RSI指標によって確認される必要があります。RSIの値は、ロングポジションの場合は40未満、ショートポジションの場合は60を超える必要があります。

ポジションのクローズは、RSIの値に依存します。以下の2つのケースで行われます:

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

RSI指標による確認

Fig. 3. RSI指標による確認

  • int CBE_BE_RSI::LongCondition() - ロングポジションを開くための条件をチェックします(結果: 80)
  • int CBE_BE_RSI::ShortCondition() - ショートポジションを開くための条件をチェックします(結果: 80)

2.1. ロングポジションを開く/ショートポジションを閉じる

  1. 強気包み足の形成は、RSI指標によって確認される必要があります:RSI(1) < 40(直近の完了したバーのRSI値が40未満である必要があります)。
  2. ショートポジションは、RSI指標が重要なレベル70や30を上回った場合に閉じる必要があります。
//+------------------------------------------------------------------+
//| エントリーとエグジットの条件をチェックします |
//| 1) 市場エントリー(ロングポジション開放、結果=80) |
//| 2) 市場エグジット(ショートポジションクローズ、結果=40) |
//+------------------------------------------------------------------+
int CBE_BE_RSI::LongCondition() {
   int result = 0;
   //--- エキスパートアドバイザーの動作モードを決定するためのインデックス
   int idx = StartIndex();
   //--- ロングポジションを開く条件のチェック
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1) < 40))
     result = 80;
   //--- ショートポジションを閉じる条件のチェック
   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 CBE_BE_RSI::ShortCondition() {
   int result = 0;
   //--- エキスパートアドバイザーの動作モードを決定するためのインデックス
   int idx = StartIndex();
   //--- ショートポジションを開く条件のチェック
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1) > 60))
     result = 80;
   //--- ロングポジションを閉じる条件のチェック
   if(((RSI(1) < 70) && (RSI(2) > 70)) || ((RSI(1) < 30) && (RSI(2) > 30)))
     result = 40;
   return (result);
}

2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成

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

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

エキスパートアドバイザーの作成

Fig. 4. エキスパートアドバイザーの作成

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

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

Fig. 5. エキスパートアドバイザーの一般的なプロパティ

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

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

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

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

RSIによって確認された強気包み足/弱気包み足に基づくシグナル」モジュールを追加します。

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

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

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

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

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

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

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

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

資金管理プロパティとして、「固定取引量での取引」を使用します。

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

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

「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABE_BE_RSI.mq5に保存されます。このファイルはterminal_data_folder/MQL5/Experts/に格納されます。

生成されたエキスパートアドバイザーのデフォルトの入力パラメータは次のようになります:

//--- メインシグナルの入力
input int Signal_ThresholdOpen = 10; // 開くためのシグナル閾値
input int Signal_ThresholdClose = 10; // 閉じるためのシグナル閾値
input double Signal_PriceLevel = 0.0; // 取引を実行する価格レベル
input double Signal_StopLevel = 50.0; // ストップロスレベル
input double Signal_TakeLevel = 50.0; // テイクプロフィットレベル

これらは次のように置き換える必要があります:

//--- メインシグナルの入力
input int Signal_ThresholdOpen = 40; // 開くためのシグナル閾値
input int Signal_ThresholdClose = 20; // 閉じるためのシグナル閾値
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.04、PeriodRSI=11、MA_period=5)でのバックテストを考察します。

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

エキスパートアドバイザーのテスト結果

Fig. 11. エキスパートアドバイザーのテスト結果

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

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

関連記事

コメント (0)