Does the market drift at the same time every day?
Averaged across 18 stocks and ETFs, September 2016 to December 2024, no half hour of the session drifted at any size the test could see. One stock in one half hour held up in both periods, before costs, and it is not shown to be a trade.
In plain words: nobody placed a trade and no trade is simulated on this page. It measures recorded prices, so a result here is not a trading result and no profit is implied.
In this article 9 sections
The short answer
No, not at any size this test could see. Averaged over 18 stocks and index funds and over many days, no half hour of the trading day beat or trailed the day’s average half hour by as much as 2 basis points (a basis point is one hundredth of one percent).
The test could have caught a lead or lag of roughly 2.5 to 4.6 basis points, depending on the half hour, about four times in five if it were the same in both periods. Smaller ones cannot be ruled out.
One pattern held up in both periods we compared (through 2021, then 2022 to 2024): AAPL’s first half hour, mostly its first minute. It is before costs, and nothing here shows a trade could capture it. SPY and QQQ on their own showed no half hour that held up.
What to do with this
- Read a time of day as context, not a forecast: at the sizes this test could see, no half hour moved reliably. This page measured clock time only, so it says nothing about walls, flips or regime at particular times of day.
- Before you believe a time-of-day pattern, ask how many were tried and whether it held in later years. Here 2 of 234 cells (one stock in one half hour) passed the first window (through 2021), shuffled runs of the same search averaged 0.2 passing, and 1 held.
- Do not read AAPL’s first half hour as a signal. Its plain average return was +7.6 basis points in 2022 to 2024, before costs, and GEXfreak’s earlier study, which this page re-measures, charges 10 basis points of cost per stock trade (4 per ETF trade), more than 7.6.
- A log of your own on one ticker cannot settle this quickly: after 100 sessions (about 5 months), SPY’s average must reach 3.4 to 5.8 basis points before its 95% range leaves out zero, 1.8 to 3.1 times the largest all-ticker drift here.
Drift in each half hour of the trading day
18 tickers · 2016-09 to 2024-12
This figure measures recorded prices; no trade is placed or simulated.
- Through 2021 (circle)
- 2022 to 2024 (open diamond)
| Half hour | Through 2021 | 2022 to 2024 |
|---|---|---|
| 09:30 to 10:00 | +0.6 (−1.9 to 3.1) | +0.6 (−2.1 to 3.2) |
| 10:00 to 10:30 | +0.9 (−1.2 to 3.0) | −1.0 (−3.4 to 1.3) |
| 10:30 to 11:00 | −1.4 (−3.5 to 0.7) | −1.1 (−3.1 to 0.9) |
| 11:00 to 11:30 | +0.6 (−1.2 to 2.5) | +1.1 (−0.7 to 2.9) |
| 11:30 to 12:00 | +0.5 (−1.0 to 2.0) | +0.6 (−0.9 to 2.2) |
| 12:00 to 12:30 | +0.3 (−1.1 to 1.8) | −1.8 (−3.4 to −0.1) |
| 12:30 to 13:00 | +0.2 (−1.2 to 1.7) | +0.3 (−1.1 to 1.7) |
| 13:00 to 13:30 | −0.9 (−2.3 to 0.5) | −0.6 (−2.1 to 0.9) |
| 13:30 to 14:00 | −1.2 (−2.5 to 0.1) | +1.1 (−0.5 to 2.6) |
| 14:00 to 14:30 | +0.5 (−1.1 to 2.0) | −1.2 (−3.0 to 0.5) |
| 14:30 to 15:00 | +0.6 (−0.9 to 2.1) | +1.9 (0.2 to 3.6) |
| 15:00 to 15:30 | −0.7 (−2.2 to 0.9) | +0.1 (−1.6 to 1.7) |
| 15:30 to 16:00 | −0.1 (−2.5 to 2.3) | +0.1 (−2.0 to 2.1) |
| Cell | Through 2021 | 2022 to 2024 | Result |
|---|---|---|---|
| AAPL 09:30 to 10:00 | +9.7 (4.9 to 14.5) | +6.8 (1.9 to 11.7) | Held |
| BAC 15:30 to 16:00 | −4.2 (−6.6 to −1.9) | −0.6 (−3.1 to 2.0) | Did not hold |
One recorded session, cut into half hours
SPY, Dec 31, 2024: the close of every minute, with a line where each half hour ends. The check-it-yourself steps below use this session.
Table, method and data source
- Basis points (bps): one hundredth of one percent of the price. A half-hour's return is 10,000 times the natural log of its end price over its start price.
- A half-hour's drift against that day's average half-hour: the half-hour's return minus the mean of the day's 13 half-hour returns, averaged over sessions. The first half-hour starts at the day's first print; each later one starts where the last ended; the last ends at the close of the 15:59 bar.
Data receipt: 15 sources, built 2026-09-28
Each source is fingerprinted with SHA-256, so a changed file changes the fingerprint. A single file shows its own hash; a source of several files shows one hash of their names and hashes.
- The study's rules and code, frozen before any statistic was computed ·
23d0b48dbb717a11… - The study's written report ·
9e33eeac188856b7… - Study table: every ticker and half-hour, both windows ·
23e47365805706eb… - Study table: all tickers together, by window ·
f82fef54588e8eb5… - Study table: all tickers together, by year ·
4e21db8838c71753… - Study table: the held cell by year ·
86c49ba460c031a0… - Study table: 500 shuffle runs ·
90ee1c972eaa12af… - Study record of the run (settings, windows, sessions per ticker) ·
8367eb60d1ddaa26… - Study record of sessions kept and dropped ·
9ae89c3342efea76… - Study table: per-session half-hour returns ·
8035dfadd8b0d8dc… - Study checks on the opening half-hour of one stock ·
4136a2dd78830650… - Study table: the opening minute by ticker ·
9a8f30754f6ece94… - Study check against a second price feed ·
6f3c08d9d4aa8ca3… - Regular-hours one-minute bars, 18 tickers, 2016-09 to 2024-12 (1598 files) ·
deb806eb6d39822d… - Daily bar files with the early-close flags, 18 tickers (18 files) ·
98614095c21931fe…
How we tested
This page re-measures an earlier GEXfreak study (“the study”), which reported 1 held cell of 234, from the recorded prices. We took 18 tickers (3 index funds, known as ETFs, and 15 stocks) and every one-minute price bar of the regular session, 09:30 to 16:00, from September 2016 to December 2024. We dropped sessions that were not full days (early closes, missing bars) and 24 January 2023, when opening prices were corrupt: 392 of 33,361 ticker-sessions (one ticker on one day), leaving 32,969. All-ticker figures average the tickers with equal weight, in basis points, from 1 May 2018, when every ticker has prices. Prices after 31 December 2024 were left unread.
The study’s record says its rules were fixed before any result was computed: years through 2021 are the first window and 2022 to 2024 the second. “Could see” means the size of a true drift, the same in both windows, that the study’s rule (pass the first window, then hold in the second) would pick out about four times in five.
As a check, we shuffled which half hour is which inside each day and ran the same search 500 times. At least one cell held in 5 of the 500 shuffled runs (1.0%): chance alone rarely produces a held cell.
Check it yourself with a spreadsheet
Your log tests one half hour of one ticker on your broker’s one-minute chart. Choose both before you look at any data, and keep one ticker per sheet: choosing after you see a pattern is how false leads are made.
Set the chart to one-minute bars, Eastern time, regular hours only (09:30 to 16:00), and skip half days and days with a missing bar. A half hour runs from C, the close of the bar just before it, to D, the close of its last bar: on a chart that stamps each bar with its start time, for 14:30 those are the 14:29 and 14:59 bars, and on one that stamps the end time, the 14:30 and 15:00 bars. For the 09:30 half hour, C is B.
Fill in every session your chart still shows, then add a row after each close. To check your formulas, type the worked row’s date and four prices into row 2 (a recorded day you will not find on a recent chart); results can differ in the last digit, because the recorded prices carry half cents.
| Column | What to write | Where it comes from |
|---|---|---|
| A | Session date | Calendar |
| B | First price of the day: the open of the 09:30 bar | Broker chart |
| C | Price where your half hour starts (see the set-up above). For the 09:30 half hour it is B, as in the study, which includes the first minute; to leave that minute out, use the close of the 09:30 bar | Broker chart |
| D | Price where your half hour ends: the close of its last bar | Broker chart |
| E | Last price of the day: the close of the last bar (stamped 15:59, or 16:00 on an end-stamped chart) | Broker chart |
| F | Half-hour return, bps | Formula in step 2 |
| G | The day’s average half hour, bps | Formula in step 3 |
| H | Drift against the day’s average, bps | Formula in step 4 |
The steps
- 1. After each close fill A to E. Worked row, SPY on 31 December 2024, the 09:30 half hour, from the recorded one-minute bars: A 2024-12-31, B 589.90, C 589.90, D 590.01, E 586.01.
- 2. F2 =10000*LN(D2/C2), the half hour’s return in basis points. Worked row: +1.9.
- 3. G2 =10000*LN(E2/B2)/13, because the day’s 13 half-hour returns add up to the whole day’s return. Worked row: 10000*LN(586.01/589.90)/13 is −5.1.
- 4. H2 =F2-G2. Worked row: +7.0, so that day’s 09:30 half hour beat the day’s average half hour by 7.0 basis points.
- 5. Read the log with =AVERAGE(H:H) and =COUNT(H:H); its 95% range runs from =AVERAGE(H:H)-1.96*STDEV.S(H:H)/SQRT(COUNT(H:H)) to the same with a plus, where STDEV.S is the spread: how far one session’s drift typically sits from the average. Worked check, AAPL 09:30 in 2022 to 2024: an average of +6.76 and a spread of 68.35 over 746 sessions give 1.9 to 11.7.
- 6. Put your target drift in K1 (4 is the study’s ETF cost) and write =(1.96*STDEV.S(H:H)/K1)^2: the sessions after which an average of K1 just clears zero, though a true drift of that size would still be missed about half the time (2.8 in place of 1.96 gives four times in five). Worked, at K1 = 4 with SPY’s recorded spreads (17.2 at 12:30 to 29.4 at 15:30): 72 to 208 sessions.
What a small log can say
For scale, the largest all-ticker drift was +1.89 at 14:30 in 2022 to 2024, and SPY’s spread at 14:30 is 19.86: =(1.96*19.86/1.89)^2 is about 425 sessions (1.7 years at 249 sessions a year), and with 2.8 about 870 (3.5 years). For AAPL’s first half hour, average 6.76 and its 2022 to 2024 spread 68.35, it is about 393 sessions (1.6 years), or about 800 (3.2 years).
| Sessions | Smallest average that clears zero: SPY, by half hour (bps) | Smallest average that clears zero: AAPL first half hour (bps) | Time | What it lets you say |
|---|---|---|---|---|
| 20 | 7.5 to 12.9 | 31.2 | about 1 month | Check your spreadsheet against the worked row. The range is too wide to read: even SPY needs an average far above the largest all-ticker drift (1.9) to clear zero. |
| 50 | 4.8 to 8.2 | 19.7 | about 2.5 months | Zero inside the range: no reading. Zero outside: the average is 2.5 to 4.3 times the largest all-ticker drift, so check the log for errors first. |
| 100 | 3.4 to 5.8 | 14.0 | about 5 months | Zero inside the range: drifts larger than its top end are unlikely. Zero outside: compare the low end with your cost (the study charges 4 for an ETF); above it, worth testing on sessions you have not used, below it, a drift smaller than the cost. |
Limits
- The tickers are 18 that GEXfreak chose, all still listed at the end of 2024; prices start in September 2016 for 8 and May 2018 for the other 10. They move together, so the 234 cells are not independent.
- One split of the years, 31 December 2021, was chosen in advance and no other was tried. The last half hour ends at the 15:59 bar, so the closing auction is not measured.
- What “could see” covers: the sizes above are worked from the recorded spreads, not from a trial with a planted drift. They assume the drift is the same in both windows and leave out the rule’s sign check, so read four in five as approximate. “No half hour drifted” means none at those sizes, not that none exists.
- Prices for 10 of the 18 tickers (AAPL, DIA, DVN, IBM, INTC, MSFT, NKE, NVDA, PFE, VZ) come from single-venue feeds. The Opening minute view compares the opening minute with an all-exchange feed: AAPL’s matches closely and NKE’s does not (quoted from the study, not recomputed). DVN is missing 64 sessions in 2019.
- AAPL’s result is before costs, depends on the name and is not shown to be tradable. Its plain return was +7.6 in 2022 to 2024, nearly all of it the first minute (+6.9; the other 29 minutes added +0.6); through 2021 the other 29 minutes added +5.2 of +10.5. The opening minute pointed the other way in 7 of the 18 tickers (negative for DVN, IBM, INTC, MSFT, PFE, UNH, VZ in 2022 to 2024), and this page proposes no reason for it. Fills at the opening cross were not measured, and a log that starts at the day’s first price measures the same first minute. The first-minute split and the opening-minute view were run after the results were in.
- After the results were in, 3 half hours were flagged by eye, not by a rule set beforehand: 10:30 (−1.4, then −1.1: it pointed the same way in both windows); 12:00 (+0.3, then −1.8: its 2022 to 2024 range left out zero); 14:30 (+0.6, then +1.9: its 2022 to 2024 range left out zero). 12:00 changed sign between the windows. No correction was made for looking, so they are leads, not findings; choose the half hour for your own log before you look at your data.
- SPY and QQQ on their own: no half hour passed the first window, and their largest 2022 to 2024 drifts were SPY +1.8 at 14:30 (0.0 through 2021) and QQQ +2.2 at 14:30 (+0.6 through 2021), against the 4 basis points per ETF trade that the study charged. Their own searches could see 2.1 to 3.8 for SPY and 2.7 to 4.9 for QQQ. Like the three above, these are leads.
- Only prices and average direction by clock time were used, so a log split by walls, flips or regime has fewer sessions in each group and needs several times as many. Nothing here is a trade recommendation.
Sources and editorial notes
Read the primary references and editorial policy
Published by GEXfreak. Prism by GEXfreak is the chart product these guides describe. Every figure comes from recorded market history: prices, option open interest and recorded sessions. Where a figure shows trade results, the trades are back-tested, not placed. This is product education, not independent investment research.
Each figure lists its data sources and their SHA-256 fingerprints under “Table, method and data source”. The references below explain the statistics and the disclosure wording used on this page. They do not endorse GEXfreak or these studies.
- Controlling the False Discovery Rate: A Practical and Powerful Approach to Multiple Testing — Y. Benjamini and Y. Hochberg, Journal of the Royal Statistical Society: Series B 57(1): 289–300 (Oxford Academic). Published 1995. Checked .
- Confidence Limits for the Mean — NIST/SEMATECH e-Handbook of Statistical Methods. Publication date not stated. Checked .
- 17 CFR § 4.41: Advertising by commodity pool operators, commodity trading advisors, and the principals thereof — Code of Federal Regulations, Title 17 (Cornell Law School LII). Publication date not stated. Checked .
For the product’s calculation and data boundaries, read Prism’s methodology.
Check a level on your own chart.
Membership is required for live SPY, QQQ and IWM books. The figures on this page are recorded history, not a live book.
Create an account to save your layout; review current access conditions on the pricing page.