The short answer

In these tests, no wall, flip or prior-day line beat a random line at the same distance from price by enough to pass the rules we set in advance. GEXfreak tried 36 level situations across call and put walls (the strikes with the most call or put gamma, meaning how fast an option’s sensitivity to price changes), gamma flips (prices where dealers’ hedging changes direction) and the prior day’s high and low.

That does not mean levels do nothing. A typical test could only see a gap of about 0.23R (under a quarter of a trade’s risk), so a smaller effect could be missed.

One situation came close: breaking the prior day’s low in the study’s negative-gamma days. It beat random lines in both windows, but only 3 names besides SPY and QQQ had enough history; the rule needed 4. It was the best of 36 situations, so it is unconfirmed, and it is not a setup.

What to do with this

  • When a page or backtest says a wall, flip or prior-day line “holds” most of the time, ask for the hold rate of random lines at the same distance from price on the same days. Without it, the claim cannot tell the level from the distance.
  • Read each wall, flip and prior-day line on your Prism chart as a reference, a place to watch, not a prediction that price will hold or break. If you log touches yourself, about 100 events can only show a gap of 0.28R or more; seeing 0.10R would take about 780.
  • In negative gamma, the figure shows fades of the prior-day low doing worse than random lines (the whole 90% range below zero) and breaks doing better. It is one level seen from both sides, one of 36, and chance can produce it: a lead to watch, not a rule.
REAL PRICES · REBUILT LEVELS · BACK-TESTED TRADES

Thirty-six level situations against random lines

Eight names · discovery window 2018–2020

The prices are recorded history. The levels are rebuilt after the fact from stored option data, so they can differ from the levels a live Prism by GEXfreak chart draws. The trades are back-tested: rules applied after the fact, none ever placed.

Test
Levels
  • Walls
  • Flips
  • Prior-day high and low
  • Green: the level did better than random lines. Red: worse
  • Gold outline: p below 0.05
  • −0.6−0.4−0.20+0.2+0.4+0.6Lift over random lines (R)
  • Dot: lift. Bar through it: 90% range
  • Shaded: zero to the smallest lift this test could reliably see
Prior-day low as support, break, negative gamma. 193 paired sessions had both a real and a random-line touch. On average the real level did 0.2615R better than the random lines (90% range +0.1290R to +0.3965R). The smallest lift this test could reliably see was 0.2025R against the 0.10R the study aimed to see. One-sided p 0.0015; after correcting for 36 tries, 0.054. In the later window, 2021–2024: +0.1515R over 416 paired sessions, positive in 4 of 4 years (p 0.0015). It did not pass the confirmation rule.

5 situations in this test had p below 0.05; with 36 tries about 1.8 would by luck alone. After the correction for 36 tries, the smallest adjusted value was 0.054, and 0.05 was the line to cross. None could reliably see a lift as small as the study aimed to see.

Tables, method and data source
All 36 situations, Eight names, 2018-05-01 to 2020-12-31. Lift is the average paired difference in R; p is one-sided; adjusted p corrects for 36 tries.
SituationPaired sessionsLift90% rangeSmallest lift seenpAdjusted p
Call wall as resistance, fade, negative gamma124+0.0438R−0.1237R to +0.2136R0.24570.3270.7369
Call wall as resistance, fade, weak positive gamma123+0.0780R−0.0920R to +0.2239R0.23550.2130.7369
Call wall as resistance, fade, strong positive gamma189−0.0447R−0.1782R to +0.1077R0.21150.6890.987
Put wall as support, fade, negative gamma221−0.0154R−0.1117R to +0.0824R0.14870.5970.8948
Put wall as support, fade, weak positive gamma116+0.0022R−0.1719R to +0.1880R0.27660.4960.8108
Put wall as support, fade, strong positive gamma121+0.0280R−0.1894R to +0.2068R0.29710.4300.774
Call wall as resistance, break, negative gamma19+0.0445R−0.2937R to +0.2797R0.44520.4100.774
Call wall as resistance, break, weak positive gamma34+0.1628R−0.0922R to +0.4805R0.43040.1660.7369
Call wall as resistance, break, strong positive gamma45+0.0325R−0.3113R to +0.3740R0.51730.4170.774
Put wall as support, break, negative gamma83+0.0102R−0.1820R to +0.1975R0.28860.4540.7783
Put wall as support, break, weak positive gamma36−0.1300R−0.3865R to +0.1508R0.40500.7820.987
Put wall as support, break, strong positive gamma25−0.0104R−0.3653R to +0.4213R0.59370.5180.8108
Daily flip as support, fade166+0.1260R+0.0147R to +0.2310R0.16430.0290.2565
Daily flip as resistance, fade125−0.1105R−0.2460R to +0.0388R0.21910.8860.987
Daily flip as support, break45+0.1444R−0.1200R to +0.4372R0.42350.1910.7369
Daily flip as resistance, break28−0.3075R−0.5981R to −0.0631R0.40490.98700.987
Weekly flip as support, fade402−0.0641R−0.1596R to +0.0370R0.15030.8500.987
Weekly flip as resistance, fade326+0.0281R−0.0418R to +0.0912R0.10010.2370.7369
Weekly flip as support, break129−0.1645R−0.3154R to +0.0003R0.24440.94950.987
Weekly flip as resistance, break73+0.1998R+0.0334R to +0.3747R0.26010.0210.2565
Monthly flip as support, fade275−0.0375R−0.1145R to +0.0365R0.11410.7920.987
Monthly flip as resistance, fade218+0.0831R−0.0260R to +0.1915R0.16900.1120.669
Monthly flip as support, break90+0.0442R−0.1979R to +0.2952R0.37130.3750.774
Monthly flip as resistance, break66+0.0585R−0.2067R to +0.2890R0.36550.3280.7369
Prior-day high as resistance, fade, negative gamma128+0.0288R−0.0698R to +0.1352R0.15860.3280.7369
Prior-day high as resistance, fade, weak positive gamma168+0.0688R−0.0807R to +0.2102R0.21970.2160.7369
Prior-day high as resistance, fade, strong positive gamma167−0.0562R−0.1784R to +0.0510R0.17240.8050.987
Prior-day low as support, fade, negative gamma238−0.1755R−0.3106R to −0.0382R0.20640.98350.987
Prior-day low as support, fade, weak positive gamma134−0.1603R−0.2794R to −0.0391R0.18610.98600.987
Prior-day low as support, fade, strong positive gamma115+0.1601R+0.0058R to +0.2985R0.21780.0450.324
Prior-day high as resistance, break, negative gamma79−0.1495R−0.3056R to +0.0015R0.23270.94750.987
Prior-day high as resistance, break, weak positive gamma102+0.0453R−0.0891R to +0.1875R0.21540.2900.7369
Prior-day high as resistance, break, strong positive gamma129+0.1405R+0.0239R to +0.2642R0.17970.0250.2565
Prior-day low as support, break, negative gamma193+0.2615R+0.1290R to +0.3965R0.20250.00150.054
Prior-day low as support, break, weak positive gamma101−0.0564R−0.2314R to +0.1137R0.26370.7150.987
Prior-day low as support, break, strong positive gamma59+0.0915R−0.1688R to +0.3017R0.35740.2760.7369
The five situations with p below 0.05 in the eight-name test, re-tested on 2021–2024. The confirmation rule needed a lift of at least +0.04R, p below 0.01, a positive lift in 3 of 4 years, and 4 names with 30+ paired sessions (not counting SPY and QQQ). Average R is per paired session, for the level and for its random lines; no commissions or slippage are subtracted.
SituationDiscovery: level RDiscovery: random lines RDiscovery liftLater: level RLater: random lines RLater liftLater pYears positiveNames with 30+ sessions, without SPY and QQQParts of the rule missed
Prior-day low as support, break, negative gamma+0.3077R+0.0462R+0.2615R+0.2849R+0.1334R+0.1515R0.00154 of 43breadth
Weekly flip as resistance, break+0.2178R+0.0180R+0.1998R+0.0769R+0.1710R−0.0941R0.8821 of 42lift, p, years, breadth
Prior-day high as resistance, break, strong positive gamma+0.3339R+0.1934R+0.1405R+0.2145R+0.1295R+0.0849R0.0524 of 45p
Daily flip as support, fade+0.2240R+0.0980R+0.1260R+0.0857R+0.1220R−0.0364R0.7152 of 42lift, p, years, breadth
Prior-day low as support, fade, strong positive gamma+0.1764R+0.0163R+0.1601R+0.1391R−0.0060R+0.1451R0.0274 of 43p, breadth
  • A level counts on a day if it sits 0.10 to 1.5 of the day's expected move from the 09:34 close. A fade starts when a one-minute bar first gets within 0.10 of the expected move of the level (a fill at the level is assumed); a break starts at the first close 0.10 beyond it. Bars are scanned from 09:36 (walls and flips) or 09:35 (prior-day lines) to 15:30. A bracket of plus and minus 0.35 of the expected move scores the trade, a same-bar tie counting as the stop, and a trade still open at 15:55 is marked at that close. Random lines are drawn at distances taken from the same name's other days, dropped if they sit within 0.10 of the expected move of a real level, and re-weighted so their distances match the real ones. Lift = the level's result minus the random lines' result.
  • On SPY and QQQ, lift is in percentage points of win rate. On the eight names, lift is in R, where one R is the distance from entry to the stop of the fixed bracket (0.35 of the day's expected move).
  • 254,122 event rows (each one line’s fade, break or no-touch record) were read; the last session in them is 2024-12-31.
  • No commissions or slippage are subtracted from any result: a fade is assumed to fill at the level and a break at the close of the break bar.
  • The levels are tier-0 rebuilds: each five-minute mark uses that morning's open interest and the prior close's option prices, re-evaluated at the market price at that mark, and are not a copy of the live chart. Through 28 March 2023 the option prices are an older fallback estimate (the study's own era labels count that day itself as native). How closely tier-0 matches a true intraday map was checked on SPY only (the article's Limits section has the table).
  • Random lines take their distances from every other day of the same name in the event table, including days after the session they are drawn for. Outcomes are never used to draw or weight them.
  • A one-sided p is the share of resamples (blocks of 20 consecutive sessions) whose lift came out at or below zero. Discovery-window p-values come from 2,000 resamples and later-window ones from 10,000.
Data receipt: 14 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.

  • Event table, SPY and QQQ (every level line and its first touch, one row each) · 752a8b515f07fcce…
  • Event table, eight names (the same, with results in R) · 23c57b16f2e5556d…
  • Event table manifest, SPY and QQQ (row counts by name, year, level family) · 32610e0be497f59f…
  • Event table manifest, eight names · e527f0649b6eac8e…
  • Frozen results, SPY and QQQ (36 situations and the random-line control) · 345bb2bacec54f53…
  • Frozen results, eight names (36 situations and the random-line control) · 0554dfa3f7618031…
  • Frozen re-test of the five leads, 2021 to 2024 · 29cc7006a2400042…
  • Name-and-level groups left out of the eight-name test before any result was read · 39bb4d5dcfa75768…
  • Study code for the SPY and QQQ test (definitions of the 36 situations and the gamma regimes) · 52b9aed4e8d4c864…
  • Study code for the eight-name test (paired estimator and the later-window rule) · 2a42e9d36ed94acd…
  • Independent audit of a 600-row sample of the SPY and QQQ event table · a3b7800982a82a49…
  • Study code that builds the event tables (the touch, break and bracket rules and the regime rank) · cd80f738452dd8e4…
  • Written plan for the eight-name test (written before its results existed) · 1dc2ba0becb01eda…
  • Written note on the SPY and QQQ control tolerance (written before any real result was read) · 41bb94010f35e142…

Descriptive history, not a forecast. Each situation is measured against random lines drawn at the same distance from the day's price, so a lift is what the level added beyond distance alone.

How we tested

A situation is one level played one way, as a fade or a break. Walls and the prior-day high and low were also split by gamma regime: negative gamma (net option gamma below zero) and weak or strong positive gamma (strong means the top third of the name’s own last 252 sessions, weak the rest of positive gamma; Prism does not show this split): 4 levels × 2 ways × 3 regimes = 24. The daily, weekly and monthly flips, from either side, add 12: 36 in all. Each ran on SPY and QQQ alone and on SPY, QQQ, AMD, TSLA, BAC, XOM, UNH and WMT.

A level counted on a day only if it sat 0.10 to 1.5 expected moves from the 09:34 close. On one-minute bars from 09:36 (walls and flips) or 09:35 (prior-day high and low) until 15:30, the first fade or break was scored against a target and a stop 0.35 expected moves away until 15:55.

All 36 were scored on the first window, 2018–2020. The 5 with a p under 0.05 were re-tested on the later window, 2021–2024, under a rule fixed beforehand: a lift of at least +0.04R, a p under 0.01, a positive lift in 3 of 4 years, and 4 names besides SPY and QQQ with 30 or more paired sessions (so one name cannot carry it). None passed. Chance alone would put about 1.8 of 36 under 0.05; SPY and QQQ had 3 and the eight names 5. After the correction for 36 tries, none stayed under 0.05.

The closest was the break of the prior day’s low in negative gamma: it met the lift, p and years parts of the rule and missed only breadth: AMD, TSLA and BAC had 30 or more sessions and all showed a positive lift, while XOM had 20, UNH had 15 and WMT had 28. After the correction its p was 0.054.

Check it yourself with Prism and a spreadsheet

Log every first break of the prior day’s low on one name (one tab per name) next to one comparison line, and see whether your log is big enough to show a gap. You need Prism (its 7-day IV move and the prior-day low) and a broker chart with one-minute bars. It starts today: the move has to be read at 09:34 on the day, so past sessions cannot be filled in. Try one day first.

The sheet logs every gamma regime together, because Prism does not show the study’s strong and weak positive split. The study scored it that way too, as a 37th look the correction does not count: across 498 paired sessions in 2018–2020 the lift was +0.1183R, and across 893 in 2021–2024 it was +0.0644R (+0.0633R on SPY, 108 sessions; +0.1018R on QQQ, 136).

Columns of the sheet, one row per day you log
ColumnWhat to writeWhere it comes from
ADateYou write it.
BPrice at 09:34Broker chart: close of the one-minute bar covering 09:34 to 09:35.
CPrism 7-day move, %Prism data strip, “7-day IV move”, read at 09:34.
DExpected move for one day, $Formula, step 1.
EPrior-day lowPrism chart.
FDistance, in expected movesFormula, step 1.
GBreak priceBroker chart: close of the first bar from 09:35 that closes at least 0.10 × D below E.
HWhat came firstBroker chart, after G: target (G − 0.35 × D), stop (G + 0.35 × D) or neither by 15:55; a bar touching both is the stop.
I15:55 closeBroker chart. Only when H is neither.
JResult in RFormula, step 3.
KComparison lineFormula, step 4.
L to OComparison line: break price, what came first, 15:55 close, result in RBroker chart for L to N; formula for O.
PGapFormula, step 5.

The steps

The worked lines are the recorded TSLA session of 14 May 2018, the first in 2018–2020 where the real level and a random line differed. It shows the arithmetic and is not a typical day: a session’s gap swings by about 1.12R.

  • 1. Day and distance. D2 =B2*C2/100/2.1984, F2 =ABS(B2-E2)/D2. Prism’s move covers seven calendar days and the study’s covers one trading day, so D divides by 2.1984; expect differences, since the study used options of every expiry. Log the day if price at 09:34 is above the low and F is between 0.10 and 1.5. Worked, with the study’s one-day move for D: =ABS(302.6275-299.0800)/7.3516 = 0.483.
  • 2. Break. Find the first one-minute close from 09:35 at least 0.10 × D below E and write it in G; if there is none before 15:30, skip the day. Worked: the 12:53 bar closed at 298.1975, 0.12 expected moves under the low; target 295.6244, stop 300.7706.
  • 3. Score it. Write in H what came first, and in I the 15:55 close if neither did. J2 =IF(H2="target",1,IF(H2="stop",-1,MAX(-1,MIN(1,(G2-I2)/(0.35*D2))))). Worked: the target came first, so J = 1.0000.
  • 4. Comparison line. From row 3, K3 =B3-F2*D3 borrows the distance of the row above (your previous logged day; row 2 has none). Skip the day if ABS(K3-E3)<0.10*D3. Find its break (L3), what came first (M3) and the 15:55 close if neither (N3); O3 =IF(M3="target",1,IF(M3="stop",-1,MAX(-1,MIN(1,(L3-N3)/(0.35*D3))))). The borrowed distance makes it approximate. Worked, the study’s two scored lines that day: one at 295.92 (0.913 expected moves below price) broke at 13:19 and reached its target (1.0000); the other at 293.95 (1.180 below) broke at 293.03 and hit neither, so its result of 0.4353 means a 15:55 close of 291.91.
  • 5. Gap. P3 =IF(AND(ISNUMBER(J3),ISNUMBER(O3)),J3-O3,""). Worked, the first line: 1.0000 − 1.0000 = 0.0000; the study weighted its two lines and got +0.2617R for the day, so one line can differ a lot. Then =AVERAGE(P2:P200), =COUNT(P2:P200) and the smallest gap your log can see, =2.487*STDEV(P2:P200)/SQRT(COUNT(P2:P200)).
  • 6. Read it by size. The table below uses the study’s spread across sessions, 1.12R. Your one line a day is noisier: once you have 20 rows, trust your own smallest-gap cell.

What a small log can say

Compare your average gap with the smallest gap in the row that matches your log (2.487 in the formula is a 5% one-sided test that catches a real gap four times in five). The study’s own lift for this line, +0.0644R in 2021–2024, is far below the first three rows, so even 100 events cannot tell it from zero. One name cannot settle this in a useful time: SPY supplied about 27 paired sessions a year, and the eight names together about 223.

Best case, from the study’s spread: the smallest gap a log could see, and what follows
EventsSmallest gapTime on SPY aloneWhat follows
200.63R9 monthsOnly a hint. Keep logging; do not change how you read the line.
500.40R22 monthsA lead, not a result. Log to 100 (22 more months) before you read anything into it.
1000.28R4 yearsWorth re-testing on new days. A smaller gap says nothing either way.
7800.10R29 yearsThe lift the study aimed for. Eight names reach it in about 3.5 years.

Sources: NIST/SEMATECH e-Handbook of Statistical Methods: Sample sizes required.

Limits

These levels are rebuilt at each five-minute mark; Prism by GEXfreak keeps no five-minute history of its levels. A tier-0 rebuild uses that morning’s open interest and the prior close’s option prices, re-evaluated at that mark’s market price. Only SPY has a true intraday map (from August 2025), used just to check accuracy. Within $1 of it, tier-0 matched the call wall 77.5% of the time, the put wall 83.3%, the daily flip 68.9%, the weekly flip 73.7% and the monthly flip 66.9%. QQQ and stock accuracy is unmeasured.

The accuracy check ran on 2025 and 2026 sessions, when native option prices exist, so it measures tier-0 alone. Through 28 March 2023 an option’s price is a stored last trade, or a modeled value where none traded (the fallback-premium era); after that date prices are native. That era holds every session of 2018–2020 and the first part of 2021–2024, and the older method adds an error the check does not cover. The near miss’s lift was +0.1855R across 445 paired sessions in the fallback era and +0.1889R across 164 in the native era (the study’s own era labels, which count 28 March 2023 itself as native): a description of one of 36 situations, not a finding.

25% of the eight-name events in the 24 regime situations (12% for SPY and QQQ) had no regime and dropped out.

The 36 situations are not independent (a fade and a break of one level mirror each other), so 5 under 0.05 is a hint, not a finding. SPY and QQQ sit in both tests, so the later window was not fresh for them. The correction counts these 36 only, not GEXfreak’s earlier tests on the same years, so the true adjusted p is higher.

The near miss is lopsided: over its 609 paired sessions in both windows the lift was +0.1864R, +0.0924R without the best 30, the median session’s gap was 0.0000R, and 36% of sessions tied. Its lift fell from +0.2615R to +0.1515R; picking the best of 36 predicts that, and so would a real but smaller lift, so these tables cannot tell the two apart. The lift was positive in all 4 later years, but 2023 carried much of it (+0.3411R against +0.0437R, +0.1218R and +0.0607R in the other years), so “4 of 4 years” alone flatters it. Only 3 of the 6 single stocks had 30 or more later sessions, and XOM’s lift was −0.0807R. UNH’s data starts on 28 March 2023. The rule’s 4 names and 30 sessions were a fixed convention, so the miss may be thin data, not the level. The best-powered test, weekly flip as resistance, fade (326 sessions), could see 0.10R and found +0.0281R, the one result against a lift near that size.

No commissions or slippage are subtracted, and a fade is filled at the level itself, which may never have traded (random lines get the same fill). The call wall was recorded on fewer than half of some names’ sessions in some years: BAC, UNH, WMT and XOM. Three groups (the UNH call wall, the UNH daily flip and the TSLA call wall) were left out of the eight-name test, and the check that random lines behave like chance was loosened for SPY and QQQ, so it is weaker there; both choices were made before any result was read.

How often the tier-0 level was within $1 of the true SPY map: all 204 sessions (October 2025 to August 2026), then by hour for the 142 sessions from January to August 2026
LevelAll sessions10:0011:0012:0013:0014:0015:0016:00
Call wall77.5%80%86%85%82%79%74%57%
Put wall83.3%91%89%91%88%85%76%61%
Daily flip68.9%85%79%78%70%70%66%25%
Weekly flip73.7%89%87%79%72%72%71%34%
Monthly flip66.9%72%75%73%70%65%59%37%

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.

For the product’s calculation and data boundaries, read Prism’s methodology.

All resources
REAL PRICES · REBUILT LEVELS

How often price reaches a wall

Distance sets how often.
0%25%50%75%100%00.511.522.5
QQQ · 1,671 sessions · dashed line: a plain price · dots: call walls in force at 09:36
REAL PRICES · REBUILT LEVELS

How long does a wall last?

A wall is recomputed as price moves.
0%25%50%75%100%151021
Call walls, SPY and QQQ · share still on the same strike after 1, 5, 10 and 21 sessions · rebuilt wall (solid) and the earlier nearest-expiry wall (dashed)
REAL PRICES · REBUILT LEVELS · BACK-TESTED TRADES

How many trades until you know?

Four times the trades halve the doubt.
±0.0±0.2±0.4±0.6±0.8±1.020501002005001,0002,000All trades, 15:45: 312 trades, ±0.23RThrough 28 March 2023 (fallback prices): 222 trades, ±0.29RFrom 29 March 2023 (native prices): 90 trades, ±0.37RQuarterly months (Mar, Jun, Sep, Dec): 102 trades, ±0.36ROther months: 210 trades, ±0.31RAAPL: 49 trades, ±0.48RINTC: 29 trades, ±0.74RMSFT: 60 trades, ±0.46RNKE: 26 trades, ±0.65RNVDA: 71 trades, ±0.42RTSLA: 49 trades, ±0.54R
11 measured 95% ranges · one rule, rebuilt at the 5-minute mark · gold line: ±3.6/√trades
REAL PRICES · BACK-TESTED TRADES

The best of 480 backtests

5 passed the pass mark. Then we adjusted for the number tried.
480 versions · 12 stocks · 2021–2024 · white: passed · red: failed · grey: under 30 trades
REAL PRICES · REBUILT LEVELS

Map levels and random lines

A random line at a matched distance, for every level.
1,161 symbol-sessions · 2023–2024 · bars: real lines per kind on the 10:00 ET map
REAL PRICES · REBUILT LEVELS · BACK-TESTED TRADES

Is the monthly flip a floor?

Four situations at the flip, each counted.
  • Support fade146
  • Resistance fade157
  • Break down72
  • Break up52
SPY and QQQ · 2018–2020 · 427 recorded events at the monthly flip

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.