Reading the results
Guide
How to read the results, screen by screen.
This guide is in three parts: how to set up a backtest with the Backtest form, how to read the long results page it returns — metrics, charts, a heatmap, a signal, a trade log — and how to read the live future signal. In plain terms, top to bottom.
Using the backtest form
The home page (Backtest) is a form. Each control sets one input to the dual-momentum engine. The labels are short, so a few describe their effect less than fully — here is what each one actually does.
- Risk asset universe The basket the strategy rotates inside, picked from a menu. Choosing a universe also sets sensible defaults for the controls below. The Composite options (the 70/30 and its replicas) are special: they run two sleeves at once with a fixed internal configuration, so the six controls below are ignored for them. The single-universe options (Stocks, Commodities, Bonds, Crypto) leave every control open to edit.
- Assets to hold How many of the basket to hold at once, equally weighted — the top 1 to 5 by momentum. Hold 1 and the strategy is always in a single asset; hold 3 and it spreads across the three strongest.
- Single absolute momentum This is the in/out switch, and its effect is easy to misread from the field name — read the option text, not the title. Yes takes the defensive decision on one fixed barometer (the Absolute momentum asset below): if that barometer is trending up the whole basket is held, otherwise the whole basket moves to the out-of-market asset. No (Antonacci's GEM) takes the decision on the selected top asset itself: you hold it only when its own momentum is positive, and the fixed barometer is ignored.
- Absolute momentum asset The fixed barometer used only in Yes mode above. In No mode it has no effect, and the field is hidden.
- Out-of-market asset What the strategy holds when the absolute-momentum filter turns negative — the defensive position. The default is cash (BIL); gold and bonds are also offered. Which defensive asset is the better choice is a question of substance, not mechanics — see How it works and Why these choices for that.
- Benchmark comparison asset A point of confusion worth clearing up: this is the line drawn for visual comparison only — the Buy & Hold reference overlaid on the charts and tables. It is not the in/out threshold. The threshold the strategy measures momentum against is cash, fixed behind the scenes. Changing this field moves the comparison line; it does not change a single trade.
- Equity chart scale Cosmetic only — a linear or logarithmic Y axis on the equity curve. It changes nothing in the calculation.
- Lookback preset Which momentum windows feed the score — 1/3/6, 1/2/3 or 3/6/12 months — blended with fixed 33/33/34 weights. Shorter windows react faster and rotate more; longer windows are steadier.
What the defaults are. Those per-universe defaults are not arbitrary: each universe pre-fills the controls with the configuration best suited to its asset class — the momentum barometer, the benchmark line, the defensive asset and the lookback window. They are starting points, all still editable. Here is the full map.
| Universe | Risk basket | Absolute-momentum filter | Benchmark (B&H line) | Out-of-market | Lookback |
|---|---|---|---|---|---|
| US Style | IWF / IWD / IWB | Yes · SPY | SPY | cash (BIL) | 1 / 3 / 6 |
| US Style — EU | IWF / IWD | Yes · SPY | SPY | cash | 1 / 3 / 6 |
| Top US Indexes | QQQ / IWM / SPY | Yes · QQQ | SPY | cash | 1 / 3 / 6 |
| Geo Mix | SPY / IEFA / IEMG | Yes · SPY | SPY | cash | 1 / 3 / 6 |
| Commodity Sectors | GLD / DBE / DBA / DBB | No (GEM) | DBC | cash | 1 / 3 / 6 |
| Bond Geo Type | TLT / LQD / EMB | No (GEM) | AGG | gold (GLD) | 1 / 3 / 6 |
| Bond Credit Quality | TLT / LQD / HYG | No (GEM) | AGG | gold | 1 / 3 / 6 |
| Bitcoin | BTC | No (GEM) | BTC | cash | 1 / 2 / 3 |
| Bitcoin / Ethereum | BTC / ETH | Yes · BTC | BTC | cash | 1 / 2 / 3 |
Two patterns stand out. The barometer and benchmark are always a broad index of the class itself — SPY for US equity, DBC for commodities, AGG for bonds, BTC for crypto — so momentum is judged against a fair in-class reference, not an unrelated yardstick. And the defensive asset is cash everywhere except bonds, which step aside into gold: the falling-rate stress that hurts bonds tends to lift gold, so a cross-class refuge is the better parachute there. The lookback is the standard 1/3/6 for every class except crypto (1/2/3, see below). Why these particular choices win is a question of substance — see How it works and Why these choices.
Single-universe vs composite results. A single universe returns one results page for one rotating basket. A composite (the 70/30) returns a page that adds a strategy summary listing its two sleeves and their fixed 70/30 weights, and shows a current signal for each sleeve; its equity curve is the blended portfolio against the benchmark. Everything below applies to both — the composite simply stacks two of the same machinery.
Crypto — a backtest-only group. The picker also lists two crypto universes, Bitcoin and a Bitcoin/Ethereum rotation, kept as an exploratory testbed. They run the same dual momentum on a much shorter 1-2-3 lookback (crypto turns trend too fast for the standard 1-3-6) and are never traded — crypto has no execution path here. Their future signal still computes a live decision — the crypto market is 24/7, so it always reads "market open" — but it is decision-support only. See the How it works crypto section for what the backtests show, and why that edge is in-sample.
Performance metrics
The headline numbers, computed over the whole tested window. They summarise growth and risk in a handful of figures before any chart.
- CAGR Compound Annual Growth Rate — the annualised, compounded growth rate over the full period. It measures how fast the portfolio grew, not how smoothly: two strategies with the same CAGR can have very different rides.
- Max Drawdown The worst peak-to-trough loss on record. This is the nerve test: how much you would have been down had you bought at the worst possible moment before a fall.
- CAGR / |Max Drawdown| The return-per-risk ratio used here as a Sharpe proxy. The higher it is, the more return the strategy generates per unit of worst loss endured. There is no stable risk-free rate across the 2016–2026 window, which is why this proxy is used rather than a textbook Sharpe.
- Benchmark Buy & Hold on the first risk asset of the universe (e.g. IWF for us-style), not necessarily SPY. It measures what the monthly rotation adds versus simply holding the asset and doing nothing.
A note on granularity: every drawdown on this site is measured on month-end closes — the strategy's native rhythm. Marked daily, drawdowns are mechanically deeper, and the gap widens with the speed of the crash: a fast crash travels through a monthly system before the signal can react, while a slow grind shows little difference. Read the figures as floors, not ceilings, of the pain involved.
Up / Down Capture
Two ratios that split the strategy's behaviour into the months when the benchmark rose and the months when it fell. Together they describe the shape of the returns, not just their size.
- Up Capture The fraction of the benchmark's gains captured while the benchmark is rising. Above 100% means the strategy does better than the benchmark in up-markets.
- Down Capture The fraction of the benchmark's losses suffered while the benchmark is falling. Below 100% means the strategy loses less in down-markets.
- The ideal profile High Up Capture and low Down Capture. Dual momentum typically aims for a Down Capture well below 100 — the absolute-momentum filter cuts prolonged declines — sometimes at the cost of a moderate Up Capture.
Equity curve
The value of a $10,000 portfolio reinvested from the start of the period, plotted month by month. Two series are drawn: the dual-momentum strategy (solid line) and the reference Buy & Hold (thin line). The scale toggle changes what is easy to read.
- Linear scale Absolute moves are comparable — a $1,000 gain always takes up the same height. Useful for seeing drawdown episodes in dollar terms.
- Logarithmic scale Percentages are comparable — a 10% gain always takes up the same height. More honest over long periods, where compounding distorts the linear scale.
Annual & Active Returns
The same returns seen calendar year by calendar year, first in absolute terms and then as the gap to the benchmark.
- Annual Returns Calendar-year return (Jan–Dec) of the strategy and the Buy & Hold, side by side. The current year is marked with an asterisk (it is still incomplete).
- Active Returns The yearly difference, strategy minus Buy & Hold. A positive bar means the strategy outperformed that year; a negative bar means it underperformed. Summed across the period, the active bars give the cumulative alpha.
Monthly Returns heatmap
A grid of 12 columns (months) by N rows (years). Each cell is the strategy's return for that month. Colour encodes sign — green for positive, red for negative — and intensity encodes magnitude.
The value is in the clusters. A dark-red column under September or October across several years hints at a seasonal pattern; a red row is a bad year overall; an isolated, intensely red cell is a one-off shock. The heatmap turns a flat list of numbers into a texture you can scan at a glance.
Drawdowns
Where the metrics give a single worst-loss figure, this section shows the full history of losses and the ten deepest episodes.
- Underwater curve For every month, the decline from the most recent peak. Zero means a fresh all-time high. A trough at −20% means the strategy was down 20% from its peak at that moment. The longer the curve stays below zero, the slower the recovery.
- Top 10 table The ten worst drawdown episodes. The key columns: Peak (date of the high before the fall), Trough (date of the low point), Recovery (date the portfolio returned to the peak — blank if not yet recovered), Depth (the episode's maximum loss), and Length (total peak → recovery duration in months).
Rolling Returns
An annualised return computed over a sliding window — 1, 3 or 5 years — moved month by month across the history. It is more honest than the single headline CAGR: it shows how many sub-periods were profitable, not just the final outcome.
A rolling 3-year return that is always positive means the strategy never lost money over any three-year horizon, whatever the entry point inside the tested window. The summary table (min / median / max) gives the full distribution of those rolling returns, so you can see the worst case as well as the typical one.
Current Signal & Trades
The bottom of the page is the strategy's present state and the rotations that produced the curve above.
- Current Signal The portfolio's state at the last computed month. For each risk asset, a momentum score (a weighted blend of 1-, 3- and 6-month returns). The asset with the highest score is selected — unless its absolute score is negative, in which case the strategy turns defensive ("Out of Market").
- Out of Market The strategy holds the defensive asset instead of a risk asset — for the production 70/30, cash (BIL) on both sleeves, equity and commodity alike. This is the absolute-momentum filter in action.
- Trades Each row is a monthly rotation. Columns: date, asset sold, asset bought, and the return of the incoming position's first month. The frequency of rotations signals the real friction cost (transaction fees) to watch in live trading.
Reading the future signal
The Compute Future signal button — and the Future signal page — answers a different question from the backtest: not "how did this strategy do," but "what would it hold right now?" It runs the same engine on live prices, treating the current, unfinished month as a provisional final bar. It is read-only — it never places an order.
- Market state & fetched-at Whether the market is open, pre-market, after-hours or closed, and the timestamp of the prices used. They tell you how fresh and how settled the snapshot is.
- The signal The current momentum score for each asset, the decision (a risk asset, or Out of Market), and the asset that would be selected. This is provisional: the month is not closed, so the score — and the decision — can still change before the rotation date.
- Performance banner — held, not signalled The figures at the top (MTD, YTD) are the performance of what the strategy currently holds — the position from the last completed rotation — not the provisional signal shown below. The two can differ, and conflating them is the easy mistake: the banner is where you are, the signal is where you might go next.
- Snapshots used The live close used for each ticker, with its timestamp and source (and, for the life-insurance replicas, the matching contract fund and ISIN). This is the raw input the signal is computed from, shown so the number is auditable.
- Compute my orders Below the signal, a small calculator turns the target allocation into concrete buy / sell orders for accounts you trade by hand. You enter the amount you currently hold per line — it manipulates plain numbers, in any currency, and uses no live price — and it returns, per ticker, the order needed to reach the target. The total to rebalance is the sum of your entries (cash you want to put to work is just another line); for each ticker the target is weight × total and the order is target − held (positive = buy, negative = sell). A ticker you hold but the target dropped is sold to zero, and the defensive cash leg (BIL/SHY/GLD) is treated like any other line. It is client-side and never places an order — and it is hidden on the life-insurance replicas, where rebalancing happens inside the contract.
Treat it as a preview, not an instruction. It is a state computed from current data — useful for seeing the strategy lean before month-end — but it is not investment advice, and it is not final until the bar closes.
Every figure on the results page is computed on a single historical window (2016–2026). It describes how the strategy behaved in sample — not a guarantee that the same numbers hold across future market regimes.