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


Ngày tạo: 2023-09-14 20:26:49 sửa đổi lần cuối: 2023-09-14 20:26:49
sao chép: 0 Số nhấp chuột: 674
1
tập trung vào
1617
Người theo dõi

Bài viết này sẽ giới thiệu chi tiết về một chiến lược định lượng sử dụng chỉ số RSI để tạo ra tín hiệu giao dịch. Chiến lược này xử lý chỉ số RSI để thiết lập điều kiện vào và ra của giao dịch đa thùng.

A. Nguyên tắc chiến lược

Các logic giao dịch chính của chiến lược này như sau:

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

  2. Đánh giá các vùng Brin trên chỉ số RSI được xử lý để có được đường ray lên và xuống.

  3. Khi xử lý RSI dưới đường vào, tạo ra tín hiệu mua; khi trên đường vào, tạo ra tín hiệu bán.

  4. Khi chỉ số đi vào khoảng quá mua quá bán, nó tạo ra tín hiệu yên.

Bằng cách này, có thể sử dụng tính năng của chỉ số RSI để nắm bắt cơ hội đảo ngược. Và xử lý chỉ số để cải thiện chất lượng tín hiệu và giá trị tham chiếu.

2 - Lợi thế chiến lược

Ưu điểm lớn nhất của chiến lược này là quá trình xử lý chỉ số tăng không gian tham số, có thể kiểm soát chặt chẽ tần suất giao dịch và tránh giao dịch quá mức.

Một lợi thế khác là điều kiện tham gia đơn giản và trực quan, thời gian giao dịch được đánh giá bằng các chỉ số rõ ràng.

Cuối cùng, thiết lập phạm vi mua quá mức cũng có thể giúp ngăn chặn và kiểm soát rủi ro của một giao dịch.

Ba, rủi ro tiềm ẩn

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

Đầu tiên, chỉ số RSI tập trung vào các giao dịch đảo ngược, dễ gây ra tín hiệu sai trong xu hướng.

Thứ hai, thiết lập tham số không đúng cũng có thể dẫn đến quá tối ưu hóa và không thể thích ứng với sự thay đổi cấu trúc thị trường.

Cuối cùng, tỷ lệ thắng thấp cần phải chịu một số áp lực thua lỗ.

Bốn nội dung, tóm tắt

Bài viết này chủ yếu giới thiệu về một chiến lược giao dịch định lượng sử dụng chỉ số RSI. Nó hoạt động bằng cách điều chỉnh các tham số để kiểm soát tần suất giao dịch và các quy tắc nhập và xuất cảnh rõ ràng.

Mã nguồn chiến lược
/*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