Plain English
This page describes what the platform is trying to do and how it will judge whether it worked. It is written to be readable by someone who has never used a forecasting model.
The return of SPY— the SPDR S&P 500 ETF Trust, a fund that tracks the S&P 500 — over the next five tradingdays. Trading days, not calendar days: markets are shut at weekends and on public holidays, so “five days ahead” and “five trading days ahead” are different dates roughly every other week.
Returns are recorded as log returns, meaning the natural logarithm of the ending price divided by the starting price. The reason is practical: log returns add up across periods, and percentage changes do not. A 50% gain followed by a 50% loss leaves you down 25%, not level — the equivalent log returns simply sum correctly.
The baseline model predicts zero movement, every time. It reads nothing and learns nothing.
It is also genuinely hard to beat. Decades of published research find that short-horizon index movements are very close to unpredictable, so “no change” is a strong guess. Every model on this platform is reported side by side with that baseline, permanently. A model that cannot beat it has not earned any confidence, however sophisticated it is — and the honest result of this project may well be that none of them do.
For the up-or-down question, the bar is not 50% either. The index rises slightly more often than it falls, so always guessing “up” scores roughly 54%. That is the number to beat.
Look-ahead bias means accidentally letting a model see information from the future. It is the reason most amateur backtests show spectacular returns that never materialise in practice.
A concrete example: compute a 20-day average that includes today’s closing price, then use it to predict today’s move. You have used today to predict today. The backtest looks brilliant and the model is worthless.
The defence is built into the database itself. Every observation stores two timestamps: when it happened, and when it could first have been known. A daily bar for Monday is stamped Monday, but nobody could act on Monday’s closing price until the market closed. All training data is selected on the second timestamp. Experiment records additionally carry a database constraint requiring the training, validation and test periods to run strictly forwards in time and never overlap, so the common shortcut of a random train/test split — which scrambles time and leaks the future into the past — cannot be recorded at all.
Each forecast is written down before the answer is knowable, and is never revised. Five trading days later the actual return is recorded alongside it. Because the prediction cannot be edited after the fact, the score cannot be quietly improved.
Every input is derived from SPY’s own daily bars — no news, no macroeconomic series, no options data. They fall into five families: lagged returns, volatility, trend and momentum, range and volume, and calendar effects.
The set is small deliberately. With roughly 330 non-overlapping five-day windows in six and a half years of history, every extra feature buys more opportunity to fit noise. A model with 33 inputs and 330 samples already has ample freedom to look impressive in-sample and mean nothing out of sample.
available_at — the discipline that makes this checkableEvery stored observation carries two timestamps: when it happened, and when it could first have been known. A daily bar for Monday is stamped Monday, but its closing price was not knowable until the market shut at 16:00 New York time.
Each feature records the availability of the newest bar that went into it, so a three-day-lagged return is correctly marked as having been knowable two sessions earlier than a 20-day moving average computed on the same row. Training data is selected on that column, never on the observation date. Automated tests assert the property directly: truncating the price series must not change any feature value that survives — if a feature peeked forward, it would.
Data is split by time, never shuffled: an early training period, a walk-forward validation period cut into expanding folds, and a final test period held back entirely.
A clean date cut is not sufficient on its own, because a five-day target straddles the boundary. The label for the last training day depends on prices inside the validation period, so the final five samples before every boundary are purged — dropped from fitting, not from the data.
The test period is scored once, after the winning model has already been chosen on validation. Looked at twice and adjusted, a test set has quietly become a second validation set, and the number it reports stops meaning anything. Scaling statistics are likewise learned on the training fold alone.
The prediction interval is built from the model’s own past errors: the 5th and 95th percentiles of its residuals on data it was not trained on. It assumes no particular distribution, and it is never calibrated on the test period — doing so would make its coverage true by construction and say nothing about the future.
It is a fixed width, which is a real limitation: market volatility clusters, so the interval is too wide in calm periods and too narrow in turbulent ones — exactly when being wrong costs most.
The indicative price path is the predicted return restated in dollars, because a price is easier to read than a log return. It is not a prediction that the price will be that number.
Milestone M5. SPY daily bars from 2020 are ingested, 33 features are computed with point-in-time correctness, an immutable dataset version is frozen and fingerprinted, and five models have been evaluated by walk-forward validation.
No learned model beat the naive baselines. Ridge regression scored a worse validation error than simply predicting zero, and the model currently published is the historical-mean baseline. That is a legitimate and entirely expected outcome for five-trading-day equity index returns — and it is the result this platform was built to be capable of reporting. The alternative, adjusting the setup until something looked like a win, would have produced a better-sounding number and a worthless one.
Everything here is the output of statistical models run over historical data, published for research and learning. It is not a recommendation to buy or sell any security, and no model on this platform has demonstrated an edge over doing nothing.