market-analysis
S-B QQQ put spread, exploration
Index volatility premium with a VIX gate
What it is
The exploration twin of S-B's QQQ put spread: the champion's rules with the gate ignored, one contract each week its legs pass the champion's other rules, with the gate's verdict on each position. It exists so the gate itself can be graded: S-B's exploration positions entered with the gate on against those entered with it off, all four exploration books together. It never counts toward the champion's record, its limit of three open or its go or no-go.
The rule
- Gate, recorded, not applied: VIX3M above VIX (G1) and VXN above its median of the 20 sessions before (G2), both on the prior close; ON, or OFF with the condition or conditions that failed (OFF:G1, OFF:G2 or OFF:G1,G2). A missing value still means no entry.
- Entry: each week whatever the gate says, under the champion's other rules: the last session of the week, each leg priced at its average traded price from 15:00 to 16:00 ET; of the expiries that traded that day, the Friday one (the Thursday before a Friday holiday) nearest 21 calendar days out, between 7 and 30.
- Strikes: short put at S(1 − m), long put at S(1 − 2m), with S QQQ's price at the day's last option print and m = VXN/100 × √(DTE/365), DTE the calendar days to expiry and VXN at that day's close; each the strike nearest its target, within 0.25m × S of it, that printed at least 5 contracts from 15:00. If a leg has no such strike in that expiry, there is no entry that week. S and m are taken at the end of the day, up to an hour after the prices the legs are entered at; S-B's specification accepts this gap.
- Spread: the short put's quoted spread at its prints from 15:00, averaged by size, at most 10% of the quote's midpoint; otherwise, or with no quote, no entry that week. The long put's is charged, not filtered.
- Size: one contract, with no limit on open positions; its return is measured on its max loss, the width less the credit.
- Exit: held to expiry and settled at intrinsic value against the official close (or QQQ's price at that day's last option print if the close is missing). Early assignment and dividends are not modelled.
| Name | Value | Unit | Where it lives | Pinned by |
|---|---|---|---|---|
| target_dte_cal | 21 | calendar days | engine/config.py:125 | tests/test_sb_frozen_params.py:31 |
| dte_cal_min | 7 | calendar days | engine/config.py:126 | tests/test_sb_frozen_params.py:31 |
| dte_cal_max | 30 | calendar days | engine/config.py:127 | tests/test_sb_frozen_params.py:31 |
| short_sigma | 1 | m, the short leg's distance from S | engine/config.py:128 | tests/test_sb_frozen_params.py:31 |
| wing_sigma | 2 | m, the long leg's distance from S | engine/config.py:129 | tests/test_sb_frozen_params.py:31 |
| strike_band_sigma | 0.25 | m × S, the most a strike may sit from its target | engine/config.py:130 | tests/test_sb_frozen_params.py:31 |
| leg_size_min | 5 | contracts printed from 15:00, each leg | engine/config.py:131 | tests/test_sb_frozen_params.py:31 |
| short_spread_max | 0.1 | of the quote's midpoint, short leg | engine/config.py:132 | tests/test_sb_frozen_params.py:31 |
| median_window | 20 | sessions | engine/config.py:133 | tests/test_sb_frozen_params.py:31 |
| 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 |
Its read
Record so far
Each closed trade's net P&L as the record keeps it, by the day it closed.
Closed trades — data table
| Closed | Symbol | P&L | Net P&L | Return |
|---|---|---|---|---|
| Oct 2, 2026 | QQQ | +$230.01 | +$224.53 | — |
| Oct 9, 2026 | QQQ | +$218.84 | +$212.19 | — |
Record GitHub ledger
Cost model
half of each leg's quoted spread plus $0.65 a contract at entry; $0.65 a contract 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 | QQQ | short | 1 | 2.081429 | — | — | — | — | — | — | open | GitHub ledger (1) |
| Oct 2, 2026 | — | MA | QQQ | short | 1 | 1.970454 | — | — | — | — | — | — | open | GitHub ledger (1) |
| Sep 25, 2026 | — | MA | QQQ | short | 1 | 1.930522 | — | — | — | — | — | — | open | GitHub ledger (1) |
| Sep 18, 2026 | Oct 9, 2026 | MA | QQQ | short | 1 | 2.188364 | 0.00 | +$218.84 | +$212.19 | — | 21 days | expiry | closed | GitHub ledger (1) |
| Sep 11, 2026 | Oct 2, 2026 | MA | QQQ | short | 1 | 2.300145 | 0.00 | +$230.01 | +$224.53 | — | 21 days | expiry | closed | GitHub ledger (1) |
- (1) Record GitHub ledger
Cost model
half of each leg's quoted spread plus $0.65 a contract at entry; $0.65 a contract at expiry
Where the research is
- market-analysis
- S-B's specification (findings market-analysis/DESIGN/80)
- Why the exploration book exists (findings market-analysis/DESIGN/100)