VaR五种算法R实现:从历史模拟到Copula-GARCH全解析
简介金融风险管理中风险价值VaR是衡量投资组合潜在损失的核心指标。这份资料聚焦五种计算VaR的算法重点利用DCC-GARCH模型与Copula-GARCH模型进行波动率与相依性建模面向金融工程、量化风控方向的学生及从业者可帮助理解并复现历史模拟法、参数法、蒙特卡洛模拟、风险因子模型及Copula方法。资源包仅含1个R语言脚本压缩后大小2KB代码轻量精炼覆盖边际t分布拟合、Clayton Copula尾部相关性、动态条件相关估计以及组合损失风险价值计算等关键环节。目前已有500人学习下载适合作为课程作业、论文实证或自学参考资料。通过运行该脚本读者能直观对比不同算法在厚尾分布、波动率聚集与非线性依赖下的风险度量差异并可通过修改数据与参数灵活迁移至自己的资产组合风险测算为进一步构建复杂风控模型提供可复用的代码基础。1. VaR 的五种算法这份 R 源码把金融风险管理的家底全摊开了做风控的人大概都有过这种时刻领导问“今天组合的 VaR 是多少”你打开 Excel 用历史数据算了个分位数交差结果第二天市场一波动这个数就被打脸。VaRValue at Risk本质上是“在给定置信水平下组合在未来持有期内可能的最大损失”但它的计算路径远不止一条。这份“第五次作业.R”源码里把历史模拟法、参数法、蒙特卡洛模拟、DCC-GARCH 动态相关模型、Copula-GARCH 联合分布法五种算法全部实现了一遍还附带 marginal VaR边际 VaR的计算——也就是每个资产对组合 VaR 的边际贡献。适合正在学金融工程的在校生、刚转量化风控的从业者以及想对比模型差异、做压力测试框架的人。它不是理论讲义是可直接跑出数字的完整代码。2. 历史模拟法与参数法先跑通两个基准模型2.1 历史模拟法不假设分布直接取分位数历史模拟法是五种方法里最朴素、也最容易被轻视的一个。它不假设收益率服从任何分布直接把历史收益率序列按大小排序取第 5% 分位数作为 VaR 估计值。这个方法的优势在于没有模型风险缺点是默认“过去能代表未来”遇到结构性突变就失灵。在“第五次作业.R”里历史模拟法的实现大概是这样的# 假设 ret 是收益率矩阵每列是一个资产 library(quantmod) # 等权重组合收益率 weights - rep(1 / ncol(ret), ncol(ret)) port_ret - as.matrix(ret) %*% weights # 历史模拟法95%置信水平下的VaR VaR_hist - quantile(port_ret, probs 0.05, na.rm TRUE) print(paste0(Historical VaR (95%): , round(VaR_hist, 4)))这里的quantile(port_ret, probs 0.05)取的是组合收益率序列的 5% 分位数含义是“有 95% 的把握损失不会超过这个值”。注意 VaR 在 R 里通常输出为负数表示损失方向实际汇报时取绝对值即可。na.rm TRUE很关键。实际数据里节假日、停牌会产生缺失值如果不处理quantile会直接返回NA。另外weights的选择直接决定结果——等权重是最简单的起点但真实组合里权重每天都在变后文的边际 VaR 会专门讨论这个问题。2.2 参数法方差-协方差法及其正态假设陷阱参数法也叫方差-协方差法假设收益率服从正态分布那么组合 VaR 只需要均值和标准差两个参数# 参数法正态分布假设 mu - mean(port_ret) sigma - sd(port_ret) # 95%置信水平对应1.645倍标准差 VaR_param - mu qnorm(0.05) * sigma print(paste0(Parametric VaR (95%): , round(VaR_param, 4)))qnorm(0.05)在标准正态分布下取值约 -1.645这个数字是参数法的灵魂。如果你用的是 99% 置信水平就把0.05换成0.01对应 -2.326。参数法最大陷阱是正态假设。金融收益率普遍存在厚尾特征——极端值出现的频率远高于正态分布预测所以参数法计算出的 VaR 往往会低估风险。尤其在市场恐慌期真实损失突破 VaR 的概率会显著高于 5%。所以参数法适合快速估算不适合压力测试场景。2.3 蒙特卡洛模拟随机抽样与情景生成蒙特卡洛法是参数法的延伸通过大量随机抽样生成未来的收益率路径# 蒙特卡洛模拟 set.seed(2024) # 固定随机种子保证结果可复现 n_sim - 10000 sim_ret - rnorm(n_sim, mean mu, sd sigma) VaR_mc - quantile(sim_ret, probs 0.05) print(paste0(Monte Carlo VaR (95%): , round(VaR_mc, 4)))set.seed(2024)是血泪经验换来的。如果不固定随机种子每次运行结果都不一样领导问“为什么两次跑的数对不上”你没法解释。蒙特卡洛的优势是能扩展到非正态分布——你可以把rnorm换成rtt 分布需要指定自由度或直接从历史样本中重抽样bootstrap这在后文 Copula 方法中会用到。3. DCC-GARCH 模型让相关性和波动率都动起来3.1 为什么单资产 GARCH 不够用GARCH 模型解决的是波动率聚类问题——大波动后面跟着大波动小波动后面跟着小波动。但单资产 GARCH 只建模了每个资产自己的方差资产间的相关性被假设为常数。真实市场里股票和债券的相关性在经济危机时急剧变化甚至由负转正。如果相关性估计错了组合 VaR 可能偏差 20% 以上。DCC-GARCHDynamic Conditional Correlation GARCH就是干这个的它先对每个资产拟合 GARCH 模型得到标准化残差再用这些残差动态估计相关系数矩阵。这样组合的协方差矩阵就是时变的VaR 也跟着市场环境实时更新。3.2 R 语言实现rugarch rmgarch 完整链路“第五次作业.R”里 DCC-GARCH 的实现依赖rugarch和rmgarch两个包library(rugarch) library(rmgarch) # 第一步定义每个资产的单变量GARCH spec # 这里用 gjrGARCH它能捕捉杠杆效应利空对波动的影响大于利好 uspec - multispec(replicate(2, ugarchspec( variance.model list(model gjrGARCH), mean.model list(armaOrder c(1, 0)), distribution.model std ) )) # 第二步分别拟合每个资产 multifit - multifit(uspec, ret) # 第三步定义DCC spec并拟合 dccspec_model - dccspec(uspec, dccOrder c(1, 1), distribution mvnorm) dccfit_result - dccfit(dccspec_model, data ret, fit.control list(scale TRUE)) # 第四步提取时变协方差矩阵 cov_array - rcov(dccfit_result) # 计算最后一期的组合VaR # 取最后一个协方差矩阵计算组合方差 final_cov - cov_array[,,dim(cov_array)[3]] port_var - t(weights) %*% final_cov %*% weights port_sd - sqrt(port_var) VaR_dcc - mean(port_ret) qnorm(0.05) * port_sd print(paste0(DCC-GARCH VaR (95%): , round(VaR_dcc, 4)))这段代码的核心逻辑分四步先定义单资产 GARCH 模型分别拟合得到各自的波动率参数再通过dccspec定义 DCC 结构把单资产模型“拼”成联合模型然后dccfit完成整体拟合最后rcov提取时变协方差矩阵。fit.control list(scale TRUE)是让拟合过程对数据做尺度化避免收益率量级差异导致数值不稳定这个参数在资产价格差异大的组合里必须开。distribution.model std表示单资产残差用标准化 t 分布这比正态分布更能捕捉厚尾。如果你发现拟合后的标准化残差仍然有很强的自相关可以把armaOrder从c(1,0)调成c(1,1)或更高阶但阶数过高容易过拟合。3.3 关键参数解读alpha、beta 与动态相关性DCC-GARCH 的输出里有几个参数需要读懂。dccalpha和dccbeta控制相关性动态变化的强度前者衡量新信息对相关性的冲击后者衡量相关性的持续性。dccalpha dccbeta接近 1 说明相关性高度持续市场一旦进入高相关状态短期内很难回归。我在实际项目中见过dccbeta大于 0.98 的情况这意味着相关性序列几乎是一条直线DCC 没起到动态调整作用。此时要检查单资产 GARCH 的拟合质量——如果第一步标准化残差没做好DCC 层面的参数估计会失真。另一个常见问题是rcov返回的协方差矩阵维度是[n_assets, n_assets, n_days]新手经常忘记取最后一个时间点导致算出来的是历史平均协方差。4. Copula-GARCH 与边际 VaR把资产间的“极端联动”建进模型4.1 为什么要在 Copula 里选 ClaytonCopula 解决的是“联合分布”问题。传统方法假设资产收益率服从多元正态分布但真实数据里金融资产在极端行情下更容易同涨同跌——这就是尾部相关性。多元 t 分布能部分捕捉厚尾但对非对称尾部下跌时的相关性远高于上涨时无能为力。Clayton Copula 的优势在于它专门建模“下尾相关性”——市场暴跌时资产间的联动会急剧增强。这正好符合金融危机时的实证特征平时各资产各走各的一旦发生系统性风险相关系数迅速飙升。所以 Clayton 适合做风险度量不适合做资产配置它对上尾的相关性刻画偏弱会低估牛市里的同步上涨。4.2 t 分布边际拟合与概率积分变换Copula-GARCH 的标准流程分三步边际分布建模、概率积分变换、Copula 拟合。先从 DCC-GARCH 中提取标准化残差对每个残差序列拟合 t 分布library(copula) library(MASS) # 提取标准化残差 std_resid - residuals(dccfit_result, standardize TRUE) # 对每个资产的残差拟合t分布估计df和location, scale fit_margins - apply(std_resid, 2, function(x) { fitdistr(x, t) }) # 概率积分变换把残差映射到[0,1]均匀分布 u - sapply(1:ncol(std_resid), function(i) { pt(std_resid[, i], df fit_margins[[i]]$estimate[df]) }) # 把u处理成矩阵形式 u - as.matrix(as.data.frame(u)) # 拟合Clayton Copula clayton_cop - claytonCopula(dim ncol(u)) fit_clayton - fitCopula(clayton_cop, u, method ml) print(summary(fit_clayton))代码逻辑分两块。第一块fitdistr完成每个资产边际分布的参数估计这里t分布需要估计三个参数m位置、s尺度、df自由度。自由度越小尾部越厚极端事件概率越大。第二块pt是做概率积分变换把原始残差变成均匀分布变量这是 Copula 建模的前置条件——Copula 只能作用于均匀分布数据否则会引入错误的依赖结构。fitCopula的method ml是最大似然估计。拟合完成后fit_claytoncopulaparameters里的theta就是 Clayton 的相关性参数theta 越大下尾相关性越强。我见过有同学在这里直接用原始收益率拟合 Copula不出意外地得到了一个严重失真的结果——因为原始收益率的边际分布根本不是均匀的必须先经过 GARCH 过滤和概率积分变换。4.3 Monte Carlo 模拟与 marginal VaR 计算有了 Copula 和边际分布就可以模拟资产收益率并计算组合 VaR 和边际 VaR# 从拟合好的Clayton Copula中抽样 set.seed(2024) n_sim - 50000 sim_u - rCopula(n_sim, fit_claytoncopula) # 反变换回t分布残差 sim_resid - sapply(1:ncol(sim_u), function(i) { df_i - fit_margins[[i]]$estimate[df] qt(sim_u[, i], df df_i) }) # 结合最后一天的波动率和均值还原收益率 final_sigma - sqrt(diag(final_cov)) sim_ret_matrix - sim_resid %*% diag(final_sigma) # 组合收益率 sim_port_ret - sim_ret_matrix %*% weights VaR_copula - quantile(sim_port_ret, probs 0.05) print(paste0(Copula-GARCH VaR (95%): , round(VaR_copula, 4))) # 计算边际VaR每个资产对组合VaR的贡献 # 方法固定其他资产逐一将该资产收益率替换为VaR情景下的值 marginal_var - sapply(1:ncol(sim_ret_matrix), function(j) { sim_ret_tmp - sim_ret_matrix # 用该资产5%分位数替换其模拟值 sim_ret_tmp[, j] - quantile(sim_ret_matrix[, j], 0.05) port_ret_tmp - sim_ret_tmp %*% weights quantile(port_ret_tmp, 0.05) - VaR_copula }) names(marginal_var) - colnames(ret) print(marginal_var)这里的逻辑有三个关键点。第一rCopula从拟合好的 Clayton Copula 中抽取均匀分布样本这一步保留了资产间的尾部依赖结构。第二反变换用qt把均匀分布样本还原成 t 分布残差再乘以当天的条件波动率得到模拟收益率。注意这里用的是final_sigma最后一天的波动率说明 Copula 方法结合了 GARCH 的时变波动率和 Copula 的静态依赖结构——这是它在实际中非常有用的组合方式。第三边际 VaR 的算法采用“条件替换法”把某个资产的收益率序列替换为该资产自身的 5% 分位数即该资产的单资产 VaR重新计算组合 VaR减去原始组合 VaR差值就是该资产的边际贡献。这个方法直观且容易解释但不适合资产数量特别多的组合因为每个资产都需要重新模拟一次。实际项目中如果资产超过 20 个我一般用数值导数法或 Delta-Normal 近似来算边际 VaR速度会快一个数量级。5. 避坑排查VaR 计算结果总被质疑先检查这四个环节5.1 现象DCC-GARCH 拟合时报错 “NA/NaN values in data”原因多半是收益率序列里有缺失值或无穷值。R 的dccfit对数据质量非常敏感哪怕一个NA也会让整个优化过程崩溃。解决方法是先对数据做预处理用na.omit或者na.approx插值。我在处理日度收益率时习惯先检查is.na(ret)的列名再用na.approx做线性插值但要注意插值会抹平极端波动如果缺失值超过 5%建议直接删除该时段。5.2 现象Copula 拟合的 theta 参数为正但数值异常大正常情况下 Clayton 的 theta 在 0.5 到 3 之间。如果 theta 超过 10甚至拟合不收敛大概率是概率积分变换出了问题——u矩阵里可能有 0 或 1 的极端值。pt函数在自由度较大时可能输出接近 0 的值而 Copula 的似然函数在边界处趋于无穷。我的处理习惯是把u的值做收缩u - (u * (n-1) 0.5) / n避免取到精确的 0 或 1。5.3 现象DCC 的相关性系数常年不变动态效果消失如果dccbeta接近 1 且dccalpha接近 0说明相关性序列几乎不响应新信息。常见原因是单变量 GARCH 的拟合不充分标准化残差仍然带有异方差性。另一个原因是dccOrder c(1,1)对某些资产组合不够灵活可以尝试dccOrder c(2,1)或改用aDCC非对称 DCC模型。注意不要一上来就加阶数先检查rugarch拟合的 Ljung-Box 检验 p 值确认残差没有自相关后再动 DCC 的阶数。5.4 现象历史模拟法和参数法结果差异巨大不知道信哪个这不是 bug是两种方法的统计特性不同。历史模拟法对样本窗口长度高度敏感——用 250 天和 500 天窗口结果可能差 30%。参数法对分布假设高度敏感——用正态分布和 t 分布结果可能差 40%。我的建议是把历史模拟法和 DCC-GARCH 法作为主报告数据参数法作为辅助参考。如果两种主方法的结果背离超过 15%我会检查是不是窗口期包含极端行情或者权重设置有问题。说到底VaR 是统计估计不同假设得出不同数字是常态关键是你能解释每个数字背后的假设。6. 从单次计算到滚动验证让 VaR 模型经得起时间检验单次计算的 VaR 数值再漂亮如果通不过回测也是空中楼阁。我建议把“第五次作业.R”里的单期计算改成滚动窗口结构用过去 250 天的数据拟合模型预测第 251 天的 VaR然后窗口向前滑动一天重复这个过程。跑完 500 天你就有了 500 个 VaR 预测值可以和实际收益率逐一对比。验证标准我最常用的是 Kupiec 失败率检验记录实际损失超过 VaR 的天数占比如果显著高于 5%置信水平 95%说明模型低估风险。R 里可以这样简单实现# 假设 VaR_series 是历史滚动计算的VaR序列loss_series 是实际日损失 violations - sum(loss_series VaR_series) # 损失超过VaR的天数 n - length(loss_series) fail_rate - violations / n # Kupiec检验统计量 LR - -2 * (log(((1-0.05)^(n-violations)) * (0.05^violations)) - log(((1-fail_rate)^(n-violations)) * (fail_rate^violations))) p_value - 1 - pchisq(LR, df 1) print(paste0(Failure rate: , round(fail_rate, 4), , Kupiec p-value: , round(p_value, 4)))Kupiec 检验的 p 值大于 0.05说明模型的失败率与置信水平一致。这里有个容易被忽略的细节比较的是“损失”和“VaR 绝对值”实际损失是正数VaR 是负数直接比较需要加绝对值。我第一次做回测时因为这个方向问题得到 100% 的失败率排查了半天。从那以后我每次跑完 VaR 都会强制走一遍滚动回测和 Kupiec 检验再把这个过程固化到每周的风控检查清单里——单次计算的数字是快照滚动验证才能暴露模型在真实环境下的稳定程度。这套源码的价值也正在于此五种算法不是让你选一个万能解而是给了你五个参照系互相印证。希望这份拆解能帮你在学模型时少走弯路把时间和精力留给真正重要的调参和验证。本文还有配套的精品资源点击获取

相关新闻

Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

Linux 上自建 Nacos 集群:从环境准备到高可用验证的完整指南

1. 为什么要在 Linux 上自建 Nacos 集群1.1 从单机到集群:一个绕不开的坎很多团队一开始用 Nacos 都是单机模式,图省事,下载解压启动就完事。开发环境跑得好好的,一到预发或者生产环境,问题就来了:服务注册…

2026/10/14 1:02:15 阅读更多 →
Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

Docker 安装 Jenkins 实战:从环境部署到自动化构建与部署全流程

最近这段时间一直在折腾持续集成这套东西,起因也很简单:某次发布新版本的时候,我手动打包、传服务器、重启服务,一步接一步,结果到了最后才发现漏了一个配置文件,整个流程又得从头来一遍。那天晚上我就在想…

2026/10/14 1:01:21 阅读更多 →
35kV三段式电流继电保护课程设计:整定计算与仿真全流程

35kV三段式电流继电保护课程设计:整定计算与仿真全流程

“35kV电力系统三段式电流继电保护课程设计仿真报告”,这句话我琢磨了好一阵子。电气专业的学生对这个题目应该都不陌生,它几乎是继电保护课程里绕不开的经典任务。很多人拿到这个题目之后的第一反应不是“我会不会算”,而是“我算这些东西到…

2026/10/12 22:30:07 阅读更多 →

最新新闻

大屏模板数据接入实战:从字段对齐到轮询刷新与避坑指南

大屏模板数据接入实战:从字段对齐到轮询刷新与避坑指南

简介:面向数据分析、产品经理及前端开发者的数据可视化大屏资源,提供100个可直接投入使用的原型模板图,覆盖销售业绩、运营监控、客户行为分析等多个行业的常见业务场景。项目基于 big-data-view-master 框架,数据库、API 接口或 …

2026/10/14 1:02:03 阅读更多 →
注意:苹果发布带屏智能中枢,高价入场能给家庭带来什么变化

注意:苹果发布带屏智能中枢,高价入场能给家庭带来什么变化

注意:苹果发布带屏智能中枢,高价入场能给家庭带来什么变化 你走进家门,客厅桌上立着一块小巧的方形屏幕,搭着半球形的金属底座。它看着像一台微缩版的经典电脑,当你走近时,屏幕上的日程和天气会自动放大&am…

2026/10/14 1:02:03 阅读更多 →
AI芯片软硬件协同设计:数据流架构与算子映射的工程实践

AI芯片软硬件协同设计:数据流架构与算子映射的工程实践

1. AI芯片软硬件协同设计的整体思路拆解AI芯片这个领域,做了几年下来最大的感受就是:硬件指标再漂亮,软件栈跟不上,实际跑起来照样拉胯。这次想聊的"软硬件设计"系列第五篇,核心聚焦在一个问题上——当算法模…

2026/10/14 1:02:03 阅读更多 →
JetBrains官宣全新AI IDE:从插件到整库理解,重构AI编程工作流

JetBrains官宣全新AI IDE:从插件到整库理解,重构AI编程工作流

最近圈子里的消息传得很快:Jetbrains 正式官宣了一款全新的 AI IDE。说实话,刚看到这个消息的时候,我第一反应不是"又来了一个新工具",而是"Jetbrains 终于不再只是往 IDE 里塞 AI 插件了"。过去两三年&#…

2026/10/14 1:02:03 阅读更多 →
PaperSpine5 期刊学习指南:从目标期刊文献到可落地的写作与排版迁移

PaperSpine5 期刊学习指南:从目标期刊文献到可落地的写作与排版迁移

AI 技能AI 写作人工智能深度研究AI 应用 【免费下载链接】PaperSpine PaperSpine5 — local-first, evidence-bound paper research, writing, figures, review and delivery. Download: https://wubing2023.github.io/PaperSpine/v5/ 项目地址: https://gitcode.co…

2026/10/14 1:02:03 阅读更多 →
双塔模型query侧个性化融合:原理、路径与工程实践

双塔模型query侧个性化融合:原理、路径与工程实践

1. 为什么双塔模型的query侧“长不大”:从结构缺陷看个性化融合的必然性在推荐系统工程实践中,双塔模型(Dual-Tower Model)早已不是新鲜概念。它把用户行为序列和候选物品分别编码进两个独立子网络,最后用内积或余弦相…

2026/10/14 1:01:03 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/13 2:54:56 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/13 1:58:08 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/12 18:11:17 阅读更多 →