
Chiến lược MACD đa khung thời gian (Multi Timeframe MACD Strategy) là một chiến lược giao dịch định lượng sử dụng chỉ số MACD để theo dõi xu hướng trên nhiều khung thời gian. Chiến lược này phát ra tín hiệu giao dịch bằng cách tính toán chỉ số MACD trên các chu kỳ thời gian khác nhau (thời gian 3 phút, 5 phút, 15 phút, 30 phút) để xác định xem xu hướng giá có phù hợp giữa các chu kỳ khác nhau hay không.
Lập luận cốt lõi của chiến lược này là tính toán MACD trên nhiều khung thời gian: 3 phút, 5 phút, 15 phút, 30 phút. Đầu tiên, tính toán MACD trên mỗi khung thời gian, dựa trên MACD để đánh giá xu hướng giá trong khung thời gian đó: tăng hoặc giảm.
Bằng cách đánh giá xu hướng theo khung thời gian, nó có thể loại bỏ hiệu quả tiếng ồn thị trường ngắn hạn và làm cho tín hiệu giao dịch đáng tin cậy hơn.
Chiến lược này có những ưu điểm sau:
Chiến lược này cũng có những rủi ro sau:
Giải pháp tương ứng:
Chiến lược này có thể được tiếp tục tối ưu hóa trong các khía cạnh sau:
Chiến lược MACD đa khung thời gian sử dụng chức năng đánh giá xu hướng của chỉ số MACD, thực hiện phát hiện chuyển động giá trên khung thời gian, có thể lọc tiếng ồn hiệu quả, 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 thông qua tham số và tối ưu hóa quy tắc, thích ứng linh hoạt với các giống và môi trường hoạt động khác nhau, có tính thực tiễn 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)