Estrategia de ruptura de Bollinger

El autor:¿ Qué pasa?, Fecha: 2023-09-21 10:38:13
Las etiquetas:

Resumen general

Esta estrategia se basa en el indicador de Bollinger Bands, tomando posiciones largas o cortas cuando el precio rompe las líneas superiores o inferiores de Bollinger Bands.

Estrategia lógica

  1. Calcular las líneas media, superior e inferior de Bollinger
  2. Ir largo en la línea inferior de ruptura; ir corto en la línea superior de ruptura
  3. Establecer la hora de inicio y de finalización para definir las horas de negociación
  4. Establecer tiempo de espera, por defecto a salida intradiaria

Específicamente, primero calcula la SMA de la línea media de longitud, y las líneas superior/inferior de múltiples veces la desviación estándar. Cuando el cierre se rompe hacia arriba desde la línea inferior, vaya largo. Cuando el cierre se rompe desde la línea superior, vaya corto. También establece el tiempo de inicio y fin para limitar las horas de negociación. Salir antes de la apertura diaria.

La estrategia intenta capturar movimientos en expansión después de que el precio rompe las bandas.

Análisis de ventajas

  1. Simple e intuitivo, fácil de entender e implementar
  2. Utilice bandas de Bollinger para juzgar las rupturas de tendencia, tiene alguna tendencia siguiendo la capacidad
  3. Ajuste flexible de parámetros para diferentes ciclos y productos
  4. Control de salida intradiario riesgo de la noche a la mañana
  5. Puede permitir sólo el comercio largo o corto

Análisis de riesgos

  1. El precio puede recaer después de la ruptura inicial.
  2. Los parámetros necesitan ajustes para diferentes ciclos.
  3. El riesgo de pérdida potencial de expansión, un rango de ruptura mayor puede aumentar las pérdidas.
  4. Aumento de los costes de transacción: el comercio frecuente puede aumentar los costes de transacción.

Los riesgos pueden reducirse optimizando las reglas de entrada, agregando stop loss, introduciendo filtros de tendencia, etc.

Direcciones de optimización

  1. Optimización de parámetros para diferentes ciclos
  2. Añadir reglas de reingreso y pirámide para seguir las tendencias
  3. Introducir el stop loss para controlar los riesgos
  4. Establecer horarios de negociación para evitar eventos noticiosos importantes
  5. Prueba de filtros de tendencia para evitar la acción de los precios agitados
  6. Evaluar los diferentes períodos de retención y comparar los resultados

Resumen de las actividades

Esta es una estrategia de ruptura basada en bandas de Bollinger. Se beneficia de los movimientos de ruptura. Los pros son una lógica simple y una implementación fácil; los contras son susceptibles a falsos breakouts. Los riesgos se pueden gestionar a través de la optimización de parámetros, stop loss, control de horas de negociación, etc. Permite a los operadores comprender los conceptos básicos del uso de indicadores y breakouts comerciales.


/*backtest
start: 2023-08-21 00:00:00
end: 2023-09-20 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy("Noro's Bollinger Strategy v1.0", shorttitle = "Bollinger str 1.0", 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, minval=1)
mult = input(1.0, minval=0.001, maxval=50)

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")

source = close
basis = sma(source, length)
dev = mult * stdev(source, length)

upper = basis + dev
lower = basis - dev

up = close < lower
dn = close > upper
exit = (strategy.position_size > 0 and close > open) or (strategy.position_size < 0 and close < open)

if up
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))

if dn
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, 01, 00, 00) and time < timestamp(toyear, tomonth, 31, 00, 00)))
    
if time > timestamp(toyear, tomonth, 31, 00, 00) or exit
    strategy.close_all()

Más.