Trying to Kill It

Signal research for alpha · Page 4 of 6

Trying to Kill It

A signal that survived page 3 has earned an attack, not a launch. Check the data for lies, count how hard you searched, test on data you never touched, and see whether it holds up everywhere the story says it should.

  1. Page 1Factor models
  2. Page 2Idea to signal
  3. Page 3Does it predict?
  4. Page 4 · hereTrying to kill it
  5. Page 5Luck or skill
  6. Page 6Risk and portfolio
Running signal residual momentum Simulated data, with illustrative figures where marked. Hover the dotted words for definitions.
Keep scrolling

The data

The two classic lies

Before any statistics, check that the backtest only used what you could have known, about stocks you could have owned.

Three dates for every number

A number has the date it describes, the date it was published, and the date it reached your system. A quarter ends in March, the company reports in May, the vendor loads it the next morning.

A backtest may only trade after the last of the three. Using any earlier date is look-ahead.

The same-close trap

The most common version is quieter. A signal built from today's closing price can't also trade at today's close, because the price wasn't final until the market shut.

For fast signals, moving execution one day later can cut the Sharpe by more than half. Residual momentum skips a month, so it's mostly protected. Still check.

Survivorship: owning only the winners

Build a universe from today's stock list and you've quietly dropped every company that went bankrupt or got delisted.

In this simulated universe of 300 stocks, about a quarter disappear over ten years. The survivors average several points a year more than the stocks you could actually have bought.

The bias can cut either way

For a long-only strategy, survivorship flatters returns. For momentum, the missing stocks are often losers that would have been profitable shorts, so the bias can also hide performance.

Either way, the backtest describes a market that never existed.

Interview checkUse point-in-time index membership, keep delisted stocks, and include their delisting returns. Asking "where did the dead companies go?" is a strong answer to "what's wrong with this backtest?"
One quarterly number · when could you trade on it?
Look-ahead zone Tradable
Mar 31Quarter ends
May 8Company reports
May 9Data in your system
The usual culprits
Fundamentals keyed to fiscal period end, restated figures loaded over the originals, index membership as of today, and prices adjusted with splits that hadn't happened yet.
A fast daily signal · same backtest, two execution times, illustrative
Trade at today's closeuses the price that made the signal
2.1
Trade at tomorrow's closeone day later
0.9
Annualized Sharpe ratio. The gap is the return of the very price move the signal was built from. You could never have captured it.
signalt uses closet → earliest trade at closet+1
300 simulated stocks · 10 years · average annual return
Survivors onlytoday's stock list
0%
Everything tradableincluding delisted stocks
0%
Delisted
0
of 300 stocks
Bias
0
pts a year
Delisting return
−30%
final month, assumed

The holdout

Test on data you never touched

In-sample performance shows how well you fit. Out-of-sample performance is the only evidence of how well you'll do.

The simple holdout

Lock away the last few years before you start. Do all research on the rest, then test on the holdout exactly once.

Look at it twice and it becomes training data. One holdout, one shot.

Walk forward

Fit on everything up to a date, test on the next year, roll forward, repeat. Every test year uses only the past.

This is how the strategy would really have run, refit as data arrived.

Ordinary k-fold leaks

Standard cross-validation trains on data from both before and after the test fold. Financial data is serially dependent, so the model learns from the future around the test period.

Residual momentum's 12-month formation window makes it worse: training rows just after the test fold are built from test-fold returns.

Purge and embargo

Purge training rows whose windows overlap the test fold. Add an embargo, a gap after the fold, so serial correlation can't carry information across.

López de Prado's purged cross-validation makes k-fold usable for overlapping financial labels.

Rule of thumbMake the purge at least as long as the longest window that feeds a feature or a label. For residual momentum, that's 12 months of formation.
Validation scheme
Train Test Purged or embargoed Leak

The stress test

Does it hold up everywhere?

A real effect shows up in most slices of the data, and most strongly where its story says it should.

Split by time

Break the sample into periods. A real signal is positive in most of them, even if it's weaker in some.

Here one stretch loses money: a momentum crash, when last year's losers rebound sharply. The other periods carry it.

Test the story's prediction

Page 2 predicted that underreaction should be strongest where news travels slowly. Split by size and by analyst coverage.

The IC is highest in small, thinly covered stocks, which is what the story said. A prediction that comes true is worth more than another decimal of t-stat.

Nudge the parameters

Vary the lookback and the regression window around your choice. A real effect gives a plateau: neighboring settings work almost as well.

A spike is a warning

An overfit signal works at one exact setting and nowhere near it. That isn't a discovery about markets. It's a discovery about one corner of your sample.

Rule of thumbReport the plateau, not the peak. If you'd pick a different parameter after seeing the grid, you're fitting noise.

The verdict

Residual momentum survives the attack on most counts. The open question is luck, and page 5 answers it with simulation.

Long-short return by period · % a year, illustrative
What to look for. Mostly positive, with a story for the exception. Momentum crashes in sharp rebounds after market sell-offs are well documented, and residual momentum's crashes tend to be smaller.
Mean monthly IC by slice · illustrative
By market cap
By analyst coverage
Prediction confirmed: strongest where news is slowest.
Show
Long-short Sharpe ratio · lookback × regression window, illustrative
Regression window, months
Residual momentum · page 4 scorecard
Did it survive the attack?
Data
Pass. Point-in-time universe, delisted stocks kept, one-month skip guards against same-close look-ahead.
Search
Mixed. The IC clears any hurdle. The increment over momentum doesn't clear a 300-variant correction.
Out of sample
Pass, if the holdout was touched once and folds were purged by 12 months.
Robustness
Pass. Positive in most periods, strongest where the story predicts, flat plateau across parameters.
Next page Luck or Skill →