Пространства волатильности и многовременная стратегия торговли фондовыми акциями

Автор:Чао Чжан, Дата: 2024-01-17 16:34:23
Тэги:

img

Эта стратегия рассчитывает волатильность цены 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 влияют на эффективность стратегии, требуют тщательного тестирования различных продуктов
  • Рассмотреть возможность добавления стоп-лосса для контроля потери от одной сделки
  • Может сочетаться с MA и другими индикаторами для фильтрации сигналов входа и сокращения ненужных сделок

Резюме

Стратегия реализует отслеживание тренда акций посредством двойного подтверждения волатильности 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)


Больше