Chiến lược RSI theo dõi xu hướng

Tác giả:ChaoZhang, Ngày: 2023-11-23 17:13:06
Tags:

img

Tổng quan

Chiến lược RSI theo dõi xu hướng là một chiến lược giao dịch chứng khoán tự động sử dụng cả phân tích xu hướng và các chỉ số mua quá mức. Chiến lược sử dụng các đường trung bình di chuyển đơn giản để xác định hướng xu hướng thị trường và kết hợp các chỉ số chỉ số sức mạnh tương đối (RSI) để tạo ra các tín hiệu giao dịch, nhận ra phán đoán và theo dõi xu hướng.

Chiến lược logic

Chiến lược bao gồm ba phần chính:

  1. Phán đoán xu hướng: Tính toán xu hướng dài hạn với đường trung bình di chuyển đơn giản 200 ngày và xu hướng ngắn hạn với đường trung bình di chuyển đơn giản 30 ngày và 50 ngày. Khi đường trung bình di chuyển ngắn hạn vượt qua đường trung bình dài hạn, đó là một tín hiệu tăng, và khi nó vượt dưới, đó là một tín hiệu giảm, để xác định xu hướng thị trường dài hạn và ngắn hạn.

  2. Phân tích mua quá mức - bán quá mức: Tính toán chỉ số RSI 14 ngày. RSI trên 80 là khu vực mua quá mức và dưới 20 là khu vực bán quá mức.

  3. Khi các tín hiệu mua quá mức hoặc bán quá mức được xác định, nếu hướng đi phù hợp với phân tích xu hướng, các vị trí dài / ngắn sẽ được mở. Khi các đường trung bình động ngắn hạn và dài hạn có dấu chéo vàng, nó được đánh giá là xu hướng đang đảo ngược và các vị trí hiện có sẽ được đóng.

Với chiến lược này, có thể vào thị trường kịp thời khi giá đảo ngược, trong khi lọc ra một số giao dịch ồn ào bằng cách kết hợp phân tích xu hướng, với kiểm soát rút tương đối tốt.

Phân tích lợi thế

Chiến lược có những lợi thế sau:

  1. Kết hợp phân tích xu hướng và các chỉ số mua quá mức để lọc tiếng ồn và xác định sự thay đổi trên thị trường.
  2. Xem xét xu hướng trong cả hai khung thời gian dài hạn và ngắn hạn để đánh giá chính xác hơn.
  3. Sử dụng đường trung bình động như phương pháp dừng lỗ để các điểm dừng lỗ có thể được thiết lập dựa trên biến động thị trường.
  4. Các điều kiện nhập cảnh nghiêm ngặt giúp ngăn chặn các vụ trốn thoát giả hiệu quả.

Rủi ro và giải pháp

Ngoài ra còn có một số rủi ro với chiến lược này:

  1. Các giao dịch thường xuyên không đáng kể có thể xảy ra nếu thị trường bị giới hạn trong phạm vi trong một thời gian dài.
  2. Có một số rủi ro chậm thời gian, rút ngắn các thông số chu kỳ trung bình di chuyển có thể giảm thiểu nó.
  3. Các tín hiệu RSI có thể bị ảnh hưởng bởi cổ phiếu và thị trường.

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

Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:

  1. Thêm nhiều bộ lọc như âm lượng, mô hình nến để cải thiện chất lượng tín hiệu.
  2. Tối ưu hóa các thông số chu kỳ trung bình động và RSI để phù hợp với các đặc điểm cổ phiếu khác nhau.
  3. Xây dựng các đường trung bình động để tự động điều chỉnh các thông số dựa trên biến động thị trường và ham muốn rủi ro.
  4. Sử dụng các kỹ thuật tiên tiến hơn như máy học để xác định xu hướng thị trường với độ chính xác cao hơn.

Tóm lại

Nói chung, Chiến lược RSI theo dõi xu hướng là một ý tưởng chiến lược rất thực tế, lọc ra tiếng ồn thị trường ở một mức độ nào đó bằng cách kết hợp phân tích xu hướng và các chỉ số mua quá mức, làm cho các tín hiệu giao dịch chính xác và hợp lệ hơn.


/*backtest
start: 2022-11-16 00:00:00
end: 2023-11-22 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © mattehalen

// INPUT per TIMEFRAME
// 5min     = Legnth = 9, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 4, LongMA = 10
// 30min    = Legnth = 7, Source = ohlc4,MaxLoss = 1000 TrendMA = 200, ShortMA = 10, LongMA = 20

strategy("Mathias & Christer Timeframe RSI", shorttitle="M&C_RSI",overlay=true, process_orders_on_close = true, default_qty_type =  strategy.percent_of_equity, default_qty_value = 100)
len = input(9, title="Length", type=input.integer)
src = input(ohlc4, title="Source", type=input.source)
//show4h = input(true, title="show 4h", type=input.bool)
maxLoss = input(3000)

rsiCurrent = rsi(src, len)
//rsi4h = security(syminfo.ticker, "240", rsi(src, len))
rsi4h   = rsi(src, len)

//--------------------------------------------------
//MA
trendMAInput = input(200, title="trendMA", type=input.integer)
shortMAInput = input(30, title="shortMA", type=input.integer)
longMAInput = input(50, title="longMA", type=input.integer)

trendMA = ema(close,trendMAInput)
shortMA = ema(close,shortMAInput)
longMA  = ema(close,longMAInput)
plot(trendMA, color=color.black, linewidth=5)
plot(shortMA, color=color.red, linewidth=2)
plot(longMA, color=color.green, linewidth=2)
bgcolor(crossunder(shortMA,longMA) ? color.black : na, transp=10)

//--------------------------------------------------
//RSI
BuySignalBarssince = barssince(rsi4h[1]<rsi4h[0] and rsi4h[1]<20)
BuySignal       = (rsi4h[1]<rsi4h[0] and rsi4h[1]<20 and BuySignalBarssince[1]>10)
BuySignalOut   = crossunder(longMA[1],shortMA[1])
bgcolor(BuySignal ? color.green : na, transp=70)
bgcolor(BuySignalOut ? color.green : na, transp=10)



SellSignalBarssince = barssince(rsi4h[1]>rsi4h[0] and rsi4h[1]>80)
SellSignal      = (rsi4h[1]>rsi4h[0] and rsi4h[1]>80 and SellSignalBarssince[1]>10)
SellSignalOut   = crossunder(shortMA[1],longMA[1])
bgcolor(SellSignal ? color.red : na, transp=70)
bgcolor(SellSignalOut ? color.red : na, transp=10)


if BuySignal
    strategy.close("short", comment = "Exit short")
    strategy.entry("long", true)
    strategy.exit("Max Loss", "long", loss = maxLoss)

if BuySignalOut
    strategy.close("long", comment = "Exit Long")
if SellSignal
    // Enter trade and issue exit order on max loss.
    strategy.close("long", comment = "Exit Long")
    strategy.entry("short", false)
    strategy.exit("Max Loss", "short", loss = maxLoss)
if SellSignalOut
    // Force trade exit.
    strategy.close("short", comment = "Exit short")
    
//--------------------------------------------------
//ATR
MyAtr = atr(10)
AtrFactor = 10
mySLBuy  = close[BuySignalBarssince]
mySLSell = close[SellSignalBarssince]

plotchar(BuySignal, "BuySignal", "⬆", location.belowbar, color.lime,size =size.huge )
plotchar(BuySignalOut, "BuySignalOut", "█", location.belowbar, color.lime,size =size.small)
plotchar(SellSignal, "SellSignal", "⬇", location.abovebar ,color.red,size =size.huge)
plotchar(SellSignalOut, "SellSignalOut", "█", location.abovebar, color.red,size =size.small)




Thêm nữa