3、库存动态平衡策略框架
做市策略的核心,说白了就是跟库存做斗争。你想想看,我们一边要赚买卖价差,一边又得防着库存被砸穿。这个平衡怎么找?我做了这么多年,总结下来就是五个关键环节:目标设定、风险预算、上下限阈值、触发条件、执行算法。一个一个说。
3.1 策略目标设定
做市不是瞎做,得先想清楚你要什么。我个人习惯把目标分成三层:
- 盈利目标:每天赚多少点差,年化收益率多少
- 风险目标:最大回撤控制在多少,单笔亏损上限
- 库存目标:库存净头寸控制在什么范围
这里有个坑,我刚开始做的时候只盯着盈利,结果库存越滚越大,最后被一波行情打穿。嗯,从那以后我学乖了——库存目标优先级永远高于盈利目标。
核心原则:做市策略的盈利是「赚辛苦钱」,不是「赌方向」。库存管理做不好,赚再多也得吐回去。
3.2 风险预算分配
风险预算说白了就是「你愿意亏多少」。我一般按这个逻辑分配:
| 风险层级 | 预算比例 | 说明 |
|---|---|---|
| 单笔交易风险 | 总资金的0.1%-0.5% | 每笔做市订单的最大亏损 |
| 日度风险 | 总资金的1%-3% | 一天内累计亏损上限 |
| 库存风险 | 总资金的5%-10% | 库存净头寸占资金比例 |
| 总风险 | 总资金的15%-20% | 策略整体最大回撤 |
我在项目中遇到过一个问题:风险预算设得太死,行情一波动就频繁触发止损。后来我加了个「动态调整」机制——波动率大的时候适当放宽,波动率小的时候收紧。你想想看,这其实跟开车一样,路况好可以开快点,路况差就得慢下来。
3.3 库存上下限阈值
库存阈值怎么设?我一般用两种方法:
- 固定阈值法:比如库存净头寸不超过总资金的5%
- 动态阈值法:根据历史波动率、当前流动性动态计算
我个人更推荐动态阈值法。为什么?因为市场在变,固定阈值要么太松要么太紧。举个例子:
# 动态阈值计算示例
def calculate_inventory_limits(current_inventory, volatility, liquidity):
# 波动率越高,阈值越紧
vol_factor = 1.0 / (1.0 + volatility * 10)
# 流动性越差,阈值越紧
liq_factor = min(1.0, liquidity / 1000000)
upper_limit = base_limit * vol_factor * liq_factor
lower_limit = -base_limit * vol_factor * liq_factor
return upper_limit, lower_limit
小技巧:阈值不要设成对称的。比如做多库存上限可以比做空库存上限大一点,因为长期来看市场是向上的。当然,这取决于你的交易品种。
3.4 再平衡触发条件
库存到了阈值,什么时候动手?我总结了几种触发条件:
- 阈值触发:库存触及上下限,立即触发
- 时间触发:每隔固定时间检查一次,比如每5分钟
- 事件触发:大单成交、行情剧烈波动时触发
- 组合触发:以上条件组合使用
我曾经犯过一个错误:只用阈值触发。结果库存刚碰到上限,我立马平仓,结果行情又回来了,白白损失了利润。后来我改成「阈值+时间」组合触发——库存超限后先等几秒钟,确认不是瞬时波动再动手。
注意:触发条件太敏感会导致频繁交易,增加手续费和滑点。太迟钝又会导致库存风险失控。这个平衡需要根据品种特性反复调试。
3.5 再平衡执行算法
触发再平衡后,怎么执行?我常用的算法有几种:
- 市价单直接平仓:简单粗暴,但滑点大
- 限价单逐步平仓:分批次挂单,减少冲击成本
- TWAP/VWAP算法:按时间或成交量加权平均执行
- 智能路由:根据流动性选择最优交易场所
我个人最常用的是「限价单逐步平仓 + 动态调整」。具体来说:
def rebalance_execution(current_inventory, target_inventory, urgency):
"""
再平衡执行算法
urgency: 0-1之间的值,0表示不着急,1表示立即执行
"""
remaining = current_inventory - target_inventory
orders = []
# 根据紧急程度决定分批数量
num_slices = max(1, int(10 * (1 - urgency)))
slice_size = remaining / num_slices
for i in range(num_slices):
# 每批价格偏移,越往后越激进
price_offset = (i / num_slices) * max_spread * urgency
orders.append({
'size': slice_size,
'price': mid_price + price_offset * direction
})
return orders
关键点:执行算法的核心是「时间换价格」还是「价格换时间」。库存风险高的时候,我宁愿多花点成本也要快速平仓。库存风险可控的时候,慢慢挂单等好价格。
嗯,这套框架我用了好几年,从加密货币到股票、期货都验证过。核心就是一句话:库存管理不是事后补救,而是事前规划、事中监控、事后复盘。你把这个框架搭好了,做市策略就成功了一大半。
避坑指南:我曾经在某个流动性极差的品种上用了市价单平仓,结果直接把价格打穿了两个档位,亏了不少。从那以后,流动性差的品种我坚决用限价单,哪怕慢一点。
这张图把整个框架串起来了。你从目标设定开始,到风险预算、阈值设定、触发条件、执行算法,最后回到复盘优化。循环往复,不断迭代。