RSI dan Fibonacci Retracement Strategi Dagangan

Penulis:ChaoZhang, Tarikh: 2023-12-27 16:49:52
Tag:

img

Ringkasan

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 Strategi

Prinsip utama di sebalik strategi ini adalah:

  1. 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;

  2. Apabila harga mendekati tahap retracement atas atau bawah, gunakan penunjuk RSI untuk menentukan sama ada terdapat keadaan overbought atau oversold di sekitar tahap tersebut;

  3. Jika penunjuk RSI menunjukkan isyarat overbought atau oversold, isyarat panjang atau pendek akan dihasilkan di sekitar tahap retracement;

  4. 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.

Analisis Kelebihan

Berbanding dengan menggunakan RSI atau Fibonacci sahaja, strategi gabungan ini mempunyai kelebihan berikut:

  1. Penapisan penunjuk berganda boleh mengurangkan isyarat palsu dan meningkatkan kualiti isyarat;

  2. Perdagangan pada tahap retracement Fibonacci adalah teknik analisis teknikal klasik;

  3. Dengan stop loss dan mengambil keuntungan dengan pantas, kerugian maksimum setiap perdagangan dapat dikawal dengan berkesan;

  4. Parameter boleh dioptimumkan untuk tempoh dan produk yang berbeza.

Analisis Risiko

Terdapat juga beberapa risiko yang perlu diperhatikan untuk strategi ini:

  1. Kemungkinan untuk pembalikan pada tahap utama tidak 100%, perlu digabungkan dengan tindakan harga;

  2. RSI tempoh tunggal boleh menghasilkan isyarat palsu dari pantulan kucing mati, pertimbangkan pengesahan jangka masa berbilang;

  3. Tetapan stop loss yang longgar boleh meningkatkan kerugian;

  4. 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.

Arahan pengoptimuman

Kawasan untuk pengoptimuman lanjut termasuk:

  1. Tambah penunjuk jumlah untuk mengelakkan pecah palsu dengan jumlah yang rendah;

  2. Pertimbangkan Bollinger Bands untuk isyarat daripada penembusan band;

  3. Membina model pembelajaran mesin untuk mengesan peluang perdagangan berkualiti tinggi secara automatik;

  4. Gunakan algoritma genetik untuk menyesuaikan parameter automatik dan menyesuaikan tahap stop loss / keuntungan.

Ringkasan

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))

Lebih lanjut