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

MQL5ウィザードを使ったトレード信号の作成 - 「ブル・ベア・ミーティングライン」とストキャスティクスの活用法

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

トレーダーの皆さんこんにちは!今日は、MQL5ウィザードを使って、ブル・ベア・ミーティングラインに基づいたトレード信号を作成する方法をご紹介します。このウィザードを使うと、MetaTrader 5用のエキスパートアドバイザー(EA)を簡単に生成できます。

MQL5ウィザードは、クライアントターミナルに付属している標準ライブラリのクラスに基づいて、すぐに使えるエキスパートアドバイザーを作成することができます。自分のトレードアイデアをすぐに確認でき、トレーディングシグナルクラスを作成するだけで済みます。このクラスの構造と具体例は、MQL5ウィザード: トレードシグナルモジュールの作成方法の記事で確認できます。

基本的なアイデアは、トレードシグナルのクラスをCExpertSignalから派生させ、LongCondition()ShortCondition()の仮想メソッドを自分のメソッドでオーバーライドすることです。

トレード戦略の参考として、ロシア語の書籍『成功したトレーダーの戦略』があり、数多くのトレーディング戦略が考察されています。私たちは、ストキャスティクスCCIMFIRSIオシレーターによって確認された反転キャンドルパターンに焦点を当てます。

最適な方法は、キャンドルパターンの形成を確認するために、CExpertSignalから派生した別のクラスを作成することです。キャンドルパターンによって生成されたトレードシグナルを確認するためには、CCandlePatternから派生したクラスを作成し、必要な機能(例えばオシレーターによる確認)を追加します。

ここでは、ストキャスティクスインジケーターによって確認された「ブル・ベア・ミーティングライン」の反転キャンドルパターンに基づくシグナルを考察します。トレードシグナルモジュールは、CCandlePatternクラスに基づいており、キャンドルパターンを使用してトレードシグナルを作成する簡単な例です。

1. 「ミーティングライン」反転キャンドルパターン

1.1. ブル・ミーティングライン

このパターンは、同じ(または非常に近い)終値を持つ2つのキャンドル(ベアリッシュとブルリッシュ)で構成されます。2つのキャンドルのボディは、平均のボディ長よりも大きくなければなりません。

「ブル・ミーティングライン」は、下降トレンドの反転を示します。

Fig. 1. ブル・ミーティングラインパターン

Figure 1. ブル・ミーティングラインパターン

「ブル・ミーティングライン」パターンの認識は、CCandlePatternクラスのCheckPatternBullishMeetingLines()メソッドで実装されています。

//+--------------------------------------------------------------------+
//| "ブル・ミーティングライン"キャンドルパターンの形成をチェック        |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBullishMeetingLines()
  {
//--- ブル・ミーティングライン
   if((Open(2)-Close(2)>AvgBody(1))              && //ロングブラック
     ((Close(1)-Open(1))>AvgBody(1))             && //ロングホワイト
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1)))   // ドージクローズ
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES)メソッドは、「ブル・ミーティングライン」キャンドルパターンの形成をチェックするために使用されます。

1.2. ベア・ミーティングライン

このパターンは、同じ(または非常に近い)終値を持つ2つのキャンドル(ブルリッシュとベアリッシュ)で構成されます。2つのキャンドルのボディは、平均のボディ長よりも大きくなければなりません。

「ベア・ミーティングライン」は、上昇トレンドの反転を示します。

Figure 2. ベア・ミーティングラインパターン

Figure 2. ベア・ミーティングラインパターン

「ベア・ミーティングライン」パターンの認識は、CCandlePatternクラスのCheckPatternBearishMeetingLines()メソッドで実装されています。

//+--------------------------------------------------------------------+
//| "ベア・ミーティングライン"キャンドルパターンの形成をチェック        |
//+--------------------------------------------------------------------+
bool CCandlePattern::CheckPatternBearishMeetingLines()
  {
//--- ベア・ミーティングライン
   if((Close(2)-Open(2)>AvgBody(1))             && //ロングホワイト
     ((Open(1)-Close(1)>AvgBody(1))             && //ロングブラック
      (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // ドージクローズ
      return(true);
//---
   return(false);
  }

CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES)メソッドは、「ベア・ミーティングライン」キャンドルパターンの形成をチェックするために使用されます。

2. ストキャスティクスインジケーターによって確認されたトレードシグナル

ロングまたはショートポジションを開くためのトレーディングシグナルは、ストキャスティクスオシレーターによって確認されなければなりません。シグナルの%Dラインは、対応するクリティカルレベル(30または70)を超えている必要があります。

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

  • %Dラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は20)に達した場合
  • 逆シグナルが確認されていない場合(%Dラインが次のレベルに達した場合:ロングポジションの場合は20、ショートポジションの場合は80)

Fig. 3. ベア・ミーティングラインパターン、ストキャスティクスインジケーターによって確認

Fig. 3. ベア・ミーティングラインパターン、ストキャスティクスインジケーターによって確認

  • int CML_Stoch::LongCondition() - ロングポジションを開く条件をチェック(戻り値は80)とショートポジションをクローズ(戻り値は40)
  • int CML_Stoch::ShortCondition() - ショートポジションを開く条件をチェック(戻り値は80)とロングポジションをクローズ(戻り値は40)

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

  1. 「ブル・ミーティングライン」パターンの形成は、ストキャスティクスインジケーターによって確認されなければなりません:StochSignal(1)<30(ストキャスティクスインジケーターの最後の完了したバーのシグナルラインの値は30未満でなければなりません)。

  2. ショートポジションは、ストキャスティクスインジケーターのシグナルラインが20または80レベルを上回った場合にクローズされなければなりません。

//+------------------------------------------------------------------+
//| マーケットへのエントリーおよびエグジット条件をチェック        |
//| 1) マーケットエントリー(ロングポジションオープン、結果=80)|
//| 2) マーケットエグジット(ショートポジションクローズ、結果=40)|
//+------------------------------------------------------------------+
int CML_Stoch::LongCondition()
  {
   int result=0;
   //--- idxは、エキスパートアドバイザーの作業モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックでトレード条件をチェック
   //--- idx=1 - この場合、EAはニュースバーのみでトレード条件をチェック
  int idx   =StartIndex();
   //--- ロングポジションオープンの条件をチェック
   //--- ブル・ミーティングラインパターンの形成とシグナルライン<30
  if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (StochSignal(1)<30))
     result=80;
   //--- ショートポジションクローズの条件をチェック
   //--- シグナルラインが過剰な買い/売りレベルを越えた場合(下向き20、上向き80)
   if((((StochSignal(1)>20) && (StochSignal(2)<20)) ||
       ((StochSignal(1)>80) && (StochSignal(2)<80))))
     result=40;
   //--- 結果を返す
   return(result);
  }


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

  1. 「ベア・ミーティングライン」パターンの形成は、ストキャスティクスインジケーターによって確認されなければなりません:StochSignal(1)>70(ストキャスティクスインジケーターの最後の完了したバーのシグナルラインの値は70を超えていなければなりません)。

  2. ロングポジションは、ストキャスティクスインジケーターのシグナルラインが80または20レベルを下回った場合にクローズされなければなりません。

//+------------------------------------------------------------------+
//| マーケットへのエントリーおよびエグジット条件をチェック        |
//| 1) マーケットエントリー(ショートポジションオープン、結果=80)|
//| 2) マーケットエグジット(ロングポジションクローズ、結果=40)|
//+------------------------------------------------------------------+
int CML_Stoch::ShortCondition()
  {
   int result=0;
   //--- idxは、エキスパートアドバイザーの作業モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックでトレード条件をチェック
   //--- idx=1 - この場合、EAはニュースバーのみでトレード条件をチェック
  int idx   =StartIndex();
   //--- ショートポジションオープンの条件をチェック
   //--- ベア・ミーティングラインパターンの形成とシグナルライン>70
  if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (StochSignal(1)>70))
     result=80;
   //--- ロングポジションクローズの条件をチェック
   //--- シグナルラインが過剰な買い/売りレベルを越えた場合(下向き80、上向き20)
   if((((StochSignal(1)<80) && (StochSignal(2)>80)) ||
       ((StochSignal(1)<20) && (StochSignal(2)>20))))
     result=40;
   //--- 結果を返す
   return(result);
  }

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

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

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

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

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

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

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

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

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

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

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

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

ストキャスティクスによって確認された「ブル・ベア・ミーティングライン」に基づくトレードシグナルのモジュールを追加します:

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

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

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

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

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

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

Fig. 9. エキスパートアドバイザーのマネーマネジメントプロパティ

Figure 9. エキスパートアドバイザーのマネーマネジメントプロパティ

マネーマネジメントプロパティに関しては、「固定取引量での取引」を使用します:

Fig. 10. エキスパートアドバイザーのマネーマネジメントプロパティ

Figure 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の入力パラメータは、ポジションのオープンとクローズのための閾値レベルを指定することを可能にします。

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、テスト期間:2005.01.01-2010.03.16、PeriodK=6、PeriodD=3、PeriodSlow=36、MA_period=3)で行った結果を見てみましょう。

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

Fig. 11. ブル・ベア・ミーティングライン + ストキャスティクスに基づくエキスパートアドバイザーのテスト結果

Fig. 11. ブル・ベア・ミーティングライン + ストキャスティクスに基づくエキスパートアドバイザーのテスト結果

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

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

関連記事

コメント (0)