Ewan Li

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.
NameValueUnitWhere it livesPinned by
signalgapgo5—lab4/forward.py:73tests/test_lab4.py:683
structureX0|h30|s0|none—lab4/forward.py:73tests/test_lab4.py:683
GAP_SD0.5daily SDslab4/signals.py:22—
STALE_MIN5minuteslab4/structure.py:30—
WAIT_MIN3minuteslab4/structure.py:30—
costs.base.slip0.01USD a sidelab4/structure.py:29—
costs.base.commission0.65USD a contract a sidelab4/structure.py:29—
costs.stress.slip0.02USD a sidelab4/structure.py:29—
MIN_RTH_MINUTES300regular-hours minutesodte/backtest.py:25—

Its read

What is read
P4-GAP on SPY and QQQ since 2026-10-05
Read on
around February 2028
Trades needed
100
Trades logged
3
Hard stop
Dec 31, 2028
Shipped on
—
Deployed commit
bc9b659

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)SymbolSideOutcomeContractExitExit byNet
09:36QQQputENTRYP754 at 1.9610:06 ETtime−23.6%

Wed, Oct 7, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
09:36SPYputENTRYP775 at 1.2910:06 ETtime+16.8%

Tue, Oct 6, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
09:36SPYcallENTRYC778 at 1.3610:06 ETtime+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)