strategy · own pane · open source
TTM Squeeze Breakout
Running…
Loading chart…
About
TTM Squeeze breakout: when Bollinger Bands move inside the Keltner Channel (volatility compression), wait for the squeeze to release and price to break above the BB basis.
- The histogram shows momentum direction; positive = bullish pressure building.
- Combine with a higher-timeframe trend for stronger entries.
- 20-period is the canonical TTM setting.
Source code
//@version=5
strategy("TTM Squeeze Breakout", overlay=false, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, commission_type=strategy.commission.percent, commission_value=0.05)
len = input.int(20, "Length", minval=5, maxval=50, step=1)
bbMult = input.float(2, "BB Mult", minval=1, maxval=3, step=0.1)
kcMult = input.float(1.5, "KC Mult", minval=1, maxval=3, step=0.1)
stopPct = input.float(2, "Stop Loss %", minval=0.5, maxval=10, step=0.1)
tpPct = input.float(6, "Take Profit %", minval=0, maxval=20, step=0.1)
[bm, bu, bl] = ta.bb(close, len, bbMult)
[km, ku, kl] = ta.kc(close, len, kcMult)
sqz = bl > kl and bu < ku
mid = math.avg(math.avg(ta.highest(high, len), ta.lowest(low, len)), ta.sma(close, len))
mom = ta.linreg(close - mid, len, 0)
longSignal = strategy.position_size == 0 and sqz[1] and not sqz and close > bm and mom > 0
exitSignal = strategy.position_size > 0 and mom < 0
if longSignal
strategy.entry("Long", strategy.long)
if strategy.position_size > 0
strategy.exit("Risk", stop=stopPct > 0 ? strategy.position_avg_price * (1 - stopPct / 100) : na, limit=tpPct > 0 ? strategy.position_avg_price * (1 + tpPct / 100) : na)
if exitSignal
strategy.close("Long", comment="Momentum faded")
hline(0, "Zero", color=color.gray, linestyle=hline.style_dotted)
p_Momentum = plot(mom, "Momentum", color=mom >= 0 ? color.green : color.red, style=plot.style_columns)
plotshape(longSignal, "Long", style=shape.triangleup, location=location.belowbar, color=color.green, text="L")
plotshape(exitSignal, "Exit", style=shape.triangledown, location=location.abovebar, color=color.red, text="X")
alertcondition(longSignal, "TTM squeeze long entry", "Squeeze released with bullish momentum")
alertcondition(exitSignal, "TTM exit", "Momentum turned negative")
No comments yet.
Sign in to comment.