Open methodology

Built to be audited.

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 grade formula

How every grade is computed: four pillars, multiplied.

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.

W

Wilson Win Rate

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.96

A 90% win rate on 3 samples is noise. A 65% win rate on 200 samples is a signal. Wilson tells the two apart.

Q

Information Ratio

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.

R

Return Adequacy

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.

C

Bayesian Confidence

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.

The composite

One number from four signals.

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

grade_score=W×(0.625·Q + 0.375·R)×VPE×C×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

If win_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.
Grade thresholds

From score to letter.

Same thresholds for every asset, every category, every parameter combination. The badge is a verdict — not a theme.

GradeScoreLabelMeaning
≥ 60ExceptionalRare alignment of all four pillars — high conviction.
40 – 60StrongMost pillars strong; the verdict is buy-the-dip.
25 – 40SolidA reasonable base rate; not exceptional but supportive.
10 – 25MarginalMixed evidence. Treat as inconclusive.
< 10WeakWin rate below 50% or insufficient data to grade.

S = cyan · A = green · B = lime · C = orange · D = red. Grade colors live ONLY inside the badge — never on borders, pills, or section backgrounds.

The algorithm

Drawdown, segmented, then replayed.

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

Distance from the peak

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

20 equal-width buckets

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, Sharpe, or Sortino

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

Updated only on revealed data

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

The most common way backtests lie — and how we don't.

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_bias

If the algorithm ever cheats forward, the build breaks.

Honest caveats

What Dipsern cannot do.

Every honest quantitative tool has limits. Reading them is part of using the tool.

Past performance is a base rate.

History rhymes, it does not repeat. Every Dipsern number is a base rate over past episodes, not a forecast of this one.

Black swans are invisible.

Events with no historical analog — a novel pandemic, a sovereign default, a regime change — cannot be modelled from history.

Sample size matters.

Buckets with fewer than ~5 confirmed episodes are noise. We display the count next to every signal — respect it.

Survivorship bias.

Our universe contains assets that exist today. Companies that went to zero between 1990 and 2020 are not in the dataset.

Drawdowns can keep going.

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.

Backtests omit frictions.

Taxes, bid/ask spreads on illiquid assets, and execution slippage are not modelled by default.

What Dipsern is not

Decision support, not a trader.

  • ×We do not execute trades. We have no access to your brokerage.
  • ×We do not provide personalised financial, tax, or legal advice. We are not a registered investment advisor.
  • ×We do not manage portfolios on your behalf.
  • ×We do not guarantee returns. Every signal is a probabilistic statement about historical data, not a promise.
  • ×We do not recommend leverage, options, or any specific risk-taking strategy.
See it in action

Run it on any of 2,200+ assets.

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.