input price = close; input KeltnerLength = 13; input VolumeFastLength = 1; input VolumeSlowLength = 20; input ADXLength = 10; input SMALength = 8; def KeltnerSMA = Average(hlc3, KeltnerLength); def AvgRange = Average(high - low, KeltnerLength); def VolumeOsc = (Average(volume, VolumeFastLength) - Average(volume, VolumeSlowLength)) / Average(volume, VolumeSlowLength); def ADX = reference ADX(length = ADXLength); def SMA = Average(price, SMALength); plot KeltnerHigh = KeltnerSMA + AvgRange; plot KeltnerMid = KeltnerSMA; plot KeltnerLow = KeltnerSMA - AvgRange; plot VolumeSpike = VolumeOsc > 0.5; KeltnerHigh.SetDefaultColor(GetColor(4)); KeltnerMid.SetDefaultColor(GetColor(4)); KeltnerLow.SetDefaultColor(GetColor(4)); VolumeSpike.SetDefaultColor(GetColor(1)); VolumeSpike.SetLineWeight(3); VolumeSpike.SetPaintingStrategy(PaintingStrategy.BOOLEAN_POINTS); DefineGlobalColor("Up", Color.UPTICK); DefineGlobalColor("Neutral", Color.GRAY); DefineGlobalColor("Down", Color.DOWNTICK); AssignPriceColor( if ADX > ADX[1] and price > SMA then globalColor("Up") else if ADX > ADX[1] and price < SMA then globalColor("Down") else globalColor("Neutral"));