第三章:库存管理目标:最小化库存风险、最大化做市利润、平衡买卖价差
做市商的核心,说白了就是「低买高卖」赚差价。但现实没那么简单。你手里囤了一堆货,价格一跌,账面就亏。价格一涨,你又怕卖早了。库存管理,就是在这两难之间找平衡。
我个人习惯把库存管理拆成三个目标:最小化库存风险、最大化做市利润、平衡买卖价差。这三个目标听起来各自独立,其实互相牵制。你想想看,利润高了,风险往往也大。价差收窄了,利润又薄了。怎么取舍?
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
然后,每次做决策时,选择让效用函数最大化的那个操作。
我在项目中用过这个框架,效果还不错。但要注意:权重参数需要根据市场环境动态调整。比如在牛市中,利润的权重可以调高。在熊市中,风险的权重要调高。
实战建议:刚开始做库存管理时,别想着三个目标都完美。先盯住一个:控制风险。风险控制住了,利润自然来。价差平衡,那是锦上添花的事。
好了,这一章就讲到这里。下一章我们聊聊具体的库存管理策略,包括如何设置库存上下限、如何做库存再平衡。到时候我会分享一些我在实战中踩过的坑,希望对你有帮助。