Estrategia de negociación de impulso de banda de Bollinger de doble vía

El autor:¿ Qué pasa?, Fecha: 2023-11-16 17:36:00
Las etiquetas:

img

Resumen general

Esta estrategia se basa en el concepto de bandas de Bollinger, estableciendo rieles superiores e inferiores para el canal de precios y usándolos para el juicio de tendencia y la generación de señales comerciales. Específicamente, calcula la desviación absoluta promedio del precio como el ancho de banda del canal. El rieles medio del canal es el promedio móvil simple del precio, y los rieles superiores e inferiores son el rieles medio más o menos 1 o 2 veces el ancho de banda del canal. Cuando el precio rompe el rieles superior, vaya largo. Cuando rompe el rieles inferior, vaya corto.

Principio

Los puntos principales de esta estrategia incluyen:

  1. Calcule el carril medio del precio, que es el promedio móvil simple del precio.

  2. Calcular la media móvil simple de la desviación absoluta del precio como el ancho de banda del canal.

  3. Determine los rieles superior e inferior de acuerdo con el carril medio y el ancho de banda. El carril superior es el carril medio más 1 o 2 veces el ancho de banda. El carril inferior es el carril medio menos 1 o 2 veces el ancho de banda.

  4. Calcule el indicador de juicio de tendencia para largo y corto. Cuando el precio está por encima del carril superior 2, es largo. Cuando el precio está por debajo del carril inferior 2, es corto.

  5. Generar señales de trading. Cuando el precio cruza por encima del rieles superior 2, ir largo. Cuando cruza por debajo del rieles inferior 2, ir corto.

  6. Establezca la línea de stop loss. La línea de stop loss para las órdenes largas es el carril inferior 1, y para las órdenes cortas es el carril superior 1.

  7. Calcular el tamaño de la posición de acuerdo con los requisitos de gestión de capital.

La estrategia integra las ideas de usar promedios móviles para juzgar tendencias, Bandas de Bollinger para juzgar sobrecompradas y sobrevendidas, y breakouts para hacer reversiones.

Análisis de ventajas

Las principales ventajas de esta estrategia son las siguientes:

  1. El sistema de doble carril puede juzgar mejor la fuerza de la tendencia.

  2. Las bandas de Bollinger tienen una fuerte función de regresión para evitar eficazmente las falsas rupturas.

  3. La diferencia entre los dos carriles combinados con la regresión de las bandas de Bollinger forman señales comerciales relativamente estables.

  4. Hay una lógica de stop loss/exit clara para controlar los riesgos.

  5. El tamaño de las posiciones se ajusta a los requisitos de gestión de capital, evitando el uso de un apalancamiento superior.

  6. La idea estratégica es clara y fácil de entender y optimizar.

  7. Los parámetros flexibles lo hacen adaptable a diferentes mercados.

Análisis de riesgos

La estrategia también tiene algunos riesgos:

  1. Los parámetros incorrectos de las bandas de Bollinger pueden causar efectos de abandono, al no poder realizar un seguimiento efectivo de los precios.

  2. La diferencia entre dos rieles no puede evitar completamente juicios erróneos de tendencia.

  3. Puede generar más señales inválidas en los mercados de rango.

  4. Las pérdidas pueden producirse en situaciones de fuga falsa.

  5. Hay algún retraso de tiempo, posiblemente faltan puntos de inflexión del ciclo.

  6. La relación riesgo/beneficio está limitada por el punto de stop loss, incapaz de perseguir tendencias ilimitadamente.

Medidas de gestión de riesgos correspondientes:

  1. Optimizar los parámetros para que las bandas de Bollinger sean adaptables a diferentes ciclos.

  2. Combine otros indicadores de confirmación para evitar errores de juicio.

  3. Reducir el tamaño de la posición para controlar la pérdida única.

  4. Optimizar los puntos de stop loss para garantizar la relación riesgo/recompensa.

  5. Acortar adecuadamente el ciclo para reducir el retraso.

  6. El control de riesgos debe ser robusto, sin persecución ilimitada.

Direcciones de optimización

La estrategia se puede optimizar en las siguientes direcciones:

  1. Optimizar los parámetros de las bandas de Bollinger para un mejor seguimiento de los precios.

  2. Prueba diferentes promedios móviles como EMA, DWMA, etc.

  3. Añadir filtro de tendencia para evitar la negociación en mercados de rango.

  4. Añadir métodos de salida agresivos para capturar más ganancias de tendencia.

  5. Introducir marcos de tiempo múltiples para la combinación, adecuados a las diferentes condiciones del mercado.

  6. Agregue condiciones adicionales como aumentos de volumen para evitar fallas.

  7. Considere las bandas de Bollinger invertidas, vendiendo la banda superior, comprando la banda inferior.

  8. Realizar la optimización de parámetros para obtener las mejores combinaciones de parámetros.

Resumen de las actividades

La idea general de esta estrategia es clara y estable. También hay margen de mejora a través de la optimización de parámetros, mejora de la lógica, gestión de riesgos, etc. para refinarla aún más en una estrategia comercial cuantitativa muy práctica.


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

// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © noro

//@version=4
strategy(title = "Noro's Bands Strategy", shorttitle = "Bands", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, commission_value = 0.1)

//Sattings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
lotsize = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %")
len = input(20, defval = 20, minval = 1, maxval = 1000, title = "Length")
src = input(ohlc4, title = "Source")
showbb = input(true, title = "Show Bands")
showof = input(true, title = "Show Offset")
showbg = input(false, title = "Show Background")
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")

//PriceChannel
lasthigh = highest(src, len)
lastlow = lowest(src, len)
center = (lasthigh + lastlow) / 2

//Distance
dist = abs(src - center)
distsma = sma(dist, len)
hd = center + distsma
ld = center - distsma
hd2 = center + distsma * 2
ld2 = center - distsma * 2

//Trend
trend = 0
trend := high > hd2 ? 1 : low < ld2 ? -1 : trend[1]
bgcol = showbg == false ? na : trend == 1 ? color.lime : color.red
bgcolor(bgcol, transp = 70)

//Lines
colo = showbb == false ? na : color.black
offset = showof ? 1 : 0
plot(hd2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 2")
plot(hd, color = colo, linewidth = 1, transp = 0, offset = offset, title = "High band 1")
plot(center, color = colo, linewidth = 1, transp = 0, offset = offset, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 1")
plot(ld2, color = colo, linewidth = 1, transp = 0, offset = offset, title = "Low band 2")

//Trading
size = strategy.position_size
needstop = needlong == false or needshort == false
truetime = time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)
lot = 0.0
lot := size != size[1] ? strategy.equity / close * lotsize / 100 : lot[1]
if distsma > 0
    strategy.entry("Long", strategy.long, lot, stop = hd2, when = truetime and needlong)
    strategy.entry("Short", strategy.short, lot, stop = ld2, when = truetime and needshort)
sl = size > 0 ? ld2 : size < 0 ? hd2 : na
if size > 0 and needstop
    strategy.exit("Stop Long", "Long", stop = sl)
if size < 0 and needstop
    strategy.exit("Stop Short", "Short", stop = sl)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("Long")
    strategy.cancel("Short")

Más.