market-analysis
S-C C2 short straddle
Single-name variance premium, earnings-free
What it is
Sells short straddles about four weeks out on up to ten stocks a week, chosen from liquid $1B to $20B companies whose next earnings come after the expiry: the at-the-money call and put sold, with no wings, so the loss is not capped. Fewer than ten usually qualify (four in its first week) and some weeks none do. It measures the raw premium; S-C's iron butterfly on the same stocks is the defined-risk launch candidate. C2 is C1's rule with the stocks the screener labels Technology removed before the ten are picked, so it can take a stock C1's ten leave out. C1 and C2 hold the same position whenever both pick a stock (all four of C2's on 2026-10-02), so their records overlap and should not be added together. Every selection is recorded, graded and counted toward the read, including any the book's caps would leave out.
The rule
- Universe: the options data's end-of-day stock screener: common stock or ADRs closing at $10 or more, with a market cap of $1B to $20B, a 20-session average dollar volume (close times volume, from public daily bars) of at least $50M, a 30-day implied volatility of 30% to 80%, and a next earnings date that is known and after the expiry.
- Expiry: of the expiries that traded that day, the one 20 to 40 calendar days out nearest 28.
- At the money: the strike nearest the close, within 2.5% of it, whose call and put each printed at least 5 contracts from 15:00 to 16:00 ET; both legs' quoted spreads at their prints from 15:00, averaged by size, at most 8% of the quote's midpoint, a leg with no quote failing.
- Selection: the ten names that pass with the lowest mean at-the-money spread once the stocks the screener labels Technology are removed, so C2 can take a stock below C1's ten.
- Entry: the last session of the week; the call and put sold at their average traded price from 15:00 to 16:00 ET.
- Size: as many contracts as keep the stress loss within 1% of $100,000, but at least one, so a stock whose one contract risks more is still entered at one contract (two of the four on 2026-10-02 risked $1,495 and $3,277). The stress loss is what the straddle would be worth at expiry after a 3σ move the worse way, less the credit, with S the close and σ = S × the 30-day implied volatility × √(days to expiry/365); the return is measured on it.
- Caps: in selection order, at most 10 new a week, 20 open and 4 open per sector in this book, and, while S-B's champion holds a position, open risk of at most $8,000. Only positions inside the caps count toward them. A selection outside them is still recorded, graded and counted toward the read, marked so.
- Exit: held to expiry and settled at intrinsic value against the official close (or the stock's price at that day's last option print if the close is missing); a split during the hold is adjusted for, and a stock that stops trading settles at its last close. Early assignment and dividends are not modelled.
| Name | Value | Unit | Where it lives | Pinned by |
|---|---|---|---|---|
| price_min | 10 | USD, the entry session's close | engine/config.py:243 | tests/test_sc_frozen_params.py:25 |
| mcap_min | 1000000000 | USD of market cap | engine/config.py:244 | tests/test_sc_frozen_params.py:25 |
| mcap_max | 20000000000 | USD of market cap | engine/config.py:245 | tests/test_sc_frozen_params.py:25 |
| adv_min | 50000000 | USD a day, 20-session average dollar volume | engine/config.py:246 | tests/test_sc_frozen_params.py:25 |
| ADV_WINDOW_SESSIONS | 20 | sessions in the average dollar volume | engine/strategies/sc_data.py:17 | — |
| iv30d_min | 0.3 | 30-day implied volatility, annualized, as a fraction | engine/config.py:247 | tests/test_sc_frozen_params.py:25 |
| iv30d_max | 0.8 | 30-day implied volatility, annualized, as a fraction | engine/config.py:248 | tests/test_sc_frozen_params.py:25 |
| dte_cal_min | 20 | calendar days | engine/config.py:249 | tests/test_sc_frozen_params.py:25 |
| dte_cal_max | 40 | calendar days | engine/config.py:250 | tests/test_sc_frozen_params.py:25 |
| target_dte_cal | 28 | calendar days | engine/config.py:251 | tests/test_sc_frozen_params.py:25 |
| atm_band | 0.025 | of the close | engine/config.py:252 | tests/test_sc_frozen_params.py:25 |
| leg_size_min | 5 | contracts printed from 15:00, each leg | engine/config.py:253 | tests/test_sc_frozen_params.py:25 |
| spread_max | 0.08 | of the quote's midpoint, each leg | engine/config.py:254 | tests/test_sc_frozen_params.py:25 |
| select_n | 10 | names a week | engine/config.py:255 | tests/test_sc_frozen_params.py:25 |
| c2_excluded_sectors | Technology | the screener's sector labels removed before the ten are picked | engine/config.py:256 | tests/test_sc_frozen_params.py:25 |
| stress_sigma | 3 | σ, the stress move | engine/config.py:258 | tests/test_sc_frozen_params.py:25 |
| equity | 100000 | USD | engine/config.py:264 | tests/test_sc_frozen_params.py:25 |
| ss_stress_frac | 0.01 | of equity | engine/config.py:266 | tests/test_sc_frozen_params.py:25 |
| max_new_per_week | 10 | new positions a week in this book | engine/config.py:267 | tests/test_sc_frozen_params.py:25 |
| max_open_per_variant | 20 | positions open in this book | engine/config.py:268 | tests/test_sc_frozen_params.py:25 |
| max_open_per_sector | 4 | positions open per sector in this book | engine/config.py:269 | tests/test_sc_frozen_params.py:25 |
| book_budget_frac | 0.4 | of the risk of 20 positions at 1% of equity each, so $8,000, while S-B's champion holds a position | engine/config.py:270 | tests/test_sc_frozen_params.py:25 |
| LATE_START | 15:00:00 | ET, the late window's start; it runs to the close | engine/config.py:42 | tests/test_frozen_params.py:39 |
| COMMISSION_PER_CONTRACT | 0.65 | USD a contract, each leg | engine/config.py:55 | tests/test_frozen_params.py:39 |
| SPLIT_TOL | 0.05 | gap between the screener's and the daily bars' entry close read as a split | engine/strategies/sc.py:38 | tests/test_sc_frozen_params.py:39 |
| SC_READ_MIN_WEEKS | 40 | entry weeks with graded positions before the read | engine/config.py:286 | tests/test_sc_frozen_params.py:32 |
Its read
Record so far
Cost model
half of each leg's quoted spread from 15:00 to 16:00 ET plus $0.65 a contract at entry; nothing at expiry
Trades
5 trades
| Opened | Closed | Account | Symbol | Side | Size | Entry | Exit | P&L | Net P&L | Return | Held | Exit by | Status | Record |
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Oct 9, 2026 | — | MA | OKLO | short | 1 | 4.932266 | — | — | — | — | — | — | open | GitHub ledger (1) |
| Oct 2, 2026 | — | MA | CRCL | short | 1 | 11.195714 | — | — | — | — | — | — | open | GitHub ledger (1) |
| Oct 2, 2026 | — | MA | MARA | short | 1 | 1.937313 | — | — | — | — | — | — | open | GitHub ledger (1) |
| Oct 2, 2026 | — | MA | OKLO | short | 1 | 5.067917 | — | — | — | — | — | — | open | GitHub ledger (1) |
| Oct 2, 2026 | — | MA | WULF | short | 1 | 2.641429 | — | — | — | — | — | — | open | GitHub ledger (1) |
- (1) Record GitHub ledger
Cost model
half of each leg's quoted spread from 15:00 to 16:00 ET plus $0.65 a contract at entry; nothing at expiry
Where the research is
- market-analysis
- S-C's specification (findings market-analysis/DESIGN/90)