Esta estrategia determina la dirección de la tendencia del precio calculando dos promedios móviles con diferentes configuraciones de parámetros y comparando sus situaciones de cruce, para implementar la tendencia después de la negociación. Cuando el promedio móvil rápido rompe el promedio móvil lento desde abajo, se juzga como una señal alcista. Cuando el promedio móvil rápido rompe el promedio móvil lento desde arriba, se juzga como una señal bajista. Esta estrategia puede lograr el juicio de las tendencias de diferentes ciclos ajustando los parámetros.
Esta estrategia utiliza dos conjuntos de promedios móviles con diferentes configuraciones de parámetros para la comparación. El primer parámetro de promedio móvil es establecido por len1 y tipo1, y el segundo parámetro de promedio móvil es establecido por len2 y tipo2.
Cuando el promedio móvil rápido cruza por encima del promedio móvil lento para formar una cruz dorada, se juzga como una señal alcista.
De acuerdo con la dirección de la señal de cruce, se ejecutarán posiciones largas o cortas. Cuando se activa una señal alcista, si el parámetro needlong es verdadero, se abrirá una posición larga con la cantidad default_qty_value o porcentaje_de_equity. Cuando se activa una señal bajista, si el parámetro needshort es verdadero, se abrirá una posición corta con la cantidad default_qty_value o porcentaje_de_equity.
Las medias móviles tienen propiedades de retraso y pueden perder los puntos de inversión de precios
Solución: acortar adecuadamente los ciclos de media móvil o utilizarlos en combinación con otros indicadores
No es adecuado para mercados con alta volatilidad y reversiones frecuentes
Solución: añadir condiciones de filtración para evitar la negociación en mercados oscilantes
Hay ciertos riesgos de señales falsas
Solución: añadir otros indicadores de filtración para la combinación para mejorar la fiabilidad de la señal
Esta estrategia juzga la tendencia del precio comparando los cruces de dos promedios móviles, y hace operaciones largas y cortas correspondientes para capturar y beneficiarse de las tendencias. La ventaja es que las reglas de la señal son simples y claras, los parámetros son ajustables, la aplicabilidad es fuerte, y se puede optimizar y ajustar para varios entornos de mercado. Preste atención a evitar los riesgos rezagados de promedios móviles y mercados agitados, que pueden reducirse agregando otros indicadores para filtrar para mejorar la calidad de la señal.
/*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(title = "Noro's MAs Cross Tests v1.0", shorttitle = "MAs Cross tests 1.0", overlay=true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 0) needlong = input(true, "long") needshort = input(true, "short") len2 = input(15, defval = 15, minval = 2, maxval = 1000, title = "Fast MA length") type2 = input(1, defval = 1, minval = 1, maxval = 7, title = "Fast MA Type") src2 = input(close, defval = close, title = "Fast MA Source") len1 = input(30, defval = 30, minval = 2, maxval = 1000, title = "Slow MA length") type1 = input(1, defval = 1, minval = 1, maxval = 7, title = "Slow MA Type") src1 = input(close, defval = close, title = "Slow MA Source") col = input(false, defval = false, title = "Color of bar") o = input(false, title = "1 SMA, 2 EMA, 3 VWMA, 4 DEMA, 5 TEMA, 6 KAMA, 7 Price Channel") //DEMA 1 dema1 = 2 * ema(src1, len1) - ema(ema(close, len1), len1) //TEMA 1 xEMA1 = ema(src1, len1) xEMA2 = ema(xEMA1, len1) xEMA3 = ema(xEMA2, len1) tema1 = 3 * xEMA1 - 3 * xEMA2 + xEMA3 //KAMA 1 xvnoise = abs(src1 - src1[1]) nfastend = 0.20 nslowend = 0.05 nsignal = abs(src1 - src1[len1]) nnoise = sum(xvnoise, len1) nefratio = iff(nnoise != 0, nsignal / nnoise, 0) nsmooth = pow(nefratio * (nfastend - nslowend) + nslowend, 2) kama1 = nz(kama1[1]) + nsmooth * (src1 - nz(kama1[1])) //PriceChannel 1 lasthigh1 = highest(src1, len1) lastlow1 = lowest(src1, len1) center1 = (lasthigh1 + lastlow1) / 2 //DEMA 2 dema2 = 2 * ema(src2, len2) - ema(ema(close, len2), len2) //TEMA 2 xEMA12 = ema(src2, len2) xEMA22 = ema(xEMA12, len2) xEMA32 = ema(xEMA22, len2) tema2 = 3 * xEMA12 - 3 * xEMA22 + xEMA32 //KAMA 2 xvnoise2 = abs(src2 - src2[1]) nfastend2 = 0.20 nslowend2 = 0.05 nsignal2 = abs(src2 - src2[len2]) nnoise2 = sum(xvnoise2, len2) nefratio2 = iff(nnoise2 != 0, nsignal2 / nnoise2, 0) nsmooth2 = pow(nefratio2 * (nfastend2 - nslowend2) + nslowend2, 2) kama2 = nz(kama2[1]) + nsmooth2 * (src2 - nz(kama2[1])) //PriceChannel 2 lasthigh2 = highest(src2, len2) lastlow2 = lowest(src2, len2) center2 = (lasthigh2 + lastlow2) / 2 //MAs ma1 = type1 == 1 ? sma(src1, len1) : type1 == 2 ? ema(src1, len1) : type1 == 3 ? vwma(src1, len1) : type1 == 4 ? dema1 : type1 == 5 ? tema1 : type1 == 6 ? kama1 : type1 == 7 ? center1 : 0 ma2 = type2 == 1 ? sma(src2, len2) : type2 == 2 ? ema(src2, len2) : type2 == 3 ? vwma(src2, len2) : type2 == 4 ? dema2 : type2 == 5 ? tema2 : type2 == 6 ? kama2 : type2 == 7 ? center2 : 0 plot(ma1, color = blue, linewidth = 3, transp = 0) plot(ma2, color = red, linewidth = 3, transp = 0) //Signals trend = ma2 > ma1 ? 1 : ma2 < ma1 ? -1 : trend[1] up = trend == 1 and ((close < open and close[1] < open[1]) or col == false) dn = trend == -1 and ((close > open and close[1] > open[1]) or col == false) if up strategy.entry("Long", strategy.long, needlong == false ? 0 : na) if dn strategy.entry("Short", strategy.short, needshort == false ? 0 : na)