Zig Zag

Zig Zag is a price chart overlay that simplifies the up and down movements and transitions based on a percent change smoothing threshold. [Discuss] 💬

chart for Zig Zag

// C# usage syntax
IEnumerable<ZigZagResult> results =
  quotes.GetZigZag(endType, percentChange);


endType EndType - Determines whether Close or High/Low are used to measure percent change. See EndType options below. Default is EndType.Close.

percentChange decimal - Percent change required to establish a line endpoint. Example: 3.5% would be entered as 3.5 (not 0.035). Must be greater than 0. Typical values range from 3 to 10. Default is 5.

Historical quotes requirements

You must have at least two periods of quotes to cover the warmup periods, but notably more is needed to be useful.

quotes is a collection of generic TQuote historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See the Guide for more information.

EndType options

EndType.Close - Percent change measured from Close price (default)

EndType.HighLow - Percent change measured from High and Low price



🚩 Warning: depending on the specified endType, the indicator cannot be initialized if the first Quote in quotes has a High,Low, or Close value of 0 (zero).

👉 Repaint warning: the last line segment will always be redrawn back to the last known pivot. Do not attempt to calculate incremental values since previous values may change based on newer quotes.


Date DateTime - Date from evaluated TQuote

ZigZag decimal - Zig Zag line for percentChange

PointType string - Zig Zag endpoint type (H for high point, L for low point)

RetraceHigh decimal - Retrace line for high points

RetraceLow decimal - Retrace line for low points


See Utilities and helpers for more information.


Results can be further processed on ZigZag with additional chain-enabled indicators.

// example
var results = quotes

This indicator must be generated from quotes and cannot be generated from results of another chain-enabled indicator or method.