Ewan Li

F2

0DTE level-to-level option scalp

forward logbookforwardstartedSep 30, 2026

What it is

The owner's level-to-level guide without its 1-hour trend filter and its sector breadth filter. On SPY and QQQ, a 0DTE option is bought when a 5-minute bar touches a level zone and closes back on its side, and a 2-minute close then breaks that bar's high (a call) or low (a put). The nightly log prices each trade on the real 1-minute option bars; no order is sent. A forward test of its trades from 2026-10-01 (the log began the session before), evaluated once at 100 trades or at the end of 2027, whichever comes first.

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.
  • Setup: a 5-minute bar comes down to within one tolerance of a zone and closes above it, after one of the six 5-minute closes before it was at least three tolerances above the zone. That sets up a call; a put mirrors it from below.
  • Trigger: a 2-minute close above the setup bar's high buys a call (below its low, a put), within 30 minutes of the setup bar's close. A close beyond the bar's other side cancels the setup, and a newer setup on the same side replaces it.
  • 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, at most 4 a session, and one per zone and side.
  • 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.
  • 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.
NameValueUnitWhere it livesPinned by
tol_atr0.05of the previous session's 14-day ATRodte/rules.py:16tests/test_signals_contracts.py:110
approach_mult3tolerancesodte/rules.py:26tests/test_signals_contracts.py:110
setup_expiry_min30minutesodte/rules.py:27tests/test_signals_contracts.py:110
window_start11:00ETodte/rules.py:29tests/test_signals_contracts.py:110
window_end15:30ETodte/rules.py:30tests/test_signals_contracts.py:110
late_cutoff14:00ETodte/rules.py:31tests/test_signals_contracts.py:110
biasnone—odte/rules.py:103tests/test_forward.py:28
breadthfalse—odte/rules.py:103tests/test_forward.py:28
room_morning2USDodte/rules.py:34tests/test_signals_contracts.py:110
room_late1USDodte/rules.py:35tests/test_signals_contracts.py:110
max_entries4—odte/rules.py:36tests/test_signals_contracts.py:110
dte0daysodte/rules.py:38tests/test_signals_contracts.py:110
otm_morning2USDodte/rules.py:40tests/test_signals_contracts.py:110
otm_late1USDodte/rules.py:41tests/test_signals_contracts.py:110
cap_morning0.66USDodte/rules.py:44tests/test_signals_contracts.py:110
cap_late0.4USDodte/rules.py:45tests/test_signals_contracts.py:110
floor0.05USDodte/rules.py:46tests/test_signals_contracts.py:110
stale_min5minutesodte/rules.py:47—
fill_wait_min3minutesodte/rules.py:52—
ladderL1—odte/rules.py:49tests/test_signals_contracts.py:110
stop_frac0.75of the price paidodte/rules.py:51tests/test_signals_contracts.py:110
exit_time15:55ETodte/rules.py:53tests/test_signals_contracts.py:110
costs.base.slip0.01USD a sideodte/backtest.py:24—
costs.base.commission0.65USD a contract a sideodte/backtest.py:24—
MIN_RTH_MINUTES300regular-hours minutesodte/backtest.py:25—

Its read

What is read
F2 on SPY and QQQ since 2026-10-01
Read on
late April or early May 2027
Trades needed
100
Trades logged
11
Hard stop
Dec 31, 2027
Shipped on
—
Deployed commit
bc9b659

Record so far

11 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; a ladder sale is at its level

Signals

Each signal as the log wrote it, a table a session. Nothing here is added up.

Tue, Oct 13, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
09:52SPYputwindow————
09:58SPYputwindow————
10:12SPYcallwindow————
10:26SPYcallwindow————
11:06SPYcallroom————
11:48QQQcallENTRYC743 at 0.2512:37 ETstop+193.8%
12:48QQQputENTRYP741 at 0.2613:39 ETstop+43.1%
12:58SPYputroom————
14:06SPYcallroom————
14:18SPYputroom————
14:24SPYputroom————
14:38SPYputroom————
15:46SPYputwindow————
15:52QQQputwindow————

Mon, Oct 12, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
09:54QQQputwindow————
10:06QQQputwindow————
12:14SPYputroom————
13:14SPYcallroom————

Fri, Oct 9, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
09:54SPYcallwindow————
10:40QQQputwindow————
10:42QQQputwindow————
11:08SPYputroom————
11:30QQQputroom————
11:30SPYputroom————
11:32SPYputroom————
11:34QQQputroom————

Thu, Oct 8, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
10:06QQQcallwindow————
12:34SPYputroom————
12:38SPYputroom————
12:48SPYputroom————
13:14SPYcallroom————
13:22SPYputENTRYP770 at 0.4113:34 ETstop+45.6%
13:54SPYputroom————
14:32SPYputbook_limit————
14:44SPYputbook_limit————

Wed, Oct 7, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
11:00QQQcallroom————
11:08QQQcallroom————
11:22SPYputENTRYP773 at 0.4711:30 ETstop−29.9%
15:08SPYputENTRYP776 at 0.1315:08 ETstop−42.7%

Tue, Oct 6, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
10:38SPYcallwindow————
13:28SPYcallENTRYC782 at 0.0813:28 ETstop−53.8%

Mon, Oct 5, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
10:08SPYcallwindow————
10:10QQQcallwindow————
10:14QQQcallwindow————
11:08QQQputroom————

Fri, Oct 2, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
09:44QQQcallwindow————
09:54SPYputwindow————
09:58SPYputwindow————
10:12QQQputwindow————
10:12SPYputwindow————
10:42QQQcallwindow————
11:34SPYcallENTRYC771 at 0.5411:41 ETstop−29.3%
11:40SPYcallposition_open————
12:24QQQputENTRYP748 at 0.5512:38 ETstop−29.2%
12:30QQQputposition_open————
13:08QQQputbook_limit————

Thu, Oct 1, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
10:20QQQputwindow————
10:34QQQcallwindow————
10:40QQQcallwindow————
10:48QQQputwindow————
10:48SPYputwindow————
10:52QQQputwindow————
10:52SPYputwindow————
11:02QQQputpremium_gate————
11:18QQQcallroom————
11:28QQQcallroom————
11:32QQQputroom————
12:42QQQputroom————
12:52SPYputENTRYP759 at 0.4313:02 ETstop−30.3%
12:54QQQputENTRYP736 at 0.6213:02 ETstop−28.7%
13:52QQQputENTRYP742 at 0.6114:18 ETstop+122.5%
14:14SPYcallpremium_gate————
14:24QQQcallpremium_gate————
14:24SPYcallpremium_gate————

Wed, Sep 30, 2026

Time (ET)SymbolSideOutcomeContractExitExit byNet
10:00QQQcallwindow————
10:28SPYputwindow————
10:50QQQcallwindow————
10:54QQQcallwindow————
11:16SPYcallENTRYC771 at 0.3511:22 ETstop−31.6%
11:30SPYcallbook_limit————
12:04SPYcallbook_limit————
12:42SPYcallbook_limit————
13:32QQQcallENTRYC745 at 0.6315:54 ETstop−28.7%
13:32SPYcallroom————
13:40QQQcallposition_open————
13:40SPYcallroom————
13:42SPYcallroom————
14:06SPYputroom————

Where the research is

  • The forward protocol (findings tr-odte-option-scalp/DESIGN/10)