Structure selection is a lookup, not a judgment. The directional signal (buy, sell or hold) and the volatility regime (rich, neutral or cheap, from the ratio of implied to realized volatility) index a fixed matrix that names one structure: a bull put spread, a call debit spread, a bear call spread, a put debit spread, an iron condor, or a long straddle or strangle. A VIX regime layer then annotates the pick with a lean toward credit structures when the index is elevated and a smaller-size note in panic, without changing the matrix result.
How these pages were written: from the engine source as deployed in September 2026, with thresholds quoted as the code holds them. Thresholds change with releases and the changelog records each change. This is a description of arithmetic, not advice about what to trade.
Source modules: strategy/selector.py (choose_strategy, vol_regime_from_iv_hv) and strategy/vix_bias.py.
Two. The first is the directional signal from the composite technical score: BUY, SELL or HOLD. The second is the volatility regime, which comes from one ratio: at-the-money implied volatility divided by realized volatility over a matched window. A ratio above 1.20 is rich, below 0.85 is cheap, and anything between is neutral. The same thresholds are used by the volatility surface module and the conviction score, from one function, so no caller can drift.
| Signal | Volatility regime | Structure |
|---|---|---|
| BUY | rich | Bull put spread |
| BUY | cheap | Call debit spread |
| BUY | neutral | Bull put spread |
| SELL | rich | Bear call spread |
| SELL | cheap | Put debit spread |
| SELL | neutral | Bear call spread |
| HOLD | rich | Iron condor |
| HOLD | cheap | Long straddle or strangle |
| HOLD | neutral | Iron condor |
The logic behind the table is the same in every row: a directional view on rich premium is expressed by selling a spread on the side the view says will not be visited, a directional view on cheap premium is expressed by buying a spread, and no view at all is expressed by selling both sides when premium is rich or buying both sides when it is cheap. Neutral premium leans to selling, because the volatility premium persists on average even when the ratio reads near one.
Once a structure is named, the screener builds it from the live chain: short strikes in a delta band, a long strike a fixed width away, and a hard rule that if a tradeable structure cannot be built from the chain, the answer is no structure, never a substitute. The name of the resulting structure is then derived from its legs, so the label on the card always matches what the legs actually are.
It does not change the matrix result; it annotates it. The VIX regime layer reads the index level and adds a hint:
The lean is applied as a rebias on a directional view: a bullish view in a credit regime leans to the bull put spread, a bearish view to the bear call spread. When the VIX feed is degraded and reports zero, the layer treats the regime as unknown rather than reading zero as the calmest market on record.
Because the structure is the part of the decision that has to be explainable on the card in one sentence: "rich premium and a bullish signal, so a bull put spread." A learned selector could pick better on average and be unable to say why on any given day. The parts of the pipeline that are allowed to be statistical, the meta-label model, sit after selection and can only veto or downsize, never create.
From a fixed matrix indexed by the directional signal and the volatility regime. A rich or neutral regime, where implied volatility runs above realized, maps a directional view to a credit spread on the side the view says will not be visited; a cheap regime maps it to a debit spread. No view at all maps to an iron condor on rich premium or a long straddle or strangle on cheap premium.
The ratio of at-the-money implied volatility to realized volatility over a matched window. Above 1.20 is rich, below 0.85 is cheap, and anything between is neutral. One function holds the thresholds and every caller imports it.
No. The VIX regime annotates the pick rather than replacing it: no lean below 20, a slight lean toward credit structures from 20 to 25, credit preferred from 25 to 30, and credit with a smaller-size note at 30 and above. A degraded feed that reports zero is treated as unknown, not as calm.
More in Methodology: how the engine computes: How Probability of Profit Is Computed and Checked · How an Expiration Is Scored · How Tape Fit Scores a Strike Against the Chart