Chiến lược tín hiệu mua được lọc bằng chỉ báo kép

Tác giả:ChaoZhang, Ngày: 2023-12-07 10:43:01
Tags:

img

Tổng quan

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 logic

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:

  1. Giá chỉ bị bật ra khỏi dải Bollinger phía dưới lên
  2. Hiện tại đóng cửa cao hơn đóng cửa N thanh trước đây, cho thấy sức mua
  3. Khoảng thời gian đóng cửa hiện tại thấp hơn khoảng thời gian nhìn lại dài hạn hoặc trung hạn đóng cửa để rút lui

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.

Phân tích sức mạnh

Chiến lược lọc hai chỉ số có một số điểm mạnh chính:

  1. Thiết kế chỉ số kép làm cho tín hiệu mua đáng tin cậy hơn bằng cách tránh các tín hiệu sai.
  2. Các điều kiện lọc nhiều ngăn ngừa mua quá mức trong các thị trường giới hạn phạm vi.
  3. Sự kết hợp của các chỉ số RSI Stochastic mức bán quá mức và Bollinger Bands phát hiện ra sự bất thường về giá.
  4. Bộ lọc sức mua đảm bảo động lực đầy đủ sau khi mua.
  5. Các bộ lọc pullback xác nhận thêm độ tin cậy của các vùng mua.

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.

Phân tích rủi ro

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:

  1. Điều chỉnh tham số không chính xác có thể dẫn đến tín hiệu quá thường xuyên hoặc bảo thủ.
  2. Lý thuyết lọc nghiêm ngặt có thể bỏ lỡ một số cơ hội trong các thị trường chuyển động nhanh.
  3. Các chỉ số khác nhau có thể tạo ra tín hiệu sai.
  4. Thiếu xác định xu hướng làm lộ ra chiến lược trong các thị trường giảm.

Các cải tiến được đề xuất để giảm thiểu rủi ro là:

  1. Điều chỉnh các thông số chỉ số để cân bằng độ nhạy của bộ lọc.
  2. Thiết lập các bộ lọc xác định xu hướng để tránh bẫy bò.
  3. Kết hợp các cơ chế dừng lỗ.

Cơ hội gia tăng

Chiến lược có thể được cải thiện hơn nữa trong các khía cạnh sau:

  1. Kiểm tra nhiều kết hợp chỉ số hơn để có các mô hình thời gian mua tốt hơn, ví dụ: VRSI, DMI vv.
  2. Đưa ra các thuật toán máy học để tự động tối ưu hóa các thông số.
  3. Xây dựng các cơ chế dừng lỗ thích nghi để theo dõi dừng tại các mốc lợi nhuận.
  4. Tích hợp các chỉ số khối lượng để đảm bảo đủ động lực.
  5. Tối ưu hóa các mô hình quản lý tiền như kích thước vị trí động để hạn chế tổn thất.

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.

Kết luận

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)


Thêm nữa