Chiến lược kép: Kết hợp RSI và Stochastic Oscillator

Tác giả:ChaoZhang, Ngày: 2023-10-07 16:19:30
Tags:

Tổng quan

Chiến lược này kết hợp chỉ số sức mạnh tương đối (RSI) với dao động Stochastic để tạo thành một chiến lược kép để xác định chính xác hơn các điều kiện thị trường mua quá mức và bán quá mức, do đó tạo ra các tín hiệu giao dịch đáng tin cậy hơn.

Làm thế nào nó hoạt động

Chỉ số RSI trong chiến lược này có khoảng thời gian 14, với ngưỡng mua quá mức 70 và ngưỡng bán quá mức 30. Dòng %K của dao động Stochastic sử dụng SMA 3 giai đoạn, và đường %D của nó là SMA 3 giai đoạn của %K. Một chéo tăng xảy ra khi %K vượt qua trên %D, trong khi một chéo giảm xảy ra khi %K vượt qua dưới %D.

Các tín hiệu giao dịch được tạo ra dựa trên các chỉ số kết hợp:

  1. Khi một giao thoa tăng xảy ra trên Stochastic và RSI trên 70, một tín hiệu mua quá mức được tạo ra để đi ngắn.

  2. Khi một giao thoa giảm trên Stochastic xảy ra và RSI dưới 30, một tín hiệu bán quá mức được tạo ra để đi dài.

Chiến lược kép này tận dụng sức mạnh của RSI trong việc xác định mức mua quá mức / bán quá mức, trong khi sử dụng tính năng theo xu hướng của Stochastic để lọc các tín hiệu sai, dẫn đến các mục giao dịch đáng tin cậy hơn.

Ưu điểm

Ưu điểm lớn nhất của chiến lược kép này là giảm đáng kể các tín hiệu sai và tăng độ tin cậy.

Chỉ riêng RSI có thể tạo ra các tín hiệu sai quá mức. Điều này là do RSI chỉ phản ánh mức độ quá mức giá mà không xem xét hướng xu hướng. Do đó, các tín hiệu RSI độc lập có xu hướng không đáng tin cậy.

Mặt khác, bộ dao động Stochastic có thể xác định hướng xu hướng. Một giao thoa tăng lên cho thấy đà tăng có thể tiếp tục, làm cho các tín hiệu RSI mua quá đáng tin cậy hơn.

Ngược lại, một đường chéo giảm ngụ ý về sự đảo ngược xu hướng sắp xảy ra.

Do đó, kết hợp RSI và Stochastic có thể xác định tốt hơn cả mức quá mức và hướng xu hướng, lọc ra các tín hiệu không đáng tin cậy và xác định các điểm biến đổi có khả năng cao.

Rủi ro

Ngoài ra còn có những rủi ro cần xem xét khi sử dụng chiến lược này:

  1. Cách tiếp cận hai chỉ số có thể lọc ra một số tín hiệu hợp lệ, gây ra cơ hội giao dịch bị bỏ lỡ.

  2. Điều chỉnh các thông số như thời gian RSI và làm mịn Stochastic là chìa khóa, nếu không độ chính xác tín hiệu có thể bị ảnh hưởng.

  3. Động lực giá và xác nhận khối lượng vẫn cần thiết khi nhận tín hiệu để tránh đột phá sai.

  4. Hãy nhận thức được rủi ro hệ thống và tránh giao dịch mù trong thời gian biến động thị trường cao.

Tăng cường

Chiến lược này có thể được tăng cường hơn nữa từ một số khía cạnh:

  1. Tối ưu hóa các thông số RSI và Stochastic thông qua backtesting để tìm kết hợp lý tưởng.

  2. Kết hợp các chỉ số âm lượng để xác nhận tín hiệu, như âm lượng tăng.

  3. Thêm các lớp phủ theo xu hướng như trung bình động để tránh tiếng ồn thị trường và whipsaws. Chỉ xem xét tín hiệu mua khi xu hướng tăng.

  4. Sử dụng máy học để khám phá các kết hợp tín hiệu phức tạp hơn kết hợp các dải Bollinger, mô hình giá, v.v. để cải thiện tính nhất quán.

  5. Tận dụng học tập sâu và phân tích dữ liệu lớn để phát triển các hệ thống giao dịch đa mục đích thông minh hơn với hiệu quả lấy mẫu cao hơn.

Kết luận

Tóm lại, chiến lược kép RSI-Stochastic sử dụng hiệu quả các điểm mạnh của mỗi phương pháp thông qua mô hình tập hợp. So với RSI độc lập, nó cung cấp khả năng lọc và độ chính xác tín hiệu vượt trội. Các điểm đáng chú ý bao gồm tối ưu hóa tham số và kiểm soát rủi ro. Phương pháp có thể được mở rộng để kết hợp các chỉ số khác để khám phá các chiến lược giao dịch hiệu quả mới.


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

//@version=2
//Based on Divergences and Hidden Divergences
//Locates bottom market and reversals

strategy("Vix FIX / StochRSI Strategy", pyramiding=9, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=3, overlay=false)

///////////// Stochastic Slow
Stochlength = input(14, minval=1, title="lookback length of Stochastic")
StochOverBought = input(80, title="Stochastic overbought condition")
StochOverSold = input(20, title="Stochastic oversold condition")
smoothK = input(3, title="smoothing of Stochastic %K ")
smoothD = input(3, title="moving average of Stochastic %K")
k = sma(stoch(close, high, low, Stochlength), smoothK)
d = sma(k, smoothD)

 
///////////// RSI 
RSIlength = input( 14, minval=1 , title="lookback length of RSI")
RSIOverBought = input( 70  , title="RSI overbought condition")
RSIOverSold = input( 30  , title="RSI oversold condition")
RSIprice = close
vrsi = rsi(RSIprice, RSIlength)

///////////// Double strategy: RSI strategy + Stochastic strategy

pd = input(22, title="LookBack Period Standard Deviation High")
bbl = input(20, title="Bolinger Band Length")
mult = input(2.0    , minval=1, maxval=5, title="Bollinger Band Standard Devaition Up")
lb = input(50  , title="Look Back Period Percentile High")
ph = input(.85, title="Highest Percentile - 0.90=90%, 0.95=95%, 0.99=99%")
new = input(false, title="-------Text Plots Below Use Original Criteria-------" )
sbc = input(false, title="Show Text Plot if WVF WAS True and IS Now False")
sbcc = input(false, title="Show Text Plot if WVF IS True")
new2 = input(false, title="-------Text Plots Below Use FILTERED Criteria-------" )
sbcFilt = input(true, title="Show Text Plot For Filtered Entry")
sbcAggr = input(true, title="Show Text Plot For AGGRESSIVE Filtered Entry")
ltLB = input(40, minval=25, maxval=99, title="Long-Term Look Back Current Bar Has To Close Below This Value OR Medium Term--Default=40")
mtLB = input(14, minval=10, maxval=20, title="Medium-Term Look Back Current Bar Has To Close Below This Value OR Long Term--Default=14")
str = input(3, minval=1, maxval=9, title="Entry Price Action Strength--Close > X Bars Back---Default=3")
//Alerts Instructions and Options Below...Inputs Tab
new4 = input(false, title="-------------------------Turn On/Off ALERTS Below---------------------" )
new5 = input(false, title="----To Activate Alerts You HAVE To Check The Boxes Below For Any Alert Criteria You Want----")
sa1 = input(false, title="Show Alert WVF = True?")
sa2 = input(false, title="Show Alert WVF Was True Now False?")
sa3 = input(false, title="Show Alert WVF Filtered?")
sa4 = input(false, title="Show Alert WVF AGGRESSIVE Filter?")

//Williams Vix Fix Formula
wvf = ((highest(close, pd)-low)/(highest(close, pd)))*100
sDev = mult * stdev(wvf, bbl)
midLine = sma(wvf, bbl)
lowerBand = midLine - sDev
upperBand = midLine + sDev
rangeHigh = (highest(wvf, lb)) * ph

//Filtered Bar Criteria
upRange = low > low[1] and close > high[1]
upRange_Aggr = close > close[1] and close > open[1]
//Filtered Criteria
filtered = ((wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and (wvf < upperBand and wvf < rangeHigh))
filtered_Aggr = (wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and not (wvf < upperBand and wvf < rangeHigh)

//Alerts Criteria
alert1 = wvf >= upperBand or wvf >= rangeHigh ? 1 : 0
alert2 = (wvf[1] >= upperBand[1] or wvf[1] >= rangeHigh[1]) and (wvf < upperBand and wvf < rangeHigh) ? 1 : 0
alert3 = upRange and close > close[str] and (close < close[ltLB] or close < close[mtLB]) and filtered ? 1 : 0
alert4 = upRange_Aggr and close > close[str] and (close < close[ltLB] or close < close[mtLB]) and filtered_Aggr ? 1 : 0

//Coloring Criteria of Williams Vix Fix
col = wvf >= upperBand or wvf >= rangeHigh ? lime : gray

isOverBought = (crossover(k,d) and k > StochOverBought) ? 1 : 0
isOverBoughtv2 = k > StochOverBought ? 1 : 0
filteredAlert = alert3 ? 1 : 0
aggressiveAlert = alert4 ? 1 : 0

plot(isOverBought, "Overbought / Crossover", style=line, color=red) 
plot(filteredAlert, "Filtered Alert", style=line, color=fuchsia) 
plot(aggressiveAlert, "Aggressive Alert", style=line, color=orange)

if (filteredAlert or aggressiveAlert)
    strategy.entry("Long", strategy.long)

if (isOverBought)
    strategy.close("Long")

    


Thêm nữa