Ulcer Index: Depth and Duration Together
The ulcer index is the root mean square of an equity curve's drawdown series, so it rises with both the depth of declines and the time spent in them. A maximum drawdown describes one moment; the ulcer index describes every bar.
How it works
The ulcer index answers a question a maximum cannot. Two accounts can share an identical worst decline and be completely different to live with, and this is the figure that separates them.
Compute the drawdown at every bar, square each one, average the squares, take the root. Squaring makes deep readings count disproportionately; averaging across every bar makes duration count at all.
A maximum drawdown is a single observation. It reports the worst moment and says nothing about whether the account spent a week below its peak or a year.
What the number looks like
On this site’s shared 576-bar history, holding the series itself, the ulcer index is 1.67% against a maximum drawdown of 3.76%.
The ratio between them is 0.44, and the ratio is the informative part. A curve that spends most of its time near its peak and dips once produces a low ratio; one that spends most of its time underwater produces a high one. 0.44 alongside 95% of bars below a prior peak describes a persistent shallow decline rather than a single event.
Duration enters through the averaging. Every bar spent below a peak contributes a positive number, so a long shallow decline can score above a brief violent one — which is the behaviour the measure was built for.
That makes it a genuine comparison tool. Given two methods with the same maximum drawdown and the same return, the one with the lower ulcer index recovered faster and spent less time underwater — and that difference is invisible in every standard performance table.
In practice
Costs raise it in a way they may not raise a maximum. Fees slow every recovery, which adds bars underwater without necessarily deepening the worst point — so the ulcer index catches an effect the headline figure misses entirely.
It reads the account, not the chart. Volume, price and structure are all irrelevant to it — the input is an equity curve and nothing else.
Comparisons need the same bar frequency. A position-trading method holds through declines that a scalper never sees, so the two produce different figures for reasons that have nothing to do with quality.
A gap loss hits both components at once — it deepens the decline and lengthens the climb back, which is why single events show up so strongly in this measure.
No stop touches it. Stops cap individual trades; this measures what a run of them does to the curve, and the levers that move it are position size and trade frequency.
Frequency feeds it directly. At 2% of a median bar’s range per round trip on this history, an active method pays a steady toll that shows up as extra time below every peak.
Using it alongside a return figure
The original purpose was a ratio: excess return divided by the ulcer index, giving a reward-per-unit-of- pain figure in the same spirit as a Sharpe ratio but penalising downside persistence rather than variability in both directions.
That distinction matters because upside variability is not a problem. A method that occasionally jumps higher is penalised by any measure based on deviation and not by this one. If you are comparing two methods with similar returns, the ulcer index is a better tiebreaker than the maximum drawdown — it reflects what holding each one actually felt like, which is the thing that decides whether either gets stuck with.
What the ulcer index is not
It is not a maximum drawdown. It uses every bar, not the worst one.
It is not a volatility measure. Upside movement does not enter it.
It is not comparable across bar frequencies. Same interval or nothing.
And it is not a forecast. It describes a curve that already exists.
When it fails
In a range the index rises with nothing in the trade log to explain it. Small losses and costs keep the curve just below its peak for months, which is precisely the pattern this measure is designed to catch and the one a maximum drawdown reports as unremarkable.
The second failure is comparing across periods of different length. A longer sample includes more declines and usually scores higher, so the periods have to match.
A third is treating a low reading as safety. It is a description of the past, on the sample it was computed from.
A fourth is computing it on closed trades. Open positions are where the time underwater actually happens.
And a fifth is using it alone. It says nothing about return, which is the other half of every comparison.
The original data
On this site’s shared 576-bar history, holding the series itself, the ulcer index is 1.67% against a
maximum drawdown of 3.76% — a ratio of 0.44. 95% of bars sat below a prior peak, the longest stretch
underwater ran 73 bars, and the median drawdown reading was 1.36%. The figures are in
research/series-measurements.json, produced by site/measure_series.py.
A ratio of 0.44 on a series holding 95% of its bars below a prior peak is what “always slightly underwater” looks like as a number. The worst moment was barely twice the typical one, which describes a curve that never falls far and never quite gets clear either. Compute the ratio as well as the index: the index alone tells you how much pain there was, and the ratio tells you whether it arrived all at once or never went away.
Related
Drawdown is the underlying measurement this summarises. Risk management is where the response to a rising reading belongs. And Sharpe ratio is the deviation-based alternative and what it misses.
I started tracking this after a year where my maximum drawdown looked fine and the year felt awful. The maximum was a single bad fortnight; the ulcer figure caught the eight months of grinding sideways that actually did the damage, and it matched my experience far better than any other number I had.
— Michael Whitman
This page is educational, not financial advice. Test every idea on your own charts before risking money.