Chiến lược đột phá RSI nhanh chóng của Noro

Tác giả:ChaoZhang, Ngày: 2023-09-12 11:40:02
Tags:

Bài viết này sẽ chi tiết logic đằng sau Chiến lược đột phá RSI nhanh của Noro, giải thích cách các tín hiệu giao dịch được tạo ra và phân tích những lợi thế và rủi ro tiềm ẩn của chiến lược này.

I. Tổng quan chiến lược

Chiến lược này chủ yếu sử dụng chỉ số RSI để tạo ra các tín hiệu giao dịch, kết hợp với lọc nến và đột phá tối thiểu / tối đa như các phán đoán phụ trợ, tạo thành một hệ thống quyết định dài / ngắn hoàn chỉnh.

II. Chi tiết chiến lược

  1. Thiết lập RSI nhanh

Chiến lược này sử dụng chỉ số RSI nhanh 7 chiều dài để nắm bắt các dấu hiệu của xu hướng thị trường thông qua các dao động RSI nhanh.

  1. Bộ lọc nến

Chiến lược lọc các tín hiệu RSI bằng cách sử dụng kích thước cơ thể nến sma, chỉ xem xét các tín hiệu RSI trên nến có kích thước cơ thể lớn hơn kích thước cơ thể trung bình 5 ngày, tránh whipsaws.

  1. Mức đột phá tối thiểu/tối đa

Chiến lược kiểm tra xem liệu sự đột phá tối thiểu / tối đa đã xảy ra trong các mmbars gần đây, kết hợp với mức RSI để xác định sự đảo ngược đáy và sự phá vỡ trên cùng.

  1. Tóm tắt tín hiệu giao dịch

Tín hiệu dài: RSI vượt dưới 30, kích thước cơ thể vượt quá kích thước cơ thể trung bình, và min phá vỡ hỗ trợ.

Tín hiệu ngắn: RSI vượt trên 70, kích thước cơ thể vượt quá kích thước cơ thể trung bình, và chống gãy tối đa.

Tín hiệu thoát: Khi RSI vượt qua lại giới hạn theo hướng ngược lại của vị trí.

III. Lợi thế của Chiến lược

  1. Các thông số RSI được tối ưu hóa nắm bắt sự thay đổi xu hướng nhanh chóng.

  2. Kết hợp với các ngọn nến và min / max ngăn ngừa các whipsaws không cần thiết.

  3. Cơ chế dừng lỗ sẽ ngừng khi RSI vượt qua giới hạn.

IV. Rủi ro của chiến lược

  1. Chỉ số RSI có xu hướng tín hiệu sai, cần xác nhận phụ trợ.

  2. Backtest rủi ro quá phù hợp Các thông số tối ưu chỉ có thể phù hợp với các giai đoạn thị trường cụ thể.

  3. Cơ chế dừng lỗ có thể quá cơ học, không thể kiểm soát lỗ lớn trên lỗ dừng duy nhất.

V. Kết luận

Chiến lược này tích hợp nhiều chỉ số kỹ thuật để theo dõi xu hướng mạnh mẽ. Nhưng rủi ro quá mức kiểm tra lại và dừng lỗ nên được lưu ý, và hiệu suất trực tiếp nên được đánh giá cẩn thận. Điều chỉnh các tham số và kiểm soát kích thước vị trí được khuyến cáo cho giao dịch trực tiếp.


/*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()

Thêm nữa