Create economically interpretable predictors using only information available at each decision date, while keeping feature construction separate from future labels.
technical.py: returns, momentum, RSI, MACD, Bollinger position, ATR, volatility, gaps, and volume ratios.cross_sectional.py: rolling beta, residual return, idiosyncratic volatility, point-in-time sector-relative ranks, sector confidence, and sector-classification margin.macro_features.py: VIX, rates, term spread, market momentum, and regime state broadcast to each ticker-date.nlp_features.py: lagged sentiment, mentions, novelty, and recency features.alpha158.py: the 158 public Qlib OHLCV factors across candlestick, trend, regression, position, price-volume correlation, and volume-change families. The public price panel has no exchange VWAP, soVWAP0uses a declared OHLC-mean proxy.residual_rank_dataset.cross_sectionalize_predictors: converts stock features to same-date cross-sectional ranks. Macro state enters through interactions with stock exposures rather than through values that are identical for every stock.
The live residual-rank path supplies effective-dated sector context to the cross-sectional
builder. It does not reuse the legacy current-sector map for historical rows. returns_1d is
retained as risk_return_1d for covariance estimation but is excluded from model feature
selection.
- The frozen v4 Ridge model uses 40 stable predictors selected across nested outer folds.
- Five frozen predictors are sentiment/event variables.
- Features include short and medium momentum, volatility, technical state, residual return, macro-exposure interactions, and NLP state.
- All weekly predictors align with a five-session future residual-rank target.
- Candidate split features are generated from cached completed corporate actions but remain outside model selection until their event-study gate passes.
- Historical fundamentals, analyst revisions, options surfaces, and point-in-time accounting data are not yet part of the validated ranking pipeline.
- Feature stability has been evaluated mainly through selection frequency, not causal robustness.
- Sector proxies and incomplete sentiment coverage can introduce structured missingness.
- Adding large numbers of correlated technical indicators can increase selection noise.
- Alpha158 was designed and benchmarked on Chinese A-shares; its U.S. value must be established out of sample rather than inferred from Qlib's published CSI300 result.
- Add features selectively, with economic rationale and point-in-time provenance.
- Measure feature stability by period, regime, and universe coverage.
- Retain SHAP/count-grid selection only inside nested training folds.
- Compare the current 40-feature set with smaller stable sets using untouched validation periods.
- Add neutral missingness indicators rather than allowing missing coverage to resemble sentiment.