ReflationCurrent RegimeDay 7as of 2026-04-17

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

v1

Vol Anomaly Detection

“Is something interesting happening with volatility?”

7 flags testing observable vol conditions. Equal weight. Score 0-6.

v2

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)

46%
12%
31%
12%
Core Mechanistic2x / max 6
Amplification1.5x / max 1.5
Environment1x / max 4
Trigger1.5x / max 1.5

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

~20 sec for 200 tickers
  • 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

~$0.02-0.10 per ticker
  • 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

Real-time from Supabase
  • /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
Core Mechanistic2.0x3 flags

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

Amplification1.5x1 flag

The Amplifier

Gamma-weighted OI vs daily volume in top 20th percentile

Environment1.0x4 flags

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)

Trigger1.5x1 flag

The Turn

Dr. Mo turning bullish, price reclaiming MA, or HV accelerating

Weighted Scoring Formula

Core(F1 x 2.0) + (F2 x 2.0) + (F3 x 2.0)max 6.0
Amplification(F5 x 1.5)max 1.5
Environment(F4 x 1.0) + (F6 x 1.0) + (F7 x 1.0) + (F8 x 1.0)max 4.0
Trigger(F9 x 1.5)max 1.5
Totalsqueeze_score = (raw_weighted / 13.0) x 100max 13

Squeeze Score Scale (0-100)

0-24
WATCH 25-44
LOADED 45-59
FIRE 60-100
254560100
WATCH25
1+ Core flag
No F9 required

Mechanical setup forming. Monitor daily.

LOADED45
2+ Core flags
No F9 required

Squeeze mechanics in place. Identify strike/expiry targets.

FIRE60
2+ Core flags
F9 required (Trigger)

Full setup + turn signal. Execute.

Example: SPY with F1 + F2 + F5 + F8

Core:(2.0 + 2.0) = 4.0
Amplification:1.5
Environment:1.0
raw_weighted:6.5
squeeze_score:(6.5 / 13) x 100 = 50
Tier:LOADED

INACTIVE

No squeeze condition detected. Ticker is quiet on this dimension.

Fires

NEW

Condition just appeared — highest-conviction entry window. Squeeze mechanics are fresh and building.

Fires again next day

PERSISTENT

Condition holding multi-day. Squeeze pressure is building. Still a valid signal — the coil is tightening.

Silent (condition stops)

CLEARED

Condition just resolved. The feedback loop is weakening — squeeze may be fading or already played out.

Silent next day
Back to INACTIVE
Silent (condition stops)

CLEARED

Condition just resolved. The feedback loop is weakening — squeeze may be fading or already played out.

Silent next day
Back to INACTIVE

PERSISTENT self-loops: each consecutive day the flag fires, it stays PERSISTENT. Only transitions to CLEARED when the condition stops firing.

Key Insights

NEW

Highest conviction entry. The condition just appeared and the setup is fresh. This is the moment the squeeze mechanics first align.

PERSISTENT

Building pressure. Multi-day persistence means the coil is tightening. Still a valid signal, but the initial entry window has passed.

State Reference

INACTIVENo squeeze condition detected. Ticker is quiet on this dimension.Fires → NEW
NEWCondition just appeared — highest-conviction entry window. Squeeze mechanics are fresh and building.Fires again → PERSISTENT, Silent → CLEARED
PERSISTENTCondition holding multi-day. Squeeze pressure is building. Still a valid signal — the coil is tightening.Fires again → PERSISTENT, Silent → CLEARED
CLEAREDCondition just resolved. The feedback loop is weakening — squeeze may be fading or already played out.Silent → INACTIVE
RegimeSizingRationale
Goldilocks
1.00x
Equity-supportive, squeezes run cleanly
Reflation
1.00x
Growth-supportive, momentum compounds
Inflation
0.75x
Cross-currents; squeezes can stall on macro
Deflation
0.50x
Leverage effect; squeezes can reverse violently

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.

F1 IV Rank Extreme
removed

Vol level is not relevant to squeeze thesis. Captured indirectly in F8 term structure.

F2 VRP Dislocation
removed

VRP spread direction is irrelevant to squeeze mechanics.

F3 HV Acceleration
reframedF6 Vol Compression

Reframed as coiled spring (compression) not acceleration. Environment tier 1.0x.

F4 Term Structure Anomaly
simplifiedF8 Term Structure Backwardation

Simplified to backwardation only (removed F4a long-end rising). Environment tier.

F5 Skew Spike
absorbedF7 Put/Call Positioning Skew

Now F7b sub-signal of the composite F7 flag.

F6 IV Trend Break
removed

Sudden vol moves not relevant to squeeze mechanics detection.

F7 Gamma Concentration
promotedF2 Put Gamma Trampoline

Promoted to Core 2.0x tier. Now put-side only with ATR-based proximity.

NEW
newF1 Net Dealer GEX

The #1 gap in v1. Dealer feedback direction is the foundation of squeeze mechanics.

NEW
newF3 Call OI Cascade

Upside complement to F2. Call OI above spot creates cascade hedging.

NEW
newF4 Short Interest Fuel

Uses existing si_pct_float. Short covering compounds gamma squeeze.

NEW
newF5 Squeeze Pressure Ratio

Gamma-weighted OI vs daily volume = impact magnitude.

NEW
newF9 Directional Reversal

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)

Core: 46%|Amplification: 12%|Environment: 31%|Trigger: 12%
removed
reframed
promoted
simplified
absorbed
new

QUEUED

LOADED or FIRE tier with 2+ NEW/PERSISTENT flags, awaiting agent analysis

MJS runs analysis (all output is draft)

DRAFT

MJS triage output — unreviewed squeeze lead, dashed/muted styling

Trader agent + human review

REVIEWED

Trader agent + human confirmed — conviction output, accent styling

Flags persist + regime holds

MONITORING

Squeeze flags persist and setup holds — watching for resolution

Conditions normalize
Score 0 for 3+ days or regime shift 2+ days
User clicks Archive or flags clear

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)

Correct
Incorrect
Mixed
Expired

Archive Reasons

flags_clearedregime_changeuser_closedsuperseded
1

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
2

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
3

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
4

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