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つの移動平均に基づくトレードシグナル
トレードシグナルの詳細
このトレーディング戦略はCSignal3EMAクラスに実装されており、3つの移動平均(Fast、Medium、Slow)の値に簡単にアクセスするためのいくつかの保護されたメソッドがあります。
double FastEMA(int ind) // バーのFast EMAの値を返します double MediumEMA(int ind) // バーのMedium EMAの値を返します double SlowEMA(int ind) // バーのSlow EMAの値を返します
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)); }
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に基づくシグナル」を選択
次に、必要なトレーリングストップアルゴリズムと資金管理およびリスク管理システムを指定する必要があります。エキスパートアドバイザーのコードは自動生成され、コンパイルして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に基づくエキスパートアドバイザーの歴史的バックテスト結果
添付ファイル: Signal3EMA.mqhとCSignal3EMAクラスはterminal_data_folder\MQL5\Include\Expert\Signalに配置する必要があります。
threeema.mq5ファイルには、MQL5ウィザードを使用して作成されたエキスパートアドバイザーのコードが含まれています。