Эта стратегия основана на среднем значении истинной величины волны ATR для определения направления тренда, делая больше, когда тренд растет, и делая меньше, когда тренд падает, и относится к типу стратегий, следующих тренду.
Сначала стратегия рассчитывает простые скользящие средние цены sma и индексные скользящие средние ema. Затем рассчитывает показатель ATR, то есть средний диапазон колебаний за последние N дней.
Стратегия определяет направление тренда с помощью средней линии эма, верхней линии ((эма + ATR * коэффициент) и нижней линии ((эма - ATR * коэффициент). Когда цена входит в верхнюю часть, делайте больше; когда цена входит в нижнюю часть, делайте пустое.
Основная логика:
Динамическая корректировка позиций с помощью ATR позволяет эффективно отслеживать тенденции Directions
Решение проблемы:
Стратегия отслеживания трендов ATR имеет четкую общую концепцию, определяет направление тренда с помощью показателей ATR и является типичной стратегией отслеживания трендов. Преимущества стратегии заключаются в простоте и удобстве использования, эффективном отслеживании трендов; но также существует определенный риск, требующий оптимизированной корректировки для различных рыночных условий, чтобы получить максимальную эффективность стратегии. В целом, эта стратегия имеет большое пространство для расширения и использования как инструмент количественной торговли.
/*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)