{"slug":"iron-condor-screener-from-the-free-sql-api","qid":"knobs","label":"knobs","post_title":"iron-condor-screener-from-the-free-sql-api","post_url":"/blog/iron-condor-screener-from-the-free-sql-api#q-knobs","columns":["credit_floor","tight_band","wide_band","as_of"],"rows":[{"credit_floor":"10%","tight_band":8,"wide_band":28,"as_of":"Sep 24, 2026"},{"credit_floor":"20%","tight_band":8,"wide_band":23,"as_of":"Sep 24, 2026"},{"credit_floor":"30%","tight_band":5,"wide_band":18,"as_of":"Sep 24, 2026"},{"credit_floor":"40%","tight_band":3,"wide_band":11,"as_of":"Sep 24, 2026"},{"credit_floor":"50%","tight_band":1,"wide_band":6,"as_of":"Sep 24, 2026"}],"shape":"ranking","sql":"WITH\n    (\n        SELECT max(date)\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'SPY'\n    ) AS snapshot,\n    (\n        SELECT expiration_date\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'SPY'\n          AND date = snapshot\n          AND iv_converged = 1\n          AND volume > 0\n          AND days_to_expiry BETWEEN 25 AND 45\n        GROUP BY expiration_date\n        ORDER BY sum(volume) DESC\n        LIMIT 1\n    ) AS target_expiry,\n    chain AS\n    (\n        SELECT\n            toFloat64(strike_price)                 AS k,\n            if(toFloat64(delta) < 0, 'put', 'call') AS side,\n            avg(toFloat64(option_close))            AS px,\n            avg(toFloat64(delta))                   AS d\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'SPY'\n          AND date = snapshot\n          AND expiration_date = target_expiry\n          AND iv_converged = 1\n          AND volume > 0\n          AND toFloat64(option_close) > 0\n          AND toUInt32(round(toFloat64(strike_price) * 100)) % 500 = 0\n        GROUP BY k, side\n    ),\n    put_spreads AS\n    (\n        SELECT s.d AS short_delta, s.px - l.px AS credit\n        FROM chain AS s\n        CROSS JOIN chain AS l\n        WHERE s.side = 'put' AND l.side = 'put'\n          AND s.d BETWEEN -0.25 AND -0.10\n          AND abs(l.k - (s.k - 5)) < 0.01\n    ),\n    call_spreads AS\n    (\n        SELECT s.d AS short_delta, s.px - l.px AS credit\n        FROM chain AS s\n        CROSS JOIN chain AS l\n        WHERE s.side = 'call' AND l.side = 'call'\n          AND s.d BETWEEN 0.10 AND 0.25\n          AND abs(l.k - (s.k + 5)) < 0.01\n    )\nSELECT\n    concat(toString(f.min_ratio), '%')                          AS credit_floor,\n    countIf(cand.credit_pct >= f.min_ratio AND cand.tight = 1)  AS tight_band,\n    countIf(cand.credit_pct >= f.min_ratio)                     AS wide_band,\n    formatDateTime(snapshot, '%b %e, %Y')                       AS as_of\nFROM\n(\n    SELECT\n        round(100 * (p.credit + c.credit) / (5 - (p.credit + c.credit)), 1) AS credit_pct,\n        if((abs(p.short_delta) BETWEEN 0.12 AND 0.20)\n           AND (c.short_delta BETWEEN 0.12 AND 0.20), 1, 0)                 AS tight\n    FROM put_spreads AS p\n    CROSS JOIN call_spreads AS c\n    WHERE p.credit + c.credit BETWEEN 0.05 AND 4.0\n) AS cand\nCROSS JOIN\n(\n    SELECT arrayJoin([10, 20, 30, 40, 50]) AS min_ratio\n) AS f\nGROUP BY f.min_ratio\nORDER BY f.min_ratio","computed_at":"2026-09-28T15:28:15.657325+00:00","elapsed":22.561864222}