1. VWAP与TWAP基础概念:定义、计算公式、核心区别与适用场景
各位同学,今天我们来聊聊量化交易里两个最基础、也最常用的策略——VWAP和TWAP。说实话,我刚入行那会儿,也分不清这两个到底有啥本质区别。直到有一次在实盘里用错了策略,被市场狠狠教育了一顿……嗯,从那以后,我对这两个家伙的理解就深刻多了。
1.1 什么是VWAP?
VWAP,全称Volume-Weighted Average Price,翻译过来就是「成交量加权平均价格」。说白了,它不是一个交易策略,而是一个价格基准。你想想看,我们平时看K线图,收盘价、开盘价都是等权重的,但VWAP不一样——它把成交量也考虑进去了。
计算公式其实很简单:
VWAP = Σ(价格 × 成交量) / Σ(成交量)
举个例子:假设某只股票在一天内发生了三笔交易:
- 第一笔:10元,成交100股
- 第二笔:11元,成交200股
- 第三笔:12元,成交300股
那么VWAP = (10×100 + 11×200 + 12×300) / (100+200+300) = 11.33元。
核心要点:VWAP反映的是「真实成交的平均成本」。如果你买入的价格低于VWAP,说明你买得比市场平均价便宜。
我在项目中遇到过不少新手,以为VWAP只是一个指标,看看就完了。其实不然,很多机构交易员把VWAP当作「锚点」——价格低于VWAP时倾向于买入,高于VWAP时倾向于卖出。说白了,这就是一个动态的支撑/阻力位。
1.2 什么是TWAP?
TWAP,全称Time-Weighted Average Price,时间加权平均价格。这个就更简单了——它只关心时间,不关心成交量。
计算公式:
TWAP = Σ(价格) / 样本数量
还是刚才那个例子,三笔交易的价格分别是10、11、12元,那么TWAP = (10+11+12)/3 = 11元。
你发现没有?TWAP完全忽略了成交量的大小。哪怕最后一笔成交了100万股,前面两笔只有100股,TWAP还是按三个价格等权计算。这就是它和VWAP最本质的区别。
我的习惯:在流动性好的市场,我更喜欢用VWAP;在流动性差或者需要隐藏意图的时候,TWAP更合适。这个后面会细说。
1.3 核心区别:一张表说清楚
| 对比维度 | VWAP | TWAP |
|---|---|---|
| 权重依据 | 成交量 | 时间 |
| 对市场冲击 | 敏感,大单会拉高VWAP | 不敏感,均匀分布 |
| 适用流动性 | 高流动性市场 | 低流动性市场 |
| 执行目标 | 跟踪市场平均成本 | 均匀分散时间风险 |
| 计算复杂度 | 需要实时成交量数据 | 只需要价格数据 |
这张表我建议你记下来。为什么?因为很多面试官就喜欢问这个。我曾经在一次面试里被问到「你什么时候用VWAP,什么时候用TWAP」,当时我答得不够好,后来专门整理了这个对比表。
1.4 适用场景分析
VWAP适合的场景:
- 大单拆单执行,比如你要买100万股,不想被市场发现
- 被动型策略,跟踪指数或基准
- 流动性好的股票,比如茅台、腾讯这种
TWAP适合的场景:
- 流动性差的品种,比如一些小盘股、债券
- 需要隐藏交易意图,避免被「盯上」
- 市场波动剧烈时,均匀分散风险
避坑指南:我曾经在流动性极差的股票上用了VWAP策略,结果因为成交量稀疏,VWAP计算出来的值严重滞后,导致执行成本比预期高了0.5%。后来我学乖了——流动性差的时候,老老实实用TWAP。
1.5 知识体系结构图
下面这张图是我自己画的,把VWAP和TWAP的核心逻辑串起来了。你看一眼就能明白它们在整个交易体系中的位置。
嗯,这张图我花了不少心思。你看,左边是VWAP,右边是TWAP,从计算公式到适用场景,一目了然。我个人习惯在写策略文档时,先画这样一张图,再开始写代码——思路会清晰很多。
1.6 一个简单的代码示例
最后,给你看一段Python代码,计算VWAP和TWAP。代码不长,但很实用。
import pandas as pd
import numpy as np
# 模拟交易数据
data = {
'price': [10, 11, 12, 11.5, 10.8],
'volume': [100, 200, 300, 150, 250],
'time': pd.date_range('09:30', periods=5, freq='5min')
}
df = pd.DataFrame(data)
# 计算VWAP
df['vwap'] = (df['price'] * df['volume']).cumsum() / df['volume'].cumsum()
# 计算TWAP
df['twap'] = df['price'].expanding().mean()
print(df[['time', 'price', 'volume', 'vwap', 'twap']])
这段代码我经常在回测里用。你注意看,VWAP用的是cumsum(累计求和),因为它是动态更新的;TWAP直接用expanding mean,简单粗暴。实际生产中,VWAP的计算会更复杂一些,要考虑盘口数据,但原理就是这个。
一个小技巧:如果你用的是高频数据,建议把VWAP的计算窗口设成「当天」,因为跨天的VWAP没有意义。TWAP则可以根据需要设置时间窗口,比如过去1小时、过去4小时等。
好了,这一章的内容就到这里。VWAP和TWAP的概念其实不难,难的是在实际交易中灵活运用。下一章我们会深入讲VWAP策略的具体实现,包括如何拆单、如何控制滑点——嗯,到时候见。