margin_compression_severe
stress default: short
Definition
Fires on >500 bps year-over-year decline in operating margin. Captures the 'good business getting worse' pattern.
Trigger logic
(prior_fy_op_margin - current_fy_op_margin) > 0.05 AND prior_fy_op_margin > 0.05. Op margin = OperatingIncomeLoss / Revenues.
Source: signals/build_signals.py:238
Calibration — gross stock return vs net of execution costs
Cost model: 5 bps half-spread each side, 10 × √($1M / 30d ADV) impact each side, ADV-tiered borrow (≥$50M ADV → 10 bps annual; ≥$5M → 30; <$5M → 100), scaled by holding_days/252 if short.
| Horizon | n events | Gross stock ret | Net PnL | Hit rate | r/σ net | Avg cost (bps) |
|---|---|---|---|---|---|---|
| 1d | 2,429 | +2.00% | -2.03% | +36.27% | -0.02 | 46 |
| 5d | 2,429 | +3.35% | -2.80% | +38.74% | -0.02 | 47 |
| 20d | 2,364 | +6.26% | -4.81% | +38.32% | -0.03 | 52 |
| 60d | 2,266 | +78.74% | -75.14% | +40.47% | -0.03 | 65 |
| 252d | 2,195 | +41.39% | -31.94% | +39.77% | -0.09 | 126 |
Sector breakdown (top 8 by |r/σ| at 20d)
| SIC division | n | Mean 20d | Hit rate | r/σ |
|---|---|---|---|---|
| Services (health + legal + edu) | 106 | +46.69% | +37.74% | +0.16 |
| Transportation, Communications, Utilities | 93 | +39.75% | +35.48% | +0.11 |
| Wholesale + Retail Trade | 130 | -1.98% | +33.85% | -0.06 |
| Finance, Insurance, Real Estate | 108 | +5.81% | +32.41% | +0.05 |
| Manufacturing (light) | 479 | +2.04% | +38.62% | +0.04 |
| Manufacturing (heavy) | 894 | +5.36% | +40.83% | +0.03 |
| Mining + Construction | 151 | +0.45% | +40.40% | +0.01 |
| Services (business + personal) | 403 | -0.15% | +35.48% | -0.00 |
Recent triggers
ALCO— ALICO, INC. (FY2025)BAX— BAXTER INTERNATIONAL INC (FY2025)HSY— HERSHEY CO (FY2025)BRID— BRIDGFORD FOODS CORP (FY2025)DIN— Dine Brands Global, Inc. (FY2025)
Caveats
- WARNING: shorting at 60d loses -75.14% net. Massive mean reversion.
- Pair with positive_eps_streak: long +12.26% / 20d net (n=284) — quality + temporary pressure.
- Pair with fcf_turn_positive: long +52.69% / 20d net (n=80) — inflection at the trough.
Citations
- Penman (2010). 'Financial Statement Analysis and Security Valuation.'
Live data → /api/methodology/signal/margin_compression_severe · MCP → pyflo_signal_methodology(signal="margin_compression_severe")