Squeeze Detection System
Gamma squeeze mechanics detection. 9 weighted flags, conviction-gated triage, and OTM call optimization.
Source: flag-system-v2-reversal-spec.md v0.3
Vol Anomaly Detection
“Is something interesting happening with volatility?”
7 flags testing observable vol conditions. Equal weight. Score 0-6.
Squeeze Mechanics Detection
“Are the mechanical conditions in place for a violent upside squeeze?”
9 weighted flags across 4 tiers. Squeeze score 0-100. Conviction gates.
The Loaded Gun
Core
The mechanics (dealer positioning creates the feedback loop)
Environment
The conditions (vol compressed, positioning one-sided)
Trigger
The turn (underlying starts moving — the loaded gun fires)
Tier Weight Distribution (% of Max Score)
Dealer Positioning Caveat
All Core flags (F1-F3) and F5 rest on the customer-buys / dealer-sells model. Most reliable on mid-cap, retail-driven names. Less reliable on mega-cap institutional names with covered calls/collars.
Squeeze Scanner
Python, the-stage
- Reads Parquet cache (no HTTP calls)
- Computes 9 weighted flags per ticker (F1-F9)
- Shared gamma profile computation (F1/F2/F3/F5)
- Tracks flag state transitions (NEW/PERSISTENT/CLEARED)
- Writes to trader_options_flags with weighted squeeze_score
- Queues LOADED/FIRE tiers with 2+ active flags for analysis
Agent Analysis
Sonnet, on-demand
- Reads analysis queue (LOADED + FIRE tiers)
- Calls Dashboard API (?sections=)
- Applies squeeze framework + call optimization context
- ALL output is status: 'draft' (triage only)
- FIRE alerts include gex_flip_strike + peak_call_strike
- Writes to trader_options_research
Dashboard Display
Next.js, live
- /options/monitoring — daily squeeze feed
- /options/[symbol] — research panel with call context
- /options/journal — paper trades with live MTM
- WATCH/LOADED/FIRE tier badges + squeeze_score gauge
- Draft/reviewed card styling + action buttons
The Feedback Direction
Dealer GEX negative near spot, bottom quintile of history
The Trampoline
Significant put gamma wall within 2x ATR below spot
The Cascade
Call OI 2-10% above spot in top 15th percentile of history
The Amplifier
Gamma-weighted OI vs daily volume in top 20th percentile
The Double Squeeze
SI ≥ 15% of float or ≥ 90th percentile of 252-day history
The Coiled Spring
HV10 and HV20 both below 15th percentile of 252-day history
The One-Sided Boat
Put/call OI ratio or put skew steepness in top quintile
Stress Priced In
Front-month IV elevated vs back-month (backwardation or steep negative slope)
The Turn
Dr. Mo turning bullish, price reclaiming MA, or HV accelerating
Weighted Scoring Formula
Squeeze Score Scale (0-100)
Mechanical setup forming. Monitor daily.
Squeeze mechanics in place. Identify strike/expiry targets.
Full setup + turn signal. Execute.
Example: SPY with F1 + F2 + F5 + F8
INACTIVE
No squeeze condition detected. Ticker is quiet on this dimension.
NEW
Condition just appeared — highest-conviction entry window. Squeeze mechanics are fresh and building.
PERSISTENT
Condition holding multi-day. Squeeze pressure is building. Still a valid signal — the coil is tightening.
CLEARED
Condition just resolved. The feedback loop is weakening — squeeze may be fading or already played out.
CLEARED
Condition just resolved. The feedback loop is weakening — squeeze may be fading or already played out.
PERSISTENT self-loops: each consecutive day the flag fires, it stays PERSISTENT. Only transitions to CLEARED when the condition stops firing.
Key Insights
Highest conviction entry. The condition just appeared and the setup is fresh. This is the moment the squeeze mechanics first align.
Building pressure. Multi-day persistence means the coil is tightening. Still a valid signal, but the initial entry window has passed.
State Reference
All flags fire in all regimes. Regime modifies position sizing only, not signal generation. There are no per-flag multipliers in v2 — every flag contributes its full weight regardless of regime. Sizing adjustments reflect the probability that a squeeze completes in each macro environment.
What changed from v1 to v2. Three flags removed, one promoted to Core, one reframed, one absorbed, five new flags added.
Vol level is not relevant to squeeze thesis. Captured indirectly in F8 term structure.
VRP spread direction is irrelevant to squeeze mechanics.
Reframed as coiled spring (compression) not acceleration. Environment tier 1.0x.
Simplified to backwardation only (removed F4a long-end rising). Environment tier.
Now F7b sub-signal of the composite F7 flag.
Sudden vol moves not relevant to squeeze mechanics detection.
Promoted to Core 2.0x tier. Now put-side only with ATR-based proximity.
The #1 gap in v1. Dealer feedback direction is the foundation of squeeze mechanics.
Upside complement to F2. Call OI above spot creates cascade hedging.
Uses existing si_pct_float. Short covering compounds gamma squeeze.
Gamma-weighted OI vs daily volume = impact magnitude.
Timing flag with 3 sub-signals. Dr. Mo + price reclaim + HV acceleration.
Summary
v1: 7 flags (6 scored, equal weight) --> v2: 9 flags (all scored, weighted)
QUEUED
LOADED or FIRE tier with 2+ NEW/PERSISTENT flags, awaiting agent analysis
DRAFT
MJS triage output — unreviewed squeeze lead, dashed/muted styling
REVIEWED
Trader agent + human confirmed — conviction output, accent styling
MONITORING
Squeeze flags persist and setup holds — watching for resolution
ARCHIVED
Conditions changed or user dismissed — outcome tagged for learning
Two-Actor Model (v1.7)
MJS (triage): Produces draft output only. Never writes conviction. No paper trades.
Trader Agent + Human (review): Promotes draft to reviewed. Creates paper trades. Sets reviewed_at timestamp.
Drafts never auto-promote. Unreviewed drafts stay as draft permanently or get archived.
Outcome Tags (set at archive)
Archive Reasons
Scanner Rewrite (F1-F9)
In Progress1-2 weeks- -Rewrite options_flag_scanner.py with 9 weighted flags (F1-F9)
- -Build shared strike_gamma_profile computation (used by F1/F2/F3/F5)
- -Implement weighted scoring: raw_weighted / 13.0 x 100 = squeeze_score
- -WATCH / LOADED / FIRE conviction tiers with gate requirements
- -Update trader_options_flags JSONB schema for all 9 flags
- -Deploy to nightly pipeline at 7:15 PM
Calibration & Replay
Upcoming1-2 weeks- -Build flag_replay_v2.py with available trader_strikes history
- -Forward return analysis: 5/10/20-day outcomes by tier
- -Institutional vs retail test: F1/F2/F3 hit rates on retail-driven vs mega-cap
- -Validate weighted scoring vs equal-weight alternative
- -Tune thresholds: F9 HV ratio, F6 compression percentile, F5 denominator
Dashboard Update
Upcoming1 week- -Update FlagBadge.tsx with 9 flags, weight display
- -Replace score column with squeeze_score (0-100) + tier badge
- -FIRE alerts top-of-page with squeeze narrative
- -Call optimization context on symbol pages
- -GEX visualization per-strike on symbol deep dives
Backtesting Integration
Upcoming2 weeks- -Connect FIRE signals to options backtester
- -Test OTM calls (0.10-0.25 delta, 14-45 DTE) on FIRE signals
- -Analyze: hit rate, avg payoff, max DD, Sharpe by tier
- -Evaluate: do Core-only signals outperform full model?
- -Build Sharpe attribution by flag