Keep research decisions auditable as the project expands. Every experiment should state what was known beforehand, what may be tuned, what period is untouched, which controls are mandatory, and what result would count as failure.
- Write a dated hypothesis and manifest.
- Declare universe, target, features, model candidates, portfolio policy, costs, benchmarks, statistics, and success gates.
- Tune only inside nested, purged development data.
- Freeze the model artifact, feature list, portfolio rule, and code/data hashes.
- Acquire and audit confirmation inputs without synthetic substitution.
- Run confirmation once.
- Report a failed gate as failure; never tune the same period into a pass.
- Keep the 2026-H1 lockbox sealed until a new contract is ready.
| Version | Main question | Outcome | Evidence status |
|---|---|---|---|
| Core weekly v1 | Does the original ten-stock optimizer work after accounting fixes? | Accounting and timing defects corrected | Superseded |
| Residual rank v2 | Can ML rank five-session sector-neutral returns? | Small positive IC; shuffle p=0.327 | Development |
| Sparse rank v3 | Can ML choose 20-50 names? | Stronger development shuffle result, but 96.9% turnover | Post-hoc development |
| Turnover v4 | Can a frozen hold zone control costs? | Turnover reduced to about 5% weekly | Development success |
| Public confirmation v4 | Does frozen v4 beat matched SPY out of sample? | Positive point estimate; 2 of 4 gates failed | Failed confirmation |
| Topic features v5 | Can point-in-time topics become rank-model inputs? | Expanded NMF covers 313 eligible names but only 13.95% of rows; 50% gate failed | Gated development baseline |
| Timestamped news v5 | Does exact-time FinBERT news earn next-open residual returns? | Five-session incremental return -44.62 bps; both placebos fail | Failed development purchase gate |
| Weekly slow NLP v5 | Do sentiment and topics add to one fixed numeric forecast? | Combined +1.71% annualized, but 95% CI crosses zero and shuffle p=0.366 | Failed robustness gate |
| Pair trading v5 | Can a point-in-time pair sleeve add net return? | +0.038% annualized; timing p=0.0099 but random-pair p=0.218 and CI crosses zero | Failed activation gate |
| Fama-French v6 | Does an FF3-neutral label improve fixed Ridge selection, and is return factor alpha? | Better point estimate, but shuffle p=0.366, incremental CI crosses zero, and alpha p=0.768 | Target replacement rejected |
| Final reference v1 | Can all frozen evidence be packaged under one fail-closed contract? | Reproduced 12.19% development CAGR and 11.34% observed-confirmation CAGR without opening lockbox | Built research reference |
| Smart universe v7 | Can transparent rules narrow 250 names to 120 before Ridge? | Beat random subsets, but lost 6.57% annualized versus full equal weight and failed 4/5 gates | Activation rejected |
| Repaired rank-40 v8 | Does repaired price coverage support weekly ML winner selection? | Full weekly rank-40 earned 37.22% CAGR; rank IC 0.0059; smart-universe filter did not improve it | Promising development direction |
| Survival filter v8 | Can a rare-event model avoid likely S&P 500 exits before rank-40 selection? | Top 10% risk bucket caught only 17.07% of future-exit rows; shuffled placebo beat the real filter | Activation rejected |
| Ensemble v10 | Do independently tuned Ridge, LightGBM, and XGBoost combine into stronger weekly rankings? | XGBoost top-40 point estimate improved, but CI crossed zero; LightGBM and ensemble failed OOS | Ensemble rejected |
| Gate | Rule | Result | Pass? |
|---|---|---|---|
| Rank IC | Greater than 0 | +0.016 | Yes |
| Annualized net active return | Greater than 0 | +0.31% | Yes |
| Shuffled-score p-value | At most 0.10 | 0.198 | No |
| 95% active-return lower bound | At least 0 | -12.79% | No |
The pair sleeve remains disabled after failing its own confidence-bound and random-pair gates. The 2024 through 2025 Q1 period is now observed and cannot be reused as untouched confirmation after changing the model.
- Resolved YAML experiment manifests.
- Coverage and readiness audits.
- Frozen model and metadata hashes.
- Persisted OOS forecasts and selected holdings.
- Weekly net returns and execution attribution.
- Shuffled permutation distributions and bootstrap intervals.
- Dated Markdown experiment logs under
docs/experiments.
python -m src.cli run-public-confirmation-v4 --help
python -m src.cli run-lockbox-test --help
python -m src.cli run-revealing-controls --help
python -m src.cli build-topic-features --help
python -m src.cli run-timestamped-news-event-study --help
python -m src.cli run-weekly-nlp-incremental-v5 --help
python -m src.cli run-pair-trading-v5 --help
python -m src.cli download-fama-french --help
python -m src.cli run-fama-french-v6 --help
python -m src.cli build-final-version --help
python -m src.cli run-smart-universe-v7 --help
python -m src.cli run-slow-smart-universe-v8 --help
python -m src.cli evaluate-rank-model --help
python -m src.cli run-survival-filter-v8 --help
python -m src.cli run-double-ensemble-v10 --help
python -m src.cli evaluate-persisted-double-ensemble-v10 --help
python -m src.cli run-live-forward-daily --help
python -m src.cli report-live-intraday --help
python -m src.cli build-live-dashboard --help
python -m src.cli publish-live-dashboard --help
python -m src.cli validate-live-dashboard-site --helpThe daily live-forward workflow retrains Ridge and XGBoost independently using only information available before the decision timestamp, freezes each top-40 selection, evaluates previously frozen portfolios, records deterministic model-overlap and day-over-day stability diagnostics, and rebuilds the dashboard. See the operating guide for timing rules, artifacts, formulas, and interpretation boundaries.
The daily command also regenerates the sanitized site/ bundle used by GitHub Pages. The public
publisher exposes only allowlisted display fields and validates the bundle before it can be
deployed. See the deployment guide.
- Create one resolved manifest consumed by every pipeline stage.
- Persist environment and package versions with every experiment.
- Add resume support for permutations and nested folds.
- Add automated documentation checks that compare reported metrics with JSON artifacts.
- Follow the staged v5 proposal: transparent selector bake-off, point-in-time topic test, structured LLM incremental test, independent pair test, and only then a combined contract.
- Project status
- V2 log
- V3 log
- V4 log
- Proposed next research direction
- Topic-features v5 baseline
- Timestamped-news matched event study v5
- Weekly slow-NLP incremental test v5
- Point-in-time pair-trading development test v5
- Fama-French target and attribution study v6
- Transparent smart-universe experiment v7
- Repaired rank-40 selection evidence
- Survival-risk filter diagnostic
- Model-specific tuning and ensemble v10
- Final research-reference version