estrategia · código abierto
Estrategia de ruptura del squeeze de Bollinger (BB 20/2 frente a Keltner 1,5)
Ruptura del squeeze de Bollinger frente al canal de Keltner: compra la ruptura de la banda superior fuera del squeeze y sal en la media. Reglas y backtest. Deepwick Script ejecuta un subconjunto de Pine Script.
Reglas de entrada y salida
- Solo largos y una posición a la vez (
strategy.position_size == 0antes de entrar). Las señales se evalúan al cierre de la vela; Deepwick ejecuta las órdenes de mercado en la apertura de la vela siguiente. - Bandas de Bollinger
ta.bb(close, 20, 2)y canal de Keltnerta.kc(close, 20, 1.5). Squeeze = las dos bandas de Bollinger dentro del canal de Keltner. - Entrada: sin posición, fuera de squeeze y con cierre sobre la banda superior de Bollinger → compra en la apertura siguiente.
- Señal de salida: cierre por debajo de la media de Bollinger → cierre.
- Bracket de protección desde el precio medio de entrada: stop-loss un 2% por debajo y take-profit un 6% por encima (inputs
Stop Loss %yTake Profit %; Take Profit % = 0 desactiva el objetivo). Stops y objetivos se comprueban siguiendo el recorrido de la vela (apertura → extremo más cercano → extremo más lejano → cierre). - Nota de reentrada: la condición de entrada es un estado, no un cruce. Si el stop o el objetivo cierran la operación y la condición sigue activa, la estrategia vuelve a entrar en la apertura de la vela siguiente.
- Tamaño y costes en
strategy(): capital inicial 10.000, 10% del capital por operación, comisión del 0,05% por ejecución, slippage no definido (0 por defecto). Los backtests guardados pagan además medio spread real en cada ejecución de mercado y de stop.
Referencia del lenguaje: Deepwick Script.
Ajustes por defecto
| Ajuste | Valor | Mín. | Máx. |
|---|---|---|---|
Length | 20 | 5 | 100 |
BB Mult | 2 | 1 | 3 |
KC Mult | 1.5 | 1 | 3 |
Stop Loss % | 2 | 0.5 | 10 |
Take Profit % | 6 | 0 | 20 |
Cómo ejecuta Deepwick esta estrategia
- Las órdenes de mercado se ejecutan en la apertura de la vela siguiente.
- Stops y límites siguen el recorrido de la vela: apertura → extremo más cercano → extremo más lejano → cierre.
- Los gaps se ejecutan en la apertura.
- La comisión se cobra en cada ejecución, y el slippage se aplica a las órdenes de mercado y de stop, según lo definido en
strategy().
Código fuente
Deepwick Script (un subconjunto de Pine Script)
//@version=5
strategy("Bollinger Squeeze Breakout", overlay=true, 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=100, 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)
colorNeutral = input.color("color.gray", "Color Neutral")
colorLine = input.color("color.blue", "Color Line")
colorMid = input.color("color.orange", "Color Mid")
colorUp = input.color("color.green", "Color Up")
colorDown = input.color("color.red", "Color Down")
[bm, bu, bl] = ta.bb(close, len, bbMult)
[km, ku, kl] = ta.kc(close, len, kcMult)
squeeze = bl > kl and bu < ku
longSignal = strategy.position_size == 0 and not squeeze and close > bu
exitSignal = strategy.position_size > 0 and close < bm
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="Back to basis")
p_Basis = plot(bm, "Basis", color=colorNeutral, linewidth=1)
p_Upper_BB = plot(bu, "Upper BB", color=colorLine, linewidth=1)
p_Lower_BB = plot(bl, "Lower BB", color=colorLine, linewidth=1)
p_Upper_KC = plot(ku, "Upper KC", color=colorMid, linewidth=1)
p_Lower_KC = plot(kl, "Lower KC", color=colorMid, linewidth=1)
plotshape(longSignal, "Long", style=shape.triangleup, location=location.belowbar, color=colorUp, text="L")
plotshape(exitSignal, "Exit", style=shape.triangledown, location=location.abovebar, color=colorDown, text="X")
alertcondition(longSignal, "Squeeze breakout long", "Bollinger broke above Keltner upper")
alertcondition(exitSignal, "Squeeze exit", "Price returned to Bollinger basis")
Pruébala en Deepwick
- Abre un gráfico de cualquier cripto o CFD.
- Pulsa «Scripts» y añade esta estrategia.
- Pulsa «Run» y revisa las operaciones en el Strategy Tester.
Preguntas frecuentes
¿Qué diferencia hay con la ruptura del TTM Squeeze?
La versión TTM exige que el squeeze se libere en esa vela y un histograma de momentum positivo, y sale cuando el momentum se vuelve negativo. Esta es una ruptura de banda simple.
¿Qué mercados encajan con las rupturas de squeeze?
Los que alternan fases tranquilas y explosivas. Compara resultados en un par cripto y en un CFD como el oro con los mismos costes.