Эта стратегия - стратегия прорыва тренда, основанная на показателе ATR. Ее основная идея заключается в том, чтобы совершить операцию прорыва тренда, когда цена превышает определенный кратный ATR. Стратегия также включает в себя подтверждение тренда и функции ограничения торговли с использованием диапазона дат.
Стратегия использует индикатор ATR для определения величины колебаний цены. ATR представляет собой средний реальный диапазон колебаний, который измеряет средний диапазон колебаний цен в течение определенного периода времени. В стратегии параметр length рассчитывает цикл ATR, параметр numATRs - кратность ATR с прорывом.
Когда рост цены прорывает верхние нумАТРы в размере ATR, выполняется многооперация; когда цена падает и прорывает нижние нумАТРы в размере ATR, выполняется пустая операция.
Кроме того, политика включает в себя переменные BOOL, требующие длинных позиций ("needlong") и длинных позиций ("needshort"), и может контролировать только длительные позиции или только длительные позиции. Политика также устанавливает диапазон дат, где сделки совершаются только между указанными датами, что обеспечивает ограничение времени.
Стратегия использует переменную size для определения позиции и вычисляет количество одиночных рук в зависимости от положения позиции.
Общая идея этой стратегии ясна и понятна. Использование индикатора ATR для автоматической адаптации к волатильности рынка является общепринятой стратегией отслеживания трендов. Благодаря оптимизации параметров и комбинации других стратегий можно еще больше улучшить эффективность и стабильность стратегии.
/*backtest start: 2023-09-30 00:00:00 end: 2023-10-30 00:00:00 period: 1d basePeriod: 1h exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}] */ //Noro //2018 //@version=3 strategy(title = "Noro's Volty Strategy v1.0", shorttitle = "Volty 1.0", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 100) //Settings needlong = input(true, defval = true, title = "Long") needshort = input(false, defval = false, title = "Short") capital = input(100, defval = 100, minval = 1, maxval = 10000, title = "Lot, %") length = input(5) numATRs = input(0.75) fromyear = input(1900, defval = 1900, minval = 1900, maxval = 2100, title = "From Year") toyear = input(2100, defval = 2100, minval = 1900, maxval = 2100, title = "To Year") frommonth = input(01, defval = 01, minval = 01, maxval = 12, title = "From Month") tomonth = input(12, defval = 12, minval = 01, maxval = 12, title = "To Month") fromday = input(01, defval = 01, minval = 01, maxval = 31, title = "From day") today = input(31, defval = 31, minval = 01, maxval = 31, title = "To day") //Indicator atrs = sma(tr, length) * numATRs //Trading size = strategy.position_size lot = 0.0 lot := size == 0 ? strategy.equity / close * capital / 100 : lot[1] if (not na(close[length])) and needlong strategy.entry("L", strategy.long, lot, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[length])) and needlong == false strategy.entry("L", strategy.long, 0, stop = close + atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[length])) and needshort strategy.entry("S", strategy.short, lot, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59))) if (not na(close[length])) and needshort == false strategy.entry("S", strategy.short, 0, stop = close - atrs, when = (time > timestamp(fromyear, frommonth, fromday, 00, 00) and time < timestamp(toyear, tomonth, today, 23, 59)))