Chiến lược này dựa trên chỉ số ATR của bước sóng thực trung bình để đánh giá hướng của xu hướng, làm nhiều khi xu hướng tăng và làm giảm khi xu hướng giảm, thuộc loại chiến lược theo dõi xu hướng.
Chiến lược này đầu tiên tính toán giá SMA và EMA của chỉ số. Sau đó tính toán chỉ số ATR, tức là phạm vi biến động trung bình trong N ngày qua.
Chiến lược đánh giá hướng xu hướng bằng đường trung bình, đường lên ((ema + ATR * coefficient) và đường xuống ((ema - ATR * coefficient)). Khi giá lên đường lên đường, làm nhiều hơn; khi giá xuống đường xuống đường, làm trống.
Lập luận chính của mã:
Đổi vị trí động thông qua ATR, có thể theo dõi xu hướng hiệu quả.
Giải pháp:
Chiến lược theo dõi xu hướng ATR có ý tưởng tổng thể rõ ràng, đánh giá hướng xu hướng thông qua chỉ số ATR, thuộc chiến lược theo dõi xu hướng điển hình. Ưu điểm của chiến lược là đơn giản, dễ vận hành, có thể theo dõi xu hướng hiệu quả; nhưng cũng có một số rủi ro, cần điều chỉnh tối ưu hóa cho các môi trường thị trường khác nhau để có thể sử dụng tối đa chiến lược. Nhìn chung, chiến lược này là một công cụ giao dịch định lượng cũng có rất nhiều không gian mở rộng và giá trị sử dụ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)