
Strategi ini adalah sistem perdagangan kuantitatif kompleks yang didasarkan pada level pengunduran diri dan perpanjangan Fibonacci, dikombinasikan dengan penilaian tren rata-rata EMA. Strategi ini melakukan perdagangan dengan mengidentifikasi resistensi pendukung penting di pasar, dikombinasikan dengan sinyal tren. Sistem ini menggunakan 20 siklus dan 50 siklus EMA untuk menilai tren pasar, dan menggunakan level pengunduran diri Fibonacci untuk mencari peluang perdagangan terbaik berdasarkan pada ini.
Logika inti dari strategi ini terdiri dari tiga bagian utama: pertama, menghitung harga tertinggi dan terendah selama hampir 10 siklus untuk menentukan kisaran pergerakan harga; kedua, menghitung lima tingkat pengembalian Fibonacci kunci berdasarkan kisaran ini: 0,236, 0,382, 0,5, 0,618, 0,786; dan terakhir, menentukan arah tren melalui persimpangan 20 dan 50 siklus EMA. Dalam tren naik, beberapa sinyal dikirim ketika harga menembus batas pengembalian; dalam tren turun, sinyal kosong dikirim ketika harga jatuh dari batas pengembalian.
Strategi ini membangun sistem perdagangan yang relatif lengkap dengan menggabungkan alat analisis teknis klasik. Meskipun ada beberapa tempat yang perlu dioptimalkan, kerangka kerja keseluruhan memiliki kemampuan pasar yang baik. Dengan terus-menerus dioptimalkan dan ditingkatkan, strategi ini diharapkan untuk mencapai kinerja yang lebih baik dalam perdagangan nyata.
/*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")