トレーダーの皆さん、こんにちは!今日は、MQL5ウィザードを使用して、ダーククラウドカバーやピアシングラインの逆転パターンに基づくトレードシグナルを作成する方法についてお話しします。これにより、取引アイデアをすばやく確認できるので、ぜひ最後までご覧ください。
まず、トレードシグナルのクラスを作成する必要があります。このクラスは、CExpertSignalから派生させます。次に、LongCondition()およびShortCondition()のメソッドをオーバーライドして、自分のメソッドを実装します。
ここで注目したいのは、ダーククラウドカバーとピアシングラインの逆転パターンです。これらのパターンは、ストキャスティクスなどのオシレーターによって確認されます。
1. ダーククラウドカバーとピアシングラインの逆転パターン
1.1 ダーククラウドカバー
これは、上昇トレンドの終わりに現れるベアリッシュな逆転パターンです。初日には長い白いローソク足が形成され、二日目にはギャップアップが生じます。しかし、二日目の終値は初日の中間値を下回ります。

ダーククラウドカバーのパターンは、CCandlePatternクラスのCheckPatternDarkCloudCover()メソッドで実装されています。
//+------------------------------------------------------------------+ //| ダーククラウドカバーの形成を確認するメソッド | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() { //--- ダーククラウドカバー if((Close(2)-Open(2)>AvgBody(1)) && // (長い白) (Close(1)<Close(2)) && // (Close(1)>Open(2)) && // (前のボディ内で終了) (MidOpenClose(2)>CloseAvg(1)) && // (上昇トレンド) (Open(1)>High(2))) // (新しい高値でオープン) return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)メソッドは、ダーククラウドカバーの形成を確認するために使用されます。
1.2 ピアシングライン
二日目のギャップダウンは下降トレンドを続けますが、二日目の終値は初日のボディの中間値を超えます。これは、底が形成される可能性を示唆します。ローソク足チャートで見ると、この価格アクションは非常に明確です。

ピアシングラインのパターンは、CCandlePatternクラスのCheckPatternPiercingLine()メソッドで実装されています。
//+------------------------------------------------------------------+ //| ピアシングラインの形成を確認するメソッド | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() { //--- ピアシングライン if((Close(1)-Open(1)>AvgBody(1)) && // (長い白) (Open(2)-Close(2)>AvgBody(1)) && // (長い黒) (Close(1)>Close(2)) && // (Close(1)<Open(2)) && // (前のボディ内で終了) (MidOpenClose(2)<CloseAvg(2)) && // (下降トレンド) (Open(1)<Low(2))) // (前のローの下でオープン) return(true); //--- return(false); }
CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)メソッドは、ピアシングラインの形成を確認するために使用されます。
2. ストキャスティクスによって確認されたトレードシグナル
ロングまたはショートポジションを開くためのトレーディングシグナルは、ストキャスティクスオシレーターによって確認される必要があります。シグナルの%Dラインは、それぞれのクリティカルレベル(30または70)を超える必要があります。
オープンしたポジションのクローズは、%Dインジケーターの値に依存します。クローズは以下の2つの条件で行うことができます:
- %Dラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は20)に達した場合
- 逆のシグナルが確認されない場合(%Dラインが次のレベルに達した場合:ロングポジションの場合は20、ショートポジションの場合は80)

ダーククラウドカバーのパターン、ストキャスティクスによって確認された
2.1 ロングポジションを開く/ショートポジションをクローズする
「ピアシングライン」パターンの形成は、ストキャスティクスオシレーターによって確認されなければなりません:StochSignal(1)<30(ストキャスティクスのシグナルラインの値が30未満である必要があります)。
ショートポジションは、ストキャスティクスオシレーターのシグナルラインが20または80のレベルを上抜けした場合にクローズする必要があります。
//+------------------------------------------------------------------+ //| マーケットへのエントリーとエグジットの条件を確認するメソッド | //| 1) マーケットエントリー(ロングポジションを開く、結果=80) | //| 2) マーケットエグジット(ショートポジションをクローズ、結果=40)| //+------------------------------------------------------------------+ int CDC_PL_Stoch::LongCondition() { int result=0; //--- idxはExpert Advisorの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックで取引条件を確認します //--- idx=1 - この場合、EAはニュースバーでのみ取引条件を確認します int idx =StartIndex(); //--- ロングポジションを開く条件を確認 //--- ピアシングラインパターンとシグナルライン<30 if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) && (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 CDC_PL_Stoch::ShortCondition() { int result=0; //--- idxはExpert Advisorの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックで取引条件を確認します //--- idx=1 - この場合、EAはニュースバーでのみ取引条件を確認します int idx =StartIndex(); //--- ショートポジションを開く条件を確認 //--- ダーククラウドカバーの形成とシグナルライン>70 if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) && (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ウィザードを使ったExpert Advisorの作成
CDC_PL_Stochクラスは、スタンダードライブラリのクラスに含まれていないため、adc_pl_stoch.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、candlepatterns.mqhファイルも保存してください。これを行った後、MetaEditorを再起動するとMQL5ウィザードで使用できるようになります。
Expert Advisorを作成するために、MQL5ウィザードを起動します。

Expert Advisorの作成
Expert Advisorの名前を指定します:

Expert Advisorの一般的なプロパティ
次に、使用するトレードシグナルのモジュールを選択します。

Expert Advisorのシグナルプロパティ
私たちのケースでは、トレードシグナルのモジュールは1つだけ使用します。
「ストキャスティクスによって確認されたダーククラウドカバー/ピアシングラインに基づくシグナル」のモジュールを追加します:

Expert Advisorのシグナルプロパティ
トレードシグナルのモジュールが追加されました:

Expert Advisorのシグナルプロパティ
任意のトレイリングプロパティを選択できますが、「トレイリングストップを使用しない」を選択します:

Expert Advisorのトレイリングプロパティ
マネーマネジメントプロパティに関しては、「固定取引量での取引」を使用します:

Expert Advisorのマネーマネジメントプロパティ
「完了」ボタンを押すことで、生成されたExpert Advisorのコードを取得できます。このコードはExpert_ADC_PL_Stoch.mq5として保存され、terminal_data_folder\MQL5\Experts\に格納されます。
生成されたExpert Advisorのデフォルト入力パラメータ:
//--- メインシグナルの入力パラメータ 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ウィザードによって生成されたExpert Advisorは、トレードシグナルのモジュールからの「投票」を使用してポジションを開閉します。メインモジュールの投票結果も「投票」平均に使用されます。ただし、メインモジュールのLongCondition()およびShortCondition()メソッドは常に0を返します。
私たちのケースでは、メインモジュール + 1モジュールのトレードシグナルを持っているため、閾値設定時にこの点を考慮する必要があります。このため、ThresholdOpenとThresholdCloseはそれぞれ40=(0+80)/2、20=(0+40)/2として設定する必要があります。
Signal_StopLevelおよびSignal_TakeLevelの入力パラメータの値は0に設定されており、これはクローズ条件が満たされたときのみポジションがクローズされることを意味します。
2.4 歴史的バックテスト結果
Expert Advisorのバックテストを行いましょう(EURUSD H1、テスト期間:2010.01.01-2011.02.02、PeriodK=9、PeriodD=5、PeriodSlow=20、MA_period=27)。
Expert Advisorの作成時には固定ボリュームを使用し、固定ロットでの取引(0.1)を適用しました。トレイリングストップアルゴリズムは使用していません。

ダーククラウドカバー/ピアシングライン + ストキャスティクスに基づくExpert Advisorのテスト結果
最適な入力パラメータは、MetaTrader 5クライアント端末のストラテジーテスターを使用して見つけることができます。
生成されたExpert Advisorのコードは、expert_adc_pl_stoch.mq5として添付されています。