Chiến lược phân kỳ RSI dựa trên điểm đảo chiều


Ngày tạo: 2023-11-28 13:43:05 sửa đổi lần cuối: 2023-11-28 13:43:05
sao chép: 1 Số nhấp chuột: 980
1
tập trung vào
1621
Người theo dõi

Chiến lược phân kỳ RSI dựa trên điểm đảo chiều

Tổng quan

Chiến lược này được gọi là Chiến lược Phân biến RSI dựa trên Pivot. Nó sử dụng các chỉ số RSI để xác định điểm mua và bán theo chu kỳ khác nhau, và trên cơ sở đó, thêm RSI đường dài làm điều kiện lọc để tăng sự ổn định của chiến lược.

Nguyên tắc chiến lược

Chiến lược này chủ yếu đánh giá RSI ngắn (ví dụ như RSI 5 ngày) và cơ hội mua khi giá xuất hiện khi các đầu nhiều đầu ẩn sau lưng hoặc các đầu nhiều đầu thường xuyên sau lưng; cơ hội bán khi các đầu không ẩn sau lưng hoặc các đầu không thường xuyên sau lưng xuất hiện.

Cụm con số thường xuyên đa đầu từ con số là: giá sáng tạo thấp và RSI không sáng tạo thấp; con số ẩn đa đầu từ con số ngược lại, giá không sáng tạo thấp và RSI sáng tạo thấp. Cả hai được định nghĩa là con số thấp sáng tạo và con số cao sáng tạo so với các giá trị tối đa lịch sử của một cửa sổ cuộn nhất định.

Ngoài ra, chiến lược cũng giới thiệu RSI đường dài (ví dụ RSI 50 ngày) như một điều kiện lọc. Chỉ khi RSI dài lớn hơn 50, tín hiệu mua sẽ được xem xét; khi RSI dài nhỏ hơn 30, xem xét dừng lỗ hoặc dừng rút ra.

Lợi thế chiến lược

Ưu điểm lớn nhất của chiến lược này là sử dụng đồng thời tín hiệu lệch của RSI ngắn và lọc RSI dài, có thể tránh được một mức độ nào đó và bỏ lỡ. Cụ thể, nó có một số lợi thế:

  1. RSI đường ngắn đi khỏi tín hiệu có thể xác định trước cơ hội biến động giá và bắt kịp thời điểm biến động;
  2. Điều kiện lọc RSI đường dài tránh làm quá nhiều một cách mù quáng khi xu hướng không chắc chắn;
  3. Nhiều loại cách ngăn chặn, ngăn chặn hàng loạt có thể giúp giảm nguy cơ;
  4. Các cơ chế pyramiding cho phép gia tăng vị thế và tăng thêm lợi nhuận.

Rủi ro chiến lược

Chiến lược này cũng có một số rủi ro cần lưu ý:

  1. RSI không phải lúc nào cũng có hiệu quả và có thể có tín hiệu giả.
  2. Nếu đánh giá sai, tổn thất sẽ tăng lên nhanh chóng.
  3. Thiết lập trạm dừng không đúng cách cũng có thể gây ra trạm dừng sớm hoặc lợi nhuận không đạt được.

Các biện pháp quản lý rủi ro tương ứng bao gồm: thiết lập các điều kiện dừng lỗ hợp lý, kiểm soát kích thước của mỗi vị trí, giảm bớt vị trí theo đợt để làm mịn đường cong lỗ.

Hướng tối ưu hóa

Chiến lược này có thể được tối ưu hóa hơn nữa:

  1. Các tham số RSI có thể được tối ưu hóa hơn nữa để tìm ra sự kết hợp tham số tốt nhất;
  2. Có thể kiểm tra tín hiệu lệch của các chỉ số khác như MACD, KD, v.v.
  3. Các tham số có thể được tối ưu hóa cụ thể cho các loại cụ thể (như dầu thô, kim loại quý, v.v.) để cải thiện khả năng thích ứng.

Tóm tắt

Chiến lược này kết hợp các tín hiệu lệch nhiều khoảng trống của đường ngắn và đường dài RSI để kiểm soát rủi ro và tăng hiệu quả lợi nhuận. Nó thể hiện nhiều nguyên tắc thiết kế chiến lược giao dịch định lượng, bao gồm khi nhập, khi thoát, tháo cổ phiếu theo đợt, thiết lập điểm dừng lỗ. Đây là một ví dụ về chiến lược lệch RSI có thể được tham khảo.

Mã nguồn chiến lược
/*backtest
start: 2023-11-20 00:00:00
end: 2023-11-27 00:00:00
period: 5m
basePeriod: 1m
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/
// © mohanee

//@version=4

//GOOGL setting  5 ,50 close, 3 , 1  profitLevel at 75 and No stop Loss shows win rate 99.03 % profit factor 5830.152

strategy(title="RSI5_50 with Divergence", overlay=false,pyramiding=2, default_qty_type=strategy.fixed, default_qty_value=3,    initial_capital=10000, currency=currency.USD)

len = input(title="RSI Period", minval=1, defval=5)
longRSILen = input(title="Long RSI Period", minval=10, defval=50)
src = input(title="RSI Source", defval=close)
lbR = input(title="Pivot Lookback Right", defval=3)
lbL = input(title="Pivot Lookback Left", defval=1)
takeProfitRSILevel = input(title="Take Profit at RSI Level", minval=50, defval=75)
stopLoss = input(title="Stop Loss%(if checked 8% rule applied)", defval=false)

shortTermRSI = rsi(close,len)
longTermRSI = rsi(close,longRSILen)

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)



plot(shortTermRSI, title="RSI", linewidth=2, color=#8D1699)
plot(longTermRSI, title="longTermRSI", linewidth=2, color=color.orange)

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=longTermRSI >=50 ? color.green:color.purple, transp=65)  // longTermRSI >=50

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

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

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

// shortTermRSI: Higher Low
oscHL = shortTermRSI[lbR] > valuewhen(plFound, shortTermRSI[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 ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Regular Bullish",
	 linewidth=2,
	 color=(bullCond ? bullColor : noneColor),
	 transp=0
	 )


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

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

// shortTermRSI: Lower Low
oscLL = shortTermRSI[lbR] < valuewhen(plFound, shortTermRSI[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 ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bullish",
	 linewidth=2,
	 color=(hiddenBullCond ? hiddenBullColor : noneColor),
	 transp=0
	 )

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

longCondition= longTermRSI >=50  and ( (bullCond or hiddenBullCond ) )  or  (strategy.position_size>0 and crossover(shortTermRSI,20) )
//last condition above is to leg in if you are already in the Long trade, 


strategy.entry(id="RSIDivLE", long=true,  when=longCondition)


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

// shortTermRSI: Lower High
oscLH = shortTermRSI[lbR] < valuewhen(phFound, shortTermRSI[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 ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Regular Bearish",
	 linewidth=2,
	 color=(bearCond ? bearColor : noneColor),
	 transp=0
	 )

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

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

// shortTermRSI: Higher High
oscHH = shortTermRSI[lbR] > valuewhen(phFound, shortTermRSI[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 ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish",
	 linewidth=2,
	 color=(hiddenBearCond ? hiddenBearColor : noneColor),
	 transp=0
	 )

plotshape(
	 hiddenBearCond ? shortTermRSI[lbR] : na,
	 offset=-lbR,
	 title="Hidden Bearish Label",
	 text=" H Bear ",
	 style=shape.labeldown,
	 location=location.absolute,
	 color=bearColor,
	 textcolor=textColor,
	 transp=0
	 )
	 
	 
//calculate stop Loss
stopLossVal = stopLoss==true ? ( strategy.position_avg_price -  (strategy.position_avg_price*0.08) ) : 0

//partial profit
strategy.close(id="RSIDivLE", comment="TP1", qty=strategy.position_size*3/4, when=strategy.position_size>0 and (longTermRSI>=takeProfitRSILevel or crossover(longTermRSI,90)))
strategy.close(id="RSIDivLE",comment="TP2",   qty=strategy.position_size*3/4 , when=crossover(longTermRSI,70))
strategy.close(id="RSIDivLE",comment="TP3",   qty=strategy.position_size/2, when=crossover(longTermRSI,65))
strategy.close(id="RSIDivLE",comment="TP4",   qty=strategy.position_size/2 , when=crossover(longTermRSI,60))

//close the whole position when stoploss hits or longTermRSI goes below 30
strategy.close(id="RSIDivLE",comment="Exit",    when=crossunder(longTermRSI,30) or close<stopLossVal)