滚动样本波动率滑窗下的最长稳定波动率区间
Longest Stable-Volatility Regime via Rolling Sample-Stddev Sliding Window
开始编码实现 solution(returns: list[float], window: int, lo: float, hi: float) -> int。给定一段逐期收益序列 returns、固定窗口长度 window,以及两端均为闭的样本波动率上下界 lo 与 hi,返回**样本标准差全程位于闭区间 [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 可见样例;服务端提交会运行可见样例和隐藏测试。
默认展示公开样例。点击「运行样例」后会在这里显示实际输出;点击「提交评测」会进入隐藏测试。
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。