What this is

Not one of seventy pre-declared rules beat buying and holding

This is not investment advice and nothing here is a strategy anyone should trade. Across 10,453 trading days from 1985 to 2026, holding the US market returned 11.93% a year at a Sharpe ratio of 0.545. Seventy variants of a news-timing rule — built on the Baker-Bloom-Davis daily Economic Policy Uncertainty index, which counts newspaper articles and is free to use with attribution — were declared before any was scored. 0 of them beat buy-and-hold on return; the best managed 11.71%. The decisive test is what a worthless grid scores anyway: replacing the signal with random investment schedules matched to each variant's time in market, the best of seventy averages a Sharpe of 0.651 — higher than the 0.611 the real winner achieved. The search found nothing, and the arithmetic that shows it is the count of tests rather than the winner's score.

This is a real analysis on a real dataset, not an illustration. The code is published, it runs in under two minutes, and a verification script re-runs it from scratch and fails if any headline number moves.

Every figure below is read from results.json, which is written by the analysis itself. Where the result is unflattering it is published unchanged — the findings and the limitations both come straight out of the run.

Source figures are in the currency of the data: sterling for the UK retail and wholesale sets, euro for the Portuguese bank set. Dollar amounts are converted at 1.55 USD/GBP and 1.40 USD/EUR, roughly the averages for the periods the data covers — stated assumptions, not live rates.

How this is checked

verify.py --only 29 deletes this project's results, re-runs it and diffs every published number before the page ships.

The pipeline
Findings

What the analysis found, including the results that went against us

Each of these came out of the run. None has been softened.

NOT ONE OF 70 VARIANTS BEAT BUYING AND HOLDING. Across 10,453 trading days from January 1985 to June 2026, holding the US market returned 11.93% a year at a Sharpe ratio of 0.545. 0 of 70 news-timing rules beat that on return — the best managed 11.71%, short by 0.22 percentage points a year. 10 beat it on Sharpe.

Every variant against buy and hold

Annualised return of each of the seventy pre-declared variants, sorted, with buy-and-hold shown as a flat line. Every variant sits below it.

run.py sections 2 and 3.

THE ONE THAT WINS, WINS BY 0.067 — AND THAT IS WHAT LUCK LOOKS LIKE. The best variant (change/5d/q50) reaches a Sharpe of 0.611 against 0.545. Replace the signal with random investment schedules matched to each variant's time in market — destroying the timing, keeping the exposure — and the best of seventy still averages 0.651, with a 95th percentile of 0.721. A worthless grid reaches the observed winner's score 89% of the time. There is nothing here to explain.

Sharpe ratio by variant

Sharpe ratio of each variant, sorted, against buy-and-hold. One variant edges above the line.

run.py section 3.

THE ARITHMETIC THAT MATTERS IS THE COUNT OF TESTS, NOT THE WINNER'S SCORE. Any search over 70 rules produces a best one, and the more rules the better it looks. Reporting that best rule without the count is the standard way a null result becomes a published strategy — and the count has to be declared before scoring, because a grid trimmed after the fact is a larger search than it admits to.

What the best of seventy scores when nothing works

Distribution of the best Sharpe ratio across seventy random investment schedules, repeated many times. The observed winner is not unusual against it.

run.py section 5.

THE WINNER ALSO TRADES. It moves 58.80% of the book on an average day and sits in the market 59.7% of the time. At a single basis point per unit turned over — well below realistic retail costs — its return falls from 11.71% to 9.44%, a drag of 2.27 percentage points. Backtests that omit costs are not measuring a strategy, and this one was already losing before they were added.

BUY AND HOLD IS THE ONLY BENCHMARK THAT SETTLES ANYTHING. Every variant here would look respectable reported on its own — positive returns, plausible Sharpe ratios, sensible economic stories about stepping out when uncertainty spikes. Against doing nothing, all 70 lose. A strategy compared only against zero, or against cash, has not been tested.

The detail

Full results tables

The winner, and what it is up against

The winner, and what it is up against
MeasureBuy and holdBest of 70
Annualised return11.93%11.71%
Sharpe ratio0.5450.611
Variants that beat it on return0 of 70
Variants that beat it on Sharpe10 of 70

The best variant, before and after trading costs

The best variant, before and after trading costs
MeasureBefore costsAfter 1 basis point
Annualised return11.71%9.44%
Sharpe ratio0.6110.502
Daily turnover58.80%58.80%

Limitations

Stated by the analysis, not added afterwards. A project without these is not finished.

  • NOT INVESTMENT ADVICE. Nothing here is a strategy, a recommendation, or a claim about what any asset will do. It is a study of a research practice — searching a space of rules and reporting the best — and it is published because the answer is negative.
  • This tests aggregate, daily, market-timing use of one published news-text index on one market over one sample. It says nothing about cross-sectional strategies on firm-level news, about intraday horizons, about options, or about non-US markets, and it is not evidence that news sentiment carries no information anywhere.
  • The market series is the Fama-French daily market factor. Its host page carries a copyright notice and no explicit licence grant, so the file is neither redistributed nor committed to this repository — only statistics computed from it are published, and a reader fetches the file from the source. The uncertainty index carries an explicit grant of free use with attribution to Baker, Bloom and Davis.
  • Both series are revised. The Fama-French file is rebuilt from a new CRSP vintage each month and the daily uncertainty index is revised for its trailing weeks as newspaper archives complete, so a re-run months from now will not reproduce these figures exactly. The direction of the result is not fragile to that; the third decimal place is.
  • The null in step 5 destroys timing while preserving each variant's average exposure. That is the right comparison for a timing claim, but it is one null among several defensible ones — a block bootstrap preserving autocorrelation would give a slightly different threshold.
  • Costs are modelled as a flat basis point on turnover, with no bid-ask spread, market impact, slippage or tax. That is generous, and deliberately so: the strategy fails before realistic costs are reached, so a more careful cost model would only widen the gap.

Data: Baker-Bloom-Davis daily Economic Policy Uncertainty index, with the Fama-French daily market factor as the benchmark, Baker-Bloom-Davis daily Economic Policy Uncertainty index, with the Fama-French daily market factor as the benchmark, EPU: free use with attribution, granted in the file itself. Fama-French: copyright asserted with no explicit grant, so only derived statistics are published and the file is never redistributed.. 10,453 rows, 1985 to 2026.

Libraries and methods this analysis used

Read from this project's own run.py when the page was built — 344 lines of it. Not a list of everything we know; a list of what this analysis imports and calls.

9 names from pandas appear in this analysis.

  • astype
  • dropna
  • idxmax
  • merge
  • read_csv
  • reset_index
  • rolling
  • sort_values
  • to_numeric
Verification

How every number on this page is checked

A script deletes each result file, re-runs the project and diffs the output. If a headline figure moves, the check fails, and the page does not ship. That is the only reason to believe anything on this page.

Running this method on your own data

The method above transfers; the result will not. Send us a extract and we will tell you what is forecastable in it and what is not, before anyone signs anything.