La estrategia de seguimiento de tendencias de doble línea media es una estrategia que utiliza una combinación de promedios móviles rápidos y promedios móviles lentos para juzgar la tendencia del mercado y emitir señales de negociación cuando se produce un cambio en la dirección de la tendencia. La estrategia combina al mismo tiempo el indicador de línea media y el indicador de canal de precios para identificar la tendencia, lo que puede filtrar el ruido del mercado y determinar la dirección de la tendencia.
La estrategia de seguimiento de tendencias de doble línea media utiliza dos indicadores de media móvil: una media móvil rápida (de 5 ciclos) y una media móvil lenta (de 21 ciclos). La media móvil rápida se utiliza para generar señales de negociación y la media móvil lenta para determinar la dirección de la tendencia del mercado. Cuando la media rápida cruza la media lenta de abajo hacia arriba, genera una señal de compra; cuando la media rápida cruza la media lenta de arriba hacia abajo, genera una señal de venta.
La estrategia también utiliza un indicador de canal de precios para ayudar a determinar la tendencia. La canal de precios se determina por el promedio móvil de los precios más altos y más bajos.
La estrategia requiere que aparezcan columnas rojas consecutivas (la cantidad de columnas que el usuario puede configurar) como condición de filtrado adicional para juzgar las señales de compra y venta. Esto evita que se emitan señales erróneas en la zona de composición.
En general, la lógica de las estrategias de seguimiento de tendencias de doble sentido es:
A través de la evaluación de tendencias en varios niveles, se puede filtrar eficazmente el ruido y determinar la dirección de la tendencia.
La estrategia de seguimiento de tendencias en línea recta tiene las siguientes ventajas:
En resumen, la estrategia es más estable en general y se desempeña mejor en mercados de tendencia significativa.
Las estrategias de seguimiento de tendencias de doble línea equilibrada también presentan algunos riesgos, principalmente:
En consecuencia, se puede reducir el riesgo estratégico de la siguiente manera:
La estrategia de seguimiento de tendencias en dos líneas uniformes tiene espacio para una mayor optimización, principalmente en las siguientes direcciones:
Estas orientaciones de optimización pueden mejorar aún más la estabilidad, adaptabilidad e inteligencia de las estrategias.
La estrategia de seguimiento de tendencias de doble línea es una estrategia de seguimiento de tendencias más sólida en general. Al mismo tiempo, combina el indicador de la línea de paridad y el canal de precios para determinar la dirección y la intensidad de la tendencia y emite una señal de negociación en una línea de paridad rápida.
/*backtest
start: 2023-12-24 00:00:00
end: 2024-01-23 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=2
strategy(title = "Noro's Trend MAs Strategy v1.8", shorttitle = "Trend MAs str 1.8", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value=100.0, pyramiding=0)
//Settings
needlong = input(true, "long")
needshort = input(true, "short")
needstops = input(false, "stops")
stoppercent = input(5, defval = 5, minval = 1, maxval = 50, title = "Stop, %")
useohlc4 = input(false, defval = false, title = "Use OHLC4")
usefastsma = input(true, "Use fast MA Filter")
fastlen = input(5, defval = 5, minval = 1, maxval = 50, title = "fast MA Period")
slowlen = input(21, defval = 20, minval = 2, maxval = 200, title = "slow MA Period")
bars = input(2, defval = 2, minval = 0, maxval = 3, title = "Bars Q")
needbg = input(false, defval = false, title = "Need trend Background?")
needarr = input(false, defval = false, title = "Need entry arrows?")
src = useohlc4 == true ? ohlc4 : close
fastsma = ema(src, 5)
//PriceChannel 1
lasthigh = highest(src, slowlen)
lastlow = lowest(src, slowlen)
center = (lasthigh + lastlow) / 2
//PriceChannel 2
lasthigh2 = highest(src, fastlen)
lastlow2 = lowest(src, fastlen)
center2 = (lasthigh2 + lastlow2) / 2
//Trend
//ma = type == 1 ? sma(src, len) : type == 2 ? ema(src, len) : type == 3 ? vwma(src, len) : type == 4 ? dema : type == 5 ? tema : type == 6 ? kama : type == 7 ? center : 0
//trend = low > ma and low[1] > ma[1] and low[2] > ma[2] ? 1 : high < ma and high[1] < ma[1] ? -1 : trend[1]
trend1 = low > center and low[1] > center[1] ? 1 : high < center and high[1] < center[1] ? -1 : trend1[1]
trend2 = low > center2 and low[1] > center2[1] ? 1 : high < center2 and high[1] < center2[1] ? -1 : trend1[1]
trend = trend1 == 1 and trend2 == 1 ? 1 : trend2 == -1 and trend2 == -1 ? -1 : trend[1]
//Bars
bar = close > open ? 1 : close < open ? -1 : 0
redbars = bars == 0 ? 1 : bars == 1 and bar == -1 ? 1 : bars == 2 and bar == -1 and bar[1] == -1 ? 1 : bars == 3 and bar == -1 and bar[1] == -1 and bar[2] == -1 ? 1 : 0
greenbars = bars == 0 ? 1 : bars == 1 and bar == 1 ? 1 : bars == 2 and bar == 1 and bar[1] == 1 ? 1 : bars == 3 and bar == 1 and bar[1] == 1 and bar[2] == 1 ? 1 : 0
//Signals
up = trend == 1 and (low < center2 or usefastsma == false) and (redbars == 1) ? 1 : 0
dn = trend == -1 and (high > center2 or usefastsma == false) and (greenbars == 1) ? 1 : 0
//Lines
colorfastsma = usefastsma == true ? red : na
plot(fastsma, color = colorfastsma, title = "Fast MA")
plot(center, color = blue, linewidth = 3, transp = 0, title = "Slow MA")
plot(center2, color = red, linewidth = 3, transp = 0, title = "PriceChannel 2")
//Arrows
plotarrow(up == 1 and needarr == true ? 1 : 0, colorup = black, colordown = black, transp = 0)
plotarrow(dn == 1 and needarr == true ? -1 : 0, colorup = black, colordown = black, transp = 0)
//Background
col = needbg == false ? na : trend == 1 ? lime : red
bgcolor(col, transp = 90)
//Alerts
alertcondition(up == 1, title='buy', message='Uptrend')
alertcondition(dn == 1, title='sell', message='Downtrend')
//Trading
stoplong = up == 1 and needstops == true ? close - (close / 100 * stoppercent) : stoplong[1]
stopshort = dn == 1 and needstops == true ? close + (close / 100 * stoppercent) : stopshort[1]
longCondition = up == 1
if (longCondition)
strategy.entry("Long", strategy.long, needlong == false ? 0 : na)
strategy.exit("Stop Long", "Long", stop = stoplong)
shortCondition = dn == 1
if (shortCondition)
strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
strategy.exit("Stop Short", "Short", stop = stopshort)