一、TWAP算法概述

什么是TWAP算法

TWAP,全称Time-Weighted Average Price,时间加权平均价格算法。说白了,就是把一个大订单拆成若干小单,在固定时间段内均匀执行。

我刚开始接触量化交易时,觉得这玩意儿太简单了——不就是定时定点下单吗?后来在实际项目中踩过坑才发现,里面的门道比想象中多得多。

举个例子:你手里有10万股的茅台要卖出。如果一次性砸出去,盘口瞬间被打穿,成交价会很难看。TWAP的做法是:把10万股拆成100份,每份1000股,每隔几分钟下一单。这样市场冲击小,最终成交价接近这段时间的平均价。

核心逻辑其实就一句话:时间维度上的均匀分配。算法不关心价格高低,只关心时间到了没有。

TWAP的核心公式:

目标成交量 = 总订单量 / 总时间片数

每个时间片执行:
  当前应完成量 = 目标成交量 × 当前时间片序号
  剩余量 = 总订单量 - 已成交量
  本次下单量 = min(目标成交量, 剩余量)

嗯,这里要注意:实际项目中,我们不会死板地按固定时间下单。我习惯加入随机偏移量,防止被市场嗅探到你的交易模式。

TWAP与VWAP的区别

很多新手分不清TWAP和VWAP,其实它们完全是两码事。

对比维度 TWAP VWAP
权重依据 时间 成交量
执行逻辑 均匀分配 跟随市场流动性
适用场景 流动性好的品种 流动性一般的品种
市场冲击 中等 较低
实现难度 简单 中等

我个人的理解是:TWAP是个「老实人」,到点就干活,不管市场忙不忙。VWAP则像个「精明人」,专挑市场活跃的时候多干活,冷清的时候少干活。

为什么会这样?因为VWAP的目标是让成交价接近成交量加权均价,所以它必须跟着成交量走。而TWAP只关心时间,你想想看,如果某个时间段市场突然冷清,TWAP照样往里冲,这就会产生不必要的冲击成本。

我在项目中遇到过这样的情况:用TWAP交易一只流动性一般的股票,下午开盘后市场突然缩量,但算法还在按固定节奏下单,结果把价格打下去好几个tick。后来换成VWAP,情况就好多了。

TWAP的适用场景

不是所有场景都适合用TWAP。我总结了几种典型情况:

  • 高流动性品种:比如大盘蓝筹股、主流ETF。这些品种买卖盘厚实,均匀下单不会引起太大波动。
  • 日内回转交易:如果你做T+0,需要在收盘前平掉仓位,TWAP是个稳妥的选择。
  • 被动型策略:有些策略不追求alpha,只求以市场均价成交,TWAP正好满足需求。
  • 测试阶段:新策略上线前,我习惯先用TWAP跑一段时间,观察市场反应。

我的经验:TWAP最适合交易时段的前30分钟和后30分钟。这两个时间段流动性最好,均匀下单的冲击成本最低。中间时段可以考虑适当调整节奏。

TWAP的局限性

任何算法都有短板,TWAP也不例外。说几个我踩过的坑:

  • 无视市场流动性:这是最大的问题。市场冷清时硬上,等于给做市商送钱。
  • 容易被狙击:固定节奏下单,有心人很容易算出你的下单规律。我曾经吃过这个亏,后来加了随机偏移才解决。
  • 不适合大单:订单量超过日均成交量5%时,TWAP的冲击成本会急剧上升。这时候得用更复杂的算法。
  • 无法应对极端行情:遇到闪崩或急拉,TWAP还在按部就班地执行,结果可想而知。

避坑指南:我曾经在2015年股灾时用TWAP执行一个卖出订单,结果市场暴跌,算法还在均匀卖出,最后成交价比预期低了3%。从那以后,我每次用TWAP都会加一个价格保护机制——如果价格偏离超过阈值,就暂停执行。

TWAP的核心逻辑图

下面这张图展示了TWAP算法的完整执行流程:

TWAP算法执行流程 输入:总订单量 + 时间区间 步骤1:计算时间片数 N 步骤2:计算每片目标量 = 总量 / N 是否到达执行时间? 等待 步骤3:执行下单(含随机偏移)

这张图把TWAP的流程拆成了三步:先算时间片数,再算每片目标量,最后到点就执行。实际项目中,我还会在第三步加入价格检查和成交量检查,防止在极端行情下硬冲。

好了,TWAP的基本概念就讲到这里。记住一句话:TWAP是个好工具,但别把它当万能钥匙。用对场景,它是利器;用错场景,它就是坑。