
Эта стратегия называется Price Channel VWAP Trading Strategy, это стратегия, основанная на ценовом канале для осуществления торгов VWAP. Основная идея этой стратегии заключается в следующем: в ценовом канале, используя среднюю линию индикатора VWAP и ее верхнюю и нижнюю отклонения канальной линии для определения точки покупки и продажи, при прорыве канальной линии открывать позиции в соответствии с процентом от общего количества активов в фиксированных позициях, при возвращении к средней линии VWAP при закрытии позиции.
Стратегия рассчитывает среднюю цену сделки по текущей цене с помощью показателя VWAP. VWAP представляет собой среднюю цену, которая является соотношением суммы сделки к объему сделки.
Стратегия использует среднюю линию показателя VWAP и ее отклонение от коридора. Пропорции отклонения от коридора устанавливаются с помощью параметров longlevel1 и shortlevel1. Когда цена прорывает верхнюю отклонение от коридора, открывайте позиции в процентном соотношении от позиции на lotsizelong; когда цена прорывает нижнюю отклонение от коридора, открывайте позиции в процентном соотношении от позиции на lotsizeshort.
Параметры стратегии полностью отражают концепцию торговли по каналу. Пользователи могут настроить ширину канала и размер доли позиций в соответствии с их предпочтениями, что позволяет достичь различной частоты торгов.
Эта торговая стратегия имеет следующие преимущества:
Поскольку индикатор VWAP хорошо отражает средний уровень цен, торговля на основе его канальной линии позволяет эффективно блокировать центробежность и избегать уклонения от краткосрочных колебаний. В то же время используйте различные каналы параметров для комбинирования, создания запасов в пакетах, чтобы эффективно контролировать риск и предотвратить концентрацию односторонних рисков.
В этой стратегии также есть некоторые риски, о которых следует помнить:
Индекс VWAP не чувствителен к высокочастотным торговым колебаниям, и в случае экстремальных скачков цены или краткосрочных аномалий он может вызвать ненужные торговые сигналы и убытки. Кроме того, если параметры каналов установлены слишком свободно, это может привести к появлению неэффективных сигналов проникновения цены.
Противодействие заключается в рациональной настройке параметров оценки, соответствующей корректировке параметров каналов; одновременно в сочетании с другими показателями, чтобы определить аномалию цены, избежать слепого сопровождения; и, наконец, оптимизация параметров на различных уровнях каналов и диапазона возвратов для достижения лучшего эффекта остановки.
Эта стратегия может быть оптимизирована в следующих направлениях:
Можно добавить еще несколько уровней каналов и оптимизировать параметры комбинации, чтобы достичь более стабильного эффекта торговли. Кроме того, можно добавить правила суждения о количестве торгов, чтобы избежать неэффективного падения цены, что приводит к торговым потерям.
Эта стратегия объединяет показатели 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")