Estrategia de trading cuantitativo del ciclo estocástico de Ehlers


Fecha de creación: 2024-01-17 16:03:30 Última modificación: 2024-01-17 16:03:30
Copiar: 0 Número de Visitas: 793
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo del ciclo estocástico de Ehlers

Descripción general

La estrategia del ciclo aleatorio de Ells es una estrategia de negociación cuantitativa que utiliza el indicador del ciclo aleatorio de Ells para generar señales de negociación. La estrategia combina las ventajas de los indicadores aleatorios y los indicadores periódicos para aprovechar las oportunidades periódicas en el mercado.

Principio de estrategia

La estrategia primero construye un indicador de ciclo suavizado, y luego construye un valor de indicador aleatorio basado en este indicador. La generación de la señal de negociación se determina según el cruce de las medias móviles de este valor de indicador aleatorio.

Concretamente, el método de cálculo de un indicador de ciclo suavizado es el siguiente:

smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6

El src es la entrada de datos de precios, como el precio de cierre. El indicador combina el precio actual y el precio de los 3 períodos anteriores para construir una señal de ciclo suave.

Basado en este indicador suavizado, se puede calcular el ciclo de indicadores aleatorios:

cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * 
           (smooth - 2 * smooth[1] + smooth[2]) + 
           2 * (1 - alpha) * cycle[1] - 
           (1 - alpha) * (1 - alpha) * cycle[2]

La fórmula de cálculo incluye el diferencial de segundo grado de la señal de ciclo después de la suavización, y los valores de los dos ciclos anteriores. α es el factor de suavización, que ajusta el peso de los valores de ciclo nuevo y viejo.

Finalmente, se calcula un valor aleatorio de 0-100 de este indicador de ciclo, y se construye un valor de señal basado en el promedio móvil de 10 días de valor 1. Se emite una señal de transacción cuando la señal se cruza o se desliza por encima de la media móvil.

Ventajas estratégicas

La estrategia combina los indicadores aleatorios y los periódicos, combinando las ventajas de ambos. En comparación con las estrategias de tendencia como las simples medias móviles, la estrategia puede capturar mejor las oportunidades periódicas y, por lo tanto, obtener mejores resultados.

Las principales ventajas son:

  1. El indicador de ciclo puede identificar el patrón de ciclo, el indicador aleatorio proporciona el momento de negociación de xFB
  2. Diseño de doble indicador para filtrar las señales falsas
  3. Parámetros personalizables para adaptarse a diferentes entornos del mercado

Riesgo estratégico

El principal riesgo de esta estrategia es:

  1. La configuración inadecuada de los parámetros puede causar una mayor frecuencia de transacciones, aumentando las tarifas de transacción y los costos de los puntos de deslizamiento.
  2. La incapacidad para manejar eficazmente los mercados con fuertes fluctuaciones de precios puede causar grandes pérdidas
  3. El indicador de ciclo es muy dependiente de la congruencia de la curva, y una congruencia incorrecta puede generar una señal errónea.

El riesgo se puede controlar mediante la configuración de parámetros de optimización, la configuración de puntos de parada y la combinación de otros indicadores de filtrado.

Dirección de optimización de la estrategia

La estrategia también puede ser optimizada en las siguientes direcciones:

  1. En combinación con otros indicadores técnicos para filtrar la señal, como las bandas de Brin, RSI, etc., para reducir las señales erróneas
  2. Incorporación de un mecanismo de salida adaptativo para ajustar los puntos de parada de forma dinámica según la volatilidad del mercado
  3. Utiliza métodos de aprendizaje automático para optimizar los parámetros y adaptarlos dinámicamente al mercado
  4. Optimizar la utilización de los fondos y aumentar la eficiencia de su uso mediante el uso de la palanca, la rentabilidad, etc.

Resumir

La estrategia de los ciclos aleatorios de Ells combina las ventajas de los indicadores aleatorios y los indicadores periódicos, controlando el riesgo de manera efectiva con un diseño de doble señal y obteniendo mejores ganancias en mercados con mayor periodicidad. Si se optimiza aún más, la estrategia puede convertirse en una estrategia de comercio cuantitativa recomendable.

Código Fuente de la Estrategia
/*backtest
start: 2024-01-09 00:00:00
end: 2024-01-16 00:00:00
period: 3m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=3
strategy("Ehlers Stochastic Cyber Cycle Strategy",overlay=false, default_qty_type = strategy.percent_of_equity, default_qty_value = 100.0, pyramiding = 1, commission_type = strategy.commission.percent, commission_value = 0.1)
src = input(hl2, title = "Source") 
alpha = input(.07, title = "Alpha")
lag = input(9, title = "Lag")
smooth = (src + 2 * src[1] + 2 * src[2] + src[3]) / 6
len = input(8, title = "Stochastic len")
cycle = na
if na(cycle[7])
    cycle := (src - 2 * src[1] + src[2]) / 4
else
    cycle := (1 - .5 * alpha) * (1 - .5 * alpha) * (smooth - 2 * smooth[1] + smooth[2]) + 2 * (1 - alpha) * cycle[1] - (1 - alpha) * (1 - alpha) * cycle[2]

value1 = stoch(cycle, cycle, cycle, len) / 100
value2 = 2 * ((4 * value1 + 3 * value1[1] + 2 * value1[2] + value1[3]) / 10 - 0.5)

signal = value2
oppositeTrade = input(true)
barsSinceEntry = 0
barsSinceEntry := nz(barsSinceEntry[1]) + 1
if strategy.position_size == 0
    barsSinceEntry := 0
if (crossover(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossunder(signal, signal[1]))
    strategy.entry("Long", strategy.long)
    barsSinceEntry := 0
if (crossunder(signal, signal[1]) and not oppositeTrade) or (oppositeTrade and crossover(signal, signal[1]))
    strategy.entry("Short", strategy.short)
    barsSinceEntry := 0
if strategy.openprofit < 0 and barsSinceEntry > 8
    strategy.close_all()
    barsSinceEntry := 0
    
    
plot(0, title="ZeroLine", color=gray) 
plotSrc = signal
cyclePlot = plot(plotSrc, title = "CyberCycle", color = blue)
triggerPlot = plot(plotSrc[1], title = "Trigger", color = green)
fill(cyclePlot, triggerPlot, color = plotSrc < plotSrc[1] ? red : lime, transp = 50)