MACDのクロスオーバーを利用したトレードシグナルの自動生成法

Mike 2011.01.14 21:55 14 0 0
添付ファイル

MQL5ウィザードを使えば、プログラミングなしで自動的にエキスパートアドバイザー(EA)を作成することができます。

今回は、MACDの主要線とシグナル線のクロスオーバーに基づいたトレードシグナルについて考えてみましょう。この戦略は「MACD主要線とシグナル線のクロスオーバーに基づくシグナル」と呼ばれ、MQL5ウィザードでEAを自動生成する際に使用されます。

MACDの主要線は、速いEMAと遅いEMAの差として計算されます。そして、シグナル線は主要線をPeriodSignalでスムーズにしたものです。

トレードシグナル:

  • 買い: MACDの主要線がシグナル線を上にクロスオーバーした場合。
  • 売り: MACDの主要線がシグナル線を下にクロスオーバーした場合。

この戦略は、CSignalMACDクラスに実装されており、インジケーターの値に簡単にアクセスするためのメソッドがいくつか用意されています。

MACDの主要線とシグナル線のクロスオーバーに基づくトレードシグナル

図1: MACDの主要線とシグナル線のクロスオーバーに基づくトレードシグナル


トレードシグナルの詳細

このトレーディング戦略は、CSignalMACDクラスに実装されており、インジケーターの値へのアクセスを簡素化するためのいくつかの保護されたメソッドがあります:

double  MainMACD(int ind)      // 主要MACD線の値を返す
double  SignalMACD(int ind)    // シグナルMACD線の値を返す
double  StateMACD(int ind)     // 主要線とシグナル線の差を返す
int     ExtStateMACD(int ind); // 主要線とシグナル線の差のサイン変化の数を返す


1. ロングポジションを開く

ロングポジションを開く条件:

  • ExtStateMACD(1)==1; これは主要線がシグナル線を上にクロスしたことを意味します。
//+------------------------------------------------------------------+
//| ロングポジションを開く条件をチェックする                         |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==1);
  }


2. ロングポジションを閉じる

ロングポジションを閉じる条件:

  • ExtStateMACD(1)==1; これは主要線がシグナル線を下にクロスしたことを意味します。
//+------------------------------------------------------------------+
//| ロングポジションを閉じる条件をチェックする                  |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseLong(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==-1);
  }


3. ショートポジションを開く

ショートポジションを開く条件は、ロングポジションを閉じる条件と同じです。

//+------------------------------------------------------------------+
//| ショートポジションを開く条件をチェックする                   |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//---
   return(ExtStateMACD(1)==-1);
  }


4. ショートポジションを閉じる

ショートポジションを閉じる条件は、ロングポジションを開く条件と同じです。

//+------------------------------------------------------------------+
//| ショートポジションを閉じる条件をチェックする                  |
//+------------------------------------------------------------------+
bool CSignalMACD::CheckCloseShort(double& price)
  {
   price=0.0;
//---
   return(ExtStateMACD(1)==1);
  }

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

この戦略に基づいたトレーディングロボットを作成するには、MQL5ウィザードの「エキスパートアドバイザーの作成」オプションで「MACD主要線とシグナル線のクロスオーバーに基づくシグナル」を選択する必要があります。

MQL5ウィザードでのシグナル選択

図2: MQL5ウィザードで「MACD主要線とシグナル線のクロスオーバーに基づくシグナル」を選択

次に、必要なトレーリングストップアルゴリズムおよび資金管理システムを指定します。エキスパートアドバイザーのコードは自動的に生成され、コンパイルしてMetaTrader 5クライアントターミナルのストラテジーテスターでテストできます。


テスト結果

エキスパートアドバイザーのバックテストを、過去のデータ(EURUSD H1、テスト期間: 2010年1月1日〜2011年5月1日、PeriodFast=12、PeriodSlow=24、PeriodSignal=9、StopLoss=20、TakeProfit=80)で考えてみましょう。

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

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

図3: MACDラインのクロスオーバーに基づくエキスパートアドバイザーのテスト結果


添付ファイル: SignalMACD.mqhにはCSignalMACDクラスが含まれており(MQL5スタンダードライブラリに含まれています)、MQL5\Include\Expert\Signalフォルダーに格納されています。testmacd.mq5には、MQL5ウィザードを使用して作成されたエキスパートアドバイザーのコードが含まれています。

リスト
コメント 0