1. The test
Kronos is a decoder-only transformer for financial time series. Its one credible published edge is realized volatility. I pre-registered a falsification before running anything: Kronos-small zero shot against the log heterogeneous autoregressive regression of Corsi 2009 fitted on Parkinson range volatility. The decision rule was locked in the same document, and any outcome other than a clean sweep of its three conditions rejects the model.
Table 1. The pre-registration, filed 21 July 2026, before the first run.
| Item | As locked |
|---|---|
| Challenger | Kronos-small, AAAI 2026, 32.3 thousand GitHub stars at 21 July 2026 |
| Pretraining corpus | 12 billion candlesticks |
| Edge its paper claims | Realized volatility, R-squared 0.249 |
| Incumbent | Log-HAR, Parkinson range volatility, Corsi 2009 |
| Universe | Twenty US large caps plus SPY, the S&P 500 exchange-traded fund |
| Target | Realized volatility five days ahead |
| Forecast origins | 1 August 2025 to 30 June 2026, eleven months |
| Model's arXiv posting | 2 August 2025 |
| Forecasts | 4,809 |
| Sampled paths per origin | 15 |
| Kronos wins only if | Pooled QLIKE improves, pooled DM p below 0.05, positive median improvement per ticker |
| Drop the 21 forecasts from the one overlapping day | DM t = -12.3, verdict unchanged |
The start was locked one calendar day before the model's arXiv posting because its training window is undisclosed. Any earlier origin is potentially in-sample for Kronos and out-of-sample for HAR.
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. I pulled the sampled paths for each origin, computed Parkinson volatility on each path's own generated highs and lows, and took the median, with random seeds pinned per ticker and origin.
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, and the foundation model's loss is roughly four times the regression's. Under the locked decision rule the Kronos volatility hypothesis 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.
When a training window is undisclosed, the honest backtest starts the day after release, and everything before that date is a claim about memory. That constraint is why this verdict took the better part of a year to become available, and that window is short. I publish it with the caveat attached rather than wait for a cleaner one.
| Setting | Value |
|---|---|
| Kronos-small context window | 400 daily bars |
| Sampling temperature | 1.0 |
| Top-p | 0.9 |
| Benchmark refit start | 2015, refit monthly |
5. Scope
Zero shot, daily bars, repository default sampling. I did not test intraday bars, where the model's pretraining is densest, so this verdict covers realized volatility from daily bars and nothing wider. A fine-tuned variant 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 have already locked.
Educational research only. Not investment advice.