RSI Chiến lược giao dịch tự động dài ngắn

Tác giả:ChaoZhang, Ngày: 2023-10-30 17:13:24
Tags:

img

Tổng quan

Chiến lược này thiết kế một hệ thống giao dịch tự động cho dài và ngắn dựa trên chỉ số chỉ số sức mạnh tương đối (RSI). Nó có thể tự động tạo ra tín hiệu dài và ngắn khi RSI đạt mức mua quá mức hoặc bán quá mức và thực hiện giao dịch tự động.

Chiến lược logic

Chiến lược tính toán các giá trị RSI trong phạm vi 0-100 dựa trên giá tăng và giảm trong một khoảng thời gian nhất định. Khi RSI dưới 30, đó là tình trạng bán quá mức. Khi RSI trên 70, đó là tình trạng mua quá mức. Theo quy tắc này, chiến lược tự động đi dài khi RSI đạt đến vùng bán quá mức và đi ngắn khi RSI đạt đến vùng mua quá mức.

Đặc biệt, chiến lược đầu tiên tính toán chỉ số RSI 15 giai đoạn. Khi chỉ số RSI giảm xuống dưới 20, nó được coi là bán quá mức. Tại thời điểm này, khi giá vượt qua mức trung bình động 200 ngày, một vị trí dài được mở. Khi chỉ số RSI tăng trên 80, nó được coi là mua quá mức. Tại thời điểm này, một vị trí ngắn được mở. Sau khi đi dài hoặc ngắn, lấy lợi nhuận và dừng lỗ được đặt để thoát khỏi các vị trí.

Ngoài ra, chiến lược vẽ các đường mốc và nhãn tương ứng khi tín hiệu giá xảy ra để làm cho tín hiệu giao dịch trực quan hơn.

Ưu điểm của Chiến lược

  • Ý tưởng chiến lược là rõ ràng và dễ hiểu và thực hiện
  • Dựa trên chỉ số RSI, phán đoán mua quá mức và bán quá mức là chính xác
  • Giao dịch tự động hoàn toàn mà không cần can thiệp bằng tay
  • Đặt lợi nhuận và dừng lỗ để kiểm soát rủi ro một cách hiệu quả
  • Các tín hiệu giao dịch trực quan và dễ dàng theo dõi

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

  • Chỉ số RSI có một số trễ, có thể gây ra đánh giá sai
  • Các ngưỡng mua quá mức và bán quá mức không phù hợp với tất cả các sản phẩm
  • Cài đặt stop loss không chính xác có thể gây ra tổn thất lớn hơn
  • Giao dịch với xu hướng chính trong thị trường xu hướng có thể gây ra tổn thất

Các biện pháp kiểm soát rủi ro bao gồm: tối ưu hóa các thông số RSI, điều chỉnh ngưỡng mua quá mức và bán quá mức để phù hợp với các sản phẩm khác nhau, thiết lập dừng lỗ hợp lý, kết hợp với các chỉ số xu hướng để tránh giao dịch chống lại xu hướng.

Hướng dẫn tối ưu hóa chiến lược

  • Tối ưu hóa các thông số RSI để cải thiện độ chính xác của việc đánh giá quá mua và quá bán
  • Xác nhận tín hiệu giao dịch với các chỉ số khác như KDJ, MACD v.v.
  • Tối ưu hóa thiết lập stop loss theo điều kiện thị trường
  • Thêm phán đoán xu hướng để tránh các hoạt động ngược
  • Đặt đường cong vốn chủ sở hữu theo dõi dừng lỗ
  • Phát triển mô-đun kiểm soát rủi ro để kiểm soát các rủi ro đơn lẻ và tổng thể

Tóm lại

Nói chung đây là một chiến lược giao dịch tự động sử dụng chỉ số RSI để đánh giá các điều kiện mua quá mức và bán quá mức. Nó tạo ra các tín hiệu giao dịch khi RSI đạt đến mức mua quá mức hoặc bán quá mức cực kỳ, và có thể tự động thực hiện giao dịch dài và ngắn. Ý tưởng chiến lược đơn giản và rõ ràng, dễ thực hiện và phù hợp với một chiến lược giao dịch tự động cơ bản. Nhưng chỉ số RSI có một số sự chậm trễ, vì vậy nên tối ưu hóa nó với các chỉ số khác để cải thiện độ chính xác tín hiệu. Ngoài ra, nên chú ý đến kiểm soát rủi ro, tối ưu hóa cơ chế dừng lỗ, phát triển các mô-đun kiểm soát rủi ro để giảm rủi ro giao dịch. Nếu tối ưu hóa và xác minh trong giao dịch trực tiếp, chiến lược có thể trở thành một hệ thống tự động hiệu quả cho giao dịch dài và ngắn.


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

//@version=5
strategy("RSI Improved strategy", overlay=true)
higherTF1 = input.timeframe('15' , "Resolution", options = ['5', '15', '1H', 'D', 'W', 'M'])
dailyopen = request.security(syminfo.tickerid, higherTF1, close)

Reward = input(1600)
Risk = input(1600)

length = input( 5 )
overSold = input( 30 )
overBought = input( 70 )
EMA = input(200)
price = close

vrsi = ta.rsi(price, length)

RSIlowest =  vrsi[1] > vrsi ? true : false
RSIhighest = vrsi[1] < vrsi ? true : false

//ro = ta.crossunder(vrsi, 20)
//ru = ta.crossover(vrsi, 80)

co = ta.crossunder(vrsi, overSold)
cu = ta.crossunder(vrsi, overBought)

plot(ta.ema(close, EMA))
plot(ta.ema(close, 50), color = color.orange)

UponEMA = close > ta.ema(close, EMA) ? true : false
belowEMA = close < ta.ema(close, EMA) ? true : false
//transfer 'float' to 'int' to 'string'
r = int(vrsi)
value = str.tostring(r)

m = int(strategy.openprofit)
money = str.tostring(m)
if (not na(vrsi))
	//when price stand up on 200ema and rsi is at oversold area, open long position 
//	if (co and UponEMA)
  //      strategy.order("Rsi long", strategy.long, 1 , comment = "Rsi long")
        
    if(vrsi < 20 and RSIlowest)
        // line1 = line.new(x1=bar_index, y1=dailyopen, x2=bar_index+1, y2=dailyopen, xloc=xloc.bar_index, style=line.style_solid,extend=extend.right, color=color.aqua, width = 2)
        // line.delete(line1[1])  // remove the previous line when new bar appears
        // label1 = label.new(x=bar_index, y=dailyopen,yloc=yloc.belowbar, text = value,textcolor = color.white, color = color.green, style = label.style_label_up)
        // label.delete(label1[1])
        strategy.order("Rsi long", strategy.long, 1 , comment = "Rsi long")
        strategy.exit("exit", "Rsi long", profit = Reward, loss = Risk, comment = "Rsi long exit")
//strategy.close("Rsi short", comment = "Rsi close")

	
	

	if(vrsi > 80 and RSIhighest)
        // line2 = line.new(x1=bar_index, y1=dailyopen, x2=bar_index+1, y2=dailyopen, xloc=xloc.bar_index, style=line.style_solid,extend=extend.right, color = #e65100, width = 2)
        // line.delete(line2[1])  // remove the previous line when new bar appears
        // label2 = label.new(x=bar_index, y=dailyopen,yloc=yloc.abovebar, text = value, textcolor = color.white, color = color.red)            
        // label.delete(label2[1])
        strategy.order("Rsi short",strategy.short, 1,  comment = "Rsi short ")
        strategy.exit("exit", "Rsi short", profit = Reward,loss = Risk, comment = "Rsi short exit")
//	if(UponEMA)
//        strategy.close("Rsi short", comment = "Rsi short close")
//plot(strategy.equity, title="equity", color=color.red, linewidth=2, style=plot.style_cross)
//plotshape(confirmPH, title="Label",offset = 1,text="Bull",style=shape.labeldown,location=location.abovebar,color=color.green,textcolor=color.green)




//when Rsi reaches overbought, draw a Horizontal Ray to close prices, similarly when it comes to oversold.(accomplished)
//detects when there is more lower/higher RSI values, adjust horizontal Ray and label to new posistion.(accomplished)

Thêm nữa