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

MQL5ウィザードを使った3つの移動平均に基づくトレードシグナル

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

MQL5ウィザードを使うことで、エキスパートアドバイザー(EA)のコードを自動生成することができます。詳しくはMQL5ウィザードでの既製エキスパートアドバイザーの作成を参照してください。

ここでは、3つの移動平均に基づくトレンド戦略を考えてみましょう。この戦略は「3つのEMAに基づくシグナル」と呼ばれています。トレンドを判断するために、3つの指数平滑移動平均(EMA)を使用します:FastEMA、MediumEMA、SlowEMAです。

トレードシグナル:

  • 買いシグナル:FastEMA > MediumEMA > SlowEMA(上昇トレンド)
  • 売りシグナル:FastEMA < MediumEMA < SlowEMA(下降トレンド)

この戦略はCSignal3EMAクラスに実装されています(signal3ema.mqhはterminal_data_folder\MQL5\Include\Expert\Signal\に配置する必要があります)。

図1. 3つの移動平均に基づくトレードシグナル

図1. 3つの移動平均に基づくトレードシグナル

トレードシグナルの詳細

このトレーディング戦略はCSignal3EMAクラスに実装されており、3つの移動平均(Fast、Medium、Slow)の値に簡単にアクセスするためのいくつかの保護されたメソッドがあります。

double  FastEMA(int ind)      // バーのFast EMAの値を返します
double  MediumEMA(int ind)      // バーのMedium EMAの値を返します
double  SlowEMA(int ind)      // バーのSlow EMAの値を返します
0番目の(未完成の)バーの指標値は変更される可能性があるため、取引条件を確認するには完成した(形成された)バーのデータを使用する必要があります。

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

上昇トレンドは次の条件で判断されます:FastEMA > MediumEMA > SlowEMA:

  • FastEMA(1) > MediumEMA(1):Fast EMAがMedium EMAよりも高い(最近の完了したバー);
  • MediumEMA(2) > SlowEMA(1):Medium EMAがSlow EMAよりも高い(最近の完了したバー);
//+------------------------------------------------------------------+
//| ロングポジションを開くための条件をチェックします                    |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Ask()-m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Ask()+m_take_profit*m_adjusted_point;
//--- 上昇トレンドのチェック(最近の完了したバーで):FastEMA(1) > MediumEMA(1) > SlowEMA(1)
    return(FastEMA(1)>medium && medium>SlowEMA(1));
  }


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

下降トレンドは次の条件で判断されます:FastEMA < MediumEMA < SlowEMA:

  • FastEMA(1) < MediumEMA(1):Fast EMAがMedium EMAよりも低い(最近の完了したバー);
  • MediumEMA(2) < SlowEMA(1):Medium EMAがSlow EMAよりも低い(最近の完了したバー);
//+------------------------------------------------------------------+
//| ショートポジションを閉じるための条件をチェックします                         |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseLong(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- 下降トレンドのチェック(最近の完了したバーで):FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));
  }
ロングポジションのクローズを改善することができます:下降トレンドを待つ必要はなく、フラットな状態でロングポジションを閉じることができます。この状態は次の条件で判断できます:FastEMA < MediumEMA > SlowEMA。


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

//+------------------------------------------------------------------+
//| ショートポジションを開くための条件をチェックします(売り)                  |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
   sl   =m_symbol.Bid()+m_stop_loss*m_adjusted_point;
   tp   =m_symbol.Bid()-m_take_profit*m_adjusted_point;
//--- 下降トレンドのチェック(最近の完了したバーで):FastEMA(1) < MediumEMA(1) < SlowEMA(1)
   return(FastEMA(1)<medium && medium<SlowEMA(1));

  }

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

//+------------------------------------------------------------------+
//| ショートポジションを閉じるための条件をチェックします                         |
//+------------------------------------------------------------------+
bool CSignal3EMA::CheckCloseShort(double& price)
  {
   double medium=MediumEMA(1);
//---
   price=0.0;
//--- 上昇トレンドのチェック(最近の完了したバーで):FastEMA(1) > MediumEMA(1) > SlowEMA(1)
   return(FastEMA(1)>medium && medium>SlowEMA(1));
  }

ショートポジションのクローズを改善することができます:上昇トレンドを待つ必要はなく、フラットな状態でショートポジションを閉じることができます。この状態は次の条件で判断できます:FastEMA > MediumEMA < SlowEMA。


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

この戦略に基づくトレーディングロボットを作成するには、「3つのEMAに基づくシグナル」を選択します。これはMQL5ウィザードの「既製エキスパートアドバイザーの作成」オプションから選べます:

図2. MQL5ウィザードで「3つのEMAに基づくシグナル」を選択

図2. MQL5ウィザードで「3つのEMAに基づくシグナル」を選択

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


テスト結果

エキスパートアドバイザーのバックテストを行いましょう(EURUSD H1、テスト期間:2010年1月1日〜2011年5月1日、FastPeriod=5、MediumPeriod=12、SlowPeriod=24、StopLoss=400、TakeProfit=900)。

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

図3. 3つのEMAに基づくエキスパートアドバイザーの歴史的バックテスト結果

図3. 3つのEMAに基づくエキスパートアドバイザーの歴史的バックテスト結果

添付ファイル: Signal3EMA.mqhとCSignal3EMAクラスはterminal_data_folder\MQL5\Include\Expert\Signalに配置する必要があります。

threeema.mq5ファイルには、MQL5ウィザードを使用して作成されたエキスパートアドバイザーのコードが含まれています。


関連記事

コメント (0)