概要
MQL5ウィザードを使えば、トレーダーはトレーディングシグナルのクラス、ポジションの追跡、マネーマネジメントに基づいて、EA(エキスパートアドバイザー)のコードを自動生成できます。スタンダードライブラリのトレーディングシグナルのクラスを活用して、自分だけのトレーディングシステムを開発・テストすることが可能です。そのためには、トレーディングシグナルのモジュールを作成するだけです。
「世界のトップトレーダーの戦略」という書籍(ロシア語)は、MetaStockソフトウェアパッケージを使用したテクニカル分析に関するインジケーターとトレーディング戦略を説明しています。この書籍では、従来のトレーディングシグナルに加えて、リバーサルキャンドルパターンとストキャスティクス、CCI、MFI、RSIの組み合わせに基づくシグナルについても触れられています。
リバーサルキャンドルパターンとオシレーターシグナルを組み合わせることで、偽シグナルを減らし、トレーディングシステムの効率を向上させることができます。
以前の記事では、ストキャスティクスによる確認を伴うキャンドルパターンに基づくトレーディングシグナルを考察しました:
- 3つの黒い烏/3つの白い兵士
- ダーククラウドカバー/ピアシングライン
- ブルリッシュエンガルフィング/ベアリッシュエンガルフィング
- ブルリッシュハラミ/ベアリッシュハラミ
- ハンマー/ハンギングマン
- ブルリッシュ/ベアリッシュミーティングライン
- モーニングスター/イブニングスター
この説明では、これらのモデルをすべてストキャスティクスインジケーターシグナルと組み合わせた結果を考察します。
1. ブルリッシュおよびベアリッシュキャンドルモデルとその検出
CandlePatternクラスには、ブルリッシュおよびベアリッシュキャンドルパターンの形成を検出するための関数も含まれています(ハンマー/ハンギングマンの組み合わせは除く)。
ベアリッシュキャンドルパターンの形成は、CheckPatternAllBullish()関数によって確認されます:
//+------------------------------------------------------------------+ //| ブルパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternAllBullish() { return(CheckPatternThreeWhiteSoldiers() || CheckPatternPiercingLine() || CheckPatternMorningDoji() || CheckPatternBullishEngulfing() || CheckPatternBullishHarami() || CheckPatternMorningStar() || CheckPatternBullishMeetingLines()); }
ブルリッシュキャンドルパターンの形成は、CheckPatternAllBearish()関数によって確認されます:
//+------------------------------------------------------------------+ //| ベアパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternAllBearish() { return(CheckPatternThreeBlackCrows() || CheckPatternDarkCloudCover() || CheckPatternEveningDoji() || CheckPatternBearishEngulfing() || CheckPatternBearishHarami() || CheckPatternEveningStar() || CheckPatternBearishMeetingLines()); }
2. ストキャスティクスインジケーターとの組み合わせによるトレーディングシグナル
ロング/ショートポジションのオープンは、ブルリッシュまたはベアリッシュモデルの1つが形成され、ストキャスティクスオシレーターからの確認がある場合に実行されます。%Dシグナルラインの値は、適切なクリティカルレベル(30および70)の上または下にある必要があります。
エグジットシグナルは、次の2つのケースで形成されます:
- 反対のキャンドルパターンが形成された場合(ロングポジションの場合はベアリッシュ、ショートポジションの場合はブルリッシュ)。
- %Dのその後の挙動に基づいて。%Dが市場に反対のレベル(ロングの場合は80、ショートの場合は20)に達する場合、または%Dがリバーサルシグナルを確認せず、ロングポジションの場合は20、ショートポジションの場合は80に達する場合。
市場のエントリーとエグジット条件のチェックは、次のメソッドで行います:
- int CCP_Stoch::LongCondition() - ロングポジションを開く条件(m_pattern_0)とショートポジションを閉じる条件(m_pattern_1)のチェック;
- int CCP_Stoch::ShortCondition() - ショートポジションを開く条件(m_pattern_0)とロングポジションを閉じる条件(m_pattern_1)のチェック。
2.1. ロングポジションを開いてショートポジションを閉じる
-
ロングポジションを開くシグナルは、ブルリッシュキャンドルの組み合わせが形成され、StochSignal(1)<30の条件を満たすことです(最後の完成したバーでのストキャスティクスインジケーターのシグナルラインの値が30未満であること)。
-
ショートポジションを閉じるシグナルは、ブルリッシュキャンドルパターンのいずれかが形成されるか、インジケーターラインが20レベルを上に(または80レベルを上に)クロスする場合です。
//+------------------------------------------------------------------+ //| 市場モデルが形成されたかどうかをチェックするメソッド | //| エントリー条件 (ショートポジションをオープン、m_pattern_0) | //| エグジット条件 (ロングポジションをクローズ、m_pattern_1) | //+------------------------------------------------------------------+ int CCP_Stoch::LongCondition() { int res=0; //---- ショートポジションをオープンする条件をチェック //---- ブルパターンの形成とストキャスティクスインジケーターのシグナルライン<30 if(CheckPatternAllBullish() && (StochSignal(1)<30)) res=m_pattern_0; // ロングポジションオープンのシグナル //--- ショートポジションクローズの条件チェック //--- ベアパターンの形成またはシグナルラインのクロス(上昇20、上昇80) if(CheckPatternAllBullish() || ((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80))) res=m_pattern_1; // ショートポジションをクローズするシグナル //--- return(res); }
2.2. ショートポジションを開いてロングポジションを閉じる
-
ショートポジションを開くシグナルは、ベアリッシュキャンドルパターンのいずれかが形成され、StochSignal(1)>70の条件を満たすことです(最後の完成したバーでのストキャスティクスインジケーターのシグナルラインの値が70を超える)。
-
ロングポジションを閉じるシグナルは、ベアリッシュキャンドルパターンのいずれかが形成されるか、インジケーターラインが80レベルを下に(または20レベルを下に)クロスする場合です。
//+------------------------------------------------------------------+ //| 市場モデルが形成されたかどうかをチェックするメソッド | //| エントリー条件 (ショートポジションをオープン、m_pattern_0) | //| エグジット条件 (ロングポジションをクローズ、m_pattern_1) | //+------------------------------------------------------------------+ int CCP_Stoch::ShortCondition() { int res=0; //--- ショートポジションをオープンする条件をチェック //---- ベアパターンの形成とストキャスティクスインジケーターのシグナルライン>70 if(CheckPatternAllBearish() && (StochSignal(1)>70)) res=m_pattern_0; // ショートポジションオープンのシグナル //--- ロングポジションをクローズする条件チェック //---- ベアパターンの形成またはシグナルラインのクロス(下向き80、下向き20) if(CheckPatternAllBearish() || ((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20))) res=m_pattern_1; // ロングポジションをクローズするシグナル //--- return(res); }
2.3. MQL5ウィザードを使用して「キャンドルパターン+ストキャスティクス」リバーサルパターンに基づくエキスパートアドバイザーを作成する
CCP_Stochクラスは、トレーディングシグナルのスタンダードライブラリには含まれていません。そのため、ccp_stoch.mqhファイルをダウンロードし、\terminal_folder\Include\Expert\Signal\MySignalsディレクトリに保存して使用します。candlepatterns.mqhファイルもccp_stoch.mqhと同じディレクトリにコピーしてください。その後、MQL5ウィザードでファイルを使用するためにMetaEditorを再起動します。
この戦略に基づくトレーディングロボットを作成するには、MQL5ウィザードの2ステップ目で「キャンドルパターン+ストキャスティクスに基づくシグナル」のシグナルタイプを選択します:

Fig. 1. キャンドルパターン+ストキャスティクスに基づくシグナルを選択
その後のステップで、必要なトレーリングストップの種類とマネーマネジメントシステムを指定します。エキスパートアドバイザーのコードは自動的に生成されます。これで、テストを開始する準備が整いました。
2.4. テスト結果
エキスパートアドバイザーのテスト結果(EURUSD H1、テスト期間:2000年1月1日~2011年2月2日、PeriodK=33、PeriodD=37、PeriodSlow=30、MA_period=25)。
このエキスパートアドバイザーは、固定ボリューム0.1ロットでのトレーディングモジュールを使用します(固定ロットのトレーディング)。トレーリングストップは使用されていません(トレーリングなし)。

Fig. 2. エキスパートアドバイザーのテスト結果
トレーディングシステムパラメータの最適なセットは、MetaTrader 5のストラテジーテスターを使用して見つけることができます。
MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_cp_stoch.mq5ファイルに添付されています。