Estrategia de negociación con bandas de Bollinger de varios plazos

El autor:¿ Qué pasa?, Fecha: 2023-09-20 15:47:46
Las etiquetas:

Resumen general

Esta estrategia utiliza bandas de Bollinger adaptativas para diseñar dos tipos de estrategias de trailing stop y probarlas sistemáticamente a través de marcos de tiempo.

Estrategia lógica

  1. Calcular las bandas superior e inferior de las bandas de Bollinger adaptativas, con anchura de canal ajustable.

  2. Estrategia de seguimiento de ruptura para abrir posiciones en rupturas de banda y detenerse cuando el precio se invierte dentro de las bandas.

  3. Reversión estrategia de reversión para abrir posiciones cuando el precio alcanza bandas y parar cuando el precio vuelve dentro de las bandas.

  4. Utilice el indicador CCI para ayudar a determinar el lado largo/corto.

  5. Prueba de retroceso en múltiples plazos para verificar la viabilidad de ambas estrategias.

Ventajas

  1. Las bandas de Bollinger son intuitivas para capturar las tendencias de precios.

  2. Las dos estrategias se adaptan a diferentes condiciones de mercado para la robustez.

  3. El CCI ayuda a determinar la dirección larga/corta.

  4. Las pruebas de retroceso de múltiples marcos de tiempo hacen que los resultados sean más convincentes.

  5. Reglas de estrategia simples y claras, fáciles de aplicar.

Los riesgos

  1. Las bandas de Bollinger pueden fallar en ciertas situaciones.

  2. Riesgos de interrupción prematura o tardía en ambas estrategias.

  3. El CCI puede generar señales incorrectas.

  4. Maneja los sesgos de las pruebas de retroceso con cuidado.

  5. La optimización corre el riesgo de sobreajuste.

Mejoramiento

  1. Parámetros de ensayo para encontrar combinaciones óptimas.

  2. Evaluar la adición de filtros con otros indicadores.

  3. Optimizar las paradas para reducir los riesgos.

  4. Investigación de métodos adaptativos para el ancho del canal.

  5. Verifique con más símbolos y plazos.

  6. Utilice el aprendizaje automático para optimizar dinámicamente los parámetros.

Conclusión

Esta estrategia diseña dos estrategias de trailing stop basadas en bandas de Bollinger y las prueba en múltiples marcos de tiempo.


/*backtest
start: 2022-09-13 00:00:00
end: 2023-09-19 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "Underworld Hunter", overlay=true)

len = input(75, minval=1, title="Length")
src = input(close, title="Source")
basis = 0.0
basis := na(basis[1]) ? sma(src, len) : ema(ema(ema(src,len),len),len)

mult = input(1.9, minval=0.001, maxval=50, title="Deviation")
dev = mult * stdev(src, len)
upper = basis + dev
lower = basis - dev

//CCI calculation and inputs

lengthcci = input(20, minval=1, title="Period for CCI")
ma = sma(close, lengthcci)
ccivalue = (src - ma) / (0.015 * dev(src, lengthcci))

//CCI plotting

cciover0 = ccivalue >= 100 and ccivalue <= 120
cciover1 = ccivalue > 120 and ccivalue <= 140
cciover2 = ccivalue > 140 and ccivalue <= 160
cciover3 = ccivalue > 160 and ccivalue <= 180
cciover4 = ccivalue > 180

cciunder0 = ccivalue <= -100 and ccivalue >= -120
cciunder1 = ccivalue <= -120 and ccivalue > -140
cciunder2 = ccivalue <= -140 and ccivalue > -160
cciunder3 = ccivalue <= -160 and ccivalue > -180
cciunder4 = ccivalue <= -180

plotshape(cciover0, title="CCIO0", location=location.abovebar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder0, title="CCIU0", location=location.belowbar, color=#c6ff1a, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover1, title="CCIO1", location=location.abovebar, color=#ffff00, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder1, title="CCIU1", location=location.belowbar, color=#ffff00, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover2, title="CCIO2", location=location.abovebar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder2, title="CCIU2", location=location.belowbar, color=#ff9900, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover3, title="CCIO3", location=location.abovebar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciunder3, title="CCIU3", location=location.belowbar, color=#ff0000, transp=0, style=shape.circle, size=size.tiny)
plotshape(cciover4, title="CCIO4", location=location.abovebar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)
plotshape(cciunder4, title="CCIU4", location=location.belowbar, color=#cc00cc, transp=0,style=shape.circle, size=size.tiny)

//plotting

plot(upper, title="Upper shadow", color=color.black, transp = 30, linewidth = 4)
plot(upper, title="Upper line", color=#FF2E00, transp = 0, linewidth = 2)
plot(lower, title="Lower shadow", color=color.black, transp = 30, linewidth = 4)
plot(lower, title="Lower line", color=#FF2E00, transp = 0, linewidth = 2)
plot(basis, title="Basic line", color=color.red, transp = 50, linewidth = 2)

mean = input(title="Test Reverse to the Mean instead", type=input.bool, defval=false)
test = input(title="Enable testing", type=input.bool, defval=true)

ordersize=floor(50000/close)

if(close>upper and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Up", strategy.long, ordersize)
if (close<upper and close[1]<upper and close[2]<upper)
    strategy.close("Hunt Up", qty_percent = 100, comment = "Hunt End")

if(close<lower and strategy.opentrades==0 and not mean and test)
    strategy.entry("Hunt Down", strategy.short, ordersize)
if (close>lower and close[1]>lower and close[2]>lower)
    strategy.close("Hunt Down", qty_percent = 100, comment = "Hunt End")

//bounce of bands

if(close>upper and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Down", strategy.short, ordersize)
if (close<upper and close[1]<upper and close[2]<upper and close>high[1])
    strategy.close("Sneak Down", qty_percent = 100, comment = "SneakEnd")

if(close<lower and strategy.opentrades==0 and mean and test)
    strategy.entry("Sneak Up", strategy.long, ordersize)
if (close>lower and close[1]>lower and close[2]>lower and close<low[1])
    strategy.close("Sneak Up", qty_percent = 100, comment = "Sneak End")




Más.