6、库存管理模型:库存风险度量(VaR、CVaR)、库存周转率、最优库存水平
做市商的库存管理,说白了就是管好你手里的“货”。
我刚开始做结构化产品做市那会儿,总觉得只要报价够快、价差够窄就能赚钱。结果呢?有一次市场突然异动,我手里攒了一大堆某个奇异期权的多头,流动性瞬间枯竭,想平仓都平不掉。那天的亏损,直接把我前三个月的利润全吞了。
从那以后我明白了一个道理:做市商的核心竞争力,不是预测方向,而是管理库存。今天我们就来聊聊库存管理的三个核心问题:风险怎么量、货转得快不快、以及到底该囤多少货。
6.1 库存风险度量:VaR 与 CVaR
先问个问题:你手里有一篮子结构化产品,怎么衡量它今天可能亏多少钱?
业界最常用的两个指标:VaR(Value at Risk)和 CVaR(Conditional VaR)。
6.1.1 VaR:最坏情况下的“底线”
VaR 回答的是:在给定的置信水平(比如 95%)下,未来一段时间内,最大可能亏损是多少。
举个例子:你持仓的日 VaR(95%)是 100 万。意思是,有 95% 的把握,明天亏损不会超过 100 万。但剩下 5% 的情况呢?VaR 不管了。
我个人习惯用历史模拟法来计算 VaR,因为它不需要假设收益率服从正态分布——金融数据哪有那么乖?
# 伪代码:历史模拟法计算 VaR
import numpy as np
def calculate_var(returns, confidence_level=0.95):
# returns: 历史收益率序列
sorted_returns = np.sort(returns)
index = int((1 - confidence_level) * len(sorted_returns))
var = -sorted_returns[index] # 取正值表示亏损
return var
# 假设我们有过去 500 天的组合日收益率
daily_returns = np.random.normal(0, 0.02, 500) # 模拟数据
var_95 = calculate_var(daily_returns, 0.95)
print(f"95% VaR: {var_95:.4f}")
我曾经吃过 VaR 的亏。有一次 VaR 显示风险可控,结果市场发生了“肥尾事件”——就是那 5% 的情况。VaR 完全没告诉我,一旦亏损超过阈值,到底会亏多少。所以后来我引入了 CVaR。
6.1.2 CVaR:尾部风险的“真实代价”
CVaR 也叫 Expected Shortfall。它计算的是:当亏损超过 VaR 阈值时,平均亏损是多少。
你想想看,VaR 只告诉你“最坏情况的下限”,但 CVaR 告诉你“最坏情况到底有多坏”。对于做市商来说,后者才是真正要命的。
def calculate_cvar(returns, confidence_level=0.95):
sorted_returns = np.sort(returns)
index = int((1 - confidence_level) * len(sorted_returns))
# 取尾部所有损失的均值
tail_losses = -sorted_returns[:index]
cvar = np.mean(tail_losses)
return cvar
cvar_95 = calculate_cvar(daily_returns, 0.95)
print(f"95% CVaR: {cvar_95:.4f}")
| 指标 | 含义 | 优点 | 缺点 |
|---|---|---|---|
| VaR | 给定置信水平下的最大可能亏损 | 计算简单,业界标准 | 忽略尾部风险,不满足次可加性 |
| CVaR | 超过 VaR 后的平均亏损 | 考虑尾部风险,数学性质好 | 计算稍复杂,需要更多数据 |
在实际做市系统中,我同时监控 VaR 和 CVaR。VaR 用来设定日常止损线,CVaR 用来做压力测试和资本金预留。两个指标一起看,心里才有底。
6.2 库存周转率:货转得快,风险才小
库存周转率,说白了就是你手里的货多久能卖出去一遍。
公式很简单:
库存周转率 = 一段时间内的成交量 / 平均库存量
比如你一个月成交了 1000 张合约,平均库存是 200 张,那周转率就是 5 次/月。意味着平均每 6 天,你的库存就完全换了一遍。
为什么这个指标重要?
- 周转率高:说明你持仓时间短,暴露在市场风险下的时间短。这是好事。
- 周转率低:说明货压在手里卖不出去,要么是定价不合理,要么是流动性太差。
我记得有一次,我接手一个团队的做市业务,发现某个结构化票据的周转率只有 0.3 次/月。一查才发现,他们的报价价差太宽,客户根本不愿意交易。后来把价差收窄了 30%,周转率直接翻了三倍,虽然单笔利润少了,但总利润反而上去了。
库存周转率不是越高越好。如果周转率过高,说明你可能在频繁交易,交易成本(手续费、滑点)会吃掉利润。找到一个平衡点,才是做市商的功夫所在。
6.3 最优库存水平:到底该囤多少货?
这个问题,其实是一个经典的“库存-风险”权衡。
- 库存太少:客户要买的时候你没货,丢单;或者你要从市场上高价补货,亏钱。
- 库存太多:市场一波动,你手里的货可能大幅贬值,风险敞口太大。
那怎么找到最优库存水平?我一般用以下框架:
6.3.1 基于 VaR/CVaR 的库存上限
先设定一个你能承受的最大亏损金额,比如每天最多亏 50 万。然后根据当前持仓的 CVaR,反推最大库存量。
举个例子:
- 你设定的日亏损上限:50 万
- 当前每张合约的日 CVaR(95%):500 元
- 那么最大持仓量 = 500,000 / 500 = 1000 张
这就是你的硬性库存上限。超过这个数,不管市场多好,都必须减仓。
6.3.2 基于周转率的目标库存
另一个角度:根据你的目标周转率,倒推合理库存。
比如你希望每周周转 2 次,而你的日均成交量是 200 张,那么:
目标库存 = 日均成交量 / 目标周转率 = 200 / (2/5) = 500 张
(注:2 次/周,相当于 0.4 次/天,所以 200 / 0.4 = 500)
6.3.3 动态调整:市场波动率的影响
市场波动率大的时候,库存要降;波动率小的时候,库存可以适当提高。
我习惯用一个简单的公式:
最优库存 = 基准库存 × (基准波动率 / 当前波动率)
波动率翻倍,库存减半。这个逻辑很直观:市场越动荡,你越要轻装上阵。
我建议把库存水平分成三个区间:
绿色区间(0~60% 上限):正常做市,积极报价。
黄色区间(60%~85% 上限):收窄报价,优先减仓。
红色区间(85%~100% 上限):只出不进,强制平仓。
这个分级机制,帮我避免了好几次大亏。
知识体系总览
下面这张图,把库存管理的核心逻辑串起来了:
嗯,库存管理这块,说到底就是三个字:控风险、提效率、定仓位。没有完美的模型,只有不断迭代的框架。我自己的系统里,这些指标每 5 分钟重新计算一次,一旦触发阈值,系统会自动报警甚至强制减仓。
做市商不是赌徒,我们是风险的管理者。把库存管好了,利润自然就来了。