一、TWAP核心原理:时间切片机制、均匀分配逻辑、订单执行时间表

各位同学好,我是老张。今天咱们来聊聊TWAP最核心的三个东西——时间切片、均匀分配、执行时间表。这三个概念,说白了就是TWAP的骨架。你把这套东西吃透了,后面写代码就是水到渠成的事。

1.1 时间切片机制——把大单子切成小份

先问大家一个问题:你手里有100万股茅台要卖,你会怎么卖?

一次性砸出去?那股价直接被你打穿几个点,你信不信?

我早年刚入行的时候,就干过这种蠢事。当时接了个大单,想着快进快出,结果一单下去,盘口直接空了,后面几笔全成交在低价。被风控叫去喝茶,那滋味……嗯,不提了。

TWAP的思路很简单:把时间切成等长的小段,每段只执行一小部分订单。

举个例子:

  • 总订单:100万股
  • 执行时间:10:00 - 11:00(60分钟)
  • 切片长度:1分钟
  • 切片数量:60片

这样每片只需要处理约1.67万股。市场压力瞬间就分散了。

核心公式:

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

每片成交量 = 总订单量 / 切片数量

你想想看,这就像吃蛋糕。一整块蛋糕你一口吞下去,噎得慌。切成60小块,慢慢吃,舒服多了。

1.2 均匀分配逻辑——不偏不倚,一碗水端平

切片切好了,接下来就是怎么分配的问题。

TWAP的核心思想就四个字:均匀分配

什么意思?就是每个时间切片里,你执行的订单量是一样的。不因为某段时间流动性好就多买,也不因为某段时间波动大就少买。

我见过一些新手,觉得「既然10:30那会儿成交量最大,我就在那会儿多卖点」。听起来有道理,但你想过没有——如果所有人都这么想,那10:30的抛压会多大?你反而成了那个制造波动的人。

TWAP的逻辑是:我不管市场怎么变,我就按我的节奏来

具体到代码里,均匀分配就是:

# 伪代码示例
total_volume = 1000000  # 总订单量
num_slices = 60         # 切片数
volume_per_slice = total_volume / num_slices  # 每片约16667股

for i in range(num_slices):
    execute(volume_per_slice)
    sleep(60)  # 等1分钟

你看,就这么简单。但实际项目中,这里有个坑——整除问题

注意:总订单量不一定能被切片数整除。比如100万股分60片,每片16666.666...股。你总不能下0.666股的单子吧?

我通常的做法是:前59片每片16666股,最后一片补足余数。或者用随机分配,让每片在16666-16667之间浮动。

1.3 订单执行时间表——你的作战地图

有了切片,有了分配逻辑,接下来就是排时间表了。

订单执行时间表,说白了就是一张表,告诉你:什么时间,该干什么事

我习惯用表格来管理这个时间表,清晰直观:

时间窗口 切片编号 计划成交量 累计成交量 完成比例
10:00 - 10:01 1 16,667 16,667 1.67%
10:01 - 10:02 2 16,667 33,334 3.33%
10:02 - 10:03 3 16,667 50,001 5.00%
... ... ... ... ...
10:59 - 11:00 60 16,655 1,000,000 100%

这个表有什么用?

  • 监控进度:实时对比「实际成交量」和「计划成交量」,偏差大了就报警
  • 调整节奏:如果某个切片没成交完,后面要补回来
  • 风控依据:超过某个偏差阈值,自动暂停或人工干预

我曾经遇到过一个情况:某只股票在10:15突然停牌了,我的TWAP还在傻乎乎地发单。幸好时间表里有个「连续N个切片未成交则暂停」的逻辑,帮我拦住了。不然等复牌时,我的订单全堆在那,价格直接飞了。

1.4 核心逻辑流程图

下面这张图,是我自己画的核心逻辑。你把它存下来,后面写代码的时候对照着看:

TWAP核心逻辑流程图 开始执行TWAP 步骤1:设置总订单量、执行时间、切片长度 步骤2:计算切片数量 & 每片成交量 步骤3:生成订单执行时间表 步骤4:按时间表逐片执行订单 全部执行完毕

我的小建议:实际项目中,步骤4里一定要加个「偏差监控」的环节。每执行完一个切片,就对比一下实际成交量和计划成交量。偏差超过5%,就要考虑调整后续切片的速度了。

1.5 三个核心概念的关系

最后,我帮你捋一捋这三个概念的关系:

  • 时间切片是「怎么切」——把时间切成小段
  • 均匀分配是「怎么分」——每段分多少量
  • 执行时间表是「怎么排」——什么时候做什么事

三者缺一不可。切片切不好,分配再均匀也没用;分配不均匀,时间表就是废纸;没有时间表,前面两个就是空中楼阁。

好了,这一章的核心内容就这些。下一章咱们会动手写代码,把今天讲的这些东西落地。到时候你会发现,原理懂了,代码就是翻译工作。


专注资料整理