TAlib.Indicators.ATR (TAlib v0.13.0)

Copy Markdown View Source

Average True Range Wikipedia.

The True Range of a bar is max(high - low, |high - prev_close|, |low - prev_close|) (just high - low for the first bar). ATR is Wilder's smoothed average (RMA) of the True Range series, seeded with the SMA of the first period True Ranges — the standard TA-Lib convention.

Bars are maps with at least :high, :low and :close; extra keys are ignored. See TAlib for the remaining conventions: chronological order, oldest first, series aligned with the input, nil when there is not enough data.

Summary

Functions

Calculate the latest Average True Range.

Calculate the full ATR series.

Warm up streaming ATR state from history.

The Normalized ATR: ATR / close * 100, in percent.

Advance streaming ATR state by one bar (a map with at least :high, :low and :close), in O(1).

The True Range of every bar: max(high - low, |high - prev_close|, |low - prev_close|) (high - low for the first bar).

Functions

atr(bars, period \\ 14)

@spec atr([map()], pos_integer()) :: float() | nil

Calculate the latest Average True Range.

Parameters

  • bars: list of bars, oldest first.
  • period: lookback window, a positive integer (default 14).

Examples

iex> bars = [
...>   %{high: 12, low: 8, close: 10},
...>   %{high: 11, low: 9, close: 10},
...>   %{high: 13, low: 9, close: 12}
...> ]
iex> TAlib.Indicators.ATR.atr(bars, 2)
3.0

atr_list(bars, period \\ 14)

@spec atr_list([map()], pos_integer()) :: [float() | nil]

Calculate the full ATR series.

Returns a list aligned with bars: the first period - 1 entries are nil, and every later entry is the Wilder-smoothed average of the True Ranges as of that point.

Parameters

  • bars: list of bars, oldest first.
  • period: lookback window, a positive integer (default 14).

Examples

iex> bars = [
...>   %{high: 12, low: 8, close: 10},
...>   %{high: 11, low: 9, close: 10},
...>   %{high: 13, low: 9, close: 12}
...> ]
iex> TAlib.Indicators.ATR.atr_list(bars, 2)
[nil, nil, 3.0]

init(bars, period \\ 14)

@spec init([map()], pos_integer()) ::
  {TAlib.Indicators.ATR.State.t(), [float() | nil]}

Warm up streaming ATR state from history.

Returns {state, values} with values the full ATR series of history (identical to atr_list/2), and state ready to continue it one bar at a time in O(1) via next/2. History needs at least period + 1 bars.

Examples

iex> bars = [
...>   %{high: 12, low: 8, close: 10},
...>   %{high: 11, low: 9, close: 10},
...>   %{high: 13, low: 9, close: 12}
...> ]
iex> {state, values} = TAlib.Indicators.ATR.init(bars, 2)
iex> values
[nil, nil, 3.0]
iex> {_state, 3.5} = TAlib.Indicators.ATR.next(state, %{high: 14, low: 10, close: 11})

natr(bars, period \\ 14)

@spec natr([map()], pos_integer()) :: float() | nil

The Normalized ATR: ATR / close * 100, in percent.

iex> bars = [
...>   %{high: 12, low: 8, close: 10},
...>   %{high: 11, low: 9, close: 10},
...>   %{high: 13, low: 9, close: 12}
...> ]
iex> TAlib.Indicators.ATR.natr(bars, 2) |> Float.round(4)
25.0

next(state, bar)

@spec next(TAlib.Indicators.ATR.State.t(), map()) ::
  {TAlib.Indicators.ATR.State.t(), float() | nil}

Advance streaming ATR state by one bar (a map with at least :high, :low and :close), in O(1).

iex> {state, _} = TAlib.Indicators.ATR.init([%{high: 12, low: 8, close: 10}, %{high: 11, low: 9, close: 10}, %{high: 13, low: 9, close: 12}], 2)
iex> {_state, value} = TAlib.Indicators.ATR.next(state, %{high: 14, low: 10, close: 11})
iex> value
3.5

true_range(bars)

@spec true_range([map()]) :: [number()]

The True Range of every bar: max(high - low, |high - prev_close|, |low - prev_close|) (high - low for the first bar).

iex> bars = [
...>   %{high: 12, low: 8, close: 10},
...>   %{high: 11, low: 9, close: 10},
...>   %{high: 13, low: 9, close: 12}
...> ]
iex> TAlib.Indicators.ATR.true_range(bars)
[4, 2, 4]