Chiến lược này sử dụng chỉ số RSI tích lũy để xác định xu hướng và đưa ra quyết định mua và bán khi giá trị RSI tích lũy vượt qua các mức ngưỡng chính. Nó có thể lọc hiệu quả tiếng ồn thị trường và nắm bắt các cơ hội giao dịch xu hướng dài hạn.
Chiến lược này chủ yếu dựa trên chỉ số RSI tích lũy cho các quyết định giao dịch. Chỉ số RSI tích lũy là sự tích lũy của các giá trị RSI. Bằng cách đặt tham số cumlen, các giá trị RSI trong những ngày cumlen trước được cộng lại để dẫn ra chỉ số RSI tích lũy. Chỉ số này có thể lọc tiếng ồn thị trường ngắn hạn.
Khi chỉ số RSI tích lũy vượt qua trên đường ray trên Bollinger Band, một vị trí dài sẽ được mở. Khi RSI tích lũy vượt qua dưới đường ray dưới Bollinger Band, vị trí mở sẽ được đóng. Các đường ray Bollinger Band được tính năng dựa trên dữ liệu lịch sử trong nhiều năm.
Ngoài ra, một tùy chọn lọc xu hướng được thêm vào. Các giao dịch dài sẽ chỉ được mở khi giá vượt quá Mức trung bình động 100 ngày, có nghĩa là nó ở trong kênh xu hướng tăng.
Chiến lược RSI tích lũy có luồng logic trơn tru và xác định chính xác xu hướng trung và dài hạn bằng cách lọc với RSI tích lũy và thêm phán đoán xu hướng. Kết quả kiểm tra ngược là đặc biệt trong thập kỷ qua.
/*backtest start: 2023-09-26 00:00:00 end: 2023-10-26 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ // This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/ // @version=5 // Author = TradeAutomation strategy(title="Cumulative RSI Strategy", shorttitle="CRSI Strategy", process_orders_on_close=true, overlay=true, commission_type=strategy.commission.cash_per_contract, commission_value=.0035, slippage = 1, margin_long = 75, initial_capital = 25000, default_qty_type=strategy.percent_of_equity, default_qty_value=110) // Cumulative RSI Indicator Calculations // rlen = input.int(title="RSI Length", defval=3, minval=1) cumlen = input(3, "RSI Cumulation Length") rsi = ta.rsi(close, rlen) cumRSI = math.sum(rsi, cumlen) ob = (100*cumlen*input(94, "Oversold Level")*.01) os = (100*cumlen*input(20, "Overbought Level")*.01) // Operational Function // TrendFilterInput = input(false, "Only Trade When Price is Above EMA?") ema = ta.ema(close, input(100, "EMA Length")) TrendisLong = (close>ema) plot(ema) // Backtest Timeframe Inputs // startDate = input.int(title="Start Date", defval=1, minval=1, maxval=31) startMonth = input.int(title="Start Month", defval=1, minval=1, maxval=12) startYear = input.int(title="Start Year", defval=2010, minval=1950, maxval=2100) endDate = input.int(title="End Date", defval=1, minval=1, maxval=31) endMonth = input.int(title="End Month", defval=1, minval=1, maxval=12) endYear = input.int(title="End Year", defval=2099, minval=1950, maxval=2100) InDateRange = (time >= timestamp(syminfo.timezone, startYear, startMonth, startDate, 0, 0)) and (time < timestamp(syminfo.timezone, endYear, endMonth, endDate, 0, 0)) // Buy and Sell Functions // if (InDateRange and TrendFilterInput==true) strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os) and TrendisLong, comment="Buy", alert_message="buy") strategy.close("Long", when = ta.crossover(cumRSI, ob) , comment="Sell", alert_message="Sell") if (InDateRange and TrendFilterInput==false) strategy.entry("Long", strategy.long, when = ta.crossover(cumRSI, os), comment="Buy", alert_message="buy") strategy.close("Long", when = ta.crossover(cumRSI, ob), comment="Sell", alert_message="sell") if (not InDateRange) strategy.close_all()