Esta estrategia está diseñada basándose en el principio de canal dinámico y seguimiento de tendencia de la media móvil. Cálcula el canal dinámico de precios, juzga la dirección de la tendencia a través de los rieles superiores e inferiores del canal y genera señales comerciales combinando el promedio móvil para filtrar la volatilidad de precios. Esta estrategia es adecuada para el comercio de tendencias a medio y corto plazo.
Los principios principales de esta estrategia son los siguientes:
Calcular el canal de precios dinámico. La línea media del canal se calcula a partir del precio más alto y el precio más bajo. El carril superior es la línea media + volatilidad de precios MA, y el carril inferior es la línea media - volatilidad de precios MA.
Cuando el precio rompe la línea superior, se define como alcista.
Filtrar el ruido: utilizar el MA de volatilidad de precios de un cierto período para filtrar el ruido de las fluctuaciones aleatorias de precios.
Generar señales de trading. Cuando el precio es alcista, se genera una señal de compra cuando el precio de cierre es inferior al precio de apertura en ese período. Cuando el precio es bajista, se genera una señal de venta cuando el precio de cierre es superior al precio de apertura.
Las ventajas de esta estrategia son:
Los riesgos de esta estrategia son:
Soluciones:
La estrategia se puede optimizar en los siguientes aspectos:
Esta estrategia integra las ideas de juicio de tendencia dinámico de canal y MA, y tiene un buen rendimiento en la captura de direcciones de tendencia a mediano y corto plazo.
/*backtest start: 2024-01-01 00:00:00 end: 2024-01-31 23:59:59 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("Noro's Bands Strategy v1.0", shorttitle = "NoroBands str 1.0", 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") len = input(20, defval = 20, minval = 2, maxval = 200, title = "Period") color = input(true, "Color") needbb = input(false, defval = false, title = "Show Bands") needbg = input(false, defval = false, title = "Show Background") src = close //PriceChannel 1 lasthigh = highest(src, len) lastlow = lowest(src, len) center = (lasthigh + lastlow) / 2 //dist dist = abs(src - center) distsma = sma(dist, len) hd = center + distsma ld = center - distsma //Trend trend = close < ld and high < hd ? -1 : close > hd and low > ld ? 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 = 90) //up = and trend == 1 ? 1 : 0 //dn = and trend == -1 ? 1 : 0 up = close < hd and trend == 1 and (close < open or color == false) ? 1 : 0 dn = close > ld and trend == -1 and (close > open or color == false) ? 1 : 0 longCondition = up == 1 if (longCondition) strategy.entry("Long", strategy.long, needlong == false ? 0 : na) shortCondition = dn == 1 if (shortCondition) strategy.entry("Short", strategy.short, needshort == false ? 0 : na)