トレーダーの皆さんこんにちは!今日は、MQL5ウィザードを使って、ブル・ベア・ミーティングラインに基づいたトレード信号を作成する方法をご紹介します。このウィザードを使うと、MetaTrader 5用のエキスパートアドバイザー(EA)を簡単に生成できます。
MQL5ウィザードは、クライアントターミナルに付属している標準ライブラリのクラスに基づいて、すぐに使えるエキスパートアドバイザーを作成することができます。自分のトレードアイデアをすぐに確認でき、トレーディングシグナルクラスを作成するだけで済みます。このクラスの構造と具体例は、MQL5ウィザード: トレードシグナルモジュールの作成方法の記事で確認できます。
基本的なアイデアは、トレードシグナルのクラスをCExpertSignalから派生させ、LongCondition()とShortCondition()の仮想メソッドを自分のメソッドでオーバーライドすることです。
トレード戦略の参考として、ロシア語の書籍『成功したトレーダーの戦略』があり、数多くのトレーディング戦略が考察されています。私たちは、ストキャスティクス、CCI、MFI、RSIオシレーターによって確認された反転キャンドルパターンに焦点を当てます。
最適な方法は、キャンドルパターンの形成を確認するために、CExpertSignalから派生した別のクラスを作成することです。キャンドルパターンによって生成されたトレードシグナルを確認するためには、CCandlePatternから派生したクラスを作成し、必要な機能(例えばオシレーターによる確認)を追加します。
ここでは、ストキャスティクスインジケーターによって確認された「ブル・ベア・ミーティングライン」の反転キャンドルパターンに基づくシグナルを考察します。トレードシグナルモジュールは、CCandlePatternクラスに基づいており、キャンドルパターンを使用してトレードシグナルを作成する簡単な例です。
1. 「ミーティングライン」反転キャンドルパターン
1.1. ブル・ミーティングライン
このパターンは、同じ(または非常に近い)終値を持つ2つのキャンドル(ベアリッシュとブルリッシュ)で構成されます。2つのキャンドルのボディは、平均のボディ長よりも大きくなければなりません。
「ブル・ミーティングライン」は、下降トレンドの反転を示します。

Figure 1. ブル・ミーティングラインパターン
「ブル・ミーティングライン」パターンの認識は、CCandlePatternクラスの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); }
CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES)メソッドは、「ブル・ミーティングライン」キャンドルパターンの形成をチェックするために使用されます。
1.2. ベア・ミーティングライン
このパターンは、同じ(または非常に近い)終値を持つ2つのキャンドル(ブルリッシュとベアリッシュ)で構成されます。2つのキャンドルのボディは、平均のボディ長よりも大きくなければなりません。
「ベア・ミーティングライン」は、上昇トレンドの反転を示します。

Figure 2. ベア・ミーティングラインパターン
「ベア・ミーティングライン」パターンの認識は、CCandlePatternクラスのCheckPatternBearishMeetingLines()メソッドで実装されています。
//+--------------------------------------------------------------------+ //| "ベア・ミーティングライン"キャンドルパターンの形成をチェック | //+--------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishMeetingLines() { //--- ベア・ミーティングライン if((Close(2)-Open(2)>AvgBody(1)) && //ロングホワイト ((Open(1)-Close(1)>AvgBody(1)) && //ロングブラック (MathAbs(Close(1)-Close(2))<0.1*AvgBody(1))) // ドージクローズ return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES)メソッドは、「ベア・ミーティングライン」キャンドルパターンの形成をチェックするために使用されます。
2. ストキャスティクスインジケーターによって確認されたトレードシグナル
ロングまたはショートポジションを開くためのトレーディングシグナルは、ストキャスティクスオシレーターによって確認されなければなりません。シグナルの%Dラインは、対応するクリティカルレベル(30または70)を超えている必要があります。
オープンポジションのクローズは、%Dインジケーターの値によって決まります。クローズは以下の2つのケースで行われます:
- %Dラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は20)に達した場合
- 逆シグナルが確認されていない場合(%Dラインが次のレベルに達した場合:ロングポジションの場合は20、ショートポジションの場合は80)

Fig. 3. ベア・ミーティングラインパターン、ストキャスティクスインジケーターによって確認
- int CML_Stoch::LongCondition() - ロングポジションを開く条件をチェック(戻り値は80)とショートポジションをクローズ(戻り値は40)
- int CML_Stoch::ShortCondition() - ショートポジションを開く条件をチェック(戻り値は80)とロングポジションをクローズ(戻り値は40)
2.1. ロングポジションをオープン/ショートポジションをクローズ
「ブル・ミーティングライン」パターンの形成は、ストキャスティクスインジケーターによって確認されなければなりません:StochSignal(1)<30(ストキャスティクスインジケーターの最後の完了したバーのシグナルラインの値は30未満でなければなりません)。
ショートポジションは、ストキャスティクスインジケーターのシグナルラインが20または80レベルを上回った場合にクローズされなければなりません。
//+------------------------------------------------------------------+ //| マーケットへのエントリーおよびエグジット条件をチェック | //| 1) マーケットエントリー(ロングポジションオープン、結果=80)| //| 2) マーケットエグジット(ショートポジションクローズ、結果=40)| //+------------------------------------------------------------------+ int CML_Stoch::LongCondition() { int result=0; //--- idxは、エキスパートアドバイザーの作業モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェック //--- idx=1 - この場合、EAはニュースバーのみでトレード条件をチェック int idx =StartIndex(); //--- ロングポジションオープンの条件をチェック //--- ブル・ミーティングラインパターンの形成とシグナルライン<30 if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_MEETING_LINES) && (StochSignal(1)<30)) result=80; //--- ショートポジションクローズの条件をチェック //--- シグナルラインが過剰な買い/売りレベルを越えた場合(下向き20、上向き80) if((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- 結果を返す return(result); }
2.2. ショートポジションをオープン/ロングポジションをクローズ
「ベア・ミーティングライン」パターンの形成は、ストキャスティクスインジケーターによって確認されなければなりません:StochSignal(1)>70(ストキャスティクスインジケーターの最後の完了したバーのシグナルラインの値は70を超えていなければなりません)。
ロングポジションは、ストキャスティクスインジケーターのシグナルラインが80または20レベルを下回った場合にクローズされなければなりません。
//+------------------------------------------------------------------+ //| マーケットへのエントリーおよびエグジット条件をチェック | //| 1) マーケットエントリー(ショートポジションオープン、結果=80)| //| 2) マーケットエグジット(ロングポジションクローズ、結果=40)| //+------------------------------------------------------------------+ int CML_Stoch::ShortCondition() { int result=0; //--- idxは、エキスパートアドバイザーの作業モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェック //--- idx=1 - この場合、EAはニュースバーのみでトレード条件をチェック int idx =StartIndex(); //--- ショートポジションオープンの条件をチェック //--- ベア・ミーティングラインパターンの形成とシグナルライン>70 if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_MEETING_LINES) && (StochSignal(1)>70)) result=80; //--- ロングポジションクローズの条件をチェック //--- シグナルラインが過剰な買い/売りレベルを越えた場合(下向き80、上向き20) if((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20)))) result=40; //--- 結果を返す return(result); }
2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成
CML_Stochクラスは標準ライブラリのクラスには含まれていないため、使用するにはacml_stoch.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様の手順をcandlepatterns.mqhファイルにも適用してください。MQL5ウィザードで使用するには、MetaEditorを再起動してください。
エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します:

Figure 4. MQL5ウィザードを使ったエキスパートアドバイザーの作成
エキスパートアドバイザーの名前を指定しましょう:

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

Figure 6. エキスパートアドバイザーのシグナルプロパティ
この場合、トレードシグナルモジュールを1つだけ使用します。
ストキャスティクスによって確認された「ブル・ベア・ミーティングライン」に基づくトレードシグナルのモジュールを追加します:

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

Figure 8. エキスパートアドバイザーのシグナルプロパティ
任意のトレーリングプロパティを選択できますが、今回は「トレーリングストップ未使用」を選択します:

Figure 9. エキスパートアドバイザーのマネーマネジメントプロパティ
マネーマネジメントプロパティに関しては、「固定取引量での取引」を使用します:

Figure 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の入力パラメータは、ポジションのオープンとクローズのための閾値レベルを指定することを可能にします。
LongCondition()とShortCondition()メソッドのコードでは、閾値の固定値が指定されています:
- ポジションオープン: 80;
- ポジションクローズ: 40;
MQL5ウィザードによって生成されたエキスパートアドバイザーは、トレードシグナルモジュールからの「投票」を使用してポジションをオープンおよびクローズします。メインモジュールの投票結果も使用されますが、そのLongCondition()とShortCondition()メソッドは常に0を返します。
メインモジュールの投票結果は、「投票」の平均化にも使用されます。この場合、メインモジュール + 1モジュールのトレードシグナルが考慮されるため、閾値の設定時にこの事実を考慮する必要があります。このため、ThresholdOpenとThresholdCloseはそれぞれ40=(0+80)/2、20=(0+40)/2として設定する必要があります。
Signal_StopLevelとSignal_TakeLevelの入力パラメータの値は0に設定されており、ポジションはクローズ条件が真である場合のみクローズされます。
2.4. 歴史的バックテストの結果
エキスパートアドバイザーのバックテストを歴史的データ(EURUSD H1、テスト期間:2005.01.01-2010.03.16、PeriodK=6、PeriodD=3、PeriodSlow=36、MA_period=3)で行った結果を見てみましょう。
エキスパートアドバイザーの作成には、固定ボリューム(固定ロットでの取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリング未使用)。

Fig. 11. ブル・ベア・ミーティングライン + ストキャスティクスに基づくエキスパートアドバイザーのテスト結果
最適な入力パラメータのセットは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。
MQL5ウィザードによって作成されたエキスパートアドバイザーのコードは、expert_aml_stoch.mq5に添付されています。