Стратегия прорыва волатильности ATR с двойным периодом


Дата создания: 2024-01-17 16:34:23 Последнее изменение: 2024-01-17 16:34:23
Копировать: 1 Количество просмотров: 728
1
Подписаться
1617
Подписчики

Стратегия прорыва волатильности ATR с двойным периодом

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

Обзор стратегии

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

Стратегический принцип

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

  1. Канал ATR, используемый для расчета цены
  2. Определить, пробилась ли цена через канал колебаний
    1. Например, в Китае, где в прошлом году была введена в эксплуатацию электростанция “Анти-Транс”.
    2. Например, в США, в США, в Китае, в Китае, в Китае, в Китае.
  3. Введение цены VWAP на круговой и солнечной линии
    1. При повышении волатильности цены, если солнечная линия и круговая линия VWAP находятся выше цены, создается сигнал длительного положения
    2. Сигнал пустоты создается, если солнечная линия и круговая линия VWAP находятся ниже цены, когда цена прорывается вниз от колебаний

Основная логика стратегии состоит в следующем: ATR определяет краткосрочные тенденции, а VWAP определяет долгосрочные тенденции, которые, в сочетании с согласованностью тенденций, создают торговые сигналы.

Стратегические преимущества

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

Стратегические риски и оптимизация

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

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

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

Исходный код стратегии
/*backtest
start: 2023-12-17 00:00:00
end: 2024-01-16 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/
// © exlux99

//@version=4
strategy(title="VWAP MTF STOCK STRATEGY", overlay=true )

// high^2 / 2 - low^2 -2

h=pow(high,2) / 2
l=pow(low,2) / 2

o=pow(open,2) /2
c=pow(close,2) /2


x=(h+l+o+c) / 4
y= sqrt(x)

source = y
useTrueRange = false
length = input(27, minval=1)
mult = input(0, step=0.1)
ma = sma(source, length)
range = useTrueRange ? tr : high - low
rangema = sma(range, length)
upper = ma + rangema * mult
lower = ma - rangema * mult
crossUpper = crossover(source, upper)
crossLower = crossunder(source, lower)
bprice = 0.0
bprice := crossUpper ? high+syminfo.mintick : nz(bprice[1])
sprice = 0.0
sprice := crossLower ? low -syminfo.mintick : nz(sprice[1])
crossBcond = false
crossBcond := crossUpper ? true
     : na(crossBcond[1]) ? false : crossBcond[1]
crossScond = false
crossScond := crossLower ? true
     : na(crossScond[1]) ? false : crossScond[1]
cancelBcond = crossBcond and (source < ma or high >= bprice )
cancelScond = crossScond and (source > ma or low <= sprice )

longOnly = true

fromDay = input(defval = 1, title = "From Day", minval = 1, maxval = 31)
fromMonth = input(defval = 1, title = "From Month", minval = 1, maxval = 12)
fromYear = input(defval = 2000, title = "From Year", minval = 1970)
 //monday and session 
// To Date Inputs
toDay = input(defval = 31, title = "To Day", minval = 1, maxval = 31)
toMonth = input(defval = 12, title = "To Month", minval = 1, maxval = 12)
toYear = input(defval = 2021, title = "To Year", minval = 1970)

startDate = timestamp(fromYear, fromMonth, fromDay, 00, 00)
finishDate = timestamp(toYear, toMonth, toDay, 00, 00)
time_cond = true

srcX = input(ohlc4)
t = time("W")
start = na(t[1]) or t > t[1]

sumSrc = srcX * volume
sumVol = volume
sumSrc := start ? sumSrc : sumSrc + sumSrc[1]
sumVol := start ? sumVol : sumVol + sumVol[1]

vwapW= sumSrc / sumVol

 
//crossUpper = crossover(source, upper)
//crossLower = crossunder(source, lower)
shortCondition = close < vwap and time_cond and (close < vwapW)
longCondition = close > vwap and time_cond and (close > vwapW)

 


if(longOnly and time_cond)
    if (crossLower and close < vwapW )
        strategy.close("long")
    if (crossUpper and close>vwapW)
        strategy.entry("long", strategy.long, stop=bprice)