Estrategia de negociación cuantitativa de media móvil exponencial adaptativa con retardo cero


Fecha de creación: 2024-02-19 15:38:02 Última modificación: 2024-02-19 15:38:02
Copiar: 0 Número de Visitas: 841
1
Seguir
1617
Seguidores

Estrategia de negociación cuantitativa de media móvil exponencial adaptativa con retardo cero

Descripción general

La estrategia de trading cuantitativa Adaptive Zero Lag Exponential Moving Average es una estrategia de trading cuantitativa desarrollada en base a la idea de la media móvil exponencial de cero retardo de Ehlers. La estrategia utiliza la media móvil de índice como indicador de referencia, y se agrega al método de adaptación de la medición de frecuencia instantánea para optimizar dinámicamente el período de la media móvil de índice.

Principio de estrategia

La idea central de esta estrategia se deriva de la teoría de filtros de cero retraso de John Ehlers. El índice de movimiento promedio, aunque es un indicador técnico muy conocido, tiene un problema de retraso inherente. Ehlers elimina efectivamente el retraso mediante la inclusión de un factor de corrección de error en la fórmula de cálculo del índice de movimiento promedio, lo que hace que el índice de movimiento promedio de cero retraso sea más sensible a los cambios en los precios.

En la estrategia de EMA de retraso cero de auto-adaptación, utilizamos métodos de medición de la frecuencia en tiempo real para optimizar los parámetros periódicos de los promedios móviles del índice de retraso cero. La medición de la frecuencia en tiempo real se divide en dos tipos, la secuencia de la secuencia de la secuencia de precios y la secuencia de la secuencia de precios.

Cuando la línea rápida (la media móvil del índice de retraso cero) cruza la línea lenta (la media móvil del índice común) hace más y hace espacio cuando cruza, lo que forma una señal de estrategia de negociación similar a la de la media móvil cruzada.

Ventajas estratégicas

La estrategia de EMA de autoadaptación con cero retraso combina filtros de cero retraso y métodos de optimización de ciclos de autoadaptación, con las siguientes ventajas:

  1. Elimina el retraso y hace la señal más sensible y confiable
  2. Parámetros de ciclo de adaptación, adaptándose a un entorno de mercado más amplio
  3. Menos parámetros de estrategia, fácil de probar y optimizar
  4. Pueden configurar puntos de parada fijos para controlar el riesgo

Riesgo estratégico

La estrategia de adaptarse a un EMA de retraso cero también tiene ciertos riesgos, que se reflejan principalmente en:

  1. En determinadas circunstancias del mercado, los parámetros de ciclo de optimización por adaptación pueden no funcionar
  2. La configuración incorrecta del punto de parada fijo puede causar pérdidas o ganancias excesivas
  3. La falta de pruebas de optimización de parámetros puede causar un mal rendimiento del disco duro

Para controlar estos riesgos, necesitamos probar adecuadamente los ajustes de parámetros en diferentes entornos de mercado, ajustar adecuadamente los puntos de parada de pérdidas y verificar adecuadamente en la retroevaluación lo que sea posible para simular el entorno en el disco.

Dirección de optimización de la estrategia

Hay un amplio margen de optimización para la estrategia de EMA de Adaptación a la Retraso Cero, que incluye:

  1. Prueba diferentes métodos de medición de ciclos de adaptación, como la tasa de fluctuación adaptada a MA, etc.
  2. Añadir condiciones de filtro adicionales, como volumen de transacciones, parejas de medias móviles, etc.
  3. Optimización de las estrategias de parada de pérdidas, como el trailing stop, Chandelier Exit, etc.
  4. Ajuste dinámico del tamaño de las posiciones en combinación con la gestión de riesgos
  5. Confirmación de múltiples períodos de tiempo para mejorar la calidad de la señal

A través de estas herramientas de optimización, se espera mejorar aún más la tasa de éxito, la rentabilidad, los indicadores de ajuste al riesgo de la estrategia, etc.

Resumir

La estrategia de EMA de auto-adaptación con cero retraso, que combina con éxito el filtro de cero retraso y la idea de optimización del ciclo dinámico, es una estrategia de negociación cuantitativa con menos parámetros, fácil de operar y optimizar. Tiene características de alta sensibilidad a la respuesta, alta adaptabilidad y un buen rendimiento en mercados de tendencia.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-19 00:00:00
end: 2024-02-18 00:00:00
period: 4h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy(title="Adaptive Zero Lag EMA v2", shorttitle="AZLEMA", overlay = true)

src = input(title="Source",  defval=close)
Period = input(title="Period",  defval = 20)
adaptive = input(title="Adaptive Method", options=["Off", "Cos IFM", "I-Q IFM", "Average"], defval="Off")
GainLimit = input(title="Gain Limit",  defval = 10)
Threshold = input(title="Threshold", type = float, defval=0.05, step=0.01)
fixedSL = input(title="SL Points", defval=70)
fixedTP = input(title="TP Points", defval=5)
risk = input(title='Risk', defval=0.01, step=0.01)

//##############################################################################
//I-Q IFM
//#############################################################################
range = input(title="Max Period",  defval=60, minval=8, maxval=100)

PI = 3.14159265359
imult = 0.635
qmult = 0.338
inphase = 0.0
quadrature = 0.0
re = 0.0
im = 0.0
deltaIQ = 0.0
instIQ = 0.0
lenIQ = 0.0
V = 0.0

P = src - src[7]
inphase := 1.25*(P[4] - imult*P[2]) + imult*nz(inphase[3])
quadrature := P[2] - qmult*P + qmult*nz(quadrature[2])
re := 0.2*(inphase*inphase[1] + quadrature*quadrature[1]) + 0.8*nz(re[1])
im := 0.2*(inphase*quadrature[1] - inphase[1]*quadrature) + 0.8*nz(im[1])
if (re!= 0.0)
    deltaIQ := atan(im/re)
for i=0 to range
    V := V + deltaIQ[i]
    if (V > 2*PI and instIQ == 0.0)
        instIQ := i
if (instIQ == 0.0)
    instIQ := nz(instIQ[1])
lenIQ := 0.25*instIQ + 0.75*nz(lenIQ[1])

//##############################################################################
//COSINE IFM
//#############################################################################
s2 = 0.0
s3 = 0.0
deltaC = 0.0
instC = 0.0
lenC = 0.0
v1 = 0.0
v2 = 0.0
v4 = 0.0

v1 := src - src[7]
s2 := 0.2*(v1[1] + v1)*(v1[1] + v1) + 0.8*nz(s2[1])
s3 := 0.2*(v1[1] - v1)*(v1[1] - v1) + 0.8*nz(s3[1])
if (s2 != 0)
    v2 := sqrt(s3/s2)
if (s3 != 0)
    deltaC := 2*atan(v2)
for i = 0 to range
    v4 := v4 + deltaC[i]
    if (v4 > 2*PI and instC == 0.0)
        instC := i - 1
if (instC == 0.0)
    instC := instC[1]
lenC := 0.25*instC + 0.75*nz(lenC[1])

if (adaptive == "Cos IFM")
    Period := round(lenC)
if (adaptive == "I-Q IFM")
    Period := round(lenIQ)
if (adaptive == "Average")
    Period := round((lenC + lenIQ)/2)

//##############################################################################
//ZERO LAG EXPONENTIAL MOVING AVERAGE
//##############################################################################
LeastError = 1000000.0
EC = 0.0
Gain = 0.0
EMA = 0.0
Error = 0.0
BestGain = 0.0

alpha =2/(Period + 1)
EMA := alpha*src + (1-alpha)*nz(EMA[1])

for i = -GainLimit to GainLimit
    Gain := i/10
    EC := alpha*(EMA + Gain*(src - nz(EC[1]))) + (1 - alpha)*nz(EC[1])
    Error := src - EC
    if(abs(Error)<LeastError)
        LeastError := abs(Error)
        BestGain := Gain

EC := alpha*(EMA + BestGain*(src - nz(EC[1]))) + (1-alpha)*nz(EC[1])

plot(EC, title="EC", color=orange, linewidth=2)
plot(EMA, title="EMA", color=red, linewidth=2)

buy = crossover(EC,EMA) and 100*LeastError/src > Threshold
sell = crossunder(EC,EMA) and 100*LeastError/src > Threshold
strategy.initial_capital = 50000
if (time>timestamp(2016, 1, 1 , 0, 0))
    //LONG
    balance = strategy.initial_capital + strategy.netprofit
    lots = ((risk * balance)/fixedSL)*1
    strategy.entry("BUY", strategy.long, qty=lots, oca_name="BUY",  when=buy)
    strategy.exit("B.Exit", "BUY", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)
    //SHORT
    strategy.entry("SELL", strategy.short, qty=lots, oca_name="SELL", when=sell)
    strategy.exit("S.Exit", "SELL", qty_percent = 100, loss=fixedSL, trail_offset=15, trail_points=fixedTP)