← 返回编程题库
coding-multi-horizon-gaussian-var-scaling中等免费版2000ms未尝试

多期高斯 VaR 缩放

Multi-Horizon Gaussian VaR Scaling

开始编码

风控团队从台账日 PnL 分布算出单日 VaR,但同时也要把 VaR 缩放到多期口径(5 日、10 日、年度)以满足资本计提和限额监控。请实现 solution(one_period_var: float, one_period_mu: float, horizons: list[int]) -> list[float]。在「单期收益独立同分布的高斯」假设下——单期收益服从均值 mu、标准差 sigma 的正态分布——T 期 PnL 的均值为 T*mu、标准差为 sqrt(T)*sigma,因此同置信度 alpha 下 T 期 VaR 是 VaR_T = -T*mu + sqrt(T)*z_alpha*sigma,按正值损失记录。这里 alpha 隐含在 one_period_var 的量级中,并不显式作为输入;从单期恒等式 one_period_var = -one_period_mu + z_alpha*sigma 可以反解出 z_alpha*sigma = one_period_var + one_period_mu

把这个反解结果代回 T 期公式,得到 VaR_T = -T*one_period_mu + sqrt(T) * (one_period_var + one_period_mu)。对 horizons 中的每个 T 顺序计算并按输入顺序返回 VaR_T。算法就是一次线性扫描,复杂度 O(H),其中 H = len(horizons)。

举例:solution(0.025, 0.001, [1, 5, 10]) 应返回 [0.025, 0.05313776..., 0.07221921...]。T=1 时公式退化为 -1*0.001 + 1*(0.025 + 0.001) = 0.025,正是「T=1 不变量」。T=10 时 -10*0.001 + sqrt(10)*0.026 = -0.01 + 3.162... * 0.026 ≈ 0.0722。注意 0.001 的正漂移让 10 日 VaR 比教科书式的 sqrt(10) * 0.025 ≈ 0.0791 略小——10 日预期盈利 10*0.001 = 0.01 抵消了一部分波动驱动的尾部亏损。

三个常见坑要盯紧。(a) 漂移项方向:T 的线性系数是 -T*mu,不是 +T*mu。写反符号后正漂移情形下 VaR 反而比 sqrt-T 增长更快,与现实完全相反。(b) sigma 的反解:从 one_period_var = -one_period_mu + z_alpha*sigma 反解得到 z_alpha*sigma = one_period_var + one_period_mu。若误写成 one_period_var - one_period_mu,结果完全跑偏。(c) 符号约定:one_period_var 与输出都是金融惯例下的正值损失;不要把 VaR 当成带符号收益使用。但输出仍是带符号浮点——当正漂移很大、T 很长时 VaR_T 可能为负数(漂移压过波动尾部),不要在 0 处截断,按计算值原样返回。

约束条件

  • 0 <= len(horizons) <= 100;每个期限 T 满足 1 <= T <= 252。
  • 0.0 <= one_period_var <= 1.0(单期 VaR 以正损失数表示,仓位的小数比例)。
  • -0.5 <= one_period_mu <= 0.5(单期漂移,带符号,与 VaR 同单位)。
  • VaR 符号沿用金融惯例:正数表示「该置信度下的预期亏损」。输出每一项都是带符号浮点;当某个长期 T 的输出为负,说明在该置信度下漂移已经盖过波动驱动的尾部。
  • 输出长度等于 len(horizons);horizons 为空则返回空列表 `[]`。
  • 浮点容忍:rel_tol=1e-9,abs_tol=1e-9。

样例

Case 1 · statement-example: T=1 invariant

输入: [0.025,0.001,[1]]

期望: [0.025]

T=1 时输出应等于 one_period_var:-1*0.001 + sqrt(1)*(0.025+0.001) = -0.001 + 0.026 = 0.025

Case 2 · statement-example: drift adjusts sqrt-T scaling

输入: [0.025,0.001,[1,5,10]]

期望: [0.025,0.05313776741499454,0.07221921916437787]

正漂移让长期 VaR 增长慢于 sqrt(T):T=10 时为 -10*0.001 + sqrt(10)*0.026 ≈ 0.0722

Case 3 · statement-example: mu=0 collapses to sqrt-T

输入: [0.04,0,[1,4,9,16,25]]

期望: [0.04,0.08,0.12,0.16,0.2]

mu=0 时退化为 sqrt(T) 缩放:依次 0.04、0.08、0.12、0.16、0.20

最近提交

还没有提交记录。

编码区

实现 solution(...)。本地运行当前支持 Python 可见样例;服务端提交会运行可见样例和隐藏测试。

加载编辑器...
计时0:00

默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。

Case 1 · statement-example: T=1 invariant

输入: [0.025,0.001,[1]]

期望: [0.025]

T=1 时输出应等于 one_period_var:-1*0.001 + sqrt(1)*(0.025+0.001) = -0.001 + 0.026 = 0.025

Case 2 · statement-example: drift adjusts sqrt-T scaling

输入: [0.025,0.001,[1,5,10]]

期望: [0.025,0.05313776741499454,0.07221921916437787]

正漂移让长期 VaR 增长慢于 sqrt(T):T=10 时为 -10*0.001 + sqrt(10)*0.026 ≈ 0.0722

Case 3 · statement-example: mu=0 collapses to sqrt-T

输入: [0.04,0,[1,4,9,16,25]]

期望: [0.04,0.08,0.12,0.16,0.2]

mu=0 时退化为 sqrt(T) 缩放:依次 0.04、0.08、0.12、0.16、0.20