ARTICLE DETAIL

资讯详情

深耕郑州网站建设与运营推广的一线实战洞察。

risk-metrics-calculation 技能实战:用 Python 量化 VaR、CVaR、夏普比率与回撤风险

risk-metrics-calculation 技能实战:用 Python 量化 VaR、CVaR、夏普比率与回撤风险 risk-metrics-calculation 技能实战用 Python 量化 VaR、CVaR、夏普比率与回撤风险【免费下载链接】agentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity项目地址: https://gitcode.com/GitHub_Trending/agents24/agents本篇文章以 agents24 仓库quantitative-trading插件中的risk-metrics-calculation技能SKILL.md为核心系统讲解组合风险度量的完整工具箱从波动率、Beta 到 VaR/CVaR 尾部风险从最大回撤到夏普/索提诺/卡尔马等风险调整收益指标并覆盖组合级风险分解、滚动窗口风险、压力测试等进阶模式。读完本文你将掌握一套可直接复制运行、基于 numpy/pandas/scipy 的 Python 风险计算代码并能用于组合风险度量、风险限额实施与风险监控系统的构建。技能定位quantitative-trading 插件中的风险度量模块risk-metrics-calculation是 quantitative-trading 插件下两个技能之一另一个是 backtesting-frameworks。在 docs/agent-skills.md 的技能目录中它被概括为Calculate VaR, Sharpe ratio, and drawdown metrics for portfolios计算组合的 VaR、夏普比率与回撤指标技能本身遵循仓库统一的 Agent Skills 渐进式披露结构SKILL.md导航层只保留元数据、使用时机、核心概念与最佳实践而完整的工作代码示例放在references/details.md资源层按需加载。这正是本文既保留导航层骨架、又完整展开四个实现模式的原因。When to Use使用时机SKILL.md 明确定义了该技能的激活场景Agent 在以下任务中应自动调用它Measuring portfolio risk— 度量组合风险Implementing risk limits— 实施风险限额Building risk dashboards— 构建风险仪表盘Calculating risk-adjusted returns— 计算风险调整收益Setting position sizes— 设定仓位规模Regulatory reporting— 监管报送该技能在插件生态中与 risk-manager agent 协同最紧密后者专注于仓位保护与风险度量其职责清单R 倍数分析、VaR 计算、相关性/Beta 分析、压力测试、风险调整绩效指标与本文四个实现模式一一对应而 quant-analyst agent 则将其用于策略回测后的风险分析例如输出风险敞口报告、收益率与关键指标可视化。核心概念一风险指标分类单一指标无法刻画组合的全部风险SKILL.md 将常用指标划分为四类类别指标典型用途波动率Volatility标准差Std Dev、Beta一般性风险度量尾部风险Tail RiskVaR、CVaR极端损失回撤Drawdown最大回撤Max DD、Calmar资本保全风险调整Risk-AdjustedSharpe、Sortino绩效评价这四类指标对应details.md中RiskMetrics类的四个方法族volatility/downside_deviation/beta波动率族、var_*/cvar尾部风险族、drawdowns/max_drawdown/avg_drawdown/drawdown_duration回撤族、sharpe_ratio/sortino_ratio/calmar_ratio/omega_ratio/information_ratio风险调整族。核心概念二时间维度风险度量必须显式声明时间尺度SKILL.md 给出典型对应关系Intraday: Minute/hourly VaR for day traders 日内日内交易者的分钟/小时级 VaR Daily: Standard risk reporting 日频标准风险报告 Weekly: Rebalancing decisions 周频再平衡决策 Monthly: Performance attribution 月频绩效归因 Annual: Strategic allocation 年频战略性资产配置代码中以ann_factor 252每年交易日数实现从周期收益率到年化指标的换算例如volatility()中年化波动率 std() * sqrt(252)。使用时务必根据自身数据频率选择对应的年化因子如 252 日、52 周、12 月。环境准备四个模式全部依赖 Python 科学计算生态标准依赖为import numpy as np import pandas as pd from scipy import stats # Pattern 1 的分布假设 from scipy.optimize import minimize # Pattern 2 的风险平价权重优化 from typing import Dict, Optional, Tuple该技能是纯知识型 Markdown 技能无独立 Python 包代码可直接放入你自己的研究/生产环境运行数据源只需准备pd.Series单资产周期收益率与pd.DataFrame多资产收益率列名为资产名。模式一核心风险指标 RiskMetricsdetails.md的第一个模式定义了RiskMetrics类它是整套技能的基石覆盖四类指标的全部单资产实现。类骨架与参数约定class RiskMetrics: Core risk metric calculations. def __init__(self, returns: pd.Series, rf_rate: float 0.02): Args: returns: Series of periodic returns rf_rate: Annual risk-free rate self.returns returns self.rf_rate rf_rate self.ann_factor 252 # Trading days per year关键参数约定returns为周期收益率序列rf_rate默认 0.02年化无风险利率ann_factor固定 252所有年化换算以此为基准。波动率族volatility / downside_deviation / beta# Volatility Metrics def volatility(self, annualized: bool True) - float: Standard deviation of returns. vol self.returns.std() if annualized: vol * np.sqrt(self.ann_factor) return vol def downside_deviation(self, threshold: float 0, annualized: bool True) - float: Standard deviation of returns below threshold. downside self.returns[self.returns threshold] if len(downside) 0: return 0.0 dd downside.std() if annualized: dd * np.sqrt(self.ann_factor) return dd def beta(self, market_returns: pd.Series) - float: Beta relative to market. aligned pd.concat([self.returns, market_returns], axis1).dropna() if len(aligned) 2: return np.nan cov np.cov(aligned.iloc[:, 0], aligned.iloc[:, 1]) return cov[0, 1] / cov[1, 1] if cov[1, 1] ! 0 else 0要点解读volatility仅用全样本标准差并年化是后续夏普、波动率体制分类的基础downside_deviation只取低于阈值的收益计算下行偏差——这是 Sortino 比率的核心输入体现了只有下行风险才值得惩罚的思想beta通过协方差/市场方差度量相对市场的系统性风险注意先dropna()对齐两只序列且对市场方差为 0 的退化情形做了防御。尾部风险族三种 VaR 与 CVaRVaRValue at Risk回答在给定置信度下组合可能的最大损失。代码提供三种实现覆盖不同分布假设# Value at Risk def var_historical(self, confidence: float 0.95) - float: Historical VaR at confidence level. return -np.percentile(self.returns, (1 - confidence) * 100) def var_parametric(self, confidence: float 0.95) - float: Parametric VaR assuming normal distribution. z_score stats.norm.ppf(confidence) return self.returns.mean() - z_score * self.returns.std() def var_cornish_fisher(self, confidence: float 0.95) - float: VaR with Cornish-Fisher expansion for non-normality. z stats.norm.ppf(confidence) s stats.skew(self.returns) # Skewness k stats.kurtosis(self.returns) # Excess kurtosis # Cornish-Fisher expansion z_cf (z (z**2 - 1) * s / 6 (z**3 - 3*z) * k / 24 - (2*z**3 - 5*z) * s**2 / 36) return -(self.returns.mean() z_cf * self.returns.std()) # Conditional VaR (Expected Shortfall) def cvar(self, confidence: float 0.95) - float: Expected Shortfall / CVaR / Average VaR. var self.var_historical(confidence) return -self.returns[self.returns -var].mean()三种 VaR 方法对比方法分布假设优点局限历史模拟var_historical无经验分布无需分布假设实现最简单依赖历史样本对未发生过的情景失效参数法var_parametric正态分布计算快、可解析收益率为肥尾正态假设低估尾部风险Cornish-Fisher 展开通过偏度/峰度修正正态分位数在正态与经验分布之间折中对极端非正态可能发散实现细节值得注意var_cornish_fisher用stats.skew与stats.kurtosis超额峰度修正标准正态分位数z公式为经典的 Cornish-Fisher 四阶展开而cvar条件 VaR亦称 Expected Shortfall / 平均 VaR直接基于历史 VaR 阈值取损失超过 VaR 的所有样本的平均损失比 VaR 更能刻画尾部深度——这正是 SKILL.md 最佳实践中VaR isnt enough, use CVaR的代码体现。回撤族drawdowns / max_drawdown / avg_drawdown / drawdown_duration# Drawdown Analysis def drawdowns(self) - pd.Series: Calculate drawdown series. cumulative (1 self.returns).cumprod() running_max cumulative.cummax() return (cumulative - running_max) / running_max def max_drawdown(self) - float: Maximum drawdown. return self.drawdowns().min() def avg_drawdown(self) - float: Average drawdown. dd self.drawdowns() return dd[dd 0].mean() if (dd 0).any() else 0 def drawdown_duration(self) - Dict[str, int]: Drawdown duration statistics. dd self.drawdowns() in_drawdown dd 0 # Find drawdown periods drawdown_starts in_drawdown ~in_drawdown.shift(1).fillna(False) drawdown_ends ~in_drawdown in_drawdown.shift(1).fillna(False) durations [] current_duration 0 for i in range(len(dd)): if in_drawdown.iloc[i]: current_duration 1 elif current_duration 0: durations.append(current_duration) current_duration 0 if current_duration 0: durations.append(current_duration) return { max_duration: max(durations) if durations else 0, avg_duration: np.mean(durations) if durations else 0, current_duration: current_duration }回撤的定义是(当前净值 - 历史最高净值) / 历史最高净值恒为负值或 0因此max_drawdown()取最小值即最深回撤。drawdown_duration返回三个字典字段历史最长回撤持续期、平均持续期、以及当前是否仍在回撤中的当前持续期——这是资本保全与风控限额的常用输入。风险调整族Sharpe / Sortino / Calmar / Omega / Information Ratio# Risk-Adjusted Returns def sharpe_ratio(self) - float: Annualized Sharpe ratio. excess_return self.returns.mean() * self.ann_factor - self.rf_rate vol self.volatility(annualizedTrue) return excess_return / vol if vol 0 else 0 def sortino_ratio(self) - float: Sortino ratio using downside deviation. excess_return self.returns.mean() * self.ann_factor - self.rf_rate dd self.downside_deviation(threshold0, annualizedTrue) return excess_return / dd if dd 0 else 0 def calmar_ratio(self) - float: Calmar ratio (return / max drawdown). annual_return (1 self.returns).prod() ** (self.ann_factor / len(self.returns)) - 1 max_dd abs(self.max_drawdown()) return annual_return / max_dd if max_dd 0 else 0 def omega_ratio(self, threshold: float 0) - float: Omega ratio. returns_above self.returns[self.returns threshold] - threshold returns_below threshold - self.returns[self.returns threshold] if returns_below.sum() 0: return np.inf return returns_above.sum() / returns_below.sum() # Information Ratio def information_ratio(self, benchmark_returns: pd.Series) - float: Information ratio vs benchmark. active_returns self.returns - benchmark_returns tracking_error active_returns.std() * np.sqrt(self.ann_factor) active_return active_returns.mean() * self.ann_factor return active_return / tracking_error if tracking_error 0 else 0各比率的设计意图Sharpe每单位总波动获得的超额收益分子为年化收益减无风险利率分母为年化波动率Sortino分母换成下行偏差只惩罚下行波动适合收益分布不对称的策略Calmar年化收益 / 最大回撤绝对值强调用多大的回撤代价换来多少收益Omega按阈值划分盈亏两侧的收益总和之比大于 1 意味着收益侧占优当下方总和为 0 时返回np.infInformation Ratio相对基准的超额收益除以跟踪误差Tracking Error是主动管理绩效的核心指标。汇总summary()# Summary def summary(self) - Dict[str, float]: Generate comprehensive risk summary. dd_stats self.drawdown_duration() return { # Returns total_return: (1 self.returns).prod() - 1, annual_return: (1 self.returns).prod() ** (self.ann_factor / len(self.returns)) - 1, # Volatility annual_volatility: self.volatility(), downside_deviation: self.downside_deviation(), # VaR CVaR var_95_historical: self.var_historical(0.95), var_99_historical: self.var_historical(0.99), cvar_95: self.cvar(0.95), # Drawdowns max_drawdown: self.max_drawdown(), avg_drawdown: self.avg_drawdown(), max_drawdown_duration: dd_stats[max_duration], # Risk-Adjusted sharpe_ratio: self.sharpe_ratio(), sortino_ratio: self.sortino_ratio(), calmar_ratio: self.calmar_ratio(), omega_ratio: self.omega_ratio(), # Distribution skewness: stats.skew(self.returns), kurtosis: stats.kurtosis(self.returns), }summary()一次性输出 14 个指标涵盖收益、波动、尾部风险、回撤、风险调整与分布特征偏度/峰度。这正好对应该技能构建风险仪表盘和监管报送场景的核心输出格式也是 risk-manager 输出风险评估报告 指标集的直接实现支撑。模式二组合级风险 PortfolioRisk单资产指标不足以回答整个组合的风险问题PortfolioRisk类在收益率矩阵与权重向量之上做组合层计算。class PortfolioRisk: Portfolio-level risk calculations. def __init__( self, returns: pd.DataFrame, weights: Optional[pd.Series] None ): Args: returns: DataFrame with asset returns (columns assets) weights: Portfolio weights (default: equal weight) self.returns returns self.weights weights if weights is not None else \ pd.Series(1/len(returns.columns), indexreturns.columns) self.ann_factor 252 def portfolio_return(self) - float: Weighted portfolio return. return (self.returns self.weights).mean() * self.ann_factor def portfolio_volatility(self) - float: Portfolio volatility. cov_matrix self.returns.cov() * self.ann_factor port_var self.weights cov_matrix self.weights return np.sqrt(port_var) def marginal_risk_contribution(self) - pd.Series: Marginal contribution to risk by asset. cov_matrix self.returns.cov() * self.ann_factor port_vol self.portfolio_volatility() # Marginal contribution mrc (cov_matrix self.weights) / port_vol return mrc def component_risk(self) - pd.Series: Component contribution to total risk. mrc self.marginal_risk_contribution() return self.weights * mrc def risk_parity_weights(self, target_vol: float None) - pd.Series: Calculate risk parity weights. from scipy.optimize import minimize n len(self.returns.columns) cov_matrix self.returns.cov() * self.ann_factor def risk_budget_objective(weights): port_vol np.sqrt(weights cov_matrix weights) mrc (cov_matrix weights) / port_vol rc weights * mrc target_rc port_vol / n # Equal risk contribution return np.sum((rc - target_rc) ** 2) constraints [ {type: eq, fun: lambda w: np.sum(w) - 1}, # Weights sum to 1 ] bounds [(0.01, 1.0) for _ in range(n)] # Min 1%, max 100% x0 np.array([1/n] * n) result minimize( risk_budget_objective, x0, methodSLSQP, boundsbounds, constraintsconstraints ) return pd.Series(result.x, indexself.returns.columns) def correlation_matrix(self) - pd.DataFrame: Asset correlation matrix. return self.returns.corr() def diversification_ratio(self) - float: Diversification ratio (higher more diversified). asset_vols self.returns.std() * np.sqrt(self.ann_factor) weighted_vol (self.weights * asset_vols).sum() port_vol self.portfolio_volatility() return weighted_vol / port_vol if port_vol 0 else 1 def tracking_error(self, benchmark_returns: pd.Series) - float: Tracking error vs benchmark. port_returns self.returns self.weights active_returns port_returns - benchmark_returns return active_returns.std() * np.sqrt(self.ann_factor) def conditional_correlation( self, threshold_percentile: float 10 ) - pd.DataFrame: Correlation during stress periods. port_returns self.returns self.weights threshold np.percentile(port_returns, threshold_percentile) stress_mask port_returns threshold return self.returns[stress_mask].corr()组合层方法的工程与金融要点默认权重为等权1/nreturns weights即向量化的组合日收益率portfolio_volatility以协方差矩阵为核心w Σ w得到组合方差再开方年化——这体现了马科维茨组合理论风险取决于资产间相关性的核心结论marginal_risk_contribution计算每单位权重变化对组合波动的边际影响Σ·w / σ_pcomponent_risk再乘以权重得到各资产对总风险的贡献份额二者构成风险归因Risk Attribution的基础risk_parity_weights通过 SLSQP 求解风险平价Risk Parity权重让每项资产的权重×边际贡献即风险贡献相等目标函数为各资产风险贡献与均等目标之差的平方和约束为权重之和等于 1、单资产权重下限 1% 上限 100%初值取等权——这是桥水全天候策略的经典权重逻辑diversification_ratio用加权单资产波动 / 组合波动度量分散化程度数值越大分散化越好conditional_correlation只取组合收益处于最差threshold_percentile默认 10%分位以下的样本计算相关性矩阵用于回答 SKILL.md 最佳实践中相关性在压力期上升的担忧——这正是压力状态下相关性集中爆发的实证检验工具。模式三滚动风险指标 RollingRiskMetrics风险是时变的静态全样本指标会掩盖体制切换。RollingRiskMetrics用固定窗口滚动计算窗口默认 63约 3 个月。class RollingRiskMetrics: Rolling window risk calculations. def __init__(self, returns: pd.Series, window: int 63): Args: returns: Return series window: Rolling window size (default: 63 ~3 months) self.returns returns self.window window def rolling_volatility(self, annualized: bool True) - pd.Series: Rolling volatility. vol self.returns.rolling(self.window).std() if annualized: vol * np.sqrt(252) return vol def rolling_sharpe(self, rf_rate: float 0.02) - pd.Series: Rolling Sharpe ratio. rolling_return self.returns.rolling(self.window).mean() * 252 rolling_vol self.rolling_volatility() return (rolling_return - rf_rate) / rolling_vol def rolling_var(self, confidence: float 0.95) - pd.Series: Rolling historical VaR. return self.returns.rolling(self.window).apply( lambda x: -np.percentile(x, (1 - confidence) * 100), rawTrue ) def rolling_max_drawdown(self) - pd.Series: Rolling maximum drawdown. def max_dd(returns): cumulative (1 returns).cumprod() running_max cumulative.cummax() drawdowns (cumulative - running_max) / running_max return drawdowns.min() return self.returns.rolling(self.window).apply(max_dd, rawFalse) def rolling_beta(self, market_returns: pd.Series) - pd.Series: Rolling beta vs market. def calc_beta(window_data): port_ret window_data.iloc[:, 0] mkt_ret window_data.iloc[:, 1] cov np.cov(port_ret, mkt_ret) return cov[0, 1] / cov[1, 1] if cov[1, 1] ! 0 else 0 combined pd.concat([self.returns, market_returns], axis1) return combined.rolling(self.window).apply( lambda x: calc_beta(x.to_frame()), rawFalse ).iloc[:, 0] def volatility_regime( self, low_threshold: float 0.10, high_threshold: float 0.20 ) - pd.Series: Classify volatility regime. vol self.rolling_volatility() def classify(v): if v low_threshold: return low elif v high_threshold: return high else: return normal return vol.apply(classify)实现细节与用法除rolling_volatility使用 pandas 内置rolling().std()外其余指标都通过rolling().apply()传入自定义窗口函数因此可以复用模式一的算法逻辑如滚动历史 VaR、滚动最大回撤、滚动 Betavolatility_regime用年化滚动波动率把市场划分为low10%、normal10%–20%、high20%三档——这正是 SKILL.md 最佳实践中Rolling analysis – Risk changes over time的落地识别高波动体制后风控系统可以据此动态调整仓位限额该模式与 risk-manager 的监控相关性以避免集中度系统化止损职责直接衔接。模式四压力测试 StressTester压力测试回答极端情形下组合能亏多少。StressTester提供历史情景、假设情景与蒙特卡洛三种方式。class StressTester: Historical and hypothetical stress testing. # Historical crisis periods HISTORICAL_SCENARIOS { 2008_financial_crisis: (2008-09-01, 2009-03-31), 2020_covid_crash: (2020-02-19, 2020-03-23), 2022_rate_hikes: (2022-01-01, 2022-10-31), dot_com_bust: (2000-03-01, 2002-10-01), flash_crash_2010: (2010-05-06, 2010-05-06), } def __init__(self, returns: pd.Series, weights: pd.Series None): self.returns returns self.weights weights def historical_stress_test( self, scenario_name: str, historical_data: pd.DataFrame ) - Dict[str, float]: Test portfolio against historical crisis period. if scenario_name not in self.HISTORICAL_SCENARIOS: raise ValueError(fUnknown scenario: {scenario_name}) start, end self.HISTORICAL_SCENARIOS[scenario_name] # Get returns during crisis crisis_returns historical_data.loc[start:end] if self.weights is not None: port_returns (crisis_returns self.weights) else: port_returns crisis_returns total_return (1 port_returns).prod() - 1 max_dd self._calculate_max_dd(port_returns) worst_day port_returns.min() return { scenario: scenario_name, period: f{start} to {end}, total_return: total_return, max_drawdown: max_dd, worst_day: worst_day, volatility: port_returns.std() * np.sqrt(252) } def hypothetical_stress_test( self, shocks: Dict[str, float] ) - float: Test portfolio against hypothetical shocks. Args: shocks: Dict of {asset: shock_return} if self.weights is None: raise ValueError(Weights required for hypothetical stress test) total_impact 0 for asset, shock in shocks.items(): if asset in self.weights.index: total_impact self.weights[asset] * shock return total_impact def monte_carlo_stress( self, n_simulations: int 10000, horizon_days: int 21, vol_multiplier: float 2.0 ) - Dict[str, float]: Monte Carlo stress test with elevated volatility. mean self.returns.mean() vol self.returns.std() * vol_multiplier simulations np.random.normal( mean, vol, (n_simulations, horizon_days) ) total_returns (1 simulations).prod(axis1) - 1 return { expected_loss: -total_returns.mean(), var_95: -np.percentile(total_returns, 5), var_99: -np.percentile(total_returns, 1), worst_case: -total_returns.min(), prob_10pct_loss: (total_returns -0.10).mean() } def _calculate_max_dd(self, returns: pd.Series) - float: cumulative (1 returns).cumprod() running_max cumulative.cummax() drawdowns (cumulative - running_max) / running_max return drawdowns.min()三种压力测试方式解读历史情景测试内置 5 个标志性危机窗口2008 金融危机、2020 新冠疫情崩盘、2022 加息周期、互联网泡沫、2010 闪崩用真实危机区间的历史收益重放组合输出区间总收益、最大回撤、最差单日与波动率。传入的historical_data需按日期索引并覆盖危机区间假设情景测试手工指定每个资产的冲击收益率shocks {asset: shock_return}按权重加权求和得到组合冲击。适用于如果某资产单日跌 20%之类的自定义情景注意必须提供weights蒙特卡洛压力测试以vol_multiplier2.0放大历史波动率模拟 10000 条、21 天约一个交易月的路径输出期望损失、95%/99% VaR、最差情形与损失超过 10% 的概率。该方法的代码逻辑正是 risk-manager 中Use monte carlo simulations for stress testing要求的直接实现。快速参考日常用法details.md末尾给出了最小可运行示例# Daily usage metrics RiskMetrics(returns) print(fSharpe: {metrics.sharpe_ratio():.2f}) print(fMax DD: {metrics.max_drawdown():.2%}) print(fVaR 95%: {metrics.var_historical(0.95):.2%}) # Full summary summary metrics.summary() for metric, value in summary.items(): print(f{metric}: {value:.4f})只需一行metrics RiskMetrics(returns)即可获得日频风险看板需要深度指标时调用summary()一次性输出全部 14 项指标。更完整的组合层用法为port PortfolioRisk(returns_df, weights)→port.portfolio_volatility()、port.component_risk()、port.risk_parity_weights()动态监控用RollingRiskMetrics(returns, window63)极端情景用StressTester(returns, weights)。最佳实践Dos 与 DontsSKILL.md 在导航层给出了完整的最佳实践清单这也是风控工程的核心纪律Dos应该做Use multiple metrics— 没有任何单一指标能刻画全部风险应组合使用四类指标对应模式一的summary()Consider tail risk— VaR 不够必须用 CVaR对应cvar()的 Expected Shortfall 实现Rolling analysis— 风险随时间变化用滚动窗口对应模式三Stress test— 同时做历史与假设情景压力测试对应模式四的historical_stress_test与hypothetical_stress_testDocument assumptions— 明确记录分布假设、回看窗口等前提例如var_parametric的正态假设、window63的回看窗口、rf_rate0.02的无风险利率。Donts不要做Dont rely on VaR alone— VaR 低估尾部风险必须配合 CVaRDont assume normality— 收益率为肥尾分布正态假设var_parametric会低估极端损失应使用历史模拟或 Cornish-Fisher 修正Dont ignore correlation— 压力期相关性会上升用conditional_correlation检验Dont use short lookbacks— 窗口过短会错过体制切换默认 63 日窗口需结合实际Dont forget transaction costs— 交易成本影响已实现风险这在配套的 backtesting-frameworks 技能中有系统化处理该技能专门覆盖交易成本模型与回测偏差缓解。在仓库中的定位与获取方式risk-metrics-calculation技能位于 quantitative-trading 插件的skills/risk-metrics-calculation/目录下采用导航层 资源层的渐进式披露结构本文讲解所依据的完整代码全部来自其 references/details.md。获取该技能有三种方式安装整个插件Claude Code 市场在 docs/plugins.md 中quantitative-trading 被描述为 Algorithmic trading and risk management安装命令为/plugin install quantitative-trading之后插件内的 agents、commands、skills 才会按需载入上下文仅安装单一技能适用于任意 Agent 的 Agent Skills 安装器无需克隆仓库gh skill install wshobson/agents risk-metrics-calculation --agent claude-code npx skills add wshobson/agents --skill risk-metrics-calculation直接阅读源码本文引用的全部代码均可在 references/details.md 中查阅并复制。在插件生态内部本技能与 risk-manager组合保护与风险度量、quant-analyst策略回测后的风险分析两个 agent以及 backtesting-frameworks回测框架与交易成本建模共同构成完整的量化研究与风控链路回测产生收益序列 → 风险指标量化风险 → agent 输出风险报告与限额建议。小结本文完整继承了risk-metrics-calculation技能的导航层内容四类风险指标、五层时间维度、十条最佳实践纪律并展开其资源层的四个可运行实现模式RiskMetrics14 项核心指标 三种 VaR CVaR、PortfolioRisk协方差驱动的组合风险、风险归因与风险平价权重、RollingRiskMetrics63 日滚动窗口与波动率体制分类、StressTester历史/假设/蒙特卡洛三种压力测试。这套代码可直接用于组合风险度量、风险限额实施与风险监控系统的落地与仓库中quantitative-trading插件的 agent 协同后即可形成度量—监控—限额—压力测试的完整风控闭环。【免费下载链接】agentsMulti-harness agentic plugin marketplace for Claude Code, Codex, Cursor, OpenCode, GitHub Copilot, and Google Antigravity项目地址: https://gitcode.com/GitHub_Trending/agents24/agents创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表