Ulcer Index 的计算只有三步,但它的价值不在公式本身,而在它把"跌了多久"也算进了风险里。最大回撤只记录最惨的那一个点,一个策略从高点跌 30% 后立刻拉回,和跌 30% 后趴了半年才回来,最大回撤显示的都是 30%。Ulcer Index 会把后者算得更高,因为每一个低于前高的交易日都被计入,持续时间越长,累积的惩罚越大。跨策略比较时,这个差异直接决定了你选出来的是"跌得浅"的策略,还是"跌得浅且恢复快"的策略。
公式:先算回撤,再平方平均,最后开根
以周期长度 N(常用 14)为例,对每个周期 i:
第一步,算百分比回撤。 用当期收盘价减去过去 N 个周期内的最高收盘价,再除以那个最高价,乘以 100。如果当期就是最高价,回撤为 0;如果低于前高,回撤是负数。
第二步,平方求和再平均。 把 N 个周期的回撤值各自平方,求和,除以 N。平方的作用是让深回撤的权重远大于浅回撤。
第三步,开根号。 对平均值取平方根,得到的就是 Ulcer Index。
用一句话概括:Ulcer Index 是回撤深度的均方根。它和标准差的计算形式相似,区别在于标准差用的是收益率偏离均值的程度,Ulcer Index 用的是价格偏离前高的程度,且只计算向下的偏离。
参数选择:14 是默认值,但比较时必须统一
StockCharts 和多数技术分析平台默认用 14 个周期。这个数字没有魔力,只是和 RSI 等指标的默认窗口保持一致,方便放在同一张图上。
真正影响结果的是周期长度和价格频率的一致性。如果你用日线算 BTC 的 Ulcer Index,用 4 小时线算 ETH 的 Ulcer Index,然后放在一起比大小,这个比较没有意义。时间尺度不同,回撤的持续时间和深度都会被扭曲。跨策略比较时,用相同的 N、相同的时间框架、相同的价格类型(收盘价或最高最低价的处理方式要一致)。
跨策略比较:Ulcer Index 比最大回撤多捕捉了什么
假设有两个策略,回测期都是一年,最大回撤都是 25%。
策略 A:在第 3 个月跌到 -25%,第 4 个月就收复前高,之后一路向上。 策略 B:在第 2 个月跌到 -25%,然后一直在前高下方震荡,直到第 11 个月才回去。
最大回撤给这两个策略打的分一模一样。Ulcer Index 会显著区分它们:策略 B 在 9 个多月里每一天都有回撤值被计入平方和,策略 A 只有一个月左右。结果就是策略 B 的 Ulcer Index 远高于策略 A。
这个差异在实际决策中的含义是:策略 B 占用了你更长时间的资金和注意力。钱被套着不能动,或者你需要在长达数月的时间里持续承受浮亏的心理压力。Ulcer Index 把这个"时间成本"量化了。R 语言的文档也明确指出,这个方法"对需要时间恢复前高的管理者施加惩罚"。
如果你要更精细地比较收益和回撤的关系,可以用 Martin Ratio(UPI):用策略收益减去无风险收益,再除以 Ulcer Index。它和夏普比率的区别在于,分母用的是 Ulcer Index 而不是标准差。标准差把上涨的波动也当作风险,Ulcer Index 只惩罚下跌和回撤的持续时间。对于趋势跟踪或只做多的策略,这个分母更贴近你实际感受到的风险。
用 Ulcer Index 时容易犯的错
把它当择时信号。 Ulcer Index 不产生买卖点。它衡量的是"持有这个资产/策略有多难受",不是"什么时候该进场或出场"。读到一个高的 Ulcer Index,只说明过去一段时间回撤深或持续久,不说明接下来会反弹还是继续跌。
跨资产直接比绝对值而不看背景。 一个高波动小市值币的 Ulcer Index 天然比 BTC 高,这不代表它"更危险"到不能碰,只代表它的回撤特征更剧烈。如果你比较的是不同资产类别,需要意识到波动率基准的差异。如果你比较的是同一类资产下的几个策略,Ulcer Index 的相对排序才是有意义的。
忽略计算窗口对结果的影响。 用 14 周期算出来的 Ulcer Index 和用 50 周期算出来的数值不可直接比较。窗口越长,纳入的历史回撤越多,数值通常越高。跨策略比较时,先确认你用的是同一个 N。
完成标准
不是"算出了一个数字",而是:在相同周期长度和价格频率下,你能列出几个策略的 Ulcer Index,并且知道排序差异是因为回撤更深、回撤更久,还是两者都有。 如果你只需要知道"最坏的情况有多坏",最大回撤够用。如果你关心"钱被套住的时间有多长",或者你在比较两个最大回撤相近但恢复速度不同的策略,Ulcer Index 提供的信息是最大回撤没有的。先算一遍你手里策略的 Ulcer In dex,和最大回撤放在一起看,两者差距越大,说明那个策略的"难受"主要来自磨而不是跌。
参考资料
- StockCharts ChartSchool·Ulcer Index,页面发布或更新日期:2024-08-12;核查日期:2026-10-18。
- Trading Technologies·Ulcer Index,页面未标明更新日期;核查日期:2026-10-18。
- R Project·calculate the Ulcer Index (JFE),页面未标明更新日期;核查日期:2026-10-18。
- GitHub·Learn-Quant: drawdown_analysis.py,页面发布或更新日期:2026-05-10;核查日期:2026-10-18。
- R Project·calculate the Ulcer Index (PerformanceAnalytics),页面未标明更新日期;核查日期:2026-10-18。
- Bitget·Измеритель риска на крипторынке: чем полезен Ulcer Index,页面发布或更新日期:2026-06-28;核查日期:2026-10-18。
- TradingView·Martin Ratio Asset Screener,页面发布或更新日期:2026-08-26;核查日期:2026-10-18。



