# ZigZag

`zigzag`

Swing highs and lows, each shown only once a reversal has confirmed it.

## Inputs

| Name | Type | Default | Range |
| --- | --- | --- | --- |
| depth | int | 12 | 2 to 200 |
| backstep | int | 3 | 0 to 100 |
| atr_period | int | 14 | 1 to 500 |
| atr_mult | float | 1 | 0.1 to 10 |

## Outputs

| Name | Kind |
| --- | --- |
| up | value |
| down | value |
| offset | value |
| pivot | value |
| direction | value |

Warm-up: max(depth - 1, atr_period - 1) + backstep bars (16 at the defaults).

Repaints: Yes.

## Formula

A bar is a low (high) candidate when its low (high) is the lowest (highest) of the last depth bars. A candidate is final after backstep more bars, once weaker candidates of the same kind within backstep bars are cleared.

One swing is pending at a time. A stronger candidate of the same kind replaces it. An opposite candidate at least atr_mult average true ranges away confirms it.

The confirmed swing is written on the confirming bar: up or down holds its price and offset the bars back to it. pivot is the last confirmed price, direction is 1 after a low and -1 after a high. The swing pending at the end is never written.
