4. 时间切片算法:等量切片、等额切片、成交量加权切片
好,咱们进入TWAP拆单策略的核心环节——时间切片算法。
说白了,就是把一个大订单,切成一小块一小块,然后按某种规则丢到市场里去。切法不同,效果天差地别。我这些年踩过的坑,多半都跟切片方式选错了有关。
4.1 等量切片——最朴素的切法
等量切片,也叫均匀切片。逻辑很简单:总订单量除以总时间片数,每片丢同样数量的单子。
举个例子:我要买10万股,交易时间4小时(240分钟),每分钟切一片。那每片就是:
每片数量 = 100,000 / 240 ≈ 416.67 股
嗯,这里有个细节——股票交易最小单位是1股,所以实际执行时得取整。我习惯用向下取整,然后把余数塞到最后一片里。
核心公式:
SliceSize = TotalQty / N
其中 N = 总交易时间 / 切片间隔
等量切片的好处是啥?实现简单,逻辑透明,风控好做。你想想看,每片数量固定,交易所那边看到的订单流是均匀的,不容易引起注意。
但问题也很明显——它完全无视市场成交量。如果某段时间市场特别冷清,你这416股丢进去,可能直接把价格打穿好几个档位。我在2019年做过一个港股项目,就是吃了这个亏,等量切片在早盘流动性差的时候,滑点直接爆表。
4.2 等额切片——按金额切,不是按股数
等额切片,跟等量切片思路类似,但切的是金额,不是股数。
比如总金额100万,分240片,每片约4166元。然后根据实时价格,动态计算每片该买多少股。
每片金额 = 总金额 / N
每片股数 = 每片金额 / 当前价格
这里有个坑——价格是实时变的,所以每片的股数也在变。价格高的时候买得少,价格低的时候买得多。从效果上看,等额切片天然带有「低买高卖」的倾向。
我个人习惯在震荡市里用等额切片。为什么呢?因为价格波动时,它能自动调整仓位,比等量切片更平滑。但要注意,如果价格单边上涨,等额切片会导致你越买越少,最后可能完不成目标持仓。
我的经验:
等额切片适合「目标金额」型订单,比如我要花500万建仓。如果是「目标股数」型订单,比如我要买10万股,那等额切片就不太合适了——因为最终股数会随价格波动而变化。
4.3 成交量加权切片——跟市场走
这才是真正有点技术含量的切法。
成交量加权切片,核心思想是:市场成交量大的时候,我多切一点;成交量小的时候,我少切一点。说白了,就是跟着市场的节奏走。
具体做法:先预测未来每个时间片的成交量占比,然后按这个比例分配订单。
SliceSize_i = TotalQty * (预测成交量_i / 总预测成交量)
预测成交量怎么来?我一般用历史数据的加权平均。比如取过去5天同一时间段的成交量,给最近的一天权重高一些。
一个简单的预测模型:
# 假设有5天的历史成交量数据
weights = [0.05, 0.1, 0.15, 0.3, 0.4] # 越近权重越高
pred_vol = sum(hist_vol[i] * weights[i] for i in range(5))
成交量加权切片的好处很明显——它天然适应市场流动性。流动性好的时候多交易,流动性差的时候少交易,滑点控制效果远好于等量切片。
我曾经在A股市场做过对比测试:同样1000万的订单,等量切片平均滑点0.12%,成交量加权切片只有0.06%。差距一倍。
注意:
成交量加权切片依赖预测准确性。如果某天突发利空,成交量异常放大,你的预测模型会失效。我建议加一个实时修正机制——每完成一片,就根据实际成交量调整后续切片的大小。
4.4 三种切法的对比
我把三种切法的核心差异整理成了一张表,方便你对比:
| 特性 | 等量切片 | 等额切片 | 成交量加权切片 |
|---|---|---|---|
| 切片依据 | 股数固定 | 金额固定 | 成交量占比 |
| 对价格敏感度 | 低 | 高 | 中 |
| 对流动性适应 | 差 | 中 | 好 |
| 实现复杂度 | 低 | 低 | 中 |
| 滑点控制 | 一般 | 较好 | 优秀 |
| 适用场景 | 流动性好、波动小 | 震荡市、金额目标 | 大单、流动性不均 |
4.5 三种切法的逻辑关系
下面这张图,是我自己画的时间切片算法知识结构。你可以看到三种切法从简单到复杂,从静态到动态的演进关系:
4.6 实战中的选择建议
说了这么多,到底该用哪种?我个人的经验是:
- 小单(< 总成交量1%):等量切片就够了,别折腾。我见过太多人小单用复杂算法,结果收益覆盖不了开发成本。
- 中单(1%-5%):成交量加权切片是首选。预测模型不用太复杂,取过去5天加权平均就够用。
- 大单(> 5%):建议用成交量加权切片 + 实时修正。我曾经处理过一个占比15%的大单,就是靠实时修正机制,把滑点控制在0.1%以内。
避坑指南:
我曾经在期货市场吃过一次亏——用成交量加权切片时,没考虑夜盘和日盘的成交量差异。结果夜盘预测严重偏大,导致切片过大,滑点飙升。后来我加了「时段因子」,把不同交易时段分开建模,问题才解决。
嗯,时间切片算法就讲到这里。记住一句话:没有最好的算法,只有最合适的算法。你的订单特征、市场环境、系统能力,共同决定了该选哪种切法。
公众号:蓝海资料掘金营,微信deep3321