I’d like to support dynamic universes in several forms, but I haven’t been able to determine the best way to implement them yet.
- Point-in-Time Index Universe
A universe that updates historically based on actual index membership at each rebalance date.
Examples:
- S&P 500 constituents changing quarterly as they did in reality
- Russell 1000 / Russell 2000 reconstitutions
- Nasdaq-100 membership changes over time
The universe should automatically reflect the correct constituents before each rebalance, training window, and backtest date.
- Point-in-Time Exchange Universe
A universe based on exchange listings that updates historically over time.
Example:
- All stocks listed on NASDAQ, with membership determined point-in-time (including listings, delistings, transfers, etc.)
This should also update prior to rebalances, training windows, and any historical evaluation date.
- Rule-Based / Filter Universe
A universe defined by dynamic screening rules, such as:
- Average Daily Dollar Volume (ADV) > $5M
- Price > $10
Ideally this would be a first-class universe definition rather than requiring manual dataframe filtering inside the price-to-features pipeline.
Core Question
What is the recommended / native way to implement these types of dynamic universes so they integrate cleanly with rebalancing, training windows, and historical simulations?