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

  1. Solo largos y una posición a la vez (strategy.position_size == 0 antes 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.
  2. Bandas de Bollinger ta.bb(close, 20, 2) y canal de Keltner ta.kc(close, 20, 1.5). Squeeze = las dos bandas de Bollinger dentro del canal de Keltner.
  3. Entrada: sin posición, fuera de squeeze y con cierre sobre la banda superior de Bollinger → compra en la apertura siguiente.
  4. Señal de salida: cierre por debajo de la media de Bollinger → cierre.
  5. 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 % y Take 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).
  6. 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.
  7. 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

AjusteValorMín.Máx.
Length205100
BB Mult213
KC Mult1.513
Stop Loss %20.510
Take Profit %6020

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().

Más sobre cómo funciona el backtesting

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

  1. Abre un gráfico de cualquier cripto o CFD.
  2. Pulsa «Scripts» y añade esta estrategia.
  3. Pulsa «Run» y revisa las operaciones en el Strategy Tester.
Empieza gratis

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.