Estrategia de seguimiento de Bollinger de Noro

El autor:¿ Qué pasa?, Fecha: 2023-11-28 16:57:28
Las etiquetas:

img

Resumen general

Esta es una estrategia de seguimiento de impulso basada en bandas de Bollinger, que combina bandas de Bollinger para juzgar las tendencias del mercado y los puntos de reversión, y establece posiciones largas y cortas para rastrear las fluctuaciones del mercado.

Principios

El indicador central de esta estrategia es las bandas de Bollinger, que consta de banda media, banda superior y banda inferior. La banda media es el promedio móvil de n días, y las bandas superior e inferior son las compensaciones de la banda media más / menos desviación estándar. Cuando el precio se acerca a la banda superior / inferior, se considera una señal de sobrecompra / sobreventa. La estrategia incorpora la desviación de tendencia como la base para las posiciones de apertura, es decir, las posiciones de apertura cuando el precio rompe la banda media en la dirección opuesta.

Esta estrategia también incorpora entradas de tendencia y entradas de inversión media, correspondientes a diferentes oportunidades comerciales. Las entradas de tendencia requieren que la banda media sea la referencia de soporte / resistencia y formen desviaciones. Las entradas de inversión media se invierten directamente cerca de las bandas de Bollinger superior / inferior. La estrategia combina estos dos tipos de señales y puede realizar operaciones de seguimiento de tendencia e inversión.

Análisis de ventajas

Esta estrategia combina las características de sobrecompra / sobreventa de las bandas de Bollinger con el juicio del punto de inversión. Esto le permite aplicarse tanto a los mercados de tendencia como a los de rango, capturando diferentes tipos de oportunidades comerciales. La configuración de salida de stop loss evita que la pérdida se expanda. Además, la capacidad de operar tanto largo como corto mejora la aplicabilidad de la estrategia.

En comparación con las estrategias de Bollinger simples, la lógica de tendencia adicional hace que las entradas de esta estrategia sean más estables, y también captura oportunidades de reversión.

Análisis de riesgos

Esta estrategia se basa principalmente en las características de sobrecompra / sobreventa de las bandas de Bollinger. Por lo tanto, cuando hay una fluctuación extrema de precios, el ancho de las bandas de Bollinger sigue expandiéndose, lo que puede llevar fácilmente a múltiples operaciones perdedoras. Este es un punto de riesgo potencial. Además, todavía hay algunas incertidumbres y errores en los juicios de inversión, causando entradas y paradas fallidas.

En contra del fracaso de las bandas de Bollinger, podemos acortar el parámetro n para hacer que las bandas sean más sensibles, o reducir el ancho de la banda para reducir la posibilidad de pérdidas.

Direcciones de optimización

Las principales direcciones para optimizar esta estrategia incluyen:

  1. Los parámetros de las bandas de Bollinger se pueden ajustar de acuerdo con diferentes mercados para encontrar la combinación óptima.
  2. La magnitud de la desviación y el cálculo de los valores medios pueden comprobarse con otras opciones.
  3. Añadir más filtros para juzgar las señales de entrada y reducir los falsos positivos.
  4. Prueba otros métodos de stop loss como la trail stop loss.
  5. Los parámetros se pueden optimizar para productos y plazos específicos.

Conclusión

Esta estrategia hace expansiones y optimizaciones efectivas a las estrategias estándar de Bollinger. La desviación de tendencia agregada mejora la estabilidad y utiliza bien las oportunidades de reversión. La capacidad de operar en ambas direcciones y detener las pérdidas también hace que la estrategia sea más robusta. Se pueden lograr mejoras adicionales mediante la optimización de parámetros y la adición de más filtros.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 30m
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=3
strategy("Noro's Bollinger Strategy v1.3", shorttitle = "Bollinger str 1.3", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 5)

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

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

uset = input(true, defval = true, title = "Use trend entry")
usect = input(true, defval = true, title = "Use counter-trend entry")

fromyear = input(2018, defval = 2018, 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
body = abs(close - open)
abody = ema(body, 30)

//Signals
bar = close > open ? 1 : close < open ? -1 : 0 
up1 = bar == -1 and ohlc4 >= basis and ohlc4 < upper and (close < strategy.position_avg_price or strategy.position_size == 0) and uset
dn1 = bar == 1 and ohlc4 <= basis and ohlc4 > lower and (close > strategy.position_avg_price or strategy.position_size == 0) and uset
up2 = close <= lower and usect
dn2 = close >= upper and usect
exit = ((strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)) and body > abody / 2

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Más.