Strategi ini adalah sistem perdagangan kuantitatif komposit berdasarkan retracement Fibonacci dan tingkat ekstensi, dikombinasikan dengan penentuan tren EMA. Strategi ini mengidentifikasi tingkat dukungan dan resistensi penting di pasar dan mengeksekusi perdagangan berdasarkan sinyal tren. Sistem ini menggunakan EMA 20-periode dan 50-periode untuk menentukan tren pasar dan memanfaatkan tingkat retracement Fibonacci untuk menemukan peluang perdagangan yang optimal.
Logika inti terdiri dari tiga komponen utama: Pertama, menghitung harga tertinggi dan terendah selama 10 periode terakhir untuk menentukan kisaran harga; Kedua, menghitung lima tingkat retracement Fibonacci utama (0.236, 0.382, 0.5, 0.618, 0.786) berdasarkan kisaran ini; Akhirnya, menentukan arah tren melalui persilangan EMA 20 dan 50 periode. Sinyal beli dihasilkan ketika harga melanggar di atas tingkat retracement dalam tren naik, sementara sinyal jual dipicu ketika harga melanggar di bawah tingkat retracement dalam tren turun.
Strategi ini membangun sistem perdagangan yang relatif lengkap dengan menggabungkan alat analisis teknis klasik. Meskipun ada area untuk optimasi, kerangka kerja keseluruhan menunjukkan kemampuan beradaptasi pasar yang baik. Melalui optimasi dan perbaikan terus-menerus, strategi menunjukkan janji untuk kinerja yang lebih baik dalam perdagangan aktual.
/*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")