新手必看:MySQL 事务到底是什么?ACID + 脏读 幻读讲明白
2026/1/16 9:27:15
import numpy as np from scipy.stats import norm # 参数设置 position = 1_000_000 # 投资头寸(元) volatility = 0.2 # 年化波动率(20%) days = 1 # 持有期 confidence = 0.99 # 置信水平 # 计算日波动率和Z值 daily_vol = volatility / np.sqrt(252) z_score = norm.ppf(confidence) # 计算VaR var = position * daily_vol * z_score * np.sqrt(days) print(f"1日99% VaR: {var:.2f} 元")该代码基于正态分布假设,首先将年化波动率转换为日波动率,再通过标准正态分布的分位数(Z值)计算出对应置信水平下的最大预期损失。| 方法 | 优点 | 缺点 |
|---|---|---|
| 历史模拟法 | 无需分布假设,直观易懂 | 依赖历史数据,无法预测新风险 |
| 方差-协方差法 | 计算高效,适合线性资产 | 假设正态分布,低估尾部风险 |
| 蒙特卡洛模拟 | 灵活性强,可处理非线性产品 | 计算成本高,模型风险大 |
| 场景 | 说明 |
|---|---|
| 金融机构风险管理 | 用于评估交易账户市场风险,满足巴塞尔协议监管要求 |
| 投资组合监控 | 帮助基金经理控制下行风险暴露 |
# 计算正态分布假设下的VaR import numpy as np mean = 0.001 # 日均收益率 std_dev = 0.02 # 收益率标准差 confidence_level = 0.95 z_score = -1.645 # 标准正态下95%分位数 var = mean + z_score * std_dev print(f"95% VaR: {var:.4f}")该代码基于参数法计算VaR,假设收益率服从正态分布,利用均值和标准差结合Z分数估算潜在损失。# 加载必要库 library(PerformanceAnalytics) # 计算历史VaR(95%置信水平) historical_var <- function(returns, p = 0.95) { -quantile(returns, 1 - p, na.rm = TRUE) }该函数利用quantile()直接计算分位数,避免循环,适用于中小规模数据集。data.table进行高频数据读取与预处理parallel包加速批量评估import numpy as np # 定义协方差矩阵 Σ 和权重向量 w Sigma = np.array([[0.04, 0.02], [0.02, 0.03]]) w = np.array([0.6, 0.4]) # 计算组合方差 portfolio_var = w.T @ Sigma @ w print("组合方差:", portfolio_var)上述代码中,Sigma表示两资产间的协方差矩阵,对角线为各自方差,非对角线为协方差;w为投资权重;通过矩阵乘法@实现二次型计算,得到组合波动率的基础指标。# 参数设置 S0 <- 100 # 初始价格 mu <- 0.05 # 预期年收益率 sigma <- 0.2 # 年化波动率 T <- 1 # 时间长度(年) N <- 252 # 交易日数 dt <- T/N # 时间步长 # 生成路径 set.seed(123) dW <- rnorm(N, mean = 0, sd = sqrt(dt)) W <- cumsum(dW) t <- seq(dt, T, by = dt) S <- S0 * exp((mu - 0.5 * sigma^2) * t + sigma * W) # 绘图展示 plot(t, S, type = "l", xlab = "时间", ylab = "资产价格", main = "几何布朗运动模拟")该代码模拟一条资产价格路径。其中dW表示布朗运动增量,服从正态分布;S使用解析解公式计算,确保路径连续且符合伊藤过程特性。library(evir) data <- diff(log(EuStockMarkets[, "DAX"])) # 对数收益率 threshold <- quantile(data, 0.95) gpd_fit <- gpd(data, threshold) print(gpd_fit$par.ests) # 输出形状和尺度参数上述代码使用evir包对DAX指数收益率上尾进行GPD拟合。参数threshold选择95%分位数以确保足够超额样本,gpd()返回的形状参数反映尾部厚度,正值表示厚尾特征。# GARCH(1,1) 模型设定 sigma_t^2 = omega + alpha * epsilon_{t-1}^2 + beta * sigma_{t-1}^2其中,omega为常数项,代表长期平均波动;alpha衡量冲击的短期影响;beta反映波动持续性。当alpha + beta接近1时,表明波动具有强持续性,符合金融市场实证特征。spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)), distribution.model = "std") fit <- ugarchfit(spec = spec, data = returns)其中`garchOrder = c(1,1)`表示一阶自回归条件异方差结构,`distribution.model = "std"`允许残差服从学生t分布,更贴合金融数据厚尾特征。QQ图判断残差分布:若点大致落在对角线上,说明残差接近正态分布。
import statsmodels.api as sm sm.qqplot(residuals, line='45', fit=True)上述代码绘制残差QQ图。line='45'添加参考线,fit=True表示标准化残差前先拟合理论分布。
# 使用Python构建t-Copula模拟 import numpy as np from scipy.stats import t, norm # 模拟相关结构 corr_matrix = np.array([[1.0, 0.5], [0.5, 1.0]]) df = 4 # 自由度 samples = np.random.multivariate_t(corr_matrix, df, size=10000) u_samples = t.cdf(samples, df) # 转换为均匀边缘该代码生成具有t-Copula结构的联合分布样本,适用于极端风险场景下的VaR估算。library(rugarch) # 假设returns为实际收益率序列,var_forecast为对应的VaR预测 hit <- as.numeric(returns < -var_forecast) T <- length(hit) failures <- sum(hit) p_hat <- failures / T alpha <- 0.05 LR_uc <- -2 * log((1-alpha)^(T-failures) * alpha^failures) + 2 * log((1-p_hat)^(T-failures) * p_hat^failures) p_value <- 1 - pchisq(LR_uc, df=1)该代码计算无条件覆盖似然比统计量(LR_uc),检验实际失败率是否等于名义水平α。若p值小于显著性水平,则拒绝原假设,表明VaR估计存在系统性偏差。def asymmetric_loss(actual, var, alpha=0.05): # alpha: 显著性水平 loss = np.where(actual < var, (var - actual) * (1 - alpha), (actual - var) * alpha) return np.mean(loss)该函数对VaR低估(即实际损失更大)施加更重惩罚,反映风险管理中的非对称成本偏好,适用于极端风险防控场景。library(shiny) ui <- fluidPage( plotOutput("riskPlot", height = "400px"), verbatimTextOutput("alert") ) server <- function(input, output, session) { output$riskPlot <- renderPlot({ # 实时更新风险评分趋势图 plot(risk_data$timestamp, risk_data$score, type = 'l') }) } shinyApp(ui, server)该代码段定义了一个Shiny应用界面,通过renderPlot动态刷新风险趋势图,结合reactivePoll可实现秒级数据拉取。# 使用HuggingFace Transformers构建图文检索 from transformers import AutoProcessor, AutoModel model = AutoModel.from_pretrained("openflamingo/OpenFlamingo-3B-vitl-mpt1b") processor = AutoProcessor.from_pretrained("openflamingo/OpenFlamingo-3B-vitl-mpt1b") inputs = processor(images=image, texts=text, return_tensors="pt", padding=True) outputs = model(**inputs) similarity_scores = outputs.logits_per_image| 技术方向 | 能效提升 | 案例平台 |
|---|---|---|
| 稀疏训练 | ~40% | GShard |
| 动态计算 | ~35% | DeepSpeed-Sparse |