MultiZigZagは、2005年から2006年にかけてMetaTrader 4と共に提供されたジグザグアルゴリズムに基づいています。
このアルゴリズムは非常に優れたもので、多くのカスタムインジケーターでも使用されています。最初にこのアルゴリズムをMQL4に翻訳したRoshさんには感謝の意を表したいです。このアルゴリズムの発明者について知っている方がいれば、コメントで名前やニックネームを教えてください。また、以前はどの言語で書かれていたのか、どのトレーディングプラットフォームで使われていたのかも興味があります。
初期の2005-2006年版の主な欠点は以下の通りです:
- 1) 各ティックごとにジグザグをフル再計算するため、プロセッサに大きな負担がかかり、低スペックのPCでは市場の激しい動きの際にフリーズしてしまうことがありました。
- 2) 描画が不正確で、ジグザグの折れ線が「空中」に浮いてしまい、バーの最大値(最小値)に結び付いていなかったことです。概念的には、ジグザグはチャート上での最大値(最小値)を正確に表示する必要があります。
- 3) 過去の履歴をスクロールしようとするとジグザグが不安定になり、チャートに視覚的に結び付かない状態で描画されてしまいます。
このバージョンのジグザグは、上記の欠点がすべて解消されています。最新の3本のジグザグのみが再計算され、再計算は価格がゼロバーの計算部分から外れたときにのみ行われます。つまり、ゼロバーの最小値または最大値がゼロ化されたとき、新しいバーが現れたとき、または履歴が読み込まれるときです。
各ジグザグは2つのバッファを使用しています。1つは最大値用、もう1つは最小値用です。これにより、1つのバーで最大値と最小値を同時に表示できます。また、2つの空きバッファがありますので、希望する方はコードを書き加えることができます。これはMQL4プログラマーの初学者にとって良い学びの機会となるでしょう。また、ジグザグを開発されたシステムに組み込む際に、空きバッファを他のタスクに利用することも可能です。
大きな時間枠のジグザグの計算と描画は、icustom()関数を使用せずに実装されています。自動化の目的でインジケーターバッファを捨てることもでき、その場合は全ての時間枠および任意の数の銘柄に対して同時にジグザグを計算することができます。十分なRAMメモリがあれば実現可能です。icustom()関数を使用せずに計算を行うことで、例えば、Gartleyパターンなどを現在の時間枠や選択した任意の時間枠、さらには複数の時間枠で同時に検索することが可能になります。
パラメーター
ほとんどの外部パラメーターは文字列変数です。カンマで区切られたパラメーターが各ジグザグの文字列変数に書かれています。最初の数字は最初のジグザグ、2番目は2番目、3番目は3番目のジグザグ用です。カンマで区切られています。
ExtDepth、ExtDeviation、ExtBackstepはジグザグの標準パラメーターです。
もしExtDepth=0に設定すると、対応するジグザグは表示されません。
ExtMaxBar - ジグザグが計算されるバーの数です。GrossPeriod - ジグザグ計算に使用するチャートの時間枠を分単位で指定します。もし0を指定すると、現在の時間枠でジグザグが計算されます。
指定できる値は0-1-5-15-30-60-240-1440-10080-43200です。ExtReCalculate - リアルタイムモードで再計算されるジグザグの極値の数で、0から始まります。これは大きな時間枠からのジグザグに使用されます。このパラメーターは変更しないことをお勧めします。
デフォルトでは、ジグザグはH1-H4-D1から表示されます。ジグザグは1分足から日足まで表示され、D1時間枠で描画されるジグザグはD1時間枠のデータからのみ表示されます。大きな時間枠または現在の時間枠に基づいたジグザグのみが描画されます。
画像の例では、H1のジグザグはアクア色、H4は赤、D1は黄色で描画されています。
