0DTE forward logs
info-D
0DTE noise-area breakout option scalp
What it is
The plain noise-area breakout from protocol 3's search for a better entry under the owner's contract rule, with neither the 1-hour trend filter nor the sector breadth filter. On SPY and QQQ, a 0DTE option is bought when price is outside the day's noise area at a half-hour check. The nightly log prices each trade on the real 1-minute option bars; no order is sent. Logged nightly for information only; it will not be evaluated.
The rule
- Levels: the previous session's high and low from 04:00 to 19:59 ET, its 09:30 open and its last regular-hours close, this session's pre-market high and low, and up to four spike-and-reverse wicks on the last 10 sessions' 1-hour bars. Taken in order of price, a level joins a zone while it is within one tolerance of the zone's lowest level, and the zone sits at the mean of its levels. The tolerance is 0.05 times the 14-day average true range as of the previous session. Here the levels only set the room.
- Signal: at each half hour from 11:00 to 15:30 ET, the 1-minute close that ends at the check: above the noise area's top, max(open, previous close) × (1 + σ), buys a call; below its bottom, min(open, previous close) × (1 − σ), a put. σ for that minute is the average, over the previous 14 sessions (at least 10 of them with data), of the absolute percentage move from that session's 09:30 open to the same minute. The open is the 09:30 1-minute bar's open and the previous close the last regular-hours 1-minute close of the session before, both unadjusted.
- Filters: none: neither the 1-hour trend filter nor the sector breadth filter.
- Entries: decided from 11:00 to 15:30 ET, with at least $2 of room to the next zone in the trade's direction before 14:00 and $1 after. On each underlying, one position at a time and at most 4 a session.
- Contract: 0DTE, at the $1 strike nearest the price $2 out of the money before 14:00 and $1 after. Its last trade must be at most 5 minutes old and from $0.05 to $0.66, or to $0.40 after 14:00.
- Fill: bought at the open of the contract's first 1-minute bar from the decision, if it starts within 3 minutes.
- Exit: a stop at 75% of the price paid. At twice the price paid, half is sold and the stop moves to the price paid; at three times, half the rest is sold and the stop moves to twice the price paid; each further multiple raises the stop to the one below it. Only the stop is checked on the entry bar, and a raised stop applies from the next bar. A stop sells at the lower of the stop and the bar's open. What is left is sold at 15:55, at the open of the contract's 15:55 bar or its last trade before then.
- Costs: bought $0.01 above the bar's price and sold $0.01 below it, and $0.65 a contract a side; a ladder sale is at its level, once a bar's high is $0.01 above it. The log also records each trade at no costs, and at $0.02 a side with the same commission.
- Sessions: none on a session that closes early, or when the underlying's bars cover fewer than 300 regular-hours minutes of the session, or of the session before it unless that one closed early.
| Name | Value | Unit | Where it lives | Pinned by |
|---|---|---|---|---|
| config | D-30 | — | lab/forward_v5.py:66 | — |
| tol_atr | 0.05 | of the previous session's 14-day ATR | odte/rules.py:16 | tests/test_signals_contracts.py:110 |
| window_start | 11:00 | ET | lab/engine.py:46 | — |
| window_end | 15:30 | ET | lab/engine.py:47 | — |
| late_cutoff | 14:00 | ET | lab/engine.py:48 | tests/test_lab.py:65 |
| trend | none | — | lab/configs.py:14 | — |
| breadth | none | — | lab/configs.py:14 | — |
| room_morning | 2 | USD | lab/engine.py:49 | tests/test_lab.py:65 |
| room_late | 1 | USD | lab/engine.py:50 | tests/test_lab.py:65 |
| max_entries | 4 | — | lab/engine.py:51 | tests/test_lab.py:65 |
| dte | 0 | days | odte/rules.py:38 | tests/test_signals_contracts.py:110 |
| otm_morning | 2 | USD | lab/engine.py:58 | tests/test_lab.py:65 |
| otm_late | 1 | USD | lab/engine.py:59 | tests/test_lab.py:65 |
| cap_morning | 0.66 | USD | lab/engine.py:60 | tests/test_lab.py:65 |
| cap_late | 0.4 | USD | lab/engine.py:61 | tests/test_lab.py:65 |
| floor | 0.05 | USD | lab/engine.py:62 | — |
| stale_min | 5 | minutes | odte/rules.py:47 | — |
| fill_wait_min | 3 | minutes | odte/rules.py:52 | — |
| ladder | L1 | — | lab/engine.py:53 | tests/test_lab.py:65 |
| stop_frac | 0.75 | of the price paid | lab/engine.py:52 | tests/test_lab.py:65 |
| exit_time | 15:55 | ET | lab/engine.py:55 | tests/test_lab.py:65 |
| exit_rule | ladder | — | lab/engine.py:56 | tests/test_lab.py:65 |
| NOISE_SESSIONS | 14 | sessions | lab/features.py:30 | — |
| NOISE_MIN | 10 | sessions with data | lab/features.py:30 | — |
| costs.base.slip | 0.01 | USD a side | odte/backtest.py:24 | — |
| costs.base.commission | 0.65 | USD a contract a side | odte/backtest.py:24 | — |
| costs.stress.slip | 0.02 | USD a side | odte/backtest.py:24 | — |
| MIN_RTH_MINUTES | 300 | regular-hours minutes | odte/backtest.py:25 | — |
Its read
Record so far
This rule is logged for information: its record is shown only as rows, never added up.
Cost model
$0.01 a side and $0.65 a contract a side, on 1-minute OPRA bars; a ladder sale is at its level; 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.
Mon, Oct 12, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 11:00 | QQQ | put | ENTRY | P745 at 0.46 | 11:38 ET | stop | −30.0% |
| 12:30 | QQQ | put | ENTRY | P745 at 0.28 | 12:30 ET | stop | −33.2% |
| 13:00 | QQQ | put | ENTRY | P744 at 0.31 | 13:00 ET | stop | −32.4% |
| 13:30 | QQQ | put | ENTRY | P744 at 0.18 | 13:46 ET | stop | −37.8% |
Fri, Oct 9, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 15:00 | SPY | call | ENTRY | C780 at 0.14 | 15:05 ET | stop | −41.4% |
| 15:30 | SPY | call | ENTRY | C780 at 0.09 | 15:36 ET | stop | −50.6% |
Thu, Oct 8, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 15:30 | QQQ | put | ENTRY | P746 at 0.36 | 15:38 ET | stop | −31.4% |
Tue, Oct 6, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 11:00 | SPY | call | ENTRY | C782 at 0.35 | 12:16 ET | stop | −31.6% |
Mon, Oct 5, 2026
| Time (ET) | Symbol | Side | Outcome | Contract | Exit | Exit by | Net |
|---|---|---|---|---|---|---|---|
| 11:00 | SPY | call | ENTRY | C775 at 0.22 | 11:03 ET | stop | −35.4% |
| 11:30 | SPY | call | ENTRY | C775 at 0.18 | 12:03 ET | stop | −37.8% |
| 12:30 | SPY | call | ENTRY | C776 at 0.10 | 12:30 ET | stop | −48.0% |
| 13:00 | SPY | call | ENTRY | C776 at 0.14 | 13:03 ET | stop | −45.0% |
| 13:30 | QQQ | call | ENTRY | C757 at 0.10 | 14:05 ET | stop | +32.0% |
| 14:30 | QQQ | call | ENTRY | C757 at 0.15 | 14:31 ET | stop | −40.3% |
| 15:00 | QQQ | call | ENTRY | C757 at 0.14 | 15:24 ET | stop | +113.9% |
| 15:30 | QQQ | call | ENTRY | C758 at 0.08 | 15:33 ET | stop | −53.8% |
Where the research is
- Protocol 3's finalists and forward log (findings tr-odte-option-scalp/DESIGN/21)
- Protocol 3's plan and entry families (findings tr-odte-option-scalp/DESIGN/20)