Methodology

This page exists so you can argue with us. Every figure quoted anywhere on this site is produced the way it is described here, and where a test failed, the failure is written down in the same detail as the successes.

Three rules everything follows

The day-type model

A day type is a coarse description of how a session behaved: did it trend one way all day, chop sideways, grind upward inside a channel, or reverse. Experienced chart readers name these on sight. The model does the same thing, in probabilities.

Results, on years the model never saw

Full session, top-1
66%
vs a 37% majority baseline
Full session, top-2
80%
truth is in the model's top two classes
At 90 minutes in
53.5%
18 five-minute bars; top-2 68.6%
Calibration error
<10%
stated probability vs observed frequency

The 90-minute number is the one that matters for live use, and it is the smaller one. Two hours into a session the market has not decided yet, and a model that claimed otherwise would be lying.

Single stocks are out of distribution. The model was fitted to index futures. When you call /v1/read/NVDA it will answer, because comparing your own read against it is a useful exercise, but that answer has not been validated on single-stock behaviour and carries no accuracy claim. Same for Hong Kong listings, A-shares and non-index futures: descriptive only.

The price-action claims fact-check

Trading courses are full of confident probabilities. We took the ones that are specific enough to be testable, wrote each as an explicit rule before measuring anything, and ran it over 3,946 ES trading days of 5-minute data, 2010–2026.

ClaimTraditionally quotedMeasured
90 minutes after the open, one of the day's two extremes is already set 90%81.2%
On a bull day, the low of the day forms early in the session 90%83.3%
After an opening-range breakout, the opposite extreme holds 90%83.5%
Trading-range breakouts fail (the famous "80% rule") 80%52% / 62% / 70%

The last row is measured within 5, 10 and 20 bars respectively — the claim's truth depends entirely on how long you are willing to wait, which the claim never says.

Meta-verdict: the directions are right and the numbers are inflated, consistently, by roughly 7 to 10 percentage points. That is a useful thing to know about an entire genre of teaching material. It is also, quietly, a compliment: these were people describing real market behaviour from memory, and they got the sign right every time. The measured rates ship in /v1/claims so an agent can quote the tested number rather than the folklore one.

Weis Wave events

A Weis Wave chart throws away the time axis and groups price into up-waves and down-waves, labelling each with the total volume that traded inside it. The idea, from the Wyckoff tradition, is that a rally on shrinking volume and a sell-off on heavy volume mean different things.

Wave construction

The five events

How they were tested

Pre-registered before measurement: entry on the event bar, symmetric barriers at ±3 × ATR, and a win defined as reaching the barrier in the event's claimed direction first. Run over ES 5-minute data, 2010–2026, with multiple-comparison correction across the family of events.

EventWin ratenpVerdict
cib_long51.8%13,8671.6e-5Confirmed on ES
no_supply_long51.4%23,0773e-5Confirmed on ES
cib_short48.6%12,642Not confirmed
no_demand_short45.6%22,262Reversed
sot_short47.6%9,427Reversed

Two of the traditional short signals did not merely fail to work — they came out reliably below 50%, which on a symmetric test means the opposite side was winning. Read carefully: the inverse reading was not pre-registered, so we treat "no-demand is actually bullish information on ES" as a hypothesis produced by this data, not as a confirmed edge. It is in the API as a measured rate with that caveat attached, and nothing more.

A pattern worth noticing: every bearish event underperformed on an index that spent 2010–2026 mostly rising. Some of this is a genuine asymmetry in how index futures behave; some of it is a bull market. We cannot fully separate the two, and we are not going to pretend otherwise.

The one result that replicated: day type as a filter

The strongest finding on this site is not either product alone. It is the day-type read used as a gate on a Weis event — only taking the bullish counter-attack when the model reads the session as trending up.

MarketGatedUngated / oppositepStatus
ES · S&P 500 futures56.5%50.8%0.002Trained asset
NQ · Nasdaq futures56.1%45.3%2e-6Zero-shot
QQQ · Nasdaq ETF54.3%44.3%7e-5Zero-shot

Zero-shot means no retraining, no refitting, no per-market threshold tuning: the ES-calibrated model and the ES-calibrated wave threshold pointed at a market they had never seen. That is the test that most published trading research quietly skips, and it is the reason we put more weight on a 54.3% here than on an 80% from a backtest fitted in place.

Where it fails

Gold, Bitcoin and Ethereum share an anti-signature. The same events run on these markets do not merely weaken, they invert — on BTC, zero of eight pre-registered signals confirmed, and no_supply runs the wrong way. Whatever the ES/NQ/QQQ signature is measuring, it is a property of index-type equity markets, not a law of markets.

Classical chart patterns did not survive. We ran Bulkowski-style detectors over 16 years of intraday index-futures data, producing more than 121,000 detections, then trained a model to predict each detection's outcome. AUC 0.54 — barely distinguishable from a coin flip. Pattern shape alone, in this data, carries almost no outcome information.

The Asian session is a pre-registered NO_GO. We tested whether the day-type gate carries into the Asian overnight session on 24-hour futures. It was registered in advance, it did not meet the threshold, and the verdict stands as NO_GO. The API defaults to the US day session for exactly this reason.

Max Pain and the options metrics

The free Max Pain pages are computed, not scraped from anyone's dashboard. Here is precisely what each number is.

Max pain

Max pain is the settlement price at which the largest amount of open option value expires worthless — equivalently, the price that minimises the total payout option sellers owe option buyers.

For every candidate settlement price K:

  payout(K) = 100 * [ SUM over call strikes X of  max(K - X, 0) * call_OI(X)
                    + SUM over put  strikes X of  max(X - K, 0) * put_OI(X) ]

  max_pain = the K that minimises payout(K)

100 is the contract multiplier. Computed per expiration, over the strikes
that actually have open interest.

What it is not: a forecast. It is an arithmetic property of today's open interest, it moves as open interest moves, and the well-known tendency of price to sit near it into expiration is a weak statistical regularity with a contested explanation — not something to trade off on its own.

Put/call ratio and the walls

The put/call ratio here is open-interest based: total put open interest divided by total call open interest for that expiration. The call wall is the strike carrying the most call open interest, the put wall the strike carrying the most put open interest. They are where positioning is concentrated, which is worth seeing, and nothing more than that.

Gamma exposure (GEX)

Gamma measures how fast an option's directional exposure changes as the underlying moves. Gamma exposure aggregates that across every open contract to estimate how much hedging flow a 1% move would mechanically generate.

Per contract i, at end of day, with spot S:

  1. solve Black-Scholes for the implied volatility that reproduces the
     contract's end-of-day price
  2. take gamma at that implied volatility
  3. GEX_i = gamma_i * OI_i * 100 * S^2 * 0.01   (positive for calls,
                                                  negative for puts)

Net GEX = sum of GEX_i. Contracts whose open interest and quote disagree,
or where the IV solve does not converge, are dropped rather than guessed.
Gamma flip = the price level where net GEX(x) crosses zero, searched on a
grid from 0.9*S to 1.1*S, taking the crossing nearest spot.

Sign convention: calls positive, puts negative, which is the common dealer-long-calls convention. Net GEX above zero is usually described as a dampening regime and below zero as an amplifying one. Treat that as a widely used heuristic, not as something we have independently verified — we publish the computation, not a claim about what it predicts.

Cross-check. The pipeline was validated against optioncharts.io on SPY and matched on 15 of 15 expirations before any of this went live. We compute gamma ourselves rather than reading an upstream field, so this check is what stands between the formula and a silent error.

What none of this tells you

It does not tell you what to buy, when to enter, how much to size, or where to stop. It has no view on your account, your horizon, or your risk tolerance, and it never will — that is the line between analytics and advice, and it is not a formality.

It also does not tell you that a 56% base rate is profitable. Costs, slippage, the distribution of winners against losers, and your own behaviour all sit between a base rate and a result. A real edge of a few percentage points is a starting point for research, not a conclusion.

If you find an error in anything on this page, email us. Corrections get published.

Convinced by the method?

If the numbers above are the size you expected from an honest test, the API is $30 a month per product and $50 for both.

Email quantdata@agentmail.to See pricing

No signup form, no card on this site. Keys are issued by hand, one at a time. Max Pain pages stay free and need no key at all.