Tendencia siguiendo una estrategia basada en el cruce de la media móvil

El autor:¿ Qué pasa?, fecha: 2024-02-23 12:21:40
Las etiquetas:

img

Resumen general

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.

Principio de la estrategia

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.

Ventajas

  1. Apoyar la combinación de 7 tipos diferentes de medias móviles para adaptarse de forma flexible a las condiciones del mercado
  2. Personalizar los parámetros de dos promedios móviles para juzgar las tendencias a largo y mediano plazo
  3. Reglas de evaluación de señales simples y claras, fáciles de entender e implementar
  4. Apoyar posiciones largas y cortas, puede realizar operaciones de seguimiento de tendencias

Riesgos y soluciones

  1. 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

  2. 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

  3. 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

Direcciones de optimización

  1. Optimizar la combinación del ciclo de medias móviles y probar el impacto de los parámetros del ciclo largo y corto en el rendimiento de la estrategia
  2. Prueba el rendimiento de diferentes tipos de medias móviles para encontrar el algoritmo óptimo de medias móviles
  3. Añadir una variable de volumen de negociación o bandas de Bollinger para la combinación para mejorar la calidad de la señal
  4. Optimizar la estrategia de gestión de posiciones para mejorar el enfoque del porcentaje_de_capital de las posiciones fijas

Resumen de las actividades

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)

Más.