Tendencia de ruptura de la banda de Bollinger siguiendo la estrategia

El autor:¿ Qué pasa?, Fecha: 2023-09-22 14:31:17
Las etiquetas:

Resumen general

Es una estrategia de seguimiento de tendencia basada en el indicador de Bollinger Bands. Utiliza la ruptura de las bandas superiores e inferiores de Bollinger Bands para determinar la dirección de la tendencia y abrir posiciones correspondientes. Cuando los precios comienzan a caer, utiliza un stop loss con espaciamiento dinámico para salir de las posiciones y obtener ganancias.

Estrategia lógica

La estrategia utiliza bandas de Bollinger para determinar la dirección de la tendencia. Las bandas de Bollinger se construyen calculando la desviación estándar de los precios para formar las bandas superior e inferior. Cuando los precios rompen la banda superior, indica un comienzo de tendencia alcista. Cuando los precios rompen la banda inferior, indica un comienzo de tendencia bajista.

La lógica de negociación específica es:

  1. Calcular las bandas media, superior e inferior de las bandas de Bollinger.

  2. Cuando el precio rompe la banda superior, ir largo.

  3. Utilice un stop loss para controlar los riesgos y salir cuando los precios comiencen a caer.

  4. Vuelve a entrar en la tendencia cuando los precios vuelvan a romper las bandas.

El uso de bandas de Bollinger para determinar tendencias y combinar con un stop loss dinámico puede controlar los riesgos de manera efectiva.

Análisis de ventajas

Las ventajas de esta estrategia incluyen:

  1. Usando bandas de Bollinger para determinar tendencias, simple y eficaz.

  2. La combinación de entrada de ruptura y parada de pérdida dinámica de seguimiento equilibra la captura de tendencias y el control de riesgos.

  3. Estructura de código limpia y concisa, fácil de entender y modificar.

  4. Pocos parámetros, fácil de optimizar.

  5. Aplicable a diferentes productos, flexible.

  6. buenos resultados de backtest, con un gran potencial de ganancias.

Análisis de riesgos

Los principales riesgos son:

  1. Las bandas de Bollinger se basan únicamente en estadísticas, riesgos de ajuste de curva.

  2. Difícil de distinguir la expansión del rango y las tendencias reales, puede causar errores de juicio.

  3. Los puntos de pérdida de parada demasiado apretados, el riesgo de ser detenido por las oscilaciones normales.

  4. No hay consideración de los costos de transacción.

  5. Período de prueba posterior limitado, riesgos de sobreajuste.

Las soluciones son:

  1. Optimizar los parámetros o añadir otros indicadores para la verificación de la señal.

  2. Mejorar la identificación de oscilaciones y canales.

  3. Ajuste dinámico de la pérdida de parada en función de ATR, etc.

  4. Agregue la comisión, los costos de deslizamiento.

  5. Ampliar el período de pruebas de retroceso, la verificación de múltiples mercados.

Direcciones de optimización

La estrategia se puede optimizar mediante:

  1. Prueba de efectos combinados de diferentes indicadores.

  2. Mejorar la identificación de las oscilaciones de tendencia.

  3. Introducción del aprendizaje automático para la optimización de parámetros dinámicos.

  4. Optimizando la estrategia de stop loss basada en los resultados de las pruebas de retroceso.

  5. Evaluación y suma de los costes de transacción.

  6. Optimización del espacio de parámetros para ajustes óptimos.

  7. Añadir la gestión de dinero para controlar los riesgos de posición.

Conclusión

Esta estrategia determina la dirección de la tendencia con Bollinger Bands y controla el riesgo con el stop loss. La lógica general es simple y clara. Tiene una buena capacidad de captura de tendencias, pero puede mejorarse introduciendo más indicadores técnicos, optimizando parámetros, agregando costos, etc. para hacerlo más robusto. En general, esta estrategia proporciona un enfoque simple y práctico basado en Bollinger Bands.


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

//@version=4
strategy(title="Bollinger Band Breakout", shorttitle = "BB Strategy",initial_capital=1000, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, commission_type = strategy.commission.percent, commission_value = 0.3, max_bars_back = 1000, overlay=true)

// Inputs //

sma = input(20,  minval=1)
mult   = input(1.2, minval=0.001, maxval=50)
src = input(close)

// alert msg  //

message_long_entry  = input("long entry")
message_short_entry = input("short entry")

// Calculations //

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

upper = basis + dev
lower = basis - dev

// Backtest //
fromyear = input(2019, defval = 2019, 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(1, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

leverage = input(1, "Leverage")

term = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))

// PLOT //

plot(basis, color = color.gray,  linewidth = 2)
lu = plot(upper, color = color.green, linewidth = 2)
ll = plot(lower, color = color.red,   linewidth = 2)

fill(lu, ll, color = color.gray)

// Signals //

long  = crossover(close, upper)
short = crossunder(close, lower)

// Strategy entry //
strategy.initial_capital = 50000
if (long and term)
    strategy.entry("long",  strategy.long, qty=strategy.initial_capital/close*leverage, when = long and barstate.isconfirmed, alert_message = message_long_entry)
    
if (short and term)
    strategy.entry("short",  strategy.short, qty=strategy.initial_capital/close*leverage, when = short and barstate.isconfirmed, alert_message = message_short_entry)

// strategy exit //

strategy.exit("long tsl", "long", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)
strategy.exit("short tsl", "short", loss = close*0.075 / syminfo.mintick, trail_points = close*0.05 / syminfo.mintick, trail_offset = close*0.005 / syminfo.mintick)





Más.