Strategi Dagangan Peralihan RSI Cepat

Penulis:ChaoZhang, Tarikh: 2024-03-01 11:55:56
Tag:

img

Ringkasan

Strategi Perdagangan Pembalikan RSI Cepat menghasilkan isyarat perdagangan dengan menggabungkan penunjuk RSI Cepat, penapis badan candlestick, penapis harga min / max dan penapis SMA untuk menentukan titik pembalikan trend untuk perdagangan pembalikan berisiko rendah. Strategi ini bertujuan untuk menangkap peluang pembalikan jangka pendek.

Logika Strategi

Strategi ini terutamanya berdasarkan petunjuk berikut untuk penilaian:

  1. Indikator RSI Cepat: Mengira RSI menggunakan fungsi RMA untuk menjadikannya lebih sensitif untuk menangkap isyarat overbought / oversold lebih cepat.

  2. Penapis badan candlestick: Memerlukan saiz badan candlestick melebihi 1/5 daripada purata badan EMA untuk menapis situasi turun naik yang rendah.

  3. Penapis Harga Min/Max: Pengadil jika harga mencapai tinggi baru atau rendah baru untuk mengesahkan pembalikan trend.

  4. Penapis SMA: Memerlukan harga untuk memecahkan garis SMA untuk pengesahan tambahan.

Isyarat perdagangan dihasilkan apabila beberapa keadaan di atas mencetuskan secara serentak.

Pendaftaran panjang: RSI pantas di bawah paras oversold AND Badan lilin > 1/5 daripada badan EMA AND Penembusan harga Min AND Harga melintasi di atas SMA

Pendaftaran pendek: RSI pantas di atas tahap overbought AND Badan lilin > 1/5 daripada badan EMA AND Penembusan harga maksimum AND Harga melintasi di bawah SMA

Keluar: RSI pantas kembali ke julat normal

Kelebihan

Strategi ini mempunyai kelebihan berikut:

  1. Mencatatkan turun naik daripada pembalikan jangka pendek
  2. Indikator RSI pantas sensitif
  3. Pelbagai penapis mengurangkan isyarat palsu
  4. Risiko yang boleh dikawal, pengeluaran kecil

Risiko dan Pengoptimuman

Strategi ini juga mempunyai beberapa risiko:

  1. Risiko pembalikan gagal
  2. Ruang pengoptimuman terhad

Boleh mengoptimumkan lagi dengan:

  1. Tambah penapis jumlah dagangan
  2. Melaksanakan stop loss
  3. Mengoptimumkan kombinasi parameter

Kesimpulan

Secara keseluruhan ini adalah strategi perdagangan pembalikan purata jangka pendek yang berisiko rendah. Ia mengenal pasti isyarat perdagangan dengan RSI Cepat dan menggunakan pelbagai penapis untuk mengurangkan isyarat palsu, mencapai perdagangan pembalikan risiko yang boleh dikawal. Strategi ini boleh dioptimumkan lebih lanjut dan mempunyai potensi yang besar.


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

//Noro
//2018

//@version=3
strategy(title = "Noro's Fast RSI Strategy v1.4", shorttitle = "Fast RSI str 1.4", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 5)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usersi = input(true, defval = true, title = "Use Fast RSI Strategy")
usemm = input(true, defval = true, title = "Use Min/Max Strategy")
usesma = input(true, defval = true, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
rsiperiod = input(7, defval = 7, minval = 2, maxval = 50, title = "RSI Period")
limit = input(30, defval = 30, minval = 1, maxval = 100, title = "RSI limit")
rsisrc = input(close, defval = close, title = "RSI Price")
rsibars = input(1, defval = 1, minval = 1, maxval = 20, title = "RSI Bars")
mmbars = input(1, defval = 1, minval = 1, maxval = 5, title = "Min/Max Bars")
showsma = input(false, defval = false, title = "Show SMA Filter")
showarr = input(false, defval = false, title = "Show Arrows")
fromyear = input(2018, defval = 2018, minval = 1900, maxval = 2100, title = "From Year")
toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year")
frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month")
tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month")
fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day")
today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day")

//Fast RSI
fastup = rma(max(change(rsisrc), 0), rsiperiod)
fastdown = rma(-min(change(rsisrc), 0), rsiperiod)
fastrsi = fastdown == 0 ? 100 : fastup == 0 ? 0 : 100 - (100 / (1 + fastup / fastdown))

//Limits
bar = close > open ? 1 : close < open ? -1 : 0
uplimit = 100 - limit
dnlimit = limit

//RSI Bars
upsignal = fastrsi > uplimit ? 1 : 0
dnsignal = fastrsi < dnlimit ? 1 : 0
uprsi = sma(upsignal, rsibars) == 1
dnrsi = sma(dnsignal, rsibars) == 1

//Body
body = abs(close - open)
emabody = ema(body, 30)

//MinMax Bars
min = min(close, open)
max = max(close, open)
minsignal = min < min[1] and bar == -1 and bar[1] == -1 ? 1 : 0
maxsignal = max > max[1] and bar == 1 and bar[1] == 1 ? 1 : 0
mins = sma(minsignal, mmbars) == 1
maxs = sma(maxsignal, mmbars) == 1

//SMA Filter
sma = sma(close, smaperiod)
colorsma = showsma ? blue : na
plot(sma, color = colorsma, linewidth = 3)

//Signals
up1 = bar == -1 and (strategy.position_size == 0 or close < strategy.position_avg_price) and dnrsi and body > emabody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > emabody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and usemm
dn2 = maxs and (close < sma or usesma == false) and usemm 
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > emabody / 2

//Arrows
col = exit ? black : up1 or dn1 ? blue : up2 or dn2 ? red : na
needup = up1 or up2
needdn = dn1 or dn2
needexitup = exit and strategy.position_size < 0
needexitdn = exit and strategy.position_size > 0
plotarrow(showarr and needup ? 1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needdn ? -1 : na, colorup = blue, colordown = blue, transp = 0)
plotarrow(showarr and needexitup ? 1 : na, colorup = black, colordown = black, transp = 0)
plotarrow(showarr and needexitdn ? -1 : na, colorup = black, colordown = black, transp = 0)

//Trading
if up1 or up2
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na)

if dn1 or dn2
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na)
    
if time > timestamp(toyear, tomonth, today, 00, 00) or exit
    strategy.close_all()

Lebih lanjut