0DTE forward logs
P4-GAP
0DTE opening-gap momentum
forward logbookforward-p4startedOct 5, 2026
What it is
At 09:36 ET on SPY and QQQ, if the open gapped at least half a daily standard deviation from the previous close and the price is still beyond the open, an at-the-money 0DTE option is bought in the gap's direction and sold at 10:06. The nightly log prices each trade on the real 1-minute option bars; no order is sent. A forward test, read once at 100 trades or at the end of 2028, whichever comes first.
The rule
- Signal: at 09:36 ET, once per underlying a session. The gap is the open's change from the previous close, in daily SDs. The open is the 09:30 1-minute bar's open and the previous close the last regular-hours 1-minute bar's close of the session before, both unadjusted, so a gap on an ex-dividend day includes the dividend. The daily SD is the standard deviation of the last 14 daily log returns, through the previous session. The 09:36 price is the close of the 2-minute bar that ends then. A gap up of 0.5 SDs or more with the 09:36 price above the open buys a call; a gap down of 0.5 SDs or more with the 09:36 price below the open buys a put.
- Sessions: a session is traded only when SPY and QQQ each have at least 300 regular-hours minutes of bars on it and on the session before unless that one closed early, so a session that closes early has no trades.
- Contract: 0DTE, the $1 strike nearest the 09:36 price. Its last trade must be at most 5 minutes old and at least $0.05.
- Entry: at the open of the contract's first 1-minute bar from 09:36, if it starts within 3 minutes.
- Exit: at 10:06, at the open of the contract's 10:06 bar or its last trade before then. No target.
- Stop: none, so the option can lose all of its premium.
- Costs: bought $0.01 above and sold $0.01 below the bar's price, and $0.65 a contract a side. The log also records each trade at no costs, and at $0.02 a side with the same commission.
| Name | Value | Unit | Where it lives | Pinned by |
|---|---|---|---|---|
| signal | gapgo5 | — | lab4/forward.py:73 | tests/test_lab4.py:683 |
| structure | X0|h30|s0|none | — | lab4/forward.py:73 | tests/test_lab4.py:683 |
| GAP_SD | 0.5 | daily SDs | lab4/signals.py:22 | — |
| STALE_MIN | 5 | minutes | lab4/structure.py:30 | — |
| WAIT_MIN | 3 | minutes | lab4/structure.py:30 | — |
| costs.base.slip | 0.01 | USD a side | lab4/structure.py:29 | — |
| costs.base.commission | 0.65 | USD a contract a side | lab4/structure.py:29 | — |
| costs.stress.slip | 0.02 | USD a side | lab4/structure.py:29 | — |
| MIN_RTH_MINUTES | 300 | regular-hours minutes | odte/backtest.py:25 | — |
Its read
Record so far
3 of 100 trades logged. Its record is read once, at that count, and is not added up before then.
Record Forward log
Cost model
$0.01 a side and $0.65 a contract a side, on 1-minute OPRA bars; also logged at no costs and at $0.02 a side
Signals
Each signal as the log wrote it, a table a session. Nothing here is added up.
Thu, Oct 8, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 09:36 | QQQ | put | ENTRY | P754 at 1.96 | 10:06 ET | time | −23.6% |
Wed, Oct 7, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 09:36 | SPY | put | ENTRY | P775 at 1.29 | 10:06 ET | time | +16.8% |
Tue, Oct 6, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 09:36 | SPY | call | ENTRY | C778 at 1.36 | 10:06 ET | time | +74.8% |
Where the research is
- The finalist, its read and the forward log (findings tr-odte-option-scalp/DESIGN/31)
- Protocol 4's plan (findings tr-odte-option-scalp/DESIGN/30)
- The search (findings tr-odte-option-scalp/RESEARCH/60)
- The owner's decisions on protocol 4 (findings tr-odte-option-scalp/DESIGN/32)