Skip to content

Strategy shortlist (research, 22 October 2026)

Status (24 October 2026). Every pick so far was built and rejected: round 1's B (month-end payment cycle), round 2's D1 (trend filter) and D2 (low-volatility funds), and round 3's E1 (gold), E3 (commodities) and E2 (international stocks), each judged on gate B. Each result is under its decision below. No candidate is open; the live engine trades the 60/40.

Phase 5 built four candidates (60/40 benchmark, month-end rebalancing flows, ETF time-series momentum, crypto Donchian ensemble) and none passed the promotion gates. This file lists what could come next. The operator picks, the rules are fixed in this file, and only then is a candidate built and run through flask validate. The pick and its fixed rules are under Decisions.

What a candidate had to be:

  • Price-only, plus public calendars at most: free Alpaca daily bars (US stocks and ETFs from 2016, crypto from 2021). No paid data, no fundamentals, no options data.
  • Different from the Phase 5 four.
  • Conservative: long-only, no leverage, within the risk limits in ROADMAP.md.
  • Still working after it was published. Published anomalies lose about half their returns after publication on average (McLean and Pontiff, Journal of Finance 2016: 26% out of sample, 58% after publication, across 97 predictors; paper). So for each idea I looked for the newest evidence, not only the original paper.

Most of the well-known price-only timing effects have published evidence that they faded (see Checked and rejected). Three candidates remain, none with a strong prior.

A. Macroeconomic announcement days

Source. Savor and Wilson, "How Much Do Investors Care About Macroeconomic Risk? Evidence from Scheduled Economic Announcements", Journal of Financial and Quantitative Analysis 2013. Survey and update: Ai, Bansal and Guo, "Macroeconomic Announcement Premium", NBER working paper 31923, 2023 (pdf).

Published rule. The stock market earns most of its premium on the days with scheduled macroeconomic announcements. Ai, Bansal and Guo count FOMC statements, the employment report (non-farm payrolls), GDP (first and last estimates), the ISM manufacturing index, and the earlier of CPI and PPI each month. Savor and Wilson used employment, the earlier of CPI/PPI, and FOMC.

Evidence for.

Sample Announcement days Other days
1958–2009 (Savor and Wilson) 11.4 bps a day 1.1 bps a day
1961–2023 (Ai, Bansal and Guo), 44 days a year 10.68 bps a day, 4.65% a year, t = 5.36 0.93 bps a day, 1.94% a year
January 2020 to August 2023 16.33 bps a day —

The 1961–2023 figures are market returns in excess of T-bills; the announcement days carry about 71% of the 6.59% yearly premium. A t-statistic of 5.36 over 63 years is an annual Sharpe ratio of about 0.68 on those days alone (my calculation: 5.36 / √63).

Evidence against. Ernst, Gilbert and Hrdlicka (2019) argue that choosing the announcement types after the fact, and not controlling for the day of the month, could bias the result; FOMC days stay significant in their tests. Knox and Vissing-Jorgensen (Federal Reserve FEDS 2026-023, pdf) report that the equity premium implied by S&P 500 options is only 1–2 bps higher on FOMC days (August 2016 to December 2023). That suggests high FOMC-day returns were partly good news, not a reliable premium.

What it could add. Stocks on about 44 days a year and cash or bonds on the rest: low volatility, and a source of return unlike 60/40.

Cost check. Each event is a round trip at the close. At the 5 bps per fill the backtest assumes, a round trip from cash costs 10 bps, about the whole average premium per event. It only pays if closing-auction fills cost less than modelled. Some events fall on consecutive days and share one round trip. The soak report measures real auction fills.

Data and engine work.

  • The dates: a checked-in file of actual release dates, built from the Federal Reserve, BLS, BEA and ISM calendars (free). Use the dates releases actually came out; scheduled releases are sometimes postponed.
  • Closing-auction orders. Alpaca queues a CLS order sent after 19:00 ET for the next day's closing auction (Alpaca docs). So the engine can send it at its 00:15 poll, because the dates are known in advance. The simulated broker already fills CLS orders at the close; the engine never sends them yet.

Draft rules (to fix if chosen).

  • On the session before each announcement day, buy SPY at the close, up to the 60% position cap.
  • Sell it at the close of the announcement day, unless the next session is also an announcement day.
  • Grid: Savor and Wilson's three types against Ai, Bansal and Guo's five; cash or IEF on other days.

B. Month-end payment cycle

Source. Etula, Rinne, Suominen and Vaittinen, "Dash for Cash: Monthly Market Impact of Institutional Liquidity Needs", Review of Financial Studies 2020 (open access).

Published rule. T is the last trading day of the month. Institutions sell before month-end payments, which depresses prices from T−8 to T−4. Prices recover from T−3 to T−1, and new money lifts them from T to T+3.

Evidence for.

  • On the CRSP value-weighted index from July 1995 to December 2013, the market returned −17 bps from T−8 to T−4 and +77 bps from T−3 to T+3.
  • Above the average day, that is −37 bps and +48 bps in an average month. The same pattern shows in the paper's international sample of 22 equity markets.
  • The paper's sample ends in 2013. So a test on 2017–2026, the period our data allows, is fully out of sample.

Evidence against. The classic turn-of-the-month window (T to T+3; McConnell and Xu, Financial Analysts Journal 2008) looks faded in the last decade. A retest on S&P 500 futures up to 2026 (post, not peer reviewed) finds the edge near zero and then negative in the latest ten years. An Aalto thesis on 15 international indices reportedly finds it almost gone over 2014–2022 (as summarized in search results; the thesis itself could not be opened).

What it could add. Stocks about 7 days a month, timed by a known calendar. The signal differs from Phase 5's rebalancing flows, which traded the stock-bond spread depending on how far a 60/40 portfolio had drifted.

Data and engine work.

  • Data: only the NYSE calendar the engine already has.
  • Engine: closing-auction orders, as for A.
  • Cost: one round trip a month, 10 bps at the modelled 5 bps a fill.

Draft rules (to fix if chosen).

  • Buy SPY at the close of T−4, up to the 60% position cap, and sell it at the close of T+3.
  • Grid: T−3 to T+3 (the paper) against T to T+3 (McConnell and Xu); cash or IEF on other days.

C. Industry trend on sector ETFs

Source. Zarattini and Antonacci, "A Century of Profitable Industry Trends" (2024; Charles H. Dow Award 2025) (summary). The rules below are as summarized by CXO Advisory.

Published rule. Long-only, daily, across 48 US industry portfolios:

  • Buy an industry when its close crosses above the upper band of its 20-day Keltner channel (2 × the high-low range) or its 20-day Donchian channel.
  • Exit below a trailing stop at the lower band of the 40-day Keltner or Donchian channel. The stop is never lowered.
  • Resize daily so each position contributes the same volatility (14-day), with gross exposure up to 200%. Cash goes into 1-month T-bills.
  • The authors also ran it on 31 SPDR sector and industry ETFs (launched 2005–2018) up to March 2024.

Evidence for. From 1926 to 2024 it returned 18.5% a year at 12.1% volatility, a Sharpe ratio of 1.46. The US market returned 9.7% a year at 17.1%, a Sharpe ratio of 0.63, and the strategy cut its worst drawdown by almost 60%.

Evidence against.

  • An independent replication with walk-forward tests, a Columbia student project (arXiv 2412.14361), fell short of the market out of sample.
  • The paper allows 200% exposure; we cap it at 100%.
  • Daily resizing adds turnover.
  • It is the same family as Phase 5's ETF trend (time-series momentum), which failed, on a different universe.

What it could add. Sector rotation with crash protection, close to the existing Donchian code (crypto_trend.py). Trades at the next open, so no engine change.

Draft rules (to fix if chosen).

  • The paper's rules on the SPDR sector and industry ETFs with Alpaca history from 2016.
  • Total exposure capped at 100% and each position at 60%; cash otherwise.
  • Grid: the paper's 20/40-day channels and neighbouring lengths (for the stability gate).

Checked and rejected

Idea Source Why not
Overnight drift Boyarchenko, Larsen and Whelan, Review of Financial Studies 2023 The 2:00–3:00 a.m. window in S&P 500 futures has averaged close to zero since 2021, by the same authors (Liberty Street, July 2026); it also needs futures overnight
Pre-FOMC drift Lucca and Moench, Journal of Finance 2015 Essentially disappeared after 2015 (Kurov, Wolfe and Gilbert, Finance Research Letters 2021)
FOMC-cycle even weeks Cieslak, Morse and Vissing-Jorgensen, Journal of Finance 2019 2017–2021 shows a statistically significant opposite cycle (Knox and Vissing-Jorgensen, FEDS 2026-023)
Intraday momentum (last half hour) Gao, Han, Li and Zhou, JFE 2018; Baltussen, Da, Lammers and Martens, JFE 2021 A replication of a published SPY intraday momentum strategy (Zarattini, Aziz and Barbon) returned 9.4% out of sample, May 2024 to March 2026, against 29.5% for buy-and-hold (Paz, SSRN 2026); needs intraday data
Treasury auction cycle Lou, Yan and Zhang, Review of Financial Studies 2013 After 2015 the effect is less than half its earlier size; for the 10-year note 1.2 bps of yield and not significant (Fleming, Liu and Nguyen, New York Fed Staff Report 1188, 2026)
Turn of the month (T to T+3) McConnell and Xu, Financial Analysts Journal 2008 Faded in recent retests (see B); B is the variant with a mechanism and an untouched test period
Sell in May / Halloween Bouman and Jacobsen, American Economic Review 2002 No longer evident after January 2003 in any of the five indices tested, the S&P 500 included (Dichtl and Drobetz, as summarized by CXO Advisory); our data holds only nine summers
Pre-holiday days Ariel, Journal of Finance 1990 No longer significant for large firms after 1990 (Ko and Yang, Critical Finance Review 2024)
Volatility-managed portfolios Moreira and Muir, Journal of Finance 2017 Out of sample, across 103 equity strategies, generally no better than the unmanaged portfolios (Cederburg, O'Doherty, Wang and Yan, JFE 2020); the engine already targets volatility
Same-calendar-month seasonality Keloharju, Linnainmaa and Nyberg, Journal of Finance 2016 The signal averages each calendar month's returns over many past years (up to 20); Alpaca's history starts in 2016
Factor momentum with factor ETFs Ehsani and Linnainmaa, Journal of Finance 2022 Shown for long-short factors; no evidence found for long-only factor ETFs
Dual momentum Antonacci, working paper 2013 Little independent evidence after publication; overlaps the ETF trend candidate that failed

Decisions (22 October 2026)

The operator left the pick to me, allowed any free data source, and allowed T-bills.

The pick: B, the month-end payment cycle. These rules were fixed and committed before any backtest of it.

  • C is out on its own paper's numbers. The authors' ETF test (31 SPDR ETFs, January 2005 to March 2024, with costs) returned 7.7% a year at 13.7% volatility. Its Sharpe ratio was 0.61 against 0.59 for SPY, with a 24% maximum drawdown and exposure up to 200%. The authors note the strategy weakened over the last 20 years.
  • A loses money under our cost model. Each announcement means moving between T-bills and SPY and back. That is four fills, or 20 bps at 5 bps a fill, against an average gain of 10.7 bps per announcement. It cannot pass the 3× cost gate even if the premium holds.
  • B pays its costs in the paper's sample. It needs one round trip a month, 20 bps at the modelled cost, against +48 bps above the average day in 1995–2013 (+77 bps raw).
  • It has a mechanism with a causal test: when 13 European markets moved from three-day to two-day settlement in 2014, the reversal moved closer to month-end, as the mechanism predicts.
  • All of 2017–2026 is after the paper's sample.
  • It needs nothing beyond the NYSE calendar.
  • Expectation, stated before the test. The paper's magnitudes imply a Sharpe ratio of about 0.6 in excess of T-bills, below the 1.0 gate, and the classic turn of the month has faded. B is the cheapest honest test of the three, not a likely pass.

Fixed rules: month-end

  • Instruments. SPY in the window; the T-bill sleeve (below) at all other times.
  • Days. T is the last NYSE session of a month. T−k and T+k count NYSE sessions.
  • Window. Buy SPY in the closing auction of T−k and sell it in the closing auction of T+3. The position is held at the closes of T−k through T+2, so it earns the returns of T−k+1 through T+3.
  • k, three variants (the whole grid):
  • settlement, the paper's mechanism. An institution that needs cash on T must sell by the close of T−(s+1), where s is the settlement period. So k = 4 before 5 September 2017 (T+3), 3 from 5 September 2017 (T+2) and 2 from 28 May 2024 (T+1). The rule in force on the entry day applies.
  • paper: k = 4 throughout, the paper's US window as published.
  • turn: k = 1, the classic turn of the month from T to T+3 (McConnell and Xu 2008).
  • Size. The strategy targets 100% SPY in the window. The engine's standard sizing applies unchanged: the 60% position cap, the 8% volatility target and the drawdown ladder. So the SPY weight actually held is lower, and the rest sits in the T-bill sleeve.
  • Orders. Market-on-close orders, sent when the previous session's bar is final (00:15 New York). Alpaca queues a closing-auction order sent after 19:00 ET for the next session's close. It rejects one sent after 15:50 and before 19:00, so the engine sends nothing in that window.
  • Costs. The standard model: 5 bps per equity fill, closing-auction and BIL fills included.
  • Test. flask validate month-end --start 2017-01-01. It uses the standard walk-forward (36-month training, 12-month test) and the ROADMAP gates, measured in excess of T-bills as below.
  • No other variant is tested on this data. If B fails, it is recorded as rejected.

Result: rejected (22 October 2026)

flask validate month-end --start 2017-01-01, on Alpaca data to 22 October 2026. Re-run on 23 October with the corrected T-bill sleeve (below); the verdict did not change:

Gate Value Threshold
Walk-forward Sharpe over T-bills 0.05 ≥ 1.0 fail
Deflated Sharpe 0.84 ≥ 0.95 fail
Probability of backtest overfitting 0.68 ≤ 0.20 fail
At 3× costs 2.1% against T-bills' 20.3% above T-bills fail
Parameter stability 0.72 ≥ 0.5 pass
Maximum drawdown −6.0% ≥ −12% pass
  • Out of sample. From January 2020 to October 2026 (the walk-forward) it returned 21.4% against 20.3% for T-bills. Over the whole period the best variant, paper (k = 4), returned 42.7% against 25.7%, an excess Sharpe ratio of 0.32.
  • The effect. On the days the paper window earns, SPY averaged 9.4 bps a day in 2017–2026, against 4.7 bps on the other days. That is the paper's direction at about two-thirds of its size, but it is not statistically significant (t = 1.0). After costs and a position the 8% volatility target holds to roughly 45%, it adds little over T-bills.
  • As fixed in advance, no other variant is tested on this data. The code stays as the month-end candidate.

T-bills

  • The sleeve. The engine holds the T-bill ETF BIL (SPDR Bloomberg 1-3 Month T-Bill ETF, listed May 2007, expense ratio 0.1356%). It takes the equity not allocated to positions, minus the 0.5% cash buffer, for every strategy, the live 60/40 included.
  • How the risk rules treat it.
  • It is exempt from the 60% position cap and the single-order size limit.
  • It counts toward gross exposure.
  • It may be bought during a daily-loss cool-down, since it adds no market risk.
  • It is never bought while trading is halted, and the kill switch sells it like any position.
  • Sized on holdings. The sleeve takes what the positions leave once this rebalance's trades are done, not what their targets would leave. A target moving inside the rebalance band then trades nothing. The first version followed the targets: two positions each moving inside the band sold T-bills for cash. The dashboard's fills showed it on 23 October, and it was fixed.
  • The gates. Every Sharpe-based number is computed on daily returns minus BIL's daily total return: the walk-forward Sharpe, its selection of parameter sets, the deflated and probabilistic Sharpe, the overfitting test, the cross-validation, the neighbours and the regimes. The cost-stress gate needs a total return above BIL's over the same days. Drawdown stays on total returns.

Effect on the live 60/40. Validated the same way from 2017, the 60/40 with its idle cash in BIL returned 6.26% a year out of sample (2020 to October 2026), against 5.48% with the cash earning nothing. Its maximum drawdown stayed at 14%. Its Sharpe ratio over T-bills is 0.52; the 0.81 reported before was against zero. flask validate benchmark --no-tbills reproduces the earlier report exactly.

Other decisions

  • Free data. Any free source is allowed. B needs none beyond the NYSE calendar.
  • Auction costs. These stay at the modelled 5 bps until the soak report's measurements of real auction fills justify a change.

Round 2: free long-history data (23 October 2026)

The operator ruled out taking more market risk (option B) and paying for data (option E), and chose to research ideas built on free data from outside Alpaca. Both sources work from here:

  • Kenneth French's Data Library has daily US market and 1-month T-bill returns from 1 July 1926 to August 2026 (from CRSP). Most of its portfolio sorts are monthly; the variance-sorted portfolios, for example, are monthly from July 1963.
  • FRED has the 10-year Treasury yield, daily from 2 January 1962.

What the long history adds. Tests over 60 to 100 years instead of 9, through 1973–74, 1987, 2000–02 and 2008 rather than one or two crashes.

Its limits: - Before ETFs existed these are index returns, not tradable funds. - Bond returns have to be computed from yields, which is an approximation. - Trading costs were higher in the past.

The promotion gates still come from flask validate on Alpaca data. The long history is an additional test.

D1. Trend filter on the equity sleeve

Source. Faber, "A Quantitative Approach to Tactical Asset Allocation" (Journal of Wealth Management 2007; revisited in the Journal of Portfolio Management 2018).

Published rule. Hold stocks while the index is above its 10-month moving average and T-bills otherwise, checked at each month end.

Evidence for. - In Faber's 2018 update the filter raised the Sharpe ratio of US stocks from 0.45 to 0.80, per Swedroe's summary. - Hurst, Ooi and Pedersen, "A Century of Evidence on Trend-Following Investing" (AQR, 2017), find trend following positive in every decade since 1880. That is long-short across 67 futures markets, though, not this rule.

Evidence against. - Faber's own update: after helping in 2008–09, the filter lagged stocks in six of the next eight years. - Zakamulin ("The real-life performance of market timing with moving average and time-series momentum rules", Journal of Asset Management; SSRN 2013) argues that earlier results were inflated by data mining. Out of sample, the rules beat buy-and-hold only in short episodes (per secondary summaries). - Huang, Li, Wang and Zhou, "Time Series Momentum: Is It There?" (JFE 2020), find little evidence, market by market, that past returns predict future returns.

What it could add. The engine already cuts exposure by volatility and by drawdown. The question this test answers is narrow: does a trend filter add anything on top of that? And does it let the portfolio hold more equity within the same 10% kill-switch limit? Option B failed because the drawdown limits cut in during crashes.

Overlap. It belongs to the same family as the rejected ETF time-series momentum, but uses a single asset and a century of data.

Data. French's daily market returns (1926–), FRED's 10-year yield for bonds (1962–), and Alpaca for 2017–2026.

D2. Defensive (low-volatility) stocks instead of SPY

Sources. Blitz and van Vliet, "The Volatility Effect" (JPM 2007); Baker, Bradley and Wurgler, "Benchmarks as Limits to Arbitrage: Understanding the Low-Volatility Anomaly" (FAJ 2011).

Rule. Hold the least volatile stocks (through an ETF such as USMV or SPLV) in place of SPY in the 60/40.

Evidence for. Baltussen, Blitz and van Vliet, "The Volatility Effect Revisited" (JPM 2020), find the effect persistent across periods and markets, with no sign it has been arbitraged away (per summaries).

Evidence against. - USMV, the largest such ETF, returned 10.5% a year over 2016–2025 against 14.8% for MSCI USA. It beat the index only in 2018 and 2022. These are BlackRock's annual figures, compounded by me. - It fell about as far as the S&P 500 in the 2020 crash (33%, per one analysis).

What it could add. Each dollar in it carries less volatility, so the 8% volatility target would hold more equity. The test is whether its Sharpe ratio beats SPY's inside the engine.

Data. French's variance-sorted portfolios are monthly only (from July 1963), so the long-history check would be monthly and outside the engine. The engine test runs on Alpaca data with USMV or SPLV (2017–2026).

D3. Economic trend (macro momentum)

Sources. Brooks, "A Half Century of Macro Momentum" (AQR, 2017); Brooks, Feilbogen, Ooi and Akant, "Economic Trend" (AQR, 2023–24).

Rule. Position each market by trends in its economic fundamentals: growth forecasts, inflation, monetary policy, trade and risk sentiment. It goes long and short across equity, bond, currency and commodity futures.

Evidence for. AQR reports attractive returns over more than 50 years, with gains in the largest equity drawdowns.

Evidence against. - The evidence comes from the manager that sells the strategy. - It is long-short in futures, not long-only in ETFs. - It needs data as first released (FRED's ALFRED vintages) and growth forecasts, which have no free history.

Verdict. It can't be tested faithfully with free data.

Checked and rejected (round 2)

Idea Source Why not
Timing stocks with valuation and macro predictors (dividend yield, earnings yield, term spread, and others) Goyal and Welch, RFS 2008 Re-tested by Goyal, Welch and Zafirov (RFS 2024; 46 variables): more than a third are no longer significant even in-sample, and half of the rest do poorly out of sample
Timing bonds with the yield curve (forward rates) Cochrane and Piazzesi, AER 2005 No economic value to investors out of sample, worsening over time (Thornton and Valente, RFS 2012)
Volatility timing Moreira and Muir, JF 2017 Fails out of sample (Cederburg et al., JFE 2020); the engine already targets volatility

Recommendation (round 2)

D1, though not because its evidence is strong: it is mixed. It is the one idea where a century of data answers a precise question about this engine. - It is conservative and cheap to build, and the answer is useful either way. - If it adds nothing, the current risk setup has been checked through 1973–74, 1987, 2000–02 and 2008 instead of one crash.

D2 is the alternative. D3 is not recommended.

Decision (23 October 2026): D1

The operator picked D1. These rules were fixed and committed before any backtest of it.

Primary source checked. Faber's paper (SSRN 962461, February 2013 update): - "Buy when monthly price > 10-month SMA. Sell and move to cash when monthly price < 10-month SMA." - Prices are total returns including dividends, at the close of the last day of the month; the rest of the month is ignored. - Cash earns 90-day T-bills. Costs and taxes are excluded. - "There is broad parameter stability from 3 months on out to over 12 months." He chose 10 months as the one closest to the 200-day average.

Expectation, stated before the test. - A 60/40 held to an 8% volatility target earned a Sharpe ratio of 0.52 over T-bills out of sample on Alpaca data. A filter on its equity sleeve is unlikely to double that, so D1 is not a likely pass of the 1.0 gate. - The real question is whether it beats the 60/40 (below).

Fixed rules: trend-filter

  • Portfolio. The live 60/40: SPY 60% and IEF 40%. The idle equity goes to the T-bill sleeve (BIL), as for every strategy.
  • Signal. At each month end (the month's last NYSE session), compare SPY's adjusted close (total return) with the mean of the last n month-end closes, that one included.
  • Above the mean: target SPY 60%.
  • Otherwise: SPY 0%, so that 60% goes to T-bills.
  • IEF stays at 40% throughout. The filter applies only to the equity sleeve, as picked.
  • Before n month ends exist, the strategy makes no decision.
  • n, three variants (the whole grid): 8, 10 and 12 months. That is Faber's 10 and the neighbours inside the range he reports as stable.
  • Size. The engine's standard sizing applies unchanged: the 60% position cap, the 8% volatility target and the drawdown ladder.
  • The cap rules out a higher equity target. The filter can add only by avoiding the drawdowns that make the ladder cut exposure.
  • The 8% target stays, since the operator ruled out more risk (option B).
  • Orders. Each order goes at the opening auction of the next session, as for the live 60/40, so a month-end signal trades on the first session of the next month.
  • Costs. The standard model: 5 bps per equity fill.

Test 1, the gates: Alpaca data. - flask validate trend-filter --start 2017-01-01, with the standard walk-forward (36-month training, 12-month test) and the ROADMAP gates, in excess of T-bills. - This decides promotion, as for every candidate.

Test 2, the long history: 1970 to August 2026. Proxies built from free data, run through the same engine and the same flask validate, with --data history --start 1971-01-01 --end 2026-08-31. - The proxies: - SPY: Kenneth French's daily US market return (Mkt-RF plus RF: all NYSE, AMEX and NASDAQ stocks, value-weighted, dividends included, from CRSP). - BIL: French's daily 1-month T-bill return (RF). - IEF: the mean daily return of a 7-year and a 10-year Treasury par bond from FRED's constant-maturity yields (DGS7 and DGS10). IEF holds 7- to 10-year Treasuries. - Each day's return buys a par bond at the previous day's yield (coupon equal to that yield, paid twice a year). It reprices that bond at today's yield, with its maturity shortened by the calendar days elapsed, and adds the coupon accrued over them. - On a day without a FRED value, the last earlier yield applies. - How well the proxies track, on daily returns from January 2016 to August 2026 against Alpaca's adjusted bars (2,679 days). The bond mix was chosen on this comparison, which uses no strategy results.

Proxy Its return ETF's return Its volatility ETF's volatility Correlation Tracking error
US market for SPY 15.35% 15.16% 18.4% 17.5% 0.992 2.4%
7/10-year par bonds for IEF 0.94% 1.01% 6.3% 6.6% 0.971 1.6%
10-year par bond alone 0.72% 1.01% 7.2% 6.6% 0.966 1.9%
7-year par bond alone 1.15% 1.01% 5.5% 6.6% 0.963 1.9%
1-month T-bills for BIL 2.31% 2.14% 0.1% 0.3% 0.44 0.2%
  • The bars. One per NYSE session from 2 January 1970.
  • Open, high, low and close all equal the cumulative total-return level. An order sent after a session's bar therefore fills at the next session's close: a day later than Faber, and later than the live open.
  • Quantities are fractional, since the levels grow more than a hundredfold and whole units would be too coarse.
  • Why 1970. From 1970 the NYSE calendar the engine uses matches French's trading days exactly (14,287 days). Before 1970 it doesn't: it lacks the Saturday sessions (until 1952) and many holidays (431 days in all). So the data from 1926 and FRED's 10-year yield from 1962 go unused. The test still spans 1973–74, the 1970s bond losses, 1987, 2000–02, 2008, 2020 and 2022.
  • Costs. 5 bps per fill, as above. Real costs were higher before ETFs and cheap trading; the 3× cost gate (15 bps per fill) is the check.

The comparison. The 60/40 (benchmark candidate) is run through flask validate on the same data and dates in both tests.

What decides. - Promotion: only the gates of test 1, unchanged. - If D1 fails the gates but beats the 60/40 in both tests, I report that and the operator decides whether it replaces the 60/40 as the live benchmark. "Beats" means a higher walk-forward Sharpe ratio over T-bills and a maximum drawdown no deeper. It would still not be a promoted strategy. - Otherwise D1 is recorded as rejected, and the live engine keeps the 60/40. - No other variant is tested on this data, whatever the result: no other filter length, no filter on bonds, no other volatility target.

Result: rejected (23 October 2026)

Both tests were run as fixed above. The commands were flask validate trend-filter --start 2017-01-01 --end 2026-10-23 and flask validate trend-filter --data history --start 1971-01-01 --end 2026-08-31, and the same for benchmark. The downloaded files' SHA-256 digests begin 2f29e225 (French), 8e6ff8f4 (DGS7) and e6bd270b (DGS10).

The gates (test 1, Alpaca, walk-forward 2020 to October 2026):

Gate Value Threshold
Walk-forward Sharpe over T-bills 0.53 ≥ 1.0 fail
Deflated Sharpe 0.98 ≥ 0.95 pass
Probability of backtest overfitting 0.84 ≤ 0.20 fail
At 3× costs 41.7% against T-bills' 20.3% above T-bills pass
Parameter stability 0.72 ≥ 0.5 pass
Maximum drawdown −11.2% ≥ −12% pass

Against the 60/40, out of sample (walk-forward):

D1, Alpaca 60/40, Alpaca D1, 1974–2026 60/40, 1974–2026
Sharpe over T-bills 0.529 0.528 0.557 0.582
Return a year 6.31% 6.34% 7.91% 8.18%
Volatility 6.9% 7.0% 6.4% 6.6%
Maximum drawdown −11.2% −14.0% −12.2% −14.1%
Kill-switch trips 1 1 2 5
Gates failed Sharpe, overfitting Sharpe, overfitting, drawdown Sharpe, overfitting, drawdown Sharpe, overfitting, drawdown

The verdict. D1 fails the gates. It also doesn't beat the 60/40 in both tests: - On Alpaca data it ties: a Sharpe ratio of 0.529 against 0.528, with a shallower drawdown. - Over 1974–2026 its Sharpe ratio is lower, 0.557 against 0.582.

So it is rejected, and the live engine keeps the 60/40.

What the long history shows: - The filter trades drawdowns for return. It was in stocks at 75% of month ends and switched 0.8 times a year, in line with Faber's "less than one round-trip trade per asset class per year". - Held fixed over 1971–2026 (10 months against the 60/40), it cut the maximum drawdown from −15.8% (1973–74) to −12.2% (1987). - It also cut the kill-switch trips from five (1974, 1987, 2001, 2008, 2022) to two (1987, 1990). - It earned less: 7.61% a year against 7.92%, an identical Sharpe ratio of 0.51. - The month-end check can't react to a fast crash. October 1987 fell inside one month, and both portfolios tripped the kill switch on 20 October. - No length stands out. Over the full periods, 8, 10 and 12 months gave Sharpe ratios of 0.65, 0.46 and 0.56 on Alpaca data, and 0.49, 0.51 and 0.55 since 1971. The fixed 60/40 gave 0.68 and 0.51. The walk-forward's choices moved between lengths, and the overfitting probability (0.84 and 0.65) says the in-sample best length tells little about the next year. - The answer to the question asked. The engine's volatility target and drawdown ladder already do most of what the filter does, so the filter adds no risk-adjusted return. It lowers drawdowns and kill-switch trips at a small cost in return, but not enough to pass the 12% drawdown gate over 55 years.

The current setup through five crashes. Validated over 1974–2026, the 60/40 earned 8.18% a year out of sample with a Sharpe ratio of 0.58 over T-bills. Its maximum drawdown was −14.1% despite the 10% kill switch: - The kill switch tripped five times in 55 years, about once a decade. - The gap past 10% comes from moves between one session and the next fill, which in these proxies lands a day later than live.

As fixed in advance, no other variant is tested on this data. The code stays as the trend-filter candidate, and --data history stays available to every candidate trading SPY and IEF.

Decision (23 October 2026): D2

The operator asked for D2 next. These rules were fixed and committed before any backtest of it.

The two funds, from their providers: - SPLV (Invesco S&P 500 Low Volatility ETF; launched 5 May 2011; expense ratio 0.25%) tracks the S&P 500 Low Volatility Index. - The index holds the 100 S&P 500 stocks with the lowest standard deviation of their trailing 252 daily returns, weighted by the inverse of that volatility. - It is rebalanced quarterly, in February, May, August and November, with no sector limits. - Sources: S&P DJI research and a 2012 SEC filing. S&P's methodology PDF was not reachable from here (HTTP 403). - USMV (iShares MSCI USA Min Vol Factor ETF; launched 18 October 2011; expense ratio 0.15%; 174 holdings) tracks the MSCI USA Minimum Volatility Index. - That index is the minimum-variance portfolio of MSCI USA under a Barra risk model. Its stock, sector and factor weights are kept near the parent index's, and it is re-optimized each May and November (MSCI methodology).

What Alpaca has. Both are active and tradable, with daily bars from 4 January 2016. Checking that also showed their buy-and-hold returns from 4 January 2016 to 22 October 2026:

Return a year Volatility
USMV 10.85% 14.0%
SPLV 8.93% 14.8%
SPY 14.89% 17.4%

These figures were seen before the rules were written. They don't affect the rules, whose only choice (which fund) the round-2 text had already named.

No daily long history. French's variance-sorted portfolios are monthly only, so D2 can't go through the engine on long-history data. The decision rests on Alpaca data alone.

Expectation, stated before the test. Over 2016–2026 both funds gave up more return than volatility against SPY. So D2 is unlikely to beat the 60/40, and very unlikely to reach the 1.0 gate.

Fixed rules: low-vol

  • Portfolio. The live 60/40 with the low-volatility fund in place of SPY: the fund at 60% and IEF at 40%. Idle equity goes to the T-bill sleeve (BIL).
  • The grid (two variants): USMV and SPLV.
  • Size. The engine's standard sizing applies unchanged: the 60% position cap, the 8% volatility target and the drawdown ladder.
  • The fund's lower volatility means the target scales the portfolio down less, so it holds more of both funds than the 60/40 holds of SPY and IEF. That is the mechanism under test.
  • Orders. At the next session's opening auction, as for the live 60/40.
  • Costs. The standard 5 bps per equity fill. Both funds trade about $200 million a day (median over the last 250 sessions).
  • Test. flask validate low-vol --start 2017-01-01 --end 2026-10-23, with the standard walk-forward and the ROADMAP gates, in excess of T-bills.
  • The comparison. flask validate benchmark on the same dates.
  • What decides: the same rule as for D1.
  • Promotion only through the gates.
  • If D2 fails them but beats the 60/40 (a higher walk-forward Sharpe ratio over T-bills and a maximum drawdown no deeper), the operator decides whether it replaces the 60/40 as the live benchmark.
  • Otherwise D2 is recorded as rejected.
  • Monthly long-history check, descriptive only. It runs outside the engine on French's "Portfolios Formed on Variance" (value-weighted; variance of the last 60 daily returns; formed monthly on NYSE breakpoints; file SHA-256 beginning 232fdeac).
  • It compares the lowest-variance quintile with the market (French's daily Mkt-RF plus RF, compounded by month).
  • Over three periods: July 1963 to August 2026, July 1963 to December 2010 (before the funds), and January 2012 to August 2026 (both funds trading).
  • Measures: return a year, volatility, Sharpe ratio over the T-bill rate, and maximum drawdown on monthly returns.
  • It decides nothing.
  • No other variant is tested on this data, whatever the result: no other fund (SPHD, LGLV, EFAV and the like), no other weights, no switching between the funds and SPY.

Result: rejected (23 October 2026)

flask validate low-vol --start 2017-01-01 --end 2026-10-23, and the same for benchmark. The first run stopped at the end with an error: the pipeline looked for the regime reference, SPY, only in the first parameter set, and neither set trades SPY. That was fixed (the symbol is now checked across all sets before any backtest). Regimes are measured on USMV; they are descriptive and decide nothing. Nothing else changed between the runs.

The gates (walk-forward 2020 to October 2026):

Gate Value Threshold
Walk-forward Sharpe over T-bills 0.15 ≥ 1.0 fail
Deflated Sharpe 0.945 ≥ 0.95 fail
Probability of backtest overfitting 0.21 ≤ 0.20 fail
At 3× costs 22.0% against T-bills' 20.3% above T-bills pass
Parameter stability 0.71 ≥ 0.5 pass
Maximum drawdown −13.0% ≥ −12% fail

Against the 60/40, out of sample:

D2 low-vol 60/40
Sharpe over T-bills 0.15 0.53
Return a year 3.56% 6.34%
Volatility 6.7% 7.0%
Maximum drawdown −13.0% −14.0%
2020 1.5% 8.9%
2022 −7.9% −12.5%

Over the full period the variants' Sharpe ratios were 0.52 (USMV) and 0.37 (SPLV), against 0.68 for the 60/40.

The verdict. Rejected on the gates and on the comparison: a much lower Sharpe ratio, and a drawdown only slightly shallower. The live engine keeps the 60/40. - The funds lost less in 2022. - They didn't protect in the 2020 crash. - They lagged in the rising years.

The monthly check (descriptive), as fixed: French's lowest-variance quintile against the market, monthly.

Period Quintile: return a year Volatility Sharpe over T-bills Max drawdown Market: return a year Volatility Sharpe Max drawdown
July 1963 – August 2026 11.24% 12.1% 0.58 −42.3% 10.87% 15.4% 0.47 −50.2%
July 1963 – December 2010 10.29% 12.2% 0.44 −42.3% 9.81% 15.7% 0.34 −50.2%
January 2012 – August 2026 14.44% 12.0% 1.05 −17.7% 15.13% 14.5% 0.94 −24.9%

The effect is real in the data, but the funds didn't deliver it. The lowest-variance stocks earned about the market's return at four-fifths of its volatility, and they still did after 2011. I added one window after seeing the results, the funds' own: January 2016 to August 2026, monthly.

Return a year Volatility
Lowest-variance quintile 14.62% 12.9%
Market 15.12% 15.7%
USMV 10.86% 12.1%
SPLV 8.89% 12.5%
SPY 15.63% 15.0%

The funds trailed the quintile by 4 to 6 points a year at about its volatility. This check doesn't show why. The constructions differ: - The quintile is weighted by market value and re-sorted monthly on 60-day variance. - SPLV holds 100 S&P 500 stocks weighted by inverse volatility, quarterly. - USMV is an optimizer's portfolio with sector and factor limits, twice a year.

As fixed in advance, no other fund, weighting or switch is tested on this data. The code stays as the low-vol candidate.

Round 3: improving the 60/40 itself (24 October 2026)

Why a different question. Eight ideas have failed the gates, and the gates may be the wrong yardstick for a long-only, unlevered fund mix. The live 60/40 earns a Sharpe ratio of 0.53 over T-bills out of sample (2020 to October 2026); the gate asks for 1.0. The best simple long-only portfolio in the newest research below reaches 0.82 over 2006–2026. So this round looks for a change to the benchmark that earns more for the same risk, and asks the operator how such a change should be judged (see The gate question).

E1. Gold in the mix

Source. Devanathan, Tzikas and Boyd (Stanford), "Simple Dynamic Stock/Bond/Gold Portfolios", arXiv 2609.07946, 7 September 2026.

What they tested. SPY, AGG and GLD, January 2006 to January 2026, long-only, no leverage, with cash at the federal funds rate: - fixed 60/40 and 50/30/20 (stocks/bonds/gold), rebalanced yearly; - the same mixes with volatility control: monthly, scaled down to a 7% volatility target (11-day estimate), the rest in cash. Our engine already does this (8% target, plus the drawdown ladder), so the only new piece here is the gold sleeve; - two optimizer portfolios (below, under checked and rejected).

Evidence for. Their results, Sharpe ratios in excess of the federal funds rate:

Portfolio Return a year Volatility Sharpe Max drawdown
50/30/20, volatility control 7.8% 7.3% 0.82 −15.9%
60/40, volatility control 7.1% 7.4% 0.71 −16.9%
50/30/20 9.1% 10.3% 0.70 −27.1%
60/40 8.1% 11.3% 0.56 −33.7%
  • Without 2008–09 the order holds: 0.93 against 0.83 with volatility control.
  • Costs barely matter: at 20 bps a trade the volatility-controlled 50/30/20 still has 0.80.
  • Gold helps most when stocks and bonds fall together. Their correlation turned positive in 2022 (one secondary source puts it at +0.42 in 2026; I have not checked it against primary data).

Evidence against. - The samples flatter gold. GLD returned 10.6% a year over 2006–2026, about as much as SPY. Over our own Alpaca window gold went from $1,076 an ounce (December 2015, monthly average) to $4,319 (September 2026): about four times, 14% a year (World Bank Pink Sheet, October 2026 release). A backtest on 2017–2026 will very likely like gold for that reason alone. - A high real price has preceded weak returns. Erb and Harvey find that when the real gold price is high, the following decade's real return has been low, and that gold has not hedged inflation over 10-year spans since 1975 (NBER w18706; 2024 update). The real price is near its all-time high now, with gold around $4,000 on 23 October 2026 (Kitco). - Long losing spells. $675 an ounce in January 1980, $256 in July 1999 (monthly averages): −62% over almost 20 years, before inflation. - Gold pays nothing, and the funds charge for storage: GLD 0.40% a year, GLDM 0.10%. - The paper is a new preprint with no independent replication yet. Its authors note that their confidence intervals do not account for their specification search.

How it can be tested here, with free data. - The gates: flask validate on Alpaca bars, SPY/IEF/GLD from 2017, the same engine, costs and limits as the 60/40. - The long history, monthly (the real test): 1975–2026, through gold's 1980–2001 bear market. - US market and 1-month T-bills from French's Data Library; - 10-year Treasury returns from FRED's yields, as in round 2; - gold from the World Bank's monthly prices, free and CC BY 4.0 (from January 1960; US citizens could own gold again from 31 December 1974). They are monthly averages, which smooth gold's month-to-month moves, so its volatility will read low. - FRED no longer serves the LBMA gold price (both series answer 404), so there is no free daily gold history before GLD (November 2004).

Draft rules (to fix if chosen). - The live 60/40 with a gold sleeve of 10%, 15% or 20% (the grid, for the stability gate), taken equally from stocks and bonds: 20% gives the paper's 50/30/20. - GLD in the backtests, for its history. Which fund the engine then trades (GLD or the cheaper GLDM) is fixed with the rules. - Everything else as the 60/40: the 8% volatility target, the drawdown ladder, the kill switch, idle cash in T-bills, trades at the open.

Expectation, stated before any test. E1 will probably beat the 60/40 on 2017–2026 Alpaca data because gold quadrupled in it, and probably still miss the 1.0 gate. The long history decides whether the gain is gold's recent run or a lasting effect of diversification.

Checked and rejected (round 3)

Idea Source Why not
Optimizer portfolios (return forecasts from 42 market and economic features) Devanathan, Tzikas and Boyd, arXiv 2609.07946 (2026) Best numbers in the paper (Sharpe 1.08), but about 280% turnover a year, many data series, and settings chosen by the authors with hindsight; too many free choices to validate honestly with nine years of Alpaca data
Faster trend following Kurth, Eisler, Rej and Bouchaud, arXiv 2607.01550 (2026) Short-term trend profits have been unreliable since about 2009 in futures data; our slower ETF trend (Phase 5) and trend filter (D1) already failed
Long-only trend on single stocks Zarattini, Pagani and Wilcox, SSRN 5084316 (2025) Holds up out of sample, but needs a survivorship-free single-stock history, which is not free

Small changes that need no strategy test

These change costs, not exposure; each is worth a few basis points a year. They wait for the operator and are best made after the paper soak, so the soak measures one setup. - SGOV instead of BIL for the T-bill sleeve: 0.09% a year against 0.1356%, about 4.5 bps less on the cash. SGOV only exists since May 2020, so the gates would keep measuring against BIL (comparison). - GLDM instead of GLD, only if E1 is adopted: 0.10% against 0.40% (ETF.com).

The gate question (the operator's decision)

A long-only, unlevered fund mix is unlikely to reach a Sharpe ratio of 1.0 out of sample: the 60/40 has 0.53, and the newest paper's best simple mix 0.82 over twenty years that include 2008. Two ways to judge E1, to be fixed before any test:

  • A. Keep the gates as they are. E1 is judged like every candidate. It will most likely be rejected on the 1.0 gate, and we learn whether gold helps.
  • B. A separate path for changing the benchmark itself. A variant of the 60/40 (same engine and limits, a different fixed mix) replaces it only if all of these hold, as fixed in writing before the test:
  • out of sample on Alpaca data (2020 to October 2026): a higher Sharpe ratio over T-bills than the 60/40, and a maximum drawdown no worse;
  • deflated Sharpe ratio, overfitting probability, 3× costs and parameter stability: the usual gates;
  • on the monthly long history, in each half of 1975–2026: a Sharpe ratio over T-bills no lower than the 60/40's, and a maximum drawdown no worse;
  • then the 60-day paper soak, like any change.

Recommendation: B, with E1 as its first test. Your goal is more income at the same risk, and B asks exactly that question, with the long history as the guard against gold's recent run. A asks a question a long-only mix almost cannot pass.

Decisions (24 October 2026)

  • Gate: B. A variant of the benchmark is judged on the path B criteria above, fixed now and before any test of any variant.
  • E1 is not picked yet: the operator asked for more research first.
  • If gold is ever traded, the engine trades GLD, the same fund as in the backtests.

More variants for path B (24 October 2026)

Each changes one sleeve of the 60/40 and keeps everything else (the 8% volatility target, the drawdown ladder, the kill switch, idle cash in T-bills). Each has a free monthly long history, so each can be judged on gate B. Nothing is built or backtested.

E2. International stocks in the equity sleeve

Sources. Anarkulova, Cederburg and O'Doherty, "Stocks for the Long Run? Evidence from a Broad Sample of Developed Markets", Journal of Financial Economics 2022 (39 developed markets, 1841–2019) (JFE), and their lifecycle paper "Beyond the Status Quo" (2025), whose best lifetime mix holds a third of its stocks at home and two thirds abroad (PDF). Asness, Israelov and Liew, "International Diversification Works (Eventually)", Financial Analysts Journal 2011, updated through 2022 in the Journal of Portfolio Management 2023.

Evidence for. The strongest academic base of this round: peer-reviewed, data from dozens of countries over more than a century. Over long horizons a country's own economy dominates its returns, so holding several countries diversifies what one country's bad decades do.

Evidence against. - Diversification across countries fails in crashes, when markets fall together; it works over decades. - US stocks beat the rest of the developed world over most of the data we can test: our Alpaca window (2016–2026) and French's developed ex-US series (from July 1990, which begins with Japan's bust). Gate B asks the variant to beat the 60/40 in this data, so E2 is the least likely of the three to pass, whatever its long-run merit. - Currency risk: foreign stocks in dollars carry exchange-rate swings.

Data. Alpaca: VEA or EFA (EFA, 2001, is already in the TSMOM universe). Long history: French's "Developed ex US" market return, monthly from July 1990 (Bloomberg data), with French's T-bills.

Draft grid. A third, half or two thirds of the equity sleeve abroad.

E3. Broad commodities

Source. Levine, Ooi, Richardson and Sasseville, "Commodities for the Long Run", Financial Analysts Journal 2018: commodity futures from 1877 earned positive average excess returns, did well in inflationary spells and had low correlation with stocks and bonds (NBER w22793). AQR publishes the index updated to May 2025, monthly and free (dataset).

Evidence for. A long, public, monthly history (1877–2025) to test on; and commodities rose when stocks and bonds both fell for inflation, as in 2022.

Evidence against. - Two of the authors work at AQR, which sells commodity products. - Single commodity futures earn about nothing on average; an index's return comes largely from rebalancing (Erb and Harvey, "The Strategic and Tactical Value of Commodity Futures", FAJ 2006; NBER w11222). - Since index investing took off around 2004, commodities move more with stocks, and the evidence on whether their returns fell is mixed (see the review "Financialization of commodity markets ten years later", 2023). - The funds are dear: DBC about 0.85% a year, BCI 0.26% but only listed in 2017.

Data. Alpaca: DBC (2006; already in the TSMOM universe). Long history: AQR's equal-weight commodity futures excess return plus French's T-bills.

Draft grid. A commodity sleeve of 5%, 10% or 15%, taken equally from stocks and bonds.

Checked and rejected (more of round 3)

Idea Why not
Inflation-linked bonds (TIPS) in the bond sleeve Only practitioner evidence turned up, and it disagrees; long TIPS lost with other bonds in 2022, as rates rose

How the three compare, before any test

E1 gold E2 international E3 commodities
Strength of the evidence One new preprint, issuers' studies Peer-reviewed, a century, many countries Peer-reviewed, 1877 on, but by a seller
Our test data Flatters it (gold ×4 since 2016) Punishes it (US ahead since 1990) Mixed (AQR index over T-bills: −22% in 2015, −11% in 2018, +30% in 2021, +17% in 2022)
Free long history 1975–2026, monthly averages July 1990–2026 1877–May 2025
Fund cost GLD 0.40% VEA 0.03–0.05%, EFA 0.32% (comparison) DBC about 0.85% (comparison)
Chance of passing gate B Highest Lowest In between

Decision (24 October 2026): E1

The operator picked E1, to be judged on gate B. These rules were fixed and committed before any backtest of it.

What Alpaca has. GLD (SPDR Gold Shares, NYSE Arca) is active, tradable and fractionable, with daily bars from 4 January 2016. Its median traded value over the last 250 sessions is about $3.9 billion a day. No GLD backtest or return was looked at before these rules.

The free long history. The World Bank's monthly gold prices (Pink Sheet, release of 2 October 2026, file SHA-256 beginning ea1c3508), January 1960 to September 2026, in dollars an ounce. They are averages over each month, not month-end prices.

Expectation, stated before the test. As in round 3: E1 will probably beat the 60/40 on 2017–2026 Alpaca data, because gold quadrupled in it. The long history decides whether that is gold's recent run or a lasting gain from diversification; gold's 1980–2001 fall is in its first half.

Fixed rules: gold

  • Portfolio. The live 60/40 with a gold sleeve of weight g, taken equally from stocks and bonds: SPY at 60% − g/2, IEF at 40% − g/2, GLD at g. Idle equity goes to the T-bill sleeve (BIL).
  • The grid (three variants): g = 10%, 15% and 20%, that is 55/35/10, 52.5/32.5/15 and 50/30/20.
  • Size. The engine's standard sizing applies unchanged: the 60% position cap, the 8% volatility target, the drawdown ladder, the 2% rebalance band and the kill switch.
  • Orders. At the next session's opening auction, as for the live 60/40. The standard 5 bps per equity fill.
  • Test. flask validate gold --start 2017-01-01 --end 2026-10-23, with the standard walk-forward, in excess of T-bills.
  • The comparison. flask validate benchmark on the same dates, as for D1 and D2.
  • Gate B on Alpaca data, all of:
  • walk-forward (out-of-sample) Sharpe ratio over T-bills above the benchmark's;
  • out-of-sample maximum drawdown no deeper than the benchmark's;
  • deflated Sharpe ratio ≥ 0.95, probability of backtest overfitting ≤ 0.20, total return above T-bills' at 3× costs, parameter stability ≥ 0.5.
  • Gate B on the monthly long history. Computed outside the engine:
  • Returns by calendar month. Stocks, bonds and T-bills are the round-2 daily proxies (history.py: French's market, the 7- and 10-year par-bond average from FRED, French's 1-month T-bill), compounded by month. Gold is the change in the World Bank's monthly average price, less GLD's 0.40% a year (a twelfth each month); the other proxies carry no fee.
  • Portfolios, rebalanced to their fixed weights every month, without the volatility target or the ladder, the same for both: the 60/40, and E1 at the gold weight the validation selects (the report's selected parameters). The other two weights are reported too, for information.
  • Two halves: January 1975 to December 2000, and January 2001 to August 2026 (the last month every series covers).
  • In each half, E1 must have a Sharpe ratio over T-bills (monthly excess returns, annualized by √12) no lower than the 60/40's, and a maximum drawdown on monthly returns no deeper.
  • What decides. E1 replaces the 60/40 as the live benchmark only if it passes every part of gate B above and the operator confirms. Then the 60-day paper soak, trading GLD. Otherwise it is recorded as rejected, and the code stays as the gold candidate.
  • No other variant is tested on this data, whatever the result: no other gold weight or fund (IAU, GLDM), no gold timing, no other split between stocks and bonds.

Result: rejected (24 October 2026)

flask validate gold --start 2017-01-01 --end 2026-10-23, and the same for benchmark; then tools/research/gold_long_history.py on the World Bank workbook named in the rules. Nothing was changed between the runs.

Gate B on Alpaca data (walk-forward 2020 to October 2026). The validation selected the 20% gold sleeve (50/30/20).

E1 gold 60/40 Gate B
Sharpe ratio over T-bills 0.70 0.53 pass
Maximum drawdown −10.8% −14.0% pass
Deflated Sharpe ratio 0.997 pass (≥ 0.95)
Probability of backtest overfitting 0.54 fail (≤ 0.20)
At 3× costs 62.3% against T-bills' 20.3% pass
Parameter stability 0.96 pass (≥ 0.5)
Return a year 7.84% 6.34%
Volatility 7.3% 7.0%
2022 −8.4% −12.5%

Full-period Sharpe ratios of the three weights: 0.78 (10%), 0.85 (15%), 0.88 (20%). The kill switch tripped once out of sample, as for the 60/40.

Gate B on the monthly long history. Sharpe ratio over T-bills, maximum drawdown and return a year; fixed weights, rebalanced monthly; gold less GLD's fee.

1975–2000: Sharpe Max drawdown A year 2001–Aug 2026: Sharpe Max drawdown A year
60/40 0.65 −17.4% 13.69% 0.62 −29.1% 7.32%
Gold 10% 0.60 −15.9% 12.66% 0.73 −25.2% 7.87%
Gold 15% 0.56 −15.2% 12.13% 0.78 −23.5% 8.14%
Gold 20% (selected) 0.52 −15.4% 11.58% 0.83 −22.3% 8.40%
Gold alone −0.20 −64.9% 1.10% 0.74 −40.3% 11.04%

The verdict. Rejected: it fails two parts of gate B. - The first half of the long history. From 1975 to 2000 every gold weight earned less per unit of risk than the 60/40, and the more gold, the less. Gold returned 1.1% a year then, less than T-bills. The drawdowns were shallower in both halves. - The overfitting test: 0.54, against at most 0.20. The three weights differ little, so the in-sample winner often lost out of sample.

What the data says: gold has helped this portfolio since 2001, and hurt it in the 26 years before. Since gold's real price is now near its all-time high, the earlier half is the warning gate B was written to heed. As fixed in advance, no other gold weight, fund or timing rule is tested on this data. The code stays as the gold candidate.

Decision (24 October 2026): E3 and E2

The operator asked for E3 and E2 next, both judged on gate B. These rules were fixed and committed before any backtest of either. The 60/40's side of the comparison is the flask validate benchmark run of E1 (same dates, unchanged since).

What Alpaca has. Both funds are active, tradable and fractionable, with daily bars from 4 January 2016. Median traded value over the last 250 sessions: - DBC (Invesco DB Commodity Index Tracking Fund; futures on 14 commodities; expense ratio about 0.85%, from third-party listings, as Invesco's own page did not come up): about $22 million a day. - VEA (Vanguard FTSE Developed Markets ETF; developed markets outside the US, Canada and Korea included; expense ratio 0.03%, from Vanguard): about $826 million a day.

No backtest or return of either fund was looked at before these rules.

The free long histories, as downloaded on 24 October 2026: - Commodities: AQR's "Commodities for the Long Run: Index Level Data, Monthly", the equal-weight commodity futures portfolio's excess return, February 1877 to May 2025 (file SHA-256 beginning eeb89c65). - International stocks: French's "Developed ex US 3 Factors", monthly, July 1990 to August 2026 (Bloomberg data; Mkt-RF plus RF is the market's return in dollars; zip SHA-256 beginning 83eda24f).

Expectation, stated before the test. E3: mixed; commodities did well in 2021–22, when the 60/40 did badly, and poorly in 2014–15 and 2018. E2: US stocks led over both data sets, so E2 most likely fails gate B; it is tested because it has the strongest long-run evidence.

Fixed rules: commodities

  • Portfolio. The live 60/40 with a commodity sleeve of weight c, taken equally from stocks and bonds: SPY at 60% − c/2, IEF at 40% − c/2, DBC at c. Idle equity goes to the T-bill sleeve (BIL).
  • The grid (three variants): c = 5%, 10% and 15%, that is 57.5/37.5/5, 55/35/10 and 52.5/32.5/15.
  • Size, orders, costs, test and the Alpaca part of gate B: as in "Fixed rules: gold", with flask validate commodities --start 2017-01-01 --end 2026-10-23.
  • The monthly long history (gate B). As for gold, except:
  • commodities are AQR's equal-weight excess return plus the month's T-bill return, less DBC's 0.85% a year (a twelfth each month). AQR's index holds many commodities at equal weights; DBC holds 14 and leans to energy. The check tests the asset class, not the fund;
  • the halves are January 1975 to December 2000, and January 2001 to May 2025 (AQR's last month).
  • No other variant is tested on this data, whatever the result: no other weight or fund (PDBC, BCI, GSG), no timing.

Fixed rules: international

  • Portfolio. The live 60/40 with a share f of its stocks abroad: SPY at 60% × (1 − f), VEA at 60% × f, IEF at 40%. Idle equity goes to the T-bill sleeve (BIL).
  • The grid (three variants): f = a third, a half and two thirds, that is 40/20/40, 30/30/40 and 20/40/40 (SPY/VEA/IEF).
  • Size, orders, costs, test and the Alpaca part of gate B: as in "Fixed rules: gold", with flask validate international --start 2017-01-01 --end 2026-10-23.
  • The monthly long history (gate B). As for gold, except:
  • international stocks are French's developed ex-US market return (Mkt-RF plus RF), less VEA's 0.03% a year;
  • the data starts in July 1990, not 1975, so the halves are July 1990 to December 2007, and January 2008 to August 2026. This is the one change to gate B's long-history part, and it is fixed here, before the test.
  • No other variant is tested on this data, whatever the result: no other share or fund (EFA, VXUS, IEFA), no emerging markets, no currency hedge, no timing.

Result: E3 rejected (24 October 2026)

flask validate commodities --start 2017-01-01 --end 2026-10-23, then tools/research/sleeve_long_history.py commodities on the AQR file named in the rules. The 60/40 is E1's benchmark run. The validation selected the 15% sleeve.

Gate B on Alpaca data E3 60/40
Sharpe ratio over T-bills 0.56 0.53 pass
Maximum drawdown −10.9% −14.0% pass
Deflated Sharpe ratio 0.989 pass
Probability of backtest overfitting 0.85 fail
At 3× costs 50.5% against T-bills' 20.3% pass
Parameter stability 0.98 pass
Return a year 6.73% 6.34%
2022 −9.2% −12.5%

Full-period Sharpe ratios of the three weights: 0.72 (5%), 0.73 (10%), 0.74 (15%).

Long history 1975–2000: Sharpe Max drawdown A year 2001–May 2025: Sharpe Max drawdown A year
60/40 0.65 −17.4% 13.69% 0.59 −29.1% 6.91%
Commodities 5% 0.65 −16.5% 13.45% 0.59 −29.7% 6.83%
Commodities 10% 0.65 −15.5% 13.20% 0.58 −30.3% 6.75%
Commodities 15% (selected) 0.65 −14.6% 12.94% 0.57 −31.0% 6.66%
Commodities alone 0.07 −33.2% 6.91% 0.22 −61.9% 3.90%

Rejected, on two parts of gate B: a 0.85 probability of backtest overfitting (the three weights differ by 0.02), and, since 2001, a lower Sharpe ratio and a deeper drawdown than the 60/40. Commodities cut the 60/40's drawdowns before 2001 and in 2022, and cost it return in between; net of DBC's fee they added nothing. The code stays as the commodities candidate.

Result: E2 rejected (24 October 2026)

flask validate international --start 2017-01-01 --end 2026-10-23, then tools/research/sleeve_long_history.py international on the French file named in the rules. The validation selected a third abroad.

Gate B on Alpaca data E2 60/40
Sharpe ratio over T-bills 0.39 0.53 fail
Maximum drawdown −12.3% −14.0% pass
Deflated Sharpe ratio 0.961 pass
Probability of backtest overfitting 0.09 pass
At 3× costs 37.9% against T-bills' 20.3% pass
Parameter stability 0.86 pass
Return a year 5.41% 6.34%

Full-period Sharpe ratios: 0.57 (a third abroad), 0.49 (half), 0.43 (two thirds).

Long history Jul 1990–2007: Sharpe Max drawdown A year 2008–Aug 2026: Sharpe Max drawdown A year
60/40 0.67 −20.6% 9.79% 0.70 −28.1% 8.12%
A third abroad (selected) 0.64 −19.7% 9.20% 0.60 −29.6% 6.95%
Half abroad 0.60 −19.5% 8.88% 0.54 −30.3% 6.36%
Two thirds abroad 0.55 −19.7% 8.55% 0.47 −31.1% 5.76%
Developed ex-US alone 0.29 −45.6% 7.41% 0.31 −53.2% 5.36%

Rejected, as expected before the test: a lower Sharpe ratio than the 60/40 on Alpaca data and in both halves of 1990–2026, and a deeper drawdown since 2008. The more abroad, the worse. This says that US stocks beat the rest of the developed world over these 36 years, not that diversifying abroad cannot pay over a century; but gate B judges the data we can test. The code stays as the international candidate.

Where round 3 leaves the 60/40

Three sleeves, each with real evidence behind it, and none beat the plain 60/40 on gate B: - gold helped since 2001 and hurt before; - commodities cut drawdowns in inflationary years and cost return the rest of the time; - international stocks trailed US stocks throughout the testable data.

The live engine keeps the 60/40 with its idle cash in T-bills.