4、库存限额管理:绝对限额、相对限额、动态限额、VaR限额、希腊字母限额
做市商的核心命脉是什么?说白了,就是库存风险。
你赚的那点买卖价差,可能一次库存失控就全赔进去了。我见过太多团队,策略赚钱时风光无限,结果一次黑天鹅事件,库存爆仓,直接归零。所以,库存限额管理,是每个做市商必须守住的底线。
今天我们就来聊聊五种主流的限额方法。每种方法我都用过,踩过坑,也总结了一些实战经验。
4.1 绝对限额:最基础,也最直接
绝对限额,就是给库存设一个硬上限。比如,我规定ETH的库存不能超过1000个。到了这个数,系统自动停止买入,甚至强制减仓。
这方法简单粗暴,适合新手团队。我在早期做市时就用这个,因为那时候风控系统还不完善,怕出事。
举个例子:
# 伪代码示例
MAX_INVENTORY = 1000 # 绝对限额
def check_inventory(position):
if position > MAX_INVENTORY:
trigger_risk_control("库存超限,强制减仓")
else:
continue_trading()
但这里有个坑。绝对限额不会考虑市场波动。如果ETH价格翻倍,你手里1000个ETH的风险敞口其实已经翻倍了。所以,它只适合波动率低的品种,或者作为最后一道防线。
4.2 相对限额:考虑账户规模
相对限额,就是库存上限跟你的总资产挂钩。比如,我规定ETH库存不能超过总资产的20%。
这样做的好处是,账户规模增长时,你的风险承受能力也变强了,限额会自动上调。反过来,如果亏了钱,限额也会自动收紧。
公式很简单:
相对限额 = 总资产 × 限额比例
我个人习惯把比例设在10%-30%之间,具体看品种的流动性。流动性好的,比例可以高一点;流动性差的,比如一些山寨币,我建议控制在5%以内。
我曾经在一个做市项目里,把某个小币种的相对限额设到了25%。结果一次深度砸盘,流动性瞬间枯竭,我根本出不了货。那次教训让我明白:相对限额虽然灵活,但必须考虑市场深度。
4.3 动态限额:随市场变化
动态限额,就是让限额跟着市场波动走。市场波动大,限额自动降低;市场平稳,限额适当放宽。
实现方式有很多种。我常用的是基于历史波动率(HV)或ATR(平均真实波幅)来调整。
举个例子:
def dynamic_limit(base_limit, volatility):
# 波动率越高,限额越低
adjusted_limit = base_limit / (1 + volatility * k)
return adjusted_limit
这里的k是一个调节系数,我一般取2-5。波动率翻倍时,限额会降到原来的三分之一左右。
嗯,这里要注意:动态限额的响应速度不能太快。我曾经把窗口期设得太短,结果市场一震荡,限额频繁变动,交易系统反而乱了。后来我改成用1小时窗口的波动率,效果就好多了。
4.4 VaR限额:量化风险
VaR(Value at Risk)限额,是目前机构用得最多的方法。它回答的问题是:在95%或99%的置信水平下,我的库存最多可能亏多少钱?
比如,我计算出来VaR(95%) = 10万U。意思就是,有95%的概率,我的库存一天内亏损不会超过10万U。那我的限额就可以设为:VaR不能超过总资产的5%。
计算VaR的方法有三种:
- 参数法: 假设收益率服从正态分布,直接用均值和标准差算。速度快,但假设太强。
- 历史模拟法: 用过去N天的收益率数据,直接取分位数。我比较推荐这个,因为它不依赖分布假设。
- 蒙特卡洛模拟: 随机生成大量路径,模拟未来价格。精度高,但计算量大。
我在项目中主要用历史模拟法。简单说,就是取过去500天的日收益率,排序后取第5%的分位数,再乘以当前库存价值。
# 历史模拟法计算VaR
import numpy as np
def calculate_var(returns, position_value, confidence=0.95):
sorted_returns = np.sort(returns)
index = int((1 - confidence) * len(sorted_returns))
var_percent = sorted_returns[index]
var_value = abs(var_percent) * position_value
return var_value
VaR限额的好处是,它把不同品种的风险统一到了一个维度——钱。你可以比较BTC和ETH的VaR,然后统一管理。
4.5 希腊字母限额:期权做市商的必修课
如果你做的是期权做市,那绝对限额、相对限额这些就不够用了。期权的风险是多维的,你得用希腊字母来管理。
常用的希腊字母限额包括:
| 希腊字母 | 含义 | 限额方式 |
|---|---|---|
| Delta (Δ) | 价格风险 | Delta绝对值 ≤ 总资产的X% |
| Gamma (Γ) | Delta变化速度 | Gamma敞口 ≤ 阈值 |
| Vega (ν) | 波动率风险 | Vega敞口 ≤ 阈值 |
| Theta (Θ) | 时间衰减 | Theta为正(收时间价值) |
| Rho (ρ) | 利率风险 | 通常忽略,除非利率波动大 |
我个人最关注的是Delta和Gamma。Delta决定了你的方向性风险,Gamma决定了你调整仓位的成本。
举个例子,我规定Delta敞口不能超过总资产的2%。如果BTC价格波动1%,我的库存价值波动不能超过总资产的2%。这样就把风险控制在了可接受范围内。
Gamma限额更微妙。Gamma高意味着Delta变化快,你需要频繁调仓。我曾经在一个深度虚值期权上Gamma敞口过大,结果价格一波动,Delta瞬间翻倍,我手忙脚乱地补仓,最后亏了不少手续费。
4.6 如何组合使用?
这五种限额方法不是互斥的。在实际项目中,我通常把它们组合成一个多层风控体系:
- 第一层:绝对限额 —— 硬止损,防止系统故障或极端行情。
- 第二层:相对限额 —— 根据账户规模动态调整。
- 第三层:动态限额 —— 根据市场波动率调整。
- 第四层:VaR限额 —— 统一量化风险。
- 第五层:希腊字母限额 —— 针对期权等衍生品。
每一层都是独立的,只要有一层触发,系统就会报警或自动减仓。这样即使某一层失效,其他层还能兜底。
下面这张图展示了整个库存限额管理的核心逻辑:
最后说一句:限额不是越紧越好。太紧的限额会让你频繁触发风控,影响做市效率。太松又等于没设。找到那个平衡点,才是真本事。
我个人习惯是,先用历史数据回测,看看不同限额下策略的表现。然后上线时先设保守一点,运行一段时间后再逐步放宽。这样既安全,又能找到最优参数。
公众号:蓝海资料掘金营,微信deep3321