Every formula, every assumption, every limitation. Dipsern is roughly 600 lines of pure NumPy — no black box, no neural net, no proprietary AI. Read it, audit it, replicate it.
The composite is multiplicative, not additive. A signal must clear every pillar — a weak sample size collapses the score even when win rate looks heroic.
95% confidence interval lower bound on the true win rate. Shrinks uncertain estimates from small samples toward 50%.
Formula
W = max(0, center − margin), Wilson lower bound at z = 1.96A 90% win rate on 3 samples is noise. A 65% win rate on 200 samples is a signal. Wilson tells the two apart.
How much of the median return survives the prediction error. Penalises signals buried in noise.
Formula
Q = clamp(median_return / max(prediction_error, 0.01) / 3, 0, 1)A +6% forecast with ±12% error has IR = 0.5 — noisy. A +6% forecast with ±2% error has IR = 3 — crisp.
Caps absurd magnitudes and penalises trivial ones. tanh keeps the curve smooth.
Formula
R = clamp(tanh(median_return / 10), 0, 1)A +0.3% median over 90 days is not actionable, even if win rate is 80%. R drags it down.
Sample-size confidence. A bucket with only 5 occurrences gets C = 0.14 regardless of how good the win rate looks.
Formula
C = n / (n + 30)At n = 30 episodes, C = 0.50. At n = 100, C = 0.77. At n = 300, C = 0.91. Multiplicative, so small samples cap the grade.
VPE is the Volatility Penalty — it discounts shallow entries on famously volatile assets so a -3% drawdown in a name that historically draws down 60% is rightly graded D, not S.
Grade score, 0 – 100
If any factor goes to zero, the composite goes to zero. That's the design. A great IR with five samples is not a great signal — it's a tiny sample with a great IR.
Hard floor
Ifwin_rate < 0.50, the grade short-circuits to D with score 20. No coin flip ever earns S, A, or B.Parity tested
The Python engine (api/arad_engine.py) and the TypeScript twin (src/lib/score-utils.ts) produce bit-for-bit identical scores. Tested on every commit.Same thresholds for every asset, every category, every parameter combination. The badge is a verdict — not a theme.
S = cyan · A = green · B = lime · C = orange · D = red. Grade colors live ONLY inside the badge — never on borders, pills, or section backgrounds.
Dipsern measures how deep an asset has fallen from its all-time high, groups every historical day into one of 20 drawdown buckets, and reports the median forward return that historically followed when the asset was at the same level you're looking at today.
Step 1 — Drawdown
drawdown[t] = (price[t] − running_max[t]) / running_max[t]Mathematically bounded between -1.0 and 0.0. The fixed range is why buckets are stable.
Step 2 — Segmentation
bucket_i covers [-100% + 5·i %, -95% + 5·i %)Boundaries are fixed to the mathematical range — not data-driven quantiles — so yesterday's analysis and today's agree on what happened in 2008.
Step 3 — Forward metric
return[t] = (price[t + 90d] − price[t]) / price[t]Calendar days, not trading days, so weekend gaps and holidays don't distort cross-asset comparisons. Crypto trades 24/7; equities don't.
Step 4 — Rolling median
median[t] = median(realized returns in bucket up to t)Median beats EMA on prediction error across every supported category — return distributions are skewed and fat-tailed, and the median is robust to both.
No look-ahead bias
Dipsern's median at time t only incorporates forward returns whose source day was at least return_period days earlier. The first 90 days of every series have median = 0 because there is simply nothing to learn from yet.
Enforced by test
pytest api/tests/test_arad_engine.py::test_no_lookahead_biasIf the algorithm ever cheats forward, the build breaks.
Every honest quantitative tool has limits. Reading them is part of using the tool.
History rhymes, it does not repeat. Every Dipsern number is a base rate over past episodes, not a forecast of this one.
Events with no historical analog — a novel pandemic, a sovereign default, a regime change — cannot be modelled from history.
Buckets with fewer than ~5 confirmed episodes are noise. We display the count next to every signal — respect it.
Our universe contains assets that exist today. Companies that went to zero between 1990 and 2020 are not in the dataset.
An asset down 30% can go to 60%. Dipsern tells you what happened on average; it cannot tell you whether this drawdown is the bottom.
Taxes, bid/ask spreads on illiquid assets, and execution slippage are not modelled by default.
What Dipsern is not
Stocks, ETFs, crypto, commodities, forex, indices, and every major global equity market. Full parameter control. No black box.
For informational purposes only. Not financial advice. Past performance does not guarantee future results.