Diese Strategie ist ein zusammengesetztes quantitatives Handelssystem, das auf Fibonacci-Retracement- und Erweiterungsniveaus basiert, kombiniert mit der EMA-Trendbestimmung. Die Strategie identifiziert wichtige Unterstützungs- und Widerstandsniveaus auf dem Markt und führt Trades auf Basis von Trendsignalen aus. Das System verwendet 20-Perioden- und 50-Perioden-EMAs, um Markttrends zu bestimmen, und nutzt Fibonacci-Retracement-Niveaus, um optimale Handelsmöglichkeiten zu finden.
Die Kernlogik besteht aus drei Hauptkomponenten: Erstens berechnet es die höchsten und niedrigsten Preise in den letzten 10 Perioden, um die Preisspanne zu bestimmen; Zweitens berechnet es fünf wichtige Fibonacci-Retracement-Level (0,236, 0,382, 0,5, 0,618, 0,786) auf der Grundlage dieser Bandbreite; Schließlich bestimmt es die Trendrichtung durch das Überschreiten von 20- und 50-Perioden-EMAs. Kaufsignale werden erzeugt, wenn der Preis in einem Aufwärtstrend über die Retrake-Levels bricht, während Verkaufssignale ausgelöst werden, wenn der Preis in einem Abwärtstrend unter die Retrake-Levels bricht.
Die Strategie baut ein relativ vollständiges Handelssystem auf, indem sie klassische technische Analysetools kombiniert. Während es Bereiche für Optimierung gibt, zeigt der Gesamtrahmen eine gute Marktanpassungsfähigkeit. Durch kontinuierliche Optimierung und Verbesserung verspricht die Strategie eine bessere Leistung im tatsächlichen Handel. Es wird empfohlen, vor dem Live-Handel gründliche historische Daten-Backtesting und Parameteroptimierung durchzuführen.
/*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")