4、均匀切片策略实现:固定时间间隔切片、固定成交量切片、两种模式的优劣对比
好了,咱们进入第四章。这一章我打算聊聊均匀切片策略的具体实现。说白了,就是TWAP算法最核心的那两个玩法:固定时间间隔切片和固定成交量切片。
我在做量化系统的时候,经常被问到:“到底用哪种切片方式更好?” 嗯,这个问题没有标准答案。但我会把两种模式的实现细节、优缺点,以及我踩过的坑,都给你掰开揉碎了讲清楚。
4.1 固定时间间隔切片
这个模式最简单,也最直观。你想想看,就是把交易时间切成N等份,每份时间到了,就扔出去一份订单。
举个例子。假设你要在1小时内买入100万股。时间间隔设为5分钟。那么你会得到12个时间窗口。每个窗口到了,就下单买入大约8.33万股。
代码实现起来也很直接:
def fixed_time_slice(total_qty, total_seconds, interval_seconds):
"""
固定时间间隔切片
:param total_qty: 总成交量
:param total_seconds: 总交易时长(秒)
:param interval_seconds: 切片间隔(秒)
:return: 每个时间点的下单量列表
"""
slices = []
num_slices = total_seconds // interval_seconds
qty_per_slice = total_qty / num_slices
for i in range(num_slices):
slices.append({
'time': i * interval_seconds,
'qty': qty_per_slice
})
return slices
我个人习惯用这个模式做基准测试。为什么?因为它简单、可预测。你一眼就能看出订单会在什么时间点发出去。
4.2 固定成交量切片
这个模式就聪明一些了。它不关心时间,只关心成交量。每成交固定数量的股票,就触发下一笔订单。
我在项目中遇到过这样的情况:市场突然放量,固定时间切片还在傻等,而固定成交量切片已经跟着市场节奏走完了。这就是它的优势。
实现逻辑是这样的:
def fixed_volume_slice(total_qty, slice_qty):
"""
固定成交量切片
:param total_qty: 总成交量
:param slice_qty: 每片成交量
:return: 切片列表
"""
slices = []
remaining = total_qty
while remaining > 0:
current_slice = min(slice_qty, remaining)
slices.append({
'qty': current_slice
})
remaining -= current_slice
return slices
你想想看,这个模式的好处是什么?它能自适应市场节奏。市场活跃时,切片执行得快;市场冷清时,切片自然放慢。说白了,就是让算法跟着市场走,而不是跟市场对着干。
4.3 两种模式的优劣对比
好了,咱们来做个对比。我整理了一个表格,方便你直观地看:
| 对比维度 | 固定时间间隔 | 固定成交量 |
|---|---|---|
| 实现难度 | 简单 | 中等 |
| 市场适应性 | 差 | 好 |
| 滑点控制 | 一般 | 较好 |
| 执行透明度 | 高 | 中等 |
| 适合场景 | 流动性好的市场 | 流动性一般的市场 |
为什么会这样?我来解释一下。
固定时间间隔的致命伤: 它假设市场流动性是均匀的。但现实不是这样的。市场有时像瀑布,有时像小溪。你按固定时间下单,很可能在流动性枯竭时硬塞进去,造成不必要的滑点。
固定成交量的优势: 它尊重市场节奏。每笔订单的成交量固定,市场冲击也就固定了。你想想看,这就像是在跟市场商量:“我每次只买这么多,你看着办。”
不过,固定成交量也有缺点。它可能导致执行时间不可控。如果市场突然没量了,你的订单可能拖很久才完成。
4.4 核心逻辑流程图
为了让你更直观地理解这两种模式的区别,我画了一张流程图:
这张图展示了两种模式的核心流程。左边是固定时间间隔,右边是固定成交量。你看,它们的区别从决策点就开始分叉了。
4.5 我的实战建议
说了这么多,到底该怎么选?我给你三条建议:
- 做小单、流动性好的品种:用固定时间间隔。简单、省心、执行透明。
- 做大单、流动性一般的品种:用固定成交量。控制滑点,尊重市场。
- 最稳妥的做法:两种模式结合。比如,用固定时间间隔做框架,但每片成交量设一个上限。这样既控制了时间,又控制了冲击。
记住一句话: 没有最好的策略,只有最适合当前市场的策略。你想想看,市场在变,你的策略也得跟着变。
嗯,这一章就到这里。均匀切片策略是TWAP的基础,但也是最重要的部分。把这两种模式吃透了,后面的进阶玩法你才能玩得转。