Estrategia de seguimiento de tendencias basada en cruces de medias móviles


Fecha de creación: 2024-02-23 12:21:40 Última modificación: 2024-02-23 12:21:40
Copiar: 4 Número de Visitas: 619
1
Seguir
1617
Seguidores

Estrategia de seguimiento de tendencias basada en cruces de medias móviles

Descripción general

La estrategia determina la dirección de la tendencia de los precios mediante el cálculo de dos promedios móviles con diferentes parámetros y su comparación entre sí, lo que permite realizar operaciones de seguimiento de tendencias. Cuando la media móvil rápida rompe la media móvil lenta desde abajo, se considera una señal alcista; cuando la media móvil rápida rompe la media móvil lenta desde arriba hacia abajo, se considera una señal bajista.

Principio de estrategia

Esta estrategia compara las medias móviles con dos conjuntos de diferentes configuraciones de parámetros, la primera configuración de las medias móviles por len1 y type1, y la segunda configuración de las medias móviles por len2 y type2. Donde len1 y len2 representan la longitud de ciclo de las dos medias móviles, respectivamente, y type1 y type2 representan el tipo de algoritmo de la media móvil.

Cuando el promedio móvil rápido de abajo rompe el promedio móvil lento para formar un tenedor de oro, se considera una señal de alza; cuando el promedio móvil rápido de arriba abajo rompe el promedio móvil lento para formar un tenedor de muerte, se considera una señal de baja.

Ejecutar operaciones de plus o de short según la dirección de la señal de cruce. Cuando se activa la señal de ventaja, si el parámetro needlong es verdadero, se realiza un plus de acuerdo con la cantidad o porcentaje de posición de default_qty_value_of_equity; cuando se activa la señal de baja, si el parámetro needshort es verdadero, se realiza un rescate de acuerdo con la cantidad o porcentaje de posición de default_qty_value_of_equity.

Ventajas estratégicas

  1. Soporta combinaciones de 7 diferentes tipos de medias móviles para adaptarse con flexibilidad a las condiciones del mercado
  2. Parámetros de dos promedios móviles que se pueden personalizar para juzgar tendencias a largo plazo y tendencias a medio plazo
  3. Las reglas de evaluación de señales estratégicas son sencillas, claras y fáciles de entender.
  4. Soporte para operaciones de plus y minus para el seguimiento de tendencias

Riesgos y soluciones

  1. Los promedios móviles son retrasados y pueden perder el punto de inflexión Solución: reducir adecuadamente el ciclo de las medias móviles o usarlas en combinación con otros indicadores

  2. No se aplica a mercados con alta volatilidad y frecuentes reveses Solución: aumentar las condiciones de filtración y evitar el comercio en situaciones de crisis

  3. Hay cierto riesgo de falsas señales. Solución: añadir otros parámetros de filtración en combinación para mejorar la fiabilidad de la señal

Dirección de optimización

  1. Optimización de la combinación de ciclos de las medias móviles, probando el impacto de los parámetros de largo y corto plazo en la rentabilidad de la estrategia
  2. Prueba el rendimiento de diferentes tipos de medias móviles para encontrar el mejor algoritmo de medias móviles
  3. Añadir indicadores como VARIABLE de volumen de transacción o canales de Brining para combinar y mejorar la calidad de la señal
  4. Optimización de las estrategias de gestión de posiciones y mejora de la forma de fijar el porcentaje de equidad de las posiciones

Resumir

Esta estrategia determina la tendencia de los precios mediante la comparación de la intersección de dos medias móviles y realiza las operaciones de avance y descenso correspondientes para capturar y seguir la tendencia. La estrategia tiene la ventaja de que las reglas de la señal son simples y claras, los parámetros se pueden ajustar, son muy aplicables y se pueden ajustar de manera óptima a una variedad de entornos de mercado.

Código Fuente de la Estrategia
/*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)