STRASMORE/EXPLORE 3,094 QUERIES 22Y EQUITIES · 12Y OPTIONS

3,094 answered market questions

every one with its exact SQL, its result and the date it was computed · free, no signup

Iron Condor Win Rate and Expectancy
Short strikes touched versus short strikes finishing in the moneyseries · 2026-10-05 · 5×5Preview: a 5-point series, ending higher. Credit, risk and breakeven win rate for nine SPY condor structurestable · 2026-10-05 · 9×6 Premium per dollar of spot at the same 16 delta, five underlyingsranking · 2026-10-05 · 5×4Preview: 5 ranked values, largest first. Advertised iron condor win rate by short delta band (SPY)table · 2026-10-05 · 5×5
Short strikes touched versus short strikes finishing in the money

Short strikes touched versus short strikes finishing in the money

most recentas of series 5×5read in context →
Short strikes touched versus short strikes finishing in the money — 5 rows by 5 columns, computed from US exchange, SIP and OPRA data.
monthtouched_strike_pctfinished_itm_pcttouch_to_itm_ratiotracked_count
2026-022514.31.7556
2026-0340.330.61.3262
2026-045048.11.0452
2026-0520.71.71258
2026-0737.112.92.8862
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 month
$