{"slug":"stock-repair-strategy","qid":"payoff","label":"Profit or loss per share at expiration: repair vs plain shares","post_title":"Stock Repair Strategy: A Real NKE Example","post_url":"/blog/stock-repair-strategy#q-payoff","columns":["move","price_at_expiry","hold_pnl_per_share","repair_pnl_per_share"],"rows":[{"move":"-20%","price_at_expiry":"29.09","hold_pnl_per_share":-45.48,"repair_pnl_per_share":-45.03},{"move":"-15%","price_at_expiry":"30.9","hold_pnl_per_share":-43.67,"repair_pnl_per_share":-43.22},{"move":"-10%","price_at_expiry":"32.72","hold_pnl_per_share":-41.85,"repair_pnl_per_share":-41.4},{"move":"-5%","price_at_expiry":"34.54","hold_pnl_per_share":-40.03,"repair_pnl_per_share":-39.58},{"move":"0%","price_at_expiry":"36.36","hold_pnl_per_share":-38.21,"repair_pnl_per_share":-37.76},{"move":"+5%","price_at_expiry":"38.18","hold_pnl_per_share":-36.39,"repair_pnl_per_share":-35.27},{"move":"+10%","price_at_expiry":"39.99","hold_pnl_per_share":-34.58,"repair_pnl_per_share":-31.63},{"move":"+15%","price_at_expiry":"41.81","hold_pnl_per_share":-32.76,"repair_pnl_per_share":-31.62},{"move":"+20%","price_at_expiry":"43.63","hold_pnl_per_share":-30.94,"repair_pnl_per_share":-31.62},{"move":"+25%","price_at_expiry":"45.45","hold_pnl_per_share":-29.12,"repair_pnl_per_share":-31.62},{"move":"+30%","price_at_expiry":"47.27","hold_pnl_per_share":-27.3,"repair_pnl_per_share":-31.62}],"shape":"ranking","sql":"WITH\n    (\n        SELECT max(date)\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'NKE'\n          AND iv_converged = 1\n          AND volume > 0\n    ) AS asof_date,\n    (\n        SELECT expiration_date\n        FROM global_markets.options_greeks\n        WHERE underlying_symbol = 'NKE'\n          AND lower(toString(option_type)) IN ('call', 'c')\n          AND iv_converged = 1\n          AND volume > 0\n          AND days_to_expiry BETWEEN 60 AND 90\n          AND date = (\n              SELECT max(date)\n              FROM global_markets.options_greeks\n              WHERE underlying_symbol = 'NKE'\n                AND iv_converged = 1\n                AND volume > 0\n          )\n        GROUP BY expiration_date\n        ORDER BY sum(volume) DESC, expiration_date\n        LIMIT 1\n    ) AS expiry,\n    (\n        SELECT toFloat64(max(close))\n        FROM global_markets.stocks_daily_aggs\n        WHERE ticker = 'NKE'\n          AND date >= today() - 371\n          AND date <  today()\n    ) AS purchase_price\nSELECT\n    concat(if(m > 1, '+', ''), toString(toInt32(round((m - 1) * 100))), '%')   AS move,\n    toString(round(spot_px * m, 2))                                           AS price_at_expiry,\n    round(spot_px * m - purchase_price, 2)                                    AS hold_pnl_per_share,\n    round(spot_px * m - purchase_price\n          + greatest(spot_px * m - k1, 0.0)\n          - 2 * greatest(spot_px * m - k2, 0.0)\n          - (k1_px - 2 * k2_px), 2)                                           AS repair_pnl_per_share\nFROM\n(\n    SELECT\n        any(spot)          AS spot_px,\n        any(atm_k)         AS k1,\n        any(atm_px)        AS k1_px,\n        max(k)             AS k2,\n        argMax(px, k)      AS k2_px\n    FROM\n    (\n        SELECT\n            k,\n            px,\n            spot,\n            first_value(k)  OVER (ORDER BY abs(k - spot), k ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS atm_k,\n            first_value(px) OVER (ORDER BY abs(k - spot), k ROWS BETWEEN UNBOUNDED PRECEDING AND UNBOUNDED FOLLOWING) AS atm_px\n        FROM\n        (\n            SELECT\n                toFloat64(strike_price)              AS k,\n                toFloat64(any(option_close))         AS px,\n                toFloat64(any(underlying_close))     AS spot\n            FROM global_markets.options_greeks\n            WHERE underlying_symbol = 'NKE'\n              AND lower(toString(option_type)) IN ('call', 'c')\n              AND date = asof_date\n              AND expiration_date = expiry\n              AND iv_converged = 1\n              AND volume > 0\n            GROUP BY strike_price\n        )\n    )\n    WHERE k > atm_k\n      AND k <= atm_k * 1.30\n      AND atm_px - 2 * px <= 0\n) AS pick\nARRAY JOIN [0.80, 0.85, 0.90, 0.95, 1.00, 1.05, 1.10, 1.15, 1.20, 1.25, 1.30] AS m\nORDER BY m","computed_at":"2026-09-19T15:37:03.831986+00:00","elapsed":7.185092575}