Ewan Li

S-C C1 iron butterfly

Single-name variance premium, earnings-free

paperaccountMAbookC1-IBstartedOct 2, 2026

What it is

Sells iron butterflies 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, and a call and a put about two standard deviations away bought to cap the loss. Fewer than ten usually qualify (five in its first week) and some weeks none do. It is S-C's defined-risk launch candidate; S-C's short straddle sells the same stocks without wings. C1 takes every sector; C2 removes the stocks the screener labels Technology before picking its ten. C1 and C2 hold the same position whenever both pick a stock, 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, from every sector.
  • Entry: the last session of the week; the call and put sold at their average traded price from 15:00 to 16:00 ET.
  • Wings: a call bought at S + 2σ and a put at S − 2σ, each at the nearest strike on the expiry's grid, which need not have traded, with S the close and σ = S × the 30-day implied volatility × √(days to expiry/365). A wing is priced at its average traded price from 15:00 to 16:00 ET if at least 5 contracts traded then, at the quote's midpoint at its last print in that window if fewer did, and otherwise by Black-Scholes from the close and the 30-day implied volatility, adjusted for the contract's own implied volatility when it traded in the five sessions before. A stock whose wings would not fall on either side of the sold strike gets no iron butterfly that week.
  • Size: as many contracts as keep the max loss, the wider wing's width less the credit, within 0.5% of $100,000, but at least one, so a stock whose one contract risks more is still entered at one contract (two of the five on 2026-10-02 risked $917 and $1,933); the return is measured on the max loss.
  • 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 $4,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.
NameValueUnitWhere it livesPinned by
price_min10USD, the entry session's closeengine/config.py:243tests/test_sc_frozen_params.py:25
mcap_min1000000000USD of market capengine/config.py:244tests/test_sc_frozen_params.py:25
mcap_max20000000000USD of market capengine/config.py:245tests/test_sc_frozen_params.py:25
adv_min50000000USD a day, 20-session average dollar volumeengine/config.py:246tests/test_sc_frozen_params.py:25
ADV_WINDOW_SESSIONS20sessions in the average dollar volumeengine/strategies/sc_data.py:17—
iv30d_min0.330-day implied volatility, annualized, as a fractionengine/config.py:247tests/test_sc_frozen_params.py:25
iv30d_max0.830-day implied volatility, annualized, as a fractionengine/config.py:248tests/test_sc_frozen_params.py:25
dte_cal_min20calendar daysengine/config.py:249tests/test_sc_frozen_params.py:25
dte_cal_max40calendar daysengine/config.py:250tests/test_sc_frozen_params.py:25
target_dte_cal28calendar daysengine/config.py:251tests/test_sc_frozen_params.py:25
atm_band0.025of the closeengine/config.py:252tests/test_sc_frozen_params.py:25
leg_size_min5contracts printed from 15:00, each legengine/config.py:253tests/test_sc_frozen_params.py:25
spread_max0.08of the quote's midpoint, each legengine/config.py:254tests/test_sc_frozen_params.py:25
select_n10names a weekengine/config.py:255tests/test_sc_frozen_params.py:25
wing_sigma2σ, the wings' distance from Sengine/config.py:257tests/test_sc_frozen_params.py:25
equity100000USDengine/config.py:264tests/test_sc_frozen_params.py:25
ib_max_loss_frac0.005of equityengine/config.py:265tests/test_sc_frozen_params.py:25
max_new_per_week10new positions a week in this bookengine/config.py:267tests/test_sc_frozen_params.py:25
max_open_per_variant20positions open in this bookengine/config.py:268tests/test_sc_frozen_params.py:25
max_open_per_sector4positions open per sector in this bookengine/config.py:269tests/test_sc_frozen_params.py:25
book_budget_frac0.4of the risk of 20 positions at 0.5% of equity each, so $4,000, while S-B's champion holds a positionengine/config.py:270tests/test_sc_frozen_params.py:25
LATE_START15:00:00ET, the late window's start; it runs to the closeengine/config.py:42tests/test_frozen_params.py:39
COMMISSION_PER_CONTRACT0.65USD a contract, each legengine/config.py:55tests/test_frozen_params.py:39
TIER1_MIN_SIZE5contracts printed from 15:00 for a wing to be priced at its average traded priceengine/config.py:50tests/test_frozen_params.py:39
MODEL_IV_LOOKBACK5sessions back for a model-priced wing's own implied volatilityengine/config.py:52tests/test_frozen_params.py:39
MODEL_SPREAD_LOOKBACK20sessions of the stock's option spreads behind a model-priced wing's spreadengine/config.py:53tests/test_frozen_params.py:39
MODEL_SPREAD_FLOOR0.05a model-priced wing's least spreadengine/config.py:51tests/test_frozen_params.py:39
SPLIT_TOL0.05gap between the screener's and the daily bars' entry close read as a splitengine/strategies/sc.py:38tests/test_sc_frozen_params.py:39
SC_READ_MIN_WEEKS40entry weeks with graded positions before the readengine/config.py:286tests/test_sc_frozen_params.py:32

Its read

What is read
the go or no-go on S-C's pre-registered bar for C1's iron butterflies, due at the first weekly cycle at which the forward ledger holds graded positions from at least 40 entry weeks of them; every selection counts, inside the caps or not
Read on
around October 2027
Trades needed
—
Trades logged
—
Hard stop
—
Shipped on
—
Deployed commit
4a94224

Record so far

Closed trades
0
Won
—
P&L
—
Net P&L
—
Closed without a P&L
—
Closed without a net P&L
—
Open
6
Record GitHub ledger
Cost model

half of each leg's spread plus $0.65 a contract at entry, the spread quoted from 15:00 to 16:00 ET or, for a wing priced by model, the stock's median option spread over the 20 sessions before, at least 5%; nothing at expiry

Trades

6 trades

OpenedClosedAccountSymbolSideSizeEntryExitP&LNet P&LReturnHeldExit byStatusRecord
Oct 9, 2026—MAOKLOshort14.652923——————openGitHub ledger (1)
Oct 2, 2026—MACRCLshort110.671829——————openGitHub ledger (1)
Oct 2, 2026—MAMARAshort11.826553——————openGitHub ledger (1)
Oct 2, 2026—MAOKLOshort14.825618——————openGitHub ledger (1)
Oct 2, 2026—MAQBTSshort12.088474——————openGitHub ledger (1)
Oct 2, 2026—MAWULFshort12.462839——————openGitHub ledger (1)
  1. (1)
    Record GitHub ledger
    Cost model

    half of each leg's spread plus $0.65 a contract at entry, the spread quoted from 15:00 to 16:00 ET or, for a wing priced by model, the stock's median option spread over the 20 sessions before, at least 5%; nothing at expiry

Where the research is