Log in to see Cloud of Tags

Wealth-Lab Wiki




public KeltnerATR_Upper(Bars bars, int smaPeriod, int atrPeriod, double atrMult, string description)
public static KeltnerATR_Upper(Bars bars, int smaPeriod, int atrPeriod, double atrMult)

Parameter Description

bars The Bars object
smaPeriod Length used to calculate the center line
atrPeriod The period to smooth Average True Range
atrMult Multiple of the average true range used to determine the modified Keltner Channel bands.


Keltner Bands are a type of price channel first described by Chester W. Keltner in his book How to Make Money in Commodities. They are fixed bands that are plotted above and below a simple moving average (SMA) of average price (AveragePriceC). See also: KeltnerLower, KeltnerUpper.

This modification of Keltner indicators is different from Wealth-Lab's built-in, classic Keltner Bands: it uses ATR units to construct the upper and lower bands, specified in the atrMult parameter. See also: KeltnerATR_Lower.


  • The classic interpretation of Keltner band is to go long when the upper band is penetrated, and reverse position and enter short when the lower band is penetrated.
  • Keltner Bands can also be used to define "normal" trading ranges for markets. Price movement outside of the bands can be considered an anomaly, and therefore a trading opportunity.


Average Price (AP) = (Close + High + Low ) / 3

Center Line = smaPeriod bar SMA of AP

Upper Band = Center Line + atrMult times ATR(atrPeriod)

Lower Band = Center Line - atrMult times ATR(atrPeriod)


using System;
using System.Collections.Generic;
using System.Text;
using System.Drawing;
using WealthLab;
using Community.Indicators;

namespace WealthLab.Strategies { public class MyStrategy : WealthScript { protected override void Execute() { Color cool = Color.FromArgb( 50, Color.Blue ); KeltnerATR_Lower K1 = KeltnerATR_Lower.Series( Bars, 10, 10, 2 ); KeltnerATR_Upper K2 = KeltnerATR_Upper.Series( Bars, 10, 10, 2 ); PlotSeriesFillBand( PricePane, K1, K2, cool, cool, LineStyle.Solid, 2);

for(int bar = 30; bar < Bars.Count; bar++) { if( !IsLastPositionActive ) { if( CrossOver( bar, Close, K2 ) ) BuyAtMarket( bar+1 ); else if( CrossUnder( bar, Close, K1 ) ) ShortAtMarket( bar+1 ); } else { Position p = LastPosition; if( CrossOver( bar, Close, K2 ) & p.PositionType != PositionType.Long ) { CoverAtMarket( bar+1, p ); BuyAtMarket( bar+1 ); } if( CrossUnder( bar, Close, K1 ) & p.PositionType == PositionType.Long ) { SellAtMarket( bar+1, p ); ShortAtMarket( bar+1 ); } } } } } }

Important Disclaimer: The information provided by Wealth-Lab is strictly for informational purposes and is not to be construed as advice or solicitation to buy or sell any security.  The owner of Wealth-Lab.com assumes no liability resulting from the use of the material contained herein for investment purposes. By using this web site, you agree to the terms of this disclaimer and our Terms of Use.

ScrewTurn Wiki. Some of the icons created by FamFamFam.