Time-of-day + day-of-week corpus analysis
Context. 2026-05-14 mid-session, after the SL-tightening and peak-stop simulations both proved net-negative, the remaining downside-control hypothesis was time-weighted entry preference. Tested against the full corpus (22 trading days, 316 trades, 2026-04-07 → 2026-05-14).
Strongest finding yet: time-of-day is a clean, corpus-wide signal. Day-of-week is noisy and outlier-driven.
Time-of-day (CT) - 316 trades
| Window | n | WR | TP% | sum $ | avg per trade |
|---|---|---|---|---|---|
| 8:30-9:00 (open) | 36 | 64% | 28% | +$12,999 | +$361 |
| 9:00-10:00 (early) | 83 | 64% | 18% | +$39,969 | +$482 |
| 10:00-11:00 (midmorn) | 53 | 58% | 19% | +$24,636 | +$465 |
| 11:00-12:00 (late morn) | 40 | 55% | 25% | -$11,047 | -$276 |
| 12:00-13:00 (lunch) | 67 | 58% | 21% | -$43,410 | -$648 |
| 13:00-14:00 (early PM) | 37 | 59% | 27% | -$12,218 | -$330 |
Win rate stays flat 55-64% across all buckets. Expected value per trade flips sign at 11:00 CT. The engine produces the same quality of signal across the day, but the trades that fire in the morning realize positive EV and the trades that fire midday realize negative EV. The signal isn’t worse midday - the realized outcome is.
This is consistent with the THESIS_INVALID-lag failure mode (task #100): midday market is choppier, the lagging exit logic bleeds harder, and the wide-spread option vol in chop tilts payoffs against winners.
Day-of-week - be careful, dominated by outliers
| Day | n | WR | TP% | sum $ |
|---|---|---|---|---|
| Mon | 76 | 66% | 13% | +$12,684 |
| Tue | 81 | 67% | 30% | +$67,004 |
| Wed | 68 | 50% | 16% | -$18,869 |
| Thu | 72 | 58% | 28% | -$42,682 |
| Fri | 19 | 53% | 21% | -$7,207 |
Tuesday’s apparent +74,373). Strip that day: Tuesday becomes **-19.6k. With only ~4-5 of each weekday in 22 days, single outliers swamp signal.
Do not gate on day-of-week yet. Re-validate at 60+ days when each weekday has 12+ samples.
Heatmap: time × day (cumulative $)
Mon Tue Wed Thu Fri TOTAL
8:30-9:00 +8,645 -3,032 -5,244 +12,630 0 +12,999
9:00-10:00 +6,595 +51,184 -8,530 -17,631 +8,350 +39,969
10:00-11:00 -226 +26,060 +283 -5,063 +3,582 +24,636
11:00-12:00 -5,567 -8,551 +6,644 -3,573 0 -11,047
12:00-13:00 +1,281 +2,319 -9,103 -17,868 -20,040 -43,410
13:00-14:00 +1,955 -976 -2,920 -11,177 +900 -12,218
The 9:00-10:00 Tuesday cell (+$51k) is the 05-05 outlier. Outside that single cell, morning rows (9:00-11:00) are positive on 4 of 5 weekdays. Midday row (12:00-13:00) is negative on 4 of 5 weekdays. The time-of-day pattern is robust even after stripping outliers.
Hypothetical impact on corpus
- Actual corpus P&L: +$10,929
- Skip all entries after 11:00 CT: +$77,605 (7× better)
- Skip only 11:00-13:00 chop window: +$65,386 (6× better)
Caveats and interpretation
The pattern may be the engine’s defect, not market truth. This engine catches morning momentum well; chop and reversal regimes (more common midday) expose the THESIS_INVALID lag and TP/SL geometry issues. A well-designed MK3 with regime detection might trade midday productively. The time-of-day rule corrects for this engine’s weakness - fair filter for MK2 paper, but MK3 should aim for “trade well anytime.”
Sample-size sanity:
- Each time-of-day bucket has 36-83 trades. Buckets are statistically meaningful.
- Each weekday has 19-81 trades. Tuesday and Friday have low n. Tuesday is single-day-dominated.
- 22 days is not enough for confident day-of-week claims.
Decision
For MK2 paper-trading:
- Keep current behavior (trade all day). The point is data collection - including the bad midday trades that train the regime detector.
For MK3 design:
- Bake the time-of-day pattern in as a feature, not as a hard gate. Let the model use “minutes from open” alongside other features. Already partially captured via
session_edge.minutes_to_market_closeandtime_of_day_labelin scoring_events. - Build the regime detector explicitly. Trending vs choppy is the underlying signal here; “time of day” is just a proxy. MK3 should learn the regime from features (VWAP distance, intraday range, IV term structure, flow signatures) and adapt strategy.
For potential real-cash deployment (long horizon, post-MK3):
- Skip 11:00-13:00 CT entries is the simplest empirically-grounded rule. Would have improved corpus 6× with zero engine changes.
- Do not gate on day-of-week. Insufficient data, outlier-contaminated.
Memory links
- 2026-05-14-impulse-vs-composite-empirical-tier-analysis - same-day analysis: don’t tier the score threshold
- 2026-05-14-sl-and-peak-stop-corpus-validation - same-day analysis: don’t tighten SL, don’t add peak-stop
- project_impulse_corpus_may14 - IMPULSE TP-hit analysis
- project_eod_power_hour - power-hour regime detection (related)
- Task #85 - Open-auction regime gate (related)
- Task #100 - P0: thesis-invalid lag + TP/SL geometry (root cause of midday bleed)