Every change to what KairosBias measures, how it's scored, or where the underlying data comes from - dated, and never edited after the fact. This is not a feature-release log; see the methodology page for how the current model works.
A currency's historical tendency to strengthen or weaken in a given calendar month, computed from the full ECB history back to 1999-01-04 (~27 years), weighted 10% of the composite. The other four layers keep their exact relative proportions, rescaled to make room: EMA 35→32, COT 30→27, momentum 20→18, rates 15→13. A large average move on a near coin-flip year split is discounted toward zero by a consistency multiplier rather than scoring as a strong signal. This layer has not been forward-tested - see RESEARCH.md.
Confidence used to be |divergence| thresholds (≥80 HIGH, ≥30 MEDIUM), which measured magnitude that was already on screen twice. Replaced with a descriptive count of how many of the five scoring layers point the same direction. A 5-week live test had found the old HIGH bucket underperforming MEDIUM, traced to a single saturated layer producing a large divergence read as "most confident."
The previous min-max normalisation guaranteed whichever currency sat at its own 52-week extreme scored exactly ±100 regardless of how ordinary that reading actually was, and scaled each currency by its own range, which could rank a currency's positioning as more extreme than another's when the opposite was true by standard deviations. Replaced with a z-score passed through the same tanh transform momentum already used.
Momentum now measures the percentage price change over 5, 20 and 60-day horizons directly, rather than inferring direction from the spacing between EMA20/EMA50/EMA200. Coverage expanded from 8 to all 28 G8 pairs in the same change.
Twelve Data (a commercial, licence-restricted vendor) retired as the price source. Prices now come from the European Central Bank's daily euro foreign exchange reference rates (data-api.ecb.europa.eu), public infrastructure with history back to 1999-01-04 - the same feed the EMA, momentum and seasonality layers all read.
Model versions are recorded on every score_history row - a scoring change never silently blends into a measurement made under different rules. See /methodology for the current weights and layer definitions.