60/40 rebalancing pressure
A real flow effect from a 2025 NBER paper. Too small for an intraday trade after costs.
Why it failed: Net t 0.86 on 5,396 trades; zero at twice the cost; flat after the paper's sample. See the scorecard
Cumulative result
R per trade (net of cost). Trade size follows the strength of the signal, so most trades risk less than 1R.
Show the data as a table
| Year | Trades | Sum R | Mean R |
|---|---|---|---|
| 2005 | 213 | −0.1 | 0.000 |
| 2006 | 251 | +2.3 | +0.009 |
| 2007 | 251 | −0.5 | −0.002 |
| 2008 | 253 | +5.5 | +0.022 |
| 2009 | 252 | +2.9 | +0.012 |
| 2010 | 252 | 0.0 | 0.000 |
| 2011 | 252 | +0.6 | +0.002 |
| 2012 | 250 | −3.7 | −0.015 |
| 2013 | 252 | −4.8 | −0.019 |
| 2014 | 252 | +1.8 | +0.007 |
| 2015 | 252 | −2.1 | −0.008 |
| 2016 | 252 | +1.6 | +0.006 |
| 2017 | 251 | +4.6 | +0.019 |
| 2018 | 251 | +0.2 | +0.001 |
| 2019 | 252 | −2.2 | −0.009 |
| 2020 | 253 | −2.2 | −0.009 |
| 2021 | 251 | +1.1 | +0.004 |
| 2022 | 251 | +2.5 | +0.010 |
| 2023 | 250 | +0.5 | +0.002 |
| 2024 | 251 | +4.4 | +0.018 |
| 2025 | 249 | +2.8 | +0.011 |
| 2026 | 155 | −2.8 | −0.018 |
The claim
When a 60/40 stock/bond portfolio drifts overweight in stocks, balanced and pension funds sell stocks the next day, and the opposite when underweight. The paper reports a Sharpe ratio of 1.08 before costs for 1997-2023.
Source: Harvey, Mazzoleni and Melone (2025), The Unintended Consequences of Rebalancing, NBER Working Paper 33554
What we tested
- Signal from the paper, frozen before any market data was read: a simulated 60/40 SPY/IEF portfolio, a threshold-rebalancing leg averaged over 26 bands and a calendar leg around month ends.
- Trade the next day in the opposite direction of the portfolio's equity overweight; size proportional to the signal strength (at most 1R).
- Entry 09:35 New York, exit 15:45, stop 1 x daily ATR(14). No overnight positions.
Costs and fills
- US100 CFD: the file's own bid/ask (67% of trades) or the median spread; futures: 1.25 index points per round trip.
Data
- US100 CFD minute bid/ask, true clock
- LSE NQ futures 2016-2026
- SPY and IEF adjusted daily closes (signal)
The flow is real
Measured close to close without costs, the signal earns +2.4 basis points a day over 2005-2026 (t 3.30). Scrambling the signal dates destroys it (the real signal beats 200 scrambled versions, p 0.010), and the flipped signal loses money. We agree with the paper: rebalancing moves prices.
The test was registered and committed to git before any market data was read; nothing was tuned afterwards.
It is too small to trade intraday
Inside the trading day the effect is +1.37 basis points. After a CFD spread and a stop that is +0.002R a trade, t 0.86, and exactly zero at twice the cost. The years after the paper's sample (March 2023 onwards) show t 0.90. Nasdaq futures from a second vendor agree (t 1.03).
To reach t 2 at this trade size, the strategy would need +0.0054R a trade on the same 5,396 trades; it makes less than half that.
The 12-gate scorecard
3 passed · 3 failed · 6 not run or not reached. A gate is "not reached" when the strategy had already failed a veto: there is nothing left for it to test.
Is the backtest real?
Absolute veto. These gates look for bugs and physical limits, not for statistical evidence, so one failure ends the test.
Signal uses closes through day t, trades day t+1. The lag-0 version (look-ahead) is −0.037R, t −14.1: correctly excluded. Bar phase −3 to +3 minutes: t 0.66 to 1.10.
Is the edge more than luck?
G12, one pre-registered holdout, is the only statistical veto. G1 to G5 and the regime test G6 are always reported; G6 vetoes only a regime that is significantly negative. A strategy with no edge after costs never reaches G12, because there is nothing to confirm.
Net t 0.86 against a bar of 3.43 for a single pre-registered idea.
Signal dates shuffled 200 times: observed t beats the placebo (p 0.010). Flipped signal: t −2.02 before cost.
+0.0047R gross, +0.0023R at 1x cost, 0.0000R at 2x.
Both halves positive (2005-2015 +0.0007R, 2016-2026 +0.0040R); no year significantly negative.
Pre-registered out-of-sample check, after the paper's sample (2023-03 onwards): t 0.90 on 853 trades.
Can it survive a prop-firm account?
Absolute veto, for strategies meant for funded accounts. The account rules are simulated event by event, not at the end of the day.
Real is not the same as tradeable
A t-statistic of 3 on daily close-to-close returns can be worth nothing to a trader who pays a spread, uses a stop and sleeps flat. Always measure an academic effect inside the window you can actually trade, at the venue's real cost.
Receipts
Every number on this page comes from one of these files: the test script, its saved output, the trade list and, where the test was pre-registered, the registration and its hash lock. Download them and check our work. Numbers that also appear in the chart are recomputed from the trade list when this page is built, and the build fails if they disagree.
| File | Kind | Size | Status | sha256 |
|---|---|---|---|---|
| REBAL01_PREREG.md prereg/REBAL01_PREREG.md | Pre-registration | 7 KB | 5 lines withheld (private strategy) | 3d966a080ff9 |
| _rebal01.py experiments/_rebal01.py | Script | 18 KB | 2 lines withheld (private strategy) | 34273271637e |
| _rebal01.out experiments/_rebal01.out | Saved output | 5 KB | 1 line withheld (private strategy) | 0eee85417f1b |
| _rebal01_trades.csv experiments/_rebal01_trades.csv | Trade list | 762 KB | Prices removed (data licence) | 0ad8bee67063 |
| _bar_boundary_audit_20261009.py _bar_boundary_audit_20261009.py | Lab module | Withheld: loads the code of the lab's private live strategy |
Price data is not included: the vendors' licences do not allow it, so the scripts run only with your own copy of the data, and the trade lists show dates, direction, R and costs, not prices. Lines that refer to the lab's private live strategy are replaced by a marker; the receipts page explains the rules and lists the sha256 of every original file.