# `TAlib.Indicators.CCI`
[🔗](https://github.com/benyblack/talib/blob/main/lib/indicators/cci.ex#L1)

Commodity Channel Index [Wikipedia](https://en.wikipedia.org/wiki/Commodity_channel_index).

With the typical price `TP = (high + low + close) / 3`:

`CCI = (TP - SMA(TP, period)) / (0.015 * mean_deviation)`

where the mean deviation is the average of `|TP - SMA|` across the
window. Bars are maps with at least `:high`, `:low` and `:close`. See
`TAlib` for the remaining conventions: chronological order, oldest
first, series aligned with the input, `nil` when there is not enough
data or the deviation is zero.

# `cci`

```elixir
@spec cci([map()], pos_integer()) :: float() | nil
```

Calculate the latest CCI value.

## Parameters

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

## Examples

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

# `cci_list`

```elixir
@spec cci_list([map()], pos_integer()) :: [float() | nil]
```

Calculate the full CCI series.

Returns a list aligned with `bars`: the first `period - 1` entries are
`nil`, and every later entry is the CCI of the window ending at that
point.

## Parameters

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

## Examples

    iex> bars = [
    ...>   %{high: 12, low: 8, close: 10},
    ...>   %{high: 11, low: 9, close: 10},
    ...>   %{high: 13, low: 9, close: 12}
    ...> ]
    iex> TAlib.Indicators.CCI.cci_list(bars, 2) |> Enum.map(fn
    ...>   nil -> nil
    ...>   x -> Float.round(x, 4)
    ...> end)
    [nil, nil, 66.6667]

---

*Consult [api-reference.md](api-reference.md) for complete listing*
