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.
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.
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.
/*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")