UW 1Y historical findings - the contrarian aggressor flip

First serious sweep across the 1Y UW Parquet bundle (acquired 2026-05-21, covers SPY through 2026-05-07). Three findings rewrite how MK3 should read flow.

Headline

SignalHit %LiftFires/day
sweeps >= 3 + mom_top2567.8%+10.215/day
sweeps >= 5 (rare burst)67.3%+9.815/day
sweeps >= 366.7%+9.245/day
mom_top5 (prior winner)74.1%+16.519/day
impulse_top10 (bull aggressor)48.8%-8.739/day, contrarian
buy_call_dom >= 70%54.9%-2.7142/day, contrarian

Baseline = 57.6% P(SPY +7bps in 30m) over 250 days.

Three findings that change algo design

1. Aggressor buy-flow is CONTRARIAN, not bullish

The obvious “bullish” feature (heavy call-side premium dominance, positive bull aggressor) predicts SPY going DOWN. Top decile of impulse_norm runs -8.7 lift. buy_call_dom >= 85% runs -4.5 lift.

If MK2’s scoring engine treated “high call buying” as bull confirmation it was anchored on the wrong sign. This is a candidate explanation for the systemic BULL CALL losses (#442, #443, #444 from 2026-05-20). Call buying is a FADE target, not confirmation.

2. Sweep flags are the strongest UW pre-classified signal

sweeps >= 3 in last 1 min gives +9.2 lift at 45/day, both high quality and high frequency. UW already did the multi-exchange ISO clustering. This is institutional urgency, block buyers hitting multiple exchanges to grab liquidity fast. Real signal.

3. Negative-GEX regime conditioning adds another 10 points

RegimeHit %Lift
Negative GEX (trend regime)60.5%+3.0
Positive GEX (mean-rev regime)50.3%-7.3
MID/HI IV (>=33)68.0%+10.4 (small n=75)
LOW IV (<33)56.2%-1.4

A 10-point swing from a single daily feature. Trade only negative-GEX days and the edge improves substantially.

Time-of-day with best composite

BucketHit %Lift
08:30-0970.3%+12.8 (rare 0.5/day)
09-1155.5%-2.1
11-1354.3%-3.2
13-1557.7%0

The 11-13 dead window is confirmed even with these stronger features.

The MK3 trading rule that falls out

GATE 1 (regime):    net_gex < 0   (trend regime only)
GATE 2 (signal):    sweeps >= 3 in last 1 min AND mom_5m >= top quartile
GATE 3 (anti-fade): impulse_norm NOT in top 10%  (avoid extreme call-buy minutes)
GATE 4 (time):      Skip 11-13 (chop)

Expected: ~10-12 fires/day, ~68% hit rate, biased to trend days.

Cost math with trail-stop dynamics

Hit rate:      67.8%
Cost:          $4 round trip
Stop loss:     -25% on miss = -$50/contract avg
Win (10% TP):  +$25/contract gross

Without trail-stop:
Expectancy = 0.678 * $25 + 0.322 * (-$50) - $4 = -$3.15/contract  (marginal negative)

With trail-stop (winners run to +15-20% avg):
Expectancy = 0.678 * $40 + 0.322 * (-$50) - $4 = +$7.02/contract  (clearly profitable)

MK2’s trail-stop dynamics flip this from marginal-negative to clearly profitable at 68% hit rate.

What was wrong with earlier analysis

  1. Skipped big_option_trades (the impulse substrate, where the sweep flag and aggressor-side pre-classification live, where MK2’s IMPULSE engine gets its substrate from). Huge miss.
  2. Used naive aggressor flow as bullish. Contrarian. Data is clear.
  3. Missed the GEX regime conditioning. Trend vs mean-rev day matters.
  4. Didn’t separate sweeps from regular flow. Sweeps are the predictive sub-signal.

What’s still NOT in this analysis

Even at 7 features, missing:

  • option_chains (177MB), strike-level IV, OI, volume by side
  • net_flow_holdings, 90d positioning
  • delta_exposure, dealer delta regime
  • Cross-asset / VIX term structure
  • Macro proximity (FOMC, CPI, OPEX)

This is a research input, not a final algo. But directionally much stronger than the 3-feature toy.

TL;DR

  • Sweep flag is the strongest UW pre-classified signal, sweeps>=3 + momentum = 67.8% hit / 15 fires/day.
  • Aggressor buy-flow is CONTRARIAN, not bullish, flips the sign of one of the most prominent MK2 features.
  • Negative-GEX regime conditioning adds another 10 points of edge.
  • Trail-stop dynamics flip the +10%-TP math from marginal-negative to clearly profitable at 68% hit rate.
  • Still 7 of 10 datasets, option_chains + delta_exposure + holdings untouched.

Treat this as input to interrogate the engine, not as a rewrite spec.

mk3-data-foundation-constraint nautilus-architecture