库存管理核心概念:库存定义、库存成本、库存风险敞口
做市商的核心业务,说白了就是「低买高卖」赚差价。但这里有个坑——你不可能每次买卖都刚好平掉头寸。手里总会留一些存货,这就是库存。
库存管理,我个人的理解是:你手里有多少货,这些货让你花了多少钱,以及这些货可能让你亏多少钱。这三个问题,对应了三个核心概念:库存定义、库存成本、库存风险敞口。
嗯,咱们一个一个来拆解。
1. 库存定义:你到底持有了什么?
先别笑,很多人做量化做了一两年,连库存的定义都没搞清楚。
库存,在金融做市里,指的是当前持仓的净头寸。比如你同时挂了买单和卖单,买入了100股,卖出了80股,那你的库存就是+20股。反过来,卖出多于买入,库存就是负数。
我见过一个团队,把「累计成交量」当库存算,结果风控模型全错了。你想想看,那得多危险。
库存的定义,其实分三个维度:
- 数量维度:你持有多少单位?是正数(多头)还是负数(空头)?
- 价值维度:按当前市价算,这些库存值多少钱?
- 时间维度:这些库存持有了多久?是刚建仓还是已经过夜了?
我个人习惯用Python定义一个库存对象,大概长这样:
class Inventory:
def __init__(self, symbol, quantity, avg_price):
self.symbol = symbol # 品种代码
self.quantity = quantity # 净头寸(正=多头,负=空头)
self.avg_price = avg_price # 平均建仓成本
self.hold_time = 0 # 持仓时间(秒)
def market_value(self, current_price):
return self.quantity * current_price
def pnl(self, current_price):
return self.quantity * (current_price - self.avg_price)
你看,这个类把库存的核心信息都封装了。quantity是净头寸,avg_price是平均成本。这两个字段,是做市商库存管理的基石。
2. 库存成本:持有库存到底要花多少钱?
很多人以为库存成本就是「买入价减去卖出价」。其实没那么简单。
库存成本,我把它拆成三块:
- 资金成本:你买股票/期货的钱,如果是借来的,要付利息。就算是你自己的钱,也有机会成本——这笔钱本来可以存银行吃利息的。
- 交易成本:建仓和平仓时产生的手续费、印花税、滑点等。这部分成本是实打实扣掉的。
- 库存持有成本:比如期货的隔夜仓储费、股票的融券利息、加密货币的资金费率。这些费用会随着持仓时间累积。
为什么会这样?因为做市商不是做趋势交易的。我们赚的是买卖价差,不是方向性收益。库存持有时间越长,成本越高,利润就被蚕食得越厉害。
我建议用下面的公式来估算每日库存成本:
daily_inventory_cost = abs(inventory.quantity) * (
funding_rate +
transaction_cost / expected_holding_days +
opportunity_cost
)
其中funding_rate是资金费率,transaction_cost是单边交易成本,opportunity_cost是无风险利率。
举个例子:假设你持有1000股某股票,每股100元,年化资金费率5%,单边交易成本0.1%,预期持有3天。那每天的库存成本大约是:
daily_cost = 1000 * 100 * (0.05/365 + 0.001/3 + 0.03/365)
= 100000 * (0.000137 + 0.000333 + 0.000082)
= 100000 * 0.000552
= 55.2 元/天
嗯,每天55块钱,一个月就是1650。如果你做的是高频做市,这个成本可能吃掉你一半的利润。
3. 库存风险敞口:你最多可能亏多少?
这个才是做市商最怕的东西。
库存风险敞口,指的是由于市场价格不利变动,库存可能造成的最大损失。说白了,就是「如果行情突然反向,你会亏多少钱」。
我把它分成两类:
- 瞬时风险敞口:下一秒价格波动造成的损失。通常用VaR(Value at Risk)来衡量。
- 持续风险敞口:如果市场流动性枯竭,你无法平仓,库存会暴露在更长时间的价格波动中。
我记得有一次做加密货币做市,手里攒了50个BTC的多头库存。突然一条负面新闻出来,BTC三分钟内跌了8%。那一瞬间,我的库存敞口直接亏了十几万美金。还好我提前设了止损,不然更惨。
从那以后,我对风险敞口的计算就格外重视。常用的指标是:
# 计算库存风险敞口
def calculate_risk_exposure(inventory, current_price, volatility, confidence=0.95):
"""
volatility: 日波动率(标准差)
confidence: 置信水平
"""
position_value = abs(inventory.quantity) * current_price
# 假设价格服从正态分布,计算VaR
z_score = 1.645 # 对应95%置信水平
daily_var = position_value * volatility * z_score
# 极端情况下的最大损失(假设3个标准差)
max_loss = position_value * volatility * 3
return {
'var_95': daily_var,
'max_loss': max_loss,
'position_value': position_value
}
你想想看,如果计算出来的VaR是10万,而你的总资金只有100万,那意味着你有5%的概率一天亏掉10%。这个风险能不能接受?
我个人习惯设定一个库存敞口上限:
- 单个品种的库存价值不超过总资金的20%
- 所有品种的总库存价值不超过总资金的50%
- 如果VaR超过总资金的5%,立即减仓
4. 三者之间的关系
库存定义、库存成本、库存风险敞口,这三者不是孤立的。它们构成了一个三角关系:
| 概念 | 核心问题 | 管理目标 |
|---|---|---|
| 库存定义 | 我持有什么?持有了多少? | 准确记录,实时更新 |
| 库存成本 | 持有这些货要花多少钱? | 降低资金占用,提高周转率 |
| 库存风险敞口 | 行情不利时我会亏多少? | 控制最大损失,设置止损线 |
举个例子你就明白了:
假设你库存定义是+1000股,成本是每天55元,风险敞口是每天最多亏3万。那你的决策逻辑应该是:
- 如果库存成本太高(比如超过预期利润),就主动减仓
- 如果风险敞口太大(比如VaR超过阈值),就立刻对冲
- 如果库存定义不准确(比如漏算了某个账户),那成本和敞口都是错的
嗯,这里要注意:库存定义是基础,库存成本是约束,库存风险敞口是底线。三者缺一不可。
好了,这一章的内容就到这里。库存管理听起来简单,但真正做好的人不多。下一章我们会讲「库存管理策略」,包括如何主动减仓、如何对冲、如何设置库存目标区间。到时候我会分享一些我在实盘里用过的具体参数和代码。
记住一句话:做市商赚的是管理库存的钱,不是赌方向的钱。把库存管好了,利润自然就来了。