Estrategia de trading cuantitativo de seguimiento de tendencias condicionales múltiples basada en niveles de retroceso de Fibonacci

SL MA TP ATR
Fecha de creación: 2024-12-20 15:55:57 Última modificación: 2024-12-20 15:55:57
Copiar: 1 Número de Visitas: 420
1
Seguir
1617
Seguidores

Estrategia de trading cuantitativo de seguimiento de tendencias condicionales múltiples basada en niveles de retroceso de Fibonacci

Descripción general

Esta estrategia es una estrategia de seguimiento de tendencias basada en los niveles de reversión de Fibonacci. La estrategia utiliza principalmente los niveles de reversión de Fibonacci clave para calcular los precios más altos y más bajos del día de negociación anterior, en combinación con la posición del precio de apertura y la ventana de tiempo para establecer múltiples condiciones de entrada, y la posición de parada correspondiente para las diferentes condiciones, para lograr la captura de la tendencia y el control del riesgo.

Principio de estrategia

La estrategia primero calcula los seis niveles clave de retracción de Fibonacci: 0, 23,6%, 38,2%, 50%, 61,8% y 100%. De acuerdo con la posición del precio de apertura en relación con estos niveles, los requisitos de entrada se dividen en tres situaciones: 1) el precio de apertura está entre el 23,6% y el 50%; 2) el precio de apertura está en el 61,8% y en la ventana de tiempo especificada; 3) el precio de apertura está por debajo del 23,6% y por debajo del mínimo del día anterior.

Ventajas estratégicas

  1. Utilizando los niveles de retracción de Fibonacci como puntos de resistencia de soporte clave, estos niveles tienen una fuerte orientación en el mercado.
  2. La combinación de múltiples criterios de la ventana de tiempo y la posición de los precios mejora la precisión de la estrategia.
  3. La flexibilidad de la gestión de riesgos se refleja en la configuración de las posiciones de pérdidas correspondientes a las diferentes situaciones.
  4. La lógica de la estrategia es clara, los parámetros son ajustables, lo que facilita la optimización de acuerdo con las diferentes condiciones del mercado.

Riesgo estratégico

  1. La efectividad de los niveles de retiro de Fibonacci puede verse afectada por el entorno del mercado.
  2. La configuración de la ventana de tiempo fijo puede perder buenas oportunidades en otros períodos de tiempo.
  3. La configuración de la posición de deterioro puede ser fácilmente tocada en caso de fluctuaciones severas.
  4. Las estrategias no tienen en cuenta las tendencias generales del mercado, y pueden ser frecuentes en mercados de alta o baja volatilidad.

Dirección de optimización de la estrategia

  1. Introducción de indicadores para determinar la tendencia (como el sistema de líneas medias), ejecutar operaciones solo cuando la tendencia es clara.
  2. Aumentar los indicadores de volatilidad (como el ATR) y ajustar dinámicamente la posición de parada.
  3. El análisis del volumen de transacciones aumenta la credibilidad de las rupturas de precios.
  4. La configuración de la ventana de tiempo optimizada puede considerarse en función del análisis de datos históricos de los mejores períodos de negociación.
  5. Aumentar los objetivos de ganancias y mejorar el mecanismo de cierre de ganancias.

Resumir

La estrategia combina niveles de retracción de Fibonacci, ventanas de tiempo y múltiples criterios para construir un sistema de negociación más completo. La estrategia tiene la ventaja de tener una lógica clara y un riesgo controlado, pero aún necesita ser optimizada y mejorada según las condiciones del mercado. La estabilidad y la rentabilidad de la estrategia se pueden mejorar aún más al agregar optimizaciones en aspectos como el juicio de tendencias, el stop loss dinámico y el análisis de volumen de operaciones.

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

//@version=6
strategy("Fibonacci Retracement Strategy", overlay=true)

// Get the high and low of the previous day
previousHigh = request.security(syminfo.tickerid, "D", high[1])
previousLow = request.security(syminfo.tickerid, "D", low[1])

// Fibonacci levels for the previous day (from high to low)
fib0 = previousHigh
fib236 = previousHigh - (previousHigh - previousLow) * 0.236
fib382 = previousHigh - (previousHigh - previousLow) * 0.382
fib50 = previousHigh - (previousHigh - previousLow) * 0.5
fib618 = previousHigh - (previousHigh - previousLow) * 0.618
fib1 = previousHigh - (previousHigh - previousLow) * 1

// Current open price (for the current day)
openPrice = open

// Time for 9:15 AM check
timeStart = timestamp(year, month, dayofmonth, 9, 15)
timeClose = timestamp(year, month, dayofmonth, 9, 30) // Time window to allow for opening range

// Entry Conditions
buyCondition1 = openPrice >= fib236 and openPrice <= fib50
buyCondition2 = openPrice == fib618 and time >= timeStart and time <= timeClose
buyCondition3 = openPrice < fib236 and openPrice < previousLow

// Stop Loss based on conditions
stopLoss1 = fib618
stopLoss2 = fib618 - (fib618 - fib1) / 2
stopLoss3 = fib382

// Plot Fibonacci levels with calculated values
plot(fib0, color=color.green, linewidth=1, title="Fib 0")
plot(fib236, color=color.red, linewidth=1, title="Fib 0.236")
plot(fib382, color=color.blue, linewidth=1, title="Fib 0.382")
plot(fib50, color=color.yellow, linewidth=1, title="Fib 0.5")
plot(fib618, color=color.purple, linewidth=1, title="Fib 0.618")
plot(fib1, color=color.orange, linewidth=1, title="Fib 1")

// Plot labels for Fibonacci levels with actual values
label.new(x=bar_index, y=fib0, text="Fib 0: " + str.tostring(fib0), style=label.style_label_right, color=color.green, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib236, text="Fib 0.236: " + str.tostring(fib236), style=label.style_label_right, color=color.red, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib382, text="Fib 0.382: " + str.tostring(fib382), style=label.style_label_right, color=color.blue, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib50, text="Fib 0.5: " + str.tostring(fib50), style=label.style_label_right, color=color.yellow, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib618, text="Fib 0.618: " + str.tostring(fib618), style=label.style_label_right, color=color.purple, textcolor=color.white, size=size.small, yloc=yloc.abovebar)
label.new(x=bar_index, y=fib1, text="Fib 1: " + str.tostring(fib1), style=label.style_label_right, color=color.orange, textcolor=color.white, size=size.small, yloc=yloc.abovebar)

// Entry conditions and strategy execution
if (buyCondition1)
    strategy.entry("Buy", strategy.long, stop=stopLoss1)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition2)
    strategy.entry("Buy", strategy.long, stop=stopLoss2)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

if (buyCondition3)
    strategy.entry("Buy", strategy.long, stop=stopLoss3)
    label.new(bar_index, low, "BUY", color=color.green, textcolor=color.white, style=label.style_label_up, size=size.small)

// Show exit signals and labels
if (buyCondition1)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss1)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition2)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss2)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)

if (buyCondition3)
    strategy.exit("Exit", from_entry="Buy", stop=stopLoss3)
    label.new(bar_index, high, "EXIT", color=color.red, textcolor=color.white, style=label.style_label_down, size=size.small)