Noro's Fast RSI Strategi Terobosan

Penulis:ChaoZhang, Tarikh: 2023-09-12 11:40:02
Tag:

Artikel ini akan menerangkan secara terperinci logik di sebalik Noro's Fast RSI Breakthrough Strategy, menerangkan bagaimana isyarat perdagangan dihasilkan, dan menganalisis kelebihan dan potensi risiko strategi ini.

I. Ringkasan Strategi

Strategi ini terutamanya menggunakan penunjuk RSI untuk menjana isyarat perdagangan, digabungkan dengan penapisan candlestick dan penembusan min / max sebagai penilaian tambahan, membentuk sistem keputusan panjang / pendek yang lengkap.

II. butiran strategi

  1. Tetapan RSI pantas

Strategi ini menggunakan panjang 7 RSI pantas untuk menangkap tanda-tanda trend pasaran melalui goyangan RSI pantas. had atas dan bawah 70 dan 30 juga ditetapkan untuk RSI untuk mencetuskan isyarat apabila dilanggar.

  1. Penapisan candlestick

Strategi menapis isyarat RSI menggunakan saiz badan lilin sma, hanya mempertimbangkan isyarat RSI pada lilin dengan saiz badan yang lebih besar daripada saiz badan purata 5 hari, mengelakkan whipsaws.

  1. Penembusan Min/Max

Strategi ini memeriksa sama ada terobosan min/max berlaku dalam mmbars baru-baru ini, digabungkan dengan tahap RSI untuk menentukan pembalikan bawah dan pemecahan atas.

  1. Ringkasan Isyarat Dagangan

Isyarat panjang: RSI melintasi di bawah 30, saiz badan melebihi saiz badan purata, dan min memecahkan sokongan.

Isyarat pendek: RSI melintasi di atas 70, saiz badan melebihi saiz badan purata, dan rintangan pecah maksimum.

Isyarat keluar: Apabila RSI melintasi semula had dalam arah yang bertentangan dengan kedudukan.

III. Kelebihan Strategi

  1. Parameter RSI yang dioptimumkan menangkap perubahan trend dengan cepat.

  2. Menggabungkan dengan lilin dan min / max menghalang whipsaws yang tidak perlu.

  3. Mekanisme Stop Loss keluar apabila RSI melepasi semula had.

IV. Risiko Strategi

  1. RSI terdedah kepada isyarat palsu, memerlukan pengesahan tambahan.

  2. Backtest risiko overfit. parameter yang dioptimumkan hanya boleh sesuai dengan tempoh pasaran tertentu.

  3. Mekanisme stop loss mungkin terlalu mekanikal, tidak dapat mengawal kerugian besar pada satu stop loss.

V. Kesimpulan

Strategi ini mengintegrasikan beberapa penunjuk teknikal untuk trend yang kukuh. Tetapi risiko overfit backtest dan stop loss harus diperhatikan, dan prestasi langsung harus dinilai dengan berhati-hati. Penyesuaian parameter yang baik dan kawalan saiz kedudukan disyorkan untuk perdagangan langsung.


/*backtest
start: 2022-09-11 00:00:00
end: 2023-01-11 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

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

//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")
usebc = input(true, defval = true, title = "Use BarColor Strategy")
usesma = input(false, defval = false, title = "Use SMA Filter")
smaperiod = input(20, defval = 20, minval = 2, maxval = 1000, title = "SMA Filter Period")
fast = input(7, defval = 7, minval = 2, maxval = 50, title = "Fast 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), fast)
fastdown = rma(-min(change(rsisrc), 0), fast)
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)
abody = sma(body, 10)

//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 > abody / 5 and usersi
dn1 = bar == 1 and (strategy.position_size == 0 or close > strategy.position_avg_price) and uprsi and body > abody / 5 and usersi
up2 = mins and (close > sma or usesma == false) and fastrsi < 70 and usemm
dn2 = maxs and (close < sma or usesma == false) and fastrsi > 30 and usemm 
up3 = sma(bar, 2) == -1 and usebc
dn3 = sma(bar, 2) == 1 and usebc
exit = ((strategy.position_size > 0 and fastrsi > dnlimit and bar == 1) or (strategy.position_size < 0 and fastrsi < uplimit and bar == -1)) and body > abody / 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 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : na, when=(time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Lebih lanjut