
Chiến lược này được thiết kế dựa trên chỉ số tương đối mạnh (RSI) để thiết kế một hệ thống giao dịch tự động đa tháo. Nó có thể tự động phát tín hiệu đa tháo để tự động giao dịch khi RSI đạt đến vùng quá mua quá bán.
Chiến lược này được tính toán bằng cách tính toán các biến động của cổ phiếu trong một chu kỳ nhất định, để có được các giá trị RSI trong khoảng 0-100. Khi RSI thấp hơn 30 là quá bán và cao hơn 70 là quá mua. Theo quy tắc này, chiến lược tự động tăng khi RSI đạt đến vùng quá bán và tự động giảm khi đạt đến vùng quá mua.
Cụ thể, chiến lược đầu tiên tính toán giá trị RSI của 15 chu kỳ. Khi RSI giảm xuống dưới 20, được coi là bán tháo, khi phá vỡ đường trung bình di chuyển 200 ngày, mua thêm. Khi RSI tăng lên trên 80, được coi là mua quá mức, khi mua thêm.
Ngoài ra, chiến lược này cũng vẽ các đường đánh dấu và thẻ liên quan khi tín hiệu giá xảy ra, giúp tín hiệu giao dịch trực quan hơn.
Các biện pháp kiểm soát rủi ro bao gồm: tối ưu hóa các tham số RSI, điều chỉnh ngưỡng mua bán tháo lỏng cho các loại khác nhau, thiết lập điểm dừng lỗ hợp lý, kết hợp với các chỉ số xu hướng để tránh giao dịch ngược.
Chiến lược này nói chung là một chiến lược giao dịch tự động sử dụng chỉ số RSI để đánh giá quá mua quá bán. Nó phát ra tín hiệu giao dịch khi RSI đạt đến vùng cực đoan quá mua quá bán và có thể tự động thực hiện giao dịch. Ý tưởng của chiến lược đơn giản, rõ ràng, dễ thực hiện và phù hợp với chiến lược cơ bản của giao dịch tự động.
/*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)