Chiến lược này sử dụng chỉ số tương đối mạnh (RSI) với các chỉ số ngẫu nhiên để tạo thành một chiến lược kép để đánh giá chính xác hơn về tình trạng quá mua quá bán của thị trường và do đó có được tín hiệu giao dịch đáng tin cậy hơn.
Trong chiến lược này, RSI có chiều dài 14 chu kỳ, ngưỡng mua quá mức là 70, và ngưỡng bán quá mức là 30. Giá trị K của chỉ số ngẫu nhiên được tính bằng đường trung bình 3 chu kỳ, và giá trị D là đường trung bình 3 chu kỳ của giá trị K. Khi đường K đi từ dưới lên trên đường D, nó được coi là tín hiệu mua quá mức, ngược lại là tín hiệu bán quá mức.
Chiến lược sử dụng kết hợp các chỉ số RSI với các chỉ số ngẫu nhiên để phát ra tín hiệu giao dịch:
Khi các chỉ số ngẫu nhiên xuất hiện trên đường đi (đường K đi qua đường D từ phía dưới) và chỉ số RSI cao hơn 70, nó được coi là tín hiệu mua quá mức, làm trống.
Khi các chỉ số ngẫu nhiên xuất hiện (đường K đi qua đường D từ trên xuống) và chỉ số RSI thấp hơn 30, được coi là tín hiệu bán tháo, hãy làm nhiều hơn.
Chiến lược kết hợp kép này tận dụng lợi thế của chỉ số RSI để đánh giá quá mua quá bán, đồng thời kết hợp tính trượt của chỉ số ngẫu nhiên để lọc các tín hiệu giả mạo để tạo ra tín hiệu giao dịch đáng tin cậy hơn.
Lợi thế lớn nhất của chiến lược kép này là nó có thể giảm hiệu quả tín hiệu giả và tăng độ tin cậy của tín hiệu.
Chỉ số RSI được sử dụng một mình sẽ tạo ra nhiều tín hiệu giả hơn. Điều này là do chỉ số RSI tự nó chỉ đánh giá tình trạng quá mua quá bán của giá, không thể phản ánh hướng của xu hướng. Vì vậy, nhiều tín hiệu RSI một mình là không đáng tin cậy.
Trong khi đó, chỉ số ngẫu nhiên có thể xác định hướng xu hướng của giá. Đường K trên đường D cho thấy xu hướng tăng giá có thể tiếp tục, khi đó tín hiệu mua quá mức RSI có độ tin cậy cao hơn, được đánh giá là mua quá mức thực sự chứ không phải mua quá mức giả.
Ngược lại, đường K đi qua đường D cho thấy xu hướng giá có thể đảo ngược, thậm chí nếu RSI cho thấy tín hiệu bán quá mức, có thể là bán quá mức giả, không giao dịch.
Do đó, việc sử dụng RSI và các chỉ số ngẫu nhiên trong tổ hợp có thể giúp nắm bắt tốt hơn tình trạng quá mua và quá bán của giá cả và hướng của xu hướng, lọc ra nhiều tín hiệu không đáng tin cậy và do đó có thời gian giao dịch chính xác hơn.
Chiến lược này cũng có một số rủi ro cần lưu ý:
Mặc dù việc sử dụng cặp chỉ số kép có thể lọc các tín hiệu giả, nhưng cũng có thể bỏ lỡ một số tín hiệu thực, do đó bỏ lỡ cơ hội giao dịch.
RSI và tham số của chỉ số ngẫu nhiên cần thiết để thiết lập mối quan hệ tốt, ví dụ như chu kỳ RSI quá ngắn, chỉ số ngẫu nhiên K, D giá trị mịn không phù hợp, sẽ ảnh hưởng đến độ chính xác của tín hiệu.
Khi chỉ số phát ra tín hiệu, nó cũng cần được xác nhận kết hợp với các yếu tố như động lực giá, khối lượng giao dịch, để tránh xâm nhập vào đột phá giả.
Cần chú ý đến rủi ro hệ thống và tránh giao dịch mù quáng khi thị trường biến động mạnh.
Chiến lược này cũng có thể được tối ưu hóa theo các khía cạnh sau:
Tối ưu hóa các tham số của RSI và các chỉ số ngẫu nhiên, tìm ra sự kết hợp tham số tốt nhất. Các tham số có thể được điều chỉnh thông qua dữ liệu phản hồi, hoặc các tham số được tối ưu hóa động theo phương pháp học máy.
Tăng các chỉ số xác nhận giao dịch, chẳng hạn như tăng giao dịch để xác nhận tín hiệu mua và bán.
Kết hợp với các chỉ số xác nhận xu hướng như đường trung bình di chuyển, tránh bị kéo theo bởi thị trường chấn động. Ví dụ, chỉ xem xét tín hiệu mua khi xu hướng đi lên.
Sử dụng các phương pháp học máy để xác định các quy tắc mua và bán phức tạp hơn, chẳng hạn như kết hợp các tín hiệu như Bollinger Bands, hình dạng giá để tăng sự ổn định chiến lược.
Sử dụng các công nghệ tiên tiến như học sâu để phát triển hệ thống giao dịch đa dạng thông minh hơn, tối ưu hóa các quy tắc chiến lược trong không gian mẫu lớn hơn.
Chiến lược kết hợp kép RSI và chỉ số ngẫu nhiên, thông qua các chỉ số tích hợp, sử dụng hợp lý các lợi thế của các chỉ số, tạo ra hiệu ứng bổ sung. Chỉ số RSI đơn lẻ của nó có độ chính xác lọc tín hiệu cao hơn, do đó có tín hiệu giao dịch chính xác hơn. Tuy nhiên, vẫn cần chú ý đến các vấn đề như tối ưu hóa tham số, quản lý rủi ro.
/*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")