Origins of the Keltner Channel
Keltner Channels were named after their creator, Chester W. Keltner, an experienced grain trader and market technician. He first introduced the concept in his 1960s book “How to Make Money in Commodities.” Originally, the channels were referred to as the “10-Day Moving Average Trading Rule.”
Chester’s original version was based on a 10-day simple moving average of the typical price (average of high, low, and close), and the channel lines were drawn using a fixed range defined by the high and low prices over the past 10 days.
They were developed with the aim of comparing today’s prices with yesterday’s prices. The absence of new highs indicates a downtrend, while the absence of new lows indicates an uptrend. This method of trend identification is often used in conjunction with the Minor-Trend Rule. The Minor Trend Rule states that the minor trend is bullish if the daily trend sells above its most recent high; conversely, the minor trend is bearish if the daily trend sells below its most recent low.
The study consists of a moving average (center line, CL) and two channel lines (band, BND). The channel lines are drawn by adding to and subtracting from the current moving average value the product of a constant (percent/100.0) multiplied by the average true range of each bar.
Over time, the concept of Keltner Channels has been refined and evolved. In the modern version, the center line is often based on a 20-day simple moving average of the closing price, and the channel lines are calculated using the Average True Range (ATR), a more sophisticated measure of volatility. The use of ATR adds more flexibility and adaptability to the channels, allowing them to better reflect the market’s volatility.
Their evolution reflects the continuous innovation and adaptation that characterizes the field of technical analysis. From Keltner’s initial idea, grounded in his practical trading experience, to the modern computational implementation, they have stood the test of time as a valuable tool for market analysis. Their simplicity, effectiveness, and adaptability continue to make them a relevant and widely-used indicator in today’s trading world.
Mathematical Construction
Keltner Channels are a volatility-based technical analysis indicator. They consist of three lines:
- Center Line (CL): This is a simple moving average of the closing prices. The period of this moving average can be chosen based on the trader’s preference, but a common choice is a 20-day period.
Formula: \text{CL} = \text{SMA}(\text{Close}, N)
Where:- SMA stands for Simple Moving Average
- Close represents the closing prices
- N is the number of periods for the moving average (commonly 20)
- Upper Channel Line (UCL): This line is calculated by adding a multiple of the Average True Range (ATR) to the center line. The ATR is a measure of market volatility and it’s usually calculated over a 10 to 20 day period. The multiple is often set to 2, but this can be adjusted based on the trader’s preference.
Formula: \text{UCL} = \text{CL} + (\text{ATR} \times \text{Multiplier})
Where:- ATR stands for Average True Range
- Multiplier is the chosen multiple (commonly 2)
- Lower Channel Line (LCL): This line is calculated by subtracting a multiple of the ATR from the center line.
Formula: \text{LCL} = \text{CL} – (\text{ATR} \times \text{Multiplier})
In simple terms, the center line is an average of the closing prices over a certain period. The upper and lower channel lines are drawn a certain distance from the center line, with the distance being determined by the market’s volatility (measured by the ATR) and a chosen multiplier.
The Keltner Channel will expand during periods of high volatility and contract during periods of low volatility, providing visual cues about the market’s volatility. The position of the price relative to the channels can also give traders insights into potential overbought or oversold conditions.
Purpose and Design
Keltner Channels serve multiple purposes in technical analysis. They are designed to help traders identify potential buy and sell signals, gauge market volatility, and understand the market’s trend direction.
As we have seen, the design of Keltner Channels is such that it consists of three lines: the center line, which is a moving average of the closing prices, and the upper and lower channel lines, which are set a certain distance from the center line based on the market’s volatility. This design allows Keltner Channels to adapt to changing market conditions..
When it comes to a Keltner Channel strategy, traders often look for price breakouts above the upper channel line or below the lower channel line as potential trading signals. For instance, a breakout above the upper channel line could be seen as a bullish signal, suggesting a potential opportunity to go long. Conversely, a breakout below the lower channel line could be seen as a bearish signal, suggesting a potential opportunity to go short. We look at keltner trading strategies in more detail in the next section
How to Find Trading Signals with Keltner Channels
Keltner Channels can help traders identify potential trading signals. Here are some strategies that traders often use:
1. Channel Breakouts and Breakdowns
One of the most common Keltner Channel strategies involves looking for breakouts and breakdowns. A breakout occurs when the price closes above the upper channel line, which could be a bullish signal. Conversely, a breakdown occurs when the price closes below the lower channel line, which could be a bearish signal. Traders might consider entering a long position after a breakout or a short position after a breakdown.
2. Reversals at the Channel Lines
Another strategy involves looking for reversals at the channel lines. If the price reaches the upper channel line and then starts to turn down, it could be a bearish reversal signal. Similarly, if the price reaches the lower channel line and then starts to turn up, it could be a bullish reversal signal. Traders might consider entering a short position after a reversal at the upper channel line or a long position after a reversal at the lower channel line.
3. The Squeeze
The squeeze is a situation where the upper and lower channel lines come close together, indicating a period of low volatility. A squeeze could be a sign that a significant price move is about to occur. Traders might watch for a breakout or breakdown after a squeeze as a potential trading signal.
It’s important to note that these signals should not be used in isolation. They should be confirmed with other technical analysis tools or indicators. For example, a trader might use a momentum indicator like the Relative Strength Index (RSI) to confirm a breakout or breakdown signal or look out for various candle pattern formations.
Keltner Channels vs Bollinger Bands
One common comparison made is Keltner Channels vs Bollinger Bands. Both are volatility-based indicators that consist of a center line and two outer lines. However, while Bollinger Bands are based on standard deviations from a moving average, Keltner Channels use the Average True Range (ATR) to set the channel width. This difference can lead to different interpretations of market conditions, and some traders may prefer one over the other depending on their trading style and strategy.
Feature | Keltner Channels | Bollinger Bands |
---|---|---|
Basis | Average True Range (ATR) | Standard Deviation |
Centre Line | Simple Moving Average (SMA) of closing prices | Simple Moving Average (SMA) of closing prices |
Channel Lines | Set distance from the centre line based on ATR | Set distance from the centre line based on standard deviation |
Typical Multiplier | 2 (can vary based on trader preference) | 2 (standard, but can vary) |
Sensitivity to Volatility | ATR provides a direct measure of volatility | Standard deviation adjusts indirectly to volatility |
Primary Use | Identifying trend direction, potential reversals, gauging market volatility | Identifying overbought or oversold conditions, market volatility |
Adaptability | Automatically adjusts to market volatility via ATR | Adjusts to volatility, but can be slower in response |
Suitability | Effective in trending markets | Useful in both trending and sideways markets |
Pros and Cons
Like any trading tool, Keltner Channels come with their own set of advantages and disadvantages. Understanding these can help traders make the most of this indicator and incorporate it effectively into their trading strategy.
Pros
- Versatility: Keltner Channels can be used for various purposes, including identifying trend direction, spotting potential reversals, and gauging market volatility. This versatility makes them a valuable tool for different trading strategies.
- Adaptability: Because Keltner Channels are based on the Average True Range (ATR), they automatically adjust to changing market volatility. This adaptability can provide more accurate signals during periods of high or low volatility.
- Ease of Use: Keltner Channels are relatively easy to understand and use, even for novice traders. The visual representation of the channels can provide clear and straightforward signals.
Cons
- False Signals: Like any trading indicator, Keltner Channels can produce false signals. For instance, a price breakout above the upper channel line might not always lead to a continued uptrend. This is why it’s crucial to use Keltner Channels in conjunction with other technical analysis tools.
- Subjectivity: The settings for Keltner Channels, such as the period for the moving average and the multiplier for the ATR, can be adjusted based on the trader’s preferences. While this flexibility can be an advantage, it can also introduce subjectivity and potentially lead to inconsistent results.
- Limitations in Sideways Markets: Keltner Channels tend to work best in trending markets. In sideways or range-bound markets, the channels may provide less reliable signals.
Coding it into Trading Algorithms
Incorporating this into your trading algorithms can be a powerful way to automate your trading strategy.
Keltner Channels in Python
Here’s a basic example of how you might code Keltner Channels using Python and the pandas
and ta
(Technical Analysis) libraries:
import pandas as pd
import ta
# Assume 'data' is a pandas DataFrame with 'Close' prices
data = pd.read_csv('your_data.csv')
# Calculate the center line (20-day SMA)
data['CL'] = data['Close'].rolling(window=20).mean()
# Calculate the Average True Range (ATR)
data['ATR'] = ta.volatility.average_true_range(data['High'], data['Low'], data['Close'], n=20)
# Calculate the upper and lower channel lines
multiplier = 2
data['UCL'] = data['CL'] + (data['ATR'] * multiplier)
data['LCL'] = data['CL'] - (data['ATR'] * multiplier)
In this code:
- We first calculate the center line (CL) as a 20-day Simple Moving Average (SMA) of the closing prices.
- We then calculate the Average True Range (ATR) using the
average_true_range
function from theta
library. - Finally, we calculate the upper channel line (UCL) and the lower channel line (LCL) by adding and subtracting a multiple of the ATR from the center line, respectively.
This is a basic example, and you might need to adjust it based on your specific trading strategy and the characteristics of the market you’re trading in.
Remember, while coding trading indicators into algorithms can automate your trading process and potentially improve your trading efficiency, it’s important to thoroughly backtest your algorithms and use proper risk management techniques.
Suppose you wish to run this in Microsoft’s free VSCode to plot a chart with it on for NVIDIA stock, you would need to:
- Install the necessary libraries. You can do this by running the following commands in your terminal:
pip install pandas ta yfinance mplfinance matplotlib
- Use the
yfinance
library to download the NVIDIA stock data. - Calculate the Keltner Channels using the
ta
library. - Plot the data using the
mplfinance
library and add a custom legend withmatpl
otli
b
Python code to do this would be:
import pandas as pd # For data manipulation
import ta # For technical analysis tools like ATR
import yfinance as yf # To download stock data from Yahoo Finance
import mplfinance as mpf # For financial plotting
import matplotlib.pyplot as plt # For plot customization
# Download NVIDIA stock data from June 25th 2022 to June 25th, 2023
data = yf.download('NVDA', start='2022-06-25', end='2023-06-25')
# Calculate the center line (20-day SMA)
data['CL'] = data['Close'].rolling(window=20).mean()
# Calculate the Average True Range (ATR)
data['ATR'] = ta.volatility.average_true_range(data['High'], data['Low'], data['Close'], window=20)
# Calculate the upper and lower channel lines
multiplier = 2
data['UCL'] = data['CL'] + (data['ATR'] * multiplier)
data['LCL'] = data['CL'] - (data['ATR'] * multiplier)
# Drop the first 20 rows which contain NaN values due to the rolling window calculation
data = data.dropna()
# Create a new DataFrame for the Keltner Channels
kc = pd.DataFrame(index=data.index)
kc['UCL'] = data['UCL']
kc['CL'] = data['CL']
kc['LCL'] = data['LCL']
# Create a list of plots to be added
add_plots = [mpf.make_addplot(kc['UCL'], color='g', linestyle='dashed'),
mpf.make_addplot(kc['CL'], color='b', linestyle='dashed'),
mpf.make_addplot(kc['LCL'], color='r', linestyle='dashed')]
# Create a new figure and axes
fig, axes = mpf.plot(data, type='candle', style='yahoo', title='NVIDIA Stock Price with Keltner Channels',
ylabel='Price ($)', addplot=add_plots, figscale=1.25, figratio=(10, 7),
tight_layout=True, returnfig=True)
# Create custom legend
legend_lines = [plt.Line2D([0], [0], color='g', lw=2, linestyle='dashed'),
plt.Line2D([0], [0], color='b', lw=2, linestyle='dashed'),
plt.Line2D([0], [0], color='r', lw=2, linestyle='dashed')]
axes[0].legend(legend_lines, ['UCL', 'CL', 'LCL'], loc='upper left')
# Show the plot
plt.show()
In this code:
- We first download the NVIDIA stock data using the
yf.download
function from theyfinance
library. - We then calculate the center line (CL), the Average True Range (ATR), and the upper and lower channel lines (UCL and LCL) as before.
- We drop the first 20 rows of the DataFrame which contain NaN values due to the rolling window calculation.
- We create a new DataFrame for the Keltner Channels and then plot the data using the
mpf.plot
function from themplfinance
library. Themake_addplot
function is used to add the Keltner Channels to the plot. - The
returnfig=True
argument in thempf.plot()
function is used to return the figure and axes objects, which are then used to create and add the custom legend. The legend is added to the first axes object (the main panel) in the upper left corner. The colors and line styles in the legend match those of the Keltner Channels in the plot.
You can run this code in a Python file (.py) in VSCode. Make sure to save and run the file in an environment where you have installed the necessary libraries.
The Chart Output from the Python Code
My initial output is shown below, you should have something similar to what I have here:
Modifying the SMA and ATR Parameters
Initially I didn’t think this looked particularly helpful so I adjusted the parameters to use a 7 day moving average instead of a 20 day and the output chart then looks like this:
You can see if you were fading (trading against) the move to the upper green, dashed band (UCL) between November 2022 to mid April 2023 for shorter term trades, you would have done well on this setting. It’s also good to see why you need to be aware of fundamentals and not rely solely on technical indicators like this. The huge gap up was related to NVIDIA’s optimistic sales forecasts on the back of AI demand, the numbers taking the market by surprise. If you had been blindly running an algo based on the technical indicator unaware of this being on the calendar, you would have been run over.
It makes sense to use different window sizes for the Simple Moving Average (SMA) and the Average True Range (ATR). The window size you choose for each indicator depends on your trading strategy and the characteristics of the asset you’re trading.
The SMA is a trend-following indicator, and a shorter window size like 7 will make it more responsive to recent price changes. This could be useful if you’re trying to capture short-term trends or if the asset you’re trading is very volatile.
The ATR is a volatility indicator, and a longer window size like 20 will smooth out the daily fluctuations and give a more stable measure of volatility. This could be useful if you’re trying to filter out noise and focus on longer-term changes in volatility.
Frequently Asked Questions (FAQs)
1. What are Keltner Channels?
They are a type of envelope indicator used in technical analysis to identify trend direction, spot potential reversals, and gauge market volatility. They consist of three lines: a center line, which is a moving average of the closing prices, and two channel lines, which are set a certain distance from the center line based on the market’s volatility.
2. How do I use a Keltner Channel strategy in my trading?
A common strategy involves looking for breakouts and breakdowns. A breakout occurs when the price closes above the upper channel line, which could be a bullish signal. Conversely, a breakdown occurs when the price closes below the lower channel line, which could be a bearish signal. Traders might consider entering a long position after a breakout or a short position after a breakdown. However, these signals should be confirmed with other technical analysis tools. They might also be used to fade approaches to the bands as seen in our Keltner python tutorial charts above.
3. How do they compare to Bollinger Bands?
Both Keltner Channels and Bollinger Bands are volatility-based indicators that consist of a center line and two outer lines. However, while Bollinger Bands are based on standard deviations from a moving average, Keltner Channels use the Average True Range (ATR) to set the channel width. This difference can lead to different interpretations of market conditions, and some traders may prefer one over the other depending on their trading style and strategy.
4. How do I code Keltner Channels into my trading algorithms?
You can code them into your trading algorithms using various programming languages and libraries. We have demonstrated in this post how to do it in Python. You can use the pandas
library to calculate the center line and the Average True Range (ATR), and then calculate the upper and lower channel lines based on these values. You can then use these values in your trading algorithm to generate trading signals based on the Keltner Channel strategy. Check out the Python generated chart we made above, for some inspiration.
Leave a Reply