知っておくべきMQL5ウィザードのテクニック(第73回):一目均衡表とADX-Wilderのパターンの利用
はじめに
本記事では、一目均衡表とADXオシレーターを、サポート・レジスタンス(S/R)レベルとトレンド判定の組み合わせとして使用します。一目均衡表は非常に多機能で柔軟性があります。サポートやレジスタンスの他にもさまざまな情報を提供できますが、本記事ではS/Rレベルのみに焦点を当てます。インジケーターの組み合わせは、特に補完的な場合、エキスパートアドバイザー(EA)のエントリーシグナルをより精密かつ正確にする可能性があります。本記事では、まずこの組み合わせの10個のシグナルパターンを確認します。これらのパターンはそれぞれインデックスを持ち、1つずつテストします。ルールは以下の通りです。
インデックスは0から9まで割り当てており、EAが利用するマップ値を計算しやすくしています。たとえばインデックスが1の場合、パラメータPatternsUsedを2¹=2に設定します。インデックスが4の場合は2⁴=16です。同様に続きます。パターンは10個しか存在しないため、このパラメータに意味を持って設定できる最大値は1023です。0〜1023の値のうち、2の累乗ではない数値は複数のパターンを組み合わせたものを表します。
前回の記事では、複数シグナルを用いた学習や最適化が無意味である理由を説明しました。テスト結果が良好に見えても、複数のシグナルが同時に働くと、互いに取引を打ち消してしまい、限定されたテスト期間内で利益を最大化するような結果になることが多いためです。より長期のテスト期間で試すことも可能ですが、本記事では1年のテスト期間を対象としているため、ここでは適用できません。
一目均衡表
定義上、一目均衡表は、トレンド方向、モメンタム、S/Rを総合的に評価する多機能指標です。その名の通り「一目でわかるシステム」として、価格の全体像を把握することを目的としています。主にトレンドフォロー戦略で使用され、5つのバッファで構成されています。転換線、基準線、先行スパンA、先行スパンB、そして遅行スパンです。加えて、先行スパンAとBで構成される「雲」も参照されます。雲はS/Rマーカーとして使用できるほか、その厚みによってトレンドの強さを測る指標としても利用できます。
5つのバッファを計算するために必要な入力パラメータは3つで、通常は9、26、52に設定されます。これらの期間は市場に応じて調整可能ですが、基本的には変更せず、システムの他の属性を調整する方が望ましいです。このインジケーターからは多くのシグナルを抽出できます。例えば、転換線と基準線のクロスや、遅行スパンによるトレンド確認などがあります。一目均衡表は柔軟性が高く、株式、FX、暗号資産など、さまざまな資産クラスや時間軸に適用可能です。
それでは、転換線から始めて、これら5つのバッファの基礎となる公式を見てみましょう。次のように決定されます。
= (Highest High + Lowest Low) / 2
ここで
- Highest Highは、直近9期間における最高値です。
- Lowest Lowは、同じく直近9期間における最安値です。
この線は短期トレンドのインジケーターとして使用され、価格変動に敏感に反応するため、短期的な市場の方向性を把握するのに適しています。基準線も同様に設定されています。
= (Highest High + Lowest Low) / 2
ここで
- Highest Highは、直近26期間における最高値です。
- Lowest Lowは、直近26期間における最安値です。
基準線は中期トレンドのバロメータとして利用でき、S/Rとしても機能します。次は先行スパンAです。このバッファの計算式は次のとおりです。
= (転換線 + 基準線) / 2
ここで
- 転換線と基準線は、それぞれ上記で示した転換線および基準線の値です。
このバッファは、雲の一方の端を形成するもので、一目均衡表において重要なS/R機能を担います。次は、先行スパンBです。これも転換線と似ていますが、使用する期間の長さが異なります。
= (Highest High + Lowest Low) / 2
ここで
- Highest Highは、直近52期間における最高値です。
- Lowest Lowは、直近52期間における最安値です。
このバッファは、先行スパンAを補完し、雲のもう一方の端を形成します。より長い計算期間を使用するため、長期的なS/Rの役割も果たします。最後に、最後のバッファである遅行スパンは次のように定義されます。
= 現在期間の終値
ここで
- 現在期間の終値を26期間前にプロットします。
遅行スパンの目的は、過去の価格と現在の動きを比較し、トレンドを確認することです。また、すでに上で述べたように、雲にも注目すべきです。雲は通常、先行スパンAと先行スパンBの間の領域として定義されます。先行スパンAが先行スパンBよりも高い場合は強気の雲となり、逆にA < Bの場合は弱気の雲となります。雲はトレンドの強さやS/Rレベルを視覚的に把握するのに役立ちます。
ADX-Wilder
本記事で取り上げる2つ目の指標は、既存のトレンドの強さを測定するものです。トレンドの方向ではなく、強さを測定します。ただし、この指標にはメインバッファ以外に2つの補助バッファがあり、それらを使用することで強気および弱気のモメンタムを評価することも可能です。ADXのメインバッファの値は通常0から100の範囲にありますが、25を上回ることはまれです。 そのため、25を超えた場合は強いトレンドの存在を示すサインとして解釈されます。逆に、20未満の場合はトレンドが弱いことを示します。ADXは遅行性のインジケーターであり、一般的に14期間を使用して計算されます。さまざまな資産クラスに柔軟に適用できる指標であり、トレンド方向を示唆する+DI / -DIのクロスオーバーからセカンダリシグナルを生成し、ADXのメインバッファがトレンド強度を確認するという使い方も可能です。
ADX Wilderは最終的に3つの主要バッファを出力しますが、内部的には最大で6種類の異なるバッファを使用します。それは、プラス方向(+DM)の動きと指標、マイナス方向(-DM)の動きと指標、真の値幅(True Range)、そしてADXメインバッファです。それぞれの式を確認してみましょう。正の方向性変動:
= Current High - Previous High
ここで
- Previous LowがCurrent Lowよりも大きい必要があります。この条件を満たさない場合、その値は0になります。
このバッファは上昇方向の価格変動を追跡します。次のバッファは、負の方向性変動で、次の式で表されます。
= Previous Low - Current Low
ここで
- Current HighがPrevious Highを上回る場合にのみ有効です。それ以外の場合、その値は0になります。
このバッファは下降方向の価格変動を測定します。方向の動きが定義されたので、「真の値幅」に移ります。これは次の簡単な式で表されます。
= Max[(Current High - Current Low), |Current High - Previous Close|, |Current Low - Previous Close|]
ここで
- Maxは、上記3つの差分の中で最大の値を意味します。
「真の値幅」の主な目的は、価格のボラティリティを測定することです。方向の動きと真の値幅が定義されたので、使用されるインジケーターバッファについて説明します。最初に定義するのはプラス方向の動きのインジケーターです。これは以下の式で表されます。
= (Smoothed +DM / Smoothed TR) × 100
ここで
- Smoothed +DMは、先ほど定義したプラス方向の動きの指標(+DM)の指数移動平均(EMA)です。
- Smoothed TRは、真の値幅の指数移動平均です。
+DMの目的は、強気(上昇)方向の強さを示すことです。同様に、マイナス方向の動きの指標(-DM)もあります。これは以下の式で定義されます。
= (Smoothed -DM / Smoothed TR) × 100
ここで
- Smoothed -DMは、先ほど定義したマイナス方向の動きの指標(-DM)のEMAです。
- Smoothed TRは、同じく真の値幅の指数移動平均です。
+DMおよび-DMの両方で使用される期間は一般的に14です。-DMの目的は、弱気(下降)方向の強さを測定することです。これら2つのインジケーターバッファを定義した上で、次にADXのメインバッファを定義します。その計算式は以下の通りです。
= smoothed[(|+DI - -DI| / (+DI + -DI)) × 100]
ここで
- Smoothedとは、この式の出力値を14期間の指数移動平均で平滑化することを指します。
- +DIは、先ほど定義した強気指標のバッファであり、+DMそのものではありません。
- -DIは、同様に弱気指標のバッファを指します。
- 平滑化される前の値は「DX」と呼ばれます。
平滑化されたDX、すなわちADXの目的は、トレンドの強さを定量的に評価することです。これら2つのインジケーターを導入した上で、本記事では10種類のパターンを検証していきます。すべてのテストは例年通り2023年を対象期間とし、2024年をウォークフォワードテスト(検証期間)として使用します。ただし、今回は通常使用している4時間足ではなく30分足を採用します。これは、テスト期間中に一目均衡表が十分なシグナルを発しないためです。テスト対象の通貨ペアはGBP/USDです。
価格が先行スパンAを上抜ける際のADXの確認(Pattern_0)
Pattern_0は、常に最初に検討するパターンです。命名形式としては一貫して「pattern_x」を使用しており、ここでのxはパターンのインデックスを表します。これは単なる出現順序ではありません。冒頭で述べたように、本稿ではこのインデックス指定を重視しています。なぜなら、テストを行う際に入力パラメータ値を設定し、特定のパターンのみを個別に検証できるようにするためです。Pattern_0の強気シグナルは、価格が先行スパンAを上抜けたときに発生します。これは、価格が雲を上抜けてブレイクアウトしたことを示す重要なシグナルです。ただし、このブレイクアウトはADX値が少なくとも25以上の「強いトレンド確認」を伴うことが望ましいです。これをMQL5で次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < Ichimoku_SenkouSpanA(X() + 1) && Close(X()) > Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Ichimoku_SenkouSpanA(X() + 1) && Close(X()) < Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0) { return(true); } return(false); }
弱気パターンは、価格が先行スパンAを下抜けて、その下でクローズしたときに定義されます。この動きは、価格が雲を下方にブレイクダウンしたことを示し、強い下降トレンドの発生を示唆します。一目均衡表によるクラウドブレイクと、ADXによるトレンド強度の確認を組み合わせることで、このパターンは非常に信頼性の高いシグナルとなります。このシグナルは、トレンド相場で最も効果的に機能することが多く、値動きが不規則な相場では適していません。2023年を対象とした初期テストに続き、2023年から2024年までの2年間にわたるテストを実施した結果、次のようなレポートが得られました。
2023年に実施した初期テストでは、結果はやや乱高下の激しいものとなりましたが、わずかに利益を上げることができました。興味深いことに、フォワードテストでも類似した資産曲線の形状が確認されましたが、こちらも最終的にはプラスのパフォーマンスを示しています。このパターンに関するベストプラクティス指針としては、エントリー前に上位時間足でのトレンド方向を確認し、整合性を取ることが推奨されます。これにより、ノイズの多いシグナルを大幅に減らすことができます。また、ADXの値が少なくとも25以上であることは、弱いトレンドシグナルをフィルタリングするための必須条件です。ストップロスは、買いトレードの場合は雲の下側、売りトレードの場合は雲の上側に設定することができます。また、フェイクブレイクアウトを監視することが重要です。
転換線/基準線クロスオーバーとADXによる確認(Pattern_1)
次のパターンは、2つの移動平均線のクロスオーバーとADXによる確認に基づいています。強気シグナルの場合、転換線が基準線を下から上にクロスして終値が上に位置すると、短期的なモメンタムが買い方向へ変化したことを示します。ADXは20以上である必要があります。MQL5でのチェック関数は以下のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_TenkanSen(X() + 1) < Ichimoku_KijunSen(X() + 1) && Ichimoku_TenkanSen(X()) > Ichimoku_KijunSen(X()) && ADX(X()) >= 20.0) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_TenkanSen(X() + 1) > Ichimoku_KijunSen(X() + 1) && Ichimoku_TenkanSen(X()) < Ichimoku_KijunSen(X()) && ADX(X()) >= 20.0) { return(true); } return(false); }
転換線が基準線を上から下へ抜けて終値が基準線を下回るとき、これは弱気なモメンタムへの転換を示すシグナルとなります。これは本質的に、一種の早期トレンド転換のシグナルであり、確認のためにADXと併用することで精度を補強できます。適した相場環境は、トレンドの発生局面やフラクタルポイントです。一方で、レンジ相場では信頼性が低くなる傾向があります。本パターンのみを用いたテストの結果、以下のレポートが得られました。

本パターンは明らかにフォワードウォークに課題がありました。これは、利確目標を狭く設定していたことや、ストップロスを設定していなかったことが原因である可能性があります。これらのパラメータは、読者自身で調整することで異なる取引条件に対応可能です。また、本パターンを使用する際は、上位時間軸のトレンド方向に沿ったエントリーが推奨されます。ADXの閾値を20に設定しているのは、弱いクロスオーバーを除外するためです。 ストップロスは、買いの場合は基準線の下、売りの場合は基準線の上に置くことが適切です。さらに、出来高系インジケーターと組み合わせることで確認精度を高めることができます。
先行スパンA/BクロスオーバーとADXによる確認(Pattern_2)
パターン2は、一目均衡表の雲の切り替わり、またはクロスオーバーに基づいたパターンです。強気のシグナルは、先行スパンAが先行スパンBを上抜けし、強気の雲形成が発生した場合です。この切り替わりが確認されるには、ADXが最低でも25であることが必要です。このパターンは、MQL5では以下のように実装されます。
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_SenkouSpanA(X() + 1) < Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_SenkouSpanA(X() + 1) > Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) < Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0) { return(true); } return(false); }
弱気のシグナルは、先行スパンAが先行スパンBを上から下にクロスして終値が下回る場合です。これは弱気の雲への転換を示します。このシグナルは長期的なトレンド変化の指標としても利用可能で、バックアップ的なトレンド確認としても機能します。トレンド相場におけるスイングトレーダーに向いています。テスト結果は以下の通りです。
Pattern_2は、フォワードウォークにおいて良好な結果を示しています。ただし、テスト期間は1年間と限定的であるため、ここで提示したアイデアを実践に移す前に、読者自身での独立した検証が必要です。Pattern_2では、上位時間足での雲クロス確認が追加のサポートとなります。ADXの閾値25は、弱いシグナルを除外するために重要です。ストップロスの設定は、買いの場合は雲の下、売りの場合は雲の上に置くことが推奨されます。また、雲が薄い場合は、このパターンの使用は避けるべきです。
価格の雲での反発/拒否およびADXとDIによる確認(Pattern_3)
Pattern_3は、価格が一目均衡表の雲付近でどのように反応するかに着目したパターンです。強気のシグナルは、価格が雲の上部(常に先行スパンA)で反発し、かつADXが25以上、かつプラスの方向性指標(+DI)がマイナスの方向性指標(-DI)より大きい場合です。これをMQL5で次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 2) > Close(X() + 1) && Close(X() + 1) < Close(X()) && Close(X() + 2) > Ichimoku_SenkouSpanA(X() + 2) && Close(X()) > Ichimoku_SenkouSpanA(X()) && Close(X() + 1) <= Ichimoku_SenkouSpanA(X() + 1) && ADX_Plus(X()) > ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 2) < Close(X() + 1) && Close(X() + 1) > Close(X()) && Close(X() + 2) < Ichimoku_SenkouSpanA(X() + 2) && Close(X()) < Ichimoku_SenkouSpanA(X()) && Close(X() + 1) >= Ichimoku_SenkouSpanA(X() + 1) && ADX_Plus(X()) < ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
弱気のシグナルは、価格が雲の下部(先行スパンA)で反発を拒否するU字型の動きを示す場合です。この際、ADXは25以上であり、マイナスの方向性指標(-DI)がプラスの方向性指標(+DI)より上回る必要があります。Pattern_3は、強力なS/Rシグナルであり、トレンド方向の確認も可能です。特に、レンジ相場からトレンドへの転換局面で有効ですが、発見が難しいため、シグナル確認前には複数のフィルタチェックを実施しています。このパターンのテスト結果は以下の通りです。

Pattern_3は、Pattern_2と同様に、フォワードテストでも一定の前向きな結果を示しました。Pattern_3を活用する際は、価格の反発や拒否をピンバーなどのローソク足パターンで確認することが望ましいです。プラス/マイナスの方向性指標(+DI/-DI)の相対的トレンドは、価格のトレンド方向と一致している必要があります。ストップロスは、買いポジションの場合は先行スパンBの下、売りポジションの場合は先行スパンBの上に置くことが推奨されます。
遅行スパンと先行スパンAの比較、ADXによる確認(Pattern_4)
Pattern_4は、一目均衡表の5番目のバッファである遅行スパンを利用したパターンです。強気のシグナルは、遅行スパンが先行スパンAの上に位置している場合です。遅行スパンは前述の通り遅行性を持ち、通常26期間分遅れて表示されます。プログラマーの観点からは、組み込みの一目均衡表インジケーターの遅行バッファを参照する場合、この値を手動で26期間分シフトしないとNaNが返されることに注意が必要です。強気シグナルでは、遅行スパンが先行スパンAの上にあり、かつADXが25以上であることが条件となります。このパターンは、MQL5では以下のように実装されます。
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_4(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_ChinkouSpan(X() + 26) > Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_ChinkouSpan(X() + 26) < Ichimoku_SenkouSpanA(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
弱気のシグナルは、遅行スパンが先行スパンAの下に位置し、かつADXが25以上の場合です。この場合、先行スパンAは先行スパンBの下に位置します(強気シグナルではAがBの上にあります)。パターン4はトレンド強度の遅行確認シグナルであり、既存トレンドの確認に最適です。フォワードウォークテストの結果は、以下の通りです。

Pattern_4は、フォワードウォークにおいて明確に良好な結果を示しました。Pattern_3やPattern_2よりも安定している可能性があります。使用時には、エントリーシグナルとしてよりもトレンド確認として活用する方が適切です。また、雲の位置関係など他の一目均衡表シグナルと組み合わせることも可能です。ストップロスは、直近のスイングポイントを基準に設定することが推奨されます。Pattern_4に適した相場環境はトレンド相場であり、レンジやノイズの多い相場環境では使用を避けるべきです。下図は、チャート上における強気のPattern_4シグナルの例です。

転換線での価格反発/拒否およびADXとDIによる確認(Pattern_5)
次に紹介するパターンは、前述の雲での反発/拒否パターンに類似していますが、今回は転換線を基準にしたプライスアクションを利用します。強気のシグナルは、価格が転換線で反発し、かつADXが25以上、さらにプラスの方向性指標(+DI)がマイナスの方向性指標(-DI)より大きい場合です。MQL5では、これを次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 2) > Close(X() + 1) && Close(X() + 1) < Close(X()) && Close(X() + 2) > Ichimoku_TenkanSen(X() + 2) && Close(X()) > Ichimoku_TenkanSen(X()) && Close(X() + 1) <= Ichimoku_TenkanSen(X() + 1) && ADX_Plus(X()) > ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 2) < Close(X() + 1) && Close(X() + 1) > Close(X()) && Close(X() + 2) < Ichimoku_TenkanSen(X() + 2) && Close(X()) < Ichimoku_TenkanSen(X()) && Close(X() + 1) >= Ichimoku_TenkanSen(X() + 1) && ADX_Plus(X()) < ADX_Minus(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
弱気のシグナルは、価格が転換線で上値を拒否し、かつADXが25以上の場合です。この際、方向性指標では-DIが+DIより大きいことが条件となります。このシグナルは短期モメンタムの確認に役立ちます。特に、トレンド相場でのプルバック局面において有効です。フォワードウォークテストの結果は以下の通りです。

これまでテストしてきたパターンの中では、本パターンは明確に不発でした。フォワードテストでは全く機能しませんでした。改善の可能性としては、ローソク足パターンでシグナルを確認すること、方向性指数の閾値を追加してシグナル成立前にチェックすること、ストップロスを導入することなどが考えられます。ストップロスは、買いポジションの場合は転換線の下、売りポジションの場合は転換線の上に設定することができます。現状のテストではストップロスなしで検証されています。
基準線での価格クロスおよびADXとDIによる確認(Pattern_6)
次のパターン、パターン6は、価格が基準線をクロスする動きに着目したパターンです。強気のシグナルは、価格が基準線を下から上へクロスして終値が基準線を上回った場合に発生します。加えて、正の方向性指数が負の方向性指数より上回り、ADXが25以上であることが条件となります。MQL5では、これを次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < Ichimoku_KijunSen(X() + 1) && Close(X()) > Ichimoku_KijunSen(X()) && ADX_Plus(X()) > ADX_Minus(X()) && ADX(X()) >= 25.0) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Ichimoku_KijunSen(X() + 1) && Close(X()) < Ichimoku_KijunSen(X()) && ADX_Plus(X()) < ADX_Minus(X()) && ADX(X()) >= 25.0) { return(true); } return(false); }
弱気のシグナルは、価格が基準線を上から下へクロスして終値が下回った場合に発生します。このとき、負の方向性指数が正の方向性指数より上回り、ADXが25以上である必要があります。Pattern_6は中期的なトレンドシグナルであり、方向性の確認も組み合わせて使用します。理想的な相場環境は、すでに確立されたトレンド局面です。Pattern_6をテストすると、次のレポートが生成されます。

フォワードテストの結果では、このパターンも前にレビューしたパターン同様、フォワードウォークでのパフォーマンスは苦戦しました。ただし、前回ほど顕著ではありません。改善策としては、上位時間足での雲の向きを確認した上でシグナルを利用することや、ADXの閾値および方向性指数の整合性に加え、ストップロスを買いポジションでは基準線の下、売りポジションでは基準線の上に置くことが考えられます。このパターンもトレンド相場での使用に適しており、レンジ相場では避けるべきです。
先行スパンBでの価格反発と拒否およびADXによる確認(Pattern_7)
Pattern_7は、先行スパンB付近での価格アクションに着目したパターンです。強気のシグナルは、価格が先行スパンBで反発し、ADXが20以上で上昇している場合に発生します。このとき、先行スパンAがBの上にあるため、この価格の反転は雲の内部で発生していることになります。MQL5では次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 7. \ //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_7(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 2) > Close(X() + 1) && Close(X() + 1) < Close(X()) && Close(X() + 2) > Ichimoku_SenkouSpanB(X() + 2) && Close(X()) > Ichimoku_SenkouSpanB(X()) && Close(X() + 1) <= Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 20.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 2) < Close(X() + 1) && Close(X() + 1) > Close(X()) && Close(X() + 2) < Ichimoku_SenkouSpanB(X() + 2) && Close(X()) < Ichimoku_SenkouSpanB(X()) && Close(X() + 1) >= Ichimoku_SenkouSpanB(X() + 1) && Ichimoku_SenkouSpanA(X()) < Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 20.0 ) { return(true); } return(false); }
弱気のシグナルは、価格が先行スパンBで上値を拒否し、ADXが20以上で上昇している場合に発生します。この場合も、先行スパンBがAの上に位置しているため、価格の反転は雲の内部で起こっています。このパターンはS/Rに基づく雲シグナルであり、トレンドの深いプルバック局面に適しています。すでに説明したシグナルと同様に、フォワードウォークをテストすると、次の結果が得られます。
Pattern_7は直近2つのパターンよりも良好なパフォーマンスを示し、1年間のテストおよび最適化後でも、フォワードウォークに耐えることができました。それでも改善の余地はあり、ローソク足パターンなどによる独立した方向性の確認を追加することが推奨されます。ストップロスの設定は厳格に行い、買いの場合は先行スパンBの下、売りの場合は上に置くことが適切です。また、雲が薄い場合やADXが低い値のときは、このパターンの使用を避けるべきです。
雲の上/下の価格とADXによる確認(Pattern_8)
最後から2番目のパターンは、価格の雲に対する位置をマクロ的に捉えるパターンです。強気のシグナルは、価格が雲の上にある場合に発生します。このとき、先行スパンAが先行スパンBを上回っており、ADXが25以上であることが条件です。このパターンは、MQL5では以下のように実装されます。
//+------------------------------------------------------------------+ //| Check for Pattern 8. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_8(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X() + 1) < Close(X()) && Close(X() + 1) > Ichimoku_SenkouSpanA(X() + 1) && Close(X()) > Ichimoku_SenkouSpanA(X()) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X() + 1) > Close(X()) && Close(X() + 1) < Ichimoku_SenkouSpanA(X() + 1) && Close(X()) < Ichimoku_SenkouSpanA(X()) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
弱気のシグナルは、価格が雲の下に位置し、先行スパンBが先行スパンAの上にある場合に発生します。ADXのメインバッファは強いトレンドを示しており、少なくとも25以上である必要があります。このパターンは、ADXで確認したシンプルなトレンドフォローシグナルであり、トレンド継続を狙う際に理想的です。このパターンをフォワードテストし、最適化を実行すると、次のレポートが得られます。
フォワードテストでは、Pattern_8はこれまでに紹介したシグナルパターンの中で最も優れた成績を示しました。フォワードウォークの結果は、テスト段階の結果を明確に上回っています。ただし、テストおよび学習期間は非常に限定的であるため、読者はこの点を考慮する必要があります。改善点としては、エントリー前に価格の実際のトレンド方向を価格デルタなどのパラメータで確認することが考えられます。また、ストップロスは、買いポジションでは雲の下、売りポジションでは雲の上に余裕を持って設定することが可能です。下図は、Pattern_8の強気シグナルの例を示しています。
遅行スパン対価格と雲の比較、ADXによる確認(Pattern_9)
最後のパターンでは、Pattern_4で扱った遅行スパンに再度注目し、これを雲と組み合わせます。強気のシグナルは、遅行スパンが価格および先行スパンAの上に位置している場合に発生します。ADXは25以上である必要があり、これにより強いトレンドを確認します。このパターンは、MQL5では以下のように実装されます。
//+------------------------------------------------------------------+ //| Check for Pattern 9. | //+------------------------------------------------------------------+ bool CSignalIchimoku_ADXWilder::IsPattern_9(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Ichimoku_ChinkouSpan(X() + 26) > Ichimoku_SenkouSpanA(X()) && //Ichimoku_ChinkouSpan(X() + 26) > Close(X()) && Ichimoku_SenkouSpanA(X()) > Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } else if(T == POSITION_TYPE_SELL && Ichimoku_ChinkouSpan(X() + 26) < Ichimoku_SenkouSpanA(X()) && //Ichimoku_ChinkouSpan(X() + 26) < Close(X()) && Ichimoku_SenkouSpanA(X()) < Ichimoku_SenkouSpanB(X()) && ADX(X()) >= 25.0 ) { return(true); } return(false); }
弱気のシグナルは、遅行スパンが価格および先行スパンAの下に位置し、ADXが25以上の場合に発生します。このやや遅行性のあるシグナルは、トレンド方向と強さを確認するために使われます。Pattern_9に最適な相場環境は、強くトレンドの出ている市場です。この最終パターンのテスト結果は次のとおりです。
フォワードテストの結果、このパターンは最終的には利益が出る局面もありましたが、Pattern_8やPattern_4などと比べるとやや苦戦する傾向があります。改善策としては、他の一目均衡表のパターンを使った二次的確認を追加することが考えられます。また、このシグナルを使用する場合は、必ず雲がトレード方向を支持しているかを確認することが重要です。ストップロスの設定は直近の価格変動に基づいて行い、このパターンはレンジ相場やノイズの多い相場には適していません。
結論
本記事では、一目均衡表とADX Wilderを組み合わせた新しいインジケーターのペアリングを紹介しました。限られた2年間のテスト期間では、このペアリングによりフォワードウォークで利益を上げる可能性のある7つのシグナルパターンが確認できました。「可能性のある」と表現しているのは、テスト期間が非常に短く、結果が限定的であるためです。本稿の趣旨はあくまで探索的なものであり、確定的な結論ではありません。次回は、フォワードウォークで苦戦した3つのシグナルパターンを対象に、機械学習がその成績改善に役立つかどうかを検証してみたいと思います。
| 名前 | 説明 |
|---|---|
| WZ-73.mq5 | ヘッダにインクルードファイルを示すウィザード組み立てEA |
| SignalWZ_73.mqh | MQL5ウィザードアセンブリで使用されるカスタムシグナルクラスファイル |
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/18723
警告: これらの資料についてのすべての権利はMetaQuotes Ltd.が保有しています。これらの資料の全部または一部の複製や再プリントは禁じられています。
この記事はサイトのユーザーによって執筆されたものであり、著者の個人的な見解を反映しています。MetaQuotes Ltdは、提示された情報の正確性や、記載されているソリューション、戦略、または推奨事項の使用によって生じたいかなる結果についても責任を負いません。
MQL5 Algo Forgeへの移行(第4回):バージョンとリリースの操作
MQL5での取引戦略の自動化(第22回):Envelopes Trend取引のためのZone Recoveryシステムの作成
初心者からエキスパートへ:MQL5を使用したアニメーションニュースヘッドライン(IV) - ローカルホストAIモデル市場インサイト
共和分株式による統計的裁定取引(第1回):エングル=グレンジャーおよびジョハンセンの共和分検定
- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索