estrategia · código abierto

Estrategia de reversión a la media con Bandas de Bollinger (20, 2)

Reversión a la media con Bollinger (20, 2): compra al cerrar en la banda inferior o por debajo y sal en la media. Reglas, código y backtest con costes. 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. [basis, upper, lower] = ta.bb(close, 20, 2).
  3. Entrada: sin posición y con el cierre en la banda inferior o por debajo, compra en la apertura siguiente.
  4. Señal de salida: cierre en la media (SMA 20) o por encima → cierre (comentario Back to basis).
  5. Riesgo: bracket más ajustado que en otras plantillas: stop 1,5% / objetivo 4%.
  6. Bracket de protección desde el precio medio de entrada: stop-loss un 1,5% por debajo y take-profit un 4% 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).
  7. 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.
  8. 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
StdDev Mult20.55
Stop Loss %1.50.510
Take Profit %4020

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 Mean Reversion", 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)
mult = input.float(2, "StdDev Mult", minval=0.5, maxval=5, step=0.1)
stopPct = input.float(1.5, "Stop Loss %", minval=0.5, maxval=10, step=0.1)
tpPct = input.float(4, "Take Profit %", minval=0, maxval=20, step=0.1)
colorNeutral = input.color("color.gray", "Color  Neutral")
colorLine = input.color("color.blue", "Color  Line")
colorUp = input.color("color.green", "Color  Up")
colorDown = input.color("color.red", "Color  Down")
[basis, upper, lower] = ta.bb(close, len, mult)
longSignal = strategy.position_size == 0 and close <= lower
exitSignal = strategy.position_size > 0 and close >= basis
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(basis, "Basis", color=colorNeutral, linewidth=1)
p_Upper = plot(upper, "Upper", color=colorLine, linewidth=1)
p_Lower = plot(lower, "Lower", color=colorLine, linewidth=1)
fill(p_Upper, p_Lower, color=color.new(colorLine, 92))
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, "BB long entry", "Price touched lower Bollinger Band")
alertcondition(exitSignal, "BB exit", "Price returned to 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

¿Compro al tocar la banda inferior o espero a que vuelva dentro?

Este script compra el cierre en la banda o por debajo. Esperar un cierre de vuelta dentro (ta.crossover(close, lower)) suele dar menos operaciones; el ejemplo de Bollinger de la home de Deepwick usa esa variante.

¿Qué ajustes funcionan mejor?

20 periodos y 2 desviaciones son los valores por defecto. Un multiplicador mayor da menos entradas y más extremas. Valida cualquier cambio fuera de muestra.

¿Cuándo falla la reversión con Bollinger?

Cuando el precio 'camina' por la banda: en tendencia fuerte puede pegarse a la banda inferior muchas velas. El stop del 1,5% limita cada pérdida, pero la entrada por estado puede repetir.