Iron Condor Win Rate and Expectancy
Iron condor win rate comes off the two short deltas. Expectancy comes from credit versus width. See the breakeven win rate for nine real structures.
An iron condor win rate and an iron condor's expectancy are two different measurements, and they get quoted as if one implied the other. The win rate comes straight off the option chain: the probability that both short strikes finish out of the money is approximately one minus the sum of the two short deltas, which is how a 16 delta per side condor gets advertised at roughly 68%. Expectancy comes from pairing that probability against the payoff, the credit collected against the width of a wing minus that credit. A structure that wins 80% of the time while risking four times its credit is a coin flip before a single cost.
What does an iron condor win rate measure?
An iron condor is four legs on one underlying and one expiration: a short put spread below the current price, a short call spread above it, both sold for a credit. The position keeps the full credit when the underlying finishes between the two short strikes, and loses up to the width of one wing minus the credit when it finishes past either long strike. The shape sits next to its tighter cousin in iron condor versus iron butterfly, and the one-sided version in credit spread versus debit spread.
Delta, the subject of what option delta means, doubles as a rough market-implied probability that a contract finishes in the money. A short put at 0.16 delta carries about a 16% implied chance of finishing below its strike. A short call at 0.16 delta carries about the same chance of finishing above its own. Add the two tails, subtract from one, and what is left is the middle: about 68%. The panel below takes that step with measured deltas instead of the convention, pooling SPY contracts across the third quarter of 2026 by delta band.
| delta_bucket | short_put_delta_pct | short_call_delta_pct | condor_win_rate_pct | contract_count |
|---|---|---|---|---|
| 5 to 10 delta | 7.3 | 7.4 | 85.3 | 4643 |
| 10 to 15 delta | 12.4 | 12.4 | 75.2 | 3511 |
| 15 to 20 delta | 17.4 | 17.4 | 65.2 | 2838 |
| 20 to 25 delta | 22.4 | 22.5 | 55.1 | 2277 |
| 25 to 30 delta | 27.5 | 27.4 | 45.1 | 1923 |
The exact SQL behind every number
SELECT
multiIf(abs(delta) < 0.10, '5 to 10 delta',
abs(delta) < 0.15, '10 to 15 delta',
abs(delta) < 0.20, '15 to 20 delta',
abs(delta) < 0.25, '20 to 25 delta',
'25 to 30 delta') AS delta_bucket,
round(100 * avgIf(abs(delta), delta < 0), 1) AS short_put_delta_pct,
round(100 * avgIf(delta, delta > 0), 1) AS short_call_delta_pct,
round(100 - 100 * (avgIf(abs(delta), delta < 0)
+ avgIf(delta, delta > 0)), 1) AS condor_win_rate_pct,
count() AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= '2026-07-01'
AND date < '2026-10-01'
AND iv_converged = 1
AND volume > 0
AND days_to_expiry BETWEEN 28 AND 45
AND abs(delta) >= 0.05
AND abs(delta) < 0.30
GROUP BY delta_bucket
HAVING countIf(delta < 0) > 0 AND countIf(delta > 0) > 0
ORDER BY condor_win_rate_pct DESCAcross SPY chains with 28 to 45 days to expiry, the 15 to 20 delta band averaged a short put delta of 17.4% and a short call delta of 17.4%, putting the advertised win rate at 65.2%. Sell further out, in the 5 to 10 delta band, and the same arithmetic gives 85.3%. Sell closer, at 25 to 30 delta, and it falls to 45.1%. That curve is the entire content of a win rate: the market's pricing of the two tails sold, read off the chain on the day of entry, with no reference at all to what the position pays.
How do you calculate iron condor expectancy?
Expectancy needs the payoff sitting next to the probability. Maximum profit is the net credit. Maximum loss is the width of one wing minus that credit (only one wing can finish in the money, so the risk is one width, never two). Setting the two against each other gives the breakeven win rate, the frequency at which the position merely breaks even: maximum loss divided by maximum loss plus credit, which simplifies to width minus credit, over width.
Collect $1.00 on a $5 wide wing and the risk is $4.00, for a breakeven win rate of 80%. Collect $2.00 on the same wing and the breakeven falls to 60%. Nothing in that arithmetic knows which delta was sold. It knows only the price paid for the tails. The panel below pairs every SPY short strike in three delta bands with a long leg $5, $10 and $20 away, on daily closing marks, and puts the advertised win rate beside the breakeven win rate for all nine combinations.
| label | credit_dollars | risk_dollars | advertised_win_rate_pct | breakeven_win_rate_pct | condor_count |
|---|---|---|---|---|---|
| $5 wide, 25 delta | 2.05 | 2.95 | 50.2 | 59.1 | 191 |
| $5 wide, 16 delta | 1.19 | 3.81 | 68.1 | 76.1 | 189 |
| $5 wide, 10 delta | 0.68 | 4.32 | 80.1 | 86.4 | 189 |
| $10 wide, 25 delta | 3.6 | 6.4 | 50.1 | 64 | 191 |
| $10 wide, 16 delta | 2.05 | 7.95 | 68.1 | 79.5 | 182 |
| $10 wide, 10 delta | 1.15 | 8.85 | 80.1 | 88.5 | 188 |
| $20 wide, 25 delta | 5.69 | 14.31 | 50 | 71.5 | 190 |
| $20 wide, 16 delta | 3.19 | 16.81 | 68.1 | 84 | 176 |
| $20 wide, 10 delta | 1.77 | 18.23 | 80.1 | 91.2 | 188 |
The exact SQL behind every number
WITH chain AS
(
SELECT
date,
expiration_date,
toFloat64(strike_price) AS strike,
toFloat64(option_close) AS premium,
delta,
multiIf(abs(delta) BETWEEN 0.08 AND 0.12, '10 delta',
abs(delta) BETWEEN 0.14 AND 0.18, '16 delta',
abs(delta) BETWEEN 0.22 AND 0.28, '25 delta', '') AS short_bucket
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= '2026-07-01'
AND date < '2026-10-01'
AND iv_converged = 1
AND volume > 0
AND option_close > 0
AND days_to_expiry BETWEEN 28 AND 45
),
wings AS
(
SELECT date, expiration_date, strike, premium, delta, arrayJoin([5, 10, 20]) AS width
FROM chain
),
put_wing AS
(
SELECT
s.date AS d,
s.expiration_date AS e,
s.short_bucket AS b,
l.width AS w,
avg(s.premium - l.premium) AS put_credit,
avg(abs(s.delta)) AS put_delta
FROM chain AS s
INNER JOIN
(
SELECT date, expiration_date, strike + width AS paired_strike, premium, delta, width
FROM wings
) AS l
ON s.date = l.date
AND s.expiration_date = l.expiration_date
AND s.strike = l.paired_strike
WHERE s.delta < 0
AND l.delta < 0
AND s.short_bucket != ''
AND s.premium > l.premium
AND s.premium - l.premium < l.width
GROUP BY d, e, b, w
),
call_wing AS
(
SELECT
s.date AS d,
s.expiration_date AS e,
s.short_bucket AS b,
l.width AS w,
avg(s.premium - l.premium) AS call_credit,
avg(abs(s.delta)) AS call_delta
FROM chain AS s
INNER JOIN
(
SELECT date, expiration_date, strike - width AS paired_strike, premium, delta, width
FROM wings
) AS l
ON s.date = l.date
AND s.expiration_date = l.expiration_date
AND s.strike = l.paired_strike
WHERE s.delta > 0
AND l.delta > 0
AND s.short_bucket != ''
AND s.premium > l.premium
AND s.premium - l.premium < l.width
GROUP BY d, e, b, w
)
SELECT
concat('$', toString(p.w), ' wide, ', p.b) AS label,
round(avg(p.put_credit + c.call_credit), 2) AS credit_dollars,
round(avg(p.w - (p.put_credit + c.call_credit)), 2) AS risk_dollars,
round(100 - 100 * avg(p.put_delta + c.call_delta), 1) AS advertised_win_rate_pct,
round(100 * avg((p.w - (p.put_credit + c.call_credit)) / p.w), 1) AS breakeven_win_rate_pct,
count() AS condor_count
FROM put_wing AS p
INNER JOIN call_wing AS c
ON p.d = c.d AND p.e = c.e AND p.b = c.b AND p.w = c.w
GROUP BY p.w, p.b
ORDER BY p.w ASC, advertised_win_rate_pct ASCThe $5 wide, 16 delta structure collected an average credit of $1.19 against $3.81 of risk per contract, which places its breakeven win rate at 76.1% beside an advertised 68.1%. Widen the wings and the credit grows while the risk grows faster: $20 wide, 16 delta took in $3.19 with a breakeven win rate of 84%. Read down the advertised column and it repeats inside each delta band: the short strikes never moved. Width changes the payoff, not the probability. Whichever of the two percentages is larger tells you which side of breakeven the quoted edge falls on, before any cost.
What the arithmetic still leaves out
Four things the two columns above do not price:
- Four legs of bid-ask. Opening and closing a condor crosses eight spreads in total. A nickel of slippage per leg on a $5 wide structure is $0.40 of the credit, round trip.
- Early assignment on the untested side. US equity options are American style, so a short leg can be exercised against before expiration, most often around an ex-dividend date. The mechanics are in American versus European options.
- Early exits. Few condors are carried to expiration, so a realised win rate is set by the exit rule rather than by the deltas at entry.
- Fees. Per-contract commissions plus exercise and assignment charges apply across four legs rather than one.
Probability of touch is what forces the exit
The probability a short strike is reached at some point before expiration runs far above the probability it finishes in the money. Roughly double is the working rule, set out in probability of touch versus probability of ITM. The panel below measures both on the SPY tape: for each entry date in 2026, the 16 delta short strike nearest each side was tracked from entry through expiration, counting whether the daily range ever reached it and whether the final close finished through it.
| month | touched_strike_pct | finished_itm_pct | touch_to_itm_ratio | tracked_count |
|---|---|---|---|---|
| 2026-02 | 25 | 14.3 | 1.75 | 56 |
| 2026-03 | 40.3 | 30.6 | 1.32 | 62 |
| 2026-04 | 50 | 48.1 | 1.04 | 52 |
| 2026-05 | 20.7 | 1.7 | 12 | 58 |
| 2026-07 | 37.1 | 12.9 | 2.88 | 62 |
The exact SQL behind every number
WITH shorts AS
(
SELECT
date AS entry_date,
expiration_date AS expiry,
if(delta < 0, 'put', 'call') AS side,
argMin(toFloat64(strike_price), abs(abs(delta) - 0.16)) AS short_strike
FROM global_markets.options_greeks
WHERE underlying_symbol = 'SPY'
AND date >= '2026-01-02'
AND date < '2026-08-01'
AND iv_converged = 1
AND volume > 100
AND days_to_expiry BETWEEN 28 AND 35
AND abs(delta) BETWEEN 0.13 AND 0.19
GROUP BY entry_date, expiry, side
),
tape AS
(
SELECT
date,
toFloat64(high) AS high,
toFloat64(low) AS low,
toFloat64(close) AS close
FROM global_markets.stocks_daily_aggs
WHERE ticker = 'SPY'
AND date >= '2026-01-02'
AND date <= '2026-09-30'
),
outcomes AS
(
SELECT
s.entry_date AS entry_date,
s.expiry AS expiry,
s.side AS side,
s.short_strike AS short_strike,
max(t.high) AS path_high,
min(t.low) AS path_low,
argMax(t.close, t.date) AS final_close
FROM shorts AS s
CROSS JOIN tape AS t
WHERE t.date > s.entry_date
AND t.date <= s.expiry
GROUP BY entry_date, expiry, side, short_strike
)
SELECT
formatDateTime(toStartOfMonth(entry_date), '%Y-%m') AS month,
round(100 * avg(if(side = 'put', path_low <= short_strike,
path_high >= short_strike)), 1) AS touched_strike_pct,
round(100 * avg(if(side = 'put', final_close < short_strike,
final_close > short_strike)), 1) AS finished_itm_pct,
round(avg(if(side = 'put', path_low <= short_strike, path_high >= short_strike))
/ avg(if(side = 'put', final_close < short_strike, final_close > short_strike)), 2)
AS touch_to_itm_ratio,
count() AS tracked_count
FROM outcomes
GROUP BY month
HAVING countIf(if(side = 'put', final_close < short_strike, final_close > short_strike)) > 0
ORDER BY monthIn 2026-02, 25% of those short strikes were reached at some point before expiration, against 14.3% that finished through the strike, a ratio of 1.75. By 2026-07 the ratio measured 2.88. A position sized against the finishing probability gets tested far more often than that probability describes, and the tested wing is where discretionary exits live.
Why the same delta pays a different credit from ticker to ticker
Delta sets the win rate; implied volatility sets the credit. Two names at the same 16 delta can pay very different premium per dollar of underlying, which moves the breakeven win rate while leaving the advertised one untouched. Turning volatility into a distance is covered in expected move from implied volatility.
| symbol | implied_vol_pct | short_premium_pct_of_spot | contract_count |
|---|---|---|---|
| NVDA | 39.4 | 1.04 | 308 |
| MSFT | 34.1 | 0.9 | 546 |
| AAPL | 27.2 | 0.72 | 321 |
| KO | 20.8 | 0.54 | 244 |
| SPY | 16 | 0.43 | 2458 |
The exact SQL behind every number
SELECT
underlying_symbol AS symbol,
round(100 * avg(implied_volatility), 1) AS implied_vol_pct,
round(100 * avg(toFloat64(option_close) / toFloat64(underlying_close)), 2) AS short_premium_pct_of_spot,
count() AS contract_count
FROM global_markets.options_greeks
WHERE underlying_symbol IN ('SPY', 'AAPL', 'MSFT', 'NVDA', 'KO')
AND date >= '2026-07-01'
AND date < '2026-10-01'
AND iv_converged = 1
AND volume > 0
AND option_close > 0
AND underlying_close > 0
AND days_to_expiry BETWEEN 28 AND 45
AND abs(delta) BETWEEN 0.14 AND 0.18
GROUP BY symbol
ORDER BY short_premium_pct_of_spot DESCNVDA paid the most premium per dollar of spot in this group, 1.04%, alongside average implied volatility of 39.4%. SPY sat at the other end of the group at 0.43% of spot, with implied volatility of 16%. Same advertised win rate at the same delta, different payoff per unit of risk.
How these numbers were measured
- Deltas and premiums come from per-contract daily records with converged implied volatility and non-zero volume, 28 to 45 days to expiry.
- Wings pair on the same entry date and expiration with the long leg a fixed distance out, keeping only pairs whose credit is positive and smaller than the width.
- Advertised win rate is one minus the sum of the two averaged short deltas. Breakeven win rate is width minus credit, over width.
- Touch and finish rates track each side's 16 delta short strike from the day after entry through its expiration date, on daily highs, lows and closes.
What this post does not do
This is chain arithmetic on daily closing marks, not a backtest of a managed condor program: no entry filter, no profit target, no stop, no rolls. Closing marks also sit inside the bid-ask, so a live fill would collect less than the credit column shows. Nothing here recommends trading the structure or forecasts what any of these percentages will be next quarter.
FAQ
What is a good win rate for an iron condor?
There is no single figure. The win rate is set by the strikes sold, so it is chosen rather than earned: short strikes further out raise it and shrink the credit. The number only carries information next to the breakeven win rate for that same structure.
How do you calculate the breakeven win rate on an iron condor?
Divide the maximum loss by the maximum loss plus the credit. On a $5 wide wing with a $1.20 credit, the risk is $3.80 and the breakeven win rate is 76%. A realised rate under that figure loses money over a long run of identical positions, before costs.
Can an iron condor with a 70% win rate lose money?
Yes. A 70% win rate paired with a loss four times the size of the win averages out negative: 0.70 of one credit, minus 0.30 of four credits, is half a credit lost per position.
Does the width of the wings change the win rate?
No. The win rate depends on the short strikes, which the width leaves where they are. Width changes the maximum loss, and with it the breakeven win rate.
Is probability of touch the same as an iron condor win rate?
No. Probability of touch measures whether price reaches a strike at any point before expiration, and it runs close to double the probability of finishing beyond it. A quoted win rate refers to the finishing outcome at expiration.
Every panel on this page carries the SQL that produced it, so the strike pairing is open to inspection. The same breakeven arithmetic can be run against any underlying's chain on the Strasmore terminal.