Chiến lược MACD đa khung thời gian là một chiến lược giao dịch định lượng theo dõi xu hướng sử dụng chỉ số MACD trên nhiều khung thời gian. Chiến lược này tạo ra tín hiệu giao dịch bằng cách đánh giá xu hướng giá có phù hợp trong các khoảng thời gian khác nhau hay không (3 phút, 5 phút, 15 phút, 30 phút).
Khái niệm cơ bản của chiến lược này là tính toán tình hình giao thoa chỉ số MACD trên nhiều khung thời gian (3 phút, 5 phút, 15 phút, 30 phút). Đầu tiên chỉ số MACD được tính trên mỗi khung thời gian để đánh giá xu hướng giá (lên hoặc xuống) trong khung thời gian đó. Sau đó, xu hướng giá trên nhiều khung thời gian được đánh giá toàn diện:
Bằng cách đánh giá xu hướng qua các khung thời gian, tiếng ồn thị trường ngắn hạn có thể được lọc hiệu quả, làm cho các tín hiệu giao dịch đáng tin cậy hơn.
Chiến lược này có những lợi thế sau:
Chiến lược này cũng có những rủi ro sau:
Các giải pháp tương ứng:
Chiến lược này có thể được tối ưu hóa thêm trong các khía cạnh sau:
Chiến lược Multi Timeframe MACD sử dụng khả năng đánh giá xu hướng của chỉ số MACD để phát hiện chuyển động giá trên các khung thời gian, có thể lọc hiệu quả tiếng ồn và cải thiện chất lượng tín hiệu. Chiến lược này có thể được điều chỉnh linh hoạt cho các sản phẩm và môi trường thị trường khác nhau thông qua điều chỉnh tham số và tối ưu hóa quy tắc, và có tính thực tế mạnh mẽ.
/*backtest start: 2023-10-28 00:00:00 end: 2023-11-27 00:00:00 period: 1h basePeriod: 15m exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //@version=2 strategy("[RichG] Easy MTF Strategy", overlay=false) TF_1_time = input("3", "Timeframe 1") TF_2_time = input("5", "Timeframe 2") TF_3_time = input("15", "Timeframe 3") TF_4_time = input("30", "Timeframe 4") fastLen = input(title="Fast Length", defval=12) slowLen = input(title="Slow Length", defval=26) sigLen = input(title="Signal Length", defval=9) [macdLine, signalLine, _] = macd(close, fastLen, slowLen, sigLen) width = 5 upcolor = green downcolor = red neutralcolor = blue linestyle = line TF_1 = request.security(syminfo.tickerid, TF_1_time, open) < request.security(syminfo.tickerid, TF_1_time, close) ? true:false TF_1_color = TF_1 ? upcolor:downcolor TF_2 = request.security(syminfo.tickerid, TF_2_time, open) < request.security(syminfo.tickerid, TF_2_time, close) ? true:false TF_2_color = TF_2 ? upcolor:downcolor TF_3 = request.security(syminfo.tickerid, TF_3_time, open) < request.security(syminfo.tickerid, TF_3_time, close) ? true:false TF_3_color = TF_3 ? upcolor:downcolor TF_4 = request.security(syminfo.tickerid, TF_4_time, open) < request.security(syminfo.tickerid, TF_4_time, close) ? true:false TF_4_color = TF_4 ? upcolor:downcolor TF_global = TF_1 and TF_2 and TF_3 and TF_4 TF_global_bear = TF_1 == false and TF_2 == false and TF_3 == false and TF_4 == false TF_global_color = TF_global ? green : TF_global_bear ? red : white TF_trigger_width = TF_global ? 6 : width plot(1, style=linestyle, linewidth=width, color=TF_1_color) plot(5, style=linestyle, linewidth=width, color=TF_2_color) plot(10, style=linestyle, linewidth=width, color=TF_3_color) plot(15, style=linestyle, linewidth=width, color=TF_4_color) plot(25, style=linestyle, linewidth=4, color=TF_global_color) exitCondition_Long = TF_global_bear exitCondition_Short = TF_global longCondition = TF_global if (longCondition) strategy.entry("MTF_Long", strategy.long) shortCondition = TF_global_bear if (shortCondition) strategy.entry("MTF_Short", strategy.short) strategy.close("MTF_Long", when=exitCondition_Long) strategy.close("MTF_Short", when=exitCondition_Short)