
Chiến lược theo dõi xu hướng MACD là một chiến lược giao dịch định lượng dựa trên chỉ số MACD. Chiến lược này đánh giá xu hướng thị trường bằng cách xác định các tín hiệu của chỉ số MACD và các tín hiệu chết.
Một chiến lược theo dõi xu hướng của MACD có một logic cốt lõi:
Thông qua cơ chế theo dõi xu hướng này, chiến lược này có thể bắt kịp sự biến đổi xu hướng thị trường và tạo ra lợi nhuận.
Chiến lược theo dõi xu hướng MACD có những ưu điểm sau:
Các chiến lược theo dõi xu hướng MACD cũng có những rủi ro sau:
Các biện pháp tối ưu hóa sau đây có thể được áp dụng đối với các rủi ro trên:
Chiến lược theo dõi xu hướng MACD có thể được tối ưu hóa từ:
Tối ưu hóa các tham số chỉ số MACD, giảm tỷ lệ tín hiệu giả. Có thể thử nghiệm các tham số MACD khác nhau.
Các chỉ số khác như tăng số lượng giao dịch có thể được cài đặt điều kiện số lượng giao dịch tối thiểu
Thiết lập cơ chế theo dõi động. Bạn có thể điều chỉnh điểm dừng theo tỷ lệ biến động trong thời gian thực.
Tối ưu hóa logic xác định tín hiệu mở đầu. Có thể đặt các điều kiện kích hoạt tín hiệu nghiêm ngặt hơn.
Kết hợp với mô hình học máy để lọc tín hiệu. Mô hình có thể được đào tạo để đánh giá độ tin cậy của tín hiệu.
Chiến lược theo dõi xu hướng MACD nói chung là một chiến lược định lượng trưởng thành hơn. Chiến lược này sử dụng chỉ số MACD để đánh giá xu hướng thị trường, kết hợp với rủi ro kiểm soát cơ chế dừng lỗ, có thể theo dõi xu hướng giá cổ phiếu một cách hiệu quả. Tuy nhiên, chỉ số MACD cũng có một số sai sót, dễ tạo ra tín hiệu giả.
/*backtest
start: 2023-11-10 00:00:00
end: 2023-12-10 00:00:00
period: 1h
basePeriod: 15m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MACD Cross Strategy", overlay=true)
// Get MACD values
[macdLine, signalLine, _] = ta.macd(close, 12, 26, 9)
var float entryLongPrice = na
var float entryShortPrice = na
var float highestLongProfit = 0
var float highestShortProfit = 0
var float highestMACD = 0
var float lowestMACD = 0
var bool haveOpenedLong = false
var bool haveOpenedShort = false
var float stoploss = 0.04 // To be adjust for different investment
var float minProfit = 0.05 // To be adjust for different investment
if macdLine > 0
lowestMACD := 0
highestMACD := math.max(highestMACD, macdLine)
haveOpenedShort := false
else
highestMACD := 0
lowestMACD := math.min(lowestMACD, macdLine)
haveOpenedLong := false
// Enter long position when MACD line crosses above the signal line
if ta.crossover(macdLine, signalLine) and macdLine < highestMACD and macdLine > 0 and haveOpenedLong == false
strategy.entry("Long", strategy.long)
strategy.exit("Exit Long", from_entry = "Long", stop=close*(1 - stoploss))
entryLongPrice := close
haveOpenedLong := true
if ta.crossunder(macdLine, signalLine) and macdLine > lowestMACD and macdLine < 0 and haveOpenedShort == false
strategy.entry("Short", strategy.short)
strategy.exit("Exit Short", from_entry = "Short", stop=close*(1 + stoploss))
entryShortPrice := close
haveOpenedShort := true
// log.info("entryLongPrice:{0}", entryLongPrice)
if strategy.position_size > 0
profit = close - entryLongPrice
log.info("profit:{0}", profit)
if profit > 0
highestLongProfit := math.max(highestLongProfit, profit)
if profit / entryLongPrice > minProfit and highestLongProfit * 0.8 > profit
strategy.close("Long")
highestLongProfit := 0
if strategy.position_size < 0
profit = entryShortPrice - close
if profit > 0
highestShortProfit := math.max(highestShortProfit, profit)
log.info("highestShortProfit={0}, profit={1}", highestShortProfit, profit)
if profit / entryShortPrice > minProfit and highestShortProfit * 0.8 > profit
strategy.close("Short")
highestShortProfit := 0