Chiến lược thoát RSI tích lũy

Tác giả:ChaoZhang, Ngày: 2023-10-27 11:20:50
Tags:

img

Tổng quan

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 logic

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.

Ưu điểm

  • Quét hiệu quả tiếng ồn và nắm bắt xu hướng trung và dài hạn bằng cách sử dụng RSI tích lũy
  • Tránh giao dịch không hợp lý với bộ lọc xu hướng
  • Sử dụng các mức tham chiếu động thay vì các giá trị cố định để ra quyết định
  • Các tham số có thể cấu hình cao cho các điều chỉnh dựa trên các thị trường khác nhau
  • Kết quả backtest xuất sắc trong 10 năm, vượt trội đáng kể so với mua và giữ

Rủi ro và cải tiến

  • Các quyết định chỉ dựa trên một chỉ số, có thể thêm các chỉ số hoặc bộ lọc khác
  • Tỷ lệ đòn bẩy cao cố định, có thể điều chỉnh dựa trên các khoản rút vốn
  • Chỉ có giao dịch dài, có thể xem xét các cơ hội bán ngắn
  • Tối ưu hóa sự kết hợp các tham số khác nhau đáng kể giữa các thị trường
  • Làm giàu các điều kiện thoát bằng dừng lỗ, dừng lỗ di chuyển vv
  • Xem xét kết hợp với các chiến lược khác để có hiệu ứng phối hợp

Tóm lại

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()

Thêm nữa