Overview
Strategies
The SpreadBuilder constructs multi-leg spreads across the standard taxonomy plus custom legs, over the live IV surface from FerroRisk, with per-leg constraints applied at construction time.
The standard taxonomy
| Family | Description |
|---|---|
| Verticals | Call/put debit and credit spreads — directional, defined-risk. |
| Butterflies | Long, short, iron, and broken-wing butterflies. |
| Condors | Iron and regular condors — range-bound premium structures. |
| Calendars & diagonals | Time spreads across expiries, with optional strike offset. |
| Strangles | Short and long strangles for vol exposure. |
| Custom | Arbitrary multi-leg combinations with per-leg ratio support. |
The eight screener strategies
The universe screener composes the construct/rank pipeline across a fixed set of named strategies per name:
BullCallDebit·BearPutDebit— directional debits.BullPutCredit·BearCallCredit— directional credits.IronCondor·ShortStrangle— premium-selling, range-bound.CallCalendar·PutCalendar— time spreads.
Construction constraints
Feasibility is enforced at construction, not after ranking. A SpreadBuilder policy fixes the strategy and its per-leg constraints; infeasible combinations are pruned against the bid-ask grid before pricing:
use ferro_spread::{SpreadBuilder, SpreadStrategy};
let policy = SpreadBuilder::default()
.strategy(SpreadStrategy::IronCondor)
.iv_rank_floor(0.65) // regime gate
.target_pop(0.70) // 70% probability
.wing_width_pts(10.0) // $-space wings
.short_strike_delta(0.16); // ~1σ tails
let condors = policy.construct(&chain)?;
// Empty Vec when iv_rank < floor — the gate is embedded
// in the policy, not in caller code.Note
Regime gates like iv_rank_floor live in the construction policy, so a low-vol regime simply returns no condors rather than forcing the caller to special-case it.
Next
- Bull call debit — the simplest construction path, end to end.
- Rank by EV — score the constructed set under constraints.