Estrategia de seguimiento de tendencias de doble media móvil de banda de Bollinger

El autor:¿ Qué pasa?, Fecha: 2023-12-22 14:54:20
Las etiquetas:

img

Resumen general

Esta estrategia utiliza una combinación de bandas de Bollinger y promedios móviles para la identificación y entrada de tendencias.

Estrategia lógica

  1. Calcular el canal de Bollinger para determinar la dirección de la tendencia del mercado

    • Utilizar el máximo máximo y el mínimo mínimo para calcular las bandas de canales
    • La banda media del canal es la media de alta y baja
    • Determinar la dirección de la tendencia en función de la ubicación del precio dentro del canal
  2. Calcular el tamaño del cuerpo de la vela alcista para señales de stop loss y reversión

    • El cuerpo de la vela alcista es el valor absoluto de cierre menos abierto
    • Calcular el promedio de N-periodo de los cuerpos de las velas, comparar con el cuerpo actual para el stop loss y la inversión
  3. Introducción de operaciones en dirección del canal tras la confirmación de la tendencia

    • Entradas largas cerca de la banda inferior en tendencias alcistas
    • Entradas cortas cerca de la banda superior en tendencias bajistas
  4. Utilice medias móviles para filtrar para evitar señales falsas

    • Calcular la media móvil del precio de cierre durante el período N
    • Generar señales sólo en las medias móviles

Ventajas

  1. Identificación sistemática de tendencias combinando bandas y medias móviles

    Las bandas identifican claramente los canales de precios y la dirección de la tendencia. Las medias móviles filtran el ruido. La combinación permite la detección de tendencias robustas inmunes a los shocks esporádicos del mercado.

  2. Control eficaz del riesgo mediante pérdidas de parada en el cuerpo de la vela

    Comparando el cuerpo actual de la vela con el promedio histórico, se detecta la inversión de tendencia para el stop loss y la reducción de la posición.

  3. Reglas claras de entrada cuantitativa y de detención de pérdidas

    Estrictos requisitos de media móvil y dirección del canal para la entrada. Regla de stop loss del tamaño del cuerpo de la vela. Hace que toda la entrada y salida del sistema sean claras y sistemáticas.

Análisis de riesgos

  1. Pérdidas potenciales en mercados de rango

    El precio que oscila alrededor de bandas puede causar pérdidas menores repetidas.

  2. Las pérdidas de detención prematuras en tendencias fuertes

    Los retracements a corto plazo pueden desencadenar paradas en fuertes tendencias alcistas/bajas.

  3. Señales erróneas por mal ajuste de parámetros

    Los parámetros de media móvil y bandas subóptimos pueden causar señales falsas.

Oportunidades de mejora

  1. Optimizar el período de revisión de la media móvil

    Ajustar el período para reducir el suavizado para una detección más rápida del cambio de tendencia.

  2. Prueba de mecanismos alternativos de detención de pérdidas

    Evaluar las paradas de trailing, paradas de ATR, etc. para encontrar el sistema óptimo.

  3. Incorporar modelos de aprendizaje automático

    Forma modelos con datos históricos extensos para aumentar la tendencia y la predicción de señales.

Conclusión

Esta estrategia equilibra la identificación de tendencias y el control de riesgos utilizando bandas de Bollinger y promedios móviles. El enfoque cuantitativo sistemático con reglas claras de entrada / salida permite una captura efectiva de recompensas con riesgo controlado.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-21 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


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

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
takepercent = input(0, defval = 0, minval = 0, maxval = 1000, title = "take, %")
needct = input(false, defval = false, title = "Counter-trend entry")
len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period")
needbb = input(true, defval = true, title = "Show Bands")
needbg = input(true, defval = true, title = "Show Background")
src = close

//PriceChannel 1
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
hd1 = center + distsma / 2
ld1 = center - distsma / 2

//Trend
trend = close < ld and high < center ? -1 : close > hd and low > center ? 1 : trend[1]

//Lines
colo = needbb == false ? na : black
plot(hd, color = colo, linewidth = 1, transp = 0, title = "High band")
plot(center, color = colo, linewidth = 1, transp = 0, title = "center")
plot(ld, color = colo, linewidth = 1, transp = 0, title = "Low band")

//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 80)

//Body
body = abs(close - open)
smabody = ema(body, 30)
candle = high - low

//Engulfing
min = min(open, close)
max = max(open, close)
bar = close > open ? 1 : close < open ? -1 : 0
upeng = bar == 1 and bar[1] == -1 and min >= min[1] and max <= max[1] ? 1 : 0
dneng = bar == -1 and bar[1] == 1 and min >= min[1] and max <= max[1] ? 1 : 0

//Signals
up7 = trend == 1 and ((bar == -1 and bar[1] == -1) or (body > smabody and close < open)) ? 1 : 0
dn7 = trend == 1 and bar == 1 and bar[1] == 1 and close > strategy.position_avg_price * (100 + takepercent) / 100 ? 1 : 0
up8 = trend == -1 and bar == -1 and bar[1] == -1 and close < strategy.position_avg_price * (100 - takepercent) / 100 ? 1 : 0
dn8 = trend == -1 and ((bar == 1 and bar[1] == 1) or (body > smabody and close > open)) ? 1 : 0

if up7 == 1 or up8 == 1 
    strategy.entry("Long", strategy.long, needlong == false ? 0 : trend == -1 and needct == false ? 0 : na)

if dn7 == 1 or dn8 == 1
    strategy.entry("Short", strategy.short, needshort == false ? 0 : trend == 1 and needct == false ? 0 : na)

Más.