You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Copy file name to clipboardExpand all lines: README.md
+64-24Lines changed: 64 additions & 24 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -50,11 +50,13 @@ repeatedly challenging attractive backtests and keeping the failed tests.
50
50
inconclusive. Negative results were retained rather than blended into an
51
51
ever-larger strategy.
52
52
[Explore the dated experiment archive](https://github.com/HanSun103/AI-Driven-Portfolio-Optimization-Backtesting-System/tree/archive-experiments/docs/experiments)
53
-
5.**The live horizon was redesigned.** The one-session monitor accumulated
54
-
observations quickly but tested the wrong economic horizon and created
55
-
extreme turnover. A matched historical sweep identified a 10-to-20-session
56
-
plateau, with 20 sessions as the leading, but not uniquely proven, candidate.
57
-
[Read the horizon decision](docs/experiments/2026-07-28-live-horizon-decision.md)
53
+
5.**The live horizon was redesigned, and its historical estimate is being
54
+
re-audited.** The one-session monitor accumulated observations quickly but
55
+
tested the wrong economic horizon and created extreme turnover. The original
56
+
matched horizon sweep used the now-invalidated price panel. The active
57
+
5/10/20-session comparison remains useful for collecting prospective
58
+
evidence, but 20 sessions is provisional until the corrected sweep is run.
59
+
[Read the data-integrity audit](docs/experiments/2026-07-30-price-repair-oos-audit.md)
58
60
6.**The project is now a focused paper-live experiment.** The active system
59
61
refreshes real market/news data, applies strict FinBERT NLP, independently
60
62
tunes Ridge and XGBoost, freezes daily forecasts, and tracks separately
@@ -64,26 +66,29 @@ repeatedly challenging attractive backtests and keeping the failed tests.
64
66
The long research history remains available through the links above; the rest
65
67
of this README describes only the final active system and its current evidence.
66
68
67
-
### Ridge, XGBoost, and ensemble development backtest
69
+
### Corrected Ridge, XGBoost, and ensemble development backtest
68
70
69
-
This is the complete portfolio comparison used by the current README
70
-
visualization. It covers 182 weekly observations from 2020-01-10 through
71
-
2023-06-30. Each model holds 40 equal-weight stocks with a 25% sector cap.
72
-
Results include 8 basis points per one-way traded weight and a $10 fixed fee
73
-
per trade.
71
+
An audit on July 30 found that the historical price-repair merge could mix
72
+
split-adjusted and unadjusted rows with the same index. The July 20 and July 27
73
+
tables were invalidated. The table below is the corrected replay after rebuilding
74
+
prices, sectors, labels, current features, and Alpha158 factors, then refitting
75
+
the saved fold specifications. It covers 182 weekly observations from
76
+
2020-01-10 through 2023-06-30. Each model holds 40 equal-weight stocks with a
77
+
25% sector cap. Results include 8 basis points per one-way traded weight and a
78
+
$10 fixed fee per trade.
74
79
75
80
| Model and portfolio | Model construction | Mean rank IC | Net cumulative return | Net CAGR | Sharpe | Maximum drawdown |
76
81
|---|---|---:|---:|---:|---:|---:|
77
-
| Ridge | Linear rank model | 0.00560|103.88% |22.57% | 0.77| -27.37% |
| Ridge-XGBoost ensemble | Expanding prior-fold blend; 50/50 in the first fold, then 25% Ridge and 75% XGBoost | 0.00188|110.05% |23.62% | 0.78| -35.92% |
82
+
| Ridge | Linear rank model | 0.02027|66.96% |15.77% | 0.61| -40.59% |
| SPY benchmark | Buy and hold with the experiment's 0.5% annual management fee | N/A | 39.58% | 10.00% | 0.54 | -34.12% |
81
86
82
-
The ensemble improved the top-40 excess-return point estimate over Ridge but
83
-
did not beat XGBoost. Its active-return confidence interval crossed zero and
84
-
its shuffled-score information-ratio p-value was `0.089`, so the experiment
85
-
did not establish a promotion claim.
86
-
[Read the Ridge-XGBoost rank ensemble experiment](docs/experiments/2026-07-27-ridge-xgb-rank-ensemble.md)
87
+
Ridge is the strongest corrected historical model. XGBoost no longer supports
88
+
the earlier claim of stronger top-tail selection. The active-return confidence
89
+
intervals still cross zero, and the final chronological fold trails SPY, so
90
+
this remains development evidence rather than a promotion claim.
91
+
[Read the price-repair and OOS evidence audit](docs/experiments/2026-07-30-price-repair-oos-audit.md)
87
92
88
93
## Architecture
89
94
@@ -161,14 +166,19 @@ flowchart TD
161
166
162
167
| Finding | Current evidence | Boundary |
163
168
|---|---|---|
164
-
| Winner selection is more promising than raw-return prediction |Repaired weekly OOS rank IC `0.0059`; top-40 excess `0.1686%` per week; shuffled-score p-value `0.0099`| Average signal is thin, unstable by year, and the active-return confidence interval crosses zero |
169
+
| Winner selection is more promising than raw-return prediction |Corrected Ridge rank IC `0.02027` and top-40 excess `0.2146%` per weekly observation| Average signal is thin, unstable by year, and the active-return confidence interval crosses zero |
165
170
| Sentiment appears useful | Technical-plus-sentiment point estimates exceeded technical-only at 5, 10, and 20 sessions | The comparison does not yet prove a causal NLP increment; prior robustness gates were inconclusive |
166
-
|Twenty sessions is the leading horizon | Full-OOS annualized active point estimates: 5d `4.53%`, 10d `6.65%`, 20d `8.59%`| Twenty versus ten sessions was not statistically distinguishable (`t = 0.33`)|
171
+
|The best horizon is unresolved | The original 5/10/20-session sweep was invalidated by the July 30 price-repair audit | Keep collecting all three prospective arms and rerun the matched historical sweep on corrected data|
167
172
| Rebalancing behavior is model-specific | Over six July 20-28 sessions, freezing improved Ridge net return by `3.93` points; daily replacement improved XGBoost by only `0.53` points net | Six sessions cannot determine permanent policy; a preregistered buffer comparison is required |
173
+
| Negative selected stocks persist, while severe losses cluster in stressed markets | Ridge sign false positives occur in every half-year; 2020 H1 and 2022 H1 contain `70.43%` of severe observations and `75.79%` of severe-loss drag | The realized market state is explanatory, not available at decision time; the causal SPY regime does not reliably identify losing weeks |
174
+
| A bounded tail veto can reduce direct severe-loss drag | The fully invested historical A/B treatment reduced severe-loss contribution by about `8.1%` relative, with a paired interval entirely below zero | CVaR improvement remained uncertain, return non-inferiority failed its interval, active arms required a `30%` veto budget, and many rejected stocks were winners |
168
175
| Live operation is feasible | Current market/news refresh, strict local FinBERT, purged tuning, frozen forecasts, and immutable manifests completed | The redesigned live forecasts have not matured; there is no live-return claim yet |
0 commit comments