3、库存动态平衡策略框架

做市策略的核心,说白了就是跟库存做斗争。你想想看,我们一边要赚买卖价差,一边又得防着库存被砸穿。这个平衡怎么找?我做了这么多年,总结下来就是五个关键环节:目标设定、风险预算、上下限阈值、触发条件、执行算法。一个一个说。

3.1 策略目标设定

做市不是瞎做,得先想清楚你要什么。我个人习惯把目标分成三层:

  • 盈利目标:每天赚多少点差,年化收益率多少
  • 风险目标:最大回撤控制在多少,单笔亏损上限
  • 库存目标:库存净头寸控制在什么范围

这里有个坑,我刚开始做的时候只盯着盈利,结果库存越滚越大,最后被一波行情打穿。嗯,从那以后我学乖了——库存目标优先级永远高于盈利目标

核心原则:做市策略的盈利是「赚辛苦钱」,不是「赌方向」。库存管理做不好,赚再多也得吐回去。

3.2 风险预算分配

风险预算说白了就是「你愿意亏多少」。我一般按这个逻辑分配:

风险层级 预算比例 说明
单笔交易风险 总资金的0.1%-0.5% 每笔做市订单的最大亏损
日度风险 总资金的1%-3% 一天内累计亏损上限
库存风险 总资金的5%-10% 库存净头寸占资金比例
总风险 总资金的15%-20% 策略整体最大回撤

我在项目中遇到过一个问题:风险预算设得太死,行情一波动就频繁触发止损。后来我加了个「动态调整」机制——波动率大的时候适当放宽,波动率小的时候收紧。你想想看,这其实跟开车一样,路况好可以开快点,路况差就得慢下来。

3.3 库存上下限阈值

库存阈值怎么设?我一般用两种方法:

  1. 固定阈值法:比如库存净头寸不超过总资金的5%
  2. 动态阈值法:根据历史波动率、当前流动性动态计算

我个人更推荐动态阈值法。为什么?因为市场在变,固定阈值要么太松要么太紧。举个例子:

# 动态阈值计算示例
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 再平衡执行算法

触发再平衡后,怎么执行?我常用的算法有几种:

  1. 市价单直接平仓:简单粗暴,但滑点大
  2. 限价单逐步平仓:分批次挂单,减少冲击成本
  3. TWAP/VWAP算法:按时间或成交量加权平均执行
  4. 智能路由:根据流动性选择最优交易场所

我个人最常用的是「限价单逐步平仓 + 动态调整」。具体来说:

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

关键点:执行算法的核心是「时间换价格」还是「价格换时间」。库存风险高的时候,我宁愿多花点成本也要快速平仓。库存风险可控的时候,慢慢挂单等好价格。

嗯,这套框架我用了好几年,从加密货币到股票、期货都验证过。核心就是一句话:库存管理不是事后补救,而是事前规划、事中监控、事后复盘。你把这个框架搭好了,做市策略就成功了一大半。

避坑指南:我曾经在某个流动性极差的品种上用了市价单平仓,结果直接把价格打穿了两个档位,亏了不少。从那以后,流动性差的品种我坚决用限价单,哪怕慢一点。

库存动态平衡策略框架 库存动态平衡 策略目标设定 风险预算分配 库存上下限阈值 再平衡触发条件 再平衡执行算法 事前规划 → 事中监控 → 事后复盘 库存管理不是事后补救,而是贯穿始终

这张图把整个框架串起来了。你从目标设定开始,到风险预算、阈值设定、触发条件、执行算法,最后回到复盘优化。循环往复,不断迭代。

专注资料整理