MQL5ウィザードを使ったCCIによるトレードシグナル生成法

Mike 2011.03.24 03:05 50 0 0
添付ファイル

皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを生成する方法についてお話ししたいと思います。このツールを利用すれば、MetaTrader 5用のエキスパートアドバイザー(EA)を簡単に作成することが可能です。特に、スタンダードライブラリのクラスを使って、迅速に取引アイデアを検証できます。

基本的なアイデアとしては、トレードシグナルのクラスをCExpertSignalから派生させ、LongCondition()およびShortCondition()のメソッドをオーバーライドする必要があります。

ロシア語の書籍『Strategies of best traders』では、多くのトレーディング戦略が紹介されていますが、ここではリバーサルキャンドルパターン、特にCCI(商品チャネル指数)で確認されたものに焦点を当ててみましょう。

リバーサルキャンドルパターンに基づくシグナルを作成するには、まずCExpertSignalから派生した別のクラスを作成し、キャンドルパターンの形成をチェックします。ここでは、CCIで確認された「強気/弱気のミーティングライン」のリバーサルキャンドルパターンに基づいたシグナルについて説明します。

1. ミーティングラインのリバーサルキャンドルパターン

1.1. 強気のミーティングライン

このパターンは、同じ(または非常に近い)クローズ価格を持つ2つのキャンドル(弱気と強気)で構成されており、2つのキャンドルのボディは平均ボディ長よりも大きくなければなりません。強気のミーティングラインパターンは、下降トレンドの反転を示しています。

強気のミーティングラインパターン

強気のミーティングラインパターン

「強気のミーティングライン」パターンの認識は、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つのキャンドルのボディは平均ボディ長よりも大きくなければなりません。弱気のミーティングラインパターンは、下降トレンドの反転を示しています。

弱気のミーティングラインパターン

弱気のミーティングラインパターン

「弱気のミーティングライン」パターンの認識は、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. CCIインジケーターによって確認されたトレードシグナル

ロングまたはショートポジションを開くためのトレードシグナルは、CCIインジケーターによって確認されなければなりません。CCIの値は、ロングポジションの場合は-50より大きく、ショートポジションの場合は50より小さくなる必要があります。

開いているポジションのクローズは、CCIの値に依存します。クローズは次の2つのケースで行われます:

  • CCIラインが対になるクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は-80)に達したとき
  • リバースシグナルが確認されない場合(CCIが次のレベルに達したとき:ロングポジションの場合は-80、ショートポジションの場合は80)

CCIによって確認された強気のミーティングラインパターン

CCIによって確認された強気のミーティングラインパターン

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

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

  1. 「強気のミーティングライン」パターンの形成は、CCIインジケーターによって確認されなければなりません:CCI(1)<-50(最新の完了したバーのCCI値が-50未満である必要があります)。

  2. ショートポジションは、CCIインジケーターがクリティカルレベル-80を上回るか、80のクリティカルレベルを下回った場合にクローズされます。

//+------------------------------------------------------------------+
//| 市場へのエントリーおよびエグジットの条件をチェックします                 |
//| 1) 市場へのエントリー(ロングポジションをオープン、結果=80)                  |
//| 2) 市場からのエグジット(ショートポジションをクローズ、結果=40)                 |
//+------------------------------------------------------------------+
int CML_CCI::LongCondition()
  {
   int result=0;
//--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
//--- idx=0 - この場合、EAは各ティックで取引条件をチェックします
//--- idx=1 - この場合、EAはニュースバーのみに取引条件をチェックします
   int idx   =StartIndex();
//--- ロングポジションをオープンする条件のチェック
//--- 強気のミーティングラインパターンとCCI<-50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (CCI(1)<-50))
     result=80;
//--- ショートポジションをクローズする条件のチェック
//--- オーバーボート/オーバーソールドレベルのクロスオーバーシグナルライン(下向き-80、下向き-80)
   if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))
     result=40;
//--- 結果を返す
   return(result);
  }

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

  1. 「弱気のミーティングライン」パターンの形成は、CCIインジケーターによって確認されなければなりません:CCI(1)>50(最新の完了したバーのCCI値が50より大きい必要があります)。

  2. ロングポジションは、CCIインジケーターが-80または80のレベルを下回った場合にクローズされます。

//+------------------------------------------------------------------+
//| 市場へのエントリーおよびエグジットの条件をチェックします                 |
//| 1) 市場へのエントリー(ショートポジションをオープン、結果=80)                 |
//| 2) 市場からのエグジット(ロングポジションをクローズ、結果=40)                  |
//+------------------------------------------------------------------+
int CML_CCI::ShortCondition()
  {
   int result=0;
//--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます
//--- idx=0 - この場合、EAは各ティックで取引条件をチェックします
//--- idx=1 - この場合、EAはニュースバーのみに取引条件をチェックします
   int idx   =StartIndex();
//--- ショートポジションをオープンする条件のチェック
//--- 弱気のミーティングラインパターンとCCI>50
   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (CCI(1)>50))
     result=80;
//--- ロングポジションをクローズする条件のチェック
//--- オーバーボート/オーバーソールドレベルのクロスオーバーシグナルライン(下向き-80、下向き80)
   if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))
     result=40;
//--- 結果を返す
   return(result);
  }

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

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

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

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

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

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

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

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

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

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

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

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

「CCIによって確認された強気/弱気のミーティングラインに基づくシグナル」モジュールを追加します:

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

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

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

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

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

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

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

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

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

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

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

「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードを取得し、Expert_AML_CCI.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、テスト期間:2000.01.01-2011.03.16、PeriodCCI=18、MA_period=3)で見てみましょう。

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

強気/弱気のミーティングラインとCCIに基づくエキスパートアドバイザーのテスト結果

強気/弱気のミーティングラインとCCIに基づくエキスパートアドバイザーのテスト結果


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

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


リスト
コメント 0