Estrategia de ruptura de la banda de Bollinger basada en el VWAP

El autor:¿ Qué pasa?, fecha: 2024-02-06 14:36:26
Las etiquetas:

img

Resumen general

Esta estrategia utiliza bandas de Bollinger para rastrear el VWAP. Adopta una posición larga cuando el VWAP se rompe por encima de la banda media y cierra la posición cuando el VWAP se rompe por debajo de la banda inferior.

Estrategia lógica

  1. Calcule el VWAP.
  2. Se calcularán las bandas de Bollinger de VWAP, incluidas las bandas superior, media e inferior.
  3. Tomar una posición larga cuando el VWAP se rompa por encima de la banda media y el precio está por encima del Pivot Point.
  4. Establezca el stop loss en 5%.
  5. Si el VWAP se rompe por debajo de la banda inferior, cierre la posición larga.

Análisis de ventajas

  1. VWAP tiene una fuerte capacidad de seguimiento de tendencias, con BB, identifica con precisión el inicio de tendencias.
  2. La adición de Pivot Point filtra las fallas, evitando pérdidas innecesarias.
  3. Bloqueos de salida parciales en algunas ganancias y controles de riesgo.
  4. Las pruebas de retroceso muestran un gran rendimiento en el mercado alcista con buena estabilidad.

Análisis de riesgos

  1. Es propenso a las pérdidas por falsas rupturas en el mercado de rango.
  2. Los Pivot Points no pueden evitar completamente las señales falsas. Se necesitan más filtros.
  3. El aumento de la frecuencia del comercio conduce a mayores costos de transacción.
  4. No se desempeña bien en el mercado bajista.

Direcciones de optimización

  1. Agregue indicadores como MACD, KDJ para filtrar las señales.
  2. Optimice los parámetros de BB a través de pruebas de retroceso.
  3. Utilice el aprendizaje automático para optimizar dinámicamente los parámetros de BB.
  4. Prueba diferentes niveles de stop loss para encontrar el óptimo.
  5. Añadir ganancias adaptativas basadas en la volatilidad del mercado.

Conclusión

Un sistema de breakout estable adecuado para el comercio de algoritmos. Se necesita atención en el control de riesgos. Con más investigación y optimización, podría convertirse en una excelente estrategia de breakout.


/*backtest
start: 2024-01-06 00:00:00
end: 2024-02-05 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © ediks123

//@version=4
strategy("BBofVWAP with entry at Pivot Point", overlay=false, pyramiding=1,   default_qty_type=strategy.percent_of_equity,  default_qty_value=20, initial_capital=10000, currency=currency.USD)  //default_qty_value=10, default_qty_type=strategy.fixed,

// Function outputs 1 when it's the first bar of the D/W/M/Y
is_newbar(res) =>
    ch = 0
    if(res == 'Y')
        t  = year(time('D'))
        ch := change(t) != 0 ? 1 : 0
    else
        t = time(res)
        ch := change(t) != 0 ? 1 : 0
    ch


//variables BEGIN
//smaLength=input(200,title="Slow MA Length")

bbLength=input(50,title="BB Length")  
//bbsrc = input(close, title="BB Source")
mult = input(2.0, minval=0.001, maxval=50, title="StdDev")
offset = input(0, "Offset", type = input.integer, minval = -500, maxval = 500)

pp_period = input(title = "Pivot Period", type=input.string, defval="Week", options = ['Day', 'Week'])

pp_res = pp_period == 'Day' ? 'D' : pp_period == 'Week' ? 'W' : pp_period == 'Month' ? 'M' : 'Y' 

riskCapital = input(title="Risk % of capital", defval=10, minval=1)
stopLoss=input(5,title="Stop Loss",minval=1)



//sma200=sma(close,smaLength)
//plot(sma200, title="SMA 200", color=color.orange)

myVwap=vwap(hlc3)

//bollinger calculation
basis = sma(myVwap, bbLength)
dev = mult * stdev(myVwap, bbLength)
upperBand = basis + dev
lowerBand = basis - dev

//plot bb
plot(basis, "Basis", color=color.teal, style=plot.style_circles , offset = offset)
p1 = plot(upperBand, "Upper", color=color.teal, offset = offset)
p2 = plot(lowerBand, "Lower", color=color.teal, offset = offset)
fill(p1, p2, title = "Background", color=color.teal, transp=95)

plot(myVwap, title="VWAP", color=color.purple)


//pivot points 


// Calc High
high_cur = 0.0
high_cur := is_newbar(pp_res) ? high : max(high_cur[1], high)

phigh = 0.0
phigh := is_newbar(pp_res) ? high_cur[1] : phigh[1]

// Calc Low
low_cur = 0.0
low_cur := is_newbar(pp_res) ? low : min(low_cur[1], low)

plow = 0.0
plow := is_newbar(pp_res) ? low_cur[1] : plow[1]

// Calc Close
pclose = 0.0
pclose := is_newbar(pp_res) ? close[1] : pclose[1]


vPP = (phigh + plow + pclose) / 3

//pivot points


//Entry--
//Echeck how many units can be purchased based on risk manage ment and stop loss
qty1 = (strategy.equity  * riskCapital / 100 ) /  (close*stopLoss/100)  

//check if cash is sufficient  to buy qty1  , if capital not available use the available capital only
qty1:= (qty1 * close >= strategy.equity ) ? (strategy.equity / close) : qty1


strategy.entry(id="BB_VWAP_PP",long=true, qty=qty1, when=   crossover(myVwap,basis)  and close>=vPP  )

bgcolor(strategy.position_size>=1?color.blue:na, transp=75)
barcolor(strategy.position_size>=1?color.green:na)

stopLossVal=  strategy.position_size>=1 ?  close * (1 - (stopLoss*0.01) ) : 0.00

//partial exit
//strategy.close(id="BBofVwap", qty=strategy.position_size/3, when=crossunder(myVwap,upperBand) and strategy.position_size>=1 )  //and close>strategy.position_avg_price)



//exit on lowerband or stoploss 
strategy.close(id="BB_VWAP_PP", comment="P" , qty=strategy.position_size/3, when= crossunder(myVwap,upperBand) and strategy.position_size>=1 and close>strategy.position_avg_price)  //
strategy.close(id="BB_VWAP_PP", comment="Exit All", when=crossunder(myVwap,lowerBand) and strategy.position_size>=1 )
//strategy.close(id="BBofVwapWithFibPivot", comment="Exit All", when=crossunder(close,vPP) and strategy.position_size>=1 )

strategy.close(id="BB_VWAP_PP", comment="Stop Loss Exit", when=crossunder(close,stopLossVal) and strategy.position_size>=1 )

Más.