Cốt lõi của chiến lược này dựa trên chỉ số được phát triển trong bài báo
Chiến lược này đầu tiên tính toán trung bình động cân nặng 21 ngày của phạm vi trung bình thực sự (ATR) như một phạm vi biến động cơ bản. Sau đó nó tính toán giá cao nhất và thấp nhất trong 21 ngày qua. Bằng cách so sánh giá đóng hiện tại với giới hạn trên và dưới của phạm vi cơ bản, nó đánh giá liệu giá có vượt ra khỏi kênh để xác định hướng xu hướng hay không.
Cụ thể, giới hạn kênh trên được định nghĩa là giá cao nhất trong 21 ngày qua trừ 3 lần ATR cơ sở, và giới hạn kênh dưới là giá thấp nhất trong 21 ngày qua cộng 3 lần ATR cơ sở. Khi giá đóng cao hơn giới hạn trên, nó báo hiệu xu hướng tăng. Khi giá đóng thấp hơn giới hạn dưới, nó báo hiệu xu hướng giảm.
Trong khi xác định hướng xu hướng, chiến lược này cũng giới thiệu chỉ số MACD để lọc. Nó chỉ tạo ra tín hiệu mua khi biểu đồ MACD dương để tránh bỏ lỡ cơ hội mua.
Chiến lược này kết hợp xác định xu hướng và lọc chỉ số, có thể xác định hiệu quả hướng xu hướng thị trường trung hạn và dài hạn mà không bị sai lệch bởi biến động ngắn hạn.
Chiến lược này cũng có một số rủi ro, chủ yếu trong các khía cạnh sau:
Những rủi ro này có thể được giảm bằng cách tối ưu hóa các thông số, kích thước vị trí nghiêm ngặt và dừng lỗ kịp thời.
Chiến lược có thể được tối ưu hóa trong các khía cạnh chính sau:
Kiểm tra các kết hợp khác nhau của Dài hoặc nhân để tìm ra sự kết hợp tham số mang lại lợi nhuận cao nhất dựa trên backtest.
Thử nghiệm kết hợp RSI, KDJ và các chỉ số khác để lọc tín hiệu và cải thiện lợi nhuận.
Điều chỉnh các tham số một cách năng động dựa trên điều kiện thị trường, chẳng hạn như mở rộng phạm vi kênh một cách thích hợp khi xu hướng mạnh hoặc thắt chặt phạm vi khi thị trường bị giới hạn hơn.
Tóm lại, đây là một chiến lược theo xu hướng tổng thể mạnh mẽ. Bằng cách kết hợp xác định xu hướng kênh giá và lọc MACD, nó có thể xác định hiệu quả xu hướng trung dài hạn và tạo ra lợi nhuận ổn định. Với 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 không thể thiếu của hệ thống giao dịch.
/*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)