Strategi Indeks Kekuatan Relatif Moving Average

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

img

Gambaran umum

Strategi Moving Average Relative Strength Index adalah strategi perdagangan kuantitatif yang menggunakan garis rata-rata bergerak dan Indeks Relatif Kekuatan (RSI) sebagai sinyal perdagangan untuk menangkap peluang dalam tren pasar.

Logika Strategi

Strategi ini terutama didasarkan pada dua indikator:

  1. Simple Moving Average (SMA): mencerminkan tren harga rata-rata.
  2. Relative Strength Index (RSI): mencerminkan kekuatan atau kelemahan kinerja harga.

Logika inti dari strategi ini adalah:

Ketika garis indikator RSI lebih rendah dari garis rata-rata bergerak, itu berada di wilayah oversold dan menunjukkan bahwa saham tersebut diremehkan, menghasilkan sinyal beli.

Dengan kata lain, garis rata-rata bergerak mencerminkan nilai wajar saham sampai batas tertentu, sedangkan indikator RSI mewakili kekuatan atau kelemahan harga saat ini.

Secara khusus, strategi ini menghasilkan sinyal perdagangan melalui langkah-langkah berikut:

  1. Hitung nilai RSI dan rata-rata bergerak sederhana dari harga saham.
  2. Bandingkan hubungan antara nilai RSI dan garis rata-rata bergerak.
  3. Sinyal jual dihasilkan ketika garis RSI melintasi di atas garis rata-rata bergerak.
  4. Sinyal beli dipicu ketika garis RSI melintasi di bawah garis rata-rata bergerak.
  5. Atur stop loss dan trailing stop untuk mengendalikan risiko.

Keuntungan dari Strategi

Dengan menggabungkan penilaian tren dari rata-rata bergerak dan indikasi overbought/oversold dari RSI, strategi ini dapat secara efektif menentukan titik infleksi di pasar dengan memanfaatkan kekuatan indikator yang berbeda.

Keuntungan utama adalah:

  1. Rata-rata bergerak dapat secara efektif menunjukkan tren harga.
  2. RSI dapat mencerminkan kondisi overbought/oversold.
  3. Kombinasi indikator ganda meningkatkan keakuratan mengidentifikasi titik balik pasar.
  4. Stop loss dapat digunakan untuk mengendalikan risiko.

Risiko dari Strategi

Ada juga beberapa risiko dengan strategi ini:

  1. Ada kemungkinan sinyal yang salah dari indikator, yang dapat menyebabkan kerugian yang tidak perlu.
  2. Stop loss dapat dipicu selama perubahan pasar yang keras, yang menyebabkan kerugian besar.
  3. Pengaturan parameter yang tidak benar juga dapat mempengaruhi kinerja strategi.

Untuk mengelola risiko, optimasi dapat dilakukan dengan cara berikut:

  1. Sesuaikan parameter moving average dan RSI untuk membuat sinyal indikator lebih dapat diandalkan.
  2. Atur stop loss yang lebih luas agar tidak terlalu sering dipicu.
  3. Mengadopsi stop loss trailing dinamis untuk membuat stop loss lebih fleksibel.

Arahan untuk Optimasi Strategi

Arah optimasi lebih lanjut termasuk:

  1. Uji kombinasi parameter yang berbeda di seluruh kerangka waktu untuk menemukan parameter optimal.
  2. Tambahkan indikator lain seperti volume untuk filter untuk meningkatkan keandalan sinyal.
  3. Mengoptimalkan strategi stop loss untuk membuat stop loss lebih dinamis dan masuk akal.
  4. Menggabungkan model pembelajaran mendalam untuk optimasi parameter adaptif.
  5. Tambahkan modul ukuran posisi untuk menyesuaikan posisi secara dinamis berdasarkan kondisi pasar.

Melalui optimasi parameter, optimasi indikator, optimasi manajemen risiko dll, stabilitas dan profitabilitas strategi ini dapat terus ditingkatkan.

Kesimpulan

Strategi RSI Moving Average menggunakan tren harga dan analisis overbought/oversold untuk secara efektif mengidentifikasi titik balik pasar dan menangkap peluang pembalikan.


/*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 banyak