4. 库存管理基础:库存风险的定义、库存与报价的关系、库存均值回归策略

做市商的核心工作,说白了就是「低买高卖」赚差价。

但这里有个坑——你买进来的货,不一定能马上卖出去。

这些暂时砸在手里的货,就是库存。库存管理,是做市策略里最容易被忽视、却又最致命的一环。我见过不少团队,策略回测时收益曲线漂亮得不行,一上实盘就亏,十有八九是库存管理出了问题。

4.1 库存风险的定义

库存风险,简单讲就是「你手里持有的资产,价格朝不利方向变动的风险」。

举个例子:你以100块的价格买入了1000股,准备在100.1块卖出。结果市场突然跳水,跌到99块。你手里的货瞬间贬值了1000块。这1000块的潜在亏损,就是库存风险。

库存风险的量化指标:

  • 库存价值:当前持仓数量 × 当前市场价格
  • 库存敞口:库存价值 / 总资产净值(百分比)
  • 库存波动率:持仓资产的历史日波动率
  • VaR(在险价值):给定置信水平下,未来一段时间内的最大可能亏损

我个人习惯用「库存敞口」作为核心监控指标。敞口超过30%,我就会开始紧张。为什么?因为一旦市场出现黑天鹅,30%的敞口意味着你可能一天亏掉总资产的10%以上。做市赚的那点差价,根本扛不住这种级别的回撤。

⚠️ 注意:库存风险不是线性的。当市场波动率突然放大时,库存风险会成倍增加。我曾经在实盘中遇到过,平时波动率1%的品种,一天内波动率飙到5%,库存敞口瞬间失控。所以,一定要给库存风险加上「波动率乘数」。

4.2 库存与报价的关系

库存状态直接影响你的报价策略。这个逻辑其实很直观:

  • 库存为正(多头):你手里有货,更希望卖出去。所以卖价应该比正常价更低一些,买价也应该比正常价更低一些——目的是减少买入,增加卖出。
  • 库存为负(空头):你欠着货,更希望买回来。所以买价应该比正常价更高一些,卖价也应该更高一些——目的是减少卖出,增加买入。
  • 库存为零:两边均衡,按正常价差报价。

这里有个关键点:库存对报价的影响,不是「有或无」,而是「程度」的问题。

我一般用一个简单的线性公式来调整报价:

# 库存调整因子
inventory = current_position  # 当前持仓(正数为多,负数为空)
max_inventory = 1000          # 最大允许持仓

# 调整系数,范围 [-1, 1]
adjustment = inventory / max_inventory

# 调整后的买价和卖价
base_bid = mid_price - spread / 2
base_ask = mid_price + spread / 2

adjusted_bid = base_bid - adjustment * skew_factor
adjusted_ask = base_ask - adjustment * skew_factor

# 当库存为正时,adjustment > 0,买价和卖价都降低
# 当库存为负时,adjustment < 0,买价和卖价都提高

你看,库存为正时,两边报价都往下压。这样做的效果是:你更可能卖出(因为卖价低了),同时更不可能买入(因为买价也低了)。库存自然慢慢降下来。

💡 实战技巧:skew_factor(偏移因子)这个参数很关键。设得太小,库存调整效果不明显;设得太大,报价会偏离市场太远,导致成交率下降。我一般用历史数据回测来调这个参数,目标是在「库存回归速度」和「成交率」之间找到平衡点。

4.3 库存均值回归策略

库存均值回归,核心思想就一句话:让库存围绕零轴波动,不要偏离太远

为什么是零轴?因为做市商不是投机者。我们的利润来源是买卖价差,不是方向性押注。库存偏离零轴越远,方向性风险越大,做市策略就越像在赌博。

库存均值回归策略,通常包含以下几个要素:

  1. 目标库存:一般设为0,也可以根据市场情况动态调整
  2. 回归速度:库存偏离目标后,多快回到目标位置
  3. 回归触发条件:库存偏离到什么程度开始启动回归
  4. 回归执行方式:通过调整报价、主动对冲、还是等待被动成交

我常用的一个策略框架是这样的:

class InventoryMeanReversion:
    def __init__(self, target=0, threshold=500, speed=0.1):
        self.target = target          # 目标库存
        self.threshold = threshold    # 触发阈值
        self.speed = speed            # 回归速度

    def calculate_skew(self, current_inventory):
        # 计算库存偏离程度
        deviation = current_inventory - self.target

        # 如果偏离在阈值内,不做调整
        if abs(deviation) < self.threshold:
            return 0.0

        # 超出阈值,启动回归
        # 偏离越大,调整力度越大
        skew = deviation * self.speed
        return skew

    def adjust_quotes(self, mid_price, spread, inventory):
        skew = self.calculate_skew(inventory)

        bid = mid_price - spread/2 - skew
        ask = mid_price + spread/2 - skew

        return bid, ask

这个策略的核心逻辑是:库存偏离目标越远,报价偏移越大,从而加速库存回归。

嗯,这里要注意一个细节:阈值不能设得太小。否则市场稍微波动一下,你的报价就来回跳,成交率会很低,而且容易产生不必要的交易成本。

库存均值回归的三种执行方式:

方式 描述 适用场景
被动回归 通过调整报价,等待对手方成交 流动性好、价差小的市场
主动对冲 在市场上主动下单,平掉库存 库存偏离过大、需要快速回归
组合对冲 用相关品种的对冲头寸来抵消库存风险 单一品种流动性不足时

我个人的经验是:优先用被动回归。因为主动对冲会产生额外的交易成本,而且容易暴露你的意图。只有在库存偏离到危险水平(比如超过最大敞口的80%)时,才启动主动对冲。

曾经有一次,我在做某个小币种的做市,流动性很差。库存偏离后,被动回归根本回不来——因为市场上根本没有对手盘。最后只能硬着头皮用主动对冲,亏了不少手续费。那次之后,我学到一个教训:在做市之前,先评估市场的流动性深度。流动性差的市场,库存管理策略要更激进,阈值要设得更小。

💡 进阶技巧:库存均值回归可以和波动率联动。当市场波动率低时,库存回归可以慢一些,因为风险小;当波动率高时,库存回归要快,因为风险大。我一般用「波动率乘数」来动态调整回归速度:

volatility = get_current_volatility()
base_speed = 0.1
adjusted_speed = base_speed * (1 + volatility * 10)

知识体系总览

下面这张图,把库存管理的核心逻辑串起来了:

库存管理知识体系 库存风险定义 库存价值 库存敞口 VaR在险价值 库存与报价关系 库存为正 → 压低报价 库存为负 → 抬高报价 库存为零 → 正常报价 库存均值回归 目标库存:0 回归速度:动态调整 触发条件:阈值判断 核心逻辑流程 监控库存 → 计算偏离 → 判断阈值 → 调整报价 → 等待成交 → 库存回归 被动回归 调整报价等待成交 流动性好时优先 主动对冲 主动下单平库存 库存偏离过大时 组合对冲 相关品种对冲 流动性不足时 核心目标:让库存围绕零轴波动,控制方向性风险,稳定赚取价差收益

库存管理,说白了就是做市商的「安全带」。没有它,你赚再多差价,一次黑天鹅就能让你回到解放前。我建议你在实盘之前,先用历史数据把库存管理策略跑一遍,看看在不同市场环境下,库存偏离的幅度和回归的速度是否合理。

记住一句话:做市商赚的是流动性管理的钱,不是方向性投机的钱。库存管理,就是帮你守住这条底线。