Strategi Indeks Kekuatan Relatif Purata Bergerak

Penulis:ChaoZhang, Tarikh: 2023-11-28 14:07:46
Tag:

img

Ringkasan

Strategi Indeks Kekuatan Relatif Purata Bergerak adalah strategi perdagangan kuantitatif yang menggunakan kedua-dua garis purata bergerak dan Indeks Kekuatan Relatif (RSI) sebagai isyarat perdagangan untuk menangkap peluang dalam trend pasaran.

Logika Strategi

Strategi ini terutamanya berdasarkan dua penunjuk:

  1. Purata bergerak mudah (SMA): mencerminkan trend purata harga.
  2. Indeks Kekuatan Relatif (RSI): mencerminkan kekuatan atau kelemahan prestasi harga.

Logik teras strategi adalah:

Apabila garisan penunjuk RSI lebih rendah daripada garis purata bergerak, ia berada di rantau oversold dan menunjukkan saham itu diremehkan, menghasilkan isyarat beli.

Dalam erti kata lain, garis purata bergerak mencerminkan nilai wajar saham hingga tahap tertentu, sementara penunjuk RSI mewakili kekuatan atau kelemahan harga semasa.

Secara khusus, strategi ini menjana isyarat perdagangan melalui langkah-langkah berikut:

  1. Mengira nilai RSI dan purata mudah pergerakan harga saham.
  2. Bandingkan hubungan antara nilai RSI dan garis purata bergerak.
  3. Isyarat jual dihasilkan apabila garis RSI melintasi di atas garis purata bergerak.
  4. Isyarat beli diaktifkan apabila garis RSI melintasi di bawah garis purata bergerak.
  5. Tetapkan stop loss dan trailing stop untuk mengawal risiko.

Kelebihan Strategi

Dengan menggabungkan penilaian trend purata bergerak dan petunjuk overbought / oversold RSI, strategi ini dapat menentukan titik perubahan di pasaran dengan berkesan dengan memanfaatkan kekuatan penunjuk yang berbeza.

Kelebihan utama ialah:

  1. Purata bergerak boleh menunjukkan trend harga dengan berkesan.
  2. RSI boleh mencerminkan keadaan overbought / oversold.
  3. Gabungan penunjuk dua meningkatkan ketepatan mengenal pasti titik perubahan pasaran.
  4. Stop loss boleh digunakan untuk mengawal risiko.

Risiko Strategi

Terdapat juga beberapa risiko dengan strategi ini:

  1. Terdapat kemungkinan isyarat palsu dari penunjuk, yang boleh menyebabkan kerugian yang tidak perlu.
  2. Stop loss boleh dicetuskan semasa turun naik pasaran yang ganas, yang membawa kepada kerugian besar.
  3. Tetapan parameter yang tidak betul juga boleh mempengaruhi prestasi strategi.

Untuk menguruskan risiko, pengoptimuman boleh dilakukan dengan cara berikut:

  1. Sesuaikan parameter purata bergerak dan RSI untuk menjadikan isyarat penunjuk lebih boleh dipercayai.
  2. Tetapkan stop loss yang lebih luas untuk mengelakkan pemicu yang terlalu kerap.
  3. Mengguna pakai stop loss yang dinamik untuk menjadikan stop loss lebih fleksibel.

Arahan untuk Pengoptimuman Strategi

Arah pengoptimuman lanjut termasuk:

  1. Uji kombinasi parameter yang berbeza dalam jangka masa untuk mencari parameter optimum.
  2. Tambah penunjuk lain seperti jumlah untuk penapis untuk meningkatkan kebolehpercayaan isyarat.
  3. Mengoptimumkan strategi stop loss untuk menjadikan stop loss lebih dinamik dan munasabah.
  4. Menggabungkan model pembelajaran mendalam untuk pengoptimuman parameter adaptif.
  5. Tambah modul saiz kedudukan untuk menyesuaikan kedudukan secara dinamik berdasarkan keadaan pasaran.

Melalui pengoptimuman parameter, pengoptimuman penunjuk, pengoptimuman pengurusan risiko dan lain-lain, kestabilan dan keuntungan strategi ini dapat terus ditingkatkan.

Kesimpulan

Strategi RSI Purata Bergerak menggunakan kedua-dua trend harga dan analisis overbought / oversold untuk mengenal pasti titik perubahan pasaran dengan berkesan dan menangkap peluang pembalikan. Strategi mudah dan praktikal ini mempunyai risiko yang boleh dikawal dan berguna untuk perdagangan kuantitatif. Pengoptimuman lanjut boleh membawa kepada hasil yang lebih baik.


/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-24 06:00:00
period: 10m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=2

strategy(title = "RSI versus SMA", shorttitle = "RSI vs SMA", overlay = false, pyramiding = 0, default_qty_type = strategy.percent_of_equity, default_qty_value = 10, currency = currency.GBP)

// Revision:        1
// Author:          @JayRogers
//
// *** USE AT YOUR OWN RISK ***
// - Nothing is perfect, and all decisions by you are on your own head. And stuff.
//
// Description:
//  - It's RSI versus a Simple Moving Average.. Not sure it really needs much more description.
//  - Should not repaint - Automatically offsets by 1 bar if anything other than "open" selected as RSI source.

// === INPUTS ===
// rsi
rsiSource   = input(defval = open, title = "RSI Source")
rsiLength   = input(defval = 8, title = "RSI Length", minval = 1)
// sma
maLength    = input(defval = 34, title = "MA Period", minval = 1)
// invert trade direction
tradeInvert = input(defval = false, title = "Invert Trade Direction?")
// risk management
useStop     = input(defval = false, title = "Use Initial Stop Loss?")
slPoints    = input(defval = 25, title = "Initial Stop Loss Points", minval = 1)
useTS       = input(defval = true, title = "Use Trailing Stop?")
tslPoints   = input(defval = 120, title = "Trail Points", minval = 1)
useTSO      = input(defval = false, title = "Use Offset For Trailing Stop?")
tslOffset   = input(defval = 20, title = "Trail Offset Points", minval = 1)
// === /INPUTS ===

// === BASE FUNCTIONS ===
// delay for direction change actions
switchDelay(exp, len) =>
    average = len >= 2 ? sum(exp, len) / len : exp[1]
    up      = exp > average
    down    = exp < average
    state   = up ? true : down ? false : up[1]
// === /BASE FUNCTIONS ===

// === SERIES and VAR ===
// rsi
shunt = rsiSource == open ? 0 : 1
rsiUp = rma(max(change(rsiSource[shunt]), 0), rsiLength)
rsiDown = rma(-min(change(rsiSource[shunt]), 0), rsiLength)
rsi = (rsiDown == 0 ? 100 : rsiUp == 0 ? 0 : 100 - (100 / (1 + rsiUp / rsiDown))) - 50 // shifted 50 points to make 0 median
// sma of rsi
rsiMa   = sma(rsi, maLength)
// self explanatory..
tradeDirection = tradeInvert ? 0 <= rsiMa ? true : false : 0 >= rsiMa ? true : false
// === /SERIES ===

// === PLOTTING ===
barcolor(color = tradeDirection ? green : red, title = "Bar Colours")
// hlines
medianLine  = hline(0, title = 'Median', color = #996600,  linewidth = 1)
limitUp     = hline(25, title = 'Limit Up', color = silver,  linewidth = 1)
limitDown   = hline(-25, title = 'Limit Down', color = silver,  linewidth = 1)
// rsi and ma
rsiLine     = plot(rsi, title = 'RSI', color = purple, linewidth = 2, style = line, transp = 50)
areaLine    = plot(rsiMa, title = 'Area MA', color = silver, linewidth = 1, style = area, transp = 70)
// === /PLOTTING ===

goLong() => not tradeDirection[1] and tradeDirection
killLong() => tradeDirection[1] and not tradeDirection
strategy.entry(id = "Buy", long = true, when = goLong())
strategy.close(id = "Buy", when = killLong())

goShort() => tradeDirection[1] and not tradeDirection
killShort() => not tradeDirection[1] and tradeDirection
strategy.entry(id = "Sell", long = false, when = goShort())
strategy.close(id = "Sell", when = killShort())

if (useStop)
    strategy.exit("XSL", from_entry = "Buy", loss = slPoints)
    strategy.exit("XSS", from_entry = "Sell", loss = slPoints)
// if we're using the trailing stop
if (useTS and useTSO) // with offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints, trail_offset = tslOffset)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints, trail_offset = tslOffset)
if (useTS and not useTSO) // without offset
    strategy.exit("XSL", from_entry = "Buy", trail_points = tslPoints)
    strategy.exit("XSS", from_entry = "Sell", trail_points = tslPoints)

Lebih lanjut