Artikel ini terutamanya menerangkan strategi dagangan yang menggabungkan Indeks Kekuatan Relatif (RSI) dan tahap retracement Fibonacci. Strategi pertama mengira tahap retracement Fibonacci utama berdasarkan dinamik harga sejarah dalam tempoh tertentu, dan kemudian menggunakan penunjuk RSI untuk menilai sama ada pasaran terlalu banyak dibeli atau terlalu banyak dijual berhampiran tahap retracement untuk menjana isyarat dagangan.
Prinsip utama di sebalik strategi ini adalah:
Menggunakan data harga dalam tempoh tertentu (contohnya 200 bar) untuk mengira harga median, penyimpangan standard dan tahap retracement Fibonacci utama (contohnya 0.764) untuk tempoh itu;
Apabila harga mendekati tahap retracement atas atau bawah, gunakan penunjuk RSI untuk menentukan sama ada terdapat keadaan overbought atau oversold di sekitar tahap tersebut;
Jika penunjuk RSI menunjukkan isyarat overbought atau oversold, isyarat panjang atau pendek akan dihasilkan di sekitar tahap retracement;
Tetapkan stop loss dan ambil keuntungan untuk menutup kedudukan apabila harga melebihi tahap yang ditetapkan atau stop loss dicetuskan.
Di atas adalah aliran kerja asas untuk mengenal pasti peluang perdagangan dalam strategi ini.
Berbanding dengan menggunakan RSI atau Fibonacci sahaja, strategi gabungan ini mempunyai kelebihan berikut:
Penapisan penunjuk berganda boleh mengurangkan isyarat palsu dan meningkatkan kualiti isyarat;
Perdagangan pada tahap retracement Fibonacci adalah teknik analisis teknikal klasik;
Dengan stop loss dan mengambil keuntungan dengan pantas, kerugian maksimum setiap perdagangan dapat dikawal dengan berkesan;
Parameter boleh dioptimumkan untuk tempoh dan produk yang berbeza.
Terdapat juga beberapa risiko yang perlu diperhatikan untuk strategi ini:
Kemungkinan untuk pembalikan pada tahap utama tidak 100%, perlu digabungkan dengan tindakan harga;
RSI tempoh tunggal boleh menghasilkan isyarat palsu dari pantulan kucing mati, pertimbangkan pengesahan jangka masa berbilang;
Tetapan stop loss yang longgar boleh meningkatkan kerugian;
Hentian boleh dijalankan semasa turun naik harga yang tidak menentu. Hentian yang lebih luas harus dipertimbangkan.
Risiko ini boleh dikendalikan melalui penyesuaian parameter, pengoptimuman kombinasi penunjuk dan lain-lain.
Kawasan untuk pengoptimuman lanjut termasuk:
Tambah penunjuk jumlah untuk mengelakkan pecah palsu dengan jumlah yang rendah;
Pertimbangkan Bollinger Bands untuk isyarat daripada penembusan band;
Membina model pembelajaran mesin untuk mengesan peluang perdagangan berkualiti tinggi secara automatik;
Gunakan algoritma genetik untuk menyesuaikan parameter automatik dan menyesuaikan tahap stop loss / keuntungan.
Artikel ini menerangkan secara terperinci strategi perdagangan kuantitatif yang menggabungkan analisis RSI dan analisis retracement Fibonacci. Dengan menggabungkan analisis penunjuk dua dan strategi teknikal klasik, strategi ini meningkatkan kualiti isyarat di bawah risiko yang diuruskan. Peningkatan prestasi lanjut dapat dicapai melalui penyesuaian parameter dan pengoptimuman model yang berterusan.
/*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))