{"slug":"put-credit-spread-win-rate-and-breakeven","qid":"distribution","label":"distribution","post_title":"put-credit-spread-win-rate-and-breakeven","post_url":"/blog/lang/de/put-credit-spread-win-rate-and-breakeven#q-distribution","columns":["entry_count","credit_pct_p10","credit_pct_median","credit_pct_p90","breakeven_pct_p10","breakeven_pct_median","breakeven_pct_p90"],"rows":[{"entry_count":1183,"credit_pct_p10":15.8,"credit_pct_median":18.8,"credit_pct_p90":23.8,"breakeven_pct_p10":2.02,"breakeven_pct_median":2.86,"breakeven_pct_p90":4.6}],"shape":"scalar","sql":"WITH\nexpiries AS\n(\n    SELECT\n        date                                              AS entry_date,\n        argMin(expiration_date, abs(days_to_expiry - 45)) AS expiry\n    FROM global_markets.options_greeks\n    WHERE underlying_symbol = 'SPY'\n      AND lower(option_type) IN ('put', 'p')\n      AND iv_converged = 1\n      AND volume > 0\n      AND days_to_expiry BETWEEN 38 AND 52\n      AND date >= '2021-08-01'\n    GROUP BY date\n),\nshort_leg AS\n(\n    SELECT\n        e.entry_date                                                    AS entry_date,\n        e.expiry                                                        AS expiry,\n        argMin(toFloat64(g.strike_price), abs(abs(g.delta) - 0.30))     AS short_strike,\n        argMin(toFloat64(g.option_close), abs(abs(g.delta) - 0.30))     AS short_mark,\n        argMin(toFloat64(g.underlying_close), abs(abs(g.delta) - 0.30)) AS spot\n    FROM global_markets.options_greeks AS g\n    INNER JOIN expiries AS e\n        ON g.date = e.entry_date AND g.expiration_date = e.expiry\n    WHERE g.underlying_symbol = 'SPY'\n      AND lower(g.option_type) IN ('put', 'p')\n      AND g.iv_converged = 1\n      AND g.volume > 0\n      AND g.date >= '2021-08-01'\n      AND abs(g.delta) BETWEEN 0.20 AND 0.40\n    GROUP BY e.entry_date, e.expiry\n),\nlong_leg AS\n(\n    SELECT\n        s.entry_date                                                                             AS entry_date,\n        argMin(toFloat64(g.strike_price), abs(toFloat64(g.strike_price) - (s.short_strike - 10))) AS long_strike,\n        argMin(toFloat64(g.option_close), abs(toFloat64(g.strike_price) - (s.short_strike - 10))) AS long_mark\n    FROM global_markets.options_greeks AS g\n    INNER JOIN short_leg AS s\n        ON g.date = s.entry_date AND g.expiration_date = s.expiry\n    WHERE g.underlying_symbol = 'SPY'\n      AND lower(g.option_type) IN ('put', 'p')\n      AND g.iv_converged = 1\n      AND g.date >= '2021-08-01'\n      AND toFloat64(g.strike_price) BETWEEN s.short_strike - 12 AND s.short_strike - 8\n    GROUP BY s.entry_date\n),\nspreads AS\n(\n    SELECT\n        s.entry_date                   AS entry_date,\n        s.spot                         AS spot,\n        s.short_strike                 AS short_strike,\n        s.short_strike - l.long_strike AS width,\n        s.short_mark - l.long_mark     AS credit\n    FROM short_leg AS s\n    INNER JOIN long_leg AS l ON s.entry_date = l.entry_date\n    WHERE l.long_strike < s.short_strike\n)\nSELECT\n    count()                                                                                           AS entry_count,\n    round(quantileDeterministic(0.1)(100 * credit / width, toUInt32(toUnixTimestamp(entry_date))), 1) AS credit_pct_p10,\n    round(quantileDeterministic(0.5)(100 * credit / width, toUInt32(toUnixTimestamp(entry_date))), 1) AS credit_pct_median,\n    round(quantileDeterministic(0.9)(100 * credit / width, toUInt32(toUnixTimestamp(entry_date))), 1) AS credit_pct_p90,\n    round(quantileDeterministic(0.1)(100 * (spot - (short_strike - credit)) / spot, toUInt32(toUnixTimestamp(entry_date))), 2) AS breakeven_pct_p10,\n    round(quantileDeterministic(0.5)(100 * (spot - (short_strike - credit)) / spot, toUInt32(toUnixTimestamp(entry_date))), 2) AS breakeven_pct_median,\n    round(quantileDeterministic(0.9)(100 * (spot - (short_strike - credit)) / spot, toUInt32(toUnixTimestamp(entry_date))), 2) AS breakeven_pct_p90\nFROM spreads\nWHERE credit > 0\n  AND width BETWEEN 9 AND 11\nHAVING count() > 0","computed_at":"2026-10-01T15:49:13.655565+00:00","elapsed":0.008355584}