RSI dan Fibonacci Retracement Trading Strategy

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

img

Gambaran umum

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 Strategi

Prinsip-prinsip utama di balik strategi ini adalah:

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

  2. Ketika harga mendekati tingkat retracement atas atau bawah, gunakan indikator RSI untuk menentukan apakah ada kondisi overbought atau oversold di sekitar tingkat tersebut;

  3. Jika indikator RSI menunjukkan sinyal overbought atau oversold, sinyal panjang atau pendek akan dihasilkan di sekitar tingkat retracement;

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

Analisis Keuntungan

Dibandingkan dengan menggunakan RSI atau Fibonacci saja, strategi gabungan ini memiliki keuntungan berikut:

  1. Penyaringan indikator ganda dapat mengurangi sinyal palsu dan meningkatkan kualitas sinyal;

  2. Perdagangan pada tingkat retracement Fibonacci adalah teknik analisis teknis klasik;

  3. Dengan stop loss dan take profit dalam kecepatan, kerugian maksimum per perdagangan dapat dikontrol secara efektif;

  4. Parameter dapat dioptimalkan untuk periode dan produk yang berbeda.

Analisis Risiko

Ada juga beberapa risiko yang harus diperhatikan untuk strategi ini:

  1. Kemungkinan pembalikan pada tingkat kunci tidak 100%, perlu dikombinasikan dengan aksi harga;

  2. RSI periode tunggal dapat menghasilkan sinyal palsu dari pantulan kucing mati, pertimbangkan validasi jangka waktu ganda;

  3. Pengaturan stop loss yang longgar dapat meningkatkan kerugian;

  4. Stop dapat dijalankan selama perubahan harga yang tidak menentu.

Risiko ini dapat dikelola melalui penyesuaian parameter, mengoptimalkan kombinasi indikator dll.

Arahan Optimasi

Bidang optimasi lebih lanjut meliputi:

  1. Tambahkan indikator volume untuk menghindari pecah palsu dengan volume rendah;

  2. Pertimbangkan Bollinger Bands untuk sinyal dari band breakout;

  3. Membangun model pembelajaran mesin untuk secara otomatis mendeteksi peluang perdagangan berkualitas tinggi;

  4. Menggunakan algoritma genetik untuk pengaturan parameter otomatis dan menyesuaikan tingkat stop loss / profit.

Ringkasan

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

Lebih banyak