Status: draft for review; not active
Decision authority: none until thresholds and gates are frozen
Models: Ridge and XGBoost evaluated independently
Horizons: 5, 10, and 20 trading sessions
At each scheduled horizon-matched rebalance, should the strategy completely refresh its top 40, keep the existing holdings, or replace names only when the model's evidence exceeds a predeclared rank or score margin?
The July 20–28 live ablation motivates the question but cannot select the answer. It covers one starting portfolio and six completed sessions under the archived one-session model contract.
Every arm must use identical:
- decision dates and next-open fills;
- point-in-time liquid top-250 universe;
- model version, features, scores, and model-specific horizon;
- 40-name portfolio and 25% sector cap;
- 100% exposure and equal target weights;
- price data and corporate-action handling;
- transaction-cost model; and
- evaluation dates and missing-data rules.
Only the membership replacement policy may vary.
- Full refresh. Reconstruct the sector-capped top 40 from the current scores at every scheduled rebalance.
- Frozen holdings. Keep the previous names unless a hard eligibility or tradability rule requires removal.
- Rank-margin buffer. Retain an incumbent unless an eligible challenger outranks the exit candidate by more than a frozen number of ranks.
- Score-percentile buffer. Retain an incumbent unless the challenger's same-date score percentile exceeds the exit candidate by more than a frozen margin.
Hard membership deletion, delisting, completed acquisition, suspension, and other established tradability failures override every buffer.
Candidate rank and score margins remain proposals until reviewed. After the grid is frozen:
- select thresholds separately for Ridge/XGBoost and each horizon;
- use rolling temporal development folds only;
- purge by the matching forecast horizon;
- optimize a declared objective balancing gross active return and turnover;
- freeze the selected policy before prospective use; and
- never use the July 20–28 realized returns to choose a threshold.
The no-buffer full-refresh arm remains the default when no threshold passes.
For every model, horizon, policy, fold, and forward vintage, report:
- gross and net cumulative return;
- active return versus the eligible universe and SPY;
- turnover, trades, retention, additions, and removals;
- replacement-only return contribution;
- drawdown and return distribution;
- rank IC and top-40 forecast-cohort excess return;
- sector concentration and policy exceptions; and
- overlap-aware uncertainty.
A buffer may replace full refresh only when it:
- materially reduces turnover on temporal validation;
- does not materially degrade gross winner-selection active return;
- improves or preserves net return under the frozen cost model;
- is not driven by one fold, sector, or calendar offset;
- remains reproducible from frozen scores and artifacts; and
- survives a prospective paper-live period without threshold changes.
Ridge and XGBoost do not need to share a policy. A model-specific result must pass independently and remain separately reported.
Version 2 continues using full top-40 refresh only on the matching 5-, 10-, or
20-session schedule. It does not replace the strategic portfolio daily. The
manifest and dashboard label this scheduled full-refresh policy as
under_audit; buffer execution remains disabled.