Strategi Trading Reversal RSI Cepat

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

img

Gambaran umum

Strategi Trading Reversal Fast RSI menghasilkan sinyal trading dengan menggabungkan indikator Fast RSI, filter body candlestick, filter harga min/max dan filter SMA untuk menentukan titik pembalikan tren untuk trading reversal berisiko rendah. Strategi ini bertujuan untuk menangkap peluang pembalikan jangka pendek.

Logika Strategi

Strategi ini terutama didasarkan pada indikator berikut untuk penilaian:

  1. Indikator RSI Cepat: Menghitung RSI menggunakan fungsi RMA untuk membuatnya lebih sensitif untuk menangkap sinyal overbought / oversold lebih cepat.

  2. Filter tubuh candlestick: Membutuhkan ukuran tubuh candlestick untuk melebihi 1/5 dari rata-rata tubuh EMA untuk menyaring situasi volatilitas rendah.

  3. Filter Harga Min/Max: Menghakimi jika harga mencapai tinggi baru atau rendah baru untuk mengkonfirmasi pembalikan tren.

  4. SMA Filter: Membutuhkan harga untuk memecahkan garis SMA untuk konfirmasi tambahan.

Sinyal perdagangan dihasilkan ketika beberapa kondisi di atas memicu secara bersamaan.

Entry panjang: RSI cepat di bawah level oversold AND Candle body > 1/5 dari EMA body AND Min price breakout AND Price crosses above SMA

Entri pendek: RSI cepat di atas level overbought AND Candle body > 1/5 dari EMA body AND Max price breakout AND Price crosses below SMA

Keluar: RSI cepat kembali ke kisaran normal

Keuntungan

Strategi ini memiliki keuntungan berikut:

  1. Menangkap volatilitas dari pembalikan jangka pendek
  2. Indikator RSI cepat sensitif
  3. Beberapa filter mengurangi sinyal palsu
  4. Risiko yang dapat dikendalikan, pemenuhan yang kecil

Risiko dan Optimalisasi

Strategi ini juga memiliki beberapa risiko:

  1. Risiko pembalikan gagal
  2. Ruang pengoptimalan terbatas

Dapat lebih mengoptimalkan dengan:

  1. Tambahkan filter volume perdagangan
  2. Mengimplementasikan stop loss
  3. Mengoptimalkan kombinasi parameter

Kesimpulan

Secara keseluruhan ini adalah strategi perdagangan pembalikan rata-rata jangka pendek berisiko rendah. Ini mengidentifikasi sinyal perdagangan dengan RSI Cepat dan menggunakan beberapa filter untuk mengurangi sinyal palsu, mencapai perdagangan pembalikan risiko yang terkontrol. Strategi dapat dioptimalkan lebih lanjut dan memiliki potensi 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 banyak