2. VWAP策略设计原理:时间切片与成交量分布、预测成交量曲线、基准价格锚定、滑点控制逻辑

VWAP策略,说白了就是「把大单拆成小单,跟着市场节奏走」。很多刚入行的朋友以为VWAP就是简单的时间加权平均,其实不然。我做了这么多年,踩过的坑不少,今天就把核心原理掰开揉碎了讲。

2.1 时间切片与成交量分布

先问一个问题:为什么要把一天切成那么多小片段?

因为市场成交量不是均匀分布的。你想想看,开盘和收盘那会儿,成交量通常很大,中午那会儿就稀稀拉拉的。如果我们傻乎乎地每5分钟扔同样多的单子,那肯定跑不出好价格。

时间切片的核心逻辑:把交易时间分成N个等长片段,每个片段分配不同的成交量权重。

我习惯用5分钟切片。A股一天240分钟,切成48个切片。每个切片的目标成交量 = 当日总目标 × 该切片的历史成交量占比。

关键点:切片粒度不能太细,否则信号噪音太大;也不能太粗,否则失去VWAP的平滑效果。我个人经验,5-15分钟是比较舒服的范围。

举个例子,假设今天要买100万股,历史数据显示9:35-9:40这个切片占全天成交量的2.3%,那这个切片就分配2.3万股。

2.2 预测成交量曲线

这里有个坑——历史数据不一定准。我曾经在2015年股灾那会儿,按历史曲线下单,结果上午成交量爆棚,下午直接缩量到地板上。嗯,那天的VWAP执行效果,别提了。

所以我们需要实时修正。我常用的方法有两种:

  1. 历史均值法:取过去20个交易日同时间切片的成交量中位数,作为基准。
  2. 实时调整法:用当前切片已成交量的比例,动态调整后续切片的权重。

代码实现其实不复杂,我贴一段核心逻辑:

def predict_volume_curve(today_date, slice_minutes=5):
    """
    预测当日成交量曲线
    """
    # 取过去20个交易日的历史数据
    hist_data = get_hist_volume(today_date, lookback=20)
    
    # 计算每个时间切片的历史成交量占比
    slice_ratios = hist_data.groupby('time_slice')['volume'].mean()
    slice_ratios = slice_ratios / slice_ratios.sum()
    
    # 实时修正:用当前已完成切片的数据调整后续权重
    current_slice = get_current_slice()
    completed_ratio = get_completed_volume_ratio()
    
    if completed_ratio > 0.5:
        # 如果已完成超过50%,说明今天成交量可能偏大
        # 适当调低后续切片权重
        slice_ratios[current_slice:] *= 0.9
    
    return slice_ratios

我的小技巧:不要只用一种预测模型。我一般同时跑3个模型(历史均值、指数平滑、实时修正),最后取加权平均。权重根据最近5天的预测误差动态调整。

2.3 基准价格锚定

VWAP的基准价格怎么定?很多人直接取当前市场价格,这其实有问题。

我建议用前一个切片的VWAP价格作为基准。为什么?因为VWAP策略追求的是全天均价,用上一个切片的价格做锚定,天然具有平滑效果。

具体做法:

  • 每个切片结束时,计算该切片的VWAP
  • 下一个切片的限价单,以这个VWAP为基准,上下浮动一个滑点容忍度
  • 如果市场价格偏离基准超过容忍度,暂停下单或调整下单速度

注意:基准价格锚定不是死板的。遇到突发消息导致价格跳空,必须快速调整基准。我曾经吃过这个亏,2019年某次财报发布后,价格直接跳了2%,我还傻傻地按旧基准下单,结果...你懂的。

2.4 滑点控制逻辑

滑点控制是VWAP策略的命门。说白了,就是「既要跑得快,又要跑得便宜」。

我总结了一套三级滑点控制策略:

级别 触发条件 应对措施
一级(正常) 市场价格在基准±0.1%内 正常下单,使用限价单
二级(警惕) 市场价格偏离基准0.1%-0.3% 降低下单速度,改用冰山订单
三级(紧急) 市场价格偏离基准超过0.3% 暂停下单,等待价格回归

这里有个细节:暂停不是停止。暂停期间,如果价格回归到容忍范围内,要快速补回之前落下的量。否则到收盘时你会发现任务没完成。

我习惯用动态滑点容忍度。举个例子,如果当前切片已经落后进度了,我会适当放宽滑点容忍度,从0.1%放宽到0.15%,确保能追上进度。反之,如果进度超前,就收紧容忍度,追求更好的价格。

核心原则:VWAP策略不是追求最优价格,而是追求「不跑偏」。你想想看,只要最终成交价接近全天VWAP,就算成功。为了省0.01元而冒跑偏的风险,不值得。

知识体系总览

下面这张图,是我自己画的VWAP策略核心逻辑框架。你看一眼就能明白各个模块之间的关系:

VWAP策略设计核心逻辑 输入数据 历史成交量 | 实时行情 时间切片与权重分配 5分钟切片 | 动态权重 预测成交量曲线 历史均值 | 实时修正 基准价格锚定 前切片VWAP | 动态基准 滑点控制逻辑 三级控制 | 动态容忍度 | 进度追赶 执行指令输出 实时反馈修正

这张图里,从输入数据到最终执行指令,每个环节都环环相扣。你注意看那个反馈回路——实时行情会不断修正预测曲线和滑点控制参数,形成一个闭环。

实战建议:刚开始做VWAP策略时,别想着一步到位。先把时间切片和成交量分布做扎实了,再慢慢加滑点控制。我见过太多人一上来就搞复杂的机器学习模型,结果基础没打好,跑出来的效果还不如简单的历史均值法。

好了,这一章的核心内容就这些。记住一句话:VWAP策略的本质是「用时间换空间」,用精细化的切片管理,换取稳定的执行价格。下一章我们会聊具体的代码实现,到时候我会把完整的策略框架贴出来。


公众号:蓝海资料掘金营,微信deep3321