4. TWAP策略原理:时间加权平均价格的计算逻辑、均匀拆分与执行节奏
TWAP,全称Time-Weighted Average Price,时间加权平均价格。说白了,就是把一个大单子,均匀地拆成很多小单子,然后按固定的时间间隔去执行。它的目标很简单——让成交价尽量贴近这段时间内的平均价。
我最早接触TWAP是在做指数基金调仓的时候。那时候要买几千万的股票,一单砸下去市场直接拉飞。后来发现,用TWAP慢慢吃,效果就好多了。嗯,今天我们就来拆解一下它的核心逻辑。
4.1 计算逻辑:时间才是权重
TWAP这个名字已经说得很清楚了——时间加权。什么意思呢?就是每一分钟、每一秒钟,在最终的平均价格里占的权重是一样的。
公式其实很简单:
TWAP = (P₁ + P₂ + P₃ + ... + Pₙ) / N
其中P₁、P₂、P₃是每个时间点的价格,N是时间点的总数。你想想看,这和VWAP最大的区别在哪?VWAP是用成交量做权重,成交量大的时刻价格权重就大。TWAP不管成交量,只看时间。
核心区别一句话:
- VWAP = 价格 × 成交量权重
- TWAP = 价格 × 时间权重
我在项目中遇到过一种情况:某个股票在尾盘突然放量,VWAP会被拉得很高。但TWAP不会,因为前面那些平淡的分钟,每一分钟都和尾盘那一分钟权重相同。所以TWAP更适合那些你不想被异常成交量干扰的场景。
4.2 均匀拆分:把大象装进冰箱分几步?
TWAP的执行逻辑,核心就是两个字——均匀。
假设你要在1小时内买入100万股。你会怎么做?
我个人的习惯是这样拆:
- 确定总时长:比如60分钟
- 确定切片数:比如每1分钟发一单,那就是60片
- 计算每片大小:100万 ÷ 60 ≈ 16,667股/分钟
- 按节奏执行:每分钟发一个16,667股的买单
代码实现起来也很直接:
def twap_schedule(total_qty, total_seconds, interval_seconds=60):
"""
TWAP均匀拆分逻辑
:param total_qty: 总交易量
:param total_seconds: 总执行时间(秒)
:param interval_seconds: 每次发单间隔(秒)
:return: 每单数量列表
"""
num_slices = total_seconds // interval_seconds
slice_qty = total_qty / num_slices
# 这里有个细节:余数处理
remainder = total_qty - slice_qty * num_slices
schedule = [slice_qty] * num_slices
# 把余数均匀分配到前几单
for i in range(int(remainder)):
schedule[i] += 1
return schedule
# 示例:1小时买入100万股,每60秒发一单
slices = twap_schedule(1_000_000, 3600, 60)
print(f"共{len(slices)}单,每单约{int(slices[0])}股")
你看,代码里我特意加了一个余数处理。为什么?因为100万除以60不是整数。如果不处理,最后一单会多出一些股数,破坏均匀性。我曾经因为这个细节吃过亏——余数堆积到最后,导致尾盘那一单特别大,直接被交易所问询了。
4.3 执行节奏:不是简单的定时器
均匀拆分只是第一步。真正的执行节奏,要考虑的东西更多。
我建议你把执行节奏分成三个层次:
| 层次 | 说明 | 我踩过的坑 |
|---|---|---|
| 宏观节奏 | 整个执行周期的分配 | 曾经在开盘前15分钟集中发单,结果被市场流动性打脸 |
| 中观节奏 | 每个时间片的执行 | 固定间隔遇到流动性枯竭,单子挂半天成交不了 |
| 微观节奏 | 单笔订单的报撤 | 频繁撤单被交易所标记为异常交易 |
这里有一个常见的误区:很多人以为TWAP就是设个定时器,每分钟发一单就完事了。其实不是。你想想看,如果市场突然暴跌,你还按原计划买,那不是接飞刀吗?
我的实战经验:
TWAP执行时,我会加一个"价格偏离保护"。如果当前价格偏离TWAP目标超过一定阈值(比如0.5%),就暂停执行,等价格回归再继续。这个逻辑虽然简单,但能避免很多极端行情下的亏损。
4.4 避坑指南:我曾经犯过的错
做TWAP策略这几年,我踩过的坑不少。挑几个典型的说说:
- 坑一:忽略市场微观结构。我曾经在某个流动性很差的股票上跑TWAP,每5秒发一单。结果因为订单太小,被高频交易者识别出规律,他们提前抢跑,导致我每次买入都买在更高的价格。后来我改成随机间隔,才解决了这个问题。
- 坑二:没有考虑交易成本。TWAP拆得越细,交易次数越多,手续费和滑点成本就越高。我见过有人把100万的单子拆成1000份,结果手续费占了总成本的0.3%。嗯,这个比例其实很高了。
- 坑三:忽略市场冲击的累积效应。虽然每单很小,但如果市场本身流动性不足,这些小单也会慢慢推高价格。我建议在流动性差的时段,适当降低执行频率。
重要提醒:
TWAP不是万能的。它假设市场在时间上是均匀的,但现实往往不是。如果遇到重大新闻、财报发布、或者市场剧烈波动,TWAP的表现会大打折扣。这时候,我通常会切换到VWAP或者干脆暂停执行。
4.5 知识体系图:TWAP策略全景
下面这张图,是我自己整理TWAP策略时画的。它把整个策略的核心逻辑串起来了:
这张图把TWAP的执行流程分成了三步:先均匀拆分,再控制节奏,最后加上保护机制。我个人觉得,保护机制是最容易被忽略的,但恰恰是最重要的。没有保护的TWAP,就像没有刹车的车——跑得快,但停不下来。
好了,TWAP的原理就讲到这里。记住它的核心:时间加权、均匀拆分、节奏控制。下一节我们会把TWAP和VWAP放在一起对比,看看它们各自的适用场景。
公众号:蓝海资料掘金营,微信deep3321