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 bao gồm ba phần chính:
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.
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.
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.
Chiến lược có những lợi thế sau:
Ngoài ra còn có một số rủi ro với chiến lược này:
Chiến lược có thể được tối ưu hóa thêm trong các khía cạnh sau:
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)