皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードアイデアを素早く検証する方法をお話しします。特に、「3つの黒いカラス」と「3つの白い兵士」という逆転のローソク足パターンを、ストキャスティクス指標で確認する方法に焦点を当てます。
MQL5ウィザードでは、スタンダードライブラリのクラスを利用して、すぐに使えるエキスパートアドバイザー(EA)を作成できます。自分のトレードシグナルクラスを作成するだけで、取引アイデアをすぐにチェックすることができます。
トレードシグナルクラスは、CExpertSignalから派生させ、LongCondition()とShortCondition()のメソッドをオーバーライドする必要があります。
ここでは、逆転のローソク足パターンと、それを確認するためのインディケーターについて考察します。特に、ストキャスティクス、CCI、MFI、RSIといったオシレーターを用います。
1. 「3つの黒いカラス」と「3つの白い兵士」ローソク足パターン
1.1. 3つの黒いカラス
このベアリッシュなローソク足パターンは、現在の上昇トレンドの反転を予測するために使用されます。3本の長いボディを持つローソク足が連続しており、前日よりも安く終わっています。それぞれのセッションのオープンは、前のローソク足のボディ内にあります。

図1. 「3つの黒いカラス」ローソク足パターン
このパターンの認識は、CCandlePatternクラスのCheckPatternThreeBlackCrowsメソッドで実装されています。
//+------------------------------------------------------------------+
//| 3つの黒いカラスのパターンをチェックするメソッド |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeBlackCrows()
{
if((Open(3)-Close(3)>AvgBody(1)) &&
(Open(2)-Close(2)>AvgBody(1)) &&
(Open(1)-Close(1)>AvgBody(1)) &&
(MidPoint(2)
1.2. 3つの白い兵士
このブルリッシュなローソク足パターンは、現在の下降トレンドの反転を示唆します。3本の長いボディを持つローソク足が連続しており、前日よりも高く終わっています。それぞれのセッションのオープンは、前のローソク足のボディ内にあります。

図2. 「3つの白い兵士」ローソク足パターン
このパターンは、2日目のローソク足が1日目のレンジの上半分でオープンし、2日目の終わりには高値に近い位置で終わる限り有効です。
こちらも、CCandlePatternクラスのCheckPatternThreeWhiteSoldiersメソッドを使用してパターンを認識します。
//+------------------------------------------------------------------+
//| 3つの白い兵士のパターンをチェックするメソッド |
//+------------------------------------------------------------------+
bool CCandlePattern::CheckPatternThreeWhiteSoldiers()
{
if((Close(3)-Open(3)>AvgBody(1)) &&
(Close(2)-Open(2)>AvgBody(1)) &&
(Close(1)-Open(1)>AvgBody(1)) &&
(MidPoint(2)>MidPoint(3)) &&
(MidPoint(1)>MidPoint(2)))
return(true);
return(false);
}
2. ストキャスティクス指標で確認されたトレードシグナル
ロングまたはショートポジションを開くためのトレードシグナルは、ストキャスティクスオシレーターによって確認される必要があります。シグナルの%Dラインは、対応するクリティカルレベル(30または70)を超える必要があります。
オープンポジションのクローズは、%Dインディケーターの値に依存します。クローズは次の2つのケースで行われます:
- %Dラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は20)に達した場合
- 逆シグナルが確認されない場合(%Dラインが次のレベル20または80に達した場合)

図3. ストキャスティクスによって確認された「3つの白い兵士」のパターン
取引条件のチェックは、次の2つのメソッドで実装されています:
- int CBC_WS_Stoch::LongCondition() - ロングポジションを開く条件をチェック(結果は80)
- int CBC_WS_Stoch::ShortCondition() - ショートポジションを開く条件をチェック(結果は80)
2.1. ロングポジションのオープン/ショートポジションのクローズ
「3つの白い兵士」パターンの形成は、ストキャスティクス指標によって確認される必要があります:StochSignal(1)<30(最終バーのストキャスティクスシグナルラインの値が30未満である必要があります)。
ショートポジションは、ストキャスティクスシグナルラインが20または80レベルを上抜けた場合にクローズする必要があります。
//+------------------------------------------------------------------+
//| 市場へのエントリーとエグジットの条件をチェック |
//+------------------------------------------------------------------+
int CBC_WS_Stoch::LongCondition()
{
int result=0;
if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (StochSignal(1)<30))
result=80;
if ((((StochSignal(1)>20) && (StochSignal(2)<20)) || ((StochSignal(1)>80) && (StochSignal(2)<80))))
result=40;
return(result);
}
2.2. ショートポジションのオープン/ロングポジションのクローズ
「3つの黒いカラス」パターンの形成は、ストキャスティクス指標によって確認される必要があります:StochSignal(1)>70(最終バーのストキャスティクスシグナルラインの値が70より大きい必要があります)。
ロングポジションは、ストキャスティクスシグナルラインが80または20レベルを下抜けた場合にクローズする必要があります。
//+------------------------------------------------------------------+
//| 市場へのエントリーとエグジットの条件をチェック |
//+------------------------------------------------------------------+
int CBC_WS_Stoch::ShortCondition()
{
int result=0;
if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) && (StochSignal(1)>70))
result=80;
if ((((StochSignal(1)<80) && (StochSignal(2)>80)) || ((StochSignal(1)<20) && (StochSignal(2)>20))))
result=40;
return(result);
}
2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成
CBC_WS_Stochクラスはスタンダードライブラリには含まれていないため、acbc_ws_stoch.mqhファイルをダウンロードし、クライアントターミナルのデータフォルダ内のMQL5/Include/Expert/Signal/MySignalsに保存する必要があります。これと同様にcandlepatterns.mqhファイルも保存してください。MQL5ウィザードで使用するには、MetaEditorを再起動する必要があります。
エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します:

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

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

図6. エキスパートアドバイザーのシグナルプロパティ
この場合、1つのトレードシグナルモジュールのみを使用します。
「ストキャスティクスで確認された3つの黒いカラス/3つの白い兵士に基づくシグナル」モジュールを追加します:

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

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

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

図10. エキスパートアドバイザーのマネーマネジメントプロパティ
「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードがExpert_ABC_WS_Stoch.mq5に保存され、terminal_data_folder\MQL5\Experts\に配置されます。
デフォルトの入力パラメータ
//--- メインシグナルの入力パラメータ
input int Signal_ThresholdOpen = 10; // オープンのためのシグナル閾値
input int Signal_ThresholdClose = 10; // クローズのためのシグナル閾値
input double Signal_PriceLevel = 0.0; // 取引を実行する価格レベル
input double Signal_StopLevel = 50.0; // ストップロスレベル(ポイント単位)
input double Signal_TakeLevel = 50.0; // テイクプロフィットレベル(ポイント単位)
これらは次のように置き換える必要があります:
//--- メインシグナルの入力パラメータ
input int Signal_ThresholdOpen = 40; // オープンのためのシグナル閾値
input int Signal_ThresholdClose = 20; // クローズのためのシグナル閾値
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つのトレードシグナルモジュールがあるため、閾値を設定する際にこの点を考慮する必要があります。
Signal_StopLevelとSignal_TakeLevelの入力パラメータは0に設定されているため、ポジションは、クローズ条件が真である場合にのみクローズされます。
2.4. バックテスト結果
エキスパートアドバイザーのバックテストを行いましょう(EURUSD H1、テスト期間:2010.01.01-2011.02.02、PeriodK=47、PeriodD=9、PeriodSlow=13、MA_period=5)。
エキスパートアドバイザーの作成には、固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリング未使用)。

図11. 「3つの黒いカラス」と「3つの白い兵士」+ ストキャスティクスに基づくエキスパートアドバイザーのテスト結果
最適な入力パラメータのセットは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。
MQL5ウィザードによって生成されたエキスパートアドバイザーのコードは、expert_abc_ws_stoch.mq5に添付されています。
関連記事