みなさん、こんにちは!今日は、MQL5ウィザードを使って、ブルリッシュハラミとベアリッシュハラミに基づくトレードシグナルの作成方法をお話しします。このウィザードを使えば、MetaTrader 5用のエキスパートアドバイザー(EA)を簡単に生成できますので、トレードアイデアをすぐにチェックできます。
トレードシグナルのクラスを自分で作成する必要がありますが、その構造やサンプルについては、MQL5ウィザード:トレードシグナルのモジュール作成方法を参考にしてください。
基本的には、トレードシグナルのクラスはCExpertSignalから派生させ、その後に自分のメソッドでLongCondition()とShortCondition()をオーバーライドします。
ロシア語の本「ストラテジーオブベストトレーダー」には、多くのトレーディングストラテジーが紹介されていますが、ここではストキャスティクスやCCI、MFI、RSIなどのオシレーターによって確認された反転キャンドルパターンに焦点を当てます。
特に、ブルリッシュハラミとベアリッシュハラミに基づくシグナルを考慮し、ストキャスティクス指標で確認する方法について詳しく説明します。トレードシグナルのモジュールは、CCandlePatternクラスに基づいています。
1. ブルリッシュハラミとベアリッシュハラミの反転キャンドルパターン
1.1. ブルリッシュハラミ
ブルリッシュハラミパターンは、下降トレンドの中で、大きなキャンドルの後に、そのボディが大きなボディの縦の範囲内にある小さなキャンドルが続く場合に形成されます。このパターンは、下降トレンドが反転する可能性を示唆し、ロングポジションを持つ良いタイミングであることを示します。二番目のキャンドルは、ギャップアップで開きます。
二番目のキャンドルが小さいほど、反転の可能性が高まります。

図1. ブルリッシュハラミキャンドルパターン
「ブルリッシュハラミ」パターンの認識は、CheckPatternBullishHarami()メソッドで実装されています。
//+------------------------------------------------------------------+ //| ブルリッシュハラミキャンドルパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishHarami() { //--- ブルリッシュハラミ if((Close(1)>Open(1)) && // 最後の完了したバーはブル(白い日) ((Open(2)-Close(2)>AvgBody(1)) && // 前のキャンドルはベア、ボディが平均より大きい(長い黒) ((Close(1)<Open(2) && // ブルキャンドルの終値がベアキャンドルの始値より低い (Open(1)>Close(2))) && // ブルキャンドルの始値がベアキャンドルの終値より高い (MidPoint(2)<CloseAvg(2))) // 下落トレンド return (true); //--- return (false); }
「ブルリッシュハラミ」キャンドルパターンの形成をチェックするためには、CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI)メソッドを使用します。
1.2. ベアリッシュハラミ
ベアリッシュハラミパターンは、上昇トレンドの中で、大きなキャンドルの後に、小さなキャンドルがそのボディが大きなボディの縦の範囲内にある場合に形成されます。このパターンは、上昇トレンドが反転する可能性を示し、ショートポジションを持つ良いタイミングであることを示します。二番目のキャンドルは、ギャップダウンで開きます。
二番目のキャンドルが小さいほど、反転の可能性が高まります。

図2. ベアリッシュハラミキャンドルパターン
「ベアリッシュハラミ」パターンの認識は、CheckPatternBearishHarami()メソッドで実装されています。
//+------------------------------------------------------------------+ //| ベアリッシュハラミキャンドルパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishHarami() { //--- ベアリッシュハラミ if((Close(1)<Open(1)) && // 最後の完了したバーはベア(黒い日) ((Close(2)-Open(2)>AvgBody(1)) && // 前のキャンドルはブル、ボディが平均より大きい(長い白) ((Close(1)>Open(2) && // ベアキャンドルの終値がブルキャンドルの始値より高い (Open(1)<Close(2))) && // ベアキャンドルの始値がブルキャンドルの終値より低い (MidPoint(2)>CloseAvg(2))) // 上昇トレンド return (true); //--- return (false); }
「ベアリッシュハラミ」キャンドルパターンの形成をチェックするためには、CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI)メソッドを使用します。
2. ストキャスティクス指標によって確認されたトレードシグナル
ロングまたはショートポジションを開くためのトレードシグナルは、ストキャスティクスオシレーターによって確認されなければなりません。信号の%Dラインは、対応するクリティカルレベル(30または70)を超える必要があります。
オープンポジションのクローズは、%D指標の値に依存します。以下の2つのケースで行うことができます:
- %Dラインが反対のクリティカルレベルに達した場合(ロングポジションの場合は80、ショートポジションの場合は20)
- 逆信号が確認されていない場合(%Dラインが次のレベルに達した場合:ロングポジションの場合は20、ショートポジションの場合は80)

図3. ストキャスティクスによって確認されたベアリッシュハラミパターン
トレード条件のチェックは、以下の2つのメソッドで実装されています:
- int CBH_BH_Stoch::LongCondition() - ロングポジションを開く条件をチェック(結果は80)およびショートポジションをクローズする条件をチェック(結果は40);
- int CBH_BH_Stoch::ShortCondition() - ショートポジションを開く条件をチェック(結果は80)およびロングポジションをクローズする条件をチェック(結果は40)。
2.1. ロングポジションを開く/ショートポジションをクローズする
「ブルリッシュハラミ」パターンの形成は、ストキャスティクス指標によって確認されなければなりません:StochSignal(1)<30(ストキャスティクス指標の信号ラインの値が前回の完了したバーより30未満である必要があります)。
ショートポジションは、ストキャスティクス指標の信号ラインが20または80のレベルを上抜けした場合にクローズします。
//+------------------------------------------------------------------+ //| 市場へのエントリーおよびエグジット条件をチェックします | //| 1) 市場へのエントリー(ロングポジションを開く、結果=80) | //| 2) 市場からのエグジット(ショートポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBH_BH_Stoch::LongCondition() { int result=0; //--- idxを使用してエキスパートアドバイザーの動作モードを決定できます int idx = StartIndex(); //--- ロングポジションを開く条件のチェック //--- ブルリッシュハラミパターンの形成と信号ライン<30 if (CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (StochSignal(1)<30)) result=80; //--- ショートポジションをクローズする条件のチェック //--- 信号ラインのオーバーボート/オーバーソールドレベルのクロスオーバー(下方向20、上方向80) if((((StochSignal(1)>20) && (StochSignal(220)) || ((StochSignal(1)>80) && (StochSignal(2)<80)))) result=40; //--- 結果を返す return(result); }
2.2. ショートポジションを開く/ロングポジションをクローズする
「ベアリッシュハラミ」パターンの形成は、ストキャスティクス指標によって確認されなければなりません:StochSignal(1)>70(ストキャスティクス指標の信号ラインの値が前回の完了したバーより70より大きい必要があります)。
ロングポジションは、ストキャスティクス指標の信号ラインが80または20のレベルを下抜けした場合にクローズします。
//+------------------------------------------------------------------+ //| 市場へのエントリーおよびエグジット条件をチェックします | //| 1) 市場へのエントリー(ショートポジションを開く、結果=80)| //| 2) 市場からのエグジット(ロングポジションをクローズ、結果=40)| //+------------------------------------------------------------------+ int CBH_BH_Stoch::ShortCondition() { int result=0; //--- idxを使用してエキスパートアドバイザーの動作モードを決定できます int idx = StartIndex(); //--- ショートポジションを開く条件のチェック //--- ベアリッシュハラミパターンの形成と信号ライン>70 if (CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (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ウィザードを使用したエキスパートアドバイザーの作成
CBH_BH_Stochクラスは標準ライブラリのクラスには含まれていませんので、使用するにはacbh_bh_stoch.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同じことをcandlepatterns.mqhファイルでも行います。MQL5ウィザードで使用するには、MetaEditorを再起動してください。
エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します:

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

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

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

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

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

図9. エキスパートアドバイザーのトレイリングプロパティ
資金管理プロパティについては、「固定取引量で取引」を使用します:

図10. エキスパートアドバイザーの資金管理プロパティ
「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが取得され、Expert_ABH_BH_Stoch.mq5に保存されます。これは、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を返します。
メインモジュールの投票結果も「投票」を平均化する際に使用されます。この場合、メインモジュール+1トレードシグナルモジュールがあるため、しきい値の設定時にこの点を考慮する必要があります。これによって、ThresholdOpenとThresholdCloseは、40=(0+80)/2および20=(0+40)/2として設定される必要があります。
Signal_StopLevelおよびSignal_TakeLevelの入力パラメータの値は0に設定されており、ポジションのクローズは、クローズ条件が真であるときのみ行われます。
2.4. ヒストリーバックテスト結果
エキスパートアドバイザーのバックテストを行いましょう(EURUSD H1、テスト期間:2010.01.01-2011.03.04、PeriodK=47、PeriodD=9、PeriodSlow=13、MA_period=5)。
エキスパートアドバイザーの作成には固定ボリュームを使用しました(固定ロットでの取引、0.1)、トレイリングストップアルゴリズムは使用されていません(トレイリングは使用しない)。

図11. バックテスト結果
最適な入力パラメータのセットは、MetaTrader 5のストラテジーテスターを使用して見つけることができます。
MQL5ウィザードによって作成されたエキスパートアドバイザーのコードは、expert_abh_bh_stoch.mq5として添付されています。