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

MQL5ウィザードで朝星・夕星とMFIを活用した取引シグナルの作成

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

皆さん、こんにちは!今日は、MQL5ウィザードを使って、朝星と夕星のパターンを基にした取引シグナルの作成方法をご紹介します。これにより、取引アイデアを迅速にチェックすることができ、独自の取引シグナルクラスを作成することができます。クラスの構造や例については、MQL5ウィザード:取引シグナルモジュールの作成方法を参照してください。

基本的な考え方は、取引シグナルのクラスをCExpertSignalから派生させ、LongCondition()及びShortCondition()の仮想メソッドを自分のメソッドでオーバーライドする必要があります。

ロシア語の書籍『ベストトレーダーの戦略』には多くの取引戦略が考察されていますが、ここでは、ストキャスティクスCCIMFIRSIといったオシレーターで確認された逆転のキャンドルパターンに焦点を当てていきます。

1. 朝星と夕星の逆転キャンドルパターン

1.1. 朝星

このパターンは下落トレンドの反転を示し、3つのキャンドルで構成されています(図1参照)。長い黒キャンドルの後に、色に関係なく小さなボディを持つキャンドルがあり、そのキャンドルは黒キャンドルのボディの外に位置します。この小さなボディは、ブルとベアの力が等しいことを意味し、市場がトレンドを変える準備が整っていることを示しています。

パターンの3つ目のキャンドルはブルのキャンドルで、ボディは2つ目のキャンドルのボディと重なりません。また、クローズ価格は1つ目の(ベアの)キャンドルのボディの中にあります。このモデルの結果のキャンドルも図1に表示されています。

図1. 朝星と朝ドジ星のキャンドルパターン

図1. 朝星と朝ドジ星のキャンドルパターン

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

//+------------------------------------------------------------------+
//| Check formation of the "Morning Star" pattern |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternMorningStar()
  {
//--- Morning Star
   if((Open(3)-Close(3)>AvgBody(1))
      && // bearish candle, its body greater than average candle body
      (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5)) && // second candle has small body (lower than half of the average body)
      (Close(2)<Close(3))
      && // close of the second candle is lower than close of the first
      (Open(2)<Open(3))
      && // open of the second candle is lower than open of the first
      (Close(1)>MidOpenClose(3)))
      // close of the last completed candle is higher than center of the first
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+

1.2. 夕星

このパターンは上昇トレンドの反転を示し、3つのキャンドルで構成されています(図2参照)。長い白キャンドルの後に、色に関係なく小さなボディを持つキャンドルがあります。この小さなボディは、ブルとベアの力が等しいことを示し、市場がトレンドを変える準備が整っていることを示します。

パターンの3つ目のキャンドルはベアのキャンドルで、ボディは2つ目のキャンドルのボディと重なりません。また、クローズ価格は1つ目の(ブルの)キャンドルのボディの中にあります。このモデルの結果のキャンドルも図2に表示されています。

図2. 夕星と夕ドジ星のキャンドルパターン

図2. 夕星と夕ドジ星のキャンドルパターン

ここでは、「夕星」と「夕ドジ星」パターンを識別するメソッドを紹介します:

//+------------------------------------------------------------------+
//| Check formation of the "Evening Star" pattern |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternEveningStar()
  {
//--- Evening Star
   if((Close(3)-Open(3)>AvgBody(1))
      && // bullish candle with body higher than average body 
      (MathAbs(Close(2)-Open(2)<AvgBody(1*0.5))
      && // second candle has a small body (less than half of the average)
      (Close(2)>Close(3))
      && // close of the second candle is higher than close of the first
      (Open(2)>Open(3))
      && // open of the second candle is higher than open of the first
      (Close(1)<MidOpenClose(3)))
      // close of the last completed candle is lower than center of the first
      return(true);
//---
   return(false);
  }
//+------------------------------------------------------------------+

2. MFIインジケーターで確認された取引シグナル

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

オープンポジションのクローズは、MFIインジケーターの値に依存します。クローズは次の2つのケースで行われます:

  1. MFIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合
  2. 逆シグナルが確認されない場合(MFIインジケーターが次のレベルに達した場合:ロングポジションの場合は30、ショートポジションの場合は70)

図3. MFIインジケーターで確認された朝星パターン

図3. MFIインジケーターで確認された朝星パターン


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

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

  1. 「朝星」パターンの形成は、MFIインジケーターによって確認されなければなりません:MFi(1)<40(最終完了バーのMFIインジケーターの値は40未満である必要があります)。

  2. ショートポジションは、MFIインジケーターがクリティカルレベル(70または30)を上回った場合にクローズされます。

//+------------------------------------------------------------------+
//| 市場へのエントリーとエグジット条件をチェックします |
//| 1) 市場エントリー(ロングポジションを開く、結果=80) |
//| 2) 市場エグジット(ショートポジションをクローズする、結果=40) |
//+------------------------------------------------------------------+
int CMS_ES_MFI::LongCondition()
  {
   int result=0;
   //--- idxはExpert Advisorの動作モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックで取引条件をチェックします
   //--- idx=1 - この場合、EAはニュースバーのみで取引条件をチェックします
   int idx   =StartIndex();
   //--- ロングポジションを開く条件のチェック
   //--- 朝星パターンの形成とMFI<40
  if(CheckCandlestickPattern(CANDLE_PATTERN_MORNING_STAR) && (MFI(1)<40))
     result=80;
   //--- ショートポジションをクローズする条件のチェック
   //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(上向き30、上向き70)
  if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))
     result=40;
   //--- 結果を返す
   return(result);
  }


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

  1. 「夕星」パターンの形成は、MFIインジケーターによって確認されなければなりません:MFI(1)>60(最終完了バーのMFIインジケーターの値は60を超える必要があります)。

  2. ロングポジションは、MFIインジケーターがクリティカルレベル(70または30)を上回った場合にクローズされます。

//+------------------------------------------------------------------+
//| 市場へのエントリーとエグジット条件をチェックします |
//| 1) 市場エントリー(ショートポジションを開く、結果=80) |
//| 2) 市場エグジット(ロングポジションをクローズする、結果=40) |
//+------------------------------------------------------------------+
int CMS_ES_MFI::ShortCondition()
  {
   int result=0;
   //--- idxはExpert Advisorの動作モードを決定するために使用できます
   //--- idx=0 - この場合、EAは各ティックで取引条件をチェックします
   //--- idx=1 - この場合、EAはニュースバーのみで取引条件をチェックします
   int idx   =StartIndex();
   //--- ショートポジションを開く条件のチェック
   //--- 夕星パターンの形成とMFI>60
  if(CheckCandlestickPattern(CANDLE_PATTERN_EVENING_STAR) && (MFI(1)>60))
     result=80;
   //--- ロングポジションをクローズする条件のチェック
   //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(上向き70、下向き30)
  if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))
     result=40;
   //--- 結果を返す
   return(result);
  }


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

CMS_ES_MFIクラスはスタンダードライブラリのクラスには含まれていません。このクラスを使用するには、ams_es_mfi.mqhファイルをダウンロードし、client_terminal_data_folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、acandlepatterns.mqhファイルも行う必要があります。これらはMetaEditorを再起動後にMQL5ウィザードで使用できます。

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

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

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

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

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

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

その後、使用する取引シグナルモジュールを選択する必要があります。

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

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

今回は、取引シグナルモジュールを1つだけ使用します。
「MFIで確認された朝星・夕星に基づくシグナル」モジュールを追加:

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

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

取引シグナルモジュールが追加されました:

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

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

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

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

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

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

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

図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、テスト期間:2010.01.01-2011.03.16、PeriodMFI=49、MA_period=3)を確認します。

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

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

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


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

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

関連記事

コメント (0)