Chiến lược chuyển đổi chỉ số RSI nhanh v1.7

Tác giả:ChaoZhang, Ngày: 2023-12-22 15:10:40
Tags:

img

Tổng quan

Chiến lược chuyển đổi RSI nhanh của Noro là một chiến lược giao dịch định lượng xác định các cơ hội mua quá nhiều và bán quá nhiều bằng cách sử dụng chỉ số RSI. Chiến lược cũng kết hợp các mô hình nến, bộ lọc trung bình động và các phương pháp dừng lỗ để kiểm soát rủi ro.

Các thành phần chính của chiến lược này bao gồm:

  1. Chỉ số RSI nhanh: Xác định mức mua quá mức và bán quá mức
  2. Mô hình nến: Giúp xác định hướng xu hướng
  3. Bộ lọc trung bình động: Sử dụng SMA để tránh tín hiệu sai
  4. Cơ chế dừng lỗ: Thực hiện dừng lỗ dựa trên giới hạn RSI

Chiến lược logic

Chiến lược chuyển đổi RSI nhanh của Noro chủ yếu xác định các tín hiệu giao dịch sau:

  1. Các tín hiệu RSI nhanh quá mua / quá bán: Các tín hiệu giao dịch được tạo ra khi RSI nhanh vượt quá giới hạn trên hoặc dưới giới hạn dưới.

  2. Các tín hiệu nến: Các thông số nến như kích thước cơ thể và hướng được sử dụng để xác định xu hướng và bổ sung các tín hiệu RSI nhanh.

  3. Tín hiệu lọc SMA: Hướng SMA lọc ra các tín hiệu đột phá sai.

  4. Các tín hiệu dừng lỗ: Các vị trí được đóng khi RSI nhanh vượt qua trở lại trên giới hạn trên hoặc dưới giới hạn dưới.

Cụ thể, chiến lược này xác định các cơ hội giao dịch dựa trên các vùng mua quá mức và bán quá mức của chỉ số RSI nhanh.

Để tránh tiếng ồn, các điều kiện bổ sung sau đây được thêm vào:

  1. Kích thước thân nến: Các thân nến lớn hơn đại diện cho một xu hướng mạnh mẽ hơn
  2. Định hướng nến: Định hướng tăng hoặc giảm
  3. Bộ lọc SMA: lọc ra các tín hiệu đột phá sai
  4. Dừng Loss: Ra khỏi giao dịch khi RSI nhanh vượt qua giới hạn của nó

Do đó, chiến lược này kết hợp RSI nhanh, nến, trung bình động và dừng lỗ cùng nhau để tạo ra các tín hiệu giao dịch.

Ưu điểm

Những lợi thế của chiến lược này bao gồm:

  1. Chỉ số RSI nhanh là nhạy cảm: Nhanh chóng nắm bắt các cơ hội mua quá mức / bán quá mức
  2. Candlestick & MA Filter: Tránh tín hiệu sai
  3. Tự động dừng lỗ: Kiểm soát rủi ro hiệu quả
  4. Thích hợp cho scalping: Làm việc tốt với khung thời gian ngắn hơn ví dụ như 1H, 30M
  5. Dễ dàng tối ưu hóa: Các thông số có thể được điều chỉnh cho các thị trường khác nhau

Rủi ro

Ngoài ra còn có một số rủi ro cần xem xét:

  1. Stop Loss liên tiếp: Nhiều tín hiệu stop loss có thể xảy ra trong các thị trường dao động
  2. Parameter tối ưu hóa cần thiết: Parameter cần điều chỉnh cho các cặp khác nhau và khung thời gian
  3. Không thể tránh tất cả các khoản lỗ: Việc dừng lỗ kịp thời vẫn dẫn đến một số khoản lỗ

Các phương pháp tối ưu hóa sau đây có thể giúp giảm thiểu rủi ro:

  1. Tối ưu hóa các thông số RSI nhanh: Giảm tín hiệu sai
  2. Tối ưu hóa Đặt Stop Loss: Kiểm soát kích thước lỗ giao dịch duy nhất
  3. Thêm kích thước vị trí: Phân phối rủi ro trên nhiều giao dịch

Hướng dẫn tối ưu hóa

Một số cách để tối ưu hóa thêm chiến lược này bao gồm:

  1. Thêm lợi nhuận lấy ra: Lấy lợi nhuận một phần khi đạt mục tiêu lợi nhuận
  2. Tăng cường quản lý rủi ro: Tích hợp các quy tắc định kích thước vị trí để đa dạng hóa rủi ro
  3. Điều chỉnh tham số: Hiệu ứng thử nghiệm của các điều chỉnh tham số trên các khung thời gian
  4. Học máy: Sử dụng thuật toán để tự động tối ưu hóa các tham số theo thời gian
  5. Kiểm tra độ bền: Đánh giá hiệu suất chiến lược trên nhiều cặp biểu tượng hơn

Bằng cách kết hợp lấy lợi nhuận, quản lý rủi ro, tối ưu hóa tham số, học máy và thử nghiệm độ bền, chiến lược có thể được tăng cường đáng kể về tính ổn định.

Kết luận

Tóm lại, Chiến lược chuyển đổi RSI nhanh của Noro kết hợp chỉ số RSI nhanh với phân tích nến bổ sung để xác định các cơ hội giao dịch mua quá nhiều và bán quá nhiều. Với thời gian phản hồi tín hiệu nhanh, dễ dàng tối ưu hóa và tích hợp các mô-đun dừng lỗ, chiến lược giao dịch ngắn hạn này có tiềm năng lớn để tạo ra kết quả tích cực sau khi học máy và điều chỉnh tham số thêm.


/*backtest
start: 2023-12-14 00:00:00
end: 2023-12-18 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//Noro
//2018

//@version=2
strategy(title = "Noro's Fast RSI Strategy v1.7", shorttitle = "Fast RSI str 1.7", overlay = true)

//Settings
needlong = input(true, defval = true, title = "Long")
needshort = input(true, defval = true, title = "Short")
usemar = input(false, defval = false, title = "Use Martingale")
capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Capital, %")
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
profit = exit ? ((strategy.position_size > 0 and close > strategy.position_avg_price) or (strategy.position_size < 0 and close < strategy.position_avg_price)) ? 1 : -1 : profit[1]
mult = usemar ? exit ? profit == -1 ? mult[1] * 2 : 1 : mult[1] : 1
lot = strategy.position_size == 0 ? strategy.equity / close * capital / 100 * mult : lot[1]

if up1 or up2 or up3
    if strategy.position_size < 0
        strategy.close_all()
        
    strategy.entry("Long", strategy.long, needlong == false ? 0 : lot)

if dn1 or dn2 or dn3
    if strategy.position_size > 0
        strategy.close_all()
        
    strategy.entry("Short", strategy.short, needshort == false ? 0 : lot)
    
if time > timestamp(toyear, tomonth, today, 23, 59) or exit
    strategy.close_all()

Thêm nữa