English Deutsch
preview
知っておくべきMQL5ウィザードのテクニック(第67回):TRIXパターンとWilliams Percent Rangeの使用

知っておくべきMQL5ウィザードのテクニック(第67回):TRIXパターンとWilliams Percent Rangeの使用

MetaTrader 5トレーディング |
104 0
Stephen Njuki
Stephen Njuki

はじめに

この連載記事では、テクニカル指標を組み合わせて生成されるシグナルパターンを引き続き研究していきます。前回は、フラクタル適応移動平均とForce Indexオシレーターを組み合わせたケースを見てきました。今回の記事では、三重指数移動平均オシレーター(TRIX: Triple Exponential Moving Average Oscillator)と、もう1つのオシレーターであるウィリアムズパーセントレンジ(WPR: Williams Percent Range)を取り上げます。TRIXは移動平均オシレーターでありトレンドを示すインジケーターであるのに対し、ウィリアムズパーセントレンジはサポートおよびレジスタンス水準を補足する役割を果たします。

私たちは、これまでの記事と同様に、この2つのインジケーターを組み合わせることで生成される典型的な10種類のパターンを検討し、CHFJPYの4時間足を対象に2023年のデータで学習または最適化をおこないます。フォワードウォーク(テスト)は、この銘柄を用い2024年のデータで実施します。

TRIXの基本的な定義は、価格を三重指数移動平均によって平滑化するモメンタムオシレーターです。ノイズを除去またはフィルタリングすることでトレンドを特定するのに最も適しています。これは、三重に平滑化された移動平均の変化率を測定することで実現されます。トレンドの確認に加えて、ダイバージェンスのシグナルも提供します。TRIXは、指数移動平均(EMA)を3回適用し、その後にパーセンテージ変化を計算することで導出されます。その計算式は以下の通りです。

trix_form

ここで

  • EMA₁:期間Nで価格(例:終値)に対して最初に適用されるEMA
  • EMA₂:EMA₁に適用される2番目のEMA
  • EMA₃:EMA₁に適用される3番目のEMA
  • TriX Line:三重に平滑化されたEMAの変化率(モメンタムオシレーター)

TRIXの一般的な設定では、期間を15に設定することが多いです。私たちはテストにおいて3を使用しました。これは、1年間という小さなテストウィンドウに対して十分に感度が高いことが分かったためです。カスタムシグナルクラスのヘッダでは、定数パラメータ「__PERIOD」を使用してこの値を定義します。

#define __PERIOD 3
class CSignalTRX_WPR : public CExpertSignal
{
protected:
   CiTriX            m_trix;
   CiWPR             m_wpr;
   int               m_patterns_used;
   //--- adjusted parameters

   //--- "weights" of market models (0-100)
   int               m_pattern_0;      // model 0
   int               m_pattern_1;      // model 1

...


   int               m_pattern_9;      // model 9
   //
   //int               m_patterns_usage;   //

public:
   CSignalTRX_WPR(void);
   ~CSignalTRX_WPR(void);
   //--- methods of setting adjustable parameters
   //--- methods of adjusting "weights" of market models
   void              Pattern_0(int value)
   {  m_pattern_0 = value;
   }
   void              Pattern_1(int value)
   {  m_pattern_1 = value;
   }
   void              Pattern_2(int value)
   {  m_pattern_2 = value;
   }


...

   void              PatternsUsed(int value)
   {  m_patterns_used = value;
      PatternsUsage(value);
   }
   //--- method of verification of settings
   virtual bool      ValidationSettings(void);
   //--- method of creating the oscillator and timeseries
   virtual bool      InitIndicators(CIndicators *indicators);
   //--- methods of checking if the market models are formed
   virtual int       LongCondition(void) override;
   virtual int       ShortCondition(void) override;
   virtual double    Direction(void) override;

protected:
   //--- method of initialization of the oscillator
   bool              InitTRX_WPR(CIndicators *indicators);
   //--- methods of getting data
   double            TRX(int ind)
   {  //
      m_trix.Refresh(-1);
      return(m_trix.Main(ind));
   }
   double            TRX_MAX(int ind)
   {  //
      m_trix.Refresh(-1);
      return(m_trix.Main(m_trix.Maximum(0, ind, __PERIOD)));
   }
   double            TRX_MIN(int ind)
   {  //
      m_trix.Refresh(-1);
      return(m_trix.Main(m_trix.Minimum(0, ind, __PERIOD)));
   }
   double            WPR(int ind)
   {  //
      m_wpr.Refresh(-1);
      return(m_wpr.Main(ind));
   }
   double            Close(int ind)
   {  //
      m_close.Refresh(-1);
      return(m_close.GetData(ind));
   }
   double            High(int ind)
   {  //
      m_high.Refresh(-1);
      return(m_high.GetData(ind));
   }
   double            Low(int ind)
   {  //
      m_low.Refresh(-1);
      return(m_low.GetData(ind));
   }
   long              Volume(int ind)
   {  //
      m_tick_volume.Refresh(-1);
      return(m_tick_volume.GetData(ind));
   }
   int               X()
   {  //
      return(StartIndex());
   }
   //--- methods to check for patterns
   bool              IsPattern_0(ENUM_POSITION_TYPE T);
   bool              IsPattern_1(ENUM_POSITION_TYPE T);

...


   bool              IsPattern_9(ENUM_POSITION_TYPE T);
};

MQL5では、このインジケーターは組み込み関数として提供されているため、私たちの側で必要となるコーディングは最小限です。CiTRIXクラスから実装をおこないます。その解釈は位置や絶対値に依存します。正のTRIXは強気トレンド、すなわち価格の上昇傾向を示します。負のTRIXはその逆で、価格の下降傾向を示します。ゼロラインも重要な閾値であり、そのクロスはしばしばトレンド転換を示します。

このインジケーターのもう一つの重要な特徴はダイバージェンスを示す点です。価格と反対方向に動く場合、それはしばしば弱い価格トレンドを示唆します。その利点は、単一のEMAと比べて遅延やノイズを減らし、トレンド相場で良好に機能する点です。一方で、レンジ相場では騙しが多くなる可能性があることが制限事項となります。

WPRはサポート・レジスタンスを示すオシレーターで、価格の買われ過ぎや売られ過ぎの領域を示します。ラリー・ウィリアムズによって開発され、一定期間における高値と安値のレンジに対して現在の終値を比較します。その主な目的は、市場の重要な反転ポイントを特定することにあります。したがって、レンジ相場や非トレンド相場において最も効果的に機能します。その計算式は以下の通りです。

wpr_form

ここで

  • Highest High_N:過去N期間における最高値
  • Lowest Low_N:過去N期間における最低値
  • Close_today:現在の終値
  • × (-100):値を反転させ、解釈しやすい0から-100のスケールに変換

両方の共有式において、「today」は現在または直近の価格バーの値を意味します。「today」という表現は日足から単に転用されたものです。一般的に使用されるルックバック期間は14ですが、私たちは上記で強調したTRIXオシレーターと同様に3を使用しています。読者はこれらを自由に調整し、2つのインジケーターに対してカスタマイズした期間を設定することも可能です。このオシレーターの解釈では、-80から-100の値は資産がサポート水準にあることを示します。これは買いの機会となります。-20から0の値は資産価格がレジスタンス水準にあることを示し、売りの機会を意味します。-50の中間閾値のクロスはトレンドの変化を示す可能性があります。 

また、このオシレーターはダイバージェンスシグナルも提供します。たとえば強気のダイバージェンスでは、価格が安値を更新してもWPRが高値をつけた場合、上方への反転が差し迫っていることを示します。逆に弱気のダイバージェンスでは、価格が高値を更新してもWPRが低い高値をつけた場合、下方への反転の可能性を示します。WPRの利点は、シンプルで短期取引に有効であること、また他のインジケーターと組み合わせてうまく機能する傾向がある点です。制限としては、強いトレンド相場では誤シグナルを出す可能性があり、特定のシグナル出現時には追加確認が必要となる点です。

以上を踏まえ、ここから10種類のパターンを見ていきます。すべてのテストはCHFJPYの4時間足で、2023.01.01から2025.01.01の期間に対して実施します。2023年は学習または最適化期間であり、2024年はテストまたはフォワードウォーク期間です。


TRIXクロスオーバーとWPRピボット(Pattern_0)

最初のパターンは、TRIXがゼロラインをクロスし、WPRがサポートまたはレジスタンスからピボットするものです。TRIXがゼロラインを上抜けすると、三重に平滑化されたEMAが上方へ加速しているため、強気トレンドへの転換を示します。同時に、WPRが-80を下から上抜けすると、価格が売られ過ぎの状態から脱却する、あるいはサポートから反発していることを示します。これはしばしば買い圧力が高まっていることを意味し、これら2つのシグナルが揃うことで、誤ったブレイクアウトのリスクを抑えつつ、潜在的なトレンド転換または継続を確認することができます。 

これを実装する際には、TRIXのクロスオーバーに加えて、傾きが増加しているクロスであることを確認すると、より強力な裏付けになります。また、WPRが-80を上抜けしつつも-50未満にとどまっていることを確認することが重要です。これは、弱い反転での早すぎるエントリーを避けるためです。さらに、自信を高めるために、出来高の急増や価格が主要なレジスタンスを上抜けすることで確認することも検討できます。レンジ相場(騙しが多くなる)では常にリスクが伴うため、移動平均(MA)などの追加フィルターを利用すると良いでしょう。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 0.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_0(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && 0.0 < TRX(X()) && 0.0 >  TRX(X() + 1) && -80.0 > WPR(X() + 1) && WPR(X()) > -80.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && 0.0 < TRX(X() + 1) && 0.0 >  TRX(X()) && -20.0 > WPR(X()) && WPR(X() + 1) > -20.0)
   {  return(true);
   }
   return(false);
}

弱気シグナルは、TRIXがゼロラインを下抜けする時に発生します。これは、平滑化されたEMAが減速していることを示すため、弱気トレンドの兆候です。同時に、WPRが-20を上から下抜けすると、価格が買われ過ぎまたはレジスタンスゾーンを脱却し、売り圧力の上昇を示します。この組み合わせは通常、潜在的なトレンド反転や下方への継続を示唆します。関連するガイダンスは強気シグナルのケースと同様であり、下向きの傾きが強まっているかを確認することで、より強い弱気モメンタムを担保できます。また、WPRは-20未満であるべきですが、まだ-50には達していない必要があります。

さらに、価格がサポートを下抜けしているか、もしくは出来高(特にロングポジションの出来高)が減少しているかを確認することで、追加の裏付けを得ることができます。レンジ相場やだましの多い相場におけるリスクは、トレンドラインやRSIを用いることで軽減できるでしょう。2023.01.01から2025.01.01までのテスト結果は、2023年のみを学習期間とした場合のものを以下に示します。

r0


TRIX価格ダイバージェンスとWPRの極端値(Patter_1)

次のパターンは、価格とTRIXのダイバージェンスに加えて、WPRが極端値にある状況を利用するものです。強気シグナルは、価格が安値を更新しているにもかかわらず、TRIXがより高い安値を形成している場合に発生します。これは弱気モメンタムが弱まっていることを示します。これにWPRが-80以下というサポート水準にある状況が組み合わさると、価格が売られ過ぎであり、上方へ反転する可能性が高いことを示唆します。これはTRIXの強気トレンドへのシフトによって裏付けられます。使用する際は、少なくとも2つの価格スイングにわたってダイバージェンスを特定することで信頼性を高めることができます。また、WPRが-80以下から上昇し始めるのを待ち、買い圧力を確認することも有効です。

ハンマーのようなローソク足パターンをエントリー確認に組み込むこともできます。このパターンのリスクは、強い下落トレンドではダイバージェンスが機能しない場合があることです。ただし、上位時間軸で確認をおこなうことで、これを最小化することができます。MQL5では、これを次のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 1.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_1(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && Low(X() + 1) > Low(X()) && -80.0 > WPR(X()) && TRX(X()) > TRX(X() + 1))
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && High(X()) > High(X() + 1) && WPR(X()) > -20.0 && TRX(X() + 1) > TRX(X()))
   {  return(true);
   }
   return(false);
}

弱気シグナルは、TRIXにおけるネガティブダイバージェンスと、WPRがレジスタンスまたは買われ過ぎ領域にある場合に記録されます。このネガティブダイバージェンスは、価格が高値を更新しているにもかかわらず、TRIXがより低い高値を形成することで発生し、強気モメンタムの衰退を示します。WPRが-20以上にあることはレジスタンスゾーンを示し、潜在的な反転を示唆します。これは高い確率の売りシグナルとなることが多いです。実装にあたっては、精度を高めるために複数の高値にわたってダイバージェンスを確認するのが良い方法です。また、WPRが複数バー経過後に-20を下抜けするのを待つのも望ましい場合があります。

さらに、このパターンの追加確認として、弱気のローソク足パターンを確認するのも有効です。このパターンの制限は、強いトレンド相場ではダイバージェンスが機能しないことが多い点です。このパターンに関するテスト結果を以下に示します。

r1


TRIXクロスオーバーとWPRの位置(Pattern_2)

次のパターンにおける強気シグナルは、TRIXがシグナルゼロラインを上抜けして強気トレンドへのシフトを示す一方で、WPRが-50以上に位置している場合に発生します。これは価格が中立からレジスタンスゾーンにあることを意味します。このセットアップは、戻りの可能性が低い強まる強気トレンドという仮説を支持します。TRIXのクロスオーバーが傾きの急激化とともに起きる場合、それは強いシグナルの兆候です。WPRは-50以上-20未満にあることが望ましく、これはレジスタンスに近づいている中間レンジを探しているためです。追加の確認としては、価格が主要な移動平均線を上抜けしているか、またはADXでのチェックをおこなうことが考えられます。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 2.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_2(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && 0.0 < TRX(X()) && 0.0 >  TRX(X() + 1) && WPR(X()) > -50.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && 0.0 < TRX(X() + 1) && 0.0 >  TRX(X()) && -50.0 > WPR(X()))
   {  return(true);
   }
   return(false);
}

弱気パターンは、TRIXがゼロラインを上から下抜けし、WPRが-50以下にある場合です。これは持続的な売り圧力を伴う下降トレンドを示唆します。この考え方は、上記の強気パターンの鏡像と同様に、価格が中立ポイントにありサポートから離れているため、反転の可能性が低いという前提に基づいています。前述の他のパターンと同様に、TRIXが急な傾きで動いていることを確認することで、強いシグナルとなります。WPRも-50以下である必要がありますが、まだ-80には達していないことが条件です。強気パターンと同様に、レンジ相場(騙しが多くなる)には適していないため、このパターンはトレンド相場で適用すべきです。パターン2のテスト結果を以下に示します。

r2


TRIXトレンドとWPRエグジット(Pattern_3)

次のパターンは、TRIXがゼロライン付近またはその上でサポートを見つけ、同時にWPRがサポートまたはレジスタンスゾーンを抜け出す状況として定義されます。強気の場合、TRIXはゼロ付近で狭いレンジ内を推移した後、明確にゼロラインを上抜けします。同時に、WPRは-80の閾値を下から上抜けしてサポート領域を離れ、終値がその上に位置するようになります。実装の際には、過去チャートを用いてTRIXの歴史的サポートレベルを特定することが課題となり得ます。これはフィルターが強すぎて、トレードセットアップや機会を制限してしまう可能性があるためです。

WPRの-80クロスは、モメンタム上昇を示す別のモメンタムインジケーターで確認することができます。強気の値動きにおける包み足パターンや出来高の急増も、追加の確認シグナルとして組み込むことが可能です。このパターンの制限は、サポートレベルが弱く機能しない場合がある点です。上位時間足での検証は、このパターンの有効な確認手段となります。これをMQL5で以下のように実装します。

//+------------------------------------------------------------------+
//| Check for Pattern 3.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_3(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && TRX(X()) >= 0.0 && TRX(X() + 1) <= 0.0 && TRX(X() + 2) >= 0.0 && WPR(X() + 1) < -80.0 && WPR(X()) > -80.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && TRX(X() + 2) <= 0.0 && TRX(X() + 1) >= 0.0 && TRX(X()) <= 0.0 && WPR(X()) < -20.0 && WPR(X() + 1) > -20.0)
   {  return(true);
   }
   return(false);
}

弱気シグナルは、TRIXがレンジ内で推移した後に下抜けし、同時にWPRが-20の水準を上から下抜けして終値がその下に位置する場合に発生します。これは弱気の動きをサポートします。TRIXのレンジ内の保ち合いの後に下方向へブレイクする動きは、TRIXが「レジスタンス」に達したことを示し、強気モメンタムの衰退を示唆します。WPRの動きも売り圧力を確認する役割を果たします。前回の高値でのTRIX確認は、強気パターンと同様にシグナル生成を抑制する可能性があります。誤ったシグナルを避けるため、WPRが-20以下にとどまるのを待つことが重要です。弱気の包み足パターンなどの弱気の値動きも、このシグナルの確認に利用できます。強いトレンド相場では、このパターンの活用が非常に難しくなるため、RSIなど他のインジケーターを補助的に用いて注意する必要があります。このパターンのテスト結果は以下の通りです。

r3


TRIXブレイクアウトとWPRの中間レンジ抜け(Pattern_4)

このパターンにおける強気シグナルは、前のPattern_3と同様に、TRIXがレジスタンスを突破し、同時にWPRが-50から-20の間にある場合に発生します。これは価格が強気または中間レンジにあることを確認する傾向があり、持続可能なブレイクアウトを示唆します。このパターンを使用する際には、TRIXの傾きや出来高がシグナルの強さを補強する役割を果たします。特に移動平均線などの主要インジケーターを通過する価格のブレイクアウトをチャート上で確認することも、組み込み可能です。このパターンはトレンド相場に限定され、ボラティリティの高い相場では誤シグナルが出る可能性があります。MQL5の実装は次のとおりです。

//+------------------------------------------------------------------+
//| Check for Pattern 4.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_4(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && 0.0 < TRX(X()) && 0.0 >  TRX(X() + 1) && TRX(X()) == TRX_MAX(X()) && WPR(X()) > -50.0 && WPR(X()) < -20.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL &&  0.0 < TRX(X() + 1) && 0.0 >  TRX(X()) && TRX(X()) == TRX_MIN(X()) && WPR(X()) > -80.0 && WPR(X()) < -50.0)
   {  return(true);
   }
   return(false);
}

弱気シグナルは、TRIXがサポートを下抜けし、WPRが中立から弱気ゾーンにある場合に発生します。TRIXが過去の安値やゼロラインなどの「歴史的」サポートを下回ると、弱気モメンタムの加速を示唆する可能性があります。WPRは-50から-80の範囲に位置し、中立から弱気ゾーンとなるため、下抜けの妥当性をサポートします。ブレイクダウン時のTRIXの傾きも考慮する必要があり、WPRは-50以下でありつつ売られ過ぎにならない位置が最適なタイミングとなります。追加の確認として、価格が移動平均線を下抜けするなどのチャート上のブレイクを参照することも可能です。レンジ相場(騙しが多くなる)では、このパターンはあまり機能しません。このパターンのテスト結果は以下の通りです。

r4


TRIXの反転とWPRエグジット(Pattern_5)

このパターンにおける強気シグナルは、TRIXが極端な高値、通常はゼロラインを大きく上回る水準に達した後、下方向へ反転し、同時にWPRが-20以下に低下する場合に発生します。これは価格がもはや買われ過ぎではないことを示唆し、健全な押し目やトレンドの継続が期待できる局面です。このパターンでは、WPRが-50に向かって低下することを確認しつつ、売られ過ぎにならないことが重要です。また、価格が主要なサポートレベルを維持しているか、重要な移動平均線と同等の水準にあるかを確認することも重要です。

このパターンの制限は、買われ過ぎからの戻りが急激な戻りに発展する可能性がある点です。そのため、フィボナッチ・リトレースメントと組み合わせることで管理することが有効です。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 5.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_5(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && TRX(X() + 2) < TRX(X() + 1) && TRX(X() + 1) >  TRX(X()) && TRX(X() + 1) == TRX_MAX(X()) && WPR(X() + 1) > -20.0 && WPR(X()) < -20.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && TRX(X() + 2) > TRX(X() + 1) && TRX(X() + 1) <  TRX(X()) && TRX(X() + 1) == TRX_MIN(X()) && WPR(X()) > -80.0 && WPR(X() + 1) < -80.0)
   {  return(true);
   }
   return(false);
}

弱気シグナルは、TRIXが売られ過ぎ水準から反転し、同時にWPRが売られ過ぎゾーンを抜けることで、弱気トレンドへの戻りが起こる可能性を示唆する場合に発生します。TRIXが極端な安値で底打ちした後に上方向へ反転する動きは、売られ過ぎの状況が緩和されつつあることを示します。WPRは-80を上回る必要があり、これにより価格がもはや売られ過ぎではなく、以前の弱気トレンドが再開する可能性があることを確認します。TRIXがゼロライン以下で急傾斜を維持している場合、追加の健全な確認フィルターとして機能します。WPRは-50に向かって上昇することが望ましいですが、この重要水準を突破しないことが重要です。過買い状態を避けるためです。

さらに有効なシグナルとしては、価格が主要な水準や重要な移動平均線付近で推移していることも挙げられます。このパターンの制限は、レンジ相場(騙しが多くなる)では機能しにくい点です。そのため、トレンドラインを補助的に利用してフィルタリングすることが推奨されます。このパターンのテスト結果は以下の通りです。

r5


TRIX継続と中間レンジのWPR(Pattern_6)

このパターンにおける強気シグナルは、TRIXがゼロライン以上で継続しており、同時にWPRが-50から-20の中間レンジにある場合に発生します。これは持続的な強気トレンドを示唆しており、トレンドの伸びしろが残っている可能性があります。説明としては、TRIXがゼロライン以上かつ正の傾きを維持している場合、それは継続中の強気トレンドの確認となります。また、補完的に中間レンジのWPRは、価格が過買いでも過売りでもないことを示しており、反転の差し迫ったリスクなしにトレンドが継続する可能性を示唆しています。

このパターンを使用する際には、TRIXが急激な反転を伴わず一貫した上向きの傾きを維持していることを確認する必要があります。また、WPRも-50から-20の範囲にとどまることが望ましく、トレンドの継続に最適な条件となります。追加の確認としては、価格がトレンドラインに沿って推移しているか、重要な移動平均線の上にあるかをチェックすることも有効です。このパターンの制限は、低ボラティリティ相場では中間レンジのシグナルが弱まることです。これをMQL5で実装すると次のようになります。

//+------------------------------------------------------------------+
//| Check for Pattern 6.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_6(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && TRX(X() + 2) > TRX(X() + 1) && TRX(X() + 1) > TRX(X()) && TRX(X()) > 0.0 && WPR(X()) > -80.0 && WPR(X()) < -20.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && TRX(X() + 2) < TRX(X() + 1) && TRX(X() + 1) < TRX(X()) && TRX(X()) < 0.0 && WPR(X()) > -80.0 && WPR(X()) < -20.0)
   {  return(true);
   }
   return(false);
}

この弱気パターンは、TRIXがゼロライン以下で継続し、同時にWPRが中間レンジにある場合に発生します。これは持続的な弱気トレンドを示唆します。このパターンが弱気である理由は、TRIXがゼロライン以下かつ負の傾きを維持している場合、弱気トレンドの確認となるためです。また、WPRが-50から-80の中間レンジにあることは、価格がまだ売られ過ぎではないことを示し、直近での反転なしに下降トレンドが継続できる可能性を示唆します。この弱気パターンを適用する際には、ほとんどのパターンと同様に、TRIXの傾きが一貫して下向きであることが重要です。

また、WPRも-50から-80の範囲内にあることを確認する必要があります。価格が主要な移動平均線やサポートレベル付近にある場合は、このパターンの信頼性を高めます。強気パターンの鏡像と同様に、このパターンの制限は、中間レンジのシグナルが長期間にわたって弱まる可能性がある点です。この7番目のパターンのテスト結果は次のとおりです。

r6


TRIXの保ち合いとWPRのゾーン(Pattern_7)

この強気パターンは、TRIXの保ち合いからのブレイクアウトと、WPRが強気のサポートゾーンにある状況で発生します。これは健全なモメンタムを伴う新たな上昇トレンドを示唆します。この理論の根拠は、TRIXがゼロライン付近で横ばいまたは保ち合い状態を形成した後、上方向へブレイクすることで、新たな強気トレンドの開始を示す点にあります。また、WPRが-50以上にあることは強気モメンタムの確認となり、強気の勢いが持続する可能性を示唆します。このパターンを実装する際には、TRIXの保ち合いをできるだけ狭いレンジで、ゼロライン付近で複数バーまたは期間にわたって特定することが理想的です。

そのため、このシグナルは非常に制約の厳しいものであり、大規模なテスト期間であってもほとんどシグナルを生成しません。実際、このパターンや類似のパターンがあるため、TRIXのインジケーター期間を非常に短い「3」に設定しました。より長い期間では価格変動に対して感度が低く、シグナルが非常に少なく、結果として取引機会もほとんど得られなかったためです。このパターンでは、他のパターンと同様に傾き確認が望ましいものの、厳密に言えばそれは贅沢であり、そもそもエントリーポイントが少ないためです。これをMQL5で以下のように実装します。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 7.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_7(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && fabs(Close(X()) - Close(X() + 1)) >= TRX_MAX(X() + 1) - TRX_MIN(X() + 1) && TRX_MAX(X() + 1) > 0.0 && TRX_MIN(X() + 1) < 0.0 && TRX_MAX(X() + 1) < TRX(X()) && WPR(X()) >= -20.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && fabs(Close(X()) - Close(X() + 1)) >= TRX_MAX(X() + 1) - TRX_MIN(X() + 1) && TRX_MAX(X() + 1) > 0.0 && TRX_MIN(X() + 1) < 0.0 && TRX_MIN(X() + 1) > TRX(X()) && WPR(X()) <= -80.0)
   {  return(true);
   }
   return(false);
}

この弱気パターンは、TRIXが保ち合いから下方へブレイクし、同時にWPRが弱気ゾーンにある場合に発生します。これは、一定のモメンタムを伴う新たな下降トレンドを示唆します。このパターンが弱気である理由は、強気パターンの場合と類似しています。方向感のないゼロライン付近で長期間保ち合った後に下方向へブレイクする動きは、単なる弱気トレンドを示すだけでなく、新たな弱気トレンドの発生(起点)を示すことが多いです。WPRが-50以下に位置することは、この弱気の仮説をさらに強化します。

TRIXの狭い保ち合いを確認する際には、適切な取引回数を確保するためのバランスも重要です。WPRは-50以下でありつつ、売られ過ぎにならない位置にあることが最適なタイミングを示します。レンジ相場における下方ブレイクの騙しが、このパターンの主なリスクとして残ります。このパターンのテスト結果は以下の通りです。

r7


TRIXゼロライン反転と極端なWPR(Pattern_8)

この準最後のパターンにおける強気シグナルは、TRIXがゼロラインで上方向へ反転し、同時にWPRが売られ過ぎ水準にある場合に発生します。これは中立トレンドからの強い強気反転を示唆します。このパターンが強気となる理由は、TRIXがゼロラインで上方向に反転することで、中立から強気モメンタムへのシフトを示す点にあります。また、WPRが-80以下にあることは、売られ過ぎの状態を確認する要素となります。これにより、買い圧力が高まる中で高確率の反転が予想されます。

このパターンを使用する際には、TRIXの反転を適切に確認する必要があり、複数バーを確認する場合もあります。また、WPRが複数バーにわたって-80を明確に上抜けするのを待つことで、より信頼性を高めることができます。追加のサポートフィルターとしては、強気のローソク足パターンや主要サポートレベル付近での価格の推移も有効です。トレンド相場では、このパターンの適用には制限があります。このパターンは、MQL5では以下のように実装されます。

//+------------------------------------------------------------------+
//| Check for Pattern 8.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_8(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && TRX(X()) > TRX(X() + 1) && TRX(X() + 1) > 0.0 && TRX(X() + 2) > TRX(X() + 1) && WPR(X()) < -50.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && TRX(X() + 2) < TRX(X() + 1) && TRX(X() + 1) < 0.0 && TRX(X()) < TRX(X() + 1) && WPR(X()) > -50.0)
   {  return(true);
   }
   return(false);
}

この弱気パターンは、TRIXがゼロライン付近で下方向へ反転し、同時にWPRが価格が買われ過ぎまたはレジスタンス水準にあることを示している場合に発生します。この理由は、ゼロライン付近から反転するTRIXが、市場センチメントの弱気へのシフトを示す、あるいは確認するためです。また、WPRが-20以上にあることは、過買い状態を確認する要素となり、売り圧力が増している状況下で高確率の反転を示唆します。TRIX反転の確認には、反転後の傾きやバー数を用いて明確に確認する必要があります。

WPRが-20を下回ることを確実に確認し、弱気のローソク足パターンやレジスタンスレベルと組み合わせることで、より信頼性の高いシグナルを得ることができます。このパターンの制限は、強気パターンと同様にトレンド相場での適用が難しい点です。このパターンのテスト結果は以下の通りです。本記事で検証したすべてのパターンに共通して、テスト期間は2023.01.01から2025.01.01で、2023.01.01から2024.01.01を学習/最適化期間として使用しました。使用銘柄はCHFJPY、時間軸は4時間足です。

r8


TRIXダブルボトム/ダブルトップとWPR売られ過ぎ/買われ過ぎ(Pattern_9)

最後のパターンの強気シグナルは、TRIXがダブルボトムを形成し、同時にWPRが強い強気反転を示している場合に発生します。このサポートレベルでの値動きは、価格の底が形成されていることを確認するためのものです。この理論の根拠は、ダブルボトムがサポートレベルで形成される2つの交互のポイントであり、しばしばゼロライン以下に位置することから、保ち合いと同様に、弱気から強気トレンドへの潜在的な反転を示唆する点にあります。さらに、WPRが-80のサポートレベルにある場合、売られ過ぎの状態が既に発生していることを確認できるため、反転が差し迫っていることを示します。 

使用時の追加考慮点としては、ダブルボトムがゼロライン付近、または負の領域にあることを確認することです。この条件はシグナルを得ることを非常に困難にします。なぜなら、TRIXのダブルボトムは、交互のバー上で発生することが稀だからです。他のパターンと同様に、補助的なシグナルとしては、価格自体がダブルボトムを形成していることや、レジスタンスを上抜けることも確認材料となります。このパターンの弱点は、ボラティリティが高く、騙しの多い相場です。MQL5での実装は次のとおりです。

//+------------------------------------------------------------------+
//| Check for Pattern 9.                                             |
//+------------------------------------------------------------------+
bool CSignalTRX_WPR::IsPattern_9(ENUM_POSITION_TYPE T)
{  if(T == POSITION_TYPE_BUY && TRX(X()) >= 0.0 && TRX(X() + 1) <= 0.0 && TRX(X() + 2) >= 0.0 && TRX(X() + 3) <= 0.0 && TRX(X() + 4) >= 0.0 && WPR(X()) <= -50.0)
   {  return(true);
   }
   else if(T == POSITION_TYPE_SELL && TRX(X() + 4) <= 0.0 && TRX(X() + 3) >= 0.0 && TRX(X() + 2) <= 0.0 && TRX(X() + 1) >= 0.0 && TRX(X()) <= 0.0 && WPR(X()) >= -50.0)
   {  return(true);
   }
   return(false);
}

弱気パターンは、ゼロライン付近またはその上の正の領域でTRIXがダブルトップを形成する場合です。これはしばしば強気モメンタムの衰退を示します。WPRが-20以上にあることで、買われ過ぎの状態を確認でき、下方反転のシナリオを支持します。使用上の注意点は、これまでの他のパターンで述べた傾き、遅延エントリー、追加インジケーターの活用などと同様です。リスクとしては、だましの多い相場での使用が挙げられます。この最終パターンのテスト結果では、エントリーパターンが非常に制約されていたため、取引は一度も発生しませんでした。これは非常に短いインジケーター期間を使用した場合でも同様でした。


結論

本記事では、三重指数移動平均オシレーター(TRIX: Triple Exponential Moving Average Oscillator)とウィリアムズパーセントレンジオシレーター(WPR: Williams Percent Range)を組み合わせて得られるパターンとシグナルを検証しました。テスト目的として、わずか1年のテスト期間でも十分な取引機会を得るために、インジケーター期間を非常に短く設定しました。これにより、このインジケーターペアは、過去に検討した他のペアと比べて感度やシグナル頻度が低いことがわかります。そのため、このインジケーターペアを使用する場合、どのパターンが有効かを確認するために、読者自身による追加テストが必須となります。上記のテスト結果から、フォワードウォーク(実運用での継続的テスト)が可能だったのは、パターン1、4、5のみでした。


名前 説明
wz-67.mq5 ヘッダにインクルードファイルを示すウィザード組み立てEA
SignalWZ_67.mqh ウィザードアセンブリで使用されるカスタムシグナルクラスファイル

新しい読者のために、これらのカスタムシグナルクラスファイルを使用してMQL5ウィザードでエキスパートアドバイザー(EA)を組み立てる方法に関するガイダンスがここにあります。

MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/18251

添付されたファイル |
SignalWZ_67.mqh (19.78 KB)
wz-67.mq5 (7.82 KB)
ログレコードをマスターする(第7回):チャートにログを表示する方法 ログレコードをマスターする(第7回):チャートにログを表示する方法
MetaTraderのチャート上に、フレームやタイトル、自動スクロール機能を備えたログ表示エリアを構築し、整理された形でログを確認する方法を解説します。本記事では、MQL5を用いてビジュアルログシステムを実装する手順を紹介します。これにより、ロボットの動作をリアルタイムで効率的に監視することが可能になります。
MQL5での取引戦略の自動化(第18回):Envelopes Trend Bounce Scalping - コア基盤とシグナル生成(その1) MQL5での取引戦略の自動化(第18回):Envelopes Trend Bounce Scalping - コア基盤とシグナル生成(その1)
本記事では、MQL5でのEnvelopes Trend Bounce Scalpingエキスパートアドバイザー(EA)のコア基盤を構築します。シグナル生成のためにエンベロープやその他のインジケーターを初期化します。また、次回の取引実行に備えてバックテストの設定をおこないます。
プライスアクション分析ツールキットの開発(第25回):Dual EMA Fractal Breaker プライスアクション分析ツールキットの開発(第25回):Dual EMA Fractal Breaker
プライスアクションは、利益を生む取引機会を特定するための基本的なアプローチです。しかし、価格の動きやパターンを手動で監視することは、非常に手間がかかり、時間も消費します。そこで、本記事では、プライスアクションを自動的に分析し、潜在的な取引機会が検出されるたびにタイムリーなシグナルを提供するツールを開発する取り組みを紹介します。特に、フラクタルのブレイクアウトとEMA 14、EMA 200を組み合わせて信頼性の高い取引シグナルを生成する堅牢なツールを紹介し、トレーダーがより自信を持って意思決定できるよう支援します。
MQL5で自己最適化エキスパートアドバイザーを構築する(第7回):複数期間での同時取引 MQL5で自己最適化エキスパートアドバイザーを構築する(第7回):複数期間での同時取引
本連載記事では、テクニカル指標を使用する際の最適な期間を特定するためのさまざまな方法を検討してきました。本記事では、読者に対して逆のロジックを示します。すなわち、単一の最適期間を選ぶのではなく、利用可能なすべての期間を効果的に活用する方法を示します。このアプローチにより廃棄されるデータ量が減少し、通常の価格予測以外に機械学習アルゴリズムを活用する方法も得られます。