Chiến lược này sử dụng chỉ số Average True Range (ATR) để xác định hướng xu hướng. Nó đi dài khi xu hướng tăng và đi ngắn khi xu hướng giảm. Nó thuộc loại chiến lược theo xu hướng.
Chiến lược đầu tiên tính toán trung bình di chuyển đơn giản (sma) và trung bình di chuyển theo cấp số nhân (ema) của giá. Sau đó nó tính toán chỉ số ATR, đó là phạm vi trung bình của chuyển động giá trong N ngày qua.
Chiến lược sử dụng đường trung bình EMA, dải trên (EMA + ATR * hệ số) và dải dưới (EMA - ATR * hệ số) để xác định hướng xu hướng. Nó đi dài khi giá vượt qua dải trên và đi ngắn khi giá vượt qua dải dưới.
Logic chính trong mã:
Bằng cách điều chỉnh vị trí năng động dựa trên ATR, nó có thể theo hướng xu hướng hiệu quả.
Giải pháp:
Chiến lược theo xu hướng ATR có logic rõ ràng để xác định hướng xu hướng bằng cách sử dụng ATR. Đây là một hệ thống theo xu hướng điển hình. Những lợi thế là sự đơn giản và khả năng theo xu hướng. Nhưng nó cũng có những rủi ro đòi hỏi tối ưu hóa cho các thị trường khác nhau. Nhìn chung, nó có tiềm năng và giá trị lớn như một công cụ giao dịch định lượng.
/*backtest start: 2023-08-28 00:00:00 end: 2023-09-27 00:00:00 period: 1h basePeriod: 15m 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/ // © Investoz //@version=4 strategy("ATR Strategy FOREX", overlay=true, default_qty_type=strategy.percent_of_equity, default_qty_value=100) len = input(26, type=input.integer, minval=1, title="Length") mul = input(2.618, type=input.float, minval=0, title="Length") mullow = input(2.386, type=input.float, minval=0, title="Length") price = sma(close, 1) average = ema(close, len) diff = atr(len) * mul difflow = atr(len) * mullow bull_level = average + diff bear_level = average - difflow bull_cross = crossunder(price, bear_level) bear_cross = crossunder(bull_level, price) FromMonth = input(defval = 8, title = "From Month", minval = 1, maxval = 12) FromDay = input(defval = 18, title = "From Day", minval = 1, maxval = 31) FromYear = input(defval = 2008, title = "From Year", minval = 2008) 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 = 2020, title = "To Year", minval = 2019) start = timestamp(FromYear, FromMonth, FromDay, 00, 00) finish = timestamp(ToYear, ToMonth, ToDay, 23, 59) startTimeOk() => true if (startTimeOk()) and ema(close,1) > ema(close,528) strategy.entry("KOP", strategy.long, when=bull_cross) strategy.close("KOP", when=bear_cross) if (startTimeOk()) and ema(close,1) < ema(close,528) strategy.entry("SALJ", strategy.short, when=bear_cross) strategy.close("SALJ", when=bull_cross) plot(price, title="price", color=color.black, transp=50, linewidth=2) a0 = plot(average, title="average", color=color.red, transp=50, linewidth=1) a1 = plot(bull_level, title="bull", color=color.green, transp=50, linewidth=1) a2 = plot(bear_level, title="bear", color=color.red, transp=50, linewidth=1) fill(a0, a1, color=color.green, transp=97) fill(a0, a2, color=color.red, transp=97)