RSI Chiến lược giao dịch chênh lệch tăng và giảm

Tác giả:ChaoZhang, Ngày: 2024-01-15 12:09:54
Tags:

img

Tổng quan

Chiến lược này đánh giá xu hướng tăng và giảm của thị trường và đưa ra quyết định giao dịch bằng cách tính toán sự khác biệt của chỉ số RSI. Cụ thể, nó sẽ đánh giá các tín hiệu tăng ẩn khi RSI hình thành mức thấp hơn nhưng giá hình thành mức thấp hơn. Và nó sẽ đánh giá các tín hiệu giảm ẩn khi RSI hình thành mức cao hơn nhưng giá hình thành mức cao hơn. Sau đó nó xác định xu hướng tăng hoặc giảm tiềm năng của thị trường dựa trên các tín hiệu này và thực hiện giao dịch.

Chiến lược logic

Chiến lược này chủ yếu dựa trên lý thuyết chênh lệch tăng và giảm của chỉ số RSI. Khi RSI và giá hình thành chênh lệch ngược, nó chỉ ra sự đảo ngược tiềm năng của thị trường. Có bốn tình huống cụ thể:

  1. RSI hình thành cao thấp trong khi giá hình thành thấp thấp. Nó chỉ ra sức mua đẩy RSI lên nhưng không phản ánh đầy đủ về giá, ngụ ý sức mạnh tăng mạnh.

  2. Tín hiệu tăng ẩn: RSI hình thành thấp hơn thấp hơn trong khi giá hình thành thấp hơn cao hơn. Nó ngụ ý sức bán đẩy RSI xuống nhưng không phải giá, cho thấy sức mạnh tăng mạnh hơn.

  3. Tín hiệu giảm thường xuyên: RSI hình thành thấp cao hơn trong khi giá hình thành cao hơn cao hơn. Nó ngụ ý sức bán đẩy giá lên nhưng không phải RSI, cho thấy sức giảm mạnh hơn.

  4. RSI hình thành cao hơn trong khi giá hình thành thấp hơn. Nó chỉ ra sức mua đẩy RSI lên nhưng không phải giá, ngụ ý sức mạnh giảm mạnh hơn.

Dựa trên những khác biệt trên, nó đánh giá các xu hướng tăng hoặc giảm tiềm năng của thị trường và tăng cường sức mua / bán để xây dựng các chiến lược giao dịch.

Ưu điểm

  1. Sử dụng lý thuyết phân kỳ tăng và giảm của RSI để xác định xu hướng tiềm năng của thị trường.
  2. Cũng kết hợp các hành động giá để xác nhận, tránh các tín hiệu ồn ào.
  3. Có khả năng nắm bắt các tín hiệu quan trọng trước khi thị trường nhanh chóng đảo ngược.
  4. Thực hiện chỉ báo trực quan cho tín hiệu tăng và giảm, dễ dàng và trực quan để vận hành.
  5. Các tham số có thể tùy chỉnh phù hợp với môi trường thị trường khác nhau.

Rủi ro

  1. Sự chênh lệch giữa chỉ số RSI và giá có thể không nhất thiết có nghĩa là đảo ngược, chỉ có thể là các hành động giới hạn trong phạm vi.
  2. Các tín hiệu ẩn có tiếng ồn tương đối lớn, nguy cơ đánh giá sai.
  3. Cần phải kết hợp thêm các chỉ số hoặc phương pháp phân tích kỹ thuật để xác nhận các tín hiệu.
  4. Cài đặt tham số không chính xác cũng có thể ảnh hưởng đến các phán đoán.

Hướng dẫn cải thiện

  1. Kết hợp MACD, KDJ và các chỉ số khác với RSI để xác định tín hiệu nhập cảnh.
  2. Thêm chiến lược dừng lỗ để giảm lỗ cho mỗi giao dịch.
  3. Tối ưu hóa các thiết lập tham số như tìm kiếm các khoảng thời gian RSI phù hợp hơn.
  4. Đưa ra các thuật toán học máy để đào tạo độ chính xác của tín hiệu thu nhập.
  5. Thực hiện websocket cho báo giá thời gian thực để giảm độ trễ xác nhận tín hiệu.

Tóm lại

Chiến lược này chủ yếu tận dụng sự chênh lệch tăng và giảm của chỉ số RSI để xác định xu hướng tăng hoặc giảm tiềm năng của thị trường bằng cách nắm bắt sự thay đổi sức mạnh tương đối giữa sức mua và sức bán đằng sau các hành động giá. Nó có một số khả năng dự đoán đảo ngược. Nhưng nó cũng có rủi ro của các tín hiệu ồn ào. Những cách như tối ưu hóa tham số, kết hợp chỉ số, học máy có thể giúp tăng cường sự ổn định và lợi nhuận của chiến lược.


/*backtest
start: 2024-01-07 00:00:00
end: 2024-01-14 00:00:00
period: 15m
basePeriod: 5m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy(title="Divergence Indicator")
len = input.int(title="RSI Period", minval=1, defval=20)
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=true)
bearColor = color.red
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 = ta.rsi(src, len)

plot(osc, title="RSI", linewidth=2, color=#2962FF)
hline(50, title="Middle Line", color=#787B86, linestyle=hline.style_dotted)
obLevel = hline(70, title="Overbought", color=#787B86, linestyle=hline.style_dotted)
osLevel = hline(30, title="Oversold", color=#787B86, linestyle=hline.style_dotted)
fill(obLevel, osLevel, title="Background", color=color.rgb(33, 150, 243, 90))

plFound = na(ta.pivotlow(osc, lbL, lbR)) ? false : true
phFound = na(ta.pivothigh(osc, lbL, lbR)) ? false : true
_inRange(cond) =>
	bars = ta.barssince(cond == true)
	rangeLower <= bars and bars <= rangeUpper

//------------------------------------------------------------------------------
// Regular Bullish
// Osc: Higher Low

oscHL = osc[lbR] > ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Lower Low

priceLL = low[lbR] < ta.valuewhen(plFound, low[lbR], 1) 
// bull : 상승 Condition : 조건
bullCond = plotBull and priceLL and oscHL and plFound // 상승다이버전스?
strategy.entry("상승 다이버전스 진입", strategy.long, when = bullCond)
// strategy.close("상승 다이버전스 진입", when = ta.crossover(osc, 70)) 
plot(
     plFound ? osc[lbR] : na,
     offset=-lbR,
     title="Regular Bullish",
     linewidth=2,
     color=(bullCond ? bullColor : noneColor)
     )

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

//------------------------------------------------------------------------------
// Hidden Bullish
// Osc: Lower Low

oscLL = osc[lbR] < ta.valuewhen(plFound, osc[lbR], 1) and _inRange(plFound[1])

// Price: Higher Low

priceHL = low[lbR] > ta.valuewhen(plFound, low[lbR], 1)
hiddenBullCond = plotHiddenBull and priceHL and oscLL and plFound
strategy.entry("히든 상승 다이버전스 진입", strategy.long, when = hiddenBullCond)
// strategy.close("히든 상승 다이버전스 진입", when = ta.crossover(osc, 70))
plot(
	 plFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor)
	 )

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

//------------------------------------------------------------------------------
// Regular Bearish
// Osc: Lower High

oscLH = osc[lbR] < ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Higher High

priceHH = high[lbR] > ta.valuewhen(phFound, high[lbR], 1)
// bear : 하락 
bearCond = plotBear and priceHH and oscLH and phFound
strategy.entry("하락 다이버전스 진입", strategy.short, when = bearCond)
// strategy.close("하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor)
	 )

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

//------------------------------------------------------------------------------
// Hidden Bearish
// Osc: Higher High

oscHH = osc[lbR] > ta.valuewhen(phFound, osc[lbR], 1) and _inRange(phFound[1])

// Price: Lower High

priceLH = high[lbR] < ta.valuewhen(phFound, high[lbR], 1)

hiddenBearCond = plotHiddenBear and priceLH and oscHH and phFound
strategy.entry("히든 하락 다이버전스 진입", strategy.short, when = hiddenBearCond)
// strategy.close("히든 하락 다이버전스 진입", when = ta.crossunder(osc, 50)) 
plot(
	 phFound ? osc[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor)
	 )

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

Thêm nữa