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に出力する方法にまとめています。
設定の決め方
- Depth だけを動かす — 拾いたい波の大きさに合わせる
- Deviation は初期値のままでよい — 効かせたいなら pips に換算して桁を合わせる
- Back Step は点が近すぎる時だけ上げる
3つを同時に動かさないでください。どれが効いたのか分からなくなります。
波の数え方そのものに使う場合の注意はMT5のエリオット波動ツールの使い方で扱っています。
まとめ
- 初期値は Depth 12・Deviation 5・Back Step 3
- Depth=何本の中から最安値・最高値を探すか。見た目を変えるのはここ
- 🔴 Deviation はポイント単位。%ではない。初期値5は0.5pipsで実質効かない
- 🔴 Back Step は「待つ」処理ではなく、既存の点を遡って消す処理
- 右端の点は確定していない。後から消えて位置が変わる
ZigZagが内部で使っている「指定本数の中の極値を探す」処理は、自分でも書けます。MQL5で高値・安値を探す方法にまとめました。
設定を決めたZigZagの山と谷で、押し目が実際に何%戻っているかを測った例は押し目は何%戻るのか|ZigZagのCSVで実測するにあります。
本記事はMT5に同梱された標準ZigZagのソースを読んで確認した内容であり、特定の売買を推奨するものではありません。カスタム版のZigZagでは実装が異なる場合があります。投資判断はご自身の責任で行ってください。


