Эта стратегия рассчитывает волатильность цены 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)