How ChartGEX Detects Dealer Structure: An Open Methodology
Dealer-structure detection is ChartGEX’s flagship proprietary signal. Unlike binary alert systems that fire when a single threshold is crossed, ChartGEX’s implementation combines six independent statistical features through a calibrated logistic combiner, applies a correlation-aware Bonferroni correction across the scan space, and conditions every threshold on the prevailing volatility regime. The result is a continuous probability between 0 and 1 that quantifies, with fully disclosed methodology, how likely a given strike is to be the locus of meaningful dealer hedging activity.
This article walks through the algorithm end to end. Every parameter is named. Every threshold is published. Every design decision is explained.
Why methodology disclosure matters
Most options-analytics platforms ship signals as black boxes. A green dot appears on the chart, and you are expected to trust that the system knows something the market does not. That works exactly until it does not — and when a signal fails, the user has no way to evaluate whether the failure was a known limitation, a regime they should have known to discount, or a defect in the model.
ChartGEX takes the opposite stance. The dealer-structure detection signal is a multi-feature probabilistic estimator, and every component is documented here and in the code. If you understand why a signal is firing, you can judge for yourself whether the conditions that produced it match your trading thesis. If you understand the limitations, you can avoid the regimes where the signal is weakest. Open methodology converts the model from a crystal ball into a tool.
The six features
The detection model scans every actively traded strike across every expiration in the relevant chain (currently SPY and QQQ) and computes six features per strike. Each feature is independently meaningful; the combiner’s job is to integrate them into a single probability.
1. Open-interest cluster (OI)
A dealer-structure event begins, by definition, with a buildup of contracts at a specific strike. The OI feature measures two things simultaneously: absolute new contracts added in the most recent day (threshold: SPY ≥ 25,000 contracts per day, QQQ ≥ 10,000) and the concentration of that build versus the rest of the expiry (threshold: ≥ 10 percent of the expiry’s total OI). Both thresholds must clear. The dual gate keeps the signal from firing on either a large but diffuse build or a concentrated but small build.
2. Implied-volatility trough depth (IV trough)
Dealers leave fingerprints on the implied-volatility surface. When a dealer sells a put at a specific strike in size, the supply suppresses that strike’s IV relative to its neighbours. The result is a localised dip — a trough — visible on the smile. ChartGEX measures the depth of any trough as the percentage by which the candidate strike’s IV is depressed versus the average of the two adjacent strikes. The threshold is approximately -7 percent and is side-aware: a put-side trough signals dealer-sold puts (mechanical support); a call-side trough signals dealer-sold calls (mechanical resistance). The side-awareness matters because averaging across the strikes loses the directional information.
3. GEX confirmation
A cluster of OI and an IV trough are necessary but not sufficient. The third feature asks: does the gamma-exposure profile actually corroborate the story? ChartGEX computes a median-baseline growth in strike-level GEX across at least two days of history and classifies the result as one of three regimes: new level (the strike now appears in the top-three list by absolute gamma for the first time), sign flip (the strike’s GEX sign reversed), or magnitude growth (the strike has accelerated within its existing position). The candidate strike must also be sign-consistent with the cluster type — a put-side trough should be paired with negative gamma growth, a call-side trough with positive gamma growth. Mismatches kill the signal.
4. VPIN spike (options-flow toxicity)
The fourth feature measures whether options flow is currently aggressive in a statistically significant way. ChartGEX computes a VPIN-inspired flow-toxicity metric on 15-minute options-volume buckets, applies Bulk Volume Classification (BVC) using the underlying spot return as the imbalance signal, and sigma-normalises against a 5-day time-matched baseline (same 15-minute window on prior sessions). The output is a CDF percentile against intraday history and is classified safe, elevated, or toxic. The VPIN feature contributes positively when toxicity exceeds the elevated threshold.
5. DIX divergence
The fifth feature uses the dealer index (DIX) published by SqueezeMetrics. The raw DIX is a daily institutional-sentiment proxy; ChartGEX computes a magnitude-weighted signed divergence score that compares DIX direction to same-day spot direction. When DIX rises while spot falls — or vice versa — the divergence score flags a potential mispricing between institutional positioning and the price tape. Importantly, the score fails closed: if same-day spot is not available within the required window, the model returns no signal rather than imputing a value, to avoid false positives during data outages.
6. Volatility regime conditioning
The sixth feature is structural rather than directional: every prior threshold scales with the prevailing volatility regime. ChartGEX classifies 20-day realised volatility into three buckets — low (below 10 percent annualised), medium (10 to 30 percent), and high (above 30 percent). What counts as a significant VPIN spike or IV trough in a 6 percent RV environment is set more tightly than in a 25 percent RV environment, because the same absolute deviation has very different statistical meaning at different volatility levels. Without regime conditioning, false positives multiply in high-vol environments and false negatives multiply in low-vol ones.
The logistic combiner
The six features are integrated through a logistic regression. Each feature is standardised, weighted, and passed through the standard sigmoid to produce a probability P in [0, 1]. Initial weights are hand-tuned based on the relative importance of each feature in early backtests; the model is periodically re-fit on a labelled dataset of historical events using the script at scripts/calibrate-combiner.ts (most recent re-fit: 70 hand-labelled events).
Why logistic regression instead of a deeper architecture? Two reasons. First, with only six features and an irregular event base rate, a linear-with-link model is the appropriate complexity ceiling — anything deeper risks overfitting to the small labelled set. Second, logistic regression is interpretable: every input’s marginal contribution to the output probability can be read directly from the model coefficients. That interpretability is what makes methodology disclosure possible.
The Bonferroni correction (correlation-aware)
A naive multiple-comparisons correction would destroy this signal. If ChartGEX scans 100 strikes across 10 expirations — 1,000 hypotheses — and applies a textbook Bonferroni, the per-strike threshold would multiply by 1,000. Real signals would be buried under the correction.
The error in that approach is the independence assumption. Adjacent strikes in SPY options have correlation coefficients above 0.9; ten consecutive strikes are not ten independent hypotheses, they are effectively closer to two. ChartGEX applies a correlation-adjusted Bonferroni correction with an explicit 6× correlation factor for SPY: instead of dividing the per-strike alpha by the full strike count, the effective number of independent tests is computed and the correction is scaled accordingly. The 6× factor was derived empirically from the historical strike-to-strike correlation structure of SPY options chains.
The result keeps the family-wise error rate disciplined without burying real dealer-structure events under a multiple-comparisons penalty designed for independent hypotheses.
The calibration floor of 70 percent
Even after the model returns a probability, ChartGEX applies one more guardrail. ML-prediction confidence is capped at 70 percent until at least 50 live outcomes have validated the bin. This is the calibration floor.
The logic is straightforward: an uncalibrated model is allowed to be loud, but a calibrated model has to earn it. Fresh models, recalibrated models, and any model running in a regime it has not yet seen are subject to the cap. Once 50 or more outcomes accumulate in a given confidence bin, the lean-weight system computes the historical hit rate for that bin and adjusts future confidence outputs accordingly. If the 80 percent bin has historically hit 72 percent, raw output of 80 percent gets adjusted down to 72 percent at inference time.
The practical effect: the dashboard never shows a 95 percent confidence reading from a brand-new model. The number you see is either backed by realised outcomes or capped honestly.
Confirmed versus pending
The model’s final probability falls into three bands:
- P ≥ 0.65 — Confirmed dealer-structure alert. Surfaced as a primary signal on the dashboard.
- 0.35 ≤ P < 0.65 — Pending alert. Visible in the secondary feed for users who want earlier looks at developing structure.
- P < 0.35 — Not surfaced. The signal-to-noise ratio is insufficient to bother the user.
The pending tier exists because dealer-structure events often develop over hours or sessions. A trader who only sees the confirmed alerts will miss the earliest evidence of accumulation; a trader who only sees the pending alerts will be flooded with low-probability noise. Both views together are the right answer.
Limitations and known weaknesses
Open methodology means open limitations. Three are worth naming explicitly.
First, the model is currently fit only for SPY and QQQ. Other large-cap names exhibit different correlation structures, different OI thresholds, and different IV-surface dynamics. Expanding to additional tickers is a roadmap item; it is not as simple as pointing the model at a new symbol.
Second, the DIX divergence feature fails closed when same-day spot is unavailable. During data-provider outages — even brief ones — the model loses one of its six features and the resulting probability is correspondingly less confident. Users can interpret missing DIX as a downgrade signal.
Third, the logistic combiner’s weights were initially hand-tuned and have been re-fit on a relatively small labelled set. As the labelled set grows, weights will shift. Anyone treating the current weight vector as final is making an assumption the methodology does not support.
Where this goes from here
The immediate roadmap is expanding the labelled dataset, re-fitting the combiner against the larger set, and extending the model to additional liquid single-name tickers with appropriate correlation factors. A secondary track is integrating the LSTM model that has been trained but not yet wired into live inference; the LSTM captures sequential dependencies the logistic combiner cannot.
Nothing here is finished. Open methodology means open work, and that is the only honest place to leave it.
Further reading
- Gamma Exposure (GEX) glossary entry — foundational concept this article builds on
- Dealer Positioning glossary entry — the underlying market structure
- VPIN glossary entry — the flow-toxicity input
- Bonferroni Correction glossary entry — the statistical correction described here
- Volatility Regime glossary entry — the conditioning input