第四章:风险管理与希腊字母
风险管理,说白了就是做市商的命根子。
我刚开始做场外衍生品那会儿,有个老交易员跟我说过一句话,我一直记着:「你赚的钱,其实都是风险换来的。关键是你知不知道风险在哪。」
这一章,我们就来聊聊怎么管好这些风险。Delta、Gamma、Vega这些希腊字母,压力测试、VaR、ES,一个一个来。
4.1 希腊字母:你的风险仪表盘
做市商手里通常有几百个期权头寸。每个期权都有不同的到期日、行权价、标的物。你怎么知道整个组合的风险?
靠希腊字母。
它们就像汽车的仪表盘。Delta告诉你速度,Gamma告诉你加速度,Vega告诉你路面颠簸程度。
4.1.1 Delta:方向性风险
Delta衡量的是标的价格变动1块钱,期权价格变多少。
比如一个看涨期权的Delta是0.6,那标的价格涨1块,期权就涨0.6块。
对于做市商来说,Delta对冲是最基本的操作。我习惯每天收盘前把组合的Delta调整到接近0。为什么?因为我不想赌方向。我只赚买卖价差和波动率的钱。
核心公式:
Δ = ∂V / ∂S
其中V是期权价格,S是标的价格。
代码实现其实很简单:
# 计算单个期权的Delta
def calculate_delta(S, K, T, r, sigma, option_type='call'):
d1 = (np.log(S/K) + (r + 0.5*sigma**2)*T) / (sigma*np.sqrt(T))
if option_type == 'call':
return norm.cdf(d1)
else:
return norm.cdf(d1) - 1
# 计算整个组合的Delta
portfolio_delta = sum(pos * calculate_delta(...) for pos in positions)
4.1.2 Gamma:Delta的变化率
Gamma是Delta对标的物价格的导数。说白了,就是Delta变化得有多快。
Gamma高的时候,Delta会变得很快。这时候你刚对冲完,价格一动,Delta又变了。很烦人。
我在项目中遇到过一个大坑:有个客户卖了一个深度实值的期权,Gamma特别高。那天下午市场突然跳水,Delta从0.8直接掉到0.3。我这边还没来得及对冲,已经亏了不少。
避坑指南:
我曾经吃过Gamma的亏。记住一条:临近到期的平值期权,Gamma会变得非常大。这时候一定要降低对冲频率,或者干脆不接这种单子。
4.1.3 Vega:波动率风险
Vega衡量的是隐含波动率变动1%,期权价格变多少。
做市商最怕什么?最怕波动率突然飙升。你卖了一个期权,收了20%的波动率溢价。结果第二天市场恐慌,波动率跳到40%。你的期权价格直接翻倍,亏惨了。
所以Vega对冲很重要。我一般会用不同期限的期权来构建Vega中性组合。比如卖一个月的期权,买三个月的期权,让整体Vega接近0。
| 希腊字母 | 含义 | 对冲方式 |
|---|---|---|
| Delta | 标的价格风险 | 买卖标的物 |
| Gamma | Delta变化风险 | 买卖期权 |
| Vega | 波动率风险 | 买卖不同期限期权 |
| Theta | 时间衰减 | 调整持仓期限结构 |
4.2 动态对冲:不是一次性的活
很多人以为对冲就是算个Delta,然后买对应数量的股票就完事了。哪有那么简单。
市场在动,希腊字母也在变。你得不停地调整。
我常用的策略是Delta-Gamma对冲。具体来说:
- 计算组合的Delta和Gamma
- 先用标的物对冲Delta
- 再用期权对冲Gamma
- 重复步骤1-3,频率根据市场波动调整
你想想看,如果Gamma很大,你光用标的物对冲Delta,刚对完又偏了。这时候就需要用期权来对冲Gamma。
实战技巧:
我个人习惯把对冲频率和Gamma挂钩。Gamma大的时候,每5分钟对一次。Gamma小的时候,半小时对一次就行。别浪费手续费。
4.3 压力测试与情景分析
希腊字母只能告诉你「正常情况」下的风险。但市场从来不会按常理出牌。
压力测试就是问自己:如果发生极端情况,我扛得住吗?
我一般会跑这么几个情景:
- 标的价格暴跌20%
- 波动率翻倍
- 利率突然上调100个基点
- 多个资产同时下跌(相关性突变)
代码实现也不复杂:
def stress_test(portfolio, scenarios):
results = []
for scenario in scenarios:
# 修改市场参数
new_S = scenario['spot_change'] * current_spot
new_vol = scenario['vol_change'] * current_vol
# 重新定价
new_value = reprice_portfolio(portfolio, new_S, new_vol)
# 计算盈亏
pnl = new_value - current_value
results.append((scenario['name'], pnl))
return results
我记得有一次,压力测试显示如果恒生指数跌10%,我们的组合会亏掉2000万。当时觉得这个概率太小了。结果三个月后,真的发生了。还好我们提前做了对冲,只亏了300万。
血的教训:
我曾经觉得某些情景「不可能发生」。后来发现,市场专治各种「不可能」。压力测试不是走过场,是真金白银的保障。
4.4 VaR与ES:量化你的风险
VaR(在险价值)问的是:在95%或99%的置信水平下,我最多亏多少钱?
ES(预期亏损)问的是:如果亏损超过了VaR,平均会亏多少?
这两个指标,说白了就是给你的风险贴个标签。
4.4.1 计算方法
常用的有三种方法:
| 方法 | 原理 | 优缺点 |
|---|---|---|
| 历史模拟法 | 用过去的数据模拟未来 | 简单,但假设历史会重演 |
| 参数法 | 假设收益率服从正态分布 | 计算快,但厚尾分布不准 |
| 蒙特卡洛模拟 | 随机生成大量路径 | 最准确,但计算量大 |
我个人比较喜欢蒙特卡洛。虽然慢一点,但能捕捉到一些极端情况。
def monte_carlo_var(portfolio, n_simulations=100000, confidence=0.95):
pnls = []
for _ in range(n_simulations):
# 生成随机路径
random_returns = np.random.normal(0, sigma, 252)
simulated_prices = current_price * np.exp(np.cumsum(random_returns))
# 计算组合价值
final_value = price_portfolio(portfolio, simulated_prices[-1])
pnls.append(final_value - current_value)
# 计算VaR和ES
pnls = np.sort(pnls)
var_index = int((1 - confidence) * n_simulations)
var = -pnls[var_index]
es = -np.mean(pnls[:var_index])
return var, es
4.2.2 注意事项
VaR有个大问题:它只告诉你「最多亏这么多」,但没告诉你亏的时候有多惨。
比如两个组合的VaR都是100万。但一个组合亏100万的概率是5%,另一个是1%。你觉得哪个风险大?
所以我现在更看重ES。它告诉你「如果真的出事,会出多大事」。
我的经验:
做市商的风险管理,不能只看VaR。我见过太多VaR很小的组合,一遇到极端行情就崩了。一定要结合压力测试和ES来看。
4.5 本章小结
风险管理不是一道数学题,而是一种思维方式。
希腊字母帮你理解风险来源,动态对冲帮你控制风险,压力测试帮你准备极端情况,VaR和ES帮你量化风险。
把这些工具用好了,你才能在市场上活得久、赚得稳。
公众号:蓝海资料掘金营,微信deep3321