Bài viết này sẽ chi tiết logic đằng sau Chiến lược đột phá RSI nhanh của Noro
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
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.
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.
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.
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
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.
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.
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
Chỉ số RSI có xu hướng tín hiệu sai, cần xác nhận phụ trợ.
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ể.
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()