MQL5 Wizardを使えば、エキスパートアドバイザー(EA)のコードを自動で生成できます。詳細については、MQL5 Wizardでのエキスパートアドバイザー作成をご覧ください。
ここでは、移動平均(MA)指標を用いた価格クロスオーバーに基づく戦略について考えてみましょう。この戦略は、「MAによる価格クロスオーバーに基づくシグナル」と呼ばれ、MQL5 WizardでEAを自動生成する際に使用されます。
トレードシグナルは以下の通りです:
- 買い:価格が移動平均を上回るクロスオーバー。
- 売り:価格が移動平均を下回るクロスオーバー。
- 移動平均の増減を確認して、偽シグナルをフィルタリングします。
この戦略は、CSignalMAクラスに実装されており、MQL5スタンダードライブラリのトレーディング戦略クラスに含まれています(ファイルパス:MQL5\Include\Expert\Signal\SignalMA.mqh)。

移動平均による価格クロスオーバーに基づくトレードシグナル
トレードシグナル
このトレーディング戦略は、CSignalMAクラスに実装されており、指標や価格値へのアクセスを簡素化するためのいくつかの保護メソッドがあります:
double MA(int ind) // バーの移動平均値を返します double Open(int ind) // バーの始値を返します double Close(int ind) // バーの終値を返します double StateMA(int ind) // 平均が増加している場合は正の値、減少している場合は負の値を返します double StateOpen(int ind) // 始値と移動平均の差を返します double StateClose(int ind) // 終値と移動平均の差を返します
1. ロングポジションをオープン
ロングポジションをオープンするための条件(価格クロスオーバーとMAの増加確認):
- Open(1)<MA(1):始値が移動平均よりも低い;
- Close(1)>MA(1):終値が移動平均よりも高い;
- MA(1)>MA(2):移動平均の増加を確認(偽シグナルをフィルタリングするため)。
//+------------------------------------------------------------------+ //| ロングポジションをオープンする条件をチェックします | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenLong(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- 価格が上に移動平均をクロスしたかつ移動平均が増加している return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); }
2. ロングポジションをクローズ
ロングポジションをクローズする条件(価格クロスオーバーとMAの減少確認):
- Open(1)>MA(1):始値が移動平均よりも高い;
- Close(1)<MA(1):終値が移動平均よりも低い;
- MA(1)<MA(2):移動平均の減少を確認(偽シグナルをフィルタリングするため)。
//+------------------------------------------------------------------+ //| ロングポジションをクローズする条件をチェックします | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseLong(double& price) { price=0.0; //--- 価格が移動平均を下にクロスし、移動平均が減少している return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
3. ショートポジションをオープン
ショートポジションをオープンする条件は、ロングポジションのクローズ条件と同じです。
//+------------------------------------------------------------------+ //| ショートポジションをオープンする条件をチェックします(売り) | //+------------------------------------------------------------------+ bool CSignalMA::CheckOpenShort(double& price,double& sl,double& tp,datetime& expiration) { price=0.0; sl =0.0; tp =0.0; //--- 価格が移動平均を上にクロスし、移動平均が減少している return(StateOpen(1)>0 && StateClose(1)<0 && StateMA(1)<0); }
4. ショートポジションをクローズ
ショートポジションをクローズする条件は、ロングポジションのオープン条件と同じです。
//+------------------------------------------------------------------+ //| ショートポジションをクローズする条件をチェックします | //+------------------------------------------------------------------+ bool CSignalMA::CheckCloseShort(double& price) { price=0.0; //--- 価格が移動平均を上にクロスし、移動平均が増加している return(StateOpen(1)<0 && StateClose(1)>0 && StateMA(1)>0); } //+------------------------------------------------------------------+
MQL5 Wizardを使ったエキスパートアドバイザーの作成
この戦略に基づくトレーディングロボットを作成するには、「MAによる価格クロスオーバーに基づくシグナル」を選択し、MQL5 Wizardの「エキスパートアドバイザー作成」オプションで指定します。

MQL5 Wizardでの「MAによる価格クロスオーバーに基づくシグナル」の選択
次に必要なトレーリングストップアルゴリズムと、資金管理とリスク管理システムを指定します。エキスパートアドバイザーのコードが自動生成され、コンパイルして、MetaTrader 5のストラテジーテスターでテストできます。
テスト結果
エキスパートアドバイザーのバックテストを、過去のデータ(EURUSD H1、カスタム期間:2010年1月1日〜2011年5月1日、MA_period=12, MA_Shift=0)で考察してみましょう。
エキスパートアドバイザー作成時には、固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用しませんでした(トレーリングなし)。

移動平均クロスオーバーに基づくエキスパートアドバイザーのバックテスト結果
添付ファイル:SignalMA.mqhには、CSignalMAクラスが含まれており、MQL5スタンダードライブラリに収められています。ファイルcrossoverma.mq5には、MQL5 Wizardを使用して作成したエキスパートアドバイザーのコードが含まれています。