
Стратегия является стратегией прорыва тренда, основанной на показателях ATR. Основная ее идея заключается в том, чтобы совершать операции по прорыву тренда, когда цена превышает определенное количество ATR. Стратегия одновременно включает в себя функции подтверждения тренда и использования диапазона дат для ограничения торгов.
Стратегия использует показатель ATR для определения величины ценовых колебаний. ATR представляет собой среднюю реальную величину колебаний, которая измеряет среднюю величину ценовых колебаний за определенный период времени.
При повышении цены, когда она превышает выше нумATRs кратный ATR, выполняется множественная операция; при падении цены, когда она превышает ниже нумATRs кратный 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)))