回撤序列
峰-谷回撤序列 + 最大回撤。输入 returns 数组(也接受 prices)。标准业绩分析 primitive。Edge-first;连到多个 Price Factor 时按标的 fan out 为 by_symbol。
做什么(One-liner)
Layer-1 变换:消费收益率序列,输出运行回撤序列及其最小值(最大回撤)。max_drawdown = -0.23 表示 23% 的峰-谷损失。
输入
returns(array,必填)—— 收益率序列(也接受 prices)。
输出
drawdown—— 每个点的回撤,范围 (-1, 0]。max_drawdown—— 全序列最大回撤,范围 (-1, 0]。by_symbol—— 连多个 Price Factor 时的 per-ticker 映射。
怎么用
- 提供
returns数组。 - 查看
drawdown数组 +max_drawdown标量。
核心公式
cum_t = Π(1 + r_i) for i in 1..t (起始 1.0)
running_max_t = max(cum_1, ..., cum_t)
dd_t = (cum_t - running_max_t) / running_max_t ∈ (-1, 0]
max_drawdown = min(drawdown)假设与适用场景
假设:simple returns(非 log)+ compounding + 起始 1.0。
适用:backtest 绩效、CPPI、基金 fact-sheet;任意资产类别,任意频率,最少 2 个观测。
不适用:期望 returns 却传价格序列、log returns、n<2。
已知局限
- 路径依赖 —— 只反映所给窗口,而非历史峰值。
- 不说明恢复时间或回撤频率。
- 起始点 1.0(非实际资本)。
- log returns 会有 second-order 误差。
参考文献
Magdon-Ismail & Atiya (2004) + Chekhlov et al. (2005) 优化嵌入。
Golden Test
tests/golden/fixtures/tier1/drawdown_series/,1e-12 tolerance,2026-05-25 passing。参考:numpy 手工复现(cumprod + maximum.accumulate)。
Changelog
- 1.1.0 (2026-05-25) —— 提升为 Active 的 Layer-1 变换;并入已弃用 Layer-0
drawdown_series卡片的完整治理字段。 - 1.0.0 (2026-05-23) —— 初始 edge-first Layer-1 Draft 卡片。

