← Back to Docs

Scoring Formulas

Exact thresholds and weights from the production calculator (v3.8, computed on Railway)

Overview

The system uses four pillars, each scoring from −10 (extremely bearish) to +10 (extremely bullish). Each pillar is computed from weighted sub-components and normalized to the −10/+10 range. The final regime score combines the weighted average with a directional bonus that amplifies conviction when multiple pillars confirm a bearish trend.

Final score formula
base = (trend × 0.375) + (liquidity × 0.275) + (derivatives × 0.20) + (volatility × 0.15)
When trend < −2, a directional bonus fires:
bonus = min(0, derivatives) × 0.20 + min(0, volatility) × 0.30
final_score = base + bonus
37.5%Trend
27.5%Liquidity
20%Derivatives
15%Volatility

Directional Bonus

When trend is bearish (< −2) and confirmed by negative derivatives and/or volatility, the directional bonus adds up to −4.0 additional pressure. This prevents the system from staying in NEUTRAL/CAUTIOUS-BEAR when trend, derivatives, and volatility all agree on weakness. The bonus only fires downward (never adds bullish pressure).

Pillar 1

Trend

weight: 37.5%

Price structure, moving averages, and trend quality. Measures whether BTC is in an uptrend or downtrend, and how healthy the trend is.

Component A: Trend Direction 40% weight within pillar

SMA alignment (20/50/200), distance from key averages, and SMA slope. Price above SMA50/200 is bullish. SMA20 above SMA50 (golden cross setup) adds points. 20-day slope of SMA50 measures trend momentum.

Component B: Trend Quality 35% weight within pillar

Consistency of up-days (20d window), return alignment (20d and 60d returns in same direction), pullback depth relative to ATR, and breakout retention (new highs that hold for 3+ days).

Component C: Structure Retention 25% weight within pillar

How well price holds key levels: ratio of days above SMA50, position within 20-day range (close location value), and pullback severity relative to ATR.

Normalization
Each sub-component scores −100 to +100 raw. Combined: direction × 0.40 + quality × 0.35 + structure × 0.25, then divided by 10 and clamped to −10/+10.
Note: The Fear & Greed Index was previously included as a 5% modifier. Ablation testing showed it slightly hurt monotonicity and Sharpe ratio, so it was removed in v3.7. Its weight was redistributed: +2.5% to Trend, +2.5% to Liquidity.
Pillar 2

Liquidity

weight: 27.5%

Four signals measure capital flows into and out of Bitcoin. ETF flows are the dominant signal (60% combined weight). Missing components are excluded and remaining weights are renormalized.

Component A: ETF Flow Momentum (3-day rolling sum) 45% weight within pillar

Sum of the last 3 trading days of spot Bitcoin ETF net flows. Dominant ETFs: IBIT, FBTC, GBTC, ARKB, BITB. Weekends/holidays use the most recent 3 trading days.

3-day Net Flow (USD M)Raw ScoreSignal
> $1,000M++10Exceptional institutional demand
> $500M++7Very strong inflows
> $200M++4Strong inflows
> $50M++1Moderate inflows
> −$50M0Neutral (flat flows)
> −$200M−3Moderate outflows
> −$500M−6Heavy outflows
≤ −$500M−10Exceptional outflows / distribution
Component B: ETF Flow Acceleration (3d avg − 7d avg) 15% weight within pillar

Measures whether ETF flows are improving or deteriorating. Positive = flows accelerating. Capped at 0 when 3-day average flow is still negative (deceleration of outflows is not bullish).

Acceleration (USD M/day)Raw ScoreSignal
> $100M++10Rapid flow acceleration
> $50M++6Strong acceleration
> $15M++2Moderate acceleration
> −$15M0Stable flows
> −$50M−3Moderate deceleration
> −$100M−6Strong deceleration
≤ −$100M−10Rapid outflow acceleration
Component C: Stablecoin Market Cap 7-day Change 20% weight within pillar

Rising stablecoin supply signals new capital entering the crypto ecosystem (bullish).

7-day Supply ChangeRaw ScoreSignal
> +3%++10Strong inflow
> +1.5%++6Moderate inflow
> +0.5%++3Slight inflow
> −0.5%0Flat / neutral
> −1.5%−3Slight contraction
> −3%−6Moderate contraction
≤ −3%−10Heavy outflow
Component D: Exchange Netflow (7-day % of balance) 20% weight within pillar

7-day change in total BTC held on exchanges, as a percentage of current balance. Negative = outflow (accumulation, bullish). Positive = inflow (distribution, bearish). Thresholds from P5/P25/P50/P75/P95 of historical distribution.

7d Balance Change (%)Raw ScoreSignal
< −1.5%++10Heavy accumulation (below P5)
< −0.75%++6Strong accumulation (below P25)
< −0.3%++3Moderate accumulation
< +0.1%0Neutral
< +0.5%−3Moderate distribution (above P75)
< +1.0%−6Strong distribution
≥ +1.0%−10Heavy distribution (above P95)
Dynamic weighting
With ETF data: ETF Momentum 45% + ETF Accel 15% + Stablecoin 20% + Exchange 20%
Without ETF data: Stablecoin 50% + Exchange 50%
Missing components are excluded and remaining weights renormalized.
Pillar 3

Derivatives

weight: 20%

Two signals measure positioning health in perpetual futures markets. Funding rate scoring is gated by the current trend direction: the same funding rate can be bullish in a downtrend (contrarian squeeze setup) but bearish in an uptrend (overleveraged longs).

Component A: Funding Rate Z-Score (trend-gated) 50% weight within pillar

The funding rate is converted to a z-score against a 90-day rolling window, then scored differently based on the current trend pillar value. This makes the signal adaptive: negative funding in a bear trend is contrarian-bullish, while positive funding in a bear trend is very bearish (crowded longs in a downtrend). If 3-day average direction disagrees with z-score direction, the score is dampened to 75%.

When trend > +3 (bull)
Funding Z-ScoreRaw ScoreLogic
z > +2−3Overheated longs in uptrend
z > +10Normal bull positioning
z < −2++10Extreme shorts in uptrend: squeeze setup
z < −1++7Contrarian shorts: bullish
else0Neutral
When trend < −3 (bear)
Funding Z-ScoreRaw ScoreLogic
z > +2−10Crowded longs in downtrend: very bearish
z > +1−7Elevated longs in downtrend
z < −2++7Extreme negative funding: contrarian bullish
z < −1++3Shorts paying: mild contrarian bullish
else0Neutral
When trend is neutral (−3 to +3)
Funding Z-ScoreRaw ScoreLogic
z ≤ −2++10Extreme negative: squeeze potential
z < −1.5++7Strong negative funding
z < −1++5Moderate negative funding
−1 ≤ z ≤ +10Normal range
z < +1.5−5Mildly elevated positive funding
z < +2−7Elevated positive funding
z ≥ +2−10Extreme positive: reversal risk
Fallback: If z-score is unavailable (less than 90 days of funding data), the raw funding rate (× 100 to get %) is scored with symmetric thresholds: > 0.03% → −10, > 0.015% → −7, > 0.005% → −3, ≤ 0.005% → 0, < −0.005% → +3, < −0.015% → +7, < −0.03% → +10.
Component B: Open Interest × Price Interaction 50% weight within pillar

Combines 1-day OI change with 1-day price change to detect healthy vs. unhealthy positioning. Price up + OI up = bullish conviction. Price down + OI up = shorts building or longs trapped (bearish). Also factors in 7-day OI trend (40% of OI score). Uses USD-denominated OI (close_oi × btcPrice) for cleaner capital-at-risk signal (v3.8 improvement).

Price × OI InteractionScore RangeSignal
Price ↑ + OI ↑+2 to +10Bullish conviction: new money entering longs
Price ↑ + OI ↓+1 to +5Short squeeze or profit-taking: mildly bullish
Price ↓ + OI ↑−2 to −10Bearish: shorts building or longs trapped
Price ↓ + OI ↓−1 to −5Capitulation / forced selling: mildly bearish
Flat price or OI0No significant interaction

1-day interaction (60%) + 7-day OI trend (40%). Price movement threshold: ±0.3%. OI threshold: ±0.5%.

Pillar 4

Volatility

weight: 15%

Uses 7-day and 30-day realized volatility (annualized log returns) to measure market stress. Healthy trends need moderate volatility. Both extreme compression and elevated vol are negative signals. A trend interaction modifier adjusts the score based on whether vol is rising/falling in bull/bear markets.

Component A: Realized Volatility Level (7-day) 55% weight within pillar

U-shaped scoring: the sweet spot is 35-50% annualized vol (healthy for trends). Both extremes score negatively. Below 25% signals coiled compression; above 95% signals crisis.

7d Realized Vol (ann.)Raw ScoreSignal
< 25%−5Extreme compression: breakout incoming
25 − 35%0Low: neutral
35 − 50%++5Healthy: sweet spot for trending
50 − 70%0Normal: neutral
70 − 95%−5Elevated: stress building
≥ 95%−10Crisis-level volatility
Component B: Volatility Direction (7d / 30d ratio) 45% weight within pillar

Compares short-term vol to medium-term vol. A rising ratio means vol is spiking (bearish). A falling ratio means vol is compressing (generally bullish, suggests stability).

7d / 30d Vol RatioRaw ScoreSignal
> 1.8−10Sharp vol spike
> 1.5−7Significant vol expansion
> 1.2−3Moderate vol increase
0.85 − 1.2++5Stable vol: healthy
0.7 − 0.85++7Vol compressing: bullish
< 0.7++3Extreme compression: uncertain
Trend interaction modifier (post-hoc, not weighted)
Vol rising + bear trend: −2 (vol confirming weakness)
Vol stable/falling + bull trend: +2 (calm strength)
Vol compressed + neutral trend: +1.5 (potential breakout)

Stress Detection

Before computing the final score, the system checks how many pillars are in bearish territory. This determines the stress state shown alongside the regime.

ConditionThreshold
Trend< −2
Liquidity< 0
Derivatives< −2
Volatility< −2
HIGH3 or more conditions met
MODERATE2 conditions met
NORMAL0 or 1 condition met

Final Score & Regime Classification

Scoring pipeline
Step 1: Weighted average
base = (trend × 0.375)
+ (liquidity × 0.275)
+ (derivatives × 0.20)
+ (volatility × 0.15)
Step 2: Directional bonus (only when trend < −2)
bonus = min(0, derivatives) × 0.20
+ min(0, volatility) × 0.30
Step 3: Combine and clamp
final_score = clamp(base + bonus, −10, +10)
Step 4: Convert to 0-100 scale for classification
score_0_100 = (final_score + 10) × 5

Each pillar score is in the −10 to +10 range. The final score is also −10 to +10.

Regime thresholds (on 0-100 scale)
0-100 Score−10/+10 EquivalentRegimeDescription
≥ 70≥ +4.0RISK-ONStrong bull conditions across all pillars
≥ 58≥ +1.6CAUTIOUS-BULLBullish but with some weakening signals
≥ 42≥ −1.6NEUTRALMixed or indeterminate conditions
≥ 30≥ −4.0CAUTIOUS-BEARBearish but not fully collapsed
< 30< −4.0RISK-OFFStrong bear conditions across all pillars

Allocation Curve

Each regime maps to an exposure multiplier: RISK-ON 1.75x, CAUTIOUS-BULL 1.00x, NEUTRAL 0.50x, CAUTIOUS-BEAR 0.10-0.30x (depending on subtype), RISK-OFF 0.00x. CAUTIOUS-BEAR is split into two subtypes: "risk" (general caution) gets 0.10x, and "dir" (strong directional evidence, trend < −4) gets 0.30x.