Estrategia cuantitativa combinada de EMAS en movimiento dinámico


Fecha de creación: 2024-01-22 12:34:33 Última modificación: 2024-01-22 12:34:33
Copiar: 1 Número de Visitas: 536
1
Seguir
1617
Seguidores

Estrategia cuantitativa combinada de EMAS en movimiento dinámico

Descripción general

La estrategia es una estrategia de combinación de promedios móviles dinámicos con múltiples períodos de tiempo. Utiliza promedios móviles indicativos de diferentes longitudes (EMA) para determinar tendencias y entrar y salir. La barra MAX en el nombre de la estrategia indica que se utilizan múltiples EMA, y la barra dinámica indica que la longitud de la EMA es ajustable.

Principio de estrategia

La estrategia utiliza 7 EMA de diferentes velocidades, desde el más rápido hasta el más lento: 3 EMA de ciclo, 15 ciclo, 19 ciclo, 50 ciclo, 100 ciclo, 150 ciclo y 200 ciclo. Los 7 EMA forman una matriz de escala, y el precio de cierre debe romper los 7 EMA en orden consecutivo para determinar las señales de posición larga y corta, lo que garantiza la entrada de fuerza después de la reversión de la tendencia.

Además, la estrategia también combina los dos requisitos para confirmar una señal de posición larga: una alta de innovación de precios y un precio de cierre que rompe los máximos históricos, y utiliza una baja de innovación y un precio de cierre que rompe los mínimos históricos para confirmar una señal de posición corta, lo que evita una falsa ruptura.

Las condiciones de posición cerrada requieren que el precio cerrado rompa sucesivamente de un EMA rápido a un EMA lento, lo que indica un cambio de tendencia; o que el precio mínimo o máximo de la línea K más reciente rompa 4 EMA, lo que indica que la operación debe cerrar inmediatamente.

Análisis de las ventajas

  • El uso de 7 EMA de diferentes velocidades para formar una gradación permite determinar con mayor precisión el punto de cambio de tendencia
  • Combinando las altas de innovación y las altas históricas para determinar posiciones largas, las bajas de innovación y las bajas históricas para determinar posiciones cortas y evitar falsas rupturas
  • Las condiciones de la posición de doble equilibrio son más estrictas y permiten el cierre oportuno de los pérdidas

Análisis de riesgos

  • No hay un límite de pérdidas, hay un gran riesgo de pérdidas
  • Las condiciones de doble equilibrio pueden causar salidas prematuras
  • Los EMA de corto plazo son propensos a generar más ruido, aumentar la frecuencia de las transacciones y los costos de las comisiones

La solución:

  1. Establecimiento de paradas de paradas y paradas móviles
  2. Ajuste de la duración de los EMA de la posición cerrada para reducir la rigidez de las condiciones de doble posición cerrada
  3. Aumentar la duración de los EMA y reducir la frecuencia de las operaciones

Dirección de optimización

  • Aumentar las estrategias de stop loss, como el stop loss fijo por ciento, el stop loss móvil, etc.
  • Ajustar los parámetros de EMA para encontrar la combinación óptima de parámetros
  • Añadir filtros de otros indicadores, como MACD, ATR, KDJ, etc., para mejorar la calidad de la señal
  • Combinación de estrategias de bandas de onda para capturar fluctuaciones secundarias en una tendencia
  • Considerar la inclusión de un módulo de gestión de fondos

Resumir

La estrategia tiene una idea clara, utiliza 7 EMA de diferentes velocidades para juzgar la tendencia, y tiene condiciones de doble posición cerrada, lo que permite un juicio más sensible a la inversión de tendencia. Sin embargo, la estrategia en sí misma no establece un stop loss, existe un gran riesgo de pérdida, además de ser susceptible a problemas de salida prematura. En el futuro, la estrategia necesitará mejoras en varias dimensiones, como el stop loss, la optimización de parámetros y el filtrado de indicadores, para que sea un sistema de negociación cuantitativo estable y confiable.

Código Fuente de la Estrategia
/*backtest
start: 2023-12-01 00:00:00
end: 2023-12-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title="Crypto MAX Trend", shorttitle="Crypto MAX", overlay = true  )
Length = input(3, minval=1)
Length2 = input(15, minval=1)
Length3 = input(19, minval=1)
//Length33 = input(25, minval=1)
Length4 = input(50, minval=1)
Length44 = input(100, minval=1)
Length5 = input(150, minval=1)
Length6 = input(171, minval=1)
Length66 = input(172, minval=1)

xPrice = input(close)

xEMA1 = ema(xPrice, Length)
xEMA2 = ema(xPrice, Length2)
xEMA3 = ema(xPrice, Length3)
//xEMA33 = ema(xPrice, Length33)
xEMA4 = ema(xPrice, Length4)
xEMA44 = ema(xPrice, Length44)
xEMA5 = ema(xPrice, Length5)
xEMA6 = ema(xPrice, Length6)
xEMA66 = ema(xPrice, Length66)

// plot(xEMA1, color=color.white)
// plot(xEMA2, color=color.red)
// plot(xEMA3, color=color.green)
// plot(xEMA4, color=color.purple)
// plot(xEMA44, color=color.gray)
// plot(xEMA5, color=color.maroon)
// plot(xEMA6, color=color.blue)
// plot(xEMA66, color=color.orange)


fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2020, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true



long = close >  xEMA1 and xEMA1 > xEMA2 and xEMA2 > xEMA3  and xEMA3 > xEMA4  and xEMA4 > xEMA44 and xEMA44 > xEMA5 and xEMA5> xEMA6  and xEMA6> xEMA66  and close > high[1] and high[1] > high[2] and close > high[3] and close > high[4] and close > high[5] and high[5] > high[6] and time_cond
short = close < xEMA1 and xEMA1 < xEMA2 and xEMA2 < xEMA3  and xEMA3 < xEMA4  and xEMA4 < xEMA44 and xEMA44 < xEMA5 and xEMA5< xEMA6 and  xEMA6< xEMA66 and close < low[1] and low[1] < low[2] and close < low[3] and close < low[4] and close< low[5] and low[5] < low[6] and time_cond

notlong = close < xEMA1
strategy.entry("long",1,when=long)
strategy.entry("short",0,when=short)


exitlong1 = xEMA1 < xEMA2 and xEMA2 < xEMA3 and xEMA3 < xEMA4
exitlong2 = crossunder(low,xEMA1) and crossunder(low,xEMA2) and crossunder(low,xEMA3) and crossunder(low,xEMA4)
exitshort1 = xEMA1 > xEMA2 and xEMA2 > xEMA3 and xEMA3 > xEMA4
exitshort2 = crossover(high,xEMA1) and crossover(high,xEMA2) and crossover(high,xEMA3) and crossover(high,xEMA4)

strategy.close("long", when = exitlong1 or exitlong2)
strategy.close("short", when= exitshort1 or exitshort2)