Estrategia de arbitraje de medias móviles regularizadas adaptativas entre mercados

El autor:¿ Qué pasa?, Fecha: 2023-11-16 16:20:11
Las etiquetas:

img

Resumen general

Esta estrategia implementa el comercio de arbitraje entre diferentes mercados mediante el cálculo de una línea de media móvil regularizada adaptativa.

Principio de la estrategia

La estrategia primero define una función de escala Minimax para estandarizar la serie de tiempo a un rango especificado. Luego define una función de media móvil regularizada adaptativa rema para calcular la línea de señal suavizada sig. El cálculo de la línea de señal es:

  1. Definir una ventana móvil, longitud predeterminada 5 días.

  2. El valor sig para cada día es el promedio ponderado del valor sig anterior y el precio de cierre actual.

  3. Añadir un parámetro λ como regularizador para hacer la transición sig más suave.

Después de obtener la línea de señal, la estrategia determina largo / corto basado en la cruz dorada / muerta de la línea de señal y el precio.

  1. Cuando el sig cruza por encima del precio, ir largo.

  2. Cuando el sig cruce por debajo del precio, corta.

Además, la estrategia agrega el factor suave y show_line como parámetros ajustables para aumentar la flexibilidad.

Análisis de ventajas

En comparación con las estrategias tradicionales de promedios móviles, esta estrategia tiene las siguientes ventajas:

  1. El mecanismo de ponderación adaptativa puede responder más rápidamente a los cambios de precios.

  2. El regularizador añadido hace que la línea de señal sea más suave, evitando señales erróneas de fluctuaciones drásticas de precios.

  3. El arbitraje entre mercados puede beneficiarse de las diferencias de precios entre mercados.

  4. Los parámetros ajustables flexibles pueden optimizarse de acuerdo con las condiciones del mercado.

Riesgos y soluciones

La estrategia también tiene algunos riesgos:

  1. La solución es ajustar adecuadamente el parámetro liso para evitar la oscilación de la línea de señal.

  2. El arbitraje entre mercados requiere que los dos mercados tengan correlación de precios y tendencias consistentes.

  3. La optimización de parámetros requiere datos históricos suficientes para backtesting.

Direcciones de optimización

La estrategia también puede optimizarse en los siguientes aspectos:

  1. En la selección de parámetros, se pueden introducir algoritmos de aprendizaje automático para optimizar automáticamente las combinaciones de parámetros.

  2. En la generación de señales, se pueden introducir más indicadores para construir señales comerciales más estables.

  3. En el control de riesgos, el stop loss se puede configurar para limitar la pérdida por operación.

  4. En el arbitraje entre mercados, puede ampliarse a activos comerciales más altamente correlacionados.

Resumen de las actividades

Esta estrategia implementa el comercio de arbitraje entre mercados mediante el cálculo adaptativo de promedios móviles. En comparación con las estrategias tradicionales de promedios móviles, tiene las ventajas de parámetros adaptativos, procesamiento suavizado, arbitraje entre mercados, etc. Los próximos pasos son optimizar aún más la estrategia a través del aprendizaje automático, señales combinadas, gestión de riesgos, etc.


/*backtest
start: 2023-10-01 00:00:00
end: 2023-10-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Crossover82%", overlay=true)

//
// Functions
//
scaleMinimax(X, p, min, max) => 
    hi = highest(X, p), lo = lowest(X, p)
    (max - min) * (X - lo)/(hi - lo) + min

rema(ts, p) => // regularized ma
    rm = 0.0, lambda = .5, a = 2 / (p + 1)
    rm := (nz(rm[1]) + a * (ts - nz(rm[1])) + lambda * (2 * nz(rm[1]) - nz(rm[2]))) / (lambda + 1)
    rm
    
//
// Inputs
//
X = input(close, title="Data source")
smooth = input(2, title="REMA smooth factor")
show_line = input(true, title="Show signal line")

//
// Main
//
p = 5
sig = rema(scaleMinimax(pow(X*p,-X) - 0.1, 100, lowest(X, 100), highest(X, 100)), smooth)

plot(show_line ? sig : na, linewidth=1)
plot(cross(sig, X) ? ohlc4 : na, style=circles, linewidth=8, color=blue, transp=50)

longCondition = crossover(sig, X)
if (longCondition)
    strategy.entry("LE", strategy.long)

shortCondition = crossunder(sig, X)
if (shortCondition)
    strategy.entry("SE", strategy.short)



Más.