Esta estrategia es un sistema de negociación cuantitativo compuesto basado en los niveles de retroceso y extensión de Fibonacci, combinado con la determinación de tendencias de la EMA. La estrategia identifica niveles de soporte y resistencia importantes en el mercado y ejecuta operaciones basadas en señales de tendencia. El sistema utiliza EMA de 20 períodos y 50 períodos para determinar tendencias de mercado y utiliza los niveles de retroceso de Fibonacci para encontrar oportunidades comerciales óptimas.
La lógica básica consiste en tres componentes principales: primero, calcula los precios más altos y más bajos en los últimos 10 períodos para determinar el rango de precios; segundo, calcula cinco niveles clave de retroceso de Fibonacci (0.236, 0.382, 0.5, 0.618, 0.786) basados en este rango; finalmente, determina la dirección de la tendencia a través del cruce de EMA de 20 y 50 períodos. Las señales de compra se generan cuando el precio supera los niveles de retroceso en una tendencia alcista, mientras que las señales de venta se activan cuando el precio se rompe por debajo de los niveles de retroceso en una tendencia bajista.
La estrategia construye un sistema de negociación relativamente completo mediante la combinación de herramientas clásicas de análisis técnico. Aunque hay áreas para la optimización, el marco general demuestra una buena adaptabilidad del mercado. A través de la optimización y mejora continua, la estrategia muestra la promesa de un mejor rendimiento en el comercio real. Se recomienda llevar a cabo una exhaustiva backtesting de datos históricos y optimización de parámetros antes de la negociación en vivo.
/*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")