第三章:风险管理模块——库存风险度量与动态控制
做市商系统里,风险管理模块有多重要?
我见过太多团队,策略赚钱时风光无限,一次黑天鹅事件就全吐回去。说白了,风控不是拖后腿的,是保命的。
这一章,我们聊聊库存风险怎么度量、怎么控制。我会结合自己踩过的坑,把Delta/Gamma/Vega这些希腊字母讲明白,再聊聊持仓限制、止损熔断、资金利用率这些实战话题。
3.1 库存风险度量:Delta、Gamma、Vega
做市商手里永远有存货。这些存货的价格波动,就是风险来源。
怎么量化?用希腊字母。我个人习惯把这三个指标当作「风险仪表盘」:
- Delta:标的价格每变动1元,持仓价值变化多少。说白了,就是方向性风险。
- Gamma:Delta本身的变化速度。Gamma高,说明Delta不稳定,风险变化快。
- Vega:隐含波动率每变动1%,持仓价值变化多少。期权做市商尤其要关注这个。
举个例子。我在做期权做市系统时,遇到过一个大坑:某个深度虚值期权,Delta很小,看起来风险不大。但Gamma极高,行情一波动,Delta瞬间翻倍。那次差点爆仓。
核心原则:不要只看Delta。Gamma和Vega才是隐藏的杀手。
实际计算时,我们通常用以下公式:
// 伪代码示例:计算组合希腊字母
double totalDelta = 0;
double totalGamma = 0;
double totalVega = 0;
for (Position pos : positions) {
totalDelta += pos.delta * pos.quantity;
totalGamma += pos.gamma * pos.quantity;
totalVega += pos.vega * pos.quantity;
}
// 风险阈值检查
if (Math.abs(totalDelta) > deltaLimit) {
triggerAlert("Delta超限");
}
嗯,这里要注意:希腊字母是实时变化的。我建议至少每100ms重新计算一次,高频场景下甚至要1ms一次。
3.2 最大持仓限制与动态调整
光度量风险还不够,你得设上限。
最大持仓限制,说白了就是「最多能扛多少货」。这个值怎么定?
- 静态限制:根据账户总资金,设定一个固定比例。比如总资金的20%作为最大持仓。
- 动态调整:根据市场波动率、流动性、账户盈亏实时调整。
我曾经犯过一个错误:静态限制设得太死,行情好时赚不到钱;行情差时又来不及调整。后来改成动态的,效果好很多。
动态调整的逻辑大致如下:
// 动态持仓限制计算
double baseLimit = totalEquity * 0.2; // 基础限制
double volatilityFactor = 1.0 / (1.0 + currentVolatility); // 波动率因子
double drawdownFactor = 1.0 - maxDrawdown / 0.1; // 回撤因子
double dynamicLimit = baseLimit * volatilityFactor * drawdownFactor;
dynamicLimit = Math.max(minLimit, Math.min(maxLimit, dynamicLimit));
小技巧:动态调整时,建议加一个「冷却期」。比如调整后5秒内不再变动,防止频繁触发。
3.3 止损与熔断机制
止损和熔断,是风控的最后一道防线。
止损:单个仓位亏损到一定程度,强制平仓。
熔断:整个系统风险指标超限,暂停所有交易。
我见过最惨的一次:某团队止损设得太宽,熔断又没开,结果一次闪崩直接亏掉半年利润。从那以后,我坚持两条原则:
- 止损必须设,而且不能太宽。一般建议单笔亏损不超过总资金的1%。
- 熔断必须自动,不能依赖人工判断。人反应太慢。
熔断机制通常分三级:
| 级别 | 触发条件 | 动作 |
|---|---|---|
| 一级熔断 | 总Delta超限50% | 停止开新仓,只允许平仓 |
| 二级熔断 | 总Gamma超限100% | 强制平仓部分仓位 |
| 三级熔断 | 账户亏损达5% | 全部平仓,系统暂停 |
警告:熔断触发后,不要立即恢复。至少等待30秒,确认市场稳定后再手动恢复。
3.4 资金利用率与杠杆控制
做市商要赚钱,就得提高资金利用率。但利用率高了,风险也大。
怎么平衡?我个人的经验是:
- 杠杆倍数:一般不超过3倍。高频做市可以到5倍,但必须实时监控。
- 资金利用率:建议保持在60%-80%之间。太低浪费,太高危险。
举个例子。假设你有100万资金,开仓占用80万,利用率80%。如果市场反向波动10%,你就亏8万,占总资金8%。这个风险还能接受。
但如果杠杆加到5倍,同样80万占用,实际风险敞口是400万。波动10%就是40万,直接亏掉40%。
所以,杠杆控制的核心是:算清楚你扛得住多大波动。
// 杠杆与资金利用率计算
double totalEquity = 1_000_000; // 总资金
double usedMargin = 800_000; // 已用保证金
double leverage = usedMargin / totalEquity; // 0.8倍
double maxLeverage = 3.0; // 最大杠杆
if (leverage > maxLeverage) {
reducePosition(leverage - maxLeverage);
}
总结一下:风险管理不是限制你赚钱,是让你活得久。Delta/Gamma/Vega是仪表盘,持仓限制是安全带,止损熔断是安全气囊,资金利用率是油门。四者缺一不可。
好了,这一章就聊到这儿。下一章我们讲讲订单管理模块,怎么处理挂单、撤单、成交这些事儿。