Case Study
:
Backtests
A language model knows everything it was trained on, up to its cutoff date. For a model trained in 2026, that includes everything written about 2015 after 2015: which stocks recovered, which defaulted, which narratives held. Use that model to score text from 2015, and all of that later knowledge comes with it. The backtest is contaminated before the first trade. The alpha it measures is hindsight, not signal.
This lookahead bias cannot be removed with a prompt, because the information sits in the model's weights. ChronoLLM removes it at the training stage instead. The model ships as dated vintages: separate versions, each trained only on text available up to its cutoff date. Match each period of your backtest to its vintage, and every headline, filing, and transcript is scored by a model that knows only what a reader could have known on that date.
Frozen vintages and a complete audit trail
Vintages are frozen checkpoints and once released, the weights never change, and a vintage is never silently updated. The model that scores your backtest today is the same model a reviewer can inspect next year. Hosted model APIs do not work this way: their models are updated on the provider's schedule, and the version you tested is not guaranteed to be the version you are running. Each run also records the vintage, prompt, and configuration that produced it, so any result can be regenerated and reviewed, and each backtest keeps a record of which vintage scored which period.
None of this changes how you backtest. ChronoLLM scores the text, your engine trades the signal, and the model is the only part of the pipeline that changes. Two practical limits are worth stating. Outputs can vary slightly across different hardware, as with any large language model, so reproducibility is provided at the run level, through pinned weights and logged configuration. And vintages exist only from the start of the training corpus onward, so check that coverage matches your backtest window.