Chiến lược giao dịch định lượng dựa trên Bollinger Bands và MACD

Tác giả:ChaoZhang, Ngày: 2024-02-23 14:30
Tags:

img

Tổng quan

Chiến lược này là một chiến lược giao dịch định lượng dựa trên các chỉ số Bollinger Bands và MACD. Nó kết hợp giao dịch đột phá Bollinger Bands và theo dõi xu hướng MACD để cải thiện chất lượng tín hiệu giao dịch.

Nguyên tắc chiến lược

Chiến lược chủ yếu sử dụng Bollinger Bands và chỉ số MACD để xác định tín hiệu giao dịch.

Bollinger Bands bao gồm một dải giữa, dải trên và dải dưới. Một tín hiệu mua được tạo ra khi giá vượt qua dải dưới. Một tín hiệu bán được tạo ra khi giá vượt qua dải trên. Chiến lược sử dụng nguyên tắc đột phá của Bollinger Bands để xác định các tín hiệu đột phá mạnh hơn.

Chỉ số MACD phản ánh mối quan hệ giữa đường trung bình động ngắn hạn và dài hạn. Nó sử dụng chéo đường chênh lệch và đường tín hiệu để xác định các điểm nhập và thoát. Chiến lược này tích hợp việc sử dụng các chỉ số MACD để lọc các tín hiệu giao dịch Bollinger Bands và tạo ra các tín hiệu mua hiệu quả hơn khi đường chênh lệch vượt qua trên đường tín hiệu.

Nhìn chung, chiến lược kết hợp theo dõi xu hướng của Bollinger Bands và lợi thế trung bình động của MACD, nhằm mục đích nắm bắt sự biến động lớn hơn của thị trường trong xu hướng mạnh.

Ưu điểm của Chiến lược

  1. Kết hợp Bollinger Bands và chỉ số MACD làm cho tín hiệu giao dịch đáng tin cậy hơn.

  2. Theo dõi xu hướng Bollinger Bands và đường chéo trung bình động MACD có thể tạo ra các tín hiệu nhập cảnh mạnh hơn trong các thị trường xu hướng.

  3. Các tín hiệu sai có thể được lọc hiệu quả thông qua đánh giá hai chỉ số, làm giảm rủi ro giao dịch.

  4. Có rất nhiều chỗ cho tối ưu hóa tham số của chiến lược, có thể được điều chỉnh theo các sản phẩm và chu kỳ khác nhau.

Rủi ro của chiến lược

  1. Trong các thị trường giới hạn phạm vi, các tín hiệu giao dịch được tạo ra bởi Bollinger Bands và MACD có thể thường xuyên, mang lại rủi ro giao dịch quá mức.

  2. Ba đường chéo vàng MACD liên tiếp ở mức thấp có thể đối mặt với nguy cơ đảo ngược xuống.

  3. Chiến lược sử dụng nhiều chỉ số, làm cho tối ưu hóa tham số và thử nghiệm chiến lược khá khó khăn.

Để giải quyết những rủi ro này, các phương pháp như điều chỉnh thời gian giữ, thiết lập dừng lỗ, tối ưu hóa các tham số có thể được sử dụng để kiểm soát chúng.

Hướng dẫn tối ưu hóa chiến lược

  1. Kiểm tra các thông số Bollinger Bands dài hơn để giảm tần suất giao dịch.

  2. Tối ưu hóa các thông số đường MACD nhanh và chậm để cải thiện độ nhạy của chỉ số.

  3. Thêm các chỉ số khác để lọc, như KDJ, RSI vv, để cải thiện chất lượng tín hiệu.

  4. Thiết lập dừng động để tự động thoát khỏi giao dịch và kiểm soát rủi ro giao dịch duy nhất.

Kết luận

Theo lý thuyết, bằng cách tích hợp giao dịch đột phá Bollinger Bands và lọc chỉ số MACD, chiến lược này có thể tạo ra các tín hiệu giao dịch chất lượng cao. Thông qua tối ưu hóa tham số và các biện pháp kiểm soát rủi ro, kết quả backtest tốt có thể đạt được. Tuy nhiên, không có chiến lược nào có thể tránh hoàn toàn lỗ. Hiệu suất giao dịch thực tế cần đánh giá thận trọng.


/*backtest
start: 2024-01-01 00:00:00
end: 2024-01-31 23:59:59
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=5
strategy("Nabz-BBMACD-2022-V1.1", shorttitle="BBM-Nabz", overlay=true)


// My 1st Pine Scrpt Indicator
// Work on best on 1Hr Chart
// Open for Help/Donations.


var float lastentry=1
int result = 0
float x = 0
drawshape = false

/////////////EMA
shortest = ta.ema(close, 20)
short = ta.ema(close, 50)
longer = ta.ema(close, 100)
longest = ta.ema(close, 200)

plot(shortest, color = color.red)
plot(short, color = color.orange)
plot(longer, color = color.aqua)
plot(longest, color = color.blue)

///////////// RSI
RSIlength = input(6,title="RSI Period Length") 
RSIoverSold = 50
RSIoverBought = 50
price = close
vrsi = ta.rsi(price, RSIlength)


///////////// Bollinger Bands
BBlength = input.int(200, minval=1,title="Bollinger Period Length")
BBmult = 2 // input(2.0, minval=0.001, maxval=50,title="Bollinger Bands Standard Deviation")
BBbasis = ta.sma(price, BBlength)
BBdev = BBmult * ta.stdev(price, BBlength)
BBupper = BBbasis + BBdev
BBlower = BBbasis - BBdev
source = close
buyEntry = ta.crossover(source, BBlower)
sellEntry = ta.crossunder(source, BBupper)



////////////// MACD
fastLength = input(12)
slowlength = input(26)
MACDLength = input(9)
MACD = ta.ema(close, fastLength) - ta.ema(close, slowlength)
aMACD = ta.ema(MACD, MACDLength)
delta = MACD - aMACD


///////////// Colors
switch1=input(true, title="Enable Bar Color?")
switch2=input(true, title="Enable Background Color?")
TrendColor = RSIoverBought and (price[1] > BBupper and price < BBupper) and BBbasis < BBbasis[1] ? color.red : RSIoverSold and (price[1] < BBlower and price > BBlower) and BBbasis > BBbasis[1] ? color.green : na


///////////Strategy

bool tcu = not (ta.crossunder(price[0],shortest[0]))


if (((price[1]<BBlower[1]) and (ta.crossover(price,BBlower))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 1st IF")
    
if (((ta.crossover(delta, 0.0) and (ta.crossover(price,BBlower)))))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 2nd IF")    
    
if (((ta.crossover(delta, 0.0)) and (low[0]>shortest[0])) and (price[1]<low))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 3rd IF")   //else

if (((ta.crossover(delta, 0.01)) and (high[1]<BBupper)) and (tcu))
    lastentry := low[1]
    strategy.entry("RSI_BB_L", strategy.long, comment="Buy 4th IF")

       
if ((ta.crossunder(low[0],shortest[0]) and close<shortest))
    strategy.close(id="RSI_BB_L", comment="Close by 1st IF")
    
    
    
if (price<lastentry)
    drawshape := true
    
if (price<strategy.opentrades.entry_price(0)/1.01175734321249)
    strategy.close(id="RSI_BB_L", comment="Close by 2nd IF")



plot(strategy.opentrades.entry_price(0), color=color.yellow)


Thêm nữa