Strategi VRSI dan MARSI

Penulis:ChaoZhang, Tanggal: 2024-02-02 17:21:09
Tag:

img

Gambaran umum

Strategi VRSI dan MARSI menggunakan rata-rata bergerak untuk meluruskan indikator RSI dan menerapkan strategi indikator ganda. Ini menggunakan indikator RSI harga dan volume, dikombinasikan dengan rata-rata bergerak mereka, untuk menghasilkan sinyal perdagangan.

Logika Strategi

Strategi ini pertama-tama menghitung indikator RSI harga 9 periode (RSI) dan indikator RSI volume 9 periode (VRSI). kemudian menghitung rata-rata bergerak sederhana 5 periode (MARSI dan MAVRSI) dari kedua indikator RSI ini.

Sinyal perdagangan dihasilkan berdasarkan indikator MARSI. Ini pergi panjang ketika MARSI naik dan pergi pendek ketika MARSI turun. Selain itu, indikator MAVRSI digunakan untuk menilai kekuatan pasar dan kemungkinan perubahan tren.

Sebagai contoh, selama uptrend, jika harga terus naik tetapi volume mulai menurun, ini menandakan bahwa kekuatan bullish mungkin melemah dan seseorang harus bersiap untuk menutup posisi panjang. Sebaliknya, selama downtrend, jika harga terus turun tetapi volume meningkat, ini menandakan penguatan kekuatan bearish dan posisi pendek dapat dipegang lebih lanjut.

Analisis Keuntungan

Dengan menggabungkan rata-rata bergerak dari indikator RSI ganda, strategi ini dapat secara efektif menangkap tren, sambil menggunakan perubahan volume untuk menilai kekuatan pasar dan menghindari terjebak.

Penggunaan rata-rata bergerak juga menyaring beberapa kebisingan untuk membuat sinyal lebih dapat diandalkan.

Analisis Risiko

Risiko utama dari strategi ini terletak pada perbedaan yang mungkin terjadi antara indikator ganda. Ketika ada perbedaan antara harga dan volume, sinyal perdagangan dapat menjadi kurang dapat diandalkan. penilaian manual dari hubungan antara indikator diperlukan kemudian.

Risiko lain adalah terjebak di pasar yang terikat kisaran. Ketika harga bergerak dalam kisaran, indikator RSI cenderung berosilasi ke atas dan ke bawah, memicu perdagangan yang tidak perlu. Penyesuaian parameter atau menilai tingkat absolut indikator diperlukan kemudian.

Arahan Optimasi

Strategi dapat dioptimalkan dalam aspek berikut:

  1. Sesuaikan parameter RSI dan moving average untuk menemukan kombinasi optimal

  2. Tambahkan kondisi lain saat menghasilkan sinyal, misalnya sinyal pembalikan yang dipicu di area overbought/oversold cenderung lebih dapat diandalkan

  3. Tambahkan strategi stop loss seperti stop loss bergerak atau stop loss indikator

  4. Masukkan indikator lain misalnya pola candlestick, indikator volatilitas dll untuk menghindari perangkap

Ringkasan

Strategi VRSI dan MARSI berhasil menggabungkan indikator RSI harga dan volume. Perbandingan dan penilaian antara indikator ganda dapat meningkatkan akurasi sinyal dan profitabilitas. Optimasi parameter dan strategi stop loss juga memungkinkan berjalan stabil. Singkatnya, dengan menggabungkan indikator, strategi ini mencapai kinerja yang lebih unggul daripada satu indikator RSI.


/*backtest
start: 2024-01-02 00:00:00
end: 2024-02-01 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("VRSI-MARSI Strategy", shorttitle="(V/MA)RSI Str.", overlay=false, default_qty_type=strategy.percent_of_equity, calc_on_order_fills=true, calc_on_every_tick=true, pyramiding=0, default_qty_value=5, initial_capital=100)

// RSI(close, ="RSI") and RSI(Volume, ="VRSI")
src = close, len = input(9, minval=1, title="Length RSI")
src2 = volume, len2 = input(9, minval=1, title="Length VRSI)")
up = rma(max(change(src), 0), len)
down = rma(-min(change(src), 0), len)
up2 = rma(max(change(src2), 0), len2)
down2 = rma(-min(change(src2), 0), len2)
rsi = down == 0 ? 100 : up == 0 ? 0 : 100 - (100 / (1 + up / down))
rsi2 = down2 == 0 ? 100 : up2 == 0 ? 0 : 100 - (100 / (1 + up2 / down2))

// MA(=Moving Average) of RSI(close, ="MARSI") and RSI(Volume, ="MAVRSI")
len3 = input(5, minval=1, title="Length MARSI")
marsi = sma(rsi, len3)
len4 = input(5, minval=1, title="Length MAVRSI")
marsi2 = sma(rsi2, len4)

// Plot: 
// Default plot of RSI and VRSI: not visible but can be made visible
// Default plot MARSI and MAVRSI: visible
p1 = plot(rsi, linewidth=2, transp=100, color=color.yellow, title="RSI")
p2 = plot(rsi2, linewidth=2, transp=100, color=color.orange, title="VRSI")
m1 = plot(marsi, color=(marsi>=0 ? (marsi[1] < marsi ? color.yellow : color.blue) : (marsi[1] < marsi ? color.yellow : color.blue) ), linewidth = 2, transp = 0, title="MARSI")
m2 = plot(marsi2, color=color.orange, linewidth = 2, transp = 0, title="MAVRSI")

// Color fill:
// Default color fill "RSI - VRSI": not visible but can be made visible
// Default color fill "MARSI - MAVRSI": visible
fill(p1,p2, color = rsi>rsi2 ? color.green : color.red, transp=100, title="BG RSI-VRSI")
fill(m1,m2, color = marsi>marsi2 ? color.green : color.red, transp=75, title="BG MARSI-MAVRSI")

// Lines:
h2=hline(20, color=color.green, linestyle=hline.style_dotted, title="Extreme Oversold Rsi")
h3=hline(30, color=color.black, linestyle=hline.style_dotted, title="Oversold Rsi")
h5=hline(50, color=color.yellow, linestyle=hline.style_dashed, title="Middle line")
h7=hline(70, color=color.black, linestyle=hline.style_dotted, title="Overbought Rsi")
h8=hline(80, color=color.red, linestyle=hline.style_dotted, title="Extreme Overbought Rsi")

// Color fill between Lines "20-30" and "70-80" represents the crossing of "MARSI" and "MAVRSI":
fill(h2, h3, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="20-30 BG color X MARSI/MAVRSI")
fill(h7, h8, color=(marsi2 > marsi ? color.red : color.green), transp=80, title="70-80 BG color X MARSI/MAVRSI")

///Long Entry///
longCondition = marsi > marsi[1] 
if (longCondition)
    strategy.entry("Long", strategy.long)

///Long exit///
Xlong =input(true)
closeConditionLong = marsi < marsi[1] and Xlong
if (closeConditionLong)
    strategy.close("Long")

///Short Entry///
shortCondition = marsi < marsi[1] 
if (shortCondition)
    strategy.entry("Short", strategy.short)
    
///Short exit///
Xshort =input(true)
closeConditionShort = marsi > marsi[1] and Xshort
if (closeConditionShort)
    strategy.close("Short")
    

Lebih banyak