12、库存风险管理:库存周转率、库存老化监控、库存对冲策略、库存清算机制

做市商最怕什么?不是行情剧烈波动,而是库存砸在手里出不去。

我见过太多团队,策略赚钱能力一流,最后却死在库存上。说白了,库存风险就是你的仓位变成了「烫手山芋」——想卖卖不掉,想对冲成本又太高。

这一章,我们专门聊聊库存风险怎么管。我会从四个维度展开:周转率、老化监控、对冲策略、清算机制。每个点我都会结合自己踩过的坑来讲。

12.1 库存周转率:你的资金在「转」还是「躺」?

库存周转率,衡量的是你手里的资产多久能换一轮。公式很简单:

库存周转率 = 成交总量 / 平均库存价值

举个例子。你每天做1个亿的成交量,平均库存是500万。那周转率就是20。这意味着你的库存一天能转20次。

我个人习惯把周转率分成三个档:

周转率 含义 风险等级
> 50 库存极轻,流动性好 低风险
10 - 50 正常做市水平 中等风险
< 10 库存积压,需要警惕 高风险

我在项目中遇到过一家做市团队,BTC库存周转率掉到了3以下。什么概念?就是他们手里的币,平均要躺4个月才能换一轮。后来行情一跌,直接亏掉全年利润。

核心原则:周转率低于阈值时,必须主动降库存,哪怕亏点手续费也要出。

监控周转率,我建议用滚动窗口计算。比如过去24小时的成交量除以当前库存。这样能实时反映库存状态,而不是看一个滞后的月均值。

12.2 库存老化监控:别让库存变成「陈年旧货」

库存老化,指的是某个仓位持有了多久。为什么重要?因为时间越长,风险越大。

你想想看,一个仓位如果挂了3天还没成交,说明什么?说明你的报价可能偏离市场了。或者这个品种本身流动性就很差。

我习惯把库存按「年龄」分组:

  • 年轻库存(< 1小时):正常做市仓位,无需干预
  • 中年库存(1 - 6小时):需要关注,检查报价是否合理
  • 老年库存(6 - 24小时):必须触发预警,考虑主动平仓
  • 古董库存(> 24小时):立即清算,不计成本

我曾经犯过一个错误。有一笔ETH库存挂了18个小时没成交,我总觉得「再等等,行情会回来的」。结果呢?第二天大盘跌了5%,那笔库存直接亏了8万美金。嗯,从那以后我再也不敢对老化库存心存侥幸。

注意:老化监控不能只看绝对时间。要结合波动率。波动率高的市场,老化阈值要缩短。比如比特币在波动率飙升时,2小时没成交就算老化。

实现老化监控,代码其实不复杂:

def check_inventory_aging(inventory):
    for item in inventory:
        age = current_time - item.open_time
        if age > 24 * 3600:
            trigger_liquidation(item)  # 古董库存,直接清算
        elif age > 6 * 3600:
            send_alert(item)           # 老年库存,发预警
        elif age > 1 * 3600:
            adjust_spread(item)        # 中年库存,调整价差

12.3 库存对冲策略:别把所有鸡蛋放在一个篮子里

库存对冲,说白了就是拿一个品种的风险去抵消另一个品种的风险。做市商常用的对冲方式有几种:

12.3.1 品种内对冲

比如你手里有BTC的多头库存,同时做空BTC期货。这样价格涨跌对你影响不大,你赚的是价差和手续费。

我建议对冲比例控制在80%-120%之间。太低了对冲效果差,太高了又变成纯套利,失去了做市的意义。

12.3.2 跨品种对冲

有时候你找不到直接的期货对冲,可以用相关性高的品种。比如ETH和BTC,相关性通常在0.7以上。

但这里有个坑。相关性不是恒定的。我记得2020年3月12日那天,BTC和ETH的相关性一度跌到0.2。如果你按常规比例对冲,那天会亏得很惨。

我的做法是:动态计算相关性,用过去30天的滚动窗口。当相关性低于0.5时,降低跨品种对冲比例,或者直接关掉。

12.3.3 期权对冲

如果你有期权工具,可以用买入看跌期权来保护库存。成本比期货对冲高,但好处是下行风险有限,上行收益不封顶。

我个人习惯在库存老化超过4小时时,买入平值看跌期权做保护。虽然花了点权利金,但心里踏实。

12.4 库存清算机制:最后的防线

清算机制,是库存风险管理的最后一道防线。当所有常规手段都失效时,你必须有一个自动化的清算流程。

我设计的清算机制分三级:

  1. 软清算:主动调整报价,把价差拉大,吸引对手方吃单。同时降低报价量,减少库存暴露。
  2. 硬清算:直接以市价单平仓。虽然会吃滑点,但能快速降低风险。
  3. 紧急清算:当库存超过最大容忍度时,不管价格多差,全部清掉。这个阈值我通常设在总资产的5%。

举个例子。假设你的总资产是100万美金,库存价值到了5万美金以上,紧急清算就会触发。系统会直接发市价单,把所有库存砸出去。

记住:清算不是赚钱的手段,是保命的手段。别因为舍不得滑点而犹豫。

清算机制的代码实现,我建议做成独立模块,和主策略解耦。这样即使策略出问题,清算模块还能独立运行。

class LiquidationEngine:
    def __init__(self, max_inventory_ratio=0.05):
        self.max_ratio = max_inventory_ratio
    
    def check_and_liquidate(self, portfolio):
        inventory_value = portfolio.get_inventory_value()
        total_asset = portfolio.get_total_asset()
        
        if inventory_value / total_asset > self.max_ratio:
            self.emergency_liquidate(portfolio)
        elif inventory_value / total_asset > self.max_ratio * 0.8:
            self.hard_liquidate(portfolio)
        elif inventory_value / total_asset > self.max_ratio * 0.6:
            self.soft_liquidate(portfolio)

这里有个细节。清算时要注意市场深度。如果市场深度不够,大额市价单会把价格打穿。我建议分批清算,每次只吃10%的深度,等价格恢复后再吃下一批。

嗯,库存风险管理就聊这么多。核心就一句话:库存是工具,不是资产。别让它成为你的负担。


交易系统化学习资料 微信Strategy888888