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

MQL5ウィザードを使った朝星・夕星パターンとRSIによるトレードシグナル

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

今回は、MQL5ウィザードを使って、朝星・夕星パターンとRSIを組み合わせたトレードシグナルを作成する方法についてお話しします。このウィザードは、MetaTrader 5のクライアント端末に付属している標準ライブラリクラスを基に、すぐに使えるエキスパートアドバイザー(EA)を作成することができます。

トレードアイデアを素早くチェックできるので、トレーディングシグナルのクラスを作成するだけでOKです。このクラスの構造やサンプルについては、MQL5ウィザード:トレーディングシグナルモジュールの作成方法を参考にしてください。

基本的な考え方は、トレーディングシグナルのクラスがCExpertSignalから派生し、次に自分自身のメソッドでLongCondition()ShortCondition()の仮想メソッドをオーバーライドする必要があります。

ロシア語の書籍「成功したトレーダーの戦略」には、数多くのトレーディング戦略が掲載されていますが、特に注目したいのは、ストキャスティクスCCIMFIRSIなどのオシレーターによって確認された反転ローソク足パターンです。

ここでは、「朝星」と「夕星」(朝のドージ星/夕のドージ星)という反転ローソク足パターンに基づくシグナルをRSI指標で確認する方法を見ていきます。トレードシグナルのモジュールはCCandlePatternクラスに基づいており、ローソク足パターンを用いたトレードシグナルの作成における簡単なサンプルです。

1. 「朝星」と「夕星」の反転ローソク足パターン

1.1. 朝星

このパターンは、下落トレンドの反転を示します。3本のローソク足で構成されています(図1)。長い黒いローソク足の後に、色は問わず小さなボディのローソク足があり、黒いローソク足のボディの外に位置します。この小さなボディは、買い手と売り手の力が均等で、市場がトレンドを変える準備が整ったことを意味します。

パターンの3本目のローソク足は、強気のローソク足で、2本目のローソク足のボディとは重なっておらず、終値は1本目の(弱気の)ローソク足のボディの中にあります。このモデルの結果となるローソク足も図1に示されています。

2本目のローソク足がドージ型の場合、このモデルは「朝のドージ星」と呼ばれます。

図1. '朝星'と'朝のドージ星'のローソク足パターン

図1. '朝星'と'朝のドージ星'のローソク足パターン

「朝星」パターンの識別は、CheckPatternMorningStar()CheckPatternMorningDoji()メソッドで実装されています。

//+------------------------------------------------------------------+
//| '朝星'パターンの形成を確認します |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- 朝星
   if((Open(3)-Close(3)>AvgBody(1))             && //弱気のローソク足、そのボディは平均のローソク足のボディより大きい
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && //2本目のローソク足は小さなボディを持っている(平均のボディの半分未満)
      (Close(2)<Close(3))                       && //2本目のローソク足の終値は1本目の終値より低い
      (Open(2)<Open(3))                         && //2本目のローソク足の始値は1本目の始値より低い
      (Close(1)>MidOpenClose(3)))                  //最後の完成したローソク足の終値は1本目の中心より高い
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+

次に「夕星」パターンについても見ていきましょう。

1.2. 夕星

このパターンは、上昇トレンドの反転を示し、3本のローソク足で構成されています(図2)。長い白いローソク足の後に、色は問わず小さなボディのローソク足があり、白いローソク足のボディの外に位置します。この小さなボディは、買い手と売り手の力が均等で、市場がトレンドを変える準備が整ったことを意味します。

パターンの3本目のローソク足は、弱気のローソク足で、2本目のローソク足のボディとは重なっておらず、終値は1本目の(強気の)ローソク足のボディの中にあります。このモデルの結果となるローソク足も図2に示されています。

2本目のローソク足がドージ型の場合、このモデルは「夕のドージ星」と呼ばれます。

図2. '夕星'と'夕のドージ星'のローソク足パターン

図2. '夕星'と'夕のドージ星'のローソク足パターン

「夕星」と「夕のドージ星」パターンの識別方法も解説します。

//+------------------------------------------------------------------+
//| '夕星'パターンの形成を確認します |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- 夕星
   if((Close(3)-Open(3)>AvgBody(1))             && //強気のローソク足、そのボディは平均のボディより高い
      (MathAbs(Close(2)-Open(2)<AvgBody(1)*0.5) && //2本目のローソク足は小さなボディを持っている(平均のボディの半分未満)
      (Close(2)>Close(3))                       && //2本目のローソク足の終値は1本目の終値より高い
      (Open(2)>Open(3))                     && //2本目のローソク足の始値は1本目の始値より高い
      (Close(1)<MidOpenClose(3)))                  //最後の完成したローソク足の終値は1本目の中心より低い
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+

このように、「夕星」と「夕のドージ星」のパターンを確認するメソッドも存在します。

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

ロングまたはショートポジションを開くためのトレードシグナルは、RSI指標によって確認される必要があります。RSIの値が臨界レベル(ロングポジションの場合は40、ショートポジションの場合は60)より低い/高い必要があります。

オープンポジションのクローズは、RSIの値によって決まります。これは2つのケースで行われます:

  • RSIが逆の臨界レベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合
  • 逆シグナルが確認されなかった場合(RSIが次のレベルに達したとき:ロングポジションの場合は30、ショートポジションの場合は70)

図3. '朝星'パターン、RSI指標によって確認

図3. '朝星'パターン、RSI指標によって確認

  • int CMS_ES_RSI::LongCondition() - ロングポジションを開く条件を確認(結果は80)、ショートポジションをクローズする条件(結果は40)を確認します;
  • int CMS_ES_RSI::ShortCondition() - ショートポジションを開く条件を確認(結果は80)、ロングポジションをクローズする条件(結果は40)を確認します。

2.1. ロングポジションを開く/ショートポジションをクローズする

  1. 「朝星」パターンの形成は、RSI指標によって確認する必要があります:
    RSI(1)<40(最後の完成したバーのRSI値が40未満である必要があります)。

  2. ショートポジションは、RSI指標が臨界レベル70または30を上回った場合にクローズされる必要があります。

//+------------------------------------------------------------------+
//| 市場へのエントリーとエグジットの条件を確認します |
//| 1) 市場エントリー(ロングポジションを開く、結果=80)|
//| 2) 市場エグジット(ショートポジションをクローズ、結果=40)|
//+------------------------------------------------------------------+
int CMS_ES_RSI::LongCondition()
  {
   int result=0;
//--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
//--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします
//--- idx=1 - この場合、EAはニュースバーのみでトレード条件をチェックします
   int idx   =StartIndex();
//--- ロングポジションを開く条件をチェック
//--- 朝星パターンとRSI<30
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (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 CMS_ES_RSI::ShortCondition()
  {
   int result=0;
//--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
//--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします
//--- idx=1 - この場合、EAはニュースバーのみでトレード条件をチェックします
   int idx   =StartIndex();
//--- ショートポジションを開く条件をチェック
//--- 夕星パターンとRSI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (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ウィザードを使ったエキスパートアドバイザーの作成

CMS_ES_RSIクラスは標準ライブラリクラスに含まれていないため、使用するにはacms_es_rsi.mqhファイルをダウンロードして、client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignalsに保存します。candlepatterns.mqhファイルについても同様の手順を踏みます。MetaEditorを再起動した後にMQL5ウィザードで使用できます。

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

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

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

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

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

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

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

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

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

この場合、1つのトレードシグナルモジュールのみを使用します。
「RSIで確認された朝星・夕星に基づくシグナル」モジュールを追加します:

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

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

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

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

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

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

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

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

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

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

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

「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードを取得します。このコードは、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ウィザードで生成されたエキスパートアドバイザーは、トレードシグナルのモジュールからの「投票」を使用してポジションをオープンおよびクローズします。メインモジュールの投票結果も「投票」平均化に使用されます。この場合、メインモジュールと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、PeriodK=47、PeriodD=9、PeriodSlow=13、MA_period=5)でのバックテストを考えてみましょう。

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

図11. 朝星・夕星+RSIに基づくエキスパートアドバイザーのテスト結果

図11. 朝星・夕星+RSIに基づくエキスパートアドバイザーのテスト結果

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

パラメータの研究は、ストラテジーテスターの3Dビジュアライゼーションモードを使用することで大幅に簡素化されます。このモードは、419ビルドから追加されました(図12):

図12. PeriodRSIおよびMA_period入力パラメータの関数としてのバランス

図12. PeriodRSIおよびMA_period入力パラメータの関数としてのバランス

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

関連記事

コメント (0)