VWAP突破追踪策略


创建日期: 2023-12-20 16:18:50 最后修改: 2023-12-20 16:25:18
复制: 1 点击次数: 728
avatar of ChaoZhang ChaoZhang
1
关注
1364
关注者

VWAP突破追踪策略

概述

VWAP突破追踪策略是一个利用VWAP指标识别趋势方向的追踪策略。它通过分析最近5根K线的收盘价突破VWAP的情况,判断价格的突破方向。当检测到连续3根K线在同一方向突破VWAP时,记录该方向第3根K线的最高价或最低价。之后若价格突破该最高价或最低价,则产生交易信号。

该策略的主要优势是能快速捕捉价格突破的机会,实现超短线的追踪交易。但也存在一定的仓位积累过快的风险。可通过适当调整仓位参数进行优化。

策略原理

指标计算

该策略使用的主要指标是VWAP。VWAP代表价格的平均成交价,是考量成交量加权的价格均线。它能很好反映市场公认的价格水平。

策略内部实时计算5根收盘价K线和VWAP指标。并定义了一系列逻辑判断变量,检测价格是否出现指定次数的连续突破。

交易信号

策略的交易信号来自于价格突破创造的新高或新低。具体逻辑是:

  1. 判断最近5根K线中,前3根是否在同一方向连续突破VWAP(如价位持续上涨或下跌)
  2. 如果是,则记录该方向第3根K线的最高价或最低价
  3. 等待价格突破记录的最高价或最低价时,产生交易信号

因此,该策略的核心就是识别价格突破方向,追踪突破产生的新高或新低进行交易。

仓位控制

默认的仓位大小为账户权益的100%。这代表采取全仓交易。考虑到策略的高频短线特点,可适当调低仓位规模,控制风险。

平仓条件为价格重新回穿VWAP指标。即以VWAP作为追踪止损位,避免亏损扩大。

优势分析

VWAP突破追踪策略最大的优势在于能快速捕捉短期价格趋势,追踪突破行情进行交易。主要优势总结如下:

  1. 快速响应价格突破,追踪最新趋势
  2. 采用VWAP指标判断方向,有一定的可靠性
  3. 默认全仓交易,可以最大化盈利
  4. VWAP作为止损位,可以限制单笔损失

该策略特别适合高频短线交易,能快速锁定短期获利。在具有明显波动的品种(如原油、黄金等)中效果最佳。

风险分析

尽管VWAP突破追踪策略响应迅速、追踪效率高,但也存在一些风险需要注意:

  1. 多次追踪仓位易累积过大,损失风险加大
  2. VWAP指标作用有限,不足以完全避免亏损
  3. 高频出入场交易成本压力较大
  4. 默认全仓交易风险高,需要承受较大回撤

针对以上风险,可通过以下方式进一步优化:

  1. 适当缩小仓位比例,减少单次亏损影响
  2. 增加其他指标判断过滤,提高决策准确性
  3. 适当放宽止损线距离,减少过于频繁停损
  4. 增设盈利PROTECT止盈机制,锁定收益

优化方向

VWAP突破追踪策略作为一个追踪类超短线策略,可从以下几个维度继续优化:

  1. 多指标集成:整合波动率、MACD等其他指标,设定更严格的交易信号过滤条件,减少误判概率

  2. 动态仓位:根据市场波动程度,动态调整仓位大小。如大盘震荡时减少仓位,趋势明显时加大仓位

  3. 自适应止损:将固定的VWAP止损线改为动态追踪止损位。并结合ATR指标计算止损距离,实现止损线自适应调整

  4. 风控机制:设置最大持仓时间、单日盈亏限制、回撤率线等多项风控指标,对交易进行约束

  5. 机器学习:收集历史交易数据,使用深度学习模型优化策略参数,追求更高稳定性

总结

VWAP突破追踪策略总体来说是一个非常实用的高频交易策略。它能快速响应短期价格突破机会,利用全仓追踪实现超短线套利。同时,内置的VWAP追踪止损机制也能很好控制风险。

通过进一步多指标集成、动态仓位管理、自适应止损线、风控机制等优化手段,可以使该策略的交易决策更稳定,追踪效率更高。配合机器学习参数优化,VWAP突破追踪策略的效果还有很大提升空间。

对于喜欢高频交易操作的投资者而言,这绝对是一个值得重点考虑和持续优化的策略方案。

策略源码
/*backtest
start: 2023-12-12 00:00:00
end: 2023-12-19 00:00:00
period: 5m
basePeriod: 1m
exchanges: [{"eid":"Futures_Binance","currency":"BTC_USDT"}]
*/


//@version=5
strategy(title="VWAP Push", initial_capital = 100000, default_qty_type = strategy.percent_of_equity, default_qty_value = 100, pyramiding = 0, currency = 'USD', overlay=true)


//VWAP
vwap = ta.vwap(close)
plot(vwap, color=color.black, title="vwap")

//Last 5 Closes
closeBarPrevious5 = close[5]
closeBarPrevious4 = close[4]
closeBarPrevious3 = close[3]
closeBarPrevious2 = close[2]
closeBarPrevious1 = close[1]
closeBarCurrent = close


//is_1530 = (hour == 15) and (minute == 30)

is_push_up = (closeBarCurrent > closeBarPrevious1) and (closeBarPrevious1 > closeBarPrevious2) and (closeBarPrevious2 > closeBarPrevious3) and (closeBarPrevious4 < vwap) and (closeBarPrevious3 > vwap)  
is_push_down = (closeBarCurrent < closeBarPrevious1) and (closeBarPrevious1 < closeBarPrevious2) and (closeBarPrevious2 < closeBarPrevious3) and (closeBarPrevious4 > vwap) and (closeBarPrevious3 < vwap)  

var float hi = na
var float lo = na

hi := is_push_up ? high : hi
lo := is_push_down and (close < vwap) ? low : lo

plot(hi, "High", color.green, 1, plot.style_circles)
plot(lo, "Low", color.red, 1, plot.style_circles)

// Conditions

longCondition = ta.crossover(close,hi)
exitLong = ta.crossunder(close,vwap)

shortCondition = ta.crossunder(close,lo) and (close < vwap)
exitShort = ta.crossover(close,vwap)

// Entries Exits


if (longCondition)
    strategy.entry("Long", strategy.long)
if (exitLong)
    strategy.close("Long")
 

if (shortCondition)
    strategy.entry("Sell", strategy.short)
if (exitShort)
    strategy.close("Sell")