Bollinger Bands, RSI, MACD và Stochastic Multi-indicator Fusion Trading Strategy

Tác giả:ChaoZhang, Ngày: 2023-09-28 12:06:39
Tags:

Tổng quan

Chiến lược này tích hợp Bollinger Bands, RSI, MACD và Stochastic, bốn chỉ số kỹ thuật khác nhau, để đưa ra các quyết định dài và ngắn. Đầu tiên, nó xác định giá có nằm ngoài kênh Bollinger Bands và có vị trí dài hoặc ngắn tương ứng. Sau đó nó kiểm tra xem RSI có ở vùng mua quá nhiều hay bán quá nhiều và vào dựa trên hướng. Sau đó nó tìm kiếm tín hiệu chéo vàng và chéo chết của MACD và có vị trí tương ứng. Cuối cùng nó xác định chéo vàng và chéo chết Stochastic trong các vùng mua quá nhiều / bán quá nhiều. Với các tín hiệu từ cả bốn chỉ số, chiến lược áp dụng các vị trí kim tự tháp tích cực hơn để tối đa hóa lợi nhuận.

Nguyên tắc

Chiến lược chủ yếu sử dụng bốn chỉ số - Bollinger Bands, RSI, MACD và Stochastic.

Bollinger Bands được vẽ ở mức độ lệch chuẩn trên và dưới một đường trung bình di chuyển đơn giản. Giá bên ngoài các dải cho thấy giá đã di chuyển bên ngoài phân phối bình thường và do đó cơ hội giao dịch.

Chỉ số RSI tính toán động lực như là tỷ lệ đóng cửa cao hơn với đóng cửa thấp hơn. Giá trị dưới 30 cho thấy tình trạng bán quá mức trong khi trên 70 cho thấy mua quá mức. Chúng phục vụ như tín hiệu giao dịch.

MACD là sự khác biệt giữa các đường trung bình động ngắn hạn và dài hạn.

K dưới 20 cho thấy bán quá mức trong khi trên 80 cho thấy mua quá mức. K vượt trên D cho tín hiệu tăng trong khi vượt dưới cho tín hiệu giảm.

Kết hợp các tín hiệu từ bốn chỉ số này cải thiện độ chính xác của các mục nhập giao dịch. Cụ thể, đi dài khi giá vượt quá dải trên của Bollinger Bands, RSI dưới 30, đường chéo vàng MACD và Stochastic K vượt trên D dưới 20.

Ưu điểm

Ưu điểm chính của chiến lược này là kết hợp nhiều chỉ số cải thiện độ chính xác và tỷ lệ chiến thắng.

Thứ nhất, sử dụng các chỉ số trên các khung thời gian khác nhau - Bollinger cho trung hạn / dài hạn, và MACD, RSI, Stochastic cho ngắn hạn, làm giảm lỗi.

Thứ hai, yêu cầu tất cả các chỉ số phải phù hợp làm giảm các tín hiệu sai. Chỉ tham gia khi Bollinger, RSI, MACD và Stochastic đều đưa ra tín hiệu tránh sự thất bại của các chỉ số duy nhất.

Ngoài ra, kết hợp các chỉ số bổ sung tận dụng điểm mạnh của mỗi chỉ số. RSI xác định quá mua / quá bán, thay đổi xu hướng Bollinger, thay đổi động lực MACD vv.

Cuối cùng, các vị trí kim tự tháp với tín hiệu được xác nhận tối đa hóa lợi nhuận so với các giao dịch số lượng cố định.

Rủi ro

Một số rủi ro cần xem xét:

Thứ nhất, nhiều thông số và chỉ số làm cho tối ưu hóa khó khăn.

Thứ hai, các tín hiệu chỉ số đồng thời rất hiếm, dẫn đến tần suất giao dịch thấp.

Thứ ba, kim tự tháp có thể làm tăng tổn thất nếu các chỉ báo đưa ra tín hiệu sai.

Cuối cùng, các tín hiệu chỉ số không nhất quán cần các quy tắc quyết định. Chiến lược nên có logic định lượng khi các chỉ số xung đột.

Những cải tiến

Một số cách để cải thiện chiến lược:

  1. Tối ưu hóa các thông số thông qua các thuật toán di truyền, tìm kiếm lưới vv để tìm kết hợp tốt nhất.

  2. Thêm các quy tắc dừng lỗ để kiểm soát lỗ khi giá di chuyển bất lợi vượt quá ngưỡng.

  3. Cải thiện logic đầu vào với hệ thống điểm cho các tín hiệu chỉ số không nhất quán và các thông số cân nhắc.

  4. Tối ưu hóa việc thoát bằng dữ liệu lợi nhuận/mất trong các giai đoạn giữ để tạo ra các quy tắc thoát lý tưởng.

  5. Tối ưu hóa các sản phẩm và khung thời gian phù hợp nhất cho chiến lược.

  6. Tài khoản cho chi phí giao dịch như trượt và hoa hồng trong tối ưu hóa tham số.

  7. Sử dụng máy học để tối ưu hóa thích nghi.

Kết luận

Chiến lược này kết hợp nhiều chỉ số và cơ chế xác nhận để ra quyết định. Với các tham số và kiểm soát rủi ro thích hợp, nó có thể đạt được kết quả tốt. Nhưng sự phức tạp và rủi ro của việc điều chỉnh cần phải được giải quyết thông qua các cải tiến liên tục cho sự ổn định. Tìm kiếm sự kết hợp các chỉ số tối ưu, các quy tắc nhập / xuất khoa học và kiểm soát rủi ro là chìa khóa cho lợi nhuận bền vững trong các điều kiện thị trường.


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

//@version=2
strategy("MD strategy", overlay=true)
lengthrsi = input( 14 )
overSold = input( 30 )
overBought = input( 70 )
price = close
source = close
lengthbb = input(20, minval=1)
mult = input(2.0, minval=0.001, maxval=50)
direction = input(0, title = "Strategy Direction",  minval=-1, maxval=1)
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
consecutiveBarsUp = input(3)
consecutiveBarsDown = input(3)
lengthch = input( minval=1, maxval=1000, defval=5)
upBound = highest(high, lengthch)
downBound = lowest(low, lengthch)
lengthst = input(14, minval=1)
OverBoughtst = input(80)
OverSoldst = input(20)
smoothK = 3
smoothD = 3

k = sma(stoch(close, high, low, lengthst), smoothK)
d = sma(k, smoothD)



ups = price > price[1] ? nz(ups[1]) + 1 : 0
dns = price < price[1] ? nz(dns[1]) + 1 : 0
MACD = ema(close, fastLength) - ema(close, slowlength)
aMACD = ema(MACD, MACDLength)
delta = MACD - aMACD

strategy.risk.allow_entry_in(direction == 0 ? strategy.direction.all : (direction < 0 ? strategy.direction.short : strategy.direction.long))

basis = sma(source, lengthbb)
dev = mult * stdev(source, lengthbb)

upper = basis + dev
lower = basis - dev

vrsi = rsi(price, lengthrsi)

if (not na(vrsi))
    if (crossover(vrsi, overSold))
        strategy.entry("RsiLE", strategy.long, comment="RsiLE")
    if (crossunder(vrsi, overBought))
        strategy.entry("RsiSE", strategy.short, comment="RsiSE")

if (crossover(source, lower))
    strategy.entry("BBandLE", strategy.long, stop=lower, oca_name="BollingerBands",  comment="BBandLE")
else
    strategy.cancel(id="BBandLE")

if (crossunder(source, upper))
    strategy.entry("BBandSE", strategy.short, stop=upper, oca_name="BollingerBands",  comment="BBandSE")
else
    strategy.cancel(id="BBandSE")
    
    
if (not na(k) and not na(d))
    if (crossover(k,d) and k < OverSoldst)
        strategy.entry("StochLE", strategy.long, comment="StochLE")
    if (crossunder(k,d) and k > OverBoughtst)
        strategy.entry("StochSE", strategy.short, comment="StochSE")   
        
if (crossover(delta, 0))
    strategy.entry("MacdLE", strategy.long, comment="MacdLE")

if (crossunder(delta, 0))
    strategy.entry("MacdSE", strategy.short, comment="MacdSE")


Thêm nữa