La stratégie est un système de trading quantitatif composite basé sur les niveaux de rétractation et de prolongation de Fibonacci, combiné à un jugement de tendance de la moyenne EMA. La stratégie traite en identifiant les points de résistance de soutien importants du marché, combinés à des signaux de tendance. Le système utilise les courbes de 20 et 50 cycles EMA pour juger de la tendance du marché et, sur cette base, exploiter les niveaux de rétractation de Fibonacci pour trouver les meilleures opportunités de négociation.
La logique centrale de la stratégie comprend trois parties principales: d’abord, le calcul des prix les plus élevés et les plus bas de près de 10 cycles, pour déterminer la zone de fluctuation des prix; ensuite, le calcul des cinq principaux niveaux de rétraction de Fibonacci basés sur cette zone: 0,236, 0,382, 0,5, 0,618, 0,786; enfin, la direction de la tendance est déterminée par le croisement des EMAs de 20 et 50 cycles.
La stratégie a été construite en combinant les outils d’analyse technique classiques pour construire un système de trading relativement complet. Bien qu’il y ait des endroits qui nécessitent des optimisations, le cadre global a une bonne adaptabilité au marché. Grâce à une optimisation et à une amélioration continues, la stratégie est susceptible d’obtenir de meilleures performances dans les transactions réelles.
/*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")