第三章:库存管理目标:最小化库存风险、最大化做市利润、平衡买卖价差

做市商的核心,说白了就是「低买高卖」赚差价。但现实没那么简单。你手里囤了一堆货,价格一跌,账面就亏。价格一涨,你又怕卖早了。库存管理,就是在这两难之间找平衡。

我个人习惯把库存管理拆成三个目标:最小化库存风险、最大化做市利润、平衡买卖价差。这三个目标听起来各自独立,其实互相牵制。你想想看,利润高了,风险往往也大。价差收窄了,利润又薄了。怎么取舍?

3.1 最小化库存风险

库存风险,说白了就是「存货贬值」的风险。你手里有100个ETH,成本价2000U。现在市场跌到1900U,账面浮亏1万U。这就是库存风险。

我在项目中遇到过最惨的一次,是2020年3月12日。那天ETH从200U跌到90U,我手里还有500个ETH的库存。嗯,那滋味不好受。从那以后,我给自己定了个规矩:任何单一资产的库存,不能超过总资金的20%

核心原则:库存风险 = 库存量 × 价格波动率 × 持有时间

三个变量,任何一个失控,风险都会爆炸。

怎么控制?我常用的方法有这几个:

  • 设置库存上限:比如ETH最多持有200个,超过就强制平仓
  • 动态调整库存目标:波动率大的时候,库存目标自动降低
  • 对冲策略:用期货或期权对冲现货库存的风险

举个例子,假设你设定ETH的库存目标为100个,波动率阈值是5%。当实际波动率超过5%时,库存目标自动降到50个。代码实现大概是这样:

class InventoryManager:
    def __init__(self, base_target=100, vol_threshold=0.05):
        self.base_target = base_target
        self.vol_threshold = vol_threshold
        
    def get_target_inventory(self, current_vol):
        if current_vol > self.vol_threshold:
            # 波动率超标,降低库存目标
            reduction = (current_vol - self.vol_threshold) * 10
            return max(self.base_target - reduction, 20)
        return self.base_target

小技巧:我习惯把库存目标设成一个区间,而不是一个固定值。比如[80, 120],在这个区间内都不需要强制调整。这样可以减少频繁交易带来的摩擦成本。

3.2 最大化做市利润

做市利润来自哪里?两个来源:买卖价差收益库存增值收益

价差收益好理解,你挂买单和卖单,成交了赚差价。库存增值收益呢?就是你低价囤货,高价卖出赚的那部分。

但这里有个矛盾:你想赚价差,就得频繁买卖。你想赚增值,就得长期持有。怎么平衡?

我个人习惯用「库存周转率」这个指标来衡量。周转率太高,说明你留不住货,赚不到增值。周转率太低,说明你交易不活跃,价差收益少。

库存周转率 特征 适合场景
高(>10次/天) 快进快出,价差收益为主 高波动、低趋势市场
中(3-10次/天) 平衡型,价差+增值 震荡市场
低(<3次/天) 长线持有,增值收益为主 单边上涨市场

我曾经犯过一个错误:在单边上涨行情里,我还在做高频价差交易。结果呢?每次卖完就涨,买回来成本越来越高。最后算下来,价差赚了1万,库存增值少赚了5万。亏大了。

避坑指南:我曾经在趋势行情里死守价差策略,结果被市场狠狠教育了一顿。记住:趋势来了,别做价差,做库存增值。判断趋势的方法很简单:看5日均线和20日均线的位置。多头排列就做多库存,空头排列就做空库存。

3.3 平衡买卖价差

价差平衡,是库存管理的「艺术」部分。你挂的买单和卖单,价格怎么定?太宽了,成交不了。太窄了,利润薄。

我常用的方法是「动态价差模型」。核心思想是:根据当前库存偏离目标的程度,动态调整买卖价差。

举个例子:

  • 库存低于目标 → 提高买单价格(吸引买入),降低卖单价格(鼓励卖出)
  • 库存高于目标 → 降低买单价格(减少买入),提高卖单价格(鼓励卖出)

代码实现:

def calculate_spread(self, current_inventory, target_inventory):
    deviation = (current_inventory - target_inventory) / target_inventory
    
    # 基础价差,比如0.1%
    base_spread = 0.001
    
    # 根据偏离度调整价差
    if deviation > 0.1:  # 库存过多
        bid_spread = base_spread * 0.8  # 降低买价
        ask_spread = base_spread * 1.2  # 提高卖价
    elif deviation < -0.1:  # 库存不足
        bid_spread = base_spread * 1.2  # 提高买价
        ask_spread = base_spread * 0.8  # 降低卖价
    else:
        bid_spread = base_spread
        ask_spread = base_spread
    
    return bid_spread, ask_spread

关键点:价差调整不是线性的。我习惯用Sigmoid函数来做映射,这样在库存偏离不大时调整幅度小,偏离大时调整幅度大。效果比线性调整好很多。

3.4 三个目标的统一框架

这三个目标,怎么统一到一个框架里?我推荐用「效用函数」的方法。

简单说,就是给每个目标赋一个权重,然后求加权和。比如:

def utility(inventory, price, spread):
    risk = -inventory * price * 0.01  # 风险项,负值
    profit = spread * 0.5  # 利润项
    balance = -abs(inventory - target) * 0.3  # 平衡项
    
    return risk + profit + balance

然后,每次做决策时,选择让效用函数最大化的那个操作。

我在项目中用过这个框架,效果还不错。但要注意:权重参数需要根据市场环境动态调整。比如在牛市中,利润的权重可以调高。在熊市中,风险的权重要调高。

实战建议:刚开始做库存管理时,别想着三个目标都完美。先盯住一个:控制风险。风险控制住了,利润自然来。价差平衡,那是锦上添花的事。

好了,这一章就讲到这里。下一章我们聊聊具体的库存管理策略,包括如何设置库存上下限、如何做库存再平衡。到时候我会分享一些我在实战中踩过的坑,希望对你有帮助。