
Chiến lược này là một hệ thống giao dịch theo dõi xu hướng kết hợp MACD (trend indicator đường trung bình di chuyển) và SAR (trend reversal indicator đường dừng lỗ). Bằng cách kết hợp hữu cơ các chỉ số động lực với các chỉ số xu hướng, phân tích định lượng về cường độ xu hướng đồng thời xác định hướng xu hướng thị trường, để nắm bắt cơ hội giao dịch tốt hơn. Chiến lược này sử dụng các đường chéo của đường MACD để xác định động lượng xu hướng, đồng thời sử dụng điểm SAR để xác định hướng xu hướng và thiết lập điểm dừng chân di chuyển.
Chiến lược này bao gồm hai phần:
Quy tắc nhập cảnh:
Luật chơi:
Thêm bộ lọc môi trường thị trường: Có thể giới thiệu các chỉ số biến động (như ATR) để đánh giá tình trạng thị trường, giảm tần suất giao dịch hoặc tạm dừng giao dịch trong thời gian biến động thấp.
Cải thiện cơ chế dừng lỗ: Ngoài SAR Stop, có thể tăng sự kết hợp của Stop Ratio cố định và Stop Ratio di động để tăng sự ổn định của kiểm soát rủi ro.
Lựa chọn tham số tối ưu hóa: Các phương pháp học máy có thể tự động tối ưu hóa các tham số MACD và SAR cho các chu kỳ thị trường khác nhau.
Thêm phân tích khối lượng giao dịch: Kết hợp các chỉ số giao dịch để xác nhận cường độ của xu hướng và tăng độ tin cậy của tín hiệu.
Chiến lược này được kết hợp với MACD và SAR đường parabola để xây dựng một hệ thống giao dịch theo dõi xu hướng hoàn chỉnh hơn. Chiến lược có những ưu điểm như tín hiệu rõ ràng, có thể kiểm soát rủi ro và thích ứng mạnh mẽ, nhưng cũng có những hạn chế như phụ thuộc vào xu hướng, tín hiệu chậm trễ.
/*backtest
start: 2024-02-21 00:00:00
end: 2024-11-25 00:00:00
period: 1d
basePeriod: 1d
exchanges: [{"eid":"Binance","currency":"BTC_USDT"}]
*/
//@version=5
strategy("MACD + Parabolic SAR Strategy", shorttitle="MACD+SAR", overlay=true)
//========== User Inputs ==========//
// MACD parameters
fastLength = input.int(12, "MACD Fast Length")
slowLength = input.int(26, "MACD Slow Length")
signalLength = input.int(9, "MACD Signal Length")
// SAR parameters (start, step, maximum)
afStart = input.float(0.02, "SAR Start")
afIncrement = input.float(0.02, "SAR Increment")
afMax = input.float(0.2, "SAR Max")
//========== MACD Calculation ==========//
[macdLine, signalLine, histLine] = ta.macd(close, fastLength, slowLength, signalLength)
//========== Parabolic SAR Calculation ==========//
sarValue = ta.sar(afStart, afIncrement, afMax)
//========== Entry Conditions ==========//
// Long: MACD > Signal + close > SAR
longCondition = (macdLine > signalLine) and (close > sarValue)
// Short: MACD < Signal + close < SAR
shortCondition = (macdLine < signalLine) and (close < sarValue)
//========== Enter Positions ==========//
if longCondition
strategy.entry("Long", strategy.long)
if shortCondition
strategy.entry("Short", strategy.short)
//========== Exit Positions on Opposite Signal ==========//
if strategy.position_size > 0 and shortCondition
strategy.close("Long", comment="Exit Long")
if strategy.position_size < 0 and longCondition
strategy.close("Short", comment="Exit Short")