← all signals

dso_drift_severe

forensic   default: short

Definition

Fires on Days Sales Outstanding rising >25% YoY while revenue grows <10%. Channel-stuffing / receivables-quality precursor.

Trigger logic

(current_dso - prior_dso) / prior_dso > 0.25  AND  revenue_growth < 0.10. DSO = AccountsReceivable / (Revenues / 365).

Source: signals/build_signals.py:344

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.

Horizonn eventsGross stock retNet PnL Hit rater/σ netAvg cost (bps)
1d 2,382 +0.25% -0.49% +44.16% -0.04 35
5d 2,381 -0.30% +0.11% +44.18% +0.01 36
20d 2,351 +2.47% -2.54% +43.26% -0.02 40
60d 2,258 +16.34% -11.34% +45.44% -0.06 51
252d 2,213 +32.55% -24.65% +49.30% -0.10 102

Sector breakdown (top 8 by |r/σ| at 20d)

SIC divisionnMean 20dHit rater/σ
Wholesale + Retail Trade 142 +7.95% +50.70% +0.15
Manufacturing (light) 505 -3.43% +38.02% -0.14
Finance, Insurance, Real Estate 96 +17.28% +40.62% +0.14
Mining + Construction 214 -1.97% +41.12% -0.08
Services (business + personal) 326 +16.03% +44.48% +0.05
Manufacturing (heavy) 737 -0.08% +43.69% -0.00
Services (health + legal + edu) 93 +0.09% +47.31% +0.00
Transportation, Communications, Utilities 238 -0.01% +48.32% -0.00

Recent triggers

Caveats

Citations


Live data → /api/methodology/signal/dso_drift_severe  ·  MCP → pyflo_signal_methodology(signal="dso_drift_severe")