
Cốt lõi của chiến lược này dựa trên các chỉ số được phát triển bởi Andrew Abraham trong bài viết được xuất bản trong tạp chí TASC của tạp chí Trend Trader vào tháng 9 năm 1998. Chỉ số này sử dụng phạm vi biến động thực tế trung bình và kênh giá để xác định hướng của xu hướng thị trường, kết hợp với chỉ số MACD để lọc tín hiệu giao dịch nhằm nắm bắt xu hướng đường dài giữa.
Chiến lược này đầu tiên tính toán trung bình di chuyển trọng lượng của phạm vi biến động thực tế trung bình 21 ngày ((ATR) làm phạm vi biến động cơ sở. Sau đó tính toán giá cao nhất và giá thấp nhất trong 21 ngày qua để so sánh giá đóng cửa K hiện tại với đường viền trên và dưới của phạm vi biến động cơ sở để xác định giá có phá vỡ kênh hay không, để xác định hướng xu hướng.
Cụ thể, định nghĩa của kênh trên là giá cao nhất trong 21 ngày qua trừ 3 lần ATR cơ sở, và kênh dưới là giá thấp nhất trong 21 ngày qua cộng với 3 lần ATR cơ sở. Khi giá đóng cửa cao hơn kênh trên, đánh giá là xu hướng lạc quan; Khi giá đóng cửa thấp hơn kênh dưới, đánh giá là xu hướng giảm.
Trong khi xác định hướng của xu hướng, chiến lược này cũng giới thiệu các chỉ số MACD để lọc. Chỉ khi đường MACD tròn là chính xác, tín hiệu mua sẽ được tạo ra để tránh bỏ lỡ điểm mua.
Chiến lược này kết hợp với việc đánh giá xu hướng và lọc chỉ số, có thể xác định hiệu quả hướng xu hướng đường dài trong thị trường, tránh bị lừa bởi biến động ngắn hạn của thị trường. Các ưu điểm cụ thể như sau:
Chiến lược này cũng có một số rủi ro, bao gồm:
Đối với điều này, có thể giảm rủi ro bằng cách thiết lập tham số tối ưu, kích thước vị trí nghiêm ngặt và dừng lỗ kịp thời.
Chiến lược này có thể được tối ưu hóa từ các khía cạnh sau:
Có thể thử nghiệm các kết hợp của các tham số Length hoặc Multiplier khác nhau để tìm ra các kết hợp tham số tạo ra tỷ lệ lợi nhuận tốt nhất dựa trên dữ liệu phản hồi.
Có thể thử nghiệm kết hợp với các chỉ số khác như RSI, KDJ để lọc tín hiệu và xem liệu có thể cải thiện lợi nhuận hay không.
Các tham số điều chỉnh động
Các tham số có thể được điều chỉnh động theo tình hình thị trường, chẳng hạn như mở rộng phạm vi kênh thích hợp khi xu hướng rõ ràng và thắt chặt phạm vi kênh thích hợp khi có biến động.
Chiến lược này nói chung là một chiến lược theo dõi xu hướng tương đối vững chắc. Nó kết hợp phương pháp định hướng xu hướng của kênh giá và các tín hiệu lọc chỉ số MACD, có thể xác định hiệu quả xu hướng đường dài trong thị trường, tạo ra lợi nhuận ổn định. Với việc tối ưu hóa tham số, quản lý rủi ro và điều chỉnh thích hợp, chiến lược này có thể trở thành một phần quan trọng trong hệ thống giao dịch định lượng.
/*backtest
start: 2023-01-26 00:00:00
end: 2024-02-01 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/
// This source code is subject to the terms of the Mozilla Public License 2.0 at https://mozilla.org/MPL/2.0/
// © melihtuna
//@version=1
strategy("Trend Trader Strategy with MACD", overlay=true)
// === Trend Trader Strategy ===
Length = input(21),
Multiplier = input(3, minval=1)
MacdControl = input(true, title="Control 'MACD Histogram is positive?' when Buy condition")
avgTR = wma(atr(1), Length)
highestC = highest(Length)
lowestC = lowest(Length)
hiLimit = highestC[1]-(avgTR[1] * Multiplier)
loLimit = lowestC[1]+(avgTR[1] * Multiplier)
ret = iff(close > hiLimit and close > loLimit, hiLimit,
iff(close < loLimit and close < hiLimit, loLimit, nz(ret[1], 0)))
pos = iff(close > ret, 1,
iff(close < ret, -1, nz(pos[1], 0)))
barcolor(pos == -1 ? red: pos == 1 ? green : blue )
plot(ret, color= blue , title="Trend Trader Strategy with MACD")
// === INPUT BACKTEST RANGE ===
FromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
FromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
FromYear = input(defval = 2020, title = "From Year", minval = 2017)
ToMonth = input(defval = 1, title = "To Month", minval = 1, maxval = 12)
ToDay = input(defval = 1, title = "To Day", minval = 1, maxval = 31)
ToYear = input(defval = 9999, title = "To Year", minval = 2017)
// === FUNCTION EXAMPLE ===
start = timestamp(FromYear, FromMonth, FromDay, 00, 00) // backtest start window
finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) // backtest finish window
window() => true
// === MACD ===
[macdLine, signalLine, histLine] = macd(close, 12, 26, 9)
macdCond= MacdControl ? histLine[0] > 0 ? true : false : true
strategy.entry("BUY", strategy.long, when = window() and pos == 1 and macdCond)
strategy.entry("SELL", strategy.short, when = window() and pos == -1)