システムトレード

MQL5ウィザードを使った「ハンマー/ハンギングマン」パターンとRSIを利用したトレード信号
MetaTrader5
MQL5ウィザードを使った「ハンマー/ハンギングマン」パターンとRSIを利用したトレード信号

皆さん、こんにちは!今日は、MQL5ウィザードを使って、ハンマーやハンギングマンパターンに基づいたトレード信号をRSIで確認する方法についてお話しします。このウィザードを使うと、MetaTrader 5を通じて簡単にエキスパートアドバイザー(EA)を作成できますよ! まず、トレードアイデアを素早くチェックするためには、自分自身のトレード信号クラスを作成する必要があります。このクラスの構造と例については、MQL5ウィザード:トレード信号モジュールの作成方法を参照してください。 1. ハンマーとハンギングマンの逆転キャンドルパターン 1.1. ハンマー ハンマーは、小さな実体と長い下ヒゲを持つキャンドルで、下落トレンドの後に形成されます。このパターンは、ベアリッシュトレンドの終わりを示唆します。実体の色は重要ではありませんが、ブルリッシュハンマーは高い上昇の可能性を示します。 Fig. 1. ハンマーキャンドルパターン 「ハンマー」パターンの認識は、CCandlePatternクラスのCheckPatternHammer()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ハンマーキャンドルパターンの形成をチェックするメソッド | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer()   { //--- ハンマー    if((MidPoint(1)<CloseAvg(2))                                 && // 下落トレンド       (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // 実体が上部1/3       (Close(1)

2011.03.21
MQL5ウィザードで作成するハンマー・ハンギングマンパターンとMFIに基づくトレードシグナル
MetaTrader5
MQL5ウィザードで作成するハンマー・ハンギングマンパターンとMFIに基づくトレードシグナル

皆さん、こんにちは!今日は、MQL5ウィザードを使って、ハンマーやハンギングマンパターンに基づくトレードシグナルを作成する方法についてお話しします。このツールを使うと、MetaTrader 5のクライアント端末に付属しているスタンダードライブラリクラスを利用して、すぐに使えるエキスパートアドバイザー(EA)を作成できます。自分のトレードアイデアを簡単にチェックできるので、ぜひ活用してみてください! 基本的なアイデアは、トレードシグナルのクラスをCExpertSignalから派生させ、LongCondition()とShortCondition()をオーバーライドして、自分自身のメソッドを作成することです。 ロシア語の本『最高のトレーダーの戦略』には、多くのトレーディング戦略が述べられていますが、今回は逆転のキャンドルパターンと、ストキャスティクス、CCI、MFI、RSIのオシレーターによって確認されたパターンに焦点を当てます。 1. ハンマーとハンギングマンの逆転キャンドルパターン 1.1. ハンマー ハンマーは、小さなボディと長い下ヒゲを持つキャンドルで、下落トレンドの後に形成されます。ハンマーパターンは、ベアリッシュトレンドの終わりを示唆します。 キャンドルボディの色は重要ではありませんが、ブルリッシュハンマーはより高いブルリッシュポテンシャルを示します。ハンマーパターンのボディは、前のキャンドルの最小値近くで形成されることが多いです。下ヒゲが長く、上ヒゲが短いほど、逆転パターンの可能性が高まります。 ハンマーパターン ハンマーパターンの認識は、CCandlePatternクラスのCheckPatternHammer()メソッドに実装されています。 //+------------------------------------------------------------------+ //| ハンマーパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer()   { //--- ハンマー    if((MidPoint(1)<CloseAvg(2))                                && // ダウントレンド       (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // ボディが上部1/3にある       (Close(1)<Close(2)) && (Open(1)<Open(2)))                    // ボディのギャップ       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_HAMMER)メソッドは、ハンマーパターンの形成をチェックするために使用されます。 1.2. ハンギングマン ハンギングマンは、小さなボディと長い下ヒゲを持つキャンドルで、上昇トレンドの後に形成されます。このパターンは、ブルリッシュトレンドの終わりを示唆します。 こちらもキャンドルボディの色は重要ではありませんが、ベアリッシュキャンドルは高いベアリッシュポテンシャルを示します。ハンギングマンパターンのボディは、前のキャンドルの最大値近くで形成されることが多いです。下ヒゲが長く、上ヒゲが短いほど、逆転パターンの可能性が高まります。 ハンギングマンパターン ハンギングマンパターンの認識は、CCandlePatternクラスのCheckPatternHangingMan()メソッドに実装されています。 //+------------------------------------------------------------------+ //| ハンギングマンパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan()   { //--- ハンギングマン    if((MidPoint(1)>CloseAvg(2))                                && // アップトレンド       (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // ボディが上部1/3にある       (Close(1)>Close(2)) && (Open(1)>Open(2))))                  // ボディのギャップ       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN)メソッドは、ハンギングマンパターンの形成をチェックするために使用されます。 2. MFIインジケーターで確認されたトレードシグナル ロングまたはショートポジションを開くためのトレードシグナルは、MFIインジケーターによって確認される必要があります。MFIインジケーターの値は、ロングポジションの場合は40未満、ショートポジションの場合は60を超えている必要があります。 オープンしたポジションのクローズは、MFIインジケーターの値に依存します。クローズは以下の2つの場合に行います: MFIが反対のクリティカルレベル(ロングポジションの場合70、ショートポジションの場合30)に達したとき 逆シグナルが確認されなかった場合(MFIインジケーターが次のレベルに達したとき:ロングポジションの場合30、ショートポジションの場合70) ハンマーパターンとMFIインジケーター int CH_HM_MFI::LongCondition() - ロングポジションを開く条件をチェック(結果=80)およびショートポジションをクローズする条件をチェック(結果=40); int CH_HM_MFI::ShortCondition() - ショートポジションを開く条件をチェック(結果=80)およびロングポジションをクローズする条件をチェック(結果=40)。 2.1. ロングポジションを開く/ショートポジションをクローズする ハンマーパターンの形成は、MFIインジケーターで確認される必要があります:MFI(1)<40(最後の完了したバーのMFI値が40未満である必要があります)。 ショートポジションは、MFIインジケーターがクリティカルレベル(70または30)を上に越えた場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします                 | //| 1) 市場エントリー(ロングポジションを開く、結果=80)                | //| 2) 市場エグジット(ショートポジションをクローズ、結果=40)                 | //+------------------------------------------------------------------+ int CH_HM_MFI::LongCondition()   {    int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします   int idx   =StartIndex(); //--- ロングポジションを開く条件をチェック //--- ハンマーパターンとMFI<40   if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (MFI(1)<40))      result=80; //--- ショートポジションをクローズする条件をチェック //--- 過熱/過小評価レベルのシグナルライン交差(上昇30、上昇70)   if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70)))      result=40; //--- 結果を返します    return(result);   } 2.2. ショートポジションを開く/ロングポジションをクローズする ハンギングマンパターンの形成は、MFIインジケーターで確認される必要があります:MFI(1)>60(最後の完了したバーのMFI値が60より大きい必要があります)。 ロングポジションは、MFIインジケーターがクリティカルレベル(70または30)を上に越えた場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします                 | //| 1) 市場エントリー(ショートポジションを開く、結果=80)                 | //| 2) 市場エグジット(ロングポジションをクローズ、結果=40)                | //+------------------------------------------------------------------+ int CH_HM_MFI::ShortCondition()   {    int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします   int idx   =StartIndex(); //--- ショートポジションを開く条件をチェック //--- ハンギングマンパターンとMFI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (MFI(1)>60))      result=80; //--- ロングポジションをクローズする条件をチェック //--- 過熱/過小評価レベルのシグナルライン交差(上昇70、下降30)    if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30)))      result=40; //--- 結果を返します    return(result);   } 2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成 CH_HM_MFIクラスはスタンダードライブラリクラスには含まれていないため、使用するにはah_hm_mfi.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。また、acandlepatterns.mqhファイルも同様に保存してください。MetaEditorを再起動した後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するために、MQL5ウィザードを起動します: エキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定します: エキスパートアドバイザーの一般プロパティ 次に、使用するトレードシグナルのモジュールを選択します。 エキスパートアドバイザーのシグナルプロパティ 今回は、トレードシグナルのモジュールを1つだけ使用します。MFIで確認されたハンマー/ハンギングマンに基づくシグナルモジュールを追加します: エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました: エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します: エキスパートアドバイザーのトレーリングプロパティ マネーマネジメントのプロパティについては、「固定取引量でのトレード」を使用します: エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードがExpert_AH_HM_MFI.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の入力パラメータは、ポジションを開閉するための閾値レベルを指定できます。 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、テスト期間:2010.01.01-2011.03.16、PeriodMFI=47、MA_period=5)。 エキスパートアドバイザーの作成では、固定ボリュームを使用しました(固定ロットでのトレード、0.1)、トレーリングストップアルゴリズムは使用されていません(トレーリング使用せず)。 ハンマー/ハンギングマン + MFIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータセットは、MetaTrader 5クライアント端末のストラテジーテスターを使用して見つけることができます。 MQL5ウィザードで生成されたエキスパートアドバイザーのコードは、expert_ah_hm_mfi.mq5に添付されています。

2011.03.21
MQL5ウィザードで作成するハンマーとハンギングマンパターンに基づくCCIトレードシグナル
MetaTrader5
MQL5ウィザードで作成するハンマーとハンギングマンパターンに基づくCCIトレードシグナル

MetaTrader 5のMQL5ウィザードを使えば、トレードアイデアを素早くチェックできるエキスパートアドバイザー(EA)を簡単に作成できます。自分だけのトレーディングシグナルクラスを作成するだけで済みます。このクラスの構造や例については、MQL5ウィザード: トレーディングシグナルのモジュールを作成する方法を参照してください。 トレーディングシグナルクラスは、CExpertSignalから派生させる必要があります。さらに、LongCondition()とShortCondition()の仮想メソッドを自分自身のメソッドでオーバーライドすることが求められます。 ロシア語の書籍「最高のトレーダーの戦略」では、多くのトレーディング戦略が考察されています。私たちは、ストキャスティクス、CCI、MFI、RSIなどのオシレーターによって確認された反転ローソク足パターンに焦点を当てます。 トレードシグナルを確認するためには、CCI指標を使用します。CCIの値が臨界レベル(ロングポジション用の-50、ショートポジション用の50)を超える必要があります。 1. ハンマーとハンギングマンの反転ローソク足パターン 1.1. ハンマー ハンマーは、小さな実体と長い下ひげを持つローソク足で、下落トレンドの後に形成されます。このパターンは、ベアリッシュトレンドの終わりを示します。 Fig. 1. ハンマーのローソク足パターン ハンマーパターンの認識は、CheckPatternHammer()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ハンマーのローソク足パターンをチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer()   { //--- ハンマー    if((MidPoint(1)<CloseAvg(2))                                                &&       (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) &&       (Close(1)<Close(2)) && (Open(1)<Open(2)))       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_HAMMER)メソッドを用いて、ハンマーのローソク足パターンをチェックします。 1.2. ハンギングマン ハンギングマンは、小さな実体と長い下ひげを持つローソク足で、上昇トレンドの後に形成されます。このパターンは、ブルリッシュトレンドの終わりを示します。 Fig. 2. ハンギングマンのローソク足パターン ハンギングマンパターンの認識は、CheckPatternHangingMan()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ハンギングマンのローソク足パターンをチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan()   { //--- ハンギングマン    if((MidPoint(1)>CloseAvg(2))                                                &&       (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) &&       (Close(1)>Close(2)) && (Open(1)>Open(2)))       return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN)メソッドを用いて、ハンギングマンのローソク足パターンをチェックします。 2. CCI指標で確認されたトレードシグナル ロングまたはショートポジションを開くためのトレードシグナルは、CCI指標によって確認されなければなりません。CCIの値が臨界レベル(ロングポジション用の-50、ショートポジション用の50)を越える必要があります。 開いているポジションのクローズは、CCIの値に依存します。以下の2つのケースで行われます: CCIラインが反対の臨界レベル(ロングポジション用の80、ショートポジション用の-80)に達した場合 逆シグナルが確認されなかった場合(CCIが次のレベルに達したとき:ロングポジション用の-80、ショートポジション用の80) Fig. 3. ハンマーのパターン、CCI指標で確認 int CH_HM_CCI::LongCondition() - ロングポジションを開く条件をチェックし(結果は80)、ショートポジションをクローズする条件をチェックします(結果は40); int CH_HM_CCI::ShortCondition() - ショートポジションを開く条件をチェックし(結果は80)、ロングポジションをクローズする条件をチェックします(結果は40)。 2.1. ロングポジションを開く/ショートポジションをクローズする ハンマーパターンの形成は、CCI指標によって確認されなければなりません:CCI(1)<-50(最後の完成したバーのCCIの値は-50未満でなければなりません)。 ショートポジションは、CCI指標が臨界レベル-80を上回るか、臨界レベル80を下回った場合にクローズされなければなりません。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジット条件をチェックします | //+------------------------------------------------------------------+ int CH_HM_CCI::LongCondition()   {    int result=0;    //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます    //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします    //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします    int idx   =StartIndex();    //--- ロングポジションを開く条件をチェックします    //--- ハンマーパターンの形成とCCI<-50    if(CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (CCI(1)<-50))      result=80;    //--- ショートポジションをクローズする条件をチェックします    //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(下向き-80、下向き-80)    if(((CCI(1)>-80) && (CCI(2)<-80)) || ((CCI(1)<80) && (CCI(2)>80)))      result=40;    //--- 結果を返します    return(result);   } 2.2. ショートポジションを開く/ロングポジションをクローズする ハンギングマンパターンの形成は、CCI指標によって確認されなければなりません:CCI(1)>50(最後の完成したバーのCCIの値は50を超えなければなりません)。 ロングポジションは、CCI指標が-80または80レベルを下回った場合にクローズされなければなりません。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジット条件をチェックします | //+------------------------------------------------------------------+ int CH_HM_CCI::ShortCondition()   {    int result=0;    //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます    //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします    //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします    int idx   =StartIndex();    //--- ショートポジションを開く条件をチェックします    //--- ハンギングマンパターンの形成とCCI>50    if(CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (CCI(1)>50))      result=80;    //--- ロングポジションをクローズする条件をチェックします    //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(下向き-80、上向き80)    if(((CCI(1)<80) && (CCI(2)>80)) || ((CCI(1)<-80) && (CCI(2)>-80)))      result=40;    //--- 結果を返します    return(result);   } 2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成 CH_HM_CCIクラスはスタンダードライブラリのクラスに含まれていないため、ach_hm_cci.mqhファイルをダウンロードし(添付ファイルを参照)、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。キャンドルパターン用のcandlepatterns.mqhファイルも同様に行います。MetaEditorを再起動した後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: Fig. 4. MQL5ウィザードを使ったエキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定します: Fig. 5. エキスパートアドバイザーの一般的なプロパティ 次に、使用するトレードシグナルのモジュールを選択します。 Fig. 6. エキスパートアドバイザーのシグナルプロパティ この場合、1つのトレードシグナルモジュールのみを使用します。 「CCIで確認されたハンマー/ハンギングマンに基づくシグナル」トレードシグナルモジュールを追加します: Fig. 7. エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました: Fig. 8. エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を使用します: Fig. 9. エキスパートアドバイザーのトレーリングプロパティ 資金管理プロパティについては、「固定取引量でのトレード」を使用します: Fig. 10. エキスパートアドバイザーの資金管理プロパティ 「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードが得られ、Expert_AH_HM_CCI.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の入力パラメータは、ポジションのオープンとクローズのためのしきい値レベルを指定することを可能にします。 LongCondition()およびShortCondition()メソッドのコード内では、しきい値の固定値を指定しています: ポジションをオープン:80; ポジションをクローズ:40; MQL5ウィザードによって生成されたエキスパートアドバイザーは、トレードシグナルのモジュールからの「投票」を使用してポジションをオープンおよびクローズします。メインモジュールの投票結果も「投票」平均化に使用されます。私たちのケースでは、メインモジュール+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.16、PeriodCCI=25、MA_period=5)を見てみましょう。 エキスパートアドバイザー作成時に、固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリングなし)。 Fig. 11. ハンマー/ハンギングマン + CCIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータセットは、MetaTrader 5クライアント端末のストラテジーテスターを使用して見つけることができます。 MQL5ウィザードによって作成されたエキスパートアドバイザーのコードは、expert_ah_hm_cci.mq5に添付されています。

2011.03.21
MQL5ウィザードを使ったハンマー・ハンギングマンパターンのEA作成法
MetaTrader5
MQL5ウィザードを使ったハンマー・ハンギングマンパターンのEA作成法

皆さん、こんにちは!今日は、MQL5ウィザードを使って、ハンマーやハンギングマンパターンに基づくトレードシグナルを生成する方法をお話しします。このシステムトレーディング手法は、MetaTrader 5プラットフォームで活用できるので、ぜひ試してみてください。 MQL5ウィザードを使用すると、クライアント端末と一緒に提供される標準ライブラリクラスに基づいて、準備されたエキスパートアドバイザー(EA)を作成することができます。自分のトレードアイデアをすぐに確認できるので、非常に便利です。独自のトレーディングシグナルクラスを作成するだけでOKです。このクラスの構造や例については、『MQL5ウィザード:トレーディングシグナルのモジュールを作成する方法』を参照してください。 基本的なアイデアは、トレーディングシグナルクラスをCExpertSignalから派生させ、次に、LongCondition()とShortCondition()の仮想メソッドを独自の方法でオーバーライドすることです。 ロシア語の本である「最高のトレーダーの戦略」には、多くのトレーディング戦略が紹介されています。その中でも、ハンマーやハンギングマンのようなリバーサルキャンドルパターンに焦点を当て、ストキャスティクス、CCI、MFI、RSIのオシレーターによって確認されるものです。 キャンドルパターンの形成を確認するためには、CExpertSignalから派生した別のクラスを作成するのが最適です。キャンドルパターンによって生成されたトレードシグナルを確認するためには、CCandlePatternから派生したクラスを作成し、必要な機能を追加します(例えば、オシレーターによる確認など)。 1. ハンマーとハンギングマンのリバーサルキャンドルパターン 1.1. ハンマー 「ハンマー」は、小さなボディと長い下ヒゲを持つキャンドルで、下降トレンドの後に形成されます。このパターンは、ベアトレンドの終わりを示します。 キャンドルボディの色は重要ではありませんが、ブルリッシュハンマーはより高いブルポテンシャルを示します。ハンマーパターンのボディは、前のキャンドルの最小値付近で形成されることが多いです。長い下ヒゲと短い上ヒゲが逆転パターンの可能性を高めます。 図1. ハンマーキャンドルパターン 「ハンマー」パターンの認識は、CCandlePatternクラスのCheckPatternHammer()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ハンマーキャンドルパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHammer()   { //--- ハンマー    if((MidPoint(1)<CloseAvg(2)) && // 下降トレンド       (MathMin(Open(1),Close(1))>(High(1)-(High(1)-Low(1))/3.0)) && // ボディが上1/3にある       (Close(1)<Close(2)) && (Open(1)<Open(2)))   // ボディギャップ      return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_HAMMER)メソッドを使用して、「ハンマー」キャンドルパターンの形成をチェックします。 1.2. ハンギングマン 「ハンギングマン」は、小さなボディと長い下ヒゲを持つキャンドルで、上昇トレンドの後に形成されます。このパターンは、ブルトレンドの終わりを示します。 キャンドルボディの色は重要ではありませんが、ベアキャンドルはより高いベアポテンシャルを示します。ハンギングマンパターンのボディは、前のキャンドルの最大値付近で形成されることが多いです。長い下ヒゲと短い上ヒゲが逆転パターンの可能性を高めます。 図2. ハンギングマンキャンドルパターン 「ハンギングマン」パターンの認識は、CCandlePatternクラスのCheckPatternHangingMan()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ハンギングマンキャンドルパターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternHangingMan()   { //--- ハンギングマン    if((MidPoint(1)>CloseAvg(2)) && // 上昇トレンド       (MathMin(Open(1),Close(1)>(High(1)-(High(1)-Low(1))/3.0)) && // ボディが上1/3にある       (Close(1)>Close(2)) && (Open(1)>Open(2)))   // ボディギャップ      return(true); //---    return(false);   } CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN)メソッドを使用して、「ハンギングマン」キャンドルパターンの形成をチェックします。 2. ストキャスティクスオシレーターによって確認されたトレードシグナル ロングまたはショートポジションを開くためのトレードシグナルは、ストキャスティクスオシレーターによって確認される必要があります。シグナルの%Dラインは、対応するクリティカルレベル(30または70)を超えている必要があります。 オープンポジションのクローズは、%Dインジケーターの値に依存します。これは次の2つの条件で実行できます: %Dラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は20)に達した場合 逆シグナルが確認されていない場合(%Dラインが次のレベルに達したとき:ロングポジションの場合は20、ショートポジションの場合は80) 図3. ハンマーのパターン、ストキャスティクスによって確認されたもの int CH_HM_Stoch::LongCondition() - ロングポジションを開く条件をチェック(結果=80)、ショートポジションをクローズ(結果=40); int CH_HM_Stoch::ShortCondition() - ショートポジションを開く条件をチェック(結果=80)、ロングポジションをクローズ(結果=40)。 2.1. ロングポジションを開く/ショートポジションをクローズする 「ハンマー」パターンの形成は、ストキャスティクスオシレーターによって確認される必要があります:StochSignal(1)<30(最後に完成したバーのストキャスティクスインジケーターのシグナルラインの値が30未満である必要があります)。 ショートポジションは、ストキャスティクスインジケーターのシグナルラインが20または80レベルを上回った場合にクローズされる必要があります。 //+------------------------------------------------------------------+ //| マーケットへのエントリーとエグジットの条件をチェックします | //| 1) マーケットエントリー(ロングポジションを開く、結果=80) | //| 2) マーケットエグジット(ショートポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CH_HM_Stoch::LongCondition()   {    int result=0;    //--- idxはExpert Advisorの動作モードを示すために使用できます    //--- idx=0 - この場合、EAは各ティックで取引条件をチェックします    //--- idx=1 - この場合、EAはニュースバーのみで取引条件をチェックします    int idx   =StartIndex();    //--- ロングポジションを開く条件をチェックします    //--- ハンマーパターンの形成とシグナルライン<30   if (CheckCandlestickPattern(CANDLE_PATTERN_HAMMER) && (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 CH_HM_Stoch::ShortCondition()   {    int result=0;    //--- idxはExpert Advisorの動作モードを示すために使用できます    //--- idx=0 - この場合、EAは各ティックで取引条件をチェックします    //--- idx=1 - この場合、EAはニュースバーのみで取引条件をチェックします    int idx   =StartIndex();    //--- ショートポジションを開く条件をチェックします    //--- ハンギングマンパターンの形成とシグナルライン>70   if (CheckCandlestickPattern(CANDLE_PATTERN_HANGING_MAN) && (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ウィザードを使ったエキスパートアドバイザーの作成 CH_HM_Stochクラスは標準ライブラリクラスには含まれていないため、ach_hm_stoch.mqhファイルをダウンロードし(添付ファイルを参照)、client_terminal_data\MQL5\Include\Expert\Signal\MySignalsフォルダに保存する必要があります。同様に、candlepatterns.mqhファイルも保存してください。MetaEditorを再起動した後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: 図4. MQL5ウィザードでのエキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定します: 図5. エキスパートアドバイザーの概要 次に、使用するトレードシグナルのモジュールを選択します。 図6. エキスパートアドバイザーのシグナルプロパティ 今回は、トレードシグナルモジュールを1つだけ使用します。 「ストキャスティクスで確認されたハンマー/ハンギングマンに基づくシグナル」モジュールを追加します: 図7. エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました: 図8. エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します: 図9. エキスパートアドバイザーのトレーリングプロパティ マネーマネジメントプロパティについては、「固定取引量でのトレード」を選択します: 図10. エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_AH_HM_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の入力パラメータは、ポジションのオープンおよびクローズのための閾値レベルを指定できます。 LongCondition()およびShortCondition()メソッドのコードでは、閾値の固定値が指定されています: ポジションをオープン:80; ポジションをクローズ:40; MQL5ウィザードで生成されたエキスパートアドバイザーは、トレードシグナルモジュールからの「投票」を使用してポジションをオープンおよびクローズします。メインモジュールの投票結果も「投票」の平均化に使用されます。この場合、メインモジュール + 1つのトレードシグナルモジュールがあるため、閾値を設定する際にこの事実を考慮する必要があります。このため、ThresholdOpenとThresholdCloseはそれぞれ40=(0+80)/2、20=(0+40)/2として設定する必要があります。 Signal_StopLevelおよびSignal_TakeLevelの入力パラメータの値が0に設定されている場合、ポジションのクローズは、クローズ条件が真であるときのみ実行されます。 2.4. バックテスト結果 エキスパートアドバイザーのバックテストを行いましょう(通貨ペア:EURUSD H1、テスト期間:2010年1月1日〜2011年3月4日、PeriodK=47、PeriodD=9、PeriodSlow=13、MA_period=5)。 エキスパートアドバイザーの作成には、固定ボリューム(固定ロットでの取引、0.1)を使用し、トレーリングストップアルゴリズムは使用しません(トレーリングなし)。 図11. ハンマー/ハンギングマン + ストキャスティクスに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータは、MetaTrader 5のストラテジーテスターを使用して見つけることができます。 MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_ah_hm_stoch.mq5に添付されています。

2011.03.21
MQL5ウィザードで作るRSI確認済みのブルリッシュ・ハラミ/ベアリッシュ・ハラミトレードシグナル
MetaTrader5
MQL5ウィザードで作るRSI確認済みのブルリッシュ・ハラミ/ベアリッシュ・ハラミトレードシグナル

MQL5ウィザードは、エキスパートアドバイザー(EA)を簡単に作成できるツールです。標準ライブラリクラスを使用して、トレードアイデアを素早くチェックするためのトレードシグナルクラスを作成できます。詳細はMQL5ウィザード:トレードシグナルモジュールの作成方法を参照してください。 トレードシグナルクラスは、CExpertSignalから派生させ、LongCondition()とShortCondition()メソッドをオーバーライドして自分のメソッドを作成する必要があります。 トレード戦略については、ロシア語の書籍「最高のトレーダーの戦略」に多くの戦略が紹介されていますが、今回はRSIで確認されたリバーサルキャンドルパターンに焦点を当てます。 ここでは、RSIで確認された「ブルリッシュ・ハラミ」と「ベアリッシュ・ハラミ」リバーサルキャンドルパターンに基づくトレードシグナルを考察します。 1. ブルリッシュ・ハラミとベアリッシュ・ハラミのリバーサルキャンドルパターン 1.1. ブルリッシュ・ハラミ ブルリッシュ・ハラミは、下降トレンドの中で形成されます。大きなキャンドルの後に、そのボディが大きなキャンドルのボディの範囲内に収まる小さなキャンドルが続きます。このパターンは、下降トレンドが転換する可能性を示し、ロングポジションを取る良いタイミングを示唆しています。2つ目のキャンドルはギャップアップでオープンします。 ブルリッシュ・ハラミのキャンドルパターン 「ブルリッシュ・ハラミ」パターンの認識は、CCandlePatternクラスの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つ目のキャンドルはギャップダウンでオープンします。 ベアリッシュ・ハラミのキャンドルパターン 「ベアリッシュ・ハラミ」パターンの認識は、CCandlePatternクラスの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. RSIインジケーターで確認されたトレードシグナル ロングまたはショートポジションを開くためのトレードシグナルは、RSIインジケーターで確認される必要があります。RSIの値は、クリティカルレベル(ロングポジションの場合は40、ショートポジションの場合は60)よりも低く/高くなければなりません。 オープンポジションのクローズは、RSIの値に基づいて行われます。以下の2つの条件で行われます: RSIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合 逆シグナルが確認されない場合(RSIが次のレベルに達したとき:ロングポジションの場合は30、ショートポジションの場合は70) RSIインジケーターで確認されたブルリッシュ・ハラミ int CBH_BH_RSI::LongCondition() - ロングポジションを開く条件をチェック(80を返す)、ショートポジションをクローズする条件をチェック(40を返す); int CBH_BH_RSI::ShortCondition() - ショートポジションを開く条件をチェック(80を返す)、ロングポジションをクローズする条件をチェック(40を返す)。 2.1. ロングポジションをオープン/ショートポジションをクローズ 「ブルリッシュ・ハラミ」パターンの形成は、RSIインジケーターで確認される必要があります:RSI(1)<40(最後の完了バーのRSI値が40未満でなければなりません)。 ショートポジションは、RSIインジケーターがクリティカルレベル70または30を上回った場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| 市場へのエントリーおよびエグジット条件をチェック | //| 1) 市場エントリー(ロングポジションオープン、結果=80) | //| 2) 市場エグジット(ショートポジションクローズ、結果=40) | //+------------------------------------------------------------------+ int CBH_BH_RSI::LongCondition()   {    int result=0;    //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます    //--- idx=0 - この場合、EAは各ティックで取引条件をチェック    //--- idx=1 - この場合、EAはニュースバーでのみ取引条件をチェック    int idx   =StartIndex();    //--- ロングポジションオープンの条件をチェック    //--- ブルリッシュ・ハラミパターン形成とRSI<30   if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (RSI(1)<40))      result=80;    //--- ショートポジションクローズの条件をチェック    //--- RSIのオーバーボート/オーバーソールドレベル(上昇30、上昇70)のシグナルラインのクロスオーバー   if(((RSI(1)>30) && (RSI(2)<30)) || ((RSI(1)>70) && (RSI(2)<70)))      result=40;    //--- 結果を返す    return(result);   } 2.2. ショートポジションをオープン/ロングポジションをクローズ 「ベアリッシュ・ハラミ」パターンの形成は、RSIインジケーターで確認される必要があります:RSI(1)>60(最後の完了バーのRSI値が60を超えている必要があります)。 ロングポジションは、RSIインジケーターがクリティカルレベル70または30を下回った場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| 市場へのエントリーおよびエグジット条件をチェック | //| 1) 市場エントリー(ショートポジションオープン、結果=80) | //| 2) 市場エグジット(ロングポジションクローズ、結果=40) | //+------------------------------------------------------------------+ int CBH_BH_RSI::ShortCondition()   {    int result=0;    //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます    //--- idx=0 - この場合、EAは各ティックで取引条件をチェック    //--- idx=1 - この場合、EAはニュースバーでのみ取引条件をチェック    int idx   =StartIndex();    //--- ショートポジションオープンの条件をチェック    //--- ベアリッシュ・ハラミパターン形成とRSI>60   if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (RSI(1)>60))      result=80;    //--- ロングポジションクローズの条件をチェック    //--- RSIのオーバーボート/オーバーソールドレベル(下降70、下降30)のシグナルラインのクロスオーバー   if(((RSI(1)<70) && (RSI(2)>70)) || ((RSI(1)<30) && (RSI(2)>30)))      result=40;    //--- 結果を返す    return(result);   } 2.3. MQL5ウィザードを使用してエキスパートアドバイザーを作成する CBH_BH_RSIクラスは標準ライブラリクラスに含まれていないため、acml_rsi.mqhファイルをダウンロードし、client_terminal_data\MQL5\Include\Expert\Signal\MySignalsフォルダに保存する必要があります。同様に、acandlepatterns.mqhファイルも保存してください。MetaEditorを再起動した後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: MQL5ウィザードでエキスパートアドバイザーを作成する エキスパートアドバイザーの名前を指定します: エキスパートアドバイザーの一般プロパティ 次に、使用するトレードシグナルモジュールを選択します。 エキスパートアドバイザーのシグナルプロパティ この場合、トレードシグナルモジュールは1つだけ使用します。 「RSIで確認されたブルリッシュ・ハラミ/ベアリッシュ・ハラミに基づくシグナル」モジュールを追加します: エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました: エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を使用します: エキスパートアドバイザーのトレーリングプロパティ 資金管理プロパティについては、「固定取引量で取引」を使用します: エキスパートアドバイザーの資金管理プロパティ 「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABH_BH_RSI.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の入力パラメータは、ポジションを開くための閾値レベルを指定できます。 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、テスト期間:2010.01.01-2011.03.11、PeriodRSI=37、MA_period=7)でのエキスパートアドバイザーのバックテストを考察します。 エキスパートアドバイザーの作成には固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用しません(トレーリングなし)。 ブルリッシュ・ハラミ/ベアリッシュ・ハラミ + RSIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータを見つけるためには、ストラテジーテスターを使用することができます。 MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_aml_rsi.mq5に添付されています。

2011.03.17
MQL5ウィザードでのブルリッシュ・ハラミ/ベアリッシュ・ハラミとMFIによるトレード信号の作成
MetaTrader5
MQL5ウィザードでのブルリッシュ・ハラミ/ベアリッシュ・ハラミとMFIによるトレード信号の作成

皆さん、こんにちは!今日は、MQL5ウィザードを使って、ブルリッシュ・ハラミとベアリッシュ・ハラミパターンに基づくトレード信号の作成についてお話しします。これにより、自分のトレードアイデアを迅速にチェックできるようになりますよ! このウィザードは、クライアントターミナルに付属している標準ライブラリのクラスを基に、即座にエキスパートアドバイザー(EA)を作成することができます。具体的には、まず自分自身のトレード信号クラスを作成し、その構造や例はこの記事で詳しく説明されています。 トレード信号の基本的な考え方は、CExpertSignalクラスを継承した信号クラスを作成し、LongCondition()やShortCondition()のメソッドをオーバーライドして自分のメソッドを実装することです。 参考までに、ロシア語の書籍「最高のトレーダーの戦略」には、多くのトレーディング戦略が紹介されていますが、ここでは、ストキャスティクスやCCI、MFI、RSIを用いた逆転キャンドルパターンに焦点を当てていきます。 1. ブルリッシュ・ハラミとベアリッシュ・ハラミの逆転キャンドルパターン 1.1. ブルリッシュ・ハラミ ブルリッシュ・ハラミパターンは、下落トレンドの際に大きなキャンドルが小さなキャンドルに続く形で形成されます。小さなキャンドルのボディが大きなキャンドルのボディの縦の範囲内にあることが特徴です。このパターンは、下落トレンドが反転する可能性を示唆し、ロングポジションに入る良いタイミングを示します。2つ目のキャンドルはギャップアップで始まります。 図1. ブルリッシュ・ハラミのキャンドルパターン 「ブルリッシュ・ハラミ」パターンの認識は、CCandlePatternクラスの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つ目のキャンドルはギャップダウンで始まります。 2つ目の(黒)キャンドルが小さいほど、反転の可能性が高まります。 図2. ベアリッシュ・ハラミのキャンドルパターン 「ベアリッシュ・ハラミ」パターンの認識は、CCandlePatternクラスの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. MFI指標によるトレード信号の確認 ロングまたはショートポジションを開くためのトレード信号は、MFI指標によって確認されなければなりません。MFIの値は、ロングポジションの場合は40未満、ショートポジションの場合は60を超えている必要があります。 ポジションのクローズもMFIの値に依存します。以下の2つのケースで行います: MFIが対極の臨界レベル(ロングポジションの場合は70、ショートポジションの場合は30)に達したとき 逆信号が確認されない場合(MFIが次のレベルに達する場合:ロングポジションの場合は30、ショートポジションの場合は70) 図3. MFIによって確認されたブルリッシュ・ハラミパターン int CBH_BH_MFI::LongCondition() - ロングポジションを開く条件をチェック(80を返す)およびショートポジションをクローズする条件(40を返す); int CBH_BH_MFI::ShortCondition() - ショートポジションを開く条件をチェック(80を返す)およびロングポジションをクローズする条件(40を返す)。 2.1. ロングポジションを開く/ショートポジションをクローズする 「ブルリッシュ・ハラミ」パターンの形成は、MFI指標によって確認されなければなりません:MFi(1)<40(最後のバーのMFI値は40未満である必要があります)。 ショートポジションは、MFI指標が臨界レベル(70または30)を上回ったときにクローズします。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場エントリー(ロングポジションを開く、結果=80) | //| 2) 市場エグジット(ショートポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::LongCondition() { int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーのみのトレード条件をチェックします int idx = StartIndex(); //--- ロングポジションを開く条件のチェック //--- ブルリッシュ・ハラミパターンとMFI<40 if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_HARAMI) && (MFI(1)<40)) result=80; //--- ショートポジションをクローズする条件のチェック //--- 売られすぎ/買われすぎレベルのクロスオーバー信号(上昇30、上昇70) if(((MFI(1)>30) && (MFI(2)<30)) || ((MFI(1)>70) && (MFI(2)<70))) result=40; //--- 結果を返す return(result); } 2.2. ショートポジションを開く/ロングポジションをクローズする 「ベアリッシュ・ハラミ」パターンの形成は、MFI指標によって確認されなければなりません:MFI(1)>60(最後のバーのMFI値は60より大きい必要があります)。 ロングポジションは、MFI指標が臨界レベル(70または30)を上回ったときにクローズします。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場エントリー(ショートポジションを開く、結果=80) | //| 2) 市場エグジット(ロングポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBH_BH_MFI::ShortCondition() { int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーのみのトレード条件をチェックします int idx = StartIndex(); //--- ショートポジションを開く条件のチェック //--- ベアリッシュ・ハラミパターンとMFI>60 if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_HARAMI) && (MFI(1)>60)) result=80; //--- ロングポジションをクローズする条件のチェック //--- 売られすぎ/買われすぎレベルのクロスオーバー信号(上昇70、下落30) if(((MFI(1)>70) && (MFI(2)<70)) || ((MFI(1)<30) && (MFI(2)>30))) result=40; //--- 結果を返す return(result); } 2.3. MQL5ウィザードを使用したエキスパートアドバイザーの作成 CBH_BH_MFIクラスは、標準ライブラリのクラスには含まれていないため、abh_bh_mfi.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、acandlepatterns.mqhファイルも保存してください。これらは、MetaEditorを再起動後にMQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: 図4. MQL5ウィザードを使用したエキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定しましょう: 図5. エキスパートアドバイザーの一般的なプロパティ 次に、使用するトレード信号のモジュールを選択します。 図6. エキスパートアドバイザーの信号プロパティ 私たちの場合、トレード信号は1つだけ使用します。「MFIによって確認されたブルリッシュ・ハラミ/ベアリッシュ・ハラミに基づく信号」モジュールを追加します: 図7. エキスパートアドバイザーの信号プロパティ 信号モジュールが追加されました: 図8. エキスパートアドバイザーの信号プロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を使用します: 図9. エキスパートアドバイザーのトレーリングプロパティ マネーマネジメントプロパティに関しては、「固定取引ボリュームで取引する」を使用します: 図10. エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードがExpert_ABH_BH_MFI.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の入力パラメータは、ポジションの開閉のための閾値レベルを指定することができます。 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、テスト期間:2010.01.01-2011.03.16、PeriodMFI=37、MA_period=11)に基づくバックテストを考慮しましょう。 エキスパートアドバイザーの作成においては、固定ボリューム(固定ロットで取引、0.1)を使用し、トレーリングストップアルゴリズムは使用しませんでした(トレーリングは使用しない)。 図11. ブルリッシュ・ハラミ/ベアリッシュ・ハラミ + MFIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータのセットは、MetaTrader 5の戦略テスターを使用して見つけることができます。 MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_abh_bh_mfi.mq5に添付されています。

2011.03.17
MQL5ウィザードで作成するハラミパターンのトレードシグナルとCCIによる確認
MetaTrader5
MQL5ウィザードで作成するハラミパターンのトレードシグナルとCCIによる確認

皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを作成する方法についてお話しします。このウィザードを使うことで、MetaTrader 5向けのエキスパートアドバイザー(EA)を簡単に作成できます。 ここでは、逆転のハラミパターン(Bullish HaramiおよびBearish Harami)をCCI(商品チャンネル指数)で確認するシステムトレードの実装について詳しく見ていきます。まず、ハラミパターンの基本を理解しましょう。 1. ハラミパターンの概要 1.1. Bullish Harami Bullish Haramiは、下降トレンドの際に、大きなローソク足の後に、そのボディの範囲内に位置する小さなローソク足が続くことで形成されます。このパターンは、下降トレンドが反転する可能性を示唆し、ロングポジションを取る良いタイミングです。次のローソク足はギャップアップで始まります。小さければ小さいほど、反転の可能性が高まります。 図1. Bullish Haramiローソク足パターン 1.2. Bearish Harami Bearish Haramiは、上昇トレンドの際に、大きなローソク足の後に続く小さなローソク足が形成されます。このパターンは、上昇トレンドが反転する可能性を示し、ショートポジションを取る良い時期を示します。 図2. Bearish Haramiローソク足パターン 2. CCIによるトレードシグナルの確認 トレードシグナルを開くためには、CCIが重要です。CCIの値は、ロングポジションの場合は-50、ショートポジションの場合は50を超える必要があります。 ロングポジションを開く条件: CCIが-50未満 ショートポジションを閉じる条件: CCIが80を超える 図3. CCIによって確認されたBullish Haramiパターン 3. MQL5ウィザードを使用したエキスパートアドバイザーの作成 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します。ウィザードを使うと、簡単にエキスパートアドバイザーを生成できます。まず、必要なモジュールを選択し、シグナルの基準を設定します。 図4. MQL5ウィザードでのエキスパートアドバイザー作成 シグナルモジュールの設定後、作成したエキスパートアドバイザーをテストして、最適なパラメータを見つけます。 このプロセスを通じて、効果的なトレードシグナルを生成し、資産運用に役立てていきましょう!これからも一緒に学び、成長していきましょう。

2011.03.17
MQL5ウィザードを使った「ブルリッシュハラミ/ベアリッシュハラミ」とストキャスティクスによるトレードシグナルの生成
MetaTrader5
MQL5ウィザードを使った「ブルリッシュハラミ/ベアリッシュハラミ」とストキャスティクスによるトレードシグナルの生成

みなさん、こんにちは!今日は、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(2

2011.03.16
MQL5ウィザードで作成するRSIを活用したトレードシグナル
MetaTrader5
MQL5ウィザードで作成するRSIを活用したトレードシグナル

こんにちは、トレーダーの皆さん!今日は、MQL5ウィザードを使って、強気包み足(Bullish Engulfing)と弱気包み足(Bearish Engulfing)に基づくトレードシグナルの作成方法についてお話しします。この方法を使えば、自分のトレードアイデアをすぐにチェックできるので、非常に便利です。 このウィザードを使うことで、標準ライブラリのクラスを基にしたエキスパートアドバイザー(EA)を簡単に作成できます。具体的には、トレードシグナルのクラスを自作する必要がありますが、その構造や例についてはMQL5ウィザード: トレードシグナルのモジュールの作成方法を参照してください。 1. 強気包み足と弱気包み足 1.1. 強気包み足 強気包み足は、下落トレンドの際に、小さな黒いローソク足の後に大きな白いローソク足が続き、前日のローソク足を完全に包み込む形で形成されます。この時、小さなローソク足の影は短く、大きなローソク足の本体が前日のローソク足を覆っていることがポイントです。 Fig. 1. 強気包み足パターン このパターンの認識は、CheckPatternBullishEngulfing()メソッドで実装されています。以下のコードを参照してください。 //+------------------------------------------------------------------+ //| 強気包み足の形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { &nbsp;&nbsp; //--- 強気包み足 &nbsp;&nbsp; if((Open(2) > Close(2) && // 前のローソク足は弱気 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1) - Open(1) > AvgBody(1)) && // 強気ローソク足の本体が平均を上回る &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1) > Open(2)) && // 強気ローソク足の終値が弱気ローソク足の始値を上回る &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2) < CloseAvg(2) && // 下落トレンド &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1) < Close(2))) // 強気ローソク足の始値が弱気ローソク足の終値より低い &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (true); //--- &nbsp;&nbsp; return (false); } このメソッドを使用して「強気包み足」パターンの形成を確認できます。 1.2. 弱気包み足 弱気包み足は、上昇トレンドの際に、小さな白いローソク足の後に大きな黒いローソク足が続き、前日のローソク足を完全に包み込む形で形成されます。 Fig. 2. 弱気包み足パターン このパターンの認識は、CheckPatternBearishEngulfing()メソッドで実装されています。こちらもコードを見てみましょう。 //+------------------------------------------------------------------+ //| 弱気包み足の形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() { &nbsp;&nbsp; //--- 弱気包み足 &nbsp;&nbsp; if((Open(2) < Close(2) && // 前のローソク足は強気 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1) - Close(1) > AvgBody(1)) && // 弱気ローソク足の本体が平均を上回る &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1) < Open(2)) && // 弱気ローソク足の終値が強気ローソク足の始値を下回る &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2) > CloseAvg(2) && // 上昇トレンド &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1) > Close(2))) // 弱気ローソク足の始値が強気ローソク足の終値より高い &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return (true); //--- &nbsp;&nbsp; return (false); } このメソッドを使用して「弱気包み足」パターンの形成を確認できます。 2. RSI指標によって確認されたトレードシグナル トレードシグナルを開くためには、RSI指標によって確認される必要があります。RSIの値は、ロングポジションの場合は40未満、ショートポジションの場合は60を超える必要があります。 ポジションのクローズは、RSIの値に依存します。以下の2つのケースで行われます: RSIが反対の重要レベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合 逆シグナルが確認されない場合(RSIが次のレベルに達した場合:ロングポジションは30、ショートポジションは70) Fig. 3. RSI指標による確認 int CBE_BE_RSI::LongCondition() - ロングポジションを開くための条件をチェックします(結果: 80) int CBE_BE_RSI::ShortCondition() - ショートポジションを開くための条件をチェックします(結果: 80) 2.1. ロングポジションを開く/ショートポジションを閉じる 強気包み足の形成は、RSI指標によって確認される必要があります:RSI(1) &lt; 40(直近の完了したバーのRSI値が40未満である必要があります)。 ショートポジションは、RSI指標が重要なレベル70や30を上回った場合に閉じる必要があります。 //+------------------------------------------------------------------+ //| エントリーとエグジットの条件をチェックします | //| 1) 市場エントリー(ロングポジション開放、結果=80) | //| 2) 市場エグジット(ショートポジションクローズ、結果=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::LongCondition() { &nbsp;&nbsp; int result = 0; &nbsp;&nbsp; //--- エキスパートアドバイザーの動作モードを決定するためのインデックス &nbsp;&nbsp; int idx = StartIndex(); &nbsp;&nbsp; //--- ロングポジションを開く条件のチェック &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) && (RSI(1) &lt; 40)) &nbsp;&nbsp;&nbsp;&nbsp; result = 80; &nbsp;&nbsp; //--- ショートポジションを閉じる条件のチェック &nbsp;&nbsp; if(((RSI(1) &gt; 30) && (RSI(2) &lt; 30)) || ((RSI(1) &gt; 70) && (RSI(2) &lt; 70))) &nbsp;&nbsp;&nbsp;&nbsp; result = 40; &nbsp;&nbsp; //--- 結果を返す &nbsp;&nbsp; return (result); } 2.2. ショートポジションを開く/ロングポジションを閉じる 弱気包み足の形成は、RSI指標によって確認される必要があります:RSI(1) &gt; 60(直近の完了したバーのRSI値が60を超えている必要があります)。 ロングポジションは、RSI指標が重要なレベル70や30を下回った場合に閉じる必要があります。 //+------------------------------------------------------------------+ //| ショートポジションの条件をチェックします | //| 1) 市場エントリー(ショートポジション開放、結果=80) | //| 2) 市場エグジット(ロングポジションクローズ、結果=40) | //+------------------------------------------------------------------+ int CBE_BE_RSI::ShortCondition() { &nbsp;&nbsp; int result = 0; &nbsp;&nbsp; //--- エキスパートアドバイザーの動作モードを決定するためのインデックス &nbsp;&nbsp; int idx = StartIndex(); &nbsp;&nbsp; //--- ショートポジションを開く条件のチェック &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) && (RSI(1) &gt; 60)) &nbsp;&nbsp;&nbsp;&nbsp; result = 80; &nbsp;&nbsp; //--- ロングポジションを閉じる条件のチェック &nbsp;&nbsp; if(((RSI(1) &lt; 70) && (RSI(2) &gt; 70)) || ((RSI(1) &lt; 30) && (RSI(2) &gt; 30))) &nbsp;&nbsp;&nbsp;&nbsp; result = 40; &nbsp;&nbsp; return (result); } 2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成 CBE_BE_RSIクラスは標準ライブラリのクラスには含まれていないため、使用するにはacml_rsi.mqhファイルをダウンロードし、client_terminal_data\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様にacandlepatterns.mqhファイルも必要です。MetaEditorを再起動した後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します。 Fig. 4. エキスパートアドバイザーの作成 次に、エキスパートアドバイザーの名前を指定します。 Fig. 5. エキスパートアドバイザーの一般的なプロパティ その後、使用するトレードシグナルのモジュールを選択します。 Fig. 6. エキスパートアドバイザーのシグナルプロパティ この場合、トレードシグナルモジュールは1つだけ使用します。 「RSIによって確認された強気包み足/弱気包み足に基づくシグナル」モジュールを追加します。 Fig. 7. エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました。 Fig. 8. エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します。 Fig. 9. エキスパートアドバイザーのトレーリングプロパティ 資金管理プロパティとして、「固定取引量での取引」を使用します。 Fig. 10. エキスパートアドバイザーの資金管理プロパティ 「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABE_BE_RSI.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の入力パラメータは、ポジションの開閉のための閾値レベルを指定します。 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、テスト期間:2010.01.01-2011.03.04、PeriodRSI=11、MA_period=5)でのバックテストを考察します。 エキスパートアドバイザーの作成には固定ボリューム(固定ロット取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません。 Fig. 11. エキスパートアドバイザーのテスト結果 最適な入力パラメータのセットは、ストラテジーテスターを使用して見つけることができます。 生成されたエキスパートアドバイザーのコードは、expert_abe_be_rsi.mq5に添付されています。

2011.03.10
MQL5ウィザードを使ったトレードシグナルの作成 - 強気包み/弱気包みとMFIを活用したEA
MetaTrader5
MQL5ウィザードを使ったトレードシグナルの作成 - 強気包み/弱気包みとMFIを活用したEA

皆さん、こんにちは!今日はMQL5ウィザードを使って、強気包みと弱気包みのチャートパターンを基にしたトレードシグナルを作成する方法をお話しします。この手法は、MQL5ウィザードを利用して、MetaTrader 5で簡単に実装できます。 まず、トレードシグナルクラスを作成する必要があります。このクラスは、CExpertSignalを基にしていて、LongCondition()とShortCondition()メソッドをオーバーライドして独自のロジックを組み込みます。 トレードシグナルを確認するために、逆張りのキャンドルパターンに焦点を当てます。特に、強気包みと弱気包みのパターンを取り上げ、それにMFI(Market Facilitation Index)などのオシレーターを組み合わせてシグナルを確認します。 1. 強気包みと弱気包みのキャンドルパターン 1.1. 強気包み 強気包みは、下落トレンドの中で小さな黒いキャンドルの後に大きな白いキャンドルが続き、前日のキャンドルを完全に包み込む形で形成されます。小さなキャンドルの影(テール)は短く、大きなキャンドルのボディが前日のキャンドルを完全に覆うことが特徴です。 強気包みのキャンドルパターン 強気包みパターンの認識は、CCandlePatternクラスのCheckPatternBullishEngulfing()メソッドで実装されています。 //+------------------------------------------------------------------+ //| 強気包みのキャンドルパターンをチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() &nbsp;&nbsp;{ //--- 強気包み &nbsp;&nbsp; if((Open(2)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// 前のキャンドルが弱気 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)-Open(1)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 強気キャンドルのボディが平均より大きい &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// 強気キャンドルの終値が弱気キャンドルの始値より高い &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 下落トレンド &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// 強気キャンドルの始値が弱気キャンドルの終値より低い &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)メソッドが強気包みパターンの形成をチェックします。 1.2. 弱気包み 弱気包みは、上昇トレンドの中で小さな白いキャンドルの後に大きな黒いキャンドルが続くパターンで、前日のキャンドルを完全に包み込みます。 弱気包みのキャンドルパターン 弱気包みパターンの認識は、CCandlePatternクラスのCheckPatternBearishEngulfing()メソッドで行われます。 //+------------------------------------------------------------------+ //| 弱気包みのキャンドルパターンをチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() &nbsp;&nbsp;{ //--- 弱気包み &nbsp;&nbsp; if((Open(2)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 前のキャンドルが強気 &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp;&nbsp;&nbsp;// キャンドルのボディが平均より大きい &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// 弱気キャンドルの終値が強気キャンドルの始値より低い &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(2)) &amp;&amp;&nbsp;&nbsp;// 上昇トレンド &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // 弱気キャンドルの始値が強気キャンドルの終値より高い &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)メソッドが弱気包みパターンの形成をチェックします。 2. MFIインジケーターによるシグナルの確認 トレードシグナルを開くためには、MFIインジケーターでの確認が必要です。MFIの値が長期ポジションの場合は40未満、短期ポジションの場合は60を超える必要があります。 ポジションのクローズは、MFIの値によって決定されます。これには2つのケースがあります: MFIが反対のクリティカルレベル(長期ポジションの場合は70、短期ポジションの場合は30)に達した場合 逆シグナルが確認されない場合(MFIが次のレベルに達した場合:長期ポジションは30、短期ポジションは70) MFIによるシグナルの確認 int CBE_BE_MFI::LongCondition() - 長期ポジションを開く条件をチェックします(結果は80)および短期ポジションをクローズする条件(結果は40); int CBE_BE_MFI::ShortCondition() - 短期ポジションを開く条件をチェックします(結果は80)および長期ポジションをクローズする条件(結果は40)。 2.1. 長期ポジションのオープン/短期ポジションのクローズ 「強気包み」パターンは、MFIインジケーターで確認されなければなりません:MFi(1)&lt;40(直近のバーのMFI値が40未満である必要があります)。 短期ポジションは、MFIインジケーターがクリティカルレベル(70または30)を上回った場合にクローズします。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場へのエントリー(長期ポジションをオープン、結果=80) | //| 2) 市場からのエグジット(短期ポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idxはEAの動作モードを決定するために使用できます &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 長期ポジションをオープンする条件をチェック &nbsp;&nbsp; //--- 強気包みパターンとMFI&lt;40 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) &amp;&amp; (MFI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 短期ポジションをクローズする条件をチェック &nbsp;&nbsp; //--- シグナルラインがオーバーボート/オーバーソールドレベルを越えた場合(上向き30、上向き70) &nbsp;&nbsp;if(((MFI(1)&gt;30) &amp;&amp; (MFI(2)&lt;30)) || ((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. 短期ポジションのオープン/長期ポジションのクローズ 「弱気包み」パターンは、MFIインジケーターで確認されなければなりません:MFI(1)&gt;60(直近のバーのMFI値が60より大きい必要があります)。 長期ポジションは、MFIインジケーターがクリティカルレベル(70または30)を上回った場合にクローズします。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場へのエントリー(短期ポジションをオープン、結果=80) | //| 2) 市場からのエグジット(長期ポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBE_BE_MFI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idxはEAの動作モードを決定するために使用できます &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- 短期ポジションをオープンする条件をチェック &nbsp;&nbsp; //--- 弱気包みパターンとMFI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) &amp;&amp; (MFI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- 長期ポジションをクローズする条件をチェック &nbsp;&nbsp; //--- シグナルラインがオーバーボート/オーバーソールドレベルを越えた場合(上向き70、下向き30) &nbsp;&nbsp; if(((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70)) || ((MFI(1)&lt;30) &amp;&amp; (MFI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5ウィザードを使ったEAの作成 CBE_BE_MFIクラスは標準ライブラリクラスには含まれていないため、abe_be_mfi.mqhファイルをダウンロードし(添付ファイル参照)、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様にacandlepatterns.mqhファイルも保存してください。MetaEditorを再起動後、MQL5ウィザードで使用できます。 EAを作成するには、MQL5ウィザードを起動します: EA作成ステップ1 EAの名前を指定します: EAの一般属性 次に、使用するトレードシグナルのモジュールを選択します。 EAのシグナルプロパティ この場合、トレードシグナルモジュールは1つだけ使用します。 「強気包み/弱気包みに基づくシグナル(MFIで確認済み)」モジュールを追加します: EAのシグナルプロパティ2 トレードシグナルモジュールが追加されました: EAのシグナルプロパティ3 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します: EAのトレーリングプロパティ マネーマネジメントプロパティについては、「固定取引量での取引」を選択します: EAのマネーマネジメントプロパティ 「完了」ボタンを押すと、生成されたEAのコードがExpert_ABE_BE_MFI.mq5に保存され、terminal_data_folder\MQL5\Experts\に格納されます。 生成されたEAのデフォルトの入力パラメータ: //--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // オープンのシグナル閾値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのシグナル閾値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行する価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // テイクプロフィットレベル(ポイント単位) これを次のように置き換えます: //--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // オープンのシグナル閾値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのシグナル閾値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行する価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// テイクプロフィットレベル(ポイント単位) Signal_ThresholdOpen/Signal_ThresholdCloseの入力パラメータで、ポジションのオープンとクローズの閾値を指定できます。 LongCondition()およびShortCondition()メソッドのコードでは、次のように固定値を指定しています: ポジションオープン:80; ポジションクローズ:40; MQL5ウィザードによって生成されたEAは、トレードシグナルモジュールからの「投票」を使用してポジションをオープンおよびクローズします。メインモジュールの投票結果も使用されますが、メインモジュールの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.03.16、PeriodMFI=37、MA_period=5)で行ってみましょう。 Expert Advisorの作成には固定ボリューム(Trading Fixed Lot、0.1)を使用し、トレーリングストップアルゴリズムは使用しませんでした(Trailing not used)。 強気包み/弱気包み + MFIに基づくEAのバックテスト結果 最良の入力パラメータセットは、MetaTrader 5のストラテジーテスターを使用して見つけることができます。 MQL5ウィザードで作成されたExpert Advisorのコードは、expert_abe_be_mfi.mq5に添付されています。

2011.03.10
MQL5ウィザードで作成する!CCIを用いた「強気包み」・「弱気包み」取引シグナル
MetaTrader5
MQL5ウィザードで作成する!CCIを用いた「強気包み」・「弱気包み」取引シグナル

皆さん、こんにちは!今回は、MQL5ウィザードを使って、標準ライブラリのクラスを基にしたエキスパートアドバイザー(EA)を作成する方法をご紹介します。このツールを使えば、自分の取引アイデアをすぐにチェックできるので、取引シグナルクラスを自分で作成するだけでOKです。詳しい情報は、MQL5ウィザードでの取引シグナルモジュールの作成方法を参考にしてください。 基本的な考え方は、取引シグナルのクラスをCExpertSignalから派生させて、LongCondition()とShortCondition()の仮想メソッドを自分のメソッドでオーバーライドすることです。 ここでは、CCI指標を用いて確認された「強気包み」と「弱気包み」の反転キャンドルパターンについて取り上げます。この取引シグナルモジュールは、CCandlePatternクラスに基づいており、キャンドルパターンを用いた取引シグナルの作成にシンプルな例として使えます。 1. 「強気包み」と「弱気包み」の反転キャンドルパターン 1.1. 強気包み 「強気包み」反転パターンは、下降トレンドの際に、小さな黒いキャンドルの後に、大きな白いキャンドルが続き、前日のキャンドルを完全に覆う(「包み込む」)形で形成されます。小さなキャンドルの影(テール)は短いため、大きなキャンドルのボディが前日のキャンドル全体を覆うことができます。 Fig. 1. 強気包みキャンドルパターン 「強気包み」パターンの認識は、CCandlePatternクラスのCheckPatternBullishEngulfing()メソッドで実装されています。 //+------------------------------------------------------------------+ //| Checks formation of "Bullish Engulfing" candlestick pattern | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() &nbsp;&nbsp;{ //--- Bullish Engulfing &nbsp;&nbsp; if((Open(2)&gt;Close(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// previous candle is bearish &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)-Open(1)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// body of the bullish candle is higher than average value of the body &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp;&nbsp;&nbsp;// close price of the bullish candle is higher than open price of the bearish candle &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2))&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// downtrend &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// open price of the bullish candle is lower than close price of the bearish &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING)メソッドは「強気包み」キャンドルパターンの形成をチェックするために使用されます。 1.2. 弱気包み 「弱気包み」反転パターンは、上昇トレンドの際に、小さな白いキャンドルの後に、大きな黒いキャンドルが続き、前日のキャンドルを完全に覆う形で形成されます。小さなキャンドルの影(テール)は短いため、大きなキャンドルのボディが前日のキャンドル全体を覆うことができます。 Fig. 2. 弱気包みキャンドルパターン 「弱気包み」パターンの認識は、CCandlePatternクラスのCheckPatternBearishEngulfing()メソッドで実装されています。 //+------------------------------------------------------------------+ //| Checks formation of "Bearish Engulfing" candlestick pattern | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBearishEngulfing() &nbsp;&nbsp;{ //--- Bearish Engulfing &nbsp;&nbsp; if((Open(2)&lt;Close(2)) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// previous candle is bearish &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp;&nbsp;&nbsp;// body of the candle is higher than average value of the body &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp;&nbsp;&nbsp;// close price of the bearish candle is lower than open price of the bullish candle &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(2)) &amp;&amp;&nbsp;&nbsp;// uptrend &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;Close(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; // Open price of the bearish candle is higher than close price of the bullish candle &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING)メソッドは「弱気包み」キャンドルパターンの形成をチェックするために使用されます。 2. CCI指標によって確認される取引シグナル ロングまたはショートポジションを開くための取引シグナルは、CCI指標によって確認される必要があります。CCIの値は、クリティカルレベル(ロングポジションの場合は-50、ショートポジションの場合は50)を越えなければなりません。 開いたポジションのクローズは、CCIの値に依存します。これには2つのケースがあります: CCIラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は-80)に達した場合 逆シグナルが確認されない場合(CCIが次のレベルに達する場合:ロングポジションの場合は-80、ショートポジションの場合は80) Fig. 3. CCI指標によって確認された「強気包み」パターン int CBE_BE_CCI::LongCondition() - ロングポジションを開く条件をチェックします(結果=80)およびショートポジションをクローズします(結果=40); int CBE_BE_CCI::ShortCondition() - ショートポジションを開く条件をチェックします(結果=80)およびロングポジションをクローズします(結果=40)。 2.1. ロングポジションを開く/ショートポジションをクローズする 「強気包み」パターンは、CCI指標によって確認されなければなりません:CCI(1)&lt;-50(最後の完成したバーのCCI値は-50未満である必要があります)。 ショートポジションは、CCI指標がクリティカルレベル-80を上回るか、クリティカルレベル80を下回った場合にクローズされます。 //+------------------------------------------------------------------+ //| Checks conditions for entry and exit from market | //| 1) Market entry (open long position, result=80) | //| 2) Market exit (close short position, result=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx can be used to determine Expert Advisor work mode //--- idx=0 - in this case EA checks trade conditions at each tick //--- idx=1 - in this case EA checks trade condition only at news bars &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- checking of conditions to open long position //--- formation of Bullish Engulfing pattern and CCI&lt;-50 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_BULLISH_ENGULFING) &amp;&amp; (CCI(1)&lt;-50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- checking of conditions to close short position //--- signal line crossover of overbought/oversold levels (downward -80, downward -80) &nbsp;&nbsp; if(((CCI(1)&gt;-80) &amp;&amp; (CCI(2)&lt;-80)) || ((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- return result &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. ショートポジションを開く/ロングポジションをクローズする 「弱気包み」パターンは、CCI指標によって確認されなければなりません:CCI(1)&gt;50(最後の完成したバーのCCI値は50より大きい必要があります)。 ロングポジションは、CCI指標が-80または80レベルを下回った場合にクローズされます。 //+------------------------------------------------------------------+ //| Checks conditions for entry and exit from market | //| 1) Market entry (open short position, result=80) | //| 2) Market exit (close long position, result=40) | //+------------------------------------------------------------------+ int CBE_BE_CCI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idx can be used to determine Expert Advisor work mode //--- idx=0 - in this case EA checks trade conditions at each tick //--- idx=1 - in this case EA checks trade condition only at news bars &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); //--- checking of conditions to open short position //--- formation of Bearish Engulfing pattern and CCI&gt;50 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_BEARISH_ENGULFING) &amp;&amp; (CCI(1)&gt;50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- checking of conditions to close long position //--- signal line crossover of overbought/oversold levels (downward -80, downward 80) &nbsp;&nbsp; if(((CCI(1)&lt;80) &amp;&amp; (CCI(2)&gt;80)) || ((CCI(1)&lt;-80) &amp;&amp; (CCI(2)&gt;-80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- return result &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成 CBE_BE_CCIクラスは標準ライブラリのクラスに含まれていないため、acbe_be_cci.mqhファイルをダウンロードして、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、candlepatterns.mqhファイルも保存してください。MetaEditorを再起動後にMQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: Fig. 4. MQL5ウィザードを使用したエキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定しましょう: Fig. 5. エキスパートアドバイザーの一般的なプロパティ 次に、使用する取引シグナルのモジュールを選択します。 Fig. 6. エキスパートアドバイザーのシグナルプロパティ この場合、取引シグナルのモジュールは1つだけ使用します。「CCIで確認された強気包み/弱気包みに基づくシグナル」モジュールを追加します: Fig. 7. エキスパートアドバイザーのシグナルプロパティ 取引シグナルモジュールが追加されました: Fig. 8. エキスパートアドバイザーのシグナルプロパティ トレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します: Fig. 9. エキスパートアドバイザーのトレーリングプロパティ 資金管理プロパティについては、「固定取引量での取引」を使用します: Fig. 10. エキスパートアドバイザーの資金管理プロパティ 「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードが得られます。これは、terminal_data_folder\MQL5\Experts\に保存されます。 生成されたエキスパートアドバイザーのデフォルトの入力パラメータは以下の通りです: //--- inputs for main signal input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // Signal threshold value to open [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // Signal threshold value to close [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // Price level to execute a deal input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // Stop Loss level (in points) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // Take Profit level (in points) これを次のように変更する必要があります: //--- inputs for main signal input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // Signal threshold value to open [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // Signal threshold value to close [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // Price level to execute a deal input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// Stop Loss level (in points) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// Take Profit level (in points) Signal_ThresholdOpen/Signal_ThresholdCloseの入力パラメータは、ポジションを開くためとクローズするための閾値レベルを指定することができます。 LongCondition()およびShortCondition()メソッドのコードでは、閾値の固定値が指定されています: ポジションをオープン:80; ポジションをクローズ:40。 MQL5ウィザードによって生成されたエキスパートアドバイザーは、取引シグナルのモジュールからの「投票」を使ってポジションを開閉します。メインモジュールの「投票」結果も使用されますが、LongCondition()およびShortCondition()メソッドは常に0を返します。 メインモジュールの投票結果も「投票」平均化に使用されます。この場合、メインモジュール + 1つの取引シグナルモジュールとなるため、閾値を設定する際にこの点を考慮する必要があります。このため、ThresholdOpenは40=(0+80)/2、ThresholdCloseは20=(0+40)/2として設定される必要があります。 Signal_StopLevelおよびSignal_TakeLevelの入力パラメータは0に設定されており、クローズ条件が真のときのみポジションがクローズされます。 2.4. 歴史的バックテスト結果 エキスパートアドバイザーの歴史データ(EURUSD H1、テスト期間:2010.01.01-2011.03.16、PeriodCCI=49、MA_period=11)に基づくバックテストを考察しましょう。 エキスパートアドバイザーの作成には、固定ボリューム(Trading Fixed Lot、0.1)を使用し、トレーリングストップアルゴリズムは使用されていません(Trailing not used)。 Fig. 11. CCIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータのセットは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。 MQL5ウィザードによって生成されたエキスパートアドバイザーのコードは、expert_abe_be_cci.mq5として添付されます。

2011.03.10
MQL5ウィザードでのトレード信号作成:強気・弱気包み線とストキャスティクスを活用したシステムトレード
MetaTrader5
MQL5ウィザードでのトレード信号作成:強気・弱気包み線とストキャスティクスを活用したシステムトレード

こんにちは、トレーダーの皆さん!今日は、MQL5ウィザードを使って、強気・弱気包み線を基にしたトレード信号をどう作成するかをお話しします。このウィザードを使えば、簡単にエキスパートアドバイザー(EA)を作成でき、自分のトレードアイデアをすぐに試すことができます。 まず、トレード信号のクラスを作成する必要があります。このクラスの構造や具体的な例については、こちらのMQL5ウィザード:トレード信号のモジュールを作成する方法の記事を参考にしてください。 1. 包み線パターンについて 1.1. 強気包み線 強気包み線は、下落トレンドの中で、小さな黒いローソク足の後に大きな白いローソク足が完全に覆いかぶさるパターンです。このパターンが形成されると、買いシグナルとして注目されます。具体的には、前日の黒いローソク足を完全に包み込む形になります。 Fig. 1. 強気包み線パターン このパターンの認識は、CheckPatternBullishEngulfing()メソッドによって行われます。以下はそのコードの一例です: //+------------------------------------------------------------------+ //| 強気包み線パターンのチェック | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternBullishEngulfing() { //--- 強気包み線 if ((Open(2) &gt; Close(2)) && // 前のローソク足が弱気 (Close(1) - Open(1) &gt; AvgBody(1)) && // 強気のローソク足が平均より大きい (Close(1) &gt; Open(2)) && // 強気のローソク足の終値が弱気の始値を上回る (MidOpenClose(2) &lt; CloseAvg(2)) && // 下落トレンド (Open(1) &lt; Close(2))) { // 強気のローソク足が弱気の終値より低い return (true); } return (false); } このメソッドを使って、強気包み線パターンをチェックします。 1.2. 弱気包み線 弱気包み線は、上昇トレンドの中で、小さな白いローソク足の後に大きな黒いローソク足が現れるパターンです。これも前日を完全に覆い隠す形になります。 Fig. 2. 弱気包み線パターン このパターンの認識は、CheckPatternBearishEngulfing()メソッドによって行われます。 2. ストキャスティクスによるトレード信号の確認 トレード信号を開くためには、ストキャスティクスオシレーターによって確認する必要があります。%Dラインが30または70の重要なレベルを越えることが求められます。 ポジションを閉じるタイミングは、%Dラインの値によって決まります。以下の2つの場合にポジションを閉じます: %Dラインが反対の重要なレベル(ロングの場合は80、ショートの場合は20)に達した場合 逆のシグナルが確認されない場合(%Dラインが20または80に達した場合) Fig. 3. ストキャスティクスによるトレード信号の確認 トレード条件をチェックするためのメソッドは以下の通りです: int CBE_BE_Stoch::LongCondition() - ロングポジションを開く条件をチェック int CBE_BE_Stoch::ShortCondition() - ショートポジションを開く条件をチェック 3. MQL5ウィザードを使用したエキスパートアドバイザーの作成 CBE_BE_Stochクラスは標準ライブラリには含まれていませんので、使用するにはacbe_be_stoch.mqhファイルをダウンロードし、クライアントターミナルの指定フォルダに保存する必要があります。その後、MQL5ウィザードを使ってエキスパートアドバイザーを作成します。 Fig. 4. MQL5ウィザードの使用 次にエキスパートアドバイザーの名前を指定し、トレード信号のモジュールを選択します。これにより、強気・弱気包み線とストキャスティクスを基にしたトレード信号を使ったシステムが完成します。 詳細なコードや設定方法は、実際に作業を進めながら確認してみてください。成功するトレードを目指して頑張りましょう!

2011.03.10
MQL5ウィザードによるダーククラウドカバー/ピアシングラインとRSIに基づくトレードシグナル
MetaTrader5
MQL5ウィザードによるダーククラウドカバー/ピアシングラインとRSIに基づくトレードシグナル

皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを生成する方法についてお話しします。特に、ダーククラウドカバーやピアシングラインとRSIを組み合わせたシステムについてです。 MQL5ウィザードを使うと、クライアントターミナルに付属の標準ライブラリクラスに基づいて、すぐに使えるエキスパートアドバイザー(EA)を作成できます。自分のトレードアイデアを素早くチェックするのに役立ちます。自分のトレードシグナルクラスを作成するだけで、すぐに使い始めることができます。詳細はMQL5ウィザードでのエキスパートアドバイザーの作成を参照してください。 トレードシグナルクラスはCExpertSignalから派生させる必要があります。次に、LongCondition()やShortCondition()のメソッドを自分の方法でオーバーライドする必要があります。 ここで、ロシア語の本『最高のトレーダーの戦略』では、さまざまなトレーディング戦略が考察されています。今回は、ストキャスティクス、CCI、MFI、およびRSIオシレーターによって確認された反転キャンドルパターンに焦点を当てます。 1. ダーククラウドカバーとピアシングラインの反転キャンドルパターン 1.1. ダーククラウドカバー ダーククラウドカバーは、上昇トレンドの終わりに発生するベアリッシュキャンドルの反転パターンです。最初の日には長い白いキャンドルが形成され、2日目にはギャップアップが生じます。しかし、2日目は最初の日の中央値を下回ってクローズします。 図1. ダーククラウドカバーのキャンドルパターン ダーククラウドカバーパターンの認識は、CCandlePatternクラスのCheckPatternDarkCloudCover()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ダーククラウドカバーのキャンドルパターンをチェックする | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ //--- ダーククラウドカバー &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // (以前のボディ内でクローズ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (上昇トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (新しい高値でオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)メソッドは、ダーククラウドカバーのキャンドルパターンの形成をチェックします。 1.2. ピアシングライン 2日目のギャップダウンは下降トレンドを維持しますが、2日目のクローズは1日目のボディの中央値を上回ります。これは、底が形成される可能性を示唆しています。このプライスアクションは、バー チャートではあまり明確ではありませんが、キャンドルチャートでは明確に認識できます。2日目のクローズが1日目のボディに浸透するほど、反転シグナルの成功確率が高くなります。 図2. ピアシングラインのキャンドルパターン ピアシングラインパターンの認識は、CCandlePatternクラスのCheckPatternPiercingLine()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ピアシングラインのキャンドルパターンをチェックする | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ //--- ピアシングライン &nbsp;&nbsp; if((Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // (長い黒) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (以前のボディ内でクローズ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2)) &amp;&amp; // (下降トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Low(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (以前のローよりも低いオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)メソッドは、ピアシングラインのキャンドルパターンの形成をチェックします。 2. RSIインジケーターによって確認されるトレードシグナル ロングまたはショートポジションを開くためのトレードシグナルは、RSIインジケーターによって確認される必要があります。RSIの値は、クリティカルレベル(ロングポジションの場合は40、ショートポジションの場合は60)よりも低い/高い必要があります。 開いているポジションのクローズは、RSIの値によって決まります。これは2つのケースで行うことができます: RSIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合 逆シグナルが確認されない場合(RSIが次のレベルに達した場合:ロングポジションの場合は30、ショートポジションの場合は70) 図3. RSIインジケーターによって確認されたダーククラウドカバーのパターン int CDC_PL_RSI::LongCondition() - ロングポジションを開く条件をチェックします(80を返す)とショートポジションをクローズします(40を返す)。 int CDC_PL_RSI::ShortCondition() - ショートポジションを開く条件をチェックします(80を返す)とロングポジションをクローズします(40を返す)。 2.1. ロングポジションを開く/ショートポジションをクローズする 「ピアシングライン」パターンの形成は、RSIインジケーターによって確認されなければなりません:RSI(1)&lt;40(最後の完了したバーのRSIの値は40未満でなければなりません)。 RSIインジケーターがクリティカルレベル70または30を上回った場合、ショートポジションはクローズされなければなりません。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックする | //| 1) 市場エントリー(ロングポジションを開く、結果=80)| //| 2) 市場エグジット(ショートポジションをクローズする、結果=40)| //+------------------------------------------------------------------+ int CDC_PL_RSI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idxはExpert Advisorの動作モードを決定するのに使用できます &nbsp;&nbsp; //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします &nbsp;&nbsp; //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- ロングポジションを開く条件をチェックします &nbsp;&nbsp; //--- ピアシングラインパターンの形成とRSI&lt;30 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (RSI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- ショートポジションをクローズする条件をチェックします &nbsp;&nbsp; //--- オーバーボード/オーバーソールドレベルのシグナルラインのクロスオーバー(上昇30、上昇70) &nbsp;&nbsp;if(((RSI(1)&gt;30) &amp;&amp; (RSI(2)&lt;30)) || ((RSI(1)&gt;70) &amp;&amp; (RSI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. ショートポジションを開く/ロングポジションをクローズする 「ダーククラウドカバー」パターンは、RSIインジケーターによって確認されなければなりません:RSI(1)&gt;60(最後の完了したバーのRSIの値は60よりも大きくなければなりません)。 RSIインジケーターがクリティカルレベル70または30を下回った場合、ロングポジションはクローズされなければなりません。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックする | //| 1) 市場エントリー(ショートポジションを開く、結果=80)| //| 2) 市場エグジット(ロングポジションをクローズする、結果=40)| //+------------------------------------------------------------------+ int CDC_PL_RSI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idxはExpert Advisorの動作モードを決定するのに使用できます &nbsp;&nbsp; //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします &nbsp;&nbsp; //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- ショートポジションを開く条件をチェックします &nbsp;&nbsp; //--- ダーククラウドカバーパターンの形成とRSI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (RSI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- ロングポジションをクローズする条件をチェックします &nbsp;&nbsp; //--- オーバーボード/オーバーソールドレベルのシグナルラインのクロスオーバー(下落70、下落30) &nbsp;&nbsp;if(((RSI(1)&lt;70) &amp;&amp; (RSI(2)&gt;70)) || ((RSI(1)&lt;30) &amp;&amp; (RSI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5ウィザードを使ってエキスパートアドバイザーを作成する CDC_PL_RSIクラスは標準ライブラリクラスには含まれていませんので、使用するにはadc_pl_rsi.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様にacandlepatterns.mqhファイルも同様に行ってください。これらはMetaEditorを再起動した後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: 図4. MQL5ウィザードによるエキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定します: 図5. エキスパートアドバイザーの一般的なプロパティ 次に、使用するトレードシグナルのモジュールを選択します。 図6. エキスパートアドバイザーのシグナルプロパティ 今回は、トレードシグナルのモジュールは1つだけ使用します。「RSIによって確認されたダーククラウドカバー/ピアシングラインに基づくシグナル」モジュールを追加します: 図7. エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました: 図8. エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップを使用しない」を選択します: 図9. エキスパートアドバイザーのトレーリングプロパティ マネーマネジメントのプロパティについては、「固定トレードボリュームでの取引」を使用します: 図10. エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ADC_PL_RSI.mq5に保存され、terminal_data_folder\MQL5\Experts\に配置されます。 生成されたエキスパートアドバイザーのデフォルトの入力パラメータは次のとおりです: //--- メインシグナルの入力パラメータ input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 開くためのシグナル閾値値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // 閉じるためのシグナル閾値値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行する価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // テイクプロフィットレベル(ポイント単位) これを次のように置き換える必要があります: //--- メインシグナルの入力パラメータ input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 開くためのシグナル閾値値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // 閉じるためのシグナル閾値値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行する価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// テイクプロフィットレベル(ポイント単位) Signal_ThresholdOpen/Signal_ThresholdCloseの入力パラメータを使用して、ポジションを開くおよび閉じるための閾値レベルを指定することができます。 LongCondition()およびShortCondition()メソッドのコード内では、閾値の固定値を指定しています: ポジションをオープン:80; ポジションをクローズ:40; MQL5ウィザードによって生成されたエキスパートアドバイザーは、トレードシグナルモジュールの「投票」を使用してポジションを開閉します。メインモジュールの投票結果も「投票」平均化に使用されます。この場合、メインモジュールとトレードシグナルモジュールが1つあり、閾値値を設定する際にこの事実を考慮する必要があります。そのため、ThresholdOpenとThresholdCloseはそれぞれ40=(0+80)/2および20=(0+40)/2として設定する必要があります。 Signal_StopLevelとSignal_TakeLevelの入力パラメータの値は0に設定されており、これはポジションのクローズが条件が真のときだけ行われることを意味します。 2.4. ヒストリーバックテスト結果 ヒストリカルデータ(EURUSD H1、テスト期間:2010.01.01-2011.02.23、PeriodRSI=20、MA_period=14)に基づくエキスパートアドバイザーのバックテストを考えてみましょう。 図11. ダーククラウドカバー/ピアシングライン + RSIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータのセットは、ストラテジーテスターを使用して見つけることができます。 MQL5ウィザードによって作成されたエキスパートアドバイザーのコードは、expert_ad_pl_rsi.mq5に添付されています。

2011.02.25
MQL5ウィザードを使ったダーククラウドカバー/ピアシングラインとMFIによる取引シグナルの作成
MetaTrader5
MQL5ウィザードを使ったダーククラウドカバー/ピアシングラインとMFIによる取引シグナルの作成

皆さん、こんにちは!今日は、MQL5ウィザードを使って、ダーククラウドカバーやピアシングラインに基づいた取引シグナルを作成する方法についてお話しします。このウィザードは、クライアント端末と一緒に提供される標準ライブラリのクラスを基に、すぐに使えるエキスパートアドバイザー(EA)を作成できる便利なツールです。 このウィザードを使えば、自分の取引アイデアを素早くチェックできるので、特に初心者の方にはおすすめです。自分の取引シグナルクラスを作成するだけでOKです。その構造やサンプルについては、MQL5ウィザード:取引シグナルモジュールの作成方法の記事を参照してください。 基本的なアイデアは、取引シグナルのクラスをCExpertSignalから派生させ、LongCondition()とShortCondition()の仮想メソッドをオーバーライドして独自のメソッドを作成することです。 ロシア語の書籍「最高のトレーダーの戦略」には多くの取引戦略が紹介されていますが、今回はストキャスティクスやCCI、MFI、RSIなどのオシレーターによって確認される反転ローソク足パターンに焦点を当てます。 最適な方法は、ローソク足パターンの形成をチェックするために、CExpertSignalから派生した別のクラスを作成することです。ローソク足パターンによって生成された取引シグナルを確認するためには、CCandlePatternから派生したクラスを作成し、オシレーターなどの必要な機能を追加するだけです。 1. ダーククラウドカバーとピアシングラインの反転ローソク足パターン 1.1. ダーククラウドカバー ダーククラウドカバーは、上昇トレンドの終わりに現れるベアリッシュな反転ローソク足パターンです。初日は長い白いローソク足が形成され、2日目にはギャップアップが発生します。しかし、2日目の終値は初日の中間点を下回ります。 ダーククラウドカバーのローソク足パターン 「ダーククラウドカバー」パターンの認識は、CCandlePatternクラスのCheckPatternDarkCloudCover()メソッドに実装されています。 //+------------------------------------------------------------------+ //| ダーククラウドカバーのローソク足パターンをチェックします&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ //--- ダーククラウドカバー &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // (前のボディの中にクローズ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (上昇トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (新しい高値でオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)メソッドは、「ダーククラウドカバー」ローソク足パターンの形成をチェックするために使用されます。 1.2. ピアシングライン 2日目にギャップダウンが発生することで、下降トレンドが継続します。しかし、2日目の終値は初日のボディの中間点を上回ります。これにより、ベアにとってボトムが形成されている可能性を示唆します。このプライスアクションは、ローソク足チャートで見ると非常に明確ですが、バーチャートではそれほど目立ちません。2日目の終値が初日のボディにどれだけ深く侵入するかが、反転シグナルの成功の可能性を高めます。 ピアシングラインのローソク足パターン 「ピアシングライン」パターンの認識は、CCandlePatternクラスのCheckPatternPiercingLine()メソッドに実装されています。 //+------------------------------------------------------------------+ //| ピアシングラインのローソク足パターンをチェックします&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ //--- ピアシングライン &nbsp;&nbsp; if((Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // (長い黒) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; //&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (前のボディの中にクローズ) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2)) &amp;&amp; // (下降トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Low(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (前のローより低い位置でオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)メソッドは、「ピアシングライン」ローソク足パターンの形成をチェックするために使用されます。 2. MFIインジケーターで確認された取引シグナル ロングまたはショートポジションを開くための取引シグナルは、MFIインジケーターによって確認されなければなりません。MFIインジケーターの値が40未満(ロングポジションの場合)または60を超える(ショートポジションの場合)必要があります。 オープンポジションのクローズは、MFIインジケーターの値に依存します。クローズは以下の2つのケースで行うことができます: MFIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合 逆シグナルが確認されない場合(MFIインジケーターが次のレベルに達したとき:ロングポジションの場合は30、ショートポジションの場合は70) MFIインジケーターによって確認されたダーククラウドカバーのパターン int CDC_PL_MFI::LongCondition() - ロングポジションを開く条件をチェックします(結果=80)およびショートポジションをクローズする条件(結果=40); int CDC_PL_MFI::ShortCondition() - ショートポジションを開く条件をチェックします(結果=80)およびロングポジションをクローズする条件(結果=40)。 2.1. ロングポジションをオープン/ショートポジションをクローズ 「モーニングスター」パターンの形成は、MFIインジケーターによって確認されなければなりません:MFi(1)&lt;40(最後の完成したバーのMFI値が40未満である必要があります)。 ショートポジションは、MFIインジケーターがクリティカルレベル(70または30)を上回った場合にクローズされなければなりません。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 市場へのエントリー(ロングポジションをオープン、結果=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //| 2) 市場からのエグジット(ショートポジションをクローズ、結果=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ int CDC_PL_MFI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックで取引条件をチェックします //--- idx=1 - この場合、EAはニュースバーのみに取引条件をチェックします &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- ロングポジションをオープンする条件のチェック //--- ピアシングラインパターンの形成とMFI&lt;40 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (MFI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- ショートポジションをクローズする条件のチェック //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(上向き30、上向き70) &nbsp;&nbsp;if(((MFI(1)&gt;30) &amp;&amp; (MFI(2)&lt;30)) || ((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. ショートポジションをオープン/ロングポジションをクローズ 「ダーククラウドカバー」パターンの形成は、MFIインジケーターによって確認されなければなりません:MFI(1)&gt;60(最後の完成したバーのMFI値が60を超えている必要があります)。 ロングポジションは、MFIインジケーターがクリティカルレベル(70または30)を上回った場合にクローズされなければなりません。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 1) 市場へのエントリー(ショートポジションをオープン、結果=80)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //| 2) 市場からのエグジット(ロングポジションをクローズ、結果=40)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;| //+------------------------------------------------------------------+ int CDC_PL_MFI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックで取引条件をチェックします //--- idx=1 - この場合、EAはニュースバーのみに取引条件をチェックします &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- ショートポジションをオープンする条件のチェック //--- ダーククラウドカバーの形成とMFI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (MFI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- ロングポジションをクローズする条件のチェック //--- オーバーボート/オーバーソールドレベルのシグナルラインのクロスオーバー(上向き70、下向き30) &nbsp;&nbsp;if(((MFI(1)&gt;70) &amp;&amp; (MFI(2)&lt;70)) || ((MFI(1)&lt;30) &amp;&amp; (MFI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5ウィザードを使ってエキスパートアドバイザーを作成する CDC_PL_MFIクラスは標準ライブラリのクラスには含まれていませんので、使用するにはadc_pl_mfi.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、acandlepatterns.mqhファイルも同様です。これらのファイルは、MetaEditorを再起動した後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します。 MQL5ウィザードを使用してエキスパートアドバイザーを作成 エキスパートアドバイザーの名前を指定します: エキスパートアドバイザーの一般的なプロパティ その後、使用する取引シグナルのモジュールを選択する必要があります。 エキスパートアドバイザーのシグナルプロパティ この場合、取引シグナルのモジュールは1つだけ使用します。 「MFIによって確認されたダーククラウドカバー/ピアシングラインに基づくシグナル」の取引シグナルモジュールを追加します: エキスパートアドバイザーのシグナルプロパティ 取引シグナルのモジュールが追加されました: エキスパートアドバイザーのシグナルプロパティ トレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します: エキスパートアドバイザーのトレーリングプロパティ マネーマネジメントプロパティに関しては、「固定取引量での取引」を使用します: エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードが得られ、Expert_ADC_PL_MFI.mq5に保存されます。これは、terminal_data_folder\MQL5\Experts\に保存されます。 生成されたエキスパートアドバイザーのデフォルト入力パラメータ: //--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // オープンのシグナル閾値[0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのシグナル閾値[0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 取引を実行する価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // テイクプロフィットレベル(ポイント単位) これを以下のように置き換えます://--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // オープンのシグナル閾値[0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのシグナル閾値[0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0&nbsp;&nbsp;&nbsp; // 取引を実行する価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// テイクプロフィットレベル(ポイント単位) 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、テスト期間:2010.01.01-2011.03.16、PeriodMFI=49、MA_period=11)を見てみましょう。 エキスパートアドバイザーを作成する際に、固定ボリューム(固定ロットでの取引、0.1)を使用し、トレーリングストップアルゴリズムは使用しませんでした(トレーリングは使用しない)。 ダーククラウドカバー/ピアシングライン + MFIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータのセットは、MetaTrader 5クライアント端末のストラテジーテスターを使用して見つけることができます。 MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_adc_pl_mfi.mq5に添付されています。

2011.02.25
MQL5ウィザードでの「ダーククラウドカバー/ピアシングライン」に基づくトレードシグナルとCCI
MetaTrader5
MQL5ウィザードでの「ダーククラウドカバー/ピアシングライン」に基づくトレードシグナルとCCI

皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを作成する方法をご紹介します。特に「ダーククラウドカバー」と「ピアシングライン」に基づくシグナルで、CCIを活用します。 MQL5ウィザードは、クライアントターミナルと共に提供されるスタンダードライブラリのクラスを元に、即使用可能なエキスパートアドバイザー(EA)を作成することができます。自分のトレードアイデアを素早くチェックできるので、非常に便利です。自分自身のトレーディングシグナルクラスを作成すれば、具体的なシグナルを生成できます。 このクラスはCExpertSignalから派生させ、LongCondition()とShortCondition()メソッドをオーバーライドする必要があります。 ここでは、トレードシグナルのモジュールを作成するために「ダーククラウドカバー」と「ピアシングライン」のリバーサルパターンに焦点を当て、CCI指標で確認します。このモジュールは、CCandlePatternクラスに基づいています。 1. ダーククラウドカバーとピアシングラインのリバーサルパターン 1.1. ダーククラウドカバー ダーククラウドカバーは、上昇トレンドの終わりに現れるベアリッシュリバーサルパターンです。初日には長い白いキャンドルが形成され、2日目にはギャップアップが生じますが、2日目の終値は初日の中間点を下回ります。 Fig. 1. ダーククラウドカバーキャンドルパターン このパターンの認識は、CCandlePatternクラスのCheckPatternDarkCloudCover()メソッドで行われます。以下のコードで確認できます。 //+------------------------------------------------------------------+ //| ダーククラウドカバーキャンドルパターンの形成をチェックします。 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ //--- ダーククラウドカバー &nbsp;&nbsp; if((Close(2) - Open(2) &gt; AvgBody(1)) &amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1) &lt; Close(2)) &amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1) &gt; Open(2)) &amp;&amp; // (前のボディ内で終了) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2) &gt; CloseAvg(1)) &amp;&amp; // (上昇トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1) &gt; High(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (新しい高値でオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)メソッドを使用して、ダーククラウドカバーキャンドルパターンの形成をチェックします。 1.2. ピアシングライン 2日目のギャップダウンは、下落トレンドを継続させます。しかし、2日目の終値は初日のボディの中間点を上回ります。これは、底が形成される可能性を示唆しています。この価格アクションは、バーチャートよりもキャンドルチャートでの方がはっきりと認識できます。2日目の終値が初日のボディにどれだけ侵入するかが、リバーサルシグナルの成功率に影響します。 Fig. 2. ピアシングラインキャンドルパターン ピアシングラインパターンの認識は、CCandlePatternクラスのCheckPatternPiercingLine()メソッドで行われます。 //+------------------------------------------------------------------+ //| ピアシングラインキャンドルパターンの形成をチェックします。 | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ //--- ピアシングライン &nbsp;&nbsp; if((Close(1) - Open(1) &gt; AvgBody(1)) &amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2) - Close(2) &gt; AvgBody(1)) &amp;&amp; // (長い黒) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1) &gt; Close(2)) &amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1) &lt; Open(2)) &amp;&amp; // (前のボディ内で終了) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2) &lt; CloseAvg(2)) &amp;&amp; // (下降トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1) &lt; Low(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (前のローより低くオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)メソッドを使用して、ピアシングラインキャンドルパターンの形成をチェックします。 2. CCI指標で確認されたトレードシグナル ロングまたはショートポジションをオープンするためのトレーディングシグナルは、CCI指標によって確認される必要があります。CCIの値は、クリティカルレベル(ロングポジションの場合は-50、ショートポジションの場合は50)を越える必要があります。 オープンポジションのクローズは、CCIの値に基づいて決定されます。以下の2つのケースで行われます: CCIラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は-80)に達した場合 リバースシグナルが確認されていない場合(CCIが次のレベルに達したとき:ロングポジションの場合は-80、ショートポジションの場合は80) Fig. 3. CCI指標で確認されたダーククラウドカバー int CDC_PL_CCI::LongCondition() - ロングポジションをオープンする条件をチェック(結果=80)し、ショートポジションをクローズする条件をチェック(結果=40); int CDC_PL_CCI::ShortCondition() - ショートポジションをオープンする条件をチェック(結果=80)し、ロングポジションをクローズする条件をチェック(結果=40)。 2.1. ロングポジションをオープン/ショートポジションをクローズ 「ピアシングライン」パターンの形成は、CCI指標によって確認される必要があります:CCI(1) &lt; -50(最後に完了したバーのCCIの値が-50未満でなければなりません)。 ショートポジションは、CCI指標が-80のクリティカルレベルを上回るか、80のクリティカルレベルを下回った場合にクローズします。 //+------------------------------------------------------------------+ //| マーケットへのエントリーとエグジットの条件をチェックします。 | //| 1) マーケットエントリー(ロングポジションオープン、結果=80) | //| 2) マーケットエグジット(ショートポジションクローズ、結果=40) | //+------------------------------------------------------------------+ int CDC_PL_CCI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用されます //--- idx=0 - この場合EAは各ティックで取引条件をチェックします //--- idx=1 - この場合EAはニュースバーのみに取引条件をチェックします &nbsp;&nbsp; int idx&nbsp;&nbsp;= StartIndex(); //--- ロングポジションをオープンする条件をチェック //--- ピアシングラインパターンの形成とCCI &lt; -50 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (CCI(1) &lt; -50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- ショートポジションをクローズする条件をチェック //--- オーバーボート/オーバーソールドレベルの信号ラインのクロスオーバー(下向き-80、下向き-80) &nbsp;&nbsp; if(((CCI(1) &gt; -80) &amp;&amp; (CCI(2) &lt; -80)) || ((CCI(1) &lt; -80) &amp;&amp; (CCI(2) &gt; -80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. ショートポジションをオープン/ロングポジションをクローズ 「ダーククラウドカバー」パターンの形成は、CCI指標によって確認される必要があります:CCI(1) &gt; 50(最後に完了したバーのCCIの値が50を超えている必要があります)。 ロングポジションは、CCI指標が-80または80のレベルを下回った場合にクローズします。 //+------------------------------------------------------------------+ //| マーケットへのエントリーとエグジットの条件をチェックします。 | //| 1) マーケットエントリー(ショートポジションオープン、結果=80) | //| 2) マーケットエグジット(ロングポジションクローズ、結果=40) | //+------------------------------------------------------------------+ int CDC_PL_CCI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用されます //--- idx=0 - この場合EAは各ティックで取引条件をチェックします //--- idx=1 - この場合EAはニュースバーのみに取引条件をチェックします &nbsp;&nbsp; int idx&nbsp;&nbsp;= StartIndex(); //--- ショートポジションをオープンする条件をチェック //--- ダーククラウドカバーの形成とCCI &gt; 50 &nbsp;&nbsp; if(CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (CCI(1) &gt; 50)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- ロングポジションをクローズする条件をチェック //--- オーバーボート/オーバーソールドレベルの信号ラインのクロスオーバー(下向き-80、下向き80) &nbsp;&nbsp; if(((CCI(1) &lt; 80) &amp;&amp; (CCI(2) &gt; 80)) || ((CCI(1) &lt; -80) &amp;&amp; (CCI(2) &gt; -80))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5ウィザードを使用したエキスパートアドバイザーの作成 CDC_PL_CCIクラスはスタンダードライブラリのクラスには含まれていないため、acdc_pl_cci.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、candlepatterns.mqhファイルも必要です。これらは、MetaEditorを再起動後にMQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: Fig. 4. MQL5ウィザードを使用したエキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定します: Fig. 5. エキスパートアドバイザーの一般的なプロパティ 次に使用するトレードシグナルのモジュールを選択します。 Fig. 6. エキスパートアドバイザーのシグナルプロパティ 私たちの場合、トレードシグナルのモジュールは1つだけ使用します。 「CCIで確認されたダーククラウドカバー/ピアシングラインに基づくシグナル」モジュールを追加します: Fig. 7. エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました: Fig. 8. エキスパートアドバイザーのシグナルプロパティ トレーリングプロパティを選択できますが、「トレーリングストップを使用しない」を選択します: Fig. 9. エキスパートアドバイザーのトレーリングプロパティ マネーマネジメントプロパティについては「固定取引量で取引」を使用します: Fig. 10. エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードが得られ、Expert_ADC_PL_CCI.mq5に保存されます。これは、terminal_data_folder\MQL5\Experts\に保存されます。 生成されたエキスパートアドバイザーのデフォルトの入力パラメータは: //--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // シグナル閾値をオープンするための[0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // シグナル閾値をクローズするための[0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp; // 取引を実行するための価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0&nbsp;&nbsp; // テイクプロフィットレベル(ポイント単位) これらは次のように置き換える必要があります: //--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // シグナル閾値をオープンするための[0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp; =20;&nbsp;&nbsp;&nbsp;&nbsp; // シグナル閾値をクローズするための[0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp; // 取引を実行するための価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// テイクプロフィットレベル(ポイント単位) 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、テスト期間:2010.01.01-2011.03.16、PeriodCCI=15、MA_period=19)。 エキスパートアドバイザーの作成にあたって、固定ボリューム(固定ロットでの取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリングなし)。 Fig. 11. ダーククラウドカバー/ピアシングライン + CCIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。 MQL5ウィザードで作成したエキスパートアドバイザーのコードは、expert_adc_pl_cci.mq5に添付しています。

2011.02.25
MQL5ウィザードを使ったダーククラウドカバー/ピアシングラインとストキャスティクスによるトレードシグナル
MetaTrader5
MQL5ウィザードを使ったダーククラウドカバー/ピアシングラインとストキャスティクスによるトレードシグナル

トレーダーの皆さん、こんにちは!今日は、MQL5ウィザードを使用して、ダーククラウドカバーやピアシングラインの逆転パターンに基づくトレードシグナルを作成する方法についてお話しします。これにより、取引アイデアをすばやく確認できるので、ぜひ最後までご覧ください。 まず、トレードシグナルのクラスを作成する必要があります。このクラスは、CExpertSignalから派生させます。次に、LongCondition()およびShortCondition()のメソッドをオーバーライドして、自分のメソッドを実装します。 ここで注目したいのは、ダーククラウドカバーとピアシングラインの逆転パターンです。これらのパターンは、ストキャスティクスなどのオシレーターによって確認されます。 1. ダーククラウドカバーとピアシングラインの逆転パターン 1.1 ダーククラウドカバー これは、上昇トレンドの終わりに現れるベアリッシュな逆転パターンです。初日には長い白いローソク足が形成され、二日目にはギャップアップが生じます。しかし、二日目の終値は初日の中間値を下回ります。 ダーククラウドカバーのパターンは、CCandlePatternクラスのCheckPatternDarkCloudCover()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ダーククラウドカバーの形成を確認するメソッド | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternDarkCloudCover() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- ダーククラウドカバー &nbsp;&nbsp; if((Close(2)-Open(2)&gt;AvgBody(1))&nbsp;&nbsp;&amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&lt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (前のボディ内で終了) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&gt;CloseAvg(1))&nbsp;&nbsp;&amp;&amp; // (上昇トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&gt;High(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (新しい高値でオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER)メソッドは、ダーククラウドカバーの形成を確認するために使用されます。 1.2 ピアシングライン 二日目のギャップダウンは下降トレンドを続けますが、二日目の終値は初日のボディの中間値を超えます。これは、底が形成される可能性を示唆します。ローソク足チャートで見ると、この価格アクションは非常に明確です。 ピアシングラインのパターンは、CCandlePatternクラスのCheckPatternPiercingLine()メソッドで実装されています。 //+------------------------------------------------------------------+ //| ピアシングラインの形成を確認するメソッド | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternPiercingLine() &nbsp;&nbsp;{ &nbsp;&nbsp; //--- ピアシングライン &nbsp;&nbsp; if((Close(1)-Open(1)&gt;AvgBody(1)) &amp;&amp; // (長い白) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; // (長い黒) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Close(1)&gt;Close(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &amp;&amp; // &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Close(1)&lt;Open(2))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&amp;&amp; // (前のボディ内で終了) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(MidOpenClose(2)&lt;CloseAvg(2)) &amp;&amp; // (下降トレンド) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;(Open(1)&lt;Low(2)))&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;// (前のローの下でオープン) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE)メソッドは、ピアシングラインの形成を確認するために使用されます。 2. ストキャスティクスによって確認されたトレードシグナル ロングまたはショートポジションを開くためのトレーディングシグナルは、ストキャスティクスオシレーターによって確認される必要があります。シグナルの%Dラインは、それぞれのクリティカルレベル(30または70)を超える必要があります。 オープンしたポジションのクローズは、%Dインジケーターの値に依存します。クローズは以下の2つの条件で行うことができます: %Dラインが反対のクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は20)に達した場合 逆のシグナルが確認されない場合(%Dラインが次のレベルに達した場合:ロングポジションの場合は20、ショートポジションの場合は80) ダーククラウドカバーのパターン、ストキャスティクスによって確認された 2.1 ロングポジションを開く/ショートポジションをクローズする 「ピアシングライン」パターンの形成は、ストキャスティクスオシレーターによって確認されなければなりません:StochSignal(1)&lt;30(ストキャスティクスのシグナルラインの値が30未満である必要があります)。 ショートポジションは、ストキャスティクスオシレーターのシグナルラインが20または80のレベルを上抜けした場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| マーケットへのエントリーとエグジットの条件を確認するメソッド | //| 1) マーケットエントリー(ロングポジションを開く、結果=80) | //| 2) マーケットエグジット(ショートポジションをクローズ、結果=40)| //+------------------------------------------------------------------+ int CDC_PL_Stoch::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idxはExpert Advisorの動作モードを決定するために使用できます &nbsp;&nbsp; //--- idx=0 - この場合、EAは各ティックで取引条件を確認します &nbsp;&nbsp; //--- idx=1 - この場合、EAはニュースバーでのみ取引条件を確認します &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- ロングポジションを開く条件を確認 &nbsp;&nbsp; //--- ピアシングラインパターンとシグナルライン&lt;30 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_PIERCING_LINE) &amp;&amp; (StochSignal(1)&lt;30)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- ショートポジションをクローズする条件を確認 &nbsp;&nbsp; //--- シグナルラインがオーバーボート/オーバーソールドレベルをクロスする(下方向20、上方向80) &nbsp;&nbsp; if((((StochSignal(1)&gt;20) &amp;&amp; (StochSignal(2)&lt;20)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&gt;80) &amp;&amp; (StochSignal(2)&lt;80)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2 ショートポジションを開く/ロングポジションをクローズする 「ダーククラウドカバー」パターンの形成は、ストキャスティクスオシレーターによって確認されなければなりません:StochSignal(1)&gt;70(ストキャスティクスのシグナルラインの値が70を超える必要があります)。 ロングポジションは、ストキャスティクスオシレーターのシグナルラインが下方向80または20のレベルをクロスした場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| マーケットへのエントリーとエグジットの条件を確認するメソッド | //| 1) マーケットエントリー(ショートポジションを開く、結果=80) | //| 2) マーケットエグジット(ロングポジションをクローズ、結果=40)| //+------------------------------------------------------------------+ int CDC_PL_Stoch::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; &nbsp;&nbsp; //--- idxはExpert Advisorの動作モードを決定するために使用できます &nbsp;&nbsp; //--- idx=0 - この場合、EAは各ティックで取引条件を確認します &nbsp;&nbsp; //--- idx=1 - この場合、EAはニュースバーでのみ取引条件を確認します &nbsp;&nbsp; int idx&nbsp;&nbsp; =StartIndex(); &nbsp;&nbsp; //--- ショートポジションを開く条件を確認 &nbsp;&nbsp; //--- ダーククラウドカバーの形成とシグナルライン&gt;70 &nbsp;&nbsp;if (CheckCandlestickPattern(CANDLE_PATTERN_DARK_CLOUD_COVER) &amp;&amp; (StochSignal(1)&gt;70)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; &nbsp;&nbsp; //--- ロングポジションをクローズする条件を確認 &nbsp;&nbsp; //--- シグナルラインがオーバーボート/オーバーソールドレベルをクロスする(下方向80、上方向20) &nbsp;&nbsp; if((((StochSignal(1)&lt;80) &amp;&amp; (StochSignal(2)&gt;80)) || &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; ((StochSignal(1)&lt;20) &amp;&amp; (StochSignal(2)&gt;20)))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; &nbsp;&nbsp; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 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&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // エントリーのためのシグナル閾値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのためのシグナル閾値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行するための価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // テイクプロフィットレベル(ポイント単位) これらは以下のように置き換える必要があります: //--- メインシグナルの入力パラメータ input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // エントリーのためのシグナル閾値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのためのシグナル閾値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行するための価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// テイクプロフィットレベル(ポイント単位) 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として添付されています。

2011.02.25
MQL5ウィザードを使った「3つの黒いカラス/3つの白い兵士」パターンとRSIによるトレードシグナル
MetaTrader5
MQL5ウィザードを使った「3つの黒いカラス/3つの白い兵士」パターンとRSIによるトレードシグナル

トレーダーの皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを簡単に作成する方法をご紹介します。このツールを使うと、事前に用意されたエキスパートアドバイザー(EA)を、クライアントターミナルに付属している標準ライブラリのクラスを基に作成できます。詳細はMQL5ウィザードでのエキスパートアドバイザーの作成についてをチェックしてみてください。 トレードアイデアを迅速にチェックするには、自分自身のトレーディングシグナルクラスを作成するだけでOK。このクラスの構造とサンプルについては、記事MQL5ウィザード:トレーディングシグナルのモジュールの作成方法に記載されています。 基本的なアイデアは、トレーディングシグナルクラスがCExpertSignalから派生し、次に、LongCondition()とShortCondition()の仮想メソッドを自分のメソッドでオーバーライドすることです。 ロシア語の書籍『ベストトレーダーの戦略』では、多くのトレーディング戦略が考察されていますが、ここではRSIやストキャスティクス、CCI、MFIなどのオシレーターに裏付けられた反転ローソク足パターンに焦点を当てていきます。 最も良い方法は、ローソク足パターンをチェックするために、CExpertSignalから派生した別のクラスを作成することです。ローソク足パターンによって生成されたトレードシグナルを確認するには、CCandlePatternから派生したクラスを作成し、必要な機能(例えば、オシレーターによる確認)を追加するだけです。 1. 「3つの黒いカラス」と「3つの白い兵士」の反転ローソク足パターン 1.1. 3つの黒いカラス これは、現在の上昇トレンドの反転を予測するために使われるベアリッシュなローソク足パターンです。このパターンは、前日の終値よりも低い位置で終了した、連続した3本の長い実体のローソク足から構成されています。 Fig. 1. 3つの黒いカラスのローソク足パターン 「3つの黒いカラス」パターンの認識は、CCandlePatternクラスのCheckPatternThreeBlackCrowsメソッドで実装されています: //+------------------------------------------------------------------+ //| 3つの黒いカラスのローソク足パターンの形成をチェックします | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() &nbsp;&nbsp;{ //--- 3つの黒いカラス &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; // (長い黒) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)MidPoint(2))) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;return(true); //--- &nbsp;&nbsp; return(false); &nbsp;&nbsp;} CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS)メソッドは「3つの白い兵士」ローソク足パターンの形成をチェックするために使用されます。 2. RSIインジケーターで確認されたトレードシグナル ロングまたはショートポジションを開くためのトレーディングシグナルは、RSIインジケーターによって確認される必要があります。RSIの値は、ロングポジションの場合は40未満、ショートポジションの場合は60を超える必要があります。 開いているポジションのクローズは、RSIの値に依存します。これには2つのケースがあります: RSIが反対のクリティカルレベル(ロングポジションの場合は70、ショートポジションの場合は30)に達した場合 逆シグナルが確認されない場合(RSIが次のレベル30(ロングポジション)または70(ショートポジション)に達した場合) Fig. 3. 3つの黒いカラスのパターン、ストキャスティクスインジケーターによって確認 int CML_RSI::LongCondition() - ロングポジションを開く条件をチェックします(結果は80)、ショートポジションをクローズします(結果は40); int CML_RSI::ShortCondition() - ショートポジションを開く条件をチェックします(結果は80)、ロングポジションをクローズします(結果は40)。 2.1. ロングポジションを開く/ショートポジションをクローズする 「3つの白い兵士」パターンの形成は、RSIインジケーターによって確認される必要があります:RSI(1)&lt;40(最後の完了したバーのRSIの値は40未満である必要があります)。 ショートポジションは、RSIインジケーターがクリティカルレベル70または30を上回った場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場へのエントリー(ロングポジションを開く、結果=80) | //| 2) 市場からのエグジット(ショートポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::LongCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- ロングポジションを開く条件のチェック //--- 「3つの白い兵士」パターンの形成とRSI&lt;30 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) &amp;&amp; (RSI(1)&lt;40)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- ショートポジションをクローズする条件のチェック //--- オーバーボート/オーバーソールドレベルのシグナルラインクロス(上方向30、上方向70) &nbsp;&nbsp;if(((RSI(1)&gt;30) &amp;&amp; (RSI(2)&lt;30)) || ((RSI(1)&gt;70) &amp;&amp; (RSI(2)&lt;70))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.2. ショートポジションを開く/ロングポジションをクローズする 「3つの黒いカラス」パターンの形成は、RSIインジケーターによって確認される必要があります:RSI(1)&gt;60(最後の完了したバーのRSIの値は60より大きい必要があります)。 ロングポジションは、RSIインジケーターがクリティカルレベル70または30を下回った場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェックします | //| 1) 市場へのエントリー(ショートポジションを開く、結果=80) | //| 2) 市場からのエグジット(ロングポジションをクローズ、結果=40) | //+------------------------------------------------------------------+ int CBC_WS_RSI::ShortCondition() &nbsp;&nbsp;{ &nbsp;&nbsp; int result=0; //--- idxはエキスパートアドバイザーの動作モードを決定するために使用できます //--- idx=0 - この場合、EAは各ティックでトレード条件をチェックします //--- idx=1 - この場合、EAはニュースバーでのみトレード条件をチェックします &nbsp;&nbsp;int idx&nbsp;&nbsp; =StartIndex(); //--- ショートポジションを開く条件のチェック //--- 「3つの黒いカラス」パターンの形成とRSI&gt;60 &nbsp;&nbsp;if(CheckCandlestickPattern(CANDLE_PATTERN_THREE_BLACK_CROWS) &amp;&amp; (RSI(1)&gt;60)) &nbsp;&nbsp;&nbsp;&nbsp; result=80; //--- ロングポジションをクローズする条件のチェック //--- オーバーボート/オーバーソールドレベルのシグナルラインクロス(下方向70、下方向30) &nbsp;&nbsp; if(((RSI(1)&lt;70) &amp;&amp; (RSI(2)&gt;70)) || ((RSI(1)&lt;30) &amp;&amp; (RSI(2)&gt;30))) &nbsp;&nbsp;&nbsp;&nbsp; result=40; //--- 結果を返す &nbsp;&nbsp; return(result); &nbsp;&nbsp;} 2.3. MQL5ウィザードを使ったエキスパートアドバイザーの作成 CML_RSIクラスは標準ライブラリのクラスに含まれていないため、使用するにはacml_rsi.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、candlepatterns.mqhファイルも同様に保存してください。MQL5ウィザードで使用するには、MetaEditorを再起動する必要があります。 エキスパートアドバイザーを作成するには、MQL5ウィザードを立ち上げます: Fig. 4. MQL5ウィザードを使ったエキスパートアドバイザーの作成 エキスパートアドバイザーの名前を指定しましょう: Fig. 5. エキスパートアドバイザーの一般プロパティ 次に、使用するトレードシグナルのモジュールを選択します。 Fig. 6. エキスパートアドバイザーのシグナルプロパティ この場合、トレードシグナルのモジュールは1つだけ使用します。「3つの黒いカラス/3つの白い兵士」に基づくトレーディングシグナルのモジュールを追加します: Fig. 7. エキスパートアドバイザーのシグナルプロパティ トレードシグナルのモジュールが追加されました: Fig. 8. エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します: Fig. 9. エキスパートアドバイザーのマネーマネジメントプロパティ マネーマネジメントのプロパティに関しては、「固定取引量でのトレーディング」を使用します: Fig. 10. エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すと、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABC_WS_RSI.mq5に保存され、terminal_data_folder\MQL5\Experts\に保存されます。 生成されたエキスパートアドバイザーのデフォルトの入力パラメータ: //--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =10;&nbsp;&nbsp;&nbsp;&nbsp; // 開くためのシグナルしきい値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=10;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのためのシグナルしきい値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行するための価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp;&nbsp; // ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =50.0;&nbsp; // テイクプロフィットレベル(ポイント単位) これを次のように置き換える必要があります: //--- メインシグナルの入力 input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdOpen&nbsp;&nbsp; =40;&nbsp;&nbsp;&nbsp;&nbsp; // 開くためのシグナルしきい値 [0...100] input int&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;Signal_ThresholdClose&nbsp;&nbsp;=20;&nbsp;&nbsp;&nbsp;&nbsp; // クローズのためのシグナルしきい値 [0...100] input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_PriceLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;=0.0;&nbsp;&nbsp;&nbsp; // 取引を実行するための価格レベル input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_StopLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0;&nbsp;&nbsp;&nbsp;&nbsp;// ストップロスレベル(ポイント単位) input double&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Signal_TakeLevel&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; =0.0&nbsp;&nbsp;&nbsp;&nbsp;// テイクプロフィットレベル(ポイント単位) 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、テスト期間:2010.01.01-2011.02.02、PeriodRSI=37、MA_period=51)。 エキスパートアドバイザーの作成時に固定ボリューム(固定ロットでのトレーディング、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリング使用せず)。 Fig. 11. 3つの黒いカラス/3つの白い兵士 + RSIに基づくエキスパートアドバイザーのテスト結果 最良の入力パラメータのセットは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。 MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_abc_ws_rsi.mq5に添付されています。

2011.02.18
MQL5ウィザードで作成する「3本の黒いカラス/3本の白い兵士」トレードシグナルとMFIの活用法
MetaTrader5
MQL5ウィザードで作成する「3本の黒いカラス/3本の白い兵士」トレードシグナルとMFIの活用法

皆さん、こんにちは!今日は、MQL5ウィザードを使って、トレードシグナルを簡単に作成する方法をご紹介します。特に「3本の黒いカラス」や「3本の白い兵士」といった逆転のローソク足パターンに基づいたシグナルを、MFI(マーケットファシリテーションインデックス)で確認する方法です。このウィザードを使うと、MetaTrader 5のクライアント端末に同梱されている標準ライブラリを活用して、すぐに使えるエキスパートアドバイザー(EA)を作成できます。トレードアイデアを素早くチェックできるので、自分のトレーディングシグナルクラスを作成するだけでOKです。詳細については、MQL5ウィザードでのエキスパートアドバイザーの作成を参照してください。このシグナルクラスは、CExpertSignalから派生し、LongCondition()とShortCondition()という仮想メソッドをオーバーライドする必要があります。ロシア語の本、「ベストトレーダーの戦略」では、多くのトレーディング戦略が考察されていますが、今回は逆転のローソク足パターンに焦点を当て、ストキャスティクス、CCI、MFI、RSIのオシレーターによって確認されたパターンを探ります。最も効果的なのは、ローソク足パターンの形成を確認するために、CExpertSignalから派生した別のクラスを作成することです。ローソク足パターンによって生成されたトレードシグナルを確認するためには、CCandlePatternから派生したクラスを作成し、必要な機能(例えば、オシレーターによる確認)を追加するだけです。1.「3本の黒いカラス」と「3本の白い兵士」の逆転ローソク足パターン1.1. 3本の黒いカラスこのベアリッシュなローソク足パターンは、現在の上昇トレンドの反転を予測するために使用されます。このパターンは、3本の連続した長いボディのローソク足で構成されており、各セッションのオープンが前日のボディ内で発生し、前日よりも低い位置でクローズします。Fig. 1. '3本の黒いカラス' ローソク足パターン「3本の黒いカラス」パターンの認識は、CCandlePatternクラスのCheckPatternThreeBlackCrowsメソッドで実装されています://+------------------------------------------------------------------+ //| '3本の黒いカラス' ローソク足パターンの形成をチェックします&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; | //+------------------------------------------------------------------+ bool CCandlePattern::CheckPatternThreeBlackCrows() &nbsp;&nbsp;{ //--- 3本の黒いカラス &nbsp;&nbsp; if((Open(3)-Close(3)&gt;AvgBody(1)) &amp;&amp; // (長い黒) &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(2)-Close(2)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (Open(1)-Close(1)&gt;AvgBody(1)) &amp;&amp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (MidPoint(2)

2011.02.18
MQL5ウィザードを使った3つの黒いカラス/3つの白い兵士パターンのトレードシグナル
MetaTrader5
MQL5ウィザードを使った3つの黒いカラス/3つの白い兵士パターンのトレードシグナル

MetaTrader 5のMQL5ウィザードを使うことで、トレードシグナルを簡単に作成できるエキスパートアドバイザー(EA)を生成することができます。このツールは、クライアントターミナルに付属するスタンダードライブラリクラスを基にしたEAを作成することを可能にします(詳細についてはこちらを参照してください)。自身のトレードアイデアをすぐにチェックするために、自作のトレードシグナルクラスを作成するだけで済みます。このクラスの構造やサンプルについては、記事MQL5ウィザード:トレードシグナルモジュールの作成方法で確認できます。 基本的なアイデアは、トレードシグナルのクラスがCExpertSignalから派生し、次に、自分自身のメソッドを使ってLongCondition()とShortCondition()の仮想メソッドをオーバーライドする必要があるということです。 ロシア語の書籍「最高のトレーダーの戦略」では、多くのトレーディング戦略が考察されていますが、ここでは、ストキャスティクス、CCI、MFI、RSIなどのオシレーターで確認されたリバーサルキャンドルパターンに焦点を当てます。 最適な方法は、キャンドルパターンの形成をチェックするために、CExpertSignalから派生した別のクラスを作成することです。キャンドルパターンによって生成されたトレードシグナルの確認には、CCandlePatternから派生したクラスを作成し、必要な機能(たとえば、オシレーターによる確認)を追加するだけで済みます。 ここでは、CCIインジケーターによって確認された「3つの黒いカラス/3つの白い兵士」というリバーサルキャンドルパターンに基づくシグナルを考察します。トレードシグナルモジュールはCCandlePatternクラスに基づいており、キャンドルパターンを用いたトレードシグナルの作成に関する簡単な例です。 1. 「3つの黒いカラス」と「3つの白い兵士」リバーサルキャンドルパターン 1.1. 3つの黒いカラス これは、現在の上昇トレンドの反転を予測するために使用されるベアリッシュなキャンドルパターンです。このパターンは、前の日よりも低い位置でクローズした3本の連続したロングボディのキャンドルから成り、各セッションのオープンは前のキャンドルのボディ内で行われます。 図1: 「3つの黒いカラス」キャンドルパターン 「3つの黒いカラス」パターンの認識は、CCandlePatternクラスのCheckPatternThreeBlackCrowsメソッドに実装されています。 //+------------------------------------------------------------------+//| "3つの黒いカラス"キャンドルパターンの形成をチェックする |//+------------------------------------------------------------------+bool CCandlePattern::CheckPatternThreeBlackCrows(){ //--- 3つの黒いカラス if((Open(3)-Close(3)>AvgBody(1)) && (Open(2)-Close(2)>AvgBody(1)) && (Open(1)-Close(1)>AvgBody(1)) && (MidPoint(2)AvgBody(1)) && (Close(1)-Open(1)>AvgBody(1)) && (MidPoint(2)>MidPoint(3)) && (MidPoint(1)>MidPoint(2))) return(true); //--- return(false);} CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS)メソッドは、「3つの白い兵士」キャンドルパターンの形成をチェックするために使用されます。 2. CCIインジケーターによって確認されたトレードシグナル ロングまたはショートポジションを開くためのトレーディングシグナルは、CCIインジケーターによって確認される必要があります。CCIの値は、クリティカルレベル(ロングポジションの場合は-50、ショートポジションの場合は50)を超える必要があります。 オープンポジションのクローズは、CCIの値に依存します。これは2つのケースで行われます: CCIラインが対になるクリティカルレベル(ロングポジションの場合は80、ショートポジションの場合は-80)に達した場合 逆シグナルが確認されない場合(CCIが次のレベルに達する際:ロングポジションの場合は-80、ショートポジションの場合は80) 図3: CCIインジケーターによって確認された「3つの黒いカラス」パターン int CBC_WS_CCI::LongCondition() - ロングポジションを開く条件をチェックし(戻り値は80)、ショートポジションをクローズする条件をチェックします(戻り値は40); int CBC_WS_CCI::ShortCondition() - ショートポジションを開く条件をチェックし(戻り値は80)、ロングポジションをクローズする条件をチェックします(戻り値は40)。 2.1. ロングポジションを開く/ショートポジションをクローズする 「3つの黒いカラス」パターンの形成は、CCIインジケーターによって確認される必要があります:CCI(1)50)) result=80; //--- ロングポジションをクローズする条件をチェック //--- シグナルラインが過剰買い/過剰売りレベルを越える(下向き-80、下向き80) if(((CCI(1)80)) || ((CCI(1)-80))) result=40; //--- 結果を返す return(result);} 2.3. MQL5ウィザードを使用してエキスパートアドバイザーを作成する CBC_WS_CCIクラスはスタンダードライブラリクラスに含まれていないため、使用するにはacbc_ws_cci.mqhファイルをダウンロードし、client_terminal_data\folder\MQL5\Include\Expert\Signal\MySignalsに保存する必要があります。同様に、candlepatterns.mqhファイルも保存してください。MetaEditorを再起動後、MQL5ウィザードで使用できます。 エキスパートアドバイザーを作成するには、MQL5ウィザードを起動します: 図4: MQL5ウィザードを使用してエキスパートアドバイザーを作成する エキスパートアドバイザーの名前を指定します: 図5: エキスパートアドバイザーの一般的なプロパティ 次に、使用するトレードシグナルのモジュールを選択します。 図6: エキスパートアドバイザーのシグナルプロパティ この場合、1つのトレードシグナルモジュールのみを使用します。 「CCIによって確認された3つの黒いカラス/3つの白い兵士に基づくシグナル」トレードシグナルモジュールを追加します: 図7: エキスパートアドバイザーのシグナルプロパティ トレードシグナルモジュールが追加されました: 図8: エキスパートアドバイザーのシグナルプロパティ 任意のトレーリングプロパティを選択できますが、「トレーリングストップは使用しない」を選択します: 図9: エキスパートアドバイザーのトレーリングプロパティ マネーマネジメントプロパティに関しては、「固定取引量での取引」を使用します: 図10: エキスパートアドバイザーのマネーマネジメントプロパティ 「完了」ボタンを押すことで、生成されたエキスパートアドバイザーのコードが得られ、Expert_ABC_WS_CCI.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の入力パラメータは、ポジションの開閉のためのしきい値レベルを指定することを可能にします。 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、テスト期間:2010.01.01-2011.03.16、PeriodCCI=37、MA_period=13)で考察します。 エキスパートアドバイザーの作成にあたって、固定ボリューム(固定ロットでの取引、0.1)を使用し、トレーリングストップアルゴリズムは使用していません(トレーリング未使用)。 図11: 3つの黒いカラス/3つの白い兵士 + CCIに基づくエキスパートアドバイザーのテスト結果 最適な入力パラメータのセットは、MetaTrader 5クライアントターミナルのストラテジーテスターを使用して見つけることができます。 MQL5ウィザードで作成されたエキスパートアドバイザーのコードは、expert_abc_ws_cci.mq5に添付されています。

2011.02.18
MQL5ウィザードで作成する「3つの黒いカラス」と「3つの白い兵士」に基づくトレードシグナル
MetaTrader5
MQL5ウィザードで作成する「3つの黒いカラス」と「3つの白い兵士」に基づくトレードシグナル

皆さん、こんにちは!今日は、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)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)&lt;30(最終バーのストキャスティクスシグナルラインの値が30未満である必要があります)。 ショートポジションは、ストキャスティクスシグナルラインが20または80レベルを上抜けた場合にクローズする必要があります。 //+------------------------------------------------------------------+ //| 市場へのエントリーとエグジットの条件をチェック | //+------------------------------------------------------------------+ int CBC_WS_Stoch::LongCondition() { int result=0; if (CheckCandlestickPattern(CANDLE_PATTERN_THREE_WHITE_SOLDIERS) && (StochSignal(1)20) && (StochSignal(2)80) && (StochSignal(2)70)) result=80; if ((((StochSignal(1)80)) || ((StochSignal(1)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に添付されています。

2011.02.16
最初 前へ 56 57 58 59 60 61 62 63 64 次へ 最後