Адаптивная стратегия прорыва тренда ATR


Дата создания: 2023-10-31 15:58:46 Последнее изменение: 2023-10-31 15:58:46
Копировать: 0 Количество просмотров: 690
1
Подписаться
1617
Подписчики

Адаптивная стратегия прорыва тренда ATR

Обзор

Стратегия является стратегией прорыва тренда, основанной на показателях ATR. Основная ее идея заключается в том, чтобы совершать операции по прорыву тренда, когда цена превышает определенное количество ATR. Стратегия одновременно включает в себя функции подтверждения тренда и использования диапазона дат для ограничения торгов.

Принципы

Стратегия использует показатель ATR для определения величины ценовых колебаний. ATR представляет собой среднюю реальную величину колебаний, которая измеряет среднюю величину ценовых колебаний за определенный период времени.

При повышении цены, когда она превышает выше нумATRs кратный ATR, выполняется множественная операция; при падении цены, когда она превышает ниже нумATRs кратный ATR, выполняется пустота.

Кроме того, в стратегии добавлены BOOL-вариативы, требующие длинных позиций (needlong) и коротких позиций (needshort), которые можно контролировать только длинными или короткими позициями. В стратегии также установлен диапазон дат, чтобы торговать только между указанными датами, что позволяет ограничить диапазон времени.

Стратегия использует переменную “size” для определения позиции, рассчитывая количество разных рук в зависимости от ситуации с позицией. Количество рук рассчитывается в соответствии с процентом прав и интересов счета.

Преимущества

  • Используйте индикатор ATR, чтобы автоматически адаптироваться к рыночным колебаниям без необходимости вручную устанавливать стоп-стоп
  • Гибкий выбор: делать больше вакансий или делать только больше/вакансий
  • Вы можете установить диапазон дат для торговли, чтобы избежать важных моментов времени
  • Гибкость в настройках с помощью мобильных телефонов, в зависимости от процента доли в счете

Риски и решения

  • ATR учитывает только колебания цен, а в случае резкого изменения рыночной конъюнктуры стоп-драйв может быть слишком малым и требует оптимизации в сочетании с другими показателями
  • При ограничении диапазона дат торговля может быть расширена на соответствующие даты, если не будет подходящих возможностей в течение важных периодов времени, что может привести к упущенным торговым возможностям
  • При заказе с использованием пропорций учетных записей необходимо разумно установить пропорции, чтобы избежать чрезмерных потерь

Оптимизация

  • Можно рассмотреть возможность включения трендовых показателей, таких как движущиеся средние, для фильтрации шума, вызванного не трендовыми прорывами.
  • Можно тестировать различные параметры цикла ATR, чтобы выбрать оптимальную комбинацию параметров
  • Можно рассмотреть возможность использования в сочетании с другими пакетами стратегий, чтобы использовать свои преимущества и улучшить стабильность стратегий

Подвести итог

Общая идея этой стратегии ясна и понятна. Использование показателей 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)))