RSI và Bollinger Bands chiến lược kép

Tác giả:ChaoZhang, Ngày: 2023-12-12 11:53:49
Tags:

img

Tổng quan

Ý tưởng cốt lõi của chiến lược này là kết hợp Chỉ số Sức mạnh Tương đối (RSI) và Bollinger Bands, hai chỉ số kỹ thuật, để lọc các tín hiệu giao dịch kép và giảm thiểu sự can thiệp từ các tín hiệu sai càng nhiều càng tốt, cải thiện chất lượng tín hiệu.

Khi chỉ số RSI cho thấy tín hiệu mua quá mức hoặc bán quá mức trong khi giá phá vỡ hoặc kéo lại các đường ray trên và dưới của Bollinger Bands, các cơ hội giao dịch sẽ xuất hiện. Nó kết hợp các lợi thế của hai chỉ số khác nhau, tính đến cả các đặc điểm thống kê của biến động thị trường và vị trí dài / ngắn của những người tham gia thị trường để tạo thành một cơ sở toàn diện để đánh giá.

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

Đối với phần RSI, chúng tôi theo dõi hai chỉ số RSI với độ dài chu kỳ khác nhau cùng một lúc. Một chỉ số có chu kỳ ngắn hơn được sử dụng để nắm bắt các tín hiệu mua quá nhiều và bán quá nhiều, trong khi một chỉ số có chu kỳ dài hơn được sử dụng để xác nhận sự đảo ngược xu hướng. Khi chỉ số RSI chu kỳ ngắn cho thấy mua quá nhiều / bán quá nhiều và chỉ số RSI chu kỳ dài cho thấy sự đảo ngược, chúng tôi tin rằng một cơ hội giao dịch đã hình thành.

Đối với phần Bollinger Bands, chúng tôi theo dõi xem giá có vượt qua đường ray trên và dưới không. Bước qua đường ray trên của Bollinger Bands là điểm bán, và bước qua đường ray dưới là điểm mua. Đồng thời, chúng tôi cũng theo dõi xem giá có kéo trở lại Bollinger Bands để có thể nắm bắt các cơ hội đảo ngược kịp thời.

Khi các tín hiệu RSI và Bollinger Bands xuất hiện đồng thời, chúng tôi tin rằng cơ hội giao dịch đã hình thành và lệnh giao dịch được ban hành.

Phân tích lợi thế

  • Việc lọc hai chỉ số cung cấp độ tin cậy cao hơn và tránh giao dịch không cần thiết
  • Khám phá các cơ hội trong cả hai giai đoạn thị trường xu hướng và đảo ngược
  • Các tham số có thể cấu hình cho các thiết lập có thể điều chỉnh khi cần thiết
  • Quản lý thời gian và tiền bạc nhúng

Phân tích rủi ro

  • Các thiết lập tham số Bollinger Bands không chính xác có thể gây ra tín hiệu sai
  • Không thể đối phó với sự biến động thị trường cực kỳ
  • Sự khác biệt RSI có thể tạo ra các tín hiệu không chính xác
  • Tối ưu hóa tham số cần thiết để thích nghi với các sản phẩm và chu kỳ khác nhau

Rủi ro có thể được tránh và kiểm soát thông qua tối ưu hóa tham số, giảm vị trí thích hợp, can thiệp bằng tay, v.v.

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

  • Điều chỉnh các thông số RSI để tối ưu hóa các phán quyết mua quá mức / bán quá mức
  • Điều chỉnh chiều rộng của Bollinger Bands để tối ưu hóa các chiến lược đột phá
  • Thêm cơ chế quản lý vị trí
  • Thêm chiến lược dừng lỗ
  • Kết hợp nhiều chỉ số hơn để xây dựng các mô hình đa yếu tố

Kết luận

Chiến lược kép RSI và Bollinger Bands sử dụng đầy đủ điểm mạnh của hai chỉ số để tạo ra các tín hiệu chất lượng cao. Với tối ưu hóa tham số và quản lý rủi ro thích hợp, nó có thể đạt được lợi nhuận đầu tư ổn định.


/*backtest
start: 2023-11-11 00:00:00
end: 2023-12-04 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy("Ezieh Str.v2", shorttitle="Ezieh Str.v2", overlay=true, pyramiding=10, currency=currency.USD, slippage=3, commission_type=strategy.commission.cash_per_order, commission_value=0.04, initial_capital=1000)



UseDateFilter  = input(title="Enable Date Filter"         ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off date filter")
StartDate      = input(title="Start Date Filter"          ,type=input.time    ,defval=timestamp("1 Jan 2000 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to start excluding trades")
EndDate        = input(title="End Date Filter"            ,type=input.time    ,defval=timestamp("1 Jan 2100 00:00 +0000") ,group="Date & Time" ,tooltip="Date & time to stop excluding trades")
UseTimeFilter  = input(title="Enable Time Session Filter" ,type=input.bool    ,defval=false                               ,group="Date & Time" ,tooltip="Turns on/off time session filter")
TradingSession = input(title="Trading Session"            ,type=input.session ,defval="1000-2200:1234567"                 ,group="Date & Time" ,tooltip="No trades will be taken outside of this range")

In(t)      => na(time(timeframe.period, t)) == false
TimeFilter = (UseTimeFilter and not In(TradingSession)) or not UseTimeFilter
DateFilter = time >= StartDate and time <= EndDate

DateTime = (UseDateFilter ? not DateFilter : true) and (UseTimeFilter ? In(TradingSession) : true) 

///////////// RSI
L_RSI_Length     = input(7  , title="L_Length")
L_RSI_OverSold   = input(45 , title="L_OverSold")
S_RSI_Length     = input(14 , title="S_Length")
S_RSI_OverBought = input(65 , title="S_OverBought")

price = close
Lvrsi = rsi(price, L_RSI_Length)
Svrsi = rsi(price, S_RSI_Length)

///////////// Bollinger Bands
BBlength = input(title="Bollinger Period Length", type=input.integer, defval=100, minval=2)
BBmult = 2.1 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = sma(price, BBlength)
BBdev = BBmult * stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
plot(BBbasis, color=color.aqua,title="Bollinger Bands SMA Basis Line")
p1 = plot(BBupper, color=color.silver,title="Bollinger Bands Upper Line")
p2 = plot(BBlower, color=color.silver,title="Bollinger Bands Lower Line")
fill(p1, p2)


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")



///////////// Condition
LongCondition  = crossover(Lvrsi, L_RSI_OverSold)    and crossover(close  ,BBlower)
ShortCondition = crossunder(Svrsi, S_RSI_OverBought) and crossunder(close,BBupper)
Longexcon      = crossunder(low, BBupper)
Shortexcon     = crossover(low, BBlower)

qt = round(strategy.equity/price, 3)

///////////// RSI + Bollinger Bands Strategy
if (not na(Lvrsi))

    if LongCondition and DateTime
        strategy.entry("RSI_BB_L", strategy.long, qty=qt,  comment="Long")
    else
        strategy.cancel(id="RSI_BB_L")
        
    if Longexcon
        strategy.close("RSI_BB_L", qty_percent = 100, comment = "L_exit")
    
    if ShortCondition and DateTime
        strategy.entry("RSI_BB_S", strategy.short, qty=qt,  comment="Short")
    else
        strategy.cancel(id="RSI_BB_S")
        
    if Shortexcon
        strategy.close("RSI_BB_S", qty_percent = 100, comment = "S_exit")
    
//plot(strategy.equity, title="equity", color=red, linewidth=2, style=areabr)

Thêm nữa