第2章:风控模型基础:概率论与数理统计回顾、时间序列分析基础、风险管理核心指标

说实话,很多做量化交易的朋友,一上来就搞机器学习、深度学习。但我个人习惯,先把地基打牢。风控模型这东西,说白了就是跟不确定性打交道。你连概率论都没吃透,怎么去衡量风险?

这一章,我们不讲虚的。直接回顾那些做跨境做市最常用的数学工具。嗯,都是我在实盘里反复用到的。

2.1 概率论与数理统计:风控的“语法”

概率论是描述不确定性的语言。数理统计则是从数据里“猜”出规律。两者缺一不可。

2.1.1 随机变量与分布

做市商每天面对的是价格波动。价格本身就是一个随机变量。我个人习惯,先搞清楚它的分布特征。

  • 正态分布:教科书最爱。但真实市场里,价格波动往往有“肥尾”。我见过太多人用正态分布算VaR,结果被黑天鹅打爆。
  • t分布:更适合描述金融资产收益率。自由度越小,尾部越厚。我在做期权定价时,经常用t分布替代正态分布。
  • 经验分布:不假设任何理论分布。直接用历史数据排序。简单粗暴,但有效。

核心要点:做风控模型,不要迷信正态分布。真实市场的尾部风险,比你想象的大得多。

2.1.2 条件概率与贝叶斯定理

做市商每天都在做“条件概率”的决策。比如:如果美联储加息,美元兑人民币的波动率会怎么变?

贝叶斯定理就是干这个的:

P(A|B) = P(B|A) * P(A) / P(B)

我曾经用贝叶斯框架做过一个“波动率突变预警模型”。先验概率来自历史数据,然后根据实时订单流更新后验概率。效果还不错,至少帮我躲过几次闪崩。

实战技巧:贝叶斯更新非常适合做“在线学习”。每来一个新报价,模型就更新一次。比重新训练整个模型快得多。

2.1.3 假设检验与置信区间

做回测时,你总得判断策略是不是真的有效。这时候就需要假设检验。

  • 零假设:策略收益均值为0
  • 备择假设:策略收益均值不为0
  • p值:如果p < 0.05,拒绝零假设

但我要提醒你:p值不是万能的。我见过有人用p值“钓鱼”,反复调参数直到p值显著。这是典型的过拟合。你想想看,这跟算命有什么区别?

2.2 时间序列分析:读懂市场的“心跳”

跨境做市,数据都是时间序列。汇率、利率、波动率,全是按时间顺序排列的。时间序列分析,就是读懂这些数据的“心跳”。

2.2.1 平稳性与差分

大多数时间序列模型,都要求数据是平稳的。什么叫平稳?简单说:均值和方差不随时间变化。

但汇率序列,通常是非平稳的。有趋势,有季节性。怎么办?差分。

# 一阶差分
diff_price = price[t] - price[t-1]

差分后的序列,往往就平稳了。我习惯用ADF检验来验证平稳性。p值小于0.05,就认为平稳。

注意:过度差分会丢失信息。差分一次不够就差分两次,但别差分三次以上。否则你得到的可能只是白噪声。

2.2.2 ARIMA模型

ARIMA是时间序列建模的“瑞士军刀”。三个参数:p(自回归阶数)、d(差分阶数)、q(移动平均阶数)。

我在做“短期汇率预测”时,经常用ARIMA(1,1,1)。简单,但够用。复杂模型不一定更好。你想想看,做市商持仓时间可能只有几分钟,太复杂的模型反而来不及反应。

from statsmodels.tsa.arima.model import ARIMA

model = ARIMA(price_series, order=(1,1,1))
model_fit = model.fit()
forecast = model_fit.forecast(steps=5)

2.2.3 波动率建模:GARCH

做风控,光预测价格方向不够。你还得知道价格波动有多大。这就是波动率建模。

GARCH模型是标配。它假设:今天的波动率,取决于昨天的波动率和昨天的冲击

我曾经用GARCH(1,1)做动态保证金计算。市场波动大的时候,保证金自动提高。波动小的时候,保证金降低。这样既控制了风险,又提高了资金利用率。

核心要点:GARCH模型能捕捉“波动率聚集”现象。大波动后面往往跟着大波动,小波动后面跟着小波动。这是市场的真实特征。

2.3 风险管理核心指标:VaR、CVaR、希腊字母

终于到了最核心的部分。做市商每天都要回答三个问题:

  1. 我最多可能亏多少?
  2. 如果亏,平均亏多少?
  3. 我的风险暴露在哪些维度?

VaR、CVaR、希腊字母,就是回答这三个问题的工具。

2.3.1 VaR:在险价值

VaR的意思是:在给定的置信水平下,未来一段时间内可能的最大损失。

比如:95%置信水平下,日VaR为100万美元。意思是:有95%的把握,明天亏损不超过100万美元。

计算VaR有三种方法:

方法原理优缺点
参数法假设收益率服从正态分布计算快,但假设太强
历史模拟法用历史数据排序,取分位数无分布假设,但依赖历史
蒙特卡洛模拟随机生成大量路径最灵活,但计算量大

我个人习惯,用历史模拟法做日常监控。简单、透明、容易解释。但压力测试时,我会用蒙特卡洛模拟,加入极端情景。

避坑指南:VaR不满足“次可加性”。也就是说,组合的VaR可能大于单个资产VaR之和。这不符合分散化降低风险的直觉。所以,别只用VaR。

2.3.2 CVaR:条件在险价值

CVaR解决了VaR的缺陷。它衡量的是:当损失超过VaR时,平均损失是多少?

举个例子:95% VaR是100万。那剩下5%的极端情况,平均损失可能是300万。这个300万就是CVaR。

我在做“尾部风险对冲”时,主要盯着CVaR。VaR只能告诉你“最坏情况的下限”,CVaR告诉你“最坏情况的平均水平”。后者对做市商更有意义。

核心要点:CVaR满足次可加性,是“一致性风险度量”。做组合优化时,用CVaR比用VaR更合理。

2.3.3 希腊字母:期权风险的“体检报告”

做跨境做市,难免涉及期权。期权风险是非线性的,用希腊字母来衡量。

  • Delta:标的价格变动1单位,期权价格变动多少。说白了,就是方向性风险。
  • Gamma:Delta对标的价格的敏感度。Gamma大的期权,Delta变化快,风险高。
  • Vega:波动率变动1%,期权价格变动多少。做市商最怕波动率突变。
  • Theta:时间每过一天,期权价值损失多少。时间是你的敌人。
  • Rho:利率变动1%,期权价格变动多少。外汇期权里,利率差很重要。

我曾经管理过一个期权做市账户。每天收盘前,我都会检查“希腊字母暴露”。如果Gamma太大,就减仓。如果Vega暴露不对称,就做波动率套利。嗯,这套流程帮我平稳度过了好几次市场动荡。

# 计算Delta(简化版)
def delta(S, K, T, r, sigma, option_type='call'):
    from scipy.stats import norm
    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

2.4 本章知识体系

下面这张图,是我自己梳理的本章知识结构。你可以把它当作一张“地图”,随时回来查阅。

风控模型基础 概率论与数理统计 时间序列分析 风险管理指标 随机变量与分布 贝叶斯定理 假设检验 平稳性与差分 ARIMA模型 GARCH模型 VaR CVaR 希腊字母 三者结合:用概率论描述不确定性,用时间序列建模动态,用指标量化风险

好了,这一章的内容就到这里。概率论、时间序列、风险指标,这三样东西是风控模型的“三驾马车”。你把它吃透了,后面讲模型搭建的时候,就会轻松很多。


专注资料整理