
知っておくべきMQL5ウィザードのテクニック(第48回):ビル・ウィリアムズのアリゲーター
はじめに
アリゲーターインジケーター市場が特定の方向へ強いトレンドを形成するのは全体のわずか15~30%程度であるという前提のもと、ビル・ウィリアムズ(英語)によって開発されました。本質的には、トレーダーが市場の方向性や潜在的なフラクタル、転換点を特定するのに役立つトレンドフォロー型のツールです。このインジケーターは、異なる期間の3本の平滑移動平均(SMA)を使用し、それぞれを異なる量だけ前方にシフトさせることで機能します。
これら3本のSMAは、ワニの口になぞらえて「顎」「歯」「唇」と呼ばれることがよくあります。この3つの移動平均は、市場のフェーズを視覚的に把握するのに役立ち、主に「トレンドフェーズ」「レンジ(統合)フェーズ」「移行フェーズ」に分類されます。3本のSMAが狭い範囲で収束しているときは、ワニが眠っている状態に例えられます。これは、ビル・ウィリアムズが市場の85~70%の時間を占めると推定した、方向性のないフェーズと一致します。一方、市場がトレンドを形成する残りの15~30%の時間では、これらの移動平均が広がり(乖離し)、強気または弱気の方向性が明確になります。この状態は「ワニが目覚める」と表現され、多くのトレーダーが利益を狙うタイミングとされています。
以下に、3本のSMAの計算式を示します。まずは「顎」から見ていきましょう。
ここで
- SMA 13 (Close)は終値の13期間平滑移動平均です。
- シフト:顎線はトレンドを平滑化し、市場の方向性を予測できるように、8期間先にシフトされます。
次は「歯」です。
ここで
- SMA 8 (Close)は終値の8期間平滑移動平均です。
- シフト:歯線は5期間先にシフトされます。
そして最後は「唇」です。
ここで
- SMA 5 (Close)は終値の5期間平滑移動平均です。
- シフト:唇線は3期間先にシフトされます。
ワニが示す特徴は、摂食サイクルに例えることもできます。まず、3つのバッファがすべて混ざっているか、または互いに非常に近い状態から始めると、この段階は「眠りの段階」とも呼ばれ、市場は統合または急激な変動をしているとされます。ウィリアムズはこれを昼寝をしているワニに例え、序文で示唆されているように、このサイクルの段階が最も長く、多くの証券において支配的です。この段階の後に来るのは「目覚め」の段階です。
サイクルのこの段階では、3つのSMAが分岐を始め、通常、示唆的な方向に向かって離れていきます。これにより、3つのラインが特定の方向にトレンドし 始め ますが、その順序(上昇時は唇、歯、顎、下降時はその逆)は必ずしもまだ確立されていない場合もあります。「目覚め」の後に続くのは「食事」の段階です。
この段階では、ラインがさらにきれいに分岐し、強気トレンドでは唇、歯、顎の順序、弱気トレンドでは顎、歯、唇の順序(上から見た順番)が定着し始めます。トレーダーは、これが最も利益を得やすい時期であると見なし、トレンドの方向に従うのが良いタイミングだと考えます。この段階はサイクルの3番目の段階ですが、最終段階ではなく、その後に「満足」の段階が続きます。
「満足」の段階では、3つのSMAが再び収束を始めます。この収束は、トレンドが終了したか、修正段階に入ったことを示唆している可能性があり、トレーダーがこの段階で利益を確定することは有益な選択かもしれません。アリゲーターインジケーターは構造がシンプルで、平滑化された移動平均線を調べることで、市場の現在の状態と潜在的な方向転換を比較的簡単に理解できるツールです。このため、トレーダーはエントリーとエグジットのタイミングをより適切に判断できます。
このような背景を踏まえ、本連載の前回の記事のように、一度に1つの特定の一般的なテクニカル指標を取り上げ、パターンごとにこのインジケーターを掘り下げていきます。新しい読者のために、この記事の冒頭で一目均衡表を紹介しました。その際には11種類のパターンをレビューしましたが、この記事では8種類を取り上げます。パターンごとにインジケーターをレビューすると、トレーダーが見落としがちな非常に一般的なインジケーターの特定の側面が明らかになることがあり、それをトレーダーの武器庫に追加する価値があることが分かります。
さらに、これらのパターンを詳しく見ていくことで、トレーダーが何に焦点を当て、何を無視すべきかを磨き、インジケーターが提供するすべての重要なパターンの相対的な重みと重要性に光を当てることができます。私たちは通常、これらの記事の結論として、各パターンの相対的な重みを最適化します。最適化されたテスト結果を実際の取引環境に活用することも可能ですが、テスト結果が相互検証される可能性があるとしても、トレーダー自身が経験に基づいて各パターンの重みを手動で設定することを推奨します。
添付のコードは、MQL5ウィザードを使用してエキスパートアドバイザー(EA)を作成するためのものです。新しい読者向けには、これを実現する方法についてのガイドがこちらとこちらにあります。このEAは、以前の記事で述べたように、1回の取引で1つのパターンのみ使用できます。各パターンは0からパターン数-1までインデックス付けされるため、m_patterns_usageという入力パラメータで使用するパターンを制御できます。これは親クラスからカスタムシグナルクラスに継承されます。
使用するパターンが1つだけの場合、この入力パラメータのインデックスは、パターンインデックスの2の累乗となります。例えば、パターン0のみを使用する場合、入力パラメータには2^0(つまり1)が設定され、パターン5のみの場合は2^5(つまり32)が設定されます。この入力パラメータは、前述のように複数のパターンを選択するためにも使用できます。この内容はこの記事の最後で詳しく解説します。パターン数が少なくても、非常に多くの組み合わせが可能であることを理解していただけるでしょう。このため、2^0、2^1、...、2^nの累乗に含まれない任意の整数を使用すると、m_patterns_usageの最大値に収まる場合、その整数は複数のパターンを使用していることを意味します。今回のケースでは、8つのパターンのみを使用しているため、m_patterns_usageの最大値は255となります。それでは、パターンを見ていきましょう。
ワニの目覚め(クロスオーバーシグナル)
これはおそらくアリゲーターインジケーターの最も重要なパターンであり、予想どおり、アリゲーターサイクルの最も興味深い段階、つまり「饗宴」段階の始まりである「目覚め」の段階に関するものです。このシグナルは、唇、歯、顎のラインが交差する瞬間に基づいており、トレンドや方向転換の可能性を示唆します。
強気クロスオーバーは、緑の唇のラインが赤い歯のラインと青い顎のラインを上抜けるときに発生します。これは、上昇トレンドの開始を示すことが多いです。逆に、弱気クロスオーバーは、緑の唇のラインが赤い歯のラインと青い顎のラインを下抜けるときに発生し、下降トレンドの始まりを示します。これをMQL5で次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 0. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_0(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X() + 1) < Jaws(X() + 1) && Lips(X()) > Jaws(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X() + 1) > Jaws(X() + 1) && Lips(X()) < Jaws(X())) { return(true); } return(false); }
これはパターン0を示し、このパターンのみでテストを実行するには、入力パラメータm_patterns_usageを1に設定する必要があります。これをおこない、このパターンの取引の可能性を示すために他のEAを最適化しようとすると、いくつかの好ましい結果から次のようなレポートが得られます。
このテスト設定は、2023年の1時間足のUSDCHFです。これらの結果は主に、パターンの閾値の重みと、オープンおよびクローズ条件の閾値を最適化することによって得られています。私たちは予約注文で取引をおこない、テイクプロフィットレベルを設定していますが、ストップロスは設定していません。これらは理想的な条件とは言えませんが、パターン0の動作を実証する目的には十分役立ちます。
食事中のワニ(トレンド追従)
2番目のパターンであるパターン1は、アリゲーターシグナルの本質を捉えており、唇、歯、顎のラインが整列し、特定のトレンドに沿って一定の方向に離れていく動きを示します。これはアリゲーターサイクルの「食事」段階であり、強気の食事は、緑の唇が赤い歯の上に、さらに赤い歯が青い顎の上にあるときに定義されます。これらのラインはすべて上向きですが、平均期間が異なるだけでなく、オフセットも異なるため、ラインが分岐していきます。これらすべての特徴が満たされると、非常に強い強気トレンドが示唆されます。
一方、弱気の食事は、緑の唇が赤い歯の下にあり、赤い歯が青い顎の下にある場合に記録され、3つのSMAすべてが発散(非平行)パターンで下向きに向かっています。強気の場合と同様に、これらの特徴をすべて観察すると、強い弱気のシグナルが示唆されます。これをMQL5では以下のように実装しています。
//+------------------------------------------------------------------+ //| Check for Pattern 1. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_1(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X()) > Teeth(X()) && Teeth(X()) > Jaws(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X()) < Teeth(X()) && Teeth(X()) < Jaws(X())) { return(true); } return(false); }
外国為替ペアUSDCHF、1時間枠、2023年のパターン0と同様の設定での最適化テストの結果、次の結果が得られました。
ゲーターオシレーター信号
ビル・ウィリアムズはアリゲーターインジケーターだけでなく、アリゲーターインジケーターの3つのSMAバッファ間の差をオシレーター形式でヒストグラムとして投影した「ゲーターオシレーター」も考案しています。アリゲーターオシレーターは本質的に非正統的であるため、MQL5に組み込まれているゲーターオシレーター用インジケーターには多少バグがあります。その出力は4つあり、2つのダブル値と2つのカラー値です。これらの数式の定義はよく知られているため、次のようにカスタムシグナルクラス内で独自に実装をおこないます。
// double Upper(int ind) { return(fabs(Jaws(ind) - Teeth(ind))); } color UpperColor(int ind) { return(Upper(ind) >= Upper(ind + 1) ? clrGreen : clrRed); } double Lower(int ind) { m_gator.Refresh(-1); return(-fabs(Teeth(ind) - Lips(ind))); } color LowerColor(int ind) { m_gator.Refresh(-1); return(fabs(Lower(ind)) >= fabs(Lower(ind + 1)) ? clrRed : clrGreen); } //
このパターン(パターン2)は3番目のパターンであり、アリゲーターインジケーターから派生したカスタマイズされた関数を用いて読み取るアリゲーターオシレーターの信号を組み合わせます。そうは言っても、強気のアリゲーター拡大とは、アリゲーターオシレーターの緑色のバーが上向きに拡大し、トレンドが強まっていることを示すときです。逆に、弱気なアリゲーター拡大は、赤いバーが下向きに拡大し、弱気トレンドが強まっていることを示唆しているときです。結果として、赤と緑の混合バーは、市場の統合またはトレンドの弱まりを示すことが多いです。MQL5でパターン2を次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 2. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_2(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && UpperColor(X()) == clrGreen && LowerColor(X()) != clrRed) { return(true); } else if(T == POSITION_TYPE_SELL && LowerColor(X()) == clrRed && UpperColor(X()) != clrGreen) { return(true); } return(false); }
好ましい最適化の結果からのテスト実行では、次のレポートが得られます。
これは、上記と同様のテスト設定で、銘柄はUSDCHF、時間枠は1時間、年は2023年です。これらの結果は相互検証されておらず、パターン2の取引の可能性のみを示しています。上記の「はじめに」で説明したように、m_patterns_usage入力パラメータに整数値4を割り当てて、パターン2のみでEAをテストしました。
顎と唇の乖離と歯と唇の乖離
このパターンは4番目で、インデックスはパターン3です。このパターンは、顎と唇、または歯と唇の間の方向やギャップの大きさの違いに基づいて進行します。強気の乖離は、一定期間の急激な変動後に、唇(緑の線)が歯(赤の線)と顎(青の線)から離れ始める場合です。これは、本質的に潜在的な強気トレンドの早期サインとなります。逆に、唇が顎や歯から下方向に離れ始めると、弱気の乖離となり、市場の停滞を示唆することが多いです。これをMQL5では以下のように実装しています。
//+------------------------------------------------------------------+ //| Check for Pattern 3. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_3(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X()) - fmax(Teeth(X()), Jaws(X())) > Lips(X() + 1) - fmax(Teeth(X() + 1), Jaws(X() + 1))) { return(true); } else if(T == POSITION_TYPE_SELL && fmin(Teeth(X()), Jaws(X())) - Lips(X()) > fmin(Teeth(X() + 1), Jaws(X() + 1)) - Lips(X() + 1)) { return(true); } return(false); }
上記のすべてのパターンで使用されているのと同じ設定でテストすると、簡単な最適化作業から得られたいくつかの好ましい設定から次の結果が得られます。
眠りから目覚めたワニ
5番目のパターンであるパターン4は、相当な期間の統合、またはワニの眠りの後に発生することを意図しています。これは、唇、歯、顎がほぐれ始めることが特徴です。したがって、取引戦略としては、ワニが長期間眠った後、唇、歯、顎が上向きに発散し始めると、強気のシグナルとなり、これは強気のブレイクアウトの兆候となる可能性があります。反対に、弱気シグナルは、同じ3本の線が長期間収束した後に下向きに発散し始める場合、弱気ブレイクアウトの兆候となる可能性があります。MQL5では、これを次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 4. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_4(ENUM_POSITION_TYPE T) { if(Range(X() + 3) <= Spread(X() + 3) && Range(X() + 8) <= Spread(X() + 8)) { if(T == POSITION_TYPE_BUY && Lips(X()) > Lips(X() + 3) && Teeth(X()) > Teeth(X() + 3) && Jaws(X()) > Jaws(X() + 3)) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X()) < Lips(X() + 3) && Teeth(X()) < Teeth(X() + 3) && Jaws(X()) < Jaws(X() + 3)) { return(true); } } return(false); }
m_patterns_usageパラメータに値16を割り当てて、他のパターンと同様の銘柄と時間枠設定でこのパターンのみをテストすると、次の結果が得られます。
ブレイクアウトの確認
パターン5は、アリゲーターラインと同じ方向への価格変動からシグナルを生成し、強いリトレースメントを伴わない継続を示します。このパターンでは、価格がアリゲーターラインを上回り、3つのラインすべてが上向きに傾いている場合、強気のブレイクアウトとなり、買いポジションの継続を示唆します。価格自体に大きな変化はありません。同様に、価格がアリゲーターラインを下回り、3つのラインすべてが下向きに傾いている場合は、弱気の「ブレイクアウト」となり、売りポジションの継続を示します。これをMQL5では以下のように実装しています。
//+------------------------------------------------------------------+ //| Check for Pattern 5. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_5(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Close(X()) > Lips(X()) && Lips(X()) > Lips(X() + 3) && Teeth(X()) > Teeth(X() + 3) && Jaws(X()) > Jaws(X() + 3)) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) < Lips(X()) && Lips(X()) < Lips(X() + 3) && Teeth(X()) < Teeth(X() + 3) && Jaws(X()) < Jaws(X() + 3)) { return(true); } return(false); }
このパターンのみを使用してウィザードで作成さられたEAで取引するには、入力パラメータm_patterns_usageに値32を割り当てる必要があります。このパラメータは、カスタムシグナルクラスの親クラスから継承され、入力項目として「Patterns Used Bitmap」とラベル付けされています。上記のパターンと同様の設定を用いた簡易的な最適化に基づいた好ましい入力設定でテストを実行すると、次のようなレポートが得られます。
ボラティリティシグナル
このボーナスパターンは、他のパターンのように正式にコーディング・テストされていませんが、一般的なプライスアクショントレンドとアリゲーター範囲を組み合わせることで定義できます。このパターンの背後にある主な理論は、次の関数で定義される全体的なアリゲーター範囲です。
double Range(int ind) { return(fmax(fmax(Jaws(ind), Teeth(ind)), Lips(ind)) - fmin(fmin(Jaws(ind), Teeth(ind)), Lips(ind))); }
この範囲は、ボラティリティの代理指標となります。したがって、ボラティリティが高いとは、顎、歯、唇が遠く離れている場合を指し、これは市場のトレンドが非常に強く、正当であることを示します。一般的な価格動向を確認することで、強気シグナル(価格上昇)と弱気シグナル(価格下落)のどちらを推測すべきかを判断するのに役立ちます。一方、ボラティリティが低い場合、必ずしも何らかのシグナルを示すわけではありませんが、オープンポジションの終了タイミングを決定するために使用できます。ボラティリティが低いと、3つのSMAバッファが接近し、レンジ相場を示唆することが多く、市場へのエントリーを待つための指標として使われることが一般的です。しかし、ポジションにおいては、これが決済のタイミングとなる場合があり、さらに、最近のボラティリティの低下が価格トレンドに影響を与えている場合、逆ポジションを開くシグナルとなることがあります。そのため、強気の価格トレンドが弱気から低ボラティリティに変化することは、弱気シグナルの前兆となる可能性があります。同様に、弱気の価格トレンドが低ボラティリティで変化することは、強気のサインを示すことになります。このパターンは他のパターンよりも確実性が低いため、このシグナルをコード化し実装する読者は、他のシグナルと組み合わせて使用することをお勧めします。
ワニの唇のリトレースメントシグナル
パターン6は7番目のパターンで、唇が歯または顎に向かってリトレースメントをおこない、完全に交差することなく反発する状況を指します。この戦略に基づく取引は、唇のラインが歯と顎に向かって動き、その後交差することなく上向きに反発する場合、強気のリトレースメントとみなし、強気トレンドの継続の可能性を示唆します。逆に、唇が歯と顎に向かって動き、交差せずに反発して下降する場合は、弱気のリトレースメントとなり、下降トレンドの継続の可能性を示すことになります。これをMQL5では以下のように実装しています。
//+------------------------------------------------------------------+ //| Check for Pattern 6. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_6(ENUM_POSITION_TYPE T) { if(T == POSITION_TYPE_BUY && Lips(X()) > Lips(X()+1) && Lips(X()+1) < Lips(X()+2) && Lips(X()) > Teeth(X()) && Lips(X()+1) > Teeth(X()+1) && Teeth(X()) > Jaws(X())) { return(true); } else if(T == POSITION_TYPE_SELL && Lips(X()) < Lips(X()+1) && Lips(X()+1) > Lips(X()+2) && Lips(X()) < Teeth(X()) && Lips(X()+1) < Teeth(X()+1) && Teeth(X()) < Jaws(X())) { return(true); } return(false); }
パターン6のみでEAを使用するには、入力パラメータPatterns-Used-Bitmapに、パターンのインデックスである2の6乗に対応する整数値64を割り当てます。このパターンのみを使用してEAを最適化すると、得られる好ましい入力設定の1つによって、以下のレポートが表示されます。
すでに述べたように、これは交差検証されていませんが、パターン6の取引の可能性/能力を示すためにのみここに示されています。
フェイクアウト防止
最後のパターン、パターン7は、市場のブレイクアウト時にアリゲーターの顎、歯、唇が一列に並んでいるかどうかを観察することから生まれます。このパターンの目標は、フェイクアウトの防止です。したがって、取引戦略としては、強気のブレイクアウトが発生した際に、アリゲーターのラインが大きく乖離していない場合、これは市場が反転して再び下落する可能性があるため、フェイクアウトの警告となります。逆に、アリゲーターラインが下落時に接近している場合は、ミラー価格ブレイクアウトとなり、通常、トレーダーはショートポジションを取らないほうが良いことを示唆します。これらのフェイクアウトは、ある意味でその逆のシグナルを示唆しているため、この目的において、MQL5でこのパターンを次のように実装します。
//+------------------------------------------------------------------+ //| Check for Pattern 7. | //+------------------------------------------------------------------+ bool CSignalAlligator::IsPattern_7(ENUM_POSITION_TYPE T) { if(Range(X()) <= Spread(X())) { if(T == POSITION_TYPE_BUY && Close(X()) < fmin(fmin(Jaws(X()), Teeth(X())), Lips(X())) && Close(X()+1) > fmin(fmin(Jaws(X()+1), Teeth(X()+1)), Lips(X()+1))) { return(true); } else if(T == POSITION_TYPE_SELL && Close(X()) > fmax(fmax(Jaws(X()), Teeth(X())), Lips(X())) && Close(X()+1) < fmax(fmax(Jaws(X()+1), Teeth(X()+1)), Lips(X()+1))) { return(true); } } return(false); }
このパターンをEAで使用するには、使用するパターンの入力に整数128を割り当てる必要があります。これを実行し、上記の他のパターンと同様に、銘柄USDCHF、時間枠1時間、テスト期間2023で最適化すると、推奨される入力設定の一部を使用したときに次のレポートが表示されます。
すべてのパターンを組み合わせる
EAにおけるすべてのパターンの組み合わせとその潜在的な使用については、これが適切なのか、それともトレーダーが単一のパターンに固執すべきかという議論が生じます。私は、ライブアカウントでさまざまなパターンに最適化された重みを使用することには警告してきました。重み付けは、トレーダーがそれぞれのインジケーターに関する自身の経験に基づいて定数として設定するのが最良だと考えているからです。しかし、この議論には他にも考慮すべき点があります。
まず最初に挙げるべきは、コンテキスト認識とシンプルさのバランスに関する議論です。アリゲーターインジケーターが比較的新しいものである場合、複数のパターンを追跡することで、アリゲーターに関連する市場の全体サイクル(統合、トレンドの開始、トレンドの継続、トレンドの終了)について、より微細な理解を深めることができるという主張が成り立つかもしれません。これにより、各フェーズにおけるリスク・リワードのプロファイルや、フェーズが移行する際の微妙な変化を洞察することが可能になります。
この情報を観察し収集することは手動取引には理想的ですが、本連載で私たちが活用しようとしているのは必ずしもそれではありません。しかし、シンプルさを重視する論拠は、1つのパターン(例えば「フィーディング」やトレンドの段階)に焦点を当てることで意思決定をシンプルにできるという点です。手動で取引をおこなう場合、このシンプルさは重要な論点となりますが、EAを使用する場合、特に計算リソースとメモリリソースがごくわずかであることを考慮すれば、これは大きな懸念事項ではありません。
まとめると、マルチパターンアプローチは探索と学習に適しており、トレーダーが何が機能するのか、どのように機能するのか、そしてなぜ機能するのかを十分に理解すれば、集中アプローチが適していると言えます。これらの議論や注意点にもかかわらず、私たちはさまざまなパターンを最適化し、それらすべてを組み合わせた場合に最も効果的な重み付けを見つけ出します。その際、複数のパターンを使用することになるため、入力パラメータ「パターン使用ビットマップ」は0~255の範囲で最適化されます。この最適化から得られた好ましい入力設定の結果は、次のレポートに示されています。
ここでも、上記で個別にテストしたすべてのパターンと同様に、USDCHFの銘柄で2023年の1時間枠を使用しています。
結論
ビル・ウィリアムズのアリゲーターインジケーターを、パターンごとにカスタムシグナルクラスで調査しました。その目的は、各パターンの相対的な重要性を把握し、すべてのパターンを組み合わせて使用した場合、個別に使用するよりも効果的かどうかを検証することです。言い換えれば、「総和は部分よりも大きい」という議論に対する評価です。今回のテストレポートからは、すべてのパターンを組み合わせた場合の期待外れな結果が示されており、「少ないほど良い」と考えられますが、最終的な結論を下す前に、2023年のテスト期間を超えた長期間にわたる広範なテストが必要です。
MetaQuotes Ltdにより英語から翻訳されました。
元の記事: https://www.mql5.com/en/articles/16329





- 無料取引アプリ
- 8千を超えるシグナルをコピー
- 金融ニュースで金融マーケットを探索