2. 核心数学原理:时间加权平均价格的计算公式、切片逻辑与权重分配、订单拆分模型

各位同学,咱们今天来啃硬骨头——TWAP的数学内核。说实话,很多做量化的人把TWAP想得太简单了,以为就是“把单子均匀拆开,每隔一段时间扔一笔”。嗯,如果你真这么干,实盘的时候大概率会被市场教育得鼻青脸肿。

我当年刚入行时也犯过这个错。记得有一次做ETF的TWAP,我天真地用了等量拆分,结果尾盘被流动性黑洞直接吞掉两个滑点。从那以后,我老老实实把数学原理重新捋了一遍。今天就把这些经验分享给你。

2.1 时间加权平均价格的计算公式

先搞清楚一个根本问题:TWAP到底在算什么?

TWAP的全称是Time-Weighted Average Price,时间加权平均价格。它的定义很简单——在某个时间段内,每个时间点的价格按照时间权重求平均。

数学公式长这样:

TWAP = (P₁ + P₂ + P₃ + ... + Pₙ) / N

其中Pᵢ是第i个时间点的价格,N是总时间点数量。

等等,你可能会问:这不就是简单算术平均吗?时间加权体现在哪?

好问题。其实这个公式隐含了一个假设——每个时间点的权重是相等的。也就是说,每个时间切片对最终价格的贡献是一样的。这就是“时间加权”的真正含义:权重由时间决定,而不是由成交量决定。

核心区别:

  • VWAP(成交量加权):权重 = 成交量,大单成交时价格影响更大
  • TWAP(时间加权):权重 = 时间,每个时刻平等对待

我个人习惯把TWAP理解成“时钟驱动”的算法。它不关心市场在某个时刻成交了多少,只关心时间到了没有。说白了,这是一种“时间至上”的哲学。

2.2 切片逻辑与权重分配

公式搞清楚了,接下来就是怎么把一个大单子切成小片。这里有两个关键问题:

  1. 切多少片?——切片数量
  2. 每片多大?——权重分配

2.2.1 切片数量怎么定?

切片数量取决于两个因素:执行时长和切片间隔。

切片数量 = 执行总时长 / 切片间隔

举个例子:你要在1小时内完成交易,每5分钟切一片,那就是12片。

但这里有个坑——切片间隔不是随便选的。我建议你考虑以下几点:

  • 市场流动性:流动性差的品种,间隔拉长一点,别把盘口打穿
  • 订单规模:单子越大,切片越多,但每片不能太小(否则手续费占比太高)
  • 交易成本:每笔交易都有固定成本,切片太多不划算

实战经验:

我曾经做过一个回测,把1小时的执行窗口分别切成6片、12片、24片。结果发现12片的效果最好——6片太粗糙,容易被大单干扰;24片又太碎,手续费吃掉不少利润。这个平衡点需要你自己去试。

2.2.2 权重分配:均匀还是不均匀?

标准的TWAP用的是均匀权重——每片大小一样。但实盘中,我很少用纯均匀的。

为什么?因为市场不是均匀的。开盘和收盘时波动大,中间时段相对平稳。如果你在波动大的时段也按均匀权重下单,很容易吃到坏价格。

所以,我常用的权重分配策略有两种:

策略类型 权重分配方式 适用场景
均匀权重 每片权重 = 1/N 市场平稳、流动性充足
非均匀权重 根据历史波动率调整 波动率不对称、有特殊事件

非均匀权重的核心思想是:波动大的时段少下点,波动小的时段多下点。这样能有效降低执行成本。

具体怎么算?我一般用历史波动率曲线来做权重映射:

权重_i = (1 / 波动率_i) / Σ(1 / 波动率_j)

这个公式的意思是:波动率越高的时段,权重越低。你想想看,这很符合直觉——市场乱的时候别瞎掺和。

注意:

非均匀权重虽然能优化执行效果,但有一个副作用——它会让你的执行时间偏离标准TWAP。如果你的考核标准是“严格跟踪TWAP”,那还是老老实实用均匀权重吧。

2.3 订单拆分模型

好了,权重分配好了,接下来就是怎么把单子拆出去。这里我介绍三种常见的拆分模型,也是我在项目中实际用过的。

2.3.1 固定时间间隔模型

这是最基础的模型。每到一个时间点,就发一笔固定大小的订单。

每片数量 = 总数量 / 切片数量

优点:简单、容易实现、回测效果好。
缺点:实盘容易被对手盘预判,而且遇到流动性枯竭时很被动。

2.3.2 随机时间间隔模型

为了规避被预判的问题,我建议在时间间隔上加点随机性。

实际间隔 = 基准间隔 + random(-δ, +δ)

其中δ是随机偏移量,一般取基准间隔的10%-20%。

这样做的好处是:对手盘很难摸清你的下单规律。坏处是:执行时间可能会超出预设窗口。

2.3.3 动态调整模型

这个模型是我最常用的。它根据市场实时状态动态调整每片的数量。

核心逻辑是:

  1. 设定一个目标执行曲线(比如线性曲线)
  2. 每片下单前,检查当前已成交量和目标成交量的偏差
  3. 如果落后了,就加大下一片的数量;如果超前了,就减少

代码实现大概是这样的:

def dynamic_twap_slice(total_qty, elapsed_time, total_time, filled_qty):
    # 目标成交量
    target_qty = total_qty * (elapsed_time / total_time)
    # 偏差
    deviation = target_qty - filled_qty
    # 剩余时间
    remaining_time = total_time - elapsed_time
    # 下一片数量
    next_slice = (total_qty - filled_qty) / remaining_time * slice_interval
    # 加上偏差修正
    next_slice += deviation * correction_factor
    return max(min_slice, next_slice)

这个模型的好处是:能自动适应市场变化。如果前面成交慢了,后面会自动加速补回来。我曾经用这个模型在港股上跑过,效果比固定模型好不少。

三种模型对比:

模型 优点 缺点 推荐指数
固定时间间隔 简单、可预测 易被预判、不灵活 ★★★
随机时间间隔 抗预判 可能超时 ★★★★
动态调整 自适应、鲁棒性强 实现复杂 ★★★★★

2.4 核心逻辑流程图

说了这么多,咱们用一张图把整个流程串起来。这是我画的核心逻辑图,你仔细看看:

TWAP核心逻辑流程图 输入:总数量、时间窗口 步骤1:确定切片数量与间隔 步骤2:权重分配(均匀/非均匀) 步骤3:选择拆分模型 输出:逐笔订单 模型选择 • 固定间隔:简单 • 随机间隔:抗预判 • 动态调整:自适应 权重策略 均匀 vs 非均匀 取决于波动率 和市场状态

这张图把整个流程串起来了。从输入开始,经过切片、权重分配、模型选择,最后输出订单。每一步都有讲究,每一步都影响最终的执行效果。

2.5 避坑指南

最后,我把自己踩过的坑总结一下,你遇到类似情况时能绕开:

  • 坑1:切片间隔太短——我曾经在A股上设了10秒的间隔,结果每片只有几百股,手续费占比高得吓人。建议至少30秒以上。
  • 坑2:忽略市场微观结构——TWAP在流动性好的品种上效果不错,但在小盘股上容易把价格打飞。记得根据品种特性调整参数。
  • 坑3:回测过度优化——回测时参数调得再好,实盘也可能翻车。我建议留20%的数据做样本外测试,别全信回测结果。

我的建议:

刚开始做TWAP时,先用均匀权重+固定间隔跑一段时间,把基础逻辑跑通。等积累足够数据后,再逐步引入非均匀权重和动态调整模型。别一上来就搞复杂的,容易翻车。

好了,这一章的内容就到这。数学原理是TWAP的根基,搞懂了这些,后面的代码实现和实战优化才能站得住脚。你先把公式和模型消化一下,有问题随时问我。

专注资料整理