В процессе загрузки ресурсов... загрузка...

Стратегия торговли VWAP по ценовому каналу

Автор:Чао Чжан, Дата: 2024-02-19 14:25:18
Тэги:

img

Обзор

Эта стратегия называется Price Channel VWAP Trading Strategy. Это стратегия, которая реализует торговлю VWAP на основе ценовых каналов. Основная идея этой стратегии заключается в следующем: в пределах ценового канала используйте скользящую среднюю линию индикатора VWAP и его верхнюю и нижнюю линию оффсетного канала для суждения о точке покупки и продажи. Когда линии канала нарушаются, открывайте позиции в соответствии с фиксированным процентом от общего количества активов и закрывайте позиции, когда цены регрессируют к скользящей средней линии VWAP.

Принцип стратегии

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

Стратегия использует скользящую среднюю линию индикатора VWAP и его смещенные линии канала. Пропорции смещенных линий канала устанавливаются через параметры longlevel1 и shortlevel1. Когда цена проходит через верхнюю линию смещенного канала, открывайте длинные позиции в соответствии с процентом позиций, установленных параметром lotsizelong; когда цена проходит через нижнюю линию смещенного канала, открывайте короткие позиции в соответствии с процентом позиций, установленных параметром lotsizeshort. После открытия цен выбирайте закрытие позиций, когда цены регрессируют вокруг движущейся средней линии VWAP.

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

Анализ преимуществ

Эта торговая стратегия имеет следующие преимущества:

  1. Использование индикаторов VWAP для определения средних значений может определить направление основного рынка
  2. Торговля в диапазоне каналов позволяет избежать помех шума для более четкой работы
  3. Объединение каналов различных уровней, развертывание в партии снижает риск
  4. Своевременное получение прибыли путем регрессии позволяет избежать потерь, вызванных быстрыми изменениями

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

Анализ рисков

Эта стратегия также сопряжена с некоторыми рисками:

  1. Показатель VWAP не чувствителен к высокочастотной торговле и не может отражать экстремальные аномалии цен.
  2. Неправильные настройки параметров ширины канала могут привести к чрезмерно агрессивной торговле
  3. Если диапазон регрессионных операций по закрытию позиций слишком широк, это может привести к задержке потерь.

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

Контрмеры заключаются в разумной оценке настроек параметров и соответствующей корректировке параметров канала; одновременно с объединением других показателей для оценки аномалий цен и избежания слепого следования сигналам; наконец, оценка оптимизации параметров каналов различных уровней и диапазонов регрессии для достижения лучших эффектов получения прибыли.

Руководство по оптимизации

Эта стратегия может быть оптимизирована в следующих направлениях:

  1. Увеличить уровень каналов и оптимизировать комбинации параметров
  2. Комбинировать показатели объема торговли для определения достоверности прорывов
  3. Добавить стратегии стоп-лосса и установить стоп-лосс по коэффициенту вывода

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

Резюме

Эта стратегия объединяет индикатор VWAP с ценовыми каналами для достижения относительно стабильной торговой стратегии. Настройки параметров стратегии гибки для пользователей, чтобы регулировать их в соответствии с их собственными предпочтениями. Эта стратегия может эффективно определять направление средних точек стоимости. Благодаря комбинации параметров и созданию партий позиций можно достичь стабильной прибыльности. Хотя в стратегии все еще есть возможности для улучшения, в целом это количественная торговая стратегия с высокой практичностью.


/*backtest
start: 2023-02-12 00:00:00
end: 2024-02-18 00:00:00
period: 1d
basePeriod: 1h
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/

//@version=4
strategy(title = "VWAP Bands Backtest", shorttitle = "VWAP Bands Backtest", overlay = true, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 3)

//Settings
lotsizelong = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot long, %")
lotsizeshort = input(100, defval = 100, minval = 0, maxval = 10000, title = "Lot short, %")
short1 = input(true, title = "short 1")
long1 = input(true, title = "long 1")
shortlevel1 = input(1.0, title = "Short line 1")
longlevel1 = input(-1.0, title = "Long line 1")
needoffset = input(true, title = "Offset")

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")

//Variables
size = strategy.position_size
mult = 1 / syminfo.mintick
truetime = true

//VWAP
ma = vwap(hlc3)

//Levels
longline1 = long1 ? round(ma * ((100 + longlevel1) / 100) * mult) / mult : close
shortline1 = short1? round(ma * ((100 + shortlevel1) / 100) * mult) / mult : close


//Lines
colorlong1 = long1 ? color.lime : na
colorshort1 = short1 ? color.red : na
offset = needoffset ? 1 : 0
plot(shortline1, offset = offset, color = colorshort1, title = "Short line 1")
plot(ma, offset = offset, color = color.blue, title = "MA line")
plot(longline1, offset = offset, color = colorlong1, title = "Long line 1")


//Trading
lotlong = 0.0
lotshort = 0.0
lotlong := size == 0 ? (strategy.equity / close) * (lotsizelong / 100) : lotlong[1]
lotshort := size == 0 ? (strategy.equity / close) * (lotsizeshort / 100) : lotshort[1]


if ma > 0
    if lotlong > 0
        lotslong = 0.0
        lotslong := strategy.position_size > 0 ? round(strategy.position_size / lotlong) : 0.0
        strategy.entry("L1", strategy.long, lotlong, limit = longline1, when = (lotslong == 0 and long1 and truetime))
    if lotshort > 0
        lotsshort = 0.0
        lotsshort := strategy.position_size < 0 ? round(strategy.position_size / lotshort) : 0.0
        strategy.entry("S1", strategy.short, lotshort, limit = shortline1, when = (lotsshort == 0 and short1 and truetime))
if strategy.position_size > 0
    strategy.exit("TPL", "L1", limit = ma)
if strategy.position_size < 0
    strategy.exit("TPS", "S1", limit = ma)
if time > timestamp(toyear, tomonth, today, 23, 59)
    strategy.close_all()
    strategy.cancel("L1")
    strategy.cancel("S1")
    strategy.cancel("TPL")
    strategy.cancel("TPS")

Больше