M3
The mathematics
M3 is not a new regression. It shrinks the M1 closing-level forecast halfway toward the random-walk benchmark:
Using \(\widehat S_t^{M0}=S_{t-1}\),
Why shrink?
If M1 overreacts to a noisy pre-open futures move, averaging it with the no-change benchmark can reduce forecast variance. The 50/50 weight was fixed rather than tuned after observing the tournament.
Historical out-of-sample forecasts
Each point below is a rolling pseudo-real-time forecast from the historical model tournament. Each forecast was generated using only observations available before its forecast date.
Click to zoom · drag left/right to pan · pinch on trackpad or touchscreen · double-click to reset
Hover or tap the chart to inspect the forecast and actual Nasdaq Composite close. This is historical tournament performance, not a live Graham Says forecast.
Track the experiment as it happens
Every forecast below was frozen before the US cash market opened. Once the Nasdaq Composite closes, the same row is updated with the observed close and absolute forecast error. Historical tournament observations are not mixed into this prospective record.
| Date | Forecast | Actual close | Absolute error | Status |
|---|---|---|---|---|
| Waiting for the first prospective forecast. | ||||
Common tournament framework
All five models were evaluated on the same historical pseudo-real-time out-of-sample dates. The target variable was the Nasdaq Composite daily log return:
The main pre-open futures signal was
For LAD models, the fitted conditional median return \(\widehat r_t\) was transformed back into a closing-level forecast using
How the tournament avoided look-ahead
For every historical test date, the target observation was excluded from estimation. Training began with 504 eligible observations, expanded until 756 observations were available, and then became a fixed-length 756-observation rolling window.
All five models were scored on the same common sample. The selection metric was mean absolute error:
Lower MAE is better.