Chiến lược đảo ngược xu hướng RSI

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

img

Tổng quan

Chiến lược đảo ngược xu hướng RSI sử dụng các tín hiệu đảo ngược của chỉ số RSI để xác định các điểm đảo ngược xu hướng tiềm năng và tham gia giao dịch dài hoặc ngắn.

Chiến lược logic

Chiến lược này dựa trên sự kết hợp của các tín hiệu đảo ngược RSI và tín hiệu đảo ngược giá, chủ yếu bao gồm bốn tình huống:

  1. Chuyển đổi tăng thường xuyên: Khi RSI hình thành mức thấp hơn (có nghĩa là xu hướng RSI đảo ngược từ trên xuống) và giá hình thành mức thấp hơn (có nghĩa là xu hướng giá đảo ngược từ dưới lên), một tín hiệu đảo ngược tăng thường xuyên được tạo ra.

  2. Sự đảo ngược tăng ẩn: Khi RSI hình thành mức thấp hơn (có nghĩa là xu hướng RSI tiếp tục từ trên xuống) nhưng giá hình thành mức thấp hơn (có nghĩa là xu hướng giá đảo ngược từ dưới lên), một tín hiệu đảo ngược tăng ẩn được tạo ra.

  3. Chuyển đổi giảm thường xuyên: Khi chỉ số RSI hình thành mức cao thấp hơn (có nghĩa là xu hướng RSI đảo ngược từ dưới lên) và giá hình thành mức cao hơn (có nghĩa là xu hướng giá đảo ngược từ trên xuống), một tín hiệu đảo ngược giảm thường xuyên được tạo ra.

  4. Sự đảo ngược giảm ẩn: Khi RSI hình thành mức cao hơn (có nghĩa là xu hướng RSI tiếp tục từ xuống lên) nhưng giá hình thành mức cao hơn (có nghĩa là xu hướng giá đảo ngược từ lên xuống), một tín hiệu đảo ngược giảm ẩn được tạo ra.

Điều này kết hợp cả tín hiệu đảo ngược RSI và đảo ngược giá để tạo ra các tín hiệu giao dịch, tránh các tín hiệu sai dựa chỉ trên RSI hoặc đảo ngược giá một mình, làm cho chiến lược mạnh mẽ hơn.

Phân tích lợi thế

Chiến lược đảo ngược xu hướng RSI có những lợi thế sau:

  1. Kết hợp RSI và đảo ngược giá lọc ra nhiều tín hiệu đảo ngược sai và cải thiện chất lượng tín hiệu. RSI một mình không hoàn toàn đáng tin cậy trong việc xác định đảo ngược, đòi hỏi xác nhận từ giá.

  2. Xác định các mô hình tăng và giảm tiềm ẩn, thường đi trước xu hướng giá mạnh mẽ, cho phép vào sớm.

  3. Các thông số RSI có thể tùy chỉnh và thời gian xem lại có thể được điều chỉnh cho các thị trường khác nhau, cung cấp tính linh hoạt.

  4. Hiển thị các mô hình chỉ số và tín hiệu cho phép đánh giá tình trạng thị trường trực quan.

  5. Logic chiến lược đơn giản và rõ ràng làm cho nó dễ hiểu và thực hiện cho giao dịch algo.

Phân tích rủi ro

Chiến lược đảo ngược xu hướng RSI cũng có những rủi ro sau:

  1. Chỉ số RSI kết hợp và đảo ngược giá vẫn có thể có những đánh giá sai đôi khi.

  2. Các mô hình tăng và giảm ẩn khó xác định và các cơ hội có thể bị bỏ lỡ nếu không có kinh nghiệm.

  3. Các thiết lập thời gian xem lại không chính xác có thể dẫn đến việc bỏ lỡ các điểm đảo ngược hoặc phán đoán chậm.

  4. Các chiến lược dừng lỗ nên được thực hiện để tránh tổn thất tăng sau khi đảo ngược giảm.

Rủi ro có thể được quản lý bằng cách tối ưu hóa các tham số, dừng lỗ nghiêm ngặt, thận trọng lấy các tín hiệu đảo ngược ẩn, v.v.

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

Chiến lược đảo ngược xu hướng RSI có thể được tối ưu hóa trong các khía cạnh sau:

  1. Điều chỉnh các thông số RSI và độ nhạy của thử nghiệm để tìm thời gian RSI tối ưu cho các thị trường khác nhau.

  2. Tối ưu hóa các tham số thời gian xem lại để cân bằng việc bắt đầu đảo ngược sớm và ngăn chặn các tín hiệu sai.

  3. Thêm phân tích khối lượng như phát hiện khối lượng lớn giải nén gây ra sự đảo ngược giá.

  4. Kết hợp các tín hiệu chỉ số khác như MACD, Bollinger Bands để cải thiện độ chính xác phán đoán.

  5. Thêm các chiến lược dừng lỗ để hạn chế kích thước lỗ. Có thể thiết lập dừng lỗ sau khi giá phá vỡ mức cao / thấp mới.

  6. Cải thiện logic chiến lược dựa trên kết quả backtest để cải thiện các yếu tố lợi nhuận. Điều chỉnh các mối quan hệ logic và tìm kết hợp tối ưu.

Tóm lại

Chiến lược đảo ngược xu hướng RSI xác định các điểm chuyển hướng tiềm năng bằng cách kết hợp đảo ngược xu hướng RSI và đảo ngược giá. Nó sử dụng tốt khả năng đánh giá xu hướng của RSI trong khi lọc các tín hiệu sai với thông tin giá. Chiến lược có logic đơn giản và rõ ràng dễ thực hiện. Các tham số và dừng lỗ có thể được tối ưu hóa để quản lý rủi ro và cải thiện hiệu suất hơn nữa.


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

//@version=4
//study(title="Divergence Indicator", format=format.price)
strategy(title="RSI Divergence Indicator", overlay=false,pyramiding=1, default_qty_value=2,   default_qty_type=strategy.fixed, initial_capital=10000, currency=currency.USD)

len = input(title="RSI Period", minval=1, defval=5)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=5)
lbL = input(title="Pivot Lookback Left", defval=5)
rangeUpper = input(title="Max of Lookback Range", defval=60)
rangeLower = input(title="Min of Lookback Range", defval=5)
plotBull = input(title="Plot Bullish", defval=true)
plotHiddenBull = input(title="Plot Hidden Bullish", defval=true)
plotBear = input(title="Plot Bearish", defval=true)
plotHiddenBear = input(title="Plot Hidden Bearish", defval=false)

bearColor = color.purple
bullColor = color.green
hiddenBullColor = color.new(color.green, 80)
hiddenBearColor = color.new(color.red, 80)
textColor = color.white
noneColor = color.new(color.white, 100)

osc = rsi(src, len)

plot(osc, title="RSI", linewidth=2, color=#8D1699)
hline(50, title="Middle Line", linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=#9915FF, transp=90)

plFound = na(pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(pivothigh(osc, lbL, lbR)) ? false : true

_inRange(cond) =>
    bars = barssince(cond == true)
    rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish

// Osc: Higher Low
oscHL = osc[lbR] > valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low
priceLL = low[lbR] < valuewhen(plFound, low[lbR], 1)

bullCond = plotBull and priceLL and oscHL and plFound

plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish",
	 linewidth=2,
	 color=(bullCond ? bullColor : noneColor),
	 transp=0
	 )


plotshape(
	 bullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish Label",
	 text=" Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor,
	 transp=0
	 )

//------------------------------------------------------------------------------
// Hidden Bullish

// Osc: Lower Low
oscLL = osc[lbR] < valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low
priceHL = low[lbR] > valuewhen(plFound, low[lbR], 1)

hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound

plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBullCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish Label",
	 text=" H Bull ",
	 style=shape.labelup,
	 location=location.absolute,
	 color=bullColor,
	 textcolor=textColor,
	 transp=0
	 )

longCondition=bullCond or hiddenBullCond
//? osc[lbR] : na  
//hiddenBullCond
strategy.entry(id="RSIDivLE", long=true,  when=longCondition)


//------------------------------------------------------------------------------
// Regular Bearish

// Osc: Lower High
oscLH = osc[lbR] < valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High
priceHH = high[lbR] > valuewhen(phFound, high[lbR], 1)

bearCond = plotBear and priceHH and oscLH and phFound

plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor),
	 transp=0
	 )

plotshape(
	 bearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish Label",
	 text=" Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )

//------------------------------------------------------------------------------
// Hidden Bearish

// Osc: Higher High
oscHH = osc[lbR] > valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High
priceLH = high[lbR] < valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound

plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBearCond ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )
longCloseCondition=crossover(osc,75) or bearCond
strategy.close(id="RSIDivLE",  when=longCloseCondition)

Thêm nữa