Chiến lược RSI Động lực Động lực

Tác giả:ChaoZhang, Ngày: 2023-10-07 15:47:42
Tags:

Tổng quan

Ý tưởng cốt lõi của chiến lược này là làm cho thời gian làm mịn của chỉ số RSI năng động, tự động điều chỉnh nó dựa trên mối tương quan giữa giá và động lực, do đó cải thiện tính hữu ích của chỉ số RSI.

Chiến lược logic

Chiến lược đầu tiên tính toán động lực của giá, sau đó tính toán hệ số tương quan giữa giá và động lực. Khi hệ số tương quan gần 1, điều đó có nghĩa là giá và động lực có tương quan tích cực cao. Khi hệ số tương quan gần -1, điều đó có nghĩa là giá và động lực có tương quan tiêu cực cao.

Dựa trên mối tương quan giữa giá và động lực, thời gian làm mịn của chỉ số RSI có thể được điều chỉnh. Khi mối tương quan cao, một thời gian RSI ngắn hơn được sử dụng. Khi mối tương quan thấp, một thời gian RSI dài hơn được sử dụng.

Cụ thể, chiến lược này thiết lập phạm vi thời gian RSI là 20-50 theo mặc định. Sau khi tính toán hệ số tương quan giữa giá và động lượng, nó sử dụng lập bản đồ tuyến tính để lập bản đồ hệ số tương quan đến phạm vi 20-50 như là thời gian làm mịn RSI cuối cùng.

Điều này cho phép các thông số RSI được tự động điều chỉnh dựa trên điều kiện thị trường. Khi thay đổi giá có mối tương quan mạnh mẽ với sự thay đổi động lực, RSI ngắn hạn được sử dụng để làm cho nó nhạy cảm hơn. Khi mối tương quan yếu, RSI dài hạn được sử dụng để giảm tác động của tiếng ồn lên tín hiệu.

Phân tích lợi thế

  • Điều chỉnh tham số năng động thích nghi với những thay đổi trên thị trường
  • Tránh hạn chế của các chỉ số thời gian cố định
  • Thời gian làm mịn được tự động tối ưu hóa, không cần phải tự chọn các thông số tốt nhất
  • RSI có thể cấu hình hoạt động trong phạm vi thời gian cho các sản phẩm khác nhau

Phân tích rủi ro

  • Tính toán tương quan tự nó giới thiệu chậm trễ, có thể bỏ lỡ các điểm chuyển đổi giá
  • Chỉ xem xét mối tương quan giá-động lực là quá đơn giản, bỏ qua các yếu tố khác
  • RSI mặc định khoảng thời gian có thể không phù hợp với tất cả các sản phẩm, cần tối ưu hóa
  • Xem xét kết hợp các yếu tố khác như biến động để điều chỉnh thời gian RSI

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

  • Thử các phương pháp tính toán tương quan khác nhau để giảm độ trễ
  • Xem xét nhiều yếu tố hơn, không chỉ tương quan để xác định thời gian RSI
  • Backtest trên các sản phẩm khác nhau để tìm phạm vi thời gian RSI mặc định tối ưu
  • Có thể thiết lập trọng số yếu tố tương quan, thay vì lập bản đồ tuyến tính thuần túy
  • Thêm các bộ lọc để tránh các giai đoạn RSI không phù hợp trong một số môi trường thị trường nhất định

Tóm lại

Ý tưởng điều chỉnh động thời gian làm mịn RSI là đáng để học hỏi, nhưng việc thực hiện cụ thể có nhiều chỗ để cải thiện. Chìa khóa là xác định các yếu tố quyết định ảnh hưởng đến việc lựa chọn tham số RSI và chuyển đổi chúng thành các chỉ số có thể định lượng. Ngoài ra, không chỉ dựa vào mô hình, tối ưu hóa thực nghiệm của phạm vi tham số là cần thiết. Nhìn chung đây là một ý tưởng rất sáng tạo, với tiềm năng thực tế sau khi tối ưu hóa và cải tiến thêm.


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


//@version=5
strategy("Dynamic RSI Momentum", "DRM Strategy", process_orders_on_close = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 50 )

// +++++++++++++++++++++
// ++      INPUT      ++ 
// +++++++++++++++++++++

// Momentum
len = input.int(10, "Momentum Length", 1,      group = "Dynamic RSI Momentum")
src = input.source(close, "Source",   group = "Dynamic RSI Momentum")

min_rsi = input.int(20, "Min RSI", group = "Dynamic RSI Momentum")
max_rsi = input.int(50, "Max RSI", group = "Dynamic RSI Momentum")

upLvl = input.float(70, "OverBought", 0, 100, group = "Dynamic RSI Momentum")
dnLvl = input.float(30, "OverSold",   0, 100, group = "Dynamic RSI Momentum")

// +++++++++++++++++++++
// ++   CALCULATION   ++ 
// +++++++++++++++++++++

// RMA Function
rmaFun(src, len) =>
    sma   = ta.sma(src, len) 
	alpha = 1/len
	sum   = 0.0
	sum  := na(sum[1]) ? sma : alpha * src + (1 - alpha) * nz(sum[1])

// RSI Function 
rsiFun(src, len) =>     
    100 - 100 / (1 + rmaFun(src - src[1] > 0 ? src - src[1] : 0, len) / 
                     rmaFun(src[1] - src > 0 ? src[1] - src : 0, len))

// Momentum
momVal = src - src[len]

// Calculation Price vs Momentum
corr  = ta.correlation(src, momVal, len)
corr := corr > 1 or corr < -1 ? float(na) : corr

rsiLen = 0
rsiLen := int(min_rsi + nz(math.round((1 - corr) * (max_rsi-min_rsi) / 2, 0), 0))

rsiMom = rsiFun(src, rsiLen)


// +++++++++++++++++++++
// ++    STRATEGY     ++ 
// +++++++++++++++++++++

long  = ta.crossover(rsiMom, dnLvl)
short = ta.crossunder(rsiMom, upLvl) 


// +++> Long <+++++
if long and not na(rsiMom)
    strategy.entry("Long", strategy.long)

// +++> Short <+++++
if short and not na(rsiMom)
    strategy.entry("Short", strategy.short)

// +++++++++++++++++++++
// ++      PLOT       ++ 
// +++++++++++++++++++++

plot(rsiMom, "Dynamic RSI Momentum", rsiMom < dnLvl ? color.green : rsiMom > upLvl ? color.red : color.yellow)

hline(50, "Mid Line", color.gray)

upperLine = hline(upLvl, "Upper Line", color.gray)
lowerLine = hline(dnLvl, "Lower Line", color.gray)
fill(upperLine, lowerLine, color.new(color.purple, 90), "Background Fill")



Thêm nữa