Use case · Screen
Run the universe overnight — 8 strategies × 500 names
UniverseScreener composes the construct/rank pipeline across a watchlist or full universe. Embarrassingly parallel — one chain per name, one chain per worker — it returns a typed report with the top-K per strategy, the top-K overall, and a per-name explainability index.
When to use it
- You want to screen a whole watchlist across many strategies in one batch, overnight or on demand.
- You want deterministic, reproducible output you can audit name by name.
- You want the construct/rank pipeline fanned out in parallel without writing the orchestration yourself.
Example
use ferro_spread::{UniverseScreener, ScreenerReport};
let screener = UniverseScreener::new()
.universe(&watchlist_500)
.strategies(&[
SpreadStrategy::BullCallDebit,
SpreadStrategy::BearPutDebit,
SpreadStrategy::IronCondor,
SpreadStrategy::ShortStrangle,
SpreadStrategy::BullPutCredit,
SpreadStrategy::BearCallCredit,
SpreadStrategy::CallCalendar,
SpreadStrategy::PutCalendar,
])
.ranker(&ranker)
.top_k(10);
let report: ScreenerReport = screener.run().await?;Notes
- The run is deterministic: the same inputs always produce the same ranking, so a screen is reproducible across workers.
- The report carries top-K per strategy, top-K overall, and a per-name explainability index so you can audit why each name made or missed the cut.
- Build the
rankerargument with rank by EV.
Scale
One chain per name, one chain per worker — the pipeline is embarrassingly parallel, so throughput scales with cores rather than requiring a bespoke scheduler.