Please consider adding additional Bollinger Bands to a BB Squeeze of your selection, like the below indi SQZMOM_LB on Trading View.
Code: Select all
//
// @author LazyBear
// List of all my indicators: https://www.tradingview.com/v/4IneGo8h/
//
study(shorttitle = "SQZMOM_LB", title="Squeeze Momentum Indicator 20 40 60 80", overlay=false)
length1 = input(20, title="BB Length")
length2 = input(40, title="BB Length")
length3 = input(60, title="BB Length")
length4 = input(80, title="BB Length")
mult = input(2.0,title="BB MultFactor")
lengthKC1=input(20, title="KC Length")
lengthKC2=input(40, title="KC Length")
lengthKC3=input(60, title="KC Length")
lengthKC4=input(80, title="KC Length")
multKC1 = input(1.5, title="KC MultFactor")
multKC2 = input(1.5, title="KC MultFactor")
multKC3 = input(1.5, title="KC MultFactor")
multKC4 = input(1.5, title="KC MultFactor")
useTrueRange = input(true, title="Use TrueRange (KC)", type=bool)
// Calculate BB
source = close
basis = sma(source, length1)
dev = multKC1 * stdev(source, length1)
upperBB = basis + dev
lowerBB = basis - dev
// Calculate KC
ma = sma(source, lengthKC1)
range = useTrueRange ? tr : (high - low)
rangema = sma(range, lengthKC1)
upperKC = ma + rangema * multKC1
lowerKC = ma - rangema * multKC1
sqzOn = (lowerBB > lowerKC) and (upperBB < upperKC)
sqzOff = (lowerBB < lowerKC) and (upperBB > upperKC)
noSqz = (sqzOn == false) and (sqzOff == false)
val = linreg(source - avg(avg(highest(high, lengthKC1), lowest(low, lengthKC1)),sma(close,lengthKC1)),
lengthKC1,0)
bcolor = iff( val > 0,
iff( val > nz(val[1]), lime, green),
iff( val < nz(val[1]), red, maroon))
scolor = noSqz ? blue : sqzOn ? black : gray
plot(val, color=bcolor, style=histogram, linewidth=4, transp=0)
plot(0, color=scolor, style=cross, linewidth=2, transp=0)
// Calculate BB
basis2 = sma(source, length2)
dev2 = multKC2 * stdev(source, length2)
upperBB2 = basis2 + dev2
lowerBB2 = basis2 - dev2
// Calculate KC
ma2 = sma(source, lengthKC2)
range2 = useTrueRange ? tr : (high - low)
rangema2 = sma(range2, lengthKC2)
upperKC2 = ma2 + rangema2 * multKC2
lowerKC2 = ma2 - rangema2 * multKC2
sqzOn2 = (lowerBB2 > lowerKC2) and (upperBB2 < upperKC2)
sqzOff2 = (lowerBB2 < lowerKC2) and (upperBB2 > upperKC2)
noSqz2 = (sqzOn2 == false) and (sqzOff2 == false)
val2 = linreg(source - avg(avg(highest(high, lengthKC2), lowest(low, lengthKC2)),sma(close,lengthKC2)),
lengthKC2,0)
bcolor2 = iff( val2 > 0,
iff( val2 > nz(val2[1]), lime, green),
iff( val2 < nz(val2[1]), red, maroon))
scolor2 = noSqz2 ? blue : sqzOn2 ? black : gray
plot(val2*1.2, color=bcolor2, style=line, linewidth=2, transp=40)
//plot(0, color=scolor2, style=cross, linewidth=2, transp=40)
// Calculate BB
basis3 = sma(source, length3)
dev3 = multKC3 * stdev(source, length3)
upperBB3 = basis3 + dev3
lowerBB3 = basis3 - dev3
// Calculate KC
ma3 = sma(source, lengthKC3)
range3 = useTrueRange ? tr : (high - low)
rangema3 = sma(range3, lengthKC3)
upperKC3 = ma3 + rangema3 * multKC3
lowerKC3 = ma3 - rangema3 * multKC3
sqzOn3 = (lowerBB3 > lowerKC3) and (upperBB3 < upperKC3)
sqzOff3 = (lowerBB3 < lowerKC3) and (upperBB3 > upperKC3)
noSqz3 = (sqzOn3 == false) and (sqzOff3 == false)
val3 = linreg(source - avg(avg(highest(high, lengthKC3), lowest(low, lengthKC3)),sma(close,lengthKC3)),
lengthKC3,0)
bcolor3 = iff( val3 > 0,
iff( val3 > nz(val3[1]), lime, green),
iff( val3 < nz(val3[1]), red, maroon))
scolor3 = noSqz3 ? blue : sqzOn3 ? black : gray
plot(val3*1.4, color=bcolor3, style=line, linewidth=4, transp=40)
//plot(0, color=scolor3, style=cross, linewidth=3, transp=40)
// Calculate BB
basis4 = sma(source, length4)
dev4 = multKC4 * stdev(source, length4)
upperBB4 = basis4 + dev4
lowerBB4 = basis4 - dev4
// Calculate KC
ma4 = sma(source, lengthKC4)
range4 = useTrueRange ? tr : (high - low)
rangema4 = sma(range4, lengthKC4)
upperKC4 = ma4 + rangema4 * multKC4
lowerKC4 = ma4 - rangema4 * multKC4
sqzOn4 = (lowerBB4 > lowerKC4) and (upperBB4 < upperKC4)
sqzOff4 = (lowerBB4 < lowerKC4) and (upperBB4 > upperKC4)
noSqz4 = (sqzOn4 == false) and (sqzOff4 == false)
val4 = linreg(source - avg(avg(highest(high, lengthKC4), lowest(low, lengthKC4)),sma(close,lengthKC4)),
lengthKC4,0)
bcolor4 = iff( val4 > 0,
iff( val4 > nz(val4[1]), lime, green),
iff( val4 < nz(val4[1]), red, maroon))
scolor4 = noSqz4 ? blue : sqzOn4 ? black : gray
plot(val4*1.6, color=bcolor4, style=line, linewidth=8, transp=40)
//plot(0, color=scolor4, style=cross, linewidth=4, transp=40)