← 返回编程题库
coding-rolling-vol-stable-window中等免费版2000ms未尝试

滚动样本波动率滑窗下的最长稳定波动率区间

Longest Stable-Volatility Regime via Rolling Sample-Stddev Sliding Window

开始编码

实现 solution(returns: list[float], window: int, lo: float, hi: float) -> int。给定一段逐期收益序列 returns、固定窗口长度 window,以及两端均为闭的样本波动率上下界 lohi,返回**样本标准差全程位于闭区间 [lo, hi] 内的、最长一段连续长度为 window 的子段(按右端点编号计数)的长度**。这里的"长度"计的是窗口个数而非原始观测数——一共有 len(returns) - window + 1 个重叠窗口,按右端点编号,答案是滚动 sigma 自始至终未离开 [lo, hi] 的最长一段连续窗口编号。

例:solution([0.01, -0.005, 0.012, 0.008, -0.05, 0.04, -0.014, 0.018, 0.005, -0.003], 3, 0.005, 0.02) 返回 2。八个长度为 3 的样本标准差约为 [0.0093, 0.0089, 0.0347, 0.0456, 0.0453, 0.0272, 0.0161, 0.0106]。前两个和后两个落入 [0.005, 0.02];中段四个跳出。两段等长合格段长度均为 2,故答案为 2

样本标准差使用无偏分母 window - 1,因此 window 为 1 时直接判为非法;returns 为空、window 大于 len(returns),或 lo > hi,结果同样为 0。当 len(returns) < window 时,不存在完整窗口,无论区间如何答案都是 0

函数骨架见 stubs/stub.py

实践背景

波动率区间检测器是执行台监控的常规工具:策略原本针对低波动率市态调参,一旦真实波动率离开其设计区间就会失灵,交易员需要知道某个区间究竟稳定持续了多久才敢继续相信信号。统计滚动波动率估计连续位于一段目标走廊内(走廊本身可由压力测试政策或历史条件波动率模型给定)的最长持续长度,相当于不依赖具体模型的"稳定性长度"指标,可直接转化为资金部署的信心。区间越窄合格段越短,算法在分钟级实盘上必须维持 O(N)

约束条件

  • 0 <= len(returns) <= 5000;每个元素为有限浮点数,绝对值不超过 100
  • window 为整数;若 window < 2 或 window > len(returns),则不存在合法窗口,返回 0
  • lo 与 hi 为有限浮点数,-1 <= lo, hi <= 1000;若 lo > hi,则区间为空,返回 0
  • 区间 [lo, hi] 两端均为闭——sigma 恰好等于 lo 或 hi 的窗口仍计入合格
  • 输出为合格连续窗口的整数个数,使用精确比对(不引入浮点容差)

样例

Case 1 · statement-example: two equal-length stable runs around a vol spike

输入: [[0.01,-0.005,0.012,0.008,-0.05,0.04,-0.014,0.018,0.005,-0.003],3,0.005,0.02]

期望: 2

八个长度为 3 的滑动窗口中,前两个 sigma 约为 0.0093 与 0.0089,落入 [0.005, 0.02],构成长度 2 的连续合格段;中段 sigma 跳到 0.034 以上跌出区间;末尾两个窗口 sigma 回到 0.016 与 0.0106,又构成长度 2 的连续段;最长合格连续段为 2。

Case 2 · statement-example: flat returns produce zero sigma, pass when lo=0

输入: [[0,0,0,0,0,0,0,0,0,0],4,0,0.001]

期望: 7

序列恒为 0,所有长度为 4 的窗口 sigma 均为 0,全部落入 [0, 0.001],共 7 个连续合格窗口。

Case 3 · statement-example: window exceeds length, no valid window exists

输入: [[0.01,-0.01,0.02],5,0,1]

期望: 0

窗口长度 5 大于序列长度 3,没有任何完整窗口,返回 0。

最近提交

还没有提交记录。

编码区

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

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

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

Case 1 · statement-example: two equal-length stable runs around a vol spike

输入: [[0.01,-0.005,0.012,0.008,-0.05,0.04,-0.014,0.018,0.005,-0.003],3,0.005,0.02]

期望: 2

八个长度为 3 的滑动窗口中,前两个 sigma 约为 0.0093 与 0.0089,落入 [0.005, 0.02],构成长度 2 的连续合格段;中段 sigma 跳到 0.034 以上跌出区间;末尾两个窗口 sigma 回到 0.016 与 0.0106,又构成长度 2 的连续段;最长合格连续段为 2。

Case 2 · statement-example: flat returns produce zero sigma, pass when lo=0

输入: [[0,0,0,0,0,0,0,0,0,0],4,0,0.001]

期望: 7

序列恒为 0,所有长度为 4 的窗口 sigma 均为 0,全部落入 [0, 0.001],共 7 个连续合格窗口。

Case 3 · statement-example: window exceeds length, no valid window exists

输入: [[0.01,-0.01,0.02],5,0,1]

期望: 0

窗口长度 5 大于序列长度 3,没有任何完整窗口,返回 0。