
Chiến lược này tạo ra MACD oscillator bằng cách tính toán chênh lệch giữa đường EMA nhanh và đường EMA chậm, sau đó tạo ra đường tín hiệu bằng cách tính toán đường trung bình của MACD, do đó xây dựng một hệ thống lọc kép. Khi đường MACD đi qua đường tín hiệu từ phía dưới tạo ra tín hiệu mua và khi đường MACD đi qua đường tín hiệu từ phía trên đến phía dưới tạo ra tín hiệu bán, tận dụng biến động ngắn hạn và trung hạn của giá.
Chỉ số trung tâm của chiến lược này là dao động MACD, được tính bằng cách trừ EMA đường nhanh (thường được thiết lập là 12 ngày EMA) trừ EMA đường chậm (thường được thiết lập là 26 ngày EMA). EMA đường nhanh nhạy hơn, có thể nắm bắt sự biến động ngắn hạn của giá; EMA đường chậm phản ứng chậm hơn với sự thay đổi giá.
Chiến lược này đặt các tham số đầu vào thành chiều dài đường nhanh, chiều dài đường chậm, nguồn giá, chiều dài đường tín hiệu và chu kỳ làm mịn. Các tham số có thể được điều chỉnh theo thị trường khác nhau để tìm kiếm sự kết hợp tham số tốt nhất. Các khối màu nền hiển thị phạm vi thời gian đo lường.
Chỉ số MACD là một chỉ số cổ điển và dễ hiểu, có thể nắm bắt hiệu quả các cơ hội đảo ngược ngắn và trung hạn.
Hệ thống MACD được xây dựng với hai EMA có độ mịn tốt hơn so với hệ thống MA đơn.
Có nhiều tham số có thể điều chỉnh, có thể tối ưu hóa tham số cho các thị trường khác nhau.
Các chỉ số giao thông tổng hợp có thể nhận ra tín hiệu chất lượng cao.
Trong trường hợp chấn động, MACD sẽ tạo ra nhiều tín hiệu sai hơn.
Không thể đánh giá được xu hướng, có thể có sự mất mát khi giao thoa với xu hướng.
Giới hạn về thời gian phản hồi có thể bỏ qua các trường hợp cực đoan.
Cài đặt tham số cần kết hợp nhiều dữ liệu thị trường hơn để tối ưu hóa, nếu không có thể overfit một phân khúc thị trường.
Có thể kiểm soát rủi ro bằng cách kết hợp các chỉ số đánh giá xu hướng, thiết lập cơ chế dừng lỗ. Đồng thời mở rộng phạm vi đo lường lại và không gian mẫu thị trường để tối ưu hóa tham số.
Kiểm tra các nguồn giá khác nhau, chẳng hạn như giá đóng cửa, giá trung bình, giá đặt lại.
Tìm kiếm các tham số tốt nhất dựa trên dữ liệu lịch sử.
Kết hợp các chỉ số khác để đánh giá chất lượng tín hiệu. Ví dụ: tín hiệu số lượng giao thông.
Kết hợp xu hướng và phán đoán dải sóng để tránh xung đột lớn với xu hướng.
Chiến lược này là một chiến lược lựa chọn thời gian cổ điển và thực tế bằng cách xây dựng bộ lọc EMA kép, nắm bắt hiện tượng đảo chiều của chu kỳ ngắn trong giá. Bạn có thể kiểm soát rủi ro bằng cách tối ưu hóa tham số, lọc tín hiệu và phương tiện dừng lỗ.
/*backtest
start: 2022-12-19 00:00:00
end: 2023-12-25 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
//@version=4
strategy(title="MACD Histogram Backtest", shorttitle="MACD")
// Getting inputs
fast_length = input(title="Fast Length", type=input.integer, defval=12)
slow_length = input(title="Slow Length", type=input.integer, defval=26)
src = input(title="Source", type=input.source, defval=close)
signal_length = input(title="Signal Smoothing", type=input.integer, minval = 1, maxval = 50, defval = 9)
sma_source = input(title="Simple MA(Oscillator)", type=input.bool, defval=false)
sma_signal = input(title="Simple MA(Signal Line)", type=input.bool, defval=false)
// Plot colors
col_grow_above = #26A69A
col_grow_below = #FFCDD2
col_fall_above = #B2DFDB
col_fall_below = #EF5350
col_macd = #0094ff
col_signal = #ff6a00
// Calculating
fast_ma = sma_source ? sma(src, fast_length) : ema(src, fast_length)
slow_ma = sma_source ? sma(src, slow_length) : ema(src, slow_length)
macd = fast_ma - slow_ma
signal = sma_signal ? sma(macd, signal_length) : ema(macd, signal_length)
hist = macd - signal
grow = (hist[1] < hist)
fall = (hist[1] > hist) and hist >= 0
stop = (hist[1] > hist)
plot(hist, title="Histogram", style=plot.style_columns, color=(hist>=0 ? (hist[1] < hist ? col_grow_above : col_fall_above) : (hist[1] < hist ? col_grow_below : col_fall_below) ), transp=0 )
plot(macd, title="MACD", color=col_macd, transp=0)
plot(signal, title="Signal", color=col_signal, transp=0)
//Strategy Testing
// Component Code Start
// Example usage:
// if testPeriod()
// strategy.entry("LE", strategy.long)
testStartYear = input(2017, "Backtest Start Year")
testStartMonth = input(01, "Backtest Start Month")
testStartDay = input(2, "Backtest Start Day")
testPeriodStart = timestamp(testStartYear,testStartMonth,testStartDay,0,0)
testStopYear = input(2019, "Backtest Stop Year")
testStopMonth = input(12, "Backtest Stop Month")
testStopDay = input(30, "Backtest Stop Day")
testPeriodStop = timestamp(testStopYear,testStopMonth,testStopDay,0,0)
// A switch to control background coloring of the test period
testPeriodBackground = input(title="Color Background?", type=input.bool, defval=true)
testPeriodBackgroundColor = testPeriodBackground and (time >= testPeriodStart) and (time <= testPeriodStop) ? #00FF00 : na
bgcolor(testPeriodBackgroundColor, transp=97)
testPeriod() => true
// Component Code Stop
//Entry and Close settings
if testPeriod()
strategy.entry("grow", true, 10, when = grow, limit = close)
strategy.close("grow", when = fall)
strategy.close("grow", when = stop)
//if testPeriod()
// strategy.entry("fall", false, 1000, when = fall, limit = close)
// strategy.close("fall", when = grow)