Get in touchReach out on LinkedIn

Beaten by Four Parameters

BlueShip Research
Working Paper No. 26 · 4 August 2026 · a pre-registered falsification of a foundation model
0.148 log-HAR, 4 parameters 0.591 Kronos-small, 24.7M parameters Pooled QLIKE loss on variance over five days. Lower is better. HAR won on 21 tickers of 21.

In one line: I ran a 24.7 million parameter foundation model, pretrained on 12 billion candlesticks, against a four parameter regression from 2009. The regression won on 21 tickers out of 21. Pooled QLIKE 0.148 against 0.591, Diebold-Mariano t = -12.4.

1. The test

Kronos is a transformer for financial time series, decoder only, published at AAAI 2026, with 32.3 thousand GitHub stars. Its one credible published edge is realized volatility, where the paper reports an R-squared of 0.249.

I pre-registered a falsification on 21 July 2026, before running anything. Kronos-small run zero shot against a log-HAR regression on Parkinson range volatility, the Corsi 2009 specification. Twenty US large caps plus SPY. Realized volatility five days ahead. The decision rule was locked in the same document: Kronos wins only if pooled QLIKE improves with pooled DM p below 0.05 and a positive median improvement per ticker. Any other outcome rejects it. 4,809 forecasts.

Forecast origins run 1 August 2025 to 30 June 2026, strictly after the model's arXiv release on 2 August 2025. Its training window is undisclosed. Any earlier origin is potentially in-sample for Kronos and out-of-sample for HAR, which is not a test, it is a handicap in the wrong direction.

2. The method note that decides the answer

The repository's predict() averages its Monte Carlo paths before returning them. Realized volatility computed on an averaged path is biased low, because averaging cancels the variation being measured.

So I did not use it. I pulled the 15 sampled paths per origin, computed Parkinson volatility on each path's own generated highs and lows, and took the median. Seeds pinned per ticker and origin. Anyone who calls predict() and measures volatility on the output is measuring the model's conditional mean, and will report a number that flatters neither side honestly.

3. What happened

Log-HAR Kronos-small
Free parameters 4 per ticker 24,700,000
Pooled QLIKE (variance over 5 days) 0.148 0.591
Tickers won 21 of 21 0 of 21
Won significantly 19 0

Pooled Diebold-Mariano t = -12.4. The foundation model's loss is roughly four times the regression's. Under the locked decision rule, kronos-vol is rejected and HAR survives.

4. What it leaves behind

Pretraining breadth is not a substitute for a conditional mean aimed at the target. Volatility is persistent, HAR is three lagged averages of exactly that persistence, and it is fitted on the asset's own history. Kronos has to infer the same structure from a general representation of everything. Four numbers estimated on the right thing beat 24.7 million estimated on everything.

The second rule is about evaluation rather than models. When a model's training window is undisclosed, the honest backtest starts the day after its release, and everything before that date is a claim about memory. That constraint is why this verdict needed eleven months of out-of-sample data to become available at all, and eleven months is short. I am publishing it with that caveat attached rather than waiting for a cleaner one.

5. Scope

Zero shot, daily bars, repository default sampling. I did not test intraday bars, which is where the model's pretraining is densest and where its paper does some of its evaluation, so this verdict covers realized volatility from daily bars and nothing wider.

A variant with fine-tuning is a separate study with its own pre-registration and I am not running it. The 2025 and 2026 literature already reports that fine-tuning does not rescue foundation models for time series on equities, and re-running this one with tuned temperature, top-p or context length would be metric shopping against a decision rule I already locked.


Method. Full pre-registration at docs/kronos_vol_prereg.md, filed 2026-07-21 before the first run. Target is realized volatility over five days from Parkinson daily variance, annualized. HAR is a log-HAR fitted on an expanding window, with daily, weekly and monthly averages, refit monthly from a 2015 start, with a smearing correction for the log transform. QLIKE is computed on variance, not on volatility. Diebold-Mariano uses HAC lag 5. Kronos-small runs on the repository code after its April 2026 leakage fix, context 400 daily bars, horizon 5, temperature 1.0, top-p 0.9, 15 paths per origin. Every statistic is computed by deterministic Python. The universe is survivorship biased, which is symmetric across both models but still makes raw levels upper bounds.

Educational research only. Not investment advice.

Educational research only. Not investment advice.