Estrategia cuantitativa de combinación de EMA dinámicas móviles

El autor:¿ Qué pasa?, Fecha: 2024-01-22 12:34:33
Las etiquetas:

img

Resumen general

Esta estrategia es una estrategia de combinación de promedios móviles dinámicos que funciona en múltiples marcos de tiempo. Utiliza promedios móviles exponenciales (EMA) de diferentes longitudes para el juicio de tendencias y señales de entrada / salida.

Estrategia lógica

La estrategia emplea 7 EMA que se mueven a diferentes velocidades, desde la más rápida a la más lenta: EMA de 3 períodos, EMA de 15 períodos, EMA de 19 períodos, EMA de 50 períodos, EMA de 100 períodos, EMA de 150 períodos y EMA de 200 períodos. Estos 7 EMA están dispuestos en una formación trapezoidal. Para generar señales largas y cortas, el precio de cierre necesita romper estas EMA sucesivamente para garantizar una fuerte entrada de tendencia posterior a la inversión.

Además, la estrategia también incorpora la ruptura de precios recientes y el cierre de precios que cruzan máximos históricos para confirmar señales largas, y utiliza la ruptura de precios recientes bajos y cerrados que cruzan mínimos históricos para confirmar señales cortas.

Las reglas de salida requieren que el precio de cierre rompa las EMA más rápidas sucesivamente hacia las EMA más lentas, lo que indica una inversión de tendencia.

Análisis de ventajas

  • El uso de 7 EMA de velocidades diferentes que forman una forma trapezoidal puede identificar los puntos de inversión de tendencia con mayor precisión
  • La incorporación de nuevos máximos/bajos y máximos/bajos históricos evita señales falsas de ruptura
  • Las estrictas reglas de doble salida permiten un stop loss oportuno

Análisis de riesgos

  • Ningún mecanismo de stop loss conduce a un enorme potencial de pérdida
  • Las reglas de doble salida pueden provocar una salida prematura
  • Muchos EMA más rápidos generan más ruido y aumentan la frecuencia de negociación y el costo de las comisiones

Soluciones:

  1. Añadir pérdida de parada de porcentaje fijo y pérdida de parada de seguimiento
  2. Ajustar las longitudes de la EMA de salida para reducir el rigor de las reglas de doble salida
  3. Aumentar las longitudes de la EMA para reducir la frecuencia de negociación

Direcciones de optimización

  • Añadir mecanismos de stop loss como pérdida de stop porcentaje fijo, pérdida de stop de seguimiento, etc.
  • Optimizar los parámetros de la EMA para encontrar la mejor combinación
  • Añadir otros indicadores como MACD, ATR, KDJ, etc. para filtrar las señales
  • Combinar con estrategias de rango/canal para detectar movimientos secundarios en las tendencias
  • Considerar la adición de las reglas de tamaño de posición

Conclusión

La estrategia tiene una lógica clara de usar 7 EMA de diferentes velocidades para determinar tendencias y reglas de salida duales para detectar reversiones. Pero no hay un mecanismo de stop loss que conduzca a un riesgo de pérdida enorme, y puede salir prematuramente.


/*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) 






 


Más.