Chiến lược tín hiệu mua lọc chỉ số kép sử dụng sự kết hợp của chỉ số RSI và Bollinger Bands để xác định các cơ hội mua tiềm năng. Nó sử dụng nhiều điều kiện lọc để phân biệt các điểm mua thuận lợi nhất. Điều này cho phép xác định thời gian mua vào có khả năng cao trong môi trường thị trường biến động.
Chiến lược này sử dụng hai bộ chỉ số để phát hiện cơ hội mua.
Đầu tiên, nó sử dụng chỉ số RSI Stochastic để xác định xem thị trường có bị quá bán không. Chỉ số kết hợp Stochastic và đường trung bình động của nó, coi đường chéo %K trên đường %D từ dưới là tín hiệu quá bán.
Bollinger Bands là các dải được tính toán từ độ lệch chuẩn của giá. Khi giá tiếp cận dải dưới, nó báo hiệu tình trạng bán quá mức. Chiến lược ở đây đặt tham số thành 2 lần độ lệch chuẩn cho các dải Bollinger rộng hơn, lọc ra nhiều tín hiệu sai hơn.
Với các tín hiệu bán quá mức thu được từ cả hai chỉ số, chiến lược thêm nhiều điều kiện lọc để xác định thêm thời gian mua vào:
Các tín hiệu mua được kích hoạt khi các tiêu chí toàn diện được đáp ứng.
Chiến lược lọc hai chỉ số có một số điểm mạnh chính:
Tóm lại, chiến lược kết hợp các chỉ số kỹ thuật và kỹ thuật lọc khác nhau để xác định chính xác thời gian mua vào, dẫn đến hiệu suất giao dịch tốt hơn.
Bất chấp những điểm mạnh của nó, cũng có những rủi ro để quản lý với chiến lược:
Các cải tiến được đề xuất để giảm thiểu rủi ro là:
Chiến lược có thể được cải thiện hơn nữa trong các khía cạnh sau:
Với các kỹ thuật tiên tiến hơn được giới thiệu, chiến lược có thể đạt được khả năng tạo tín hiệu chính xác hơn và kiểm soát rủi ro mạnh hơn để mang lại lợi nhuận đáng tin cậy hơn trong giao dịch trực tiếp.
Tóm lại, Chiến lược tín hiệu mua được lọc bằng chỉ số kép sử dụng chỉ số RSI, Bollinger Bands và nhiều điều kiện lọc như sức mạnh giá và xác thực pullback để xác định các điểm mua có khả năng cao. Với điều chỉnh tham số thích hợp, kiểm soát rủi ro vv, nó có tiềm năng trở thành một chiến lược giao dịch tự động ổn định.
Sức mạnh cốt lõi của nó nằm trong sự kết hợp hiệu quả của các chỉ số và bộ lọc cho thời gian chính xác. Các rủi ro và con đường cải thiện cũng có thể xác định và quản lý được. Nhìn chung, đây là một chiến lược định lượng có thể thực hiện và hiệu quả.
/*backtest start: 2022-11-30 00:00:00 end: 2023-12-06 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=4 strategy("SORAN Buy and Close Buy", pyramiding=1, initial_capital=10000, default_qty_type=strategy.percent_of_equity, default_qty_value=10, overlay=false) ////Buy and Close-Buy messages Long_message = input("") Close_message = input("") ///////////// 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=20, maxval=99, title="Long-Term Look Back Current Bar Has To Close Below This Value OR Medium Term--Default=40") mtLB = input(14, minval=1, maxval=40, 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 ? #00E676 : #787B86 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=plot.style_line, color=#FF5252) plot(filteredAlert, "Filtered Alert", style=plot.style_line, color=#E040FB) plot(aggressiveAlert, "Aggressive Alert", style=plot.style_line, color=#FF9800) if (filteredAlert or aggressiveAlert) strategy.entry("Buy", strategy.long, alert_message = Long_message) if (filteredAlert or aggressiveAlert) alert("Buy Signal", alert.freq_once_per_bar) if (isOverBought) strategy.close("Buy", alert_message = Close_message)