Estrategia de trading cuantitativo con indicadores múltiples de extensión y retroceso de Fibonacci

EMA
Fecha de creación: 2024-11-12 10:51:02 Última modificación: 2024-11-12 10:51:02
Copiar: 0 Número de Visitas: 206
1
Seguir
1237
Seguidores

Estrategia de trading cuantitativo con indicadores múltiples de extensión y retroceso de Fibonacci

Descripción general

La estrategia es un sistema de comercio cuantitativo de tipo complejo basado en retracciones y extensiones de Fibonacci combinado con un juicio de tendencia de la línea media EMA. La estrategia realiza operaciones mediante la identificación de los puntos de resistencia de soporte importantes en el mercado combinado con señales de tendencia. El sistema utiliza 20 y 50 períodos de EMA para juzgar la tendencia del mercado y, sobre esta base, utilizar los niveles de retracción de Fibonacci para encontrar la mejor oportunidad de negociación.

Principio de estrategia

La lógica central de la estrategia incluye tres partes principales: primero, calcular los máximos y mínimos de casi 10 ciclos para determinar el rango de fluctuación de los precios; luego, calcular los cinco niveles clave de retracción de Fibonacci basados en ese rango ((0.236, 0.382, 0.5, 0.618, 0.786)); finalmente, determinar la dirección de la tendencia a través de la cruz de los EMA de 20 y 50 ciclos. En una tendencia alcista, se emite una señal múltiple cuando el precio supera el nivel de retracción; en una tendencia descendente, se emite una señal en blanco cuando el precio cae por encima del nivel de retracción.

Ventajas estratégicas

  1. La combinación de los conceptos de seguimiento de tendencias y retroceso de precios mejora la precisión de las transacciones
  2. El uso de la serie de Fibonacci como niveles de precios clave, que tienen un fuerte significado psicológico en el mercado
  3. Evita el comercio frecuente en el mercado horizontal a través de EMA para determinar la tendencia
  4. Diseño de sistemas sencillos, fáciles de entender y mantener
  5. Se puede aplicar a diferentes períodos de tiempo, con una mayor adaptabilidad

Riesgo estratégico

  1. Las señales falsas pueden generarse en un mercado muy volátil.
  2. El rendimiento en un mercado convulso puede ser bajo, dependiendo de la continuidad de la tendencia
  3. Los niveles de retiro se calculan en base a los máximos y mínimos históricos y pueden estar rezagados en el mercado.
  4. La elección del punto de entrada puede no ser lo suficientemente precisa, lo que lleva a una posición de parada más lejana.
  5. El sistema carece de un mecanismo de gestión de posiciones dinámico

Dirección de optimización de la estrategia

  1. Introducción de indicadores de volumen de negocios para mejorar la precisión de las tendencias
  2. Aumentar el mecanismo de suspensión de pérdidas dinámicas para controlar mejor el riesgo
  3. Optimizar el ciclo de cálculo de los niveles de retiro para que se ajusten mejor al ritmo del mercado
  4. Incorporar un filtro de volatilidad para evitar el comercio durante la alta volatilidad
  5. Diseño de un sistema de gestión de posiciones más flexible para ajustar la cantidad de posiciones en función de las condiciones del mercado

Resumir

La estrategia combina herramientas clásicas de análisis técnico para construir un sistema de negociación relativamente completo. Si bien hay algunos lugares que necesitan ser optimizados, el marco general tiene una buena adaptabilidad al mercado. Con la optimización y la mejora continuas, la estrategia espera obtener un mejor rendimiento en las operaciones reales.

Código Fuente de la Estrategia
/*backtest
start: 2019-12-23 08:00:00
end: 2024-11-11 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Fibonacci Retracement and Extension Strategy", overlay=true)

// Define the Fibonacci levels for retracement and extension
fibRetracementLevels = array.new_float(5)
array.set(fibRetracementLevels, 0, 0.236)
array.set(fibRetracementLevels, 1, 0.382)
array.set(fibRetracementLevels, 2, 0.5)
array.set(fibRetracementLevels, 3, 0.618)
array.set(fibRetracementLevels, 4, 0.786)

fibExtensionLevels = array.new_float(5)
array.set(fibExtensionLevels, 0, 1.618)
array.set(fibExtensionLevels, 1, 2.618)
array.set(fibExtensionLevels, 2, 3.618)
array.set(fibExtensionLevels, 3, 4.236)
array.set(fibExtensionLevels, 4, 5.618)

// Calculate the high and low prices for the last 10 bars
highPrice = ta.highest(high, 10)
lowPrice = ta.lowest(low, 10)

// Calculate the Fibonacci retracement levels
fibRetracement = array.new_float(5)
for i = 0 to 4
    array.set(fibRetracement, i, highPrice - (highPrice - lowPrice) * array.get(fibRetracementLevels, i))

// Calculate the trend using the Exponential Moving Average (EMA)
shortEMA = ta.ema(close, 20)
longEMA = ta.ema(close, 50)

// Define the trend conditions
isUptrend = shortEMA > longEMA
isDowntrend = shortEMA < longEMA

// Generate buy and sell signals
var float lastFibRetracementLevel = na
var float lastFibExtensionLevel = na

// Buy condition: price crosses above the highest retracement level
if (isUptrend)
    for i = 0 to 4
        if (close > array.get(fibRetracement, i))
            lastFibRetracementLevel := array.get(fibRetracement, i)
            strategy.entry("Buy", strategy.long)

// Sell condition: price crosses below the lowest retracement level
if (isDowntrend)
    for i = 0 to 4
        if (close < array.get(fibRetracement, i))
            lastFibRetracementLevel := array.get(fibRetracement, i)
            strategy.entry("Sell", strategy.short)

// Plotting the Fibonacci levels on the chart
// for i = 0 to 4
//     line.new(bar_index[10], array.get(fibRetracement, i), bar_index, array.get(fibRetracement, i), color=color.new(color.blue, 70), width=1)

// Plot the EMAs
plot(shortEMA, color=color.red, title="Short EMA")
plot(longEMA, color=color.blue, title="Long EMA")