第四章:时间加权平均价格算法(TWAP)

TWAP,全称 Time-Weighted Average Price。说白了,就是把一个大单子,均匀地切碎,在固定时间段内分批执行。

我刚开始做算法交易那会儿,觉得这玩意儿太简单了。不就是个定时器加循环吗?后来踩了坑才发现,越是简单的东西,细节越要命。

4.1 TWAP 的核心原理

TWAP 的逻辑很直白:

  • 你有一个总订单,比如 100 万股
  • 你设定一个执行窗口,比如 10:00 到 11:00
  • 系统把这个窗口切成 N 个等长的时间片
  • 每个时间片,你只下总单量的 1/N

举个例子。假设你在 10:00 要卖出 60 万股,窗口是 1 小时。切成 12 个 5 分钟片,每片只卖 5 万股。就这么简单。

嗯,这里要注意:TWAP 不关心价格。它只关心时间。价格高也好,低也好,到点就下单。这是它和 VWAP 最大的区别。

4.2 数学公式

TWAP 的数学表达其实很简洁:

TWAP = (1/N) * Σ(P_i)

其中:

  • N = 总时间片数量
  • P_i = 第 i 个时间片的成交价格

你想想看,这个公式意味着什么?它把每个时间片的成交价一视同仁。不管那个时间片成交量是大是小,权重都一样。

我在项目中遇到过一个问题:如果某个时间片流动性特别差,硬要下单,就会把价格打得很远。TWAP 不考虑这个,所以它更适合流动性好的股票。

4.3 适用场景

TWAP 不是万能的。我个人习惯把它用在以下几个场景:

场景 说明
大盘股 流动性好,每片都能顺利成交
非紧急订单 不急着在几分钟内完成,可以慢慢来
指数跟踪 需要均匀建仓或减仓时
隐藏意图 不想让市场察觉你在大量买卖

说白了,TWAP 最适合那种「不着急、不显眼、不折腾」的订单。

4.4 优缺点分析

优点

  • 实现简单:几行代码就能跑起来
  • 可预测性强:你知道每个时间片下多少单
  • 市场冲击小:单子切碎了,不会吓到对手盘
  • 隐藏意图:别人很难看出你在执行大单

缺点

  • 不跟踪价格:价格跌了你也得卖,涨了你也得买
  • 忽略流动性:流动性差的时间片,硬下会吃亏
  • 执行成本不确定:最终成交价可能偏离市场均价
  • 不适合小盘股:流动性不足,容易把价格打飞

我曾经吃过一次亏。那是个小盘股,我用了 TWAP,结果在某个时间片里,我的单子占了当时盘口 80% 的卖单。价格直接被打下去 2 个点。嗯,从那以后,我对小盘股再也不敢用纯 TWAP 了。

4.5 核心逻辑流程图

下面这张图,是我自己画的一个 TWAP 执行流程。你看一眼就明白了:

TWAP 算法执行流程 输入:总数量、时间窗口 切分 N 个等长时间片 每片数量 = 总数量 / N 循环:每片到点即下单 全部执行完毕 关键参数: • 时间片长度:通常 1-5 分钟 • N 值:10-60 片 • 每片数量:均匀分配 ⚠ 注意: 流动性不足时慎用

4.6 避坑指南

我曾经犯过的错:

  • 把时间片切得太细(比如 10 秒一片),结果频繁报单被交易所限流
  • 没考虑开盘和收盘的波动,在 9:30 和 15:00 附近硬下
  • 忽略了除权除息日,导致数量计算错误

我的建议:

  • 时间片长度建议 1-5 分钟,别太短
  • 避开开盘前 5 分钟和收盘前 5 分钟
  • 如果流动性突然变差,可以临时暂停 TWAP
  • 配合冰山订单使用,效果更好

一句话总结:

TWAP 是算法交易里的「老实人」。它不耍花招,不预测价格,只是老老实实地按时间均匀执行。适合大盘股、非紧急订单。但别指望它帮你优化价格,它只负责「均匀」。


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