Chiến lược giao dịch định lượng dựa trên tín hiệu chỉ số RSI

Tác giả:ChaoZhang, Ngày: 2023-09-14 20:26:49
Tags:

Bài viết này giải thích chi tiết về một chiến lược giao dịch định lượng sử dụng chỉ số RSI để tạo ra tín hiệu giao dịch. Nó xử lý chỉ số RSI và thiết lập các tiêu chí nhập và xuất cho các giao dịch dài và ngắn.

I. Chiến lược logic

Lý thuyết giao dịch chính là như sau:

  1. Tính toán chỉ số RSI(14) và làm mịn nó bằng cách sử dụng EMA(28) để lấy dao động được xử lý.

  2. Tính toán Bollinger Bands trên chỉ số RSI được xử lý để có được các dải trên / dưới.

  3. Khi chỉ số RSI được xử lý vượt qua dưới đường nhập, một tín hiệu mua được tạo ra. Khi nó vượt qua trên, một tín hiệu bán được tạo ra.

  4. Khi chỉ số đi vào các vùng mua quá mức / bán quá mức, một tín hiệu vị trí đóng được tạo ra.

Bằng cách này, các đặc điểm của RSI có thể được sử dụng để nắm bắt các cơ hội đảo ngược.

II. Lợi thế của Chiến lược

Ưu điểm lớn nhất là không gian điều chỉnh tham số tăng lên từ xử lý chỉ số, cho phép kiểm soát chặt chẽ hơn về tần suất giao dịch và ngăn ngừa giao dịch quá mức.

Một lợi thế khác là các tiêu chí nhập khẩu trực quan dựa trên các giá trị số rõ ràng của chỉ số.

Cuối cùng, phạm vi mua quá mức / bán quá mức cũng giúp thu lợi nhuận kịp thời và kiểm soát rủi ro cho mỗi giao dịch.

III. Những điểm yếu tiềm tàng

Tuy nhiên, chiến lược này cũng có những rủi ro sau:

Thứ nhất, chỉ số RSI tập trung vào các giao dịch đảo ngược, có thể tạo ra các tín hiệu sai trong xu hướng.

Thứ hai, điều chỉnh tham số không đúng cũng có thể dẫn đến tối ưu hóa quá mức và không thích nghi với các điều kiện thị trường thay đổi.

Cuối cùng, tỷ lệ chiến thắng tương đối thấp cũng khiến chiến lược bị rủi ro rút tiền.

IV. Tóm tắt

Tóm lại, bài viết này chủ yếu giới thiệu một chiến lược giao dịch định lượng sử dụng chỉ số RSI. Nó kiểm soát tần suất giao dịch thông qua điều chỉnh tham số và có các quy tắc nhập / ra rõ ràng. Trong khi tối ưu hóa các tham số, rủi ro của giao dịch đảo ngược cũng cần phải được quản lý. Nhìn chung, nó cung cấp một khuôn khổ chiến lược RSI đơn giản và trực quan.


/*backtest
start: 2023-08-14 00:00:00
end: 2023-09-13 00:00:00
period: 3h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
//-----------------------------------------------------------------
//This simple strategy base on RSI, EMA, Bollinger Bands to get Buy and Sell Signal with detail as below:
//-----------------------------------------------------------------
//1.Define Oscillator Line
//+ Oscillator Line is smoothed by ema(28) of RSI(14) on H1 Timeframe
//2.Define Overbought and Oversold
//+ Apply Bollinger Bands BB(80,3) on Oscillator Line and calculate %b
//+ Overbought Zone marked above level 0.8
//+ Oversold Zone marked below level 0.2
//3.Buy Signal
//+ Entry Long Positon when %b crossover Point of Entry Long
//+ Deafault Point of Entry Long is 0.2
//+ Buy signal marked by Green dot
//4.Sell Signal
//+ Entry Short Position when %b crossunder Point of Entry Short
//+ Deafault Point of Entry Short is 0.8
//+ Sell signal marked by Red dot
//5.Exit Signal
//+ Exit Position (both Long and Short) when %b go into Overbought Zone or Oversold Zone
//+ Exit signal marked by Yellow dot
//-----------------------------------------------------------------
strategy(title="RSI %b Signal [H1 Backtesting]", overlay=false)

//RSI
rsi_gr="=== RSI ==="
rsi_len = input(14, title = "RSI",inline="set",group=rsi_gr)
smoothed_len = input(28, title = "EMA",inline="set",group=rsi_gr)
rsi=ta.ema(ta.rsi(close,rsi_len),smoothed_len)
//rsi's BOLLINGER BANDS
pb_gr="=== %b ==="
length = input(80, title = "Length",inline="set1",group=pb_gr)
rsimult = input(3.0, title = "Multiplier",inline="set1",group=pb_gr)
ovb = input(0.8, title = "Overbought",inline="set2",group=pb_gr)
ovs = input(0.2, title = "Oversold",inline="set2",group=pb_gr)
et_short = input(0.8, title = "Entry Short",inline="set3",group=pb_gr)
et_long = input(0.2, title = "Entry Long",inline="set3",group=pb_gr)
[rsibasis, rsiupper, rsilower] = ta.bb(rsi, length, rsimult)
//rsi's %B
rsipB = ((rsi - rsilower) / (rsiupper - rsilower))
plot(rsipB, title="rsi's %B", color=rsipB>math.min(ovb,et_short)?color.red:rsipB<math.max(ovs,et_long)?color.green:color.aqua, linewidth=1)

h1=hline(1,color=color.new(color.red,100))
h4=hline(ovb,color=color.new(color.red,100))
h0=hline(0,color=color.new(color.green,100))
h3=hline(ovs,color=color.new(color.green,100))
h5=hline(0.5,color=color.new(color.silver,0),linestyle=hline.style_dotted)

fill(h1,h4, title="Resistance", color=color.new(color.red,90))
fill(h0,h3, title="Support", color=color.new(color.green,90))

//Signal
rsi_buy=
           rsipB[1]<et_long
           and
           rsipB>et_long
rsi_sell=
           rsipB[1]>et_short
           and
           rsipB<et_short
rsi_exit=
           (rsipB[1]>ovs and rsipB<ovs)
           or
           (rsipB[1]<ovb and rsipB>ovb)
plotshape(rsi_buy?rsipB:na,title="Buy",style=shape.circle,color=color.new(color.green,0),location=location.absolute)
plotshape(rsi_sell?rsipB:na,title="Sell",style=shape.circle,color=color.new(color.red,0),location=location.absolute)
plotshape(rsi_exit?rsipB:na,title="Exit",style=shape.circle,color=color.new(color.yellow,0),location=location.absolute)
//Alert
strategy.entry("Long",strategy.long,when=rsi_buy)
strategy.close("Long",when=rsi_exit)
strategy.entry("Short",strategy.short,when=rsi_sell)
strategy.close("Short",when=rsi_exit)
//EOF

Thêm nữa