3. 时间切片法:将大单按时间均匀拆分
时间切片法,说白了就是把你手里的大单子,切成一小块一小块,然后每隔固定时间扔出去一小块。
比如你手里有10万手要卖,你设定每5秒卖1000手。就这么简单。
我刚开始做量化的时候,觉得这方法太笨了。后来在实盘里吃过亏,才发现——笨办法往往最管用。
3.1 核心逻辑
时间切片法的核心就一句话:用时间换空间。
你想想看,大单直接砸下去,盘口瞬间就崩了。但如果你把单子拆成很多份,每份的量不大,市场就能慢慢消化。
我个人的习惯是,在低波动行情里,时间切片法几乎是首选。为什么?因为低波动的时候,市场流动性相对稳定,你按时间均匀拆单,不会引起太大的价格跳动。
适用场景:
- 市场波动率低(比如日内振幅小于1%)
- 流动性中等偏上
- 你不需要急着成交(没有时间压力)
3.2 具体怎么做
假设你总共有30万手要卖出,计划在30分钟内完成。
那很简单:
- 总时间:30分钟 = 1800秒
- 总数量:30万手
- 每秒钟需要卖:300,000 ÷ 1800 ≈ 167手
但实际交易中,你不会每秒钟都去下单。那样太频繁了,反而容易被盯上。
我建议的做法是:
- 设定一个时间间隔,比如5秒
- 每个间隔内下单量 = 167 × 5 = 835手
- 每5秒执行一次,持续30分钟
代码实现也很简单:
class TimeSliceAlgo:
def __init__(self, total_qty, total_seconds, interval=5):
self.total_qty = total_qty # 总数量
self.total_seconds = total_seconds # 总时间(秒)
self.interval = interval # 时间间隔(秒)
self.qty_per_slice = total_qty / (total_seconds / interval)
def next_order(self):
# 返回当前时间片应该下的单量
return self.qty_per_slice
嗯,这里要注意:qty_per_slice 算出来可能不是整数。我一般会向下取整,然后把余数累积到下一个时间片。这样能保证总数量刚好用完。
3.3 避坑指南
我曾经踩过的坑:
- 时间间隔太短:比如1秒一次。结果系统压力大,还容易被交易所限流。我建议至少3秒以上。
- 忽略开盘/收盘:开盘和收盘的波动通常较大。时间切片法在中间时段效果最好。
- 死板执行:如果盘口突然出现大单,你还按原计划拆单,那就亏了。要学会暂停或调整。
3.4 时间切片法的优缺点
| 优点 | 缺点 |
|---|---|
| 实现简单,逻辑清晰 | 对市场变化不敏感 |
| 低波动行情下效果稳定 | 高波动时容易吃亏 |
| 不容易被市场察觉 | 无法利用短期机会 |
| 适合大单分批出场 | 时间成本固定,无法加速 |
3.5 核心逻辑图
下面这张图展示了时间切片法的完整流程:
3.6 实战中的调整
理论说完了,聊聊实战。
我做过一个回测:在低波动行情下,时间切片法比直接大单成交的滑点降低了约60%。但前提是——你得选对时间间隔。
我个人经验:
- 流动性好的股票:间隔可以短一些,3-5秒
- 流动性一般的股票:间隔拉长到10-15秒
- 期货或币圈:间隔可以更短,但要注意交易所的限流规则
一个小技巧:
如果你发现某个时间片内,盘口的买一单量突然变大了,可以适当加大这个时间片的单量。说白了就是「趁流动性好的时候多卖点」。但别太贪,加量不超过原计划的50%。
时间切片法虽然简单,但它是所有拆单策略的基础。你把它搞懂了,后面学更复杂的算法(比如VWAP、TWAP)就会轻松很多。
嗯,这一节就到这里。记住:低波动行情下,时间切片法是你最可靠的伙伴。