注意!このZigZagインジケーターのバージョンは、ZigZagコードに基づいており、著者であるPPCの許可を得て公開しています。私はこのバージョンをテストし、アルゴリズムの誤りを修正しました。
このコードは、MetaTrader 4用のZigzagインジケーターのMQL5バージョンです。
注意!AlexSTAL_OutsideBar.mqhライブラリは、MetaTrader 5クライアントターミナルの..
MQL5\Includeフォルダに配置する必要があります。
これで終わり?
ZigZagは、価格チャートを圧縮したようなものだと思います。ZigZagは、バーの価格(例えば、終値)や、高値/安値を用いて計算できます(最も一般的に使われる方法)。
MetaQuotesが提案する標準のZigZagを使っていると、いくつかの誤りを見つけました。主な問題は、標準のZigZagが外部バーのケースを処理しないことです。
2007年に、Rashid Umarov(Rosh)が、外部バー処理に対応したZigzag2 Rコードを公開しました(DRAW_ZIGZAGスタイルの代わりにDRAW_SECTION)。
では、「正しい」ZigZagの実装の特徴を定義してみましょう:
- 高値と安値は厳密に交互に出現すべきです。
- 次の(反対の)安値までの右側にあるすべてのバーの中で、高値は常に高い(または等しい)必要があります。
- 次の(反対の)高値までの左側にあるすべてのバーの中で、安値は常に低い(または等しい)必要があります。
具体例を考えてみましょう(EURUSD, H1, 2006年12月8-13日)。ここでは、外部バーを含む2つのケースがあります。典型的なZigZagは「正しい」画像を構築できません。
![図1. 入力パラメータ[12;5;3]と[12;0;0]の典型的なZigZag 図1. 入力パラメータ[12;5;3]と[12;0;0]の典型的なZigZag](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923773916-zz_011.webp)
図1.典型的なZigZag(入力パラメータ[12;5;3]と[12;0;0])
![図2. 入力パラメータ[12;5;3]のZigzag2 R 図2. 入力パラメータ[12;5;3]のZigzag2 R](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923774923-zz_031.webp)
図2. Zigzag2 R(入力パラメータ[12;5;3])
![図3. 入力パラメータ[12;0;0]のZigzag2 R 図3. 入力パラメータ[12;0;0]のZigzag2 R](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923775902-zz_021.webp)
図3. Zigzag2 R(入力パラメータ[12;0;0])
一見、正しい構築が図3に示されていますが、いくつかの特徴があります:
- この場合、入力パラメータのおかげで正しく構築されていますが、一般的にはアルゴリズムは任意のパラメータで機能する必要があります。
- 左側の外部バーは正しくありません。バーの高値/安値形成の順序が原因です:

ZigZagセグメントはこのように構築される必要があります。
私は以下のZigZagアルゴリズムを多くテストしました:ZigZag MT3、ZigZag、Zigzag R、Zigzag2 R、ZigZag_NK、ZigZag_ZUP89_nen、ZigZag_new_nen4、CzigZag、Swing_ZZ_1、DT_ZZ_nen、ZigZag_Talex、Reverse_ZZ、Points_ZZ_1、i_MF_Fractal_ZZ_3in1、ang_Amp_ZZ、ZigzagFr_v1、NonLagZigZag_v2、ZZ_FF_v3、ZigZag Ensign、ZigZag tauber、SQZZ Товаровед、ZZ_2L_nen wellx、Channel ZZ、Azzx_larryzz_3_0、RPoint、RPoint-m v2、ZigZagTF。しかし、どれも問題を正しく解決していませんでした。
このインジケーターでの図は以下の通りです:
![図4. 入力パラメータ[12;0]のプロフェッショナルZigZag 図4. 入力パラメータ[12;0]のプロフェッショナルZigZag](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923777684-zz_051.webp)
図4. プロフェッショナルZigZag(入力パラメータ[12;0])
![図5. 入力パラメータ[23;0]のプロフェッショナルZigZag 図5. 入力パラメータ[23;0]のプロフェッショナルZigZag](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923778688-zz_061.webp)
図5. プロフェッショナルZigZag(入力パラメータ[23;0])
このバージョンのいくつかの特徴:
- ワンパスアルゴリズム
- 最後のセグメントのみを再計算して再描画します(履歴更新を除いて、セグメントはキャンセルできません)
- バー内の計算のための最適化アルゴリズムがあります(未完成のバーの中で価格が変わった場合、または価格変化がMinMotion入力パラメータで定義された閾値未満の場合、ティックの再計算は行いません)
- 高値/安値形成の順序のための2つのアルゴリズムがあります:バータイプを使用するもの(速いが正確ではない)、および下位時間枠からのデータを使用するもの(履歴が必要で、その存在と正確さを確認する必要があります。または、OutsideBarライブラリを修正する必要があります)
ProExtraバージョンは公開されていません。なぜなら、MetaTrader 5のクオートの正確性が確認されていないからです。
以下はZigZagの不正確な構築の追加例です:
![図6. EURUSD, H1, 11月29日-12月7日。 (赤い線:入力パラメータ[7;0;0]のZigZag。青い線:入力パラメータ[7;0;0]のZigzag2 R。) 図6. EURUSD, H1, 11月29日-12月7日。 (赤い線:入力パラメータ[7;0;0]のZigZag。青い線:入力パラメータ[7;0;0]のZigzag2 R。)](https://dailyforexmap.s3.ap-northeast-1.amazonaws.com/forum/202511/1763923779494-zz_071.webp)
図6. EURUSD, H1, 11月29日-12月7日。 (赤い線:ZigZag(入力パラメータ[7;0;0])。青い線:Zigzag2 R(入力パラメータ[7;0;0])。)

図7. EURUSD, H1, 2010年11月29日-12月7日。ZigZagセグメントの正しい構築。
結論
残念ながら、このバージョンは完璧ではありませんが、私は改善に取り組んでいます。
チャンネルアルゴリズム(iHighest/iLowest)のために、時々高値をスキップしてしまうことがあります。
このインジケーターのバグや機能についてお知らせください。
コメント 0