皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレード信号を生成する方法を紹介します。特に、ブル・ベアミーティングラインとMFI(マーケットファシリテーションインデックス)を活用した手法に焦点を当てます。
このウィザードを使えば、MetaTrader 5でのエキスパートアドバイザー(EA)を簡単に作成できます。まずは、トレードアイデアを素早く検証する方法について見ていきましょう。このプロセスでは、自分自身のトレード信号クラスを作成する必要があります。その構造と例については、こちらの記事MQL5ウィザード: トレード信号モジュールの作成方法を参照してください。
1. ブル・ベアミーティングラインとは?
1.1. ブル・ミーティングライン
このパターンは、同じような終値を持つ2つのキャンドル(ベアリッシュとブルリッシュ)で構成されています。2つのキャンドルのボディは、平均的なボディの長さよりも長い必要があります。
この「ブル・ミーティングライン」は、下向きのトレンドが反転することを示します。

Fig. 1. ブル・ミーティングラインのパターン
「ブル・ミーティングライン」の認識は、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); }
2. MFIインジケーターによるトレード信号の確認
トレード信号を開くためには、MFIインジケーターによって確認される必要があります。MFIの値が40未満(ロングポジション用)または60を超える(ショートポジション用)場合にトレードを行います。
ポジションのクローズは、MFIの値に依存します。クローズ条件は以下の2つです:
- 反対の重要レベルに達した場合(ロングポジションの場合は70、ショートポジションの場合は30)
- 逆信号が確認されなかった場合(MFIが30(ロングポジション)または70(ショートポジション)に達した場合)

Fig. 3. MFIインジケーターによる確認
2.1. ロングポジションを開く/ショートポジションをクローズ
「ブル・ミーティングライン」パターンの形成は、MFIインジケーターによって確認されなければなりません:MFI(1) < 40(最後の完成したバーのMFI値が40未満である必要があります)。
ショートポジションは、MFIインジケーターが重要なレベルを上回った場合(70または30)にクローズされます。
3. MQL5ウィザードを使用したエキスパートアドバイザーの作成
CML_MFIクラスは標準ライブラリのクラスに含まれていないため、aml_mfi.mqhファイルをダウンロードし、クライアントターミナルのデータフォルダの
次に、MQL5ウィザードを起動してエキスパートアドバイザーを作成します。

Fig. 4. MQL5ウィザードでのエキスパートアドバイザー作成
エキスパートアドバイザーの名前を指定します:

Fig. 5. エキスパートアドバイザーの一般的なプロパティ
次に、使用するトレード信号モジュールを選択します。

Fig. 6. エキスパートアドバイザーの信号プロパティ
私たちの場合、トレード信号モジュールは1つだけ使用します。
「MFIによるブル・ベアミーティングラインに基づく信号」モジュールを追加します:

Fig. 7. エキスパートアドバイザーの信号プロパティ
トレード信号モジュールが追加されました:

Fig. 8. エキスパートアドバイザーの信号プロパティ
任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します:

Fig. 9. エキスパートアドバイザーのトレーリングプロパティ
マネーマネジメントプロパティについては、「固定取引ボリュームでの取引」を使用します:

Fig. 10. エキスパートアドバイザーのマネーマネジメントプロパティ
「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られます。ファイルは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の入力パラメータは、ポジションを開くと閉じるための閾値を指定します。
ロングポジションとショートポジションの条件チェックメソッドでは、固定値が指定されています:
- ポジションをオープンする:80;
- ポジションをクローズする:40;
MQL5ウィザードによって生成されたエキスパートアドバイザーは、トレード信号モジュールからの「票」に基づいてポジションを開いたり閉じたりします。メインモジュールの票結果も使用されますが、LongCondition()とShortCondition()メソッドは常に0を返します。
このため、ThresholdOpenとThresholdCloseは、40=(0+80)/2および20=(0+40)/2として設定する必要があります。
Signal_StopLevelとSignal_TakeLevelの入力パラメータの値が0に設定されている場合、ポジションはクローズ条件が真になるまでクローズされません。
4. バックテスト結果
エキスパートアドバイザーのバックテストを行いましょう。対象はEURUSDのH1チャートで、テスト期間は2000年1月1日から2011年3月16日までです。この場合、ストラテジーテスターを使用して最適な入力パラメータを見つけることができます。

Fig. 11. バックテスト結果
コメント 0