Artikel ini terutama menggambarkan strategi perdagangan yang menggabungkan Indeks Kekuatan Relatif (RSI) dan tingkat retracement Fibonacci. Strategi pertama menghitung tingkat retracement Fibonacci utama berdasarkan dinamika harga historis selama periode tertentu, dan kemudian menggunakan indikator RSI untuk menilai apakah pasar terlalu banyak dibeli atau terlalu banyak dijual di dekat tingkat retracement untuk menghasilkan sinyal perdagangan.
Prinsip-prinsip utama di balik strategi ini adalah:
Menggunakan data harga selama periode tertentu (misalnya 200 bar) untuk menghitung harga median, standar deviasi dan tingkat retracement Fibonacci utama (misalnya 0,764) untuk periode tersebut;
Ketika harga mendekati tingkat retracement atas atau bawah, gunakan indikator RSI untuk menentukan apakah ada kondisi overbought atau oversold di sekitar tingkat tersebut;
Jika indikator RSI menunjukkan sinyal overbought atau oversold, sinyal panjang atau pendek akan dihasilkan di sekitar tingkat retracement;
Atur stop loss dan ambil keuntungan untuk menutup posisi ketika harga melebihi tingkat yang telah ditetapkan atau stop loss dipicu.
Di atas adalah alur kerja dasar untuk mengidentifikasi peluang perdagangan dalam strategi ini.
Dibandingkan dengan menggunakan RSI atau Fibonacci saja, strategi gabungan ini memiliki keuntungan berikut:
Penyaringan indikator ganda dapat mengurangi sinyal palsu dan meningkatkan kualitas sinyal;
Perdagangan pada tingkat retracement Fibonacci adalah teknik analisis teknis klasik;
Dengan stop loss dan take profit dalam kecepatan, kerugian maksimum per perdagangan dapat dikontrol secara efektif;
Parameter dapat dioptimalkan untuk periode dan produk yang berbeda.
Ada juga beberapa risiko yang harus diperhatikan untuk strategi ini:
Kemungkinan pembalikan pada tingkat kunci tidak 100%, perlu dikombinasikan dengan aksi harga;
RSI periode tunggal dapat menghasilkan sinyal palsu dari pantulan kucing mati, pertimbangkan validasi jangka waktu ganda;
Pengaturan stop loss yang longgar dapat meningkatkan kerugian;
Stop dapat dijalankan selama perubahan harga yang tidak menentu.
Risiko ini dapat dikelola melalui penyesuaian parameter, mengoptimalkan kombinasi indikator dll.
Bidang optimasi lebih lanjut meliputi:
Tambahkan indikator volume untuk menghindari pecah palsu dengan volume rendah;
Pertimbangkan Bollinger Bands untuk sinyal dari band breakout;
Membangun model pembelajaran mesin untuk secara otomatis mendeteksi peluang perdagangan berkualitas tinggi;
Menggunakan algoritma genetik untuk pengaturan parameter otomatis dan menyesuaikan tingkat stop loss / profit.
Artikel ini menjelaskan secara rinci strategi perdagangan kuantitatif yang menggabungkan analisis RSI dan retracement Fibonacci. Dengan menggabungkan analisis indikator ganda dan strategi teknis klasik, strategi meningkatkan kualitas sinyal di bawah risiko yang dikelola.
/*backtest start: 2023-11-26 00:00:00 end: 2023-12-26 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy(title="Gab Fib + RSI", overlay=true, default_qty_type=strategy.cash, default_qty_value=100000, initial_capital=1000, currency=currency.USD, commission_type=strategy.commission.cash_per_order, commission_value=4) // Inputs timeFilter = year >= 2000 // Stop Loss stop_loss = input(title="SL in % of Instrum. i.e 1.5%=150pips", minval=0, step=0.1, defval=1.5) /100 // RSI Inputs len = input(title="[RSI] Length", minval=0, step=1, defval=14) overSold = input(title="[RSI] Over Sold %", defval=30) overBought = input(title="[RSI] Over Bought %", defval=70) // Fibonacci Levels length = input(title="[Fibonacci] Length", defval=200, minval=1) src = input(hlc3, title="[Fibonacci] Source") mult = input(title="[Fibonacci] Multiplier", defval=3.0, minval=0.001, maxval=50) level = input(title="[Fibonacci] Level", defval=764) // Calculate Fibonacci basis = vwma(src, length) dev = mult * stdev(src, length) fu764= basis + (0.001*level*dev) fu1= basis + (1*dev) fd764= basis - (0.001*level*dev) fd1= basis - (1*dev) // Calculate RSI vrsi = rsi(close, len) // Calculate the Targets targetUp = fd764 targetDown = fu764 // Actual Targets bought = strategy.position_size[0] > strategy.position_size[1] exit_long = valuewhen(bought, targetUp, 0) sold = strategy.position_size[0] < strategy.position_size[1] exit_short = valuewhen(sold, targetDown, 0) // Calculate Stop Losses sl_long = close * (1-stop_loss) sl_short = close * (1+stop_loss) // Conditions to Open Trades openLong = low < fd1 and crossover(vrsi[1], overSold) openShort = high > fu1 and crossunder(vrsi[1], overBought) // Conditions to Close Trades closeLong = high > exit_long or sl_long closeShort = low < exit_short or sl_short //Rounding to MinTick value roundtargetUp = round_to_mintick(targetUp) roundtargetDown = round_to_mintick(targetDown) roundsllong = round_to_mintick(sl_long) roundslshort = round_to_mintick(sl_short) // Plots plot(basis, color=color.blue, linewidth=2, title="[Fibonacci Level] Basis") plot(fu764, color=color.white, linewidth=1, title="[Fibonacci Level] Short Target") plot(fu1, color=color.red, linewidth=2, title="[Fibonacci Level] Top") plot(fd764, color=color.white, linewidth=1, title="[Fibonacci Level] Long Target") plot(fd1, color=color.green, linewidth=2, title="[Fibonacci Level] Bottom") // Strategy Orders if timeFilter // Entry Orders strategy.entry(id="buy", long=true, when=openLong and high < targetUp, limit=close, alert_message="buy,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetUp)+",sl="+tostring(roundsllong)) strategy.entry(id="sell", long=false, when=openShort and low > targetDown, limit=close, alert_message="sell,"+tostring(syminfo.ticker)+",tp="+tostring(roundtargetDown)+",sl="+tostring(roundslshort)) // Exit Orders strategy.exit(id="closelong", when=closeLong and strategy.position_size > 0, limit=exit_long, stop=sl_long, alert_message="closelong,"+tostring(syminfo.ticker)) strategy.exit(id="closeshort", when=closeShort and strategy.position_size < 0, limit=exit_short, stop=sl_short, alert_message="closeshort,"+tostring(syminfo.ticker))