Estrategia de trading con bandas de Bollinger de filtros múltiples


Fecha de creación: 2024-01-17 15:12:57 Última modificación: 2024-01-17 15:12:57
Copiar: 1 Número de Visitas: 592
1
Seguir
1617
Seguidores

Estrategia de trading con bandas de Bollinger de filtros múltiples

Descripción general

La estrategia de comercio de la banda de Brin de selección múltiple es una estrategia de comercio cuantitativa que combina el indicador de la banda de Brin, el indicador de la línea media, el indicador RSI y la característica del gráfico de línea K para filtrar múltiples condiciones y emitir una señal de comercio cuando se cumplen las condiciones. Esta es una estrategia típica de seguimiento de tendencias para obtener ganancias capturando las fluctuaciones de la tendencia de precios en la línea media y larga.

Principio de estrategia

Cálculo del indicador

La estrategia utiliza principalmente tres indicadores: la banda de Brin, la mediana y el RSI. Dentro de la banda de Brin, la mediana es la media móvil simple de n días del precio, y la mediana y la mediana son la mediana + 2 veces la diferencia estándar y la mediana - 2 veces la diferencia estándar.

Señales de comercio

La estrategia genera señales de negociación a través de tres condiciones principales:

(1) Brin con la ruptura de la vía descendente y la línea de la entidad K rebatida. Cuando el precio de cierre se rompe la vía descendente y el color de la entidad de la línea de la K es contrario a la dirección de la tendencia actual, haga más.

(2) La correlación de la brecha en la línea de Brin y la contravención de la entidad de la línea K. Cuando la entidad de la línea K se pone en trayectoria por debajo del precio de cierre y el color de la entidad de la línea K es contrario a la dirección de la tendencia actual.

(3) La entidad de la línea K gira. Si la dirección de la posición coincide con el color de la entidad de la línea K gira, la posición está en blanco.

Además de esto, la estrategia también establece condiciones auxiliares como filtros de línea uniforme, filtros de entidad de línea K y filtros RSI para controlar estrictamente la entrada.

Análisis de las ventajas

  • Estricto control de múltiples condiciones para reducir el riesgo de falsas brechas
  • El seguimiento de tendencias reduce la frecuencia de las transacciones
  • Los indicadores RSI ayudan a evitar la trampa de la inversión

Análisis de riesgos

  • La configuración incorrecta de los parámetros de la banda de Bryn puede causar menos señales
  • El fracaso de la brecha puede causar grandes pérdidas
  • La frecuencia de las transacciones es baja y es posible que se pierdan algunas oportunidades de transacción.

Se puede reducir el riesgo ajustando los parámetros de la banda de Bryn y controlando estrictamente el stop loss.

Dirección de optimización

  • Puede probar el rendimiento de las estrategias bajo diferentes parámetros para encontrar el parámetro óptimo
  • Se puede agregar un algoritmo de aprendizaje automático para que la estrategia optimice automáticamente los parámetros
  • Se pueden agregar más factores y filtros para mejorar la estabilidad de la estrategia

Resumir

Esta estrategia en su conjunto es una estrategia típica de seguimiento de tendencias de línea media larga. Mediante la selección de múltiples condiciones, el control estricto de la entrada y salida, y la adopción de un método de negociación de tendencias, se pueden reducir las transacciones innecesarias y capturar las tendencias de la línea media larga del mercado. La estrategia tiene un gran espacio de optimización, y se puede mejorar aún más la estabilidad y la rentabilidad de la estrategia mediante el ajuste de parámetros y la adición de más herramientas auxiliares.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.4", shorttitle = "Bollinger str 1.4", overlay = true )

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(false, defval = false, title = "Short")

length = input(20, defval = 20, minval = 1, maxval = 1000, title = "Bollinger Length")
mult = input(1, defval = 1, minval = 0.001, maxval = 50, title = "Bollinger Mult")
source = input(ohlc4, defval = ohlc4, title = "Bollinger Source")

usebf = input(true, defval = true, title = "Use body-filter")
usecf = input(true, defval = true, title = "Use color-filter")
userf = input(true, defval = true, title = "Use RSI-filter")

fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")
showbands = input(true, defval = true, title = "Show Bollinger Bands")

//Bollinger Bands
basis = sma(source, length)
dev = mult * stdev(source, length)
upper = basis + dev
lower = basis - dev

//Lines
col = showbands ? black : na 
plot(upper, linewidth = 1, color = col)
plot(basis, linewidth = 1, color = col)
plot(lower, linewidth = 1, color = col)

//Body filter
nbody = abs(close - open)
abody = sma(nbody, 10)
body = nbody > abody / 2 or usebf == false

//Color filter
bar = close > open ? 1 : close < open ? -1 : 0 
gb = bar == 1 or usecf == false
rb = bar == -1 or usecf == false

//RSI Filter
fastup = rma(max(change(close), 0), 7)
fastdown = rma(-min(change(close), 0), 7)
rsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))
ursi = rsi > 70 or userf == false
drsi = rsi < 30 or userf == false

//Signals
up = close <= lower and rb and body and drsi and (close < strategy.position_avg_price or strategy.position_size == 0)
dn = close >= upper and gb and body and ursi and (close > strategy.position_avg_price or strategy.position_size == 0)
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body

//Trading
if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if  exit
    strategy.close_all()