Strategi ini adalah sistem perdagangan kuantitatif komposit berdasarkan retracement Fibonacci dan tahap lanjutan, digabungkan dengan penentuan trend EMA. Strategi ini mengenal pasti tahap sokongan dan rintangan penting di pasaran dan melaksanakan perdagangan berdasarkan isyarat trend. Sistem ini menggunakan EMA 20 tempoh dan 50 tempoh untuk menentukan trend pasaran dan menggunakan tahap retracement Fibonacci untuk mencari peluang perdagangan yang optimum.
Logik teras terdiri daripada tiga komponen utama: Pertama, ia mengira harga tertinggi dan terendah selama 10 tempoh yang lalu untuk menentukan julat harga; Kedua, ia mengira lima tahap retracement Fibonacci utama (0.236, 0.382, 0.5, 0.618, 0.786) berdasarkan julat ini; Akhirnya, ia menentukan arah trend melalui persilangan EMA 20 dan 50 tempoh. Isyarat beli dihasilkan apabila harga memecahkan di atas tahap retracement dalam trend menaik, sementara isyarat jual dicetuskan apabila harga memecahkan di bawah tahap retracement dalam trend menurun.
Strategi ini membina sistem dagangan yang agak lengkap dengan menggabungkan alat analisis teknikal klasik. Walaupun terdapat bidang untuk pengoptimuman, kerangka keseluruhan menunjukkan kemampuan penyesuaian pasaran yang baik. Melalui pengoptimuman dan penambahbaikan yang berterusan, strategi menunjukkan janji untuk 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")