
Die Strategie ist ein komplexes quantitatives Handelssystem, das auf Fibonacci-Rückzug- und Verlängerungsebenen basiert, kombiniert mit EMA-Gleichgewichts-Trendbeurteilungen. Die Strategie handelt durch die Identifizierung wichtiger Unterstützungswiderstände auf dem Markt, kombiniert mit Trendsignalen. Das System verwendet 20-Zyklus- und 50-Zyklus-EMA-Gleichgewichte, um Markttrends zu ermitteln und auf dieser Grundlage die Fibonacci-Rückzugsebenen zu nutzen, um die besten Handelsmöglichkeiten zu finden.
Die Kernlogik der Strategie besteht aus drei Hauptteilen: Zuerst berechnen Sie Höchst- und Tiefstpreise für fast 10 Zyklen, um die Preisschwankungsbreite zu bestimmen; anschließend berechnen Sie fünf wichtige Fibonacci-Rücktrittsniveaus basierend auf dieser Spanne: 0,236, 0,382, 0,5, 0,618, 0,786; und schließlich bestimmen Sie die Trendrichtung durch die Kreuzung von 20- und 50-Zyklen-EMA. In einem Aufwärtstrend gibt es mehrere Signale, wenn der Preis die Rücktrittsgrenze überschreitet; in einem Abwärtstrend gibt es ein Hohlsignal, wenn der Preis die Rücktrittsgrenze überschreitet.
Die Strategie baut ein relativ vollständiges Handelssystem auf, indem sie klassische technische Analyse-Tools kombiniert. Obwohl es einige Optimierungsbedürfnisse gibt, ist das Gesamt-Framework gut anpassungsfähig für den Markt. Durch kontinuierliche Optimierung und Verbesserung wird die Strategie in der Lage sein, bessere Ergebnisse im realen Handel zu erzielen.
/*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")