Chiến lược giao dịch đảo ngược RSI nhanh tạo ra tín hiệu giao dịch bằng cách kết hợp chỉ số RSI nhanh, bộ lọc thân nến, bộ lọc giá tối thiểu / tối đa và bộ lọc SMA để xác định các điểm đảo ngược xu hướng cho giao dịch đảo ngược rủi ro thấp. Chiến lược nhằm mục đích nắm bắt các cơ hội đảo ngược ngắn hạn.
Chỉ số RSI nhanh: Tính toán RSI bằng cách sử dụng hàm RMA để làm cho nó nhạy cảm hơn để nắm bắt các tín hiệu mua quá mức / bán quá mức nhanh hơn.
Bộ lọc thân cây nến: Yêu cầu kích thước cơ thể nến vượt quá 1/5 của trung bình cơ thể EMA để lọc các tình huống biến động thấp.
Bộ lọc giá tối thiểu/tối đa: phán xét nếu giá đạt mức cao mới hoặc thấp mới để xác nhận sự đảo ngược xu hướng.
Bộ lọc SMA: Cần giá để phá vỡ đường SMA để xác nhận thêm.
Các tín hiệu giao dịch được tạo ra khi nhiều điều kiện trên được kích hoạt đồng thời.
Đăng nhập dài: Chỉ số RSI nhanh dưới mức bán quá mức và thân cây nến > 1/5 của thân EMA và đột phá giá tối thiểu và giá vượt qua SMA
Nhập ngắn: RSI nhanh trên mức mua quá mức và thân cây nến > 1/5 của thân EMA và đột phá giá tối đa và giá vượt dưới SMA
RSI nhanh trở lại phạm vi bình thường
Chiến lược có những lợi thế sau:
Chiến lược này cũng có một số rủi ro:
Có thể tối ưu hóa thêm bằng cách:
Nói chung đây là một chiến lược giao dịch đảo ngược trung bình ngắn hạn có rủi ro thấp. Nó xác định các tín hiệu giao dịch với RSI nhanh và sử dụng nhiều bộ lọc để giảm các tín hiệu sai, đạt được giao dịch đảo ngược rủi ro có thể kiểm soát được. Chiến lược có thể được tối ưu hóa hơn nữa và có tiềm năng lớn.
/*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()