Keltner Channels

get_keltner(quotes, ema_periods=20, multiplier=2.0, atr_periods=10)


name type notes
quotes Iterable[Quote] Iterable of the Quote class or its sub-class.
See here for usage with pandas.DataFrame
ema_periods int, default 20 Number of lookback periods (E) for the center line moving average. Must be greater than 1 to calculate.
multiplier float, default 2.0 ATR Multiplier. Must be greater than 0.
atr_periods int, default 10 Number of lookback periods (A) for the Average True Range. Must be greater than 1 to calculate.

Historical quotes requirements

You must have at least 2×N or N+100 periods of quotes, whichever is more, where N is the greater of E or A periods, to cover the convergence periods. Since this uses a smoothing technique, we recommend you use at least N+250 data points prior to the intended usage date for better precision.

quotes is an Iterable[Quote] collection of historical price quotes. It should have a consistent frequency (day, hour, minute, etc). See the Guide for more information.



Convergence warning: The first N+250 periods will have decreasing magnitude, convergence-related precision errors that can be as high as ~5% deviation in indicator values for earlier periods.


name type notes
date datetime Date
upper_band float, Optional Upper band of Keltner Channel
center_line float, Optional EMA of Close price
lower_band float, Optional Lower band of Keltner Channel
width float, Optional Width as percent of Centerline price. (upper_band-lower_band)/center_line


See Utilities and Helpers for more information.


from stock_indicators import indicators

# This method is NOT a part of the library.
quotes = get_historical_quotes("SPY")

# Calculate Keltner(20)
results = indicators.get_keltner(quotes, 20,2.0,10)

About Keltner Channels

Created by Chester W. Keltner, Keltner Channels are based on an EMA centerline and ATR band widths. See also STARC Bands for an SMA centerline equivalent. [Discuss] 💬