La estrategia de negociación de banda de Bollinger de múltiples filtros es una estrategia de negociación cuantitativa que combina el indicador de banda de Bollinger, el indicador de media móvil, el indicador RSI y las características gráficas de línea K para la detección multicondicional para generar señales de negociación cuando se cumplen las condiciones.
La estrategia utiliza principalmente tres indicadores: Bandas de Bollinger, promedio móvil y RSI. Entre ellos, el carril medio de las Bandas de Bollinger es el promedio móvil simple de precio de n días, y los carril superior e inferior son los carril medio +2 desviaciones estándar y los carril medio -2 desviaciones estándar, respectivamente. El indicador RSI es un valor entre 0 y 100 calculado en función del rango de aumento / caída durante un cierto período de tiempo.
La estrategia genera señales comerciales a través de las siguientes tres condiciones principales:
(1) Breakout de la banda inferior de Bollinger y contradicción del cuerpo de la línea K. Cuando el precio de cierre rompe la banda inferior hacia arriba y el color del cuerpo de la línea K contradice la dirección de tendencia actual, vaya largo.
(2) Breakout de la banda superior de Bollinger y contradicción del cuerpo de la línea K. Cuando el precio de cierre rompe la banda superior hacia abajo y el color del cuerpo de la línea K contradice la dirección de la tendencia actual, vaya corto.
(3) Inversión del cuerpo en línea K. Si la dirección de la posición es consistente con la inversión del color del cuerpo en línea K, cierre la posición.
Además, la estrategia también establece filtros de media móvil, filtros de carrocería de línea K, filtros RSI y otras condiciones auxiliares para controlar estrictamente la entrada.
Los riesgos pueden reducirse ajustando los parámetros de Bollinger y controlando estrictamente las paradas.
En general, esta estrategia es una típica estrategia de seguimiento de tendencias a mediano y largo plazo. Mediante la detección multiconditional y el estricto control de los tiempos de entrada y salida con un enfoque de negociación de tendencias, puede reducir las operaciones innecesarias y capturar las tendencias del mercado a mediano y largo plazo. Todavía hay mucho espacio para optimizar esta estrategia ajustando parámetros, agregando más herramientas auxiliares y así sucesivamente, para mejorar aún más la estabilidad y la rentabilidad 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()