find_iron_condors -- Live Chain Scan
Scans the live options chain for tradeable Iron Condor candidates. Returns
concrete 4-leg trades with real strikes, real credits, and real expiration
dates from the current market. These candidates can be passed directly to
trade(action=propose_entry).
Requires the strategy hub to be opened first (call the strategy hub tool).
Two Calling Modes
Mode 1: With saved_strategy_id (recommended)
Pass a saved_strategy_id from a previously saved optimizer run. The tool
automatically loads the ticker, DTE range, IV rank settings, and other
parameters from the linked optimizer run.
{
"saved_strategy_id": "e5f6g7h8-..."
}
This is the recommended flow because it maintains the full audit chain from
optimizer through execution. The ticker parameter is not required when
saved_strategy_id is set.
Mode 2: With explicit parameters
Pass the ticker and any desired overrides directly. Useful for quick scans without an optimizer run, or when exploring different tickers.
{
"ticker": "SPY",
"preset": "balanced",
"dte_min": 21,
"dte_max": 45
}
Parameters
| Parameter | Type | Required | Default | Tier | Description |
|---|---|---|---|---|---|
ticker |
string | Conditional | -- | All | Underlying symbol. Required unless saved_strategy_id is set |
preset |
string | No | "balanced" | All | Risk preset (ignored when saved_strategy_id is set). One of: conservative, balanced, aggressive, stress_test |
dte_min |
int | No | preset | Premium | Minimum days-to-expiration |
dte_max |
int | No | preset | Premium | Maximum days-to-expiration |
min_pop |
float | No | preset | Premium | Minimum probability of profit (0.0-1.0) |
min_open_interest |
int | No | preset | Premium | Minimum open interest per leg |
max_capital_per_trade |
float | No | preset | Premium | Max capital per single IC trade |
iv_rank_gate_mode |
string | No | "soft" | Premium | "soft" (warn if IV low) or "hard" (block if IV low) |
iv_rank_threshold |
float | No | 0.20 | Premium | Minimum IV Rank (0.0-1.0) |
saved_strategy_id |
string | No | null | All | UUID from save_strategy -- auto-loads search params |
Free tier: Only ticker, preset, and saved_strategy_id are honored.
Other parameters are locked to preset values. Passing premium parameters
returns a TIER_BLOCKED error.
Response: SearchResult
{
"ticker": "SPY",
"candidates": [
{
"ticker": "SPY",
"expiry": "2026-06-20",
"short_put": 520.0,
"long_put": 515.0,
"short_call": 560.0,
"long_call": 565.0,
"net_credit": 1.42,
"max_loss": 3.58,
"ror": 0.397,
"pop": 0.74,
"dte": 39,
"ev_score": 0.52
}
],
"total": 15,
"metadata": {
"ticker": "SPY",
"spot_price": 540.25,
"pop_model": "lognormal",
"vol_estimator": "yang_zhang",
"vol_surface_model": "svi",
"option_pricer": "crr",
"iv_rank": 0.28,
"iv_rank_gate": {
"enabled": true,
"mode": "soft",
"threshold": 0.20,
"triggered": false
},
"delta_range": {
"short_delta_min": 0.10,
"short_delta_max": 0.25
},
"min_pop": 0.65
},
"warnings": []
}
Candidate fields
| Field | Type | Description |
|---|---|---|
ticker |
string | Underlying symbol |
expiry |
string | Expiration date (ISO 8601) |
short_put |
float | Short put strike (lower breakeven) |
long_put |
float | Long put strike (downside wing) |
short_call |
float | Short call strike (upper breakeven) |
long_call |
float | Long call strike (upside wing) |
net_credit |
float | Credit received per spread (USD). This is max profit |
max_loss |
float | Maximum loss per spread (USD). Wing width minus credit |
ror |
float | Return on risk (net_credit / max_loss) |
pop |
float | Probability of profit (0.0-1.0) from the vol model |
dte |
int | Days to expiration |
ev_score |
float | Expected value score combining PoP, RoR, and credit |
Metadata fields
The metadata object reports all parameters used in the scan, including:
spot price, IV rank, vol model, PoP model, delta ranges, and IV rank gate
status. This is useful for audit and for understanding why certain candidates
were included or excluded.
Warnings
The warnings array may contain:
IV_RANK_LOW-- IV rank is below the threshold. In soft mode, candidates are still returned. In hard mode, no candidates are returned.- Dividend yield missing, vol surface calibration issues, etc.
IV Rank Gate
The scan includes an IV Rank go/no-go gate based on TastyTrade's methodology. IV rank measures where current implied volatility sits relative to the past year's range.
| Preset | Gate mode | Threshold |
|---|---|---|
| Conservative | Hard block | 30% |
| Balanced | Soft warning | 20% |
| Aggressive | Disabled | -- |
| Stress test | Hard block | 25% |
Hard mode: Returns empty candidates with a diagnostic reason.
Soft mode: Returns candidates but attaches an IV_RANK_LOW warning.
Filter Pipeline
Candidates are filtered by:
- Delta range (primary structural filter) -- short strikes between |delta| 0.05-0.25. Industry standard for IC construction.
- Probability of Profit (quality gate) -- combined IC PoP must exceed the preset minimum (60-80% depending on preset).
Sigma distance is NOT used for entry filtering (it is mathematically redundant with delta). Sigma distance is used for monitoring open positions only.
Next Step
Pass any candidate to trade(action=propose_entry):
{
"action": "propose_entry",
"ticker": "SPY",
"candidate": {
"expiry": "2026-06-20",
"short_put": 520.0,
"long_put": 515.0,
"short_call": 560.0,
"long_call": 565.0,
"net_credit": 1.42
},
"qty": 2,
"saved_strategy_id": "e5f6g7h8-..."
}
Cross-references
- create-strategy.md -- optimizer workflow that produces saved strategies
- trade.md -- proposing entries from candidates
- ../guides/full-trading-workflow.md -- complete end-to-end workflow
- ../concepts/error-codes.md -- TIER_BLOCKED, QUOTA_EXCEEDED, MISSING_TICKER errors