English Русский Deutsch
preview
MQL5入門(第20回):ハーモニックパターンの基礎

MQL5入門(第20回):ハーモニックパターンの基礎

MetaTrader 5トレーディング |
81 0
Israel Pelumi Abioye
Israel Pelumi Abioye

はじめに

連載「MQL5入門」の第20回へようこそ。本記事では、もうひとつの高度なチャートパターンである「ハーモニックパターン」を取り上げます。これらのパターンは、潜在的な反転ゾーンを特定するために正確なフィボナッチ比率を使用し、テクニカル分析において広く認識されています。

ハーモニックパターンの概念を深く理解したい方には、本記事が最適です。本記事では、パターンの構造と、それを定義するために必要なフィボナッチエクステンションおよびフィボナッチリトレースメントツールを紹介します。

また、最も有名なハーモニック構造であるガートレー、バット、バタフライ、クラブの主要な要素と、それらを定義する正確なフィボナッチ測定値についても解説します。わずかな比率のズレでもセットアップが無効になるため、これらの比率を正確に理解することが重要です。次回の記事では、この知識を用いてMQL5でプログラム的にハーモニックパターンを自動検出する方法を取り上げ、強気と弱気の両方のパターンを自動で識別できる仕組みを解説します。

本記事で学べる内容は以下の通りです。

  • ハーモニックパターンの基本概念と取引での応用方法
  • フィボナッチリトレースメントの数学的概念と、パターン識別における重要性
  • フィボナッチエクステンションの仕組みと、潜在的な価格ターゲットの決定における役割
  • MQL5でのハーモニックパターン検出の実装方法(フィボナッチ比率をプログラムで利用する方法を含む)
  • 各ハーモニックパターンの構造とチャート上での認識方法


フィボナッチエクステンションとフィボナッチリトレースメント

ハーモニックパターンの概念を理解する前に、まずフィボナッチリトレースメントとフィボナッチエクステンションについて理解する必要があります。MetaTrader 5 のツールボックスで、これらのオブジェクトをすでに目にしたことがあるかもしれません。しかし、そのレベルがどのような数式によって算出されているのか、あらためて考えたことはありますか。

考えたことがあるなら素晴らしいです。本セクションではより深く理解することができます。考えたことがなくても、心配はいりません。私が丁寧に説明します。このセクションを読み終えるころには、フィボナッチレベルがどのように決定され、なぜハーモニックパターンの認識に不可欠なのかを正確に理解できるようになります。

フィボナッチリトレースメント

フィボナッチリトレースメントもフィボナッチエクステンションも、パーセンテージを用いて計算されます。市場の動きが「どれだけ戻ったか」あるいは「どれだけ拡張したか」を測るイメージです。 簡単な例を使ってみましょう。市場が明確なスイングを形成したとします。まずスイングローがあり、次にスイングハイが形成されたとします。

図1:フィボナッチリトレースメント

リトレースメントレベルを計算するには、この2点の差(値動きの高さ)を求めます。

例:

double price_differecence;
double swing_high;
double swing_low;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---
   swing_high =  1.16985;
   swing_low = 1.15656;

   price_differecence = swing_high - swing_low;

  }

常にswing_lowをswing_highから引くことで、正の価格差を得ることができます。順序を逆にすると、負の値になってしまいます。 

たとえば、価格がスイングハイから途中で反転した場合、50%リトレースメントとなります。これは、上昇した価格の半分が戻されたことを示します。

例:

double price_diff_50_percent;

//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   swing_high =  1.16985;
   swing_low = 1.15656;

   price_differecence = swing_high - swing_low;

   price_diff_50_percent = (50.0/100.0) * price_differecence; // (Fibonacci Retracement level / 100) * Price Difference

  }

この行では、総価格差の50%を計算しています。整数の代わりに、50.0と100.0のように浮動小数点を用いて計算します。浮動小数点除算では正確な小数値が得られるため、これは重要です。整数で「50/100」と表現すると、言語によっては整数除算として扱われる場合があり、注意が必要です。

図2:50%リトレースメント

これを階段に例えて考えてみましょう。10段の階段を上ったとします。そのうち5段を下がれば、上った半分の距離を戻ったことになります。フィボナッチリトレースメントでは、特定のパーセンテージレベルを見ることができます。価格はこれらのレベルで一時的に停滞したり反転したりすることがあり、これらは多くの場合、目に見えないサポートやレジスタンスとして機能します。「市場が61.8%レベルまでリトレースした」と聞いたとき、それはスイングハイからスイングローに向かう動きのほぼ3分の2が戻されたことを意味します。

フィボナッチエクステンション

フィボナッチエクステンションは、次の値動きが初期スイングをどこまで伸ばす可能性があるかを推定することに焦点を当てています。一方で、フィボナッチリトレースメントは主に、市場が前の動きからどれだけ戻したかを測るために使用されます。どちらもパーセンテージで表されますが、エクステンションレベルは元のスイングを100%超えて拡張されます。

市場の動きを測定したい場合、フィボナッチエクステンションは2つの方法で使用できます。

シナリオ1(リトレースメントを伴う標準的な使用法)

通常の使用では、フィボナッチエクステンションツールは、エクステンションレベルをプロットする前に市場がリトレースすることを前提とします。この場合、3つのアンカーを使用します。

  • 最初のアンカーを点Xに置きます。
  • 2番目のアンカーを点Aに置きます。
  • 3番目のアンカーを点Bに置きます。BはXAの動きのリトレースメントです。

図3:リトレースメントでの標準的な使用法

まず、XAと呼ばれる価格スイングから始めます。この場合、XとAは動きの始点と終点を表します。市場は通常、この最初の値動きの後、XとAの間に位置する点Bまでリトレースします。X、A、Bの3つのアンカーを使ってフィボナッチエクステンションを計算します。エクステンションツールは、リトレースメントが完了した後に市場がどこに向かう可能性があるかを、点Aを超える価格目標として予測します。

数学的には、まずXとAの価格差を計算します。

price difference=A−X

これにより、XAの動きの全体サイズが得られます。次に、選択したフィボナッチの拡張比率(例:61.8%)を小数で表すために100で割ります。

fibo ratio= 61.8/100.0

次に、この比率を価格差に掛けて、点Aを超える拡張距離を求めます。

extension distance = fibo ratio×price difference

最後に、この拡張距離を点Bに加えることで、フィボナッチエクステンションレベルを求めます。

fibo extension = B+extension distance

実際には、この手順により、XAが上昇の動きでBがそのリトレースメントである場合、次の上昇局面がどこで終わるかを予測できます。同様に、下降トレンドの場合は、点Aの外側での潜在的な下値ターゲットを見つけるのに役立ちます。この数学的手順により、フィボナッチエクステンションはチャート上の単なるランダムな線ではなく、価格スイング内の比率関係に基づいた体系的な予測となります。

シナリオ2(ハーモニックパターンでの直接使用)

ハーモニックパターンでは、フィボナッチエクステンションの使用方法は従来のリトレースメントとは異なります。この場合、最初のアンカーは点Xに置き、2番目と3番目のアンカーは点Aに置きます。リトレースメントを測定するのではなく、将来の価格目標を推定することに焦点を当てます。

この場合、フィボナッチエクステンションとフィボナッチリトレースメントは一見似ているように見えますが、異なります。もし点Aがスイングハイであれば、リトレースメントでは通常XAの動きのフィボナッチ比率を引きますが、エクステンションでは点Aがスイングハイの場合は加算します。したがって、これはリトレースメントではなく拡張です。

図4:ハーモニックパターンでの直接使用

例:

double price_differecence;
double swing_high; //A
double swing_low;  //X
double price_diff_161_8_percent;
double fibo_extension_161_8;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   swing_high =  1.16985;
   swing_low = 1.15656;

   price_differecence = swing_high - swing_low;

   price_diff_161_8_percent = (61.8/100.0) * price_differecence;
   fibo_extension_161_8 = swing_high + price_diff_161_8_percent;


  }

例えば、XからAの動きは100%と見なされます。XAのフィボナッチレベルである61.8%は、点Aを超える拡張を示します。この値を点Aに加算する場合、結果として161.8レベルが得られます。このため、127.2や161.8といったエクステンションはハーモニックパターンでよく用いられます。これらは、初期のXAの動きのリトレースメントではなく、XAを超えて伸びる予測です。

この手法では、実際にXAからのリトレースメントが必要なくなり、ハーモニックパターンにおける次のスイングの可能性のある位置を特定しやすくなります。つまり、XからAへの値動きが数学的に伸長され、その予測によって、市場が反転したりハーモニック構造が終了する可能性のある重要な点を判断するのに役立ちます。


ハーモニックパターン

フィボナッチリトレースメントとフィボナッチエクステンションの概念が明確になると、ハーモニックパターンの説明ははるかに理解しやすくなります。これは、フィボナッチ比率がすべてのハーモニックパターンの基礎となっているためです。実際には、価格の各レッグが特定のフィボナッチリトレースメントおよびエクステンションのレベルにどの程度一致しているか、そしてチャート上でのパターンの形状こそが、ハーモニックパターンを他のパターンと区別する要素となります。

ハーモニックパターンとは、さまざまな時間軸で繰り返し現れる幾何学的な価格構造を指します。これらは、XA、AB、BC、CDのような連続するスイング(レッグ)で構成されており、パターンを有効と判断するためには、各レッグが正確なフィボナッチ比率を満たす必要があります。ハーモニックパターンは、三角形やフラッグのような単純なチャートパターンよりも明確かつ客観的であり、数学的比率に大きく依存している点が特徴です。

図5:ハーモニックパターン

最も一般的なハーモニックパターンには、ガートレー、バット、バタフライ、クラブなどがあります。各パターンにおけるレッグ間の関係は、固有のフィボナッチ「レシピ」によって定義されています。たとえば、パターンが有効と見なされるためには、ABのリトレースメントがXAに対して、あるいはCDのエクステンションがBCに対して、特定のフィボナッチ範囲内に収まる必要があり、任意の値では認められません。

バタフライハーモニックパターン

典型的なバタフライパターンでは、最初のレッグは点Xから点Aへ向かうもので、これが初動の価格変動を形成します。

図6:XA

点Bは、XAレッグに対してABレッグが76%から79%の範囲でリトレースする位置でなければなりません。理想的なリトレースメントとして78.6%が頻繁に挙げられますが、価格がその水準に正確に到達することはほとんどありません。このため、固定値ではなく範囲を用いる方が実用的です。

図7:AB

例:

double swing_low_x;  //X
double swing_high_x; //A
double price_differecence;
double fib_ret_79;
double fib_ret_76;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---


   swing_low_x = 1.15656;
   swing_high_x =  1.16985;

   price_differecence = swing_high_a - swing_low_x;

   fib_ret_79 = swing_high_x - ((79.0/100.0) * price_differecence);
   fib_ret_76 = swing_high_x - ((76.0/100.0) * price_differecence);


   /*
      if(B <= fib_ret_76 && B>= fib_ret_79)
      {



      }

    */
  }

説明

このアルゴリズムは、スイングポイントXとAの間のフィボナッチリトレースメントレベルを計算し、バットハーモニックパターンにおける点Bの位置を特定するための基礎を構築します。価格差を求めたうえで、79%および76%のリトレースメントレベルを算出し、点Bが形成されるべき理想的な範囲を示します。

リトレースメントレベルを計算した後、点Bの価格がこの範囲内にあるかどうかを比較できます。以下は、コメントされたブロックに示されている条件です。

if(B <= fib_ret_76 && B >= fib_ret_79) { }

この条件は、点Bが指定したXAレッグのリトレースメント範囲内にあるかどうかを判断します。条件が真であれば、点Bはバットパターンのルールを満たしており、この場合は点Cおよび点Dの追加検証へ進むことができます。

BCの区間は、一般的に前のABの動きの約38.2%からおよそ88.6%の範囲まで戻されます。この区間には、他のレッグと比べるとある程度の柔軟性があります。この戻りが想定される範囲内に収まっている限り、パターン全体は適切であると見なされます。

図8:BC

例:
double swing_low_x;  //X
double swing_high_a; //A
double price_differecence;
double fib_ret_79;
double fib_ret_76;

double swing_low_b;  //B
double price_differecence_ab;
double fib_ret_88_6_ab;
double fib_ret_38_2_ab;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---


   swing_low_x = 1.15656;
   swing_high_a =  1.16985;

   price_differecence = swing_high_a - swing_low_x;
   fib_ret_79 = swing_high_a - ((79.0/100.0) * price_differecence);
   fib_ret_76 = swing_high_a - ((76.0/100.0) * price_differecence);

   price_differecence_ab = swing_high_a - swing_low_b;
   fib_ret_88_6_ab = swing_low_b + ((88.6/100.0) * price_differecence_ab);
   fib_ret_38_2_ab = swing_low_b + ((38.2/100.0) * price_differecence_ab);


   /*
     if(B <= fib_ret_76 && B>= fib_ret_79 && C >= fib_ret_38_2_ab && C <= fib_ret_88_6_ab)
     {



     }

   */

  }

説明

このセクションでは、市場の主要な2点間の全体的な価格変動が計算されます。この動きを基に、特定のフィボナッチリトレースメントレベルが算出され、これらは価格が反転したりサポートやレジスタンスとして機能したりする可能性のある位置を示します。38.2%レベルは、値動きの小さな割合を同じ点に加える方法で計算されます。一方、88.6%リトレースメントレベルは、全体の値動きの大部分を取り、それを下側の点に加算することで、分析における2つの参照レベルを形成します。

これらのレベルは、リトレースメントの局面において、価格が反応しやすいゾーンを特定するのに役立ちます。最後に、パターン確認ロジックの一部として、コメントされたif文は、点Bが特定の2つのリトレースメントレベルの間にあり、さらに点Cもまた指定したフィボナッチ範囲内にあるかどうかを判断します。

最後に、バタフライパターンで最も重要な要素はCDレッグであり、これは潜在的反転ゾーン(PRZ)を定義します。有効なバタフライにおいて点Dは、元のXAレッグの127.2%から161.8%に広がります。このエクステンションによって形成される領域が完成ゾーンであり、トレーダーはここで反転の兆候を探します。XAが100%である場合、61.8%のエクステンション後、DはXAのおよそ161.8%付近になります。

図9:XAリトレースメント

例:

double swing_low_x;  //X
double swing_high_a; //A
double price_differecence;
double fib_ret_79;
double fib_ret_76;

double swing_low_b;  //B
double price_differecence_ab;
double fib_ret_88_6_ab;
double fib_ret_38_2_ab;

double xa_price_differecence;
double fib_ext_127_2_xa;
double fib_ext_161_8_xa;

//+------------------------------------------------------------------+
//| Expert initialization function                                   |
//+------------------------------------------------------------------+
int OnInit()
  {
//---

//---
   return(INIT_SUCCEEDED);
  }
//+------------------------------------------------------------------+
//| Expert deinitialization function                                 |
//+------------------------------------------------------------------+
void OnDeinit(const int reason)
  {
//---

  }
//+------------------------------------------------------------------+
//| Expert tick function                                             |
//+------------------------------------------------------------------+
void OnTick()
  {
//---

   swing_low_x = 1.15656;
   swing_high_a =  1.16985;

   price_differecence_ab = swing_high_a - swing_low_b;
   fib_ret_79 = swing_high_a - ((79.0/100.0) * price_differecence);
   fib_ret_76 = swing_high_a - ((76.0/100.0) * price_differecence);

   fib_ret_88_6_ab = swing_low_b + ((88.6/100.0) * price_differecence_ab);
   fib_ret_38_2_ab = swing_low_b + ((38.2/100.0) * price_differecence_ab);

   xa_price_differecence = swing_high_a - swing_low_x;
   fib_ext_127_2_xa = MathAbs(swing_low_x - ((127.2/100.0) * xa_price_differecence));
   fib_ext_161_8_xa = MathAbs(swing_low_x - ((161.8/100.0) * xa_price_differecence));

   /*
     if(B <= fib_ret_76 && B>= fib_ret_79 && C >= fib_ret_38_2_ab && C <= fib_ret_88_6_ab && D <= fib_ext_127_2_xa && D >= fib_ext_161_8_xa)
     {

     }

   */

  }

説明

コードのこの部分では、市場パターンにおける2つの重要なスイングポイント間の距離を計算します。価格の動きは、そのパターン区間に対するフィボナッチエクステンションレベルを決定するために使用されます。始点と終点のスイングポイントの差を算出し、127.2%および161.8%というフィボナッチ比率を適用することで、次に価格がどこまで伸びる可能性があるかを実質的に予測します。さらに、上昇と下降のどちらの方向でも正しく計算が行えるように、計算結果を常に正の値に変換する関数が使用されています。これらの比率は最初の価格変動に適用され、動きの方向に応じて加算または減算されることで、予測されるエクステンションレベルを求めます。

フィボナッチエクステンションおよびリトレースメントの数学的基礎と、それらをMQL5でどのように適用するかについて、これまでの説明で十分に理解が深まりました。ハーモニックパターンを検証するために、フィボナッチ比率を使い、スイングポイント間の価格差を計算し、重要なレベルを特定する方法も理解できました。ここで使用したロジックは他のハーモニックパターンにも同様に適用でき、いずれもフィボナッチに基づく計算によって潜在的な反転や継続のゾーンを特定します。この基盤が整ったことで、より多くのハーモニックパターンを自信を持って調査できるようになります。これらの概念は、プライスアクションとフィボナッチの関係性を利用して、潜在的な取引機会を見つけるために活用されます。

ガートレーパターン: ガートレーパターンはXA、AB、BC、CDの各ステップで構成されます。点BはXAの61.8%をリトレースし、点CはABの38.2%~88.6%の範囲でリトレースします。点DはXAの127.2%~161.8%のエクステンション内に位置し、これが潜在的な反転ゾーンとなります。

バットパターン: バットパターンは特定のフィボナッチ比率によって定義されるハーモニック構造です。点BはXAの38.2%~50%をリトレースし、点Dは通常XAの88.6%リトレースメント付近に位置します。ここがパターン完成の点となります。


結論

本記事では、ハーモニックパターンの基本原理と、その取引への応用について解説しました。フィボナッチリトレースメントおよびフィボナッチエクステンションをMQL5でどのように扱うか、そしてそれらの背後にある数学的原理について理解していただけたと思います。次回の記事では、ハーモニックパターンを活用して完全に動作するエキスパートアドバイザー(EA)を構築することで、理論から実践へ進みます。さらに、MQL5のチャート描画機能を用いて、これらのパターンを視覚的に認識し強調表示する方法についても学びます。次の記事が終わる頃には、ハーモニックパターンに基づく取引手法を自動化するために必要な知識とツールが揃っていることでしょう。 

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

添付されたファイル |
MQL5で自己最適化エキスパートアドバイザーを構築する(第13回):行列分解を用いた制御理論の簡単な入門 MQL5で自己最適化エキスパートアドバイザーを構築する(第13回):行列分解を用いた制御理論の簡単な入門
金融市場は本質的に予測が難しく、過去には利益が出ていたように見える取引戦略でも、実際の市場環境では破綻することが少なくありません。主な原因は、ほとんどの戦略が一度展開されると振る舞いが固定され、失敗から学習したり適応したりできないということです。そこで制御理論の考え方を取り入れることで、フィードバックコントローラを用いて戦略と市場の相互作用を観察し、その挙動を収益性に向けて調整することが可能になります。今回の結果では、単純な移動平均戦略にフィードバックコントローラを導入するだけで、利益の向上、リスクの低減、効率の改善が見られ、このアプローチが取引用途において大きな可能性を持つことが示されました。
共和分株式による統計的裁定取引(第3回):データベースのセットアップ 共和分株式による統計的裁定取引(第3回):データベースのセットアップ
本記事では、新しく作成したデータベースを更新するためのMQL5 Serviceのサンプル実装を紹介します。このデータベースはデータ分析や、共和分関係にある株式バスケットの取引に利用されます。データベース設計の根拠についても詳しく説明し、参照用としてデータディクショナリを文書化します。さらに、データベースの作成、スキーマ初期化、市場データ挿入のためのMQL5とPythonのスクリプトも提供します。
チャート同期でテクニカル分析を簡単にする チャート同期でテクニカル分析を簡単にする
「Chart Synchronization for Easier Technical Analysis」は、単一の銘柄に対してすべてのチャート時間足でトレンドライン、四角形、インジケーターなどの一貫したグラフィックオブジェクトが表示されるようにするツールです。パン、ズーム、銘柄変更などの操作はすべての同期したチャートに反映されるため、トレーダーは複数の時間足で同じプライスアクションの文脈をシームレスに確認し、比較できます。
MetaTrader 5機械学習の設計図(第2回):機械学習のための金融データのラベリング MetaTrader 5機械学習の設計図(第2回):機械学習のための金融データのラベリング
本連載「機械学習の設計図」の第2回では、単純なラベル付けがなぜモデルを誤った方向に導いてしまうのか、そしてトリプルバリア法やトレンドスキャン法といった高度な手法をどのように適用すれば、リスクを考慮した堅牢なターゲットを定義できるのかをご紹介します。計算負荷の高いこれらの手法を最適化する実践的なPythonコード例も多数取り上げ、市場のノイズに満ちたデータを、現実の取引環境に即した信頼性の高いラベルへと変換する方法を詳しく解説します。