
Strategi ini adalah sistem perdagangan kuantitatif kompleks berdasarkan tahap penarikan balik dan lanjutan Fibonacci, digabungkan dengan penilaian trend EMA rata-rata. Strategi ini melakukan perdagangan dengan mengenal pasti tahap rintangan sokongan penting di pasaran, digabungkan dengan isyarat trend. Sistem ini menggunakan 20 kitaran dan 50 kitaran EMA rata-rata untuk menilai trend pasaran, dan menggunakan tahap penarikan balik Fibonacci untuk mencari peluang perdagangan terbaik.
Logik teras strategi ini terdiri daripada tiga bahagian utama: pertama, mengira harga tertinggi dan terendah selama hampir 10 kitaran untuk menentukan julat pergerakan harga; kedua, mengira lima tahap pengunduran Fibonacci yang penting berdasarkan julat ini: 0.236, 0.382, 0.5, 0.618, 0.786); dan terakhir, menentukan arah trend melalui persilangan 20 dan 50 EMA kitaran. Dalam tren naik, banyak isyarat dikeluarkan apabila harga menembusi tahap pengunduran; dalam tren turun, isyarat kosong dikeluarkan apabila harga jatuh dari tahap pengunduran.
Strategi ini membina sistem perdagangan yang agak lengkap dengan menggabungkan alat analisis teknikal klasik. Walaupun terdapat beberapa tempat yang perlu dioptimumkan, kerangka keseluruhan mempunyai kesesuaian pasaran yang baik. Dengan pengoptimuman dan penambahbaikan berterusan, strategi ini dijangka dapat mencapai prestasi yang lebih baik dalam perdagangan sebenar.
/*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")