VWAP突破追踪策略是一个利用VWAP指标识别趋势方向的追踪策略。它通过分析最近5根K线的收盘价突破VWAP的情况,判断价格的突破方向。当检测到连续3根K线在同一方向突破VWAP时,记录该方向第3根K线的最高价或最低价。之后若价格突破该最高价或最低价,则产生交易信号。
该策略的主要优势是能快速捕捉价格突破的机会,实现超短线的追踪交易。但也存在一定的仓位积累过快的风险。可通过适当调整仓位参数进行优化。
该策略使用的主要指标是VWAP。VWAP代表价格的平均成交价,是考量成交量加权的价格均线。它能很好反映市场公认的价格水平。
策略内部实时计算5根收盘价K线和VWAP指标。并定义了一系列逻辑判断变量,检测价格是否出现指定次数的连续突破。
策略的交易信号来自于价格突破创造的新高或新低。具体逻辑是:
因此,该策略的核心就是识别价格突破方向,追踪突破产生的新高或新低进行交易。
默认的仓位大小为账户权益的100%。这代表采取全仓交易。考虑到策略的高频短线特点,可适当调低仓位规模,控制风险。
平仓条件为价格重新回穿VWAP指标。即以VWAP作为追踪止损位,避免亏损扩大。
VWAP突破追踪策略最大的优势在于能快速捕捉短期价格趋势,追踪突破行情进行交易。主要优势总结如下:
该策略特别适合高频短线交易,能快速锁定短期获利。在具有明显波动的品种(如原油、黄金等)中效果最佳。
尽管VWAP突破追踪策略响应迅速、追踪效率高,但也存在一些风险需要注意:
针对以上风险,可通过以下方式进一步优化:
VWAP突破追踪策略作为一个追踪类超短线策略,可从以下几个维度继续优化:
多指标集成:整合波动率、MACD等其他指标,设定更严格的交易信号过滤条件,减少误判概率
动态仓位:根据市场波动程度,动态调整仓位大小。如大盘震荡时减少仓位,趋势明显时加大仓位
自适应止损:将固定的VWAP止损线改为动态追踪止损位。并结合ATR指标计算止损距离,实现止损线自适应调整
风控机制:设置最大持仓时间、单日盈亏限制、回撤率线等多项风控指标,对交易进行约束
机器学习:收集历史交易数据,使用深度学习模型优化策略参数,追求更高稳定性
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")