Trading Strategy based on BB/KC squeeze

**** [Edit: New version (v02) posted, see the comments section for the code *****

Simple strategy. You only consider taking a squeeze play when both the upper and lower Bollinger Bands go inside the Keltner Channel. When the Bollinger Bands (BOTH lines) start to come out of the Keltner Channel, the squeeze has been released and a move is about to take place.

More info :

I have added more support indicators -- I highlight the bullish / bearish KC breaches (using GREEN/RED crosses) and a SAR             to see where price action is trending.

Appreciate any feedback. Enjoy!

Color codes for v02:
When both the upper and lower Bollinger Bands go inside the Keltner Channel, the squeeze is on and is highlighted in RED.
When the Bollinger Bands (BOTH lines) start to come out of the Keltner Channel, the squeeze has been released and is highlighted in GREEN.
When one of the Bollinger Bands is out of Keltner Channel, no highlighting is done (this means, the background color shows up, so don't get confused if you have RED/GREEN in your chart's bground :))

Color codes for v01:
When both the upper and lower Bollinger Bands go inside the Keltner Channel, the squeeze is on and is highlighted in YELLOW.
When the Bollinger Bands (BOTH lines) start to come out of the Keltner Channel, the squeeze has been released and is highlighted in BLUE.
Remove from Favorite Scripts Add to Favorite Scripts
// @author LazyBear
// @credits
// Trading strategy based on Bollinger Bands & Keltner Channel. Added SAR / Highlights to make it really easy ;)
// v01 - initial release
study(shorttitle = "TS 1 [LB]", title="Trading strategy [BB / KC] [LazyBear]", overlay=true)

length = input(20, minval=1, title="Length"), mult = input(1.0, minval=0.001, maxval=50, title="MultFactor")
// showBarColor = input(true, title="Highlight Bear/Bull points (KC)", type=bool)
showBarColor = false
useTrueRange = input(false, title="Use TrueRange (KC)", type=bool)
// Note that "highlightStrategy" takes precedence over showBarColor. 
highlightStrategy = input(true, title="Highlight strategy points", type=bool)

startSAR = input(0.02, title="Start (SAR)")
incrementSAR = input(0.02, title="Increment (SAR)")
maximumSAR = input(0.2, title="Maximum (SAR)")

// Calculate BB
source = close
basis = sma(source, length)
dev = mult * stdev(source, length)
upperBB = basis + dev
lowerBB = basis - dev
plot(basis, color=red, linewidth=2)
p1 = plot(upperBB, color=red,  linewidth=2)
p2 = plot(lowerBB, color=red, linewidth=2)
fill(p1, p2, color = red)

// Calculate KC
ma = ema(source, length)
range = useTrueRange ? tr : high - low
rangema = ema(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
c = lime
u = plot(upper, color=c, title="Upper")
plot(ma, color=c, title="Basis")
l = plot(lower, color=c, title="Lower")
fill(u, l, color=green, transp=80)

offset = 2
bearish = low < lower
bear_point = bearish ? (low-offset) : na
bear_color = bearish ? red : na
bullish = high > upper
bull_point = bullish ? (high+offset) : na
bull_color = bullish ? green : na

bar_color = bearish ? bear_color : (bullish ? bull_color : na)
plot(bear_point, color = bear_color, style=cross, linewidth=2)
plot(bull_point, color = bull_color, style=cross, linewidth=2)

bgcolor((showBarColor and not highlightStrategy) ? bar_color : na)

strat_sqz_color = ((upperBB < upper) and (lowerBB > lower)) ? yellow : blue
bgcolor(highlightStrategy ? strat_sqz_color : na)

// SAR
outSAR = sar(startSAR, incrementSAR, maximumSAR)
plot(outSAR, style=cross, color=blue)
New version (v02) posted -

Appreciate any feedback/comments.

- Fixed the SqzRelease condition (only if both BB lines come out, it is marked as a "release").
- Changed the color codes
- Updated the default multFactor to be 2

Sample Chart:

+2 Reply
pantheo PRO LazyBear
Great work my friend! I love this technique and using it when chance present during the last two years since Fibline recommended it in ST first and at his Gensai blog later. I'll try yours now. The only thing missing now is an automatic database search to publish the squeeze information in advance, before release, in trading instruments and timeframes. I guess could be done easily using even BB% or BB width as criteria when hit the lower levels. All the best to you and yours my friend:-) Panos
+1 Reply
Thx :)
Hi , Do you have this indicator for MT4
LazyBear PRO Khanbilalabid
Nope, sorry. I dont use MT4,
craunico LazyBear
Hi Looks like a great indicator. However, what trading platform is it for, TOS?

The code shown above is for TradingView.
craunico LazyBear
Thanks, I will sign up for trading view. It looks very interesting. It seems like when I try to use their chart and run my cursor over the chart, all these lines quickly fill the chart up, so I will have to contact support regarding that. Anyway, in your BB/KC squeeze, are you using a standard 20, 2.0 setting for the KC or some ATR MA? Thanks again
craunico, you are already signed up. To try this indicator, try this:

Open a new chart.
Click on "Pine Script Editor" icon (next to "Indicators" button in the top toolbar). This will open up an editor dialog box.
Clear the default script shown in the editor dialog. Copy/Paste this indicator code -
Click on "Save". This should not show any red error messages in the editor dialog bottom pane.
Click on "Add To Chart" button in the editor dialog.

This will add this indicator to your private scripts library. From then, you can add it to any chart by opening the "Indicators" dialog box, going to "My Scripts" and clicking on the indicator name. Hope that helps.

KC uses 20/2 and forms the upper/lower bands by "multiplier * rangeMA"
+1 Reply
craunico LazyBear
Hey I added it to my chart and got a red message error. It said Line 1:7 no viable alternative at input Thanks again
Algyros PRO craunico
Thanks, LazyBear.

In your view, would this indicator work for all instruments, and for all time frames?

Yes, the sqz will work for all instruments (since it is only a measure of volatility). No specific timeframes, but the bigger TF sqz releases usually have more amplitude attached to them.
Can you try copy/pasting again from the RAW section? There seems to be an error while copy/pasting.
Giving this a try
+1 Reply
Thx. Also, try my custom COG channel -
Indicator: Custom COG channel
. It employs the same squeeze logic.
+2 Reply
Great indicator. Should be the foundation of any trading strategy.
Goodmorning Sir . I am a boy of Italian What follows recently trading and are still being studied and wondered if Your Indicator ( trading strategy based on BB / KC SQUEEZE ) , can work with INDEX ITA40 DAX30 and CAC40 . With graphic hour seems to work fine , I advice to match another indicator to confirm entry to the market , or not ?
thanks for your time and congratulations for the work done by you and most of all for sharing.
United States
United Kingdom
Home Stock Screener Forex Signal Finder Economic Calendar How It Works Chart Features House Rules Moderators For the WEB Widgets Stock Charting Library Priority Support Feature Request Blog & News FAQ Help & Wiki Twitter
Private Messages Chat Ideas Published Followers Following Priority Support Public Profile Profile Settings Account and Billing Sign Out