estrategia · código abierto
Estrategia de tendencia con On-Balance Volume (OBV)
Estrategia de tendencia con On-Balance Volume: compra cuando el OBV supera el de hace 20 velas y sal cuando queda por debajo. Reglas, código 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. - El OBV se calcula en el script: suma el volumen de la vela si cierra al alza y lo resta si cierra a la baja.
- Entrada: sin posición y con el OBV por encima del de hace 20 velas (acumulación), compra en la apertura siguiente.
- Señal de salida: OBV por debajo del de hace 20 velas → 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. |
|---|---|---|---|
OBV Lookback | 20 | 5 | 50 |
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("OBV Trend Strategy", 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, "OBV Lookback", minval=5, maxval=50, step=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)
colorMid2 = input.color("color.teal", "Color Mid2")
colorUp = input.color("color.green", "Color Up")
colorDown = input.color("color.red", "Color Down")
var float obv = 0.0
obv := close > close[1] ? nz(obv[1]) + volume : close < close[1] ? nz(obv[1]) - volume : nz(obv[1])
longSignal = strategy.position_size == 0 and obv > obv[len]
exitSignal = strategy.position_size > 0 and obv < obv[len]
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="OBV turned")
p_OBV = plot(obv, "OBV", color=colorMid2, linewidth=2)
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, "OBV long entry", "OBV rose over the lookback")
alertcondition(exitSignal, "OBV exit", "OBV turned lower")
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
¿Por qué ignora la tendencia del precio?
Es una prueba de flujo de volumen pura: pregunta si la acumulación por sí sola sirve como filtro de largos. Añadir un filtro de precio es un buen siguiente experimento.
¿Puedo operar divergencias de OBV con esto?
No directamente. Una divergencia exige detectar pivotes en precio y OBV; este script compara el OBV con su propio valor pasado.