MT5のZigZag設定の意味|Deviationは%ではなくポイント

MT5のZigZagには Depth・Deviation・Back Step の3つの設定があり、初期値は 12・5・3 です。

ここで1つ、解説記事の間で説明が食い違っている項目があります。Deviation は「何%動いたら転換とみなすか」ではありません。単位はポイントです。

この記事は、MT5に同梱されている標準のZigZagのソース(MQL5\Indicators\Examples\ZigZag.mq5)を読んで、各設定が実際に何をしているかを確認した内容です。

(確認環境:MetaTrader 5 / Windows 11)

3つの設定と初期値

ソース上の宣言はこうなっています。

input int InpDepth    =12;  // Depth
input int InpDeviation=5;   // Deviation
input int InpBackstep =3;   // Back Step

画面に出る名前は「Back Step」(半角スペースあり)です。

Depth:どの範囲から極値を探すか

安値側の処理はこうなっています。

val = low[Lowest(low, InpDepth, shift)];

Lowest は指定した本数の中で最も安い足を返す関数です。つまり Depth は「直近何本の中から最安値を探すか」を決めています。

  • 大きくする — 広い範囲から選ぶので、拾う山・谷が減り、線が大きくなる
  • 小さくする — 狭い範囲で選ぶので、細かい上下まで拾う

3つの中で見た目がいちばん変わるのはこの設定です。調整するならまずここです。

🔴 Deviation:%ではなくポイント

該当する行はこれです。

if((low[shift] - val) > InpDeviation * _Point)
   val = 0.0;

_Point はその銘柄の最小の価格単位です。InpDeviation * _Point なので、比較しているのは価格差であって、%ではありません。

処理の中身は「現在の足の安値が、候補にした安値から Deviation ポイント以上離れていたら、その候補を捨てる」というものです。

初期値5は実質ほとんど効かない

ここが実用上の要点です。

銘柄の表示桁 1ポイント Deviation=5 は
小数点以下5桁(ドルストレート) 0.00001 0.5pips
小数点以下3桁(円絡み) 0.001 0.5pips

0.5pips です。通常の値動きに対して極めて小さいため、初期値のままでは線の形にほとんど影響しません。

「Deviationを上げるとノイズが減る」という説明を見かけますが、%として数%を想定した数字を入れても、ポイント単位では意味のある大きさになりません。波の粗さを変えたいなら Depth を触ってください。

なお _Point は銘柄ごとに違います。自分の銘柄の桁数は気配値表示で右クリック →「銘柄仕様」で確認できます。

🔴 Back Step:待つのではなく、遡って消す

「新しい極値ができてから何本待って確認するか」と説明されることがありますが、ソース上の処理は違います。

for(back=1; back<=InpBackstep; back++)
  {
   res = LowMapBuffer[shift-back];
   if((res!=0) && (res>val))
      LowMapBuffer[shift-back] = 0.0;
  }

やっているのは「直前 Back Step 本の中に既に記録してある安値候補を見て、今回の候補より高いものを消す」という処理です。

つまり待つ処理ではなく、既に打った点を後から取り消す処理です。近い位置に点が連続して並ばないよう、後から間引いています。

値を大きくすると、より広い範囲の古い候補が消されます。結果として点の間隔が空きます。

この構造から分かる最大の注意点

Back Step の処理が示しているとおり、ZigZagは一度打った点を後から取り消します。

これはリアルタイムで使う場合に効いてきます。チャートの右端に見えている最後の山・谷は、まだ確定していません。値動きが続けば、その点は消えて別の位置に移ります。

過去のチャートを見ると綺麗に天底を捉えているように見えるのは、確定した後の形だけが残っているからです。同じ精度でリアルタイムに点が出ているわけではありません。

この性質はCSVに書き出して検証する時に致命的になります。書き出した末尾付近のデータは、後から変わる値を含んでいるためです。扱い方はMT5のZigZagをCSVに出力する方法にまとめています。

設定の決め方

  1. Depth だけを動かす — 拾いたい波の大きさに合わせる
  2. Deviation は初期値のままでよい — 効かせたいなら pips に換算して桁を合わせる
  3. Back Step は点が近すぎる時だけ上げる

3つを同時に動かさないでください。どれが効いたのか分からなくなります。

波の数え方そのものに使う場合の注意はMT5のエリオット波動ツールの使い方で扱っています。

まとめ

  1. 初期値は Depth 12・Deviation 5・Back Step 3
  2. Depth=何本の中から最安値・最高値を探すか。見た目を変えるのはここ
  3. 🔴 Deviation はポイント単位。%ではない。初期値5は0.5pipsで実質効かない
  4. 🔴 Back Step は「待つ」処理ではなく、既存の点を遡って消す処理
  5. 右端の点は確定していない。後から消えて位置が変わる

ZigZagが内部で使っている「指定本数の中の極値を探す」処理は、自分でも書けます。MQL5で高値・安値を探す方法にまとめました。

設定を決めたZigZagの山と谷で、押し目が実際に何%戻っているかを測った例は押し目は何%戻るのか|ZigZagのCSVで実測するにあります。

本記事はMT5に同梱された標準ZigZagのソースを読んで確認した内容であり、特定の売買を推奨するものではありません。カスタム版のZigZagでは実装が異なる場合があります。投資判断はご自身の責任で行ってください。