第四章:风险管理与希腊字母

风险管理,说白了就是做市商的命根子。

我刚开始做场外衍生品那会儿,有个老交易员跟我说过一句话,我一直记着:「你赚的钱,其实都是风险换来的。关键是你知不知道风险在哪。」

这一章,我们就来聊聊怎么管好这些风险。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对冲。具体来说:

  1. 计算组合的Delta和Gamma
  2. 先用标的物对冲Delta
  3. 再用期权对冲Gamma
  4. 重复步骤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