KairosBias quantifies currency strength by combining five independent analytical layers into a single composite score. No discretion, no bias - just a repeatable, data-driven framework updated every trading day.
KairosBias is for research and educational purposes only. Nothing on this platform constitutes financial advice, investment advice, or a recommendation to buy or sell any financial instrument. Trading forex involves significant risk of capital loss. Past performance is not indicative of future results. Always conduct your own research and consult a qualified financial advisor before making any trading decisions.
Every G8 currency receives a composite score between −100 and +100. A score near +100 means the currency is showing strong bullish signals across all five layers. A score near −100 means the opposite. Scores near zero indicate no clear directional edge.
The composite is a weighted average of five sub-scores - EMA Structure, COT Positioning, Momentum, Interest Rates, and Seasonality, added 2026-08-11. Each sub-score is also expressed on the same −100 to +100 scale so you can see exactly where the strength or weakness is coming from.
These are the default weights. Pro subscribers can adjust them freely - the composite recalculates instantly in the browser using the stored sub-scores, so there's no waiting for a server recalculation.
Every published score is also recorded the moment it is computed, never revised, so the bias history you see is exactly what the engine said at the time. The score is macro context, not a signal: it tells you which way the macro data leans, and what you do with that is your trading, not ours.
Price relative to its exponential moving averages is one of the most reliable indicators of trend direction and momentum. KairosBias evaluates each currency across three EMAs - the 20, 50, and 200 period - computed from the European Central Bank's daily euro foreign exchange reference rates. These are a single official daily fixing published each TARGET working day around 16:00 CET, not a broker's closing price, so the EMA values here will differ slightly from those on any individual broker's chart.
The scoring logic reflects classic EMA stack analysis. A bullish stack - price above EMA20, EMA20 above EMA50, EMA50 above EMA200 - produces a score of +100. A bearish stack produces −100. Partial alignment scores proportionally: above the 50 and the 200 with the 50 still above the 200, but not fully stacked, scores ±60. Anything that clears none of those tests falls through to ±25 on the single question of whether price is above the 200. Each currency is evaluated across four representative pairs (e.g. USD is scored via EURUSD, GBPUSD, AUDUSD, NZDUSD) and the results are averaged - with base-side scores positive and quote-side scores flipped negative.
EMA structure carries the highest default weight because it directly reflects current price behaviour - it is the most responsive layer to changing market conditions and the hardest to manipulate with positioning or rhetoric.
The Traders in Financial Futures report is published weekly by the CFTC and shows the net positioning of leveraged money - hedge funds, CTAs, and other large speculators - in currency futures. These participants move significant capital and their positioning tends to reflect informed macro views rather than short-term noise.
KairosBias calculates the net leveraged-money position (longs minus shorts) for each currency and measures how unusual today's reading is against that currency's own trailing 52 weeks, in standard deviations. That is then mapped onto the −100 to +100 scale with a smooth curve, the same transform the momentum layer uses. A reading around two standard deviations from its own average scores about ±85, three about ±96. Positioning sitting near its yearly average scores near zero.
This layer was rescaled on 2026-08-11. It previously normalised against the 52-week high and low, which saturates by construction: whichever currency happened to sit at its own yearly extreme scored exactly ±100 and stopped distinguishing anything beyond that. On the day it was replaced, three of the eight currencies were pinned above 95. It also made the numbers incomparable between currencies, because each was divided by its own range, and that produced a real ranking error: one currency scored −95.8 and another −62.1 while the second was in fact the more extreme position. Reading all 52 weeks rather than just the highest and lowest fixes both.
COT data updates once per week - every Friday after market close. The Pro dashboard shows a full year of historical positioning so you can assess whether institutional bias is building, unwinding, or stretched to an extreme.
The momentum layer measures rate of change: how far a currency has actually moved, as a percentage, over three lookbacks. Short-term is the 5-day change, Trend the 20-day, and Structural the 60-day. Each currency's move is averaged across its four representative pairs before scoring, so a reading reflects the currency itself rather than one crowded cross. The three are combined weighted 45% structural, 35% trend, 20% short-term.
Percentage moves are mapped onto the −100 to +100 scale with a smooth curve rather than a hard cut-off, so an unusually large move still ranks above a merely large one instead of both pinning at the maximum. The curve's scale is fixed, not rolling, which means a score of +70 today represents the same size of move as +70 a year ago and the 30-day history charts stay comparable.
This layer was rebuilt on 2026-08-10. It previously compared price against its moving averages and described the result as 4-hour, daily and monthly momentum. That was inaccurate twice over: all three readings came from the same daily data, and the layer tracked actual price movement poorly. Rate of change measures what the word momentum is normally understood to mean.
A currency rising across all three lookbacks scores near +100. One rising over 5 days but falling over 60 lands in between, which is the honest reading of a bounce inside a broader downtrend.
On the pair detail page, you can see each band broken out individually, with the exact comparison it represents shown alongside it.
Central bank interest rates are a fundamental driver of capital flows in FX markets. Higher rates attract yield-seeking capital, which tends to strengthen a currency. Lower rates do the opposite. KairosBias tracks the current effective rate for each of the eight currencies - the overnight market rate that prevails under the policy of the Fed, ECB, Bank of England, Bank of Japan, Bank of Canada, RBA, RBNZ, and SNB. Effective rates track policy decisions closely while reflecting what the market actually pays.
The sub-score is derived by normalising each currency's rate against the full range of G8 rates at any given time. The currency with the highest rate scores near +100, the lowest scores near −100, and the rest are distributed proportionally between those extremes.
Interest rate data updates daily. While rates themselves change infrequently, the relative ranking across the G8 shifts with every central bank decision - and those shifts can meaningfully change the macro backdrop for a currency.
Interest rates carry the second-lowest default weight because they change slowly and are already partially priced into market structure and momentum. Their role in the composite is to provide fundamental grounding - a currency that looks technically strong but carries the lowest rate in the G8 gets a modest headwind applied to its overall score.
Added 2026-08-11. Certain currencies have historically tended to strengthen or weaken in specific calendar months - the yen's August strength through carry-trade unwinds is a well-documented example. KairosBias pulls the ECB's full published history (daily fixings back to 1999-01-04, roughly 27 years) and computes, for each pair and each calendar month, the average month-over-month return and how many of those ~27 years were positive.
A large average return built on a coin-flip hit rate is not a pattern, it is one or two outlier years dragging a mean. So the raw score is multiplied by a consistency factor - zero at a 50/50 split, rising toward one only as the years line up - before it ever reaches the composite. In practice: one pair's August reading had a large average move (a raw score of −84.8) but was positive in only 12 of its 27 years, a near coin flip, so the consistency factor cut it to −9.4. Another pair with a smaller average move but 19 of 27 years agreeing scored a stronger +33.5. The size of the historical move matters less than how reliably it repeated.
Like every other layer, each currency's seasonality score is averaged across its four representative pairs, sign-adjusted for base versus quote. A calendar month needs at least 15 years of history behind a pair before it is trusted at all; below that the layer scores zero for that pair rather than publish a thin sample.
The honest caveat: seasonality is the most data-mineable layer in finance, and unlike COT or rates it is computed from the same ECB series the EMA and momentum layers already read - it is not an independent source in that sense. It entered the model without its own forward test, on the same day the frozen out-of-sample test described below began. The consistency factor is a real guardrail against the most common failure mode, not proof the layer adds anything predictive. It carries the smallest default weight of the five for exactly this reason.
The underlying table refreshes monthly - seasonality by construction does not change day to day - while every other layer keeps its own cadence below.
Once each currency has a composite score, all 28 G8 pairs are scored by divergence - the base currency score minus the quote currency score. A large positive divergence means the base is significantly stronger than the quote, suggesting a potential long opportunity. A large negative divergence suggests the reverse.
Each pair also carries a confidence level, and it measures something different from the divergence: how many of the five layers agree with each other. Every layer is compared between the two currencies. A layer whose two readings are within 10 points of each other has no clear view and abstains rather than being counted either way.
This changed on 2026-08-11. Confidence used to be the size of the divergence, which was already shown twice on the same row, as the number itself and as the bias label. It meant the widest gap was always the "most confident" pair by definition, which is a restatement rather than a second opinion. Agreement is a genuinely separate reading: a pair can have a large divergence and low confidence, when one or two strong layers are outvoting the rest. The rule itself was re-derived the same day seasonality became the fifth layer, keeping the same shape scaled up by one vote.
This is a statement about the evidence, not a forecast. Five layers agreeing means the five sources point the same way today. It does not mean the move is more likely to continue. You can check it yourself: every sub-score is shown on the pair page.
Each currency and pair is assigned a bias label based on its composite or divergence score. These are fixed thresholds applied consistently across the platform.
The Carry Rankings page repackages the interest rate data into a practical tool for identifying carry trade opportunities across all 28 G8 pairs. The carry differential for any pair is simply the base currency's effective rate minus the quote currency's rate.
A positive differential means you earn the rate spread by being long the base currency. A negative differential means you pay it. Pairs are ranked by absolute differential - the highest spreads are at the top regardless of direction.
Confidence levels are assigned by differential size: High (≥ 3%), Medium (≥ 1%), Low (< 1%). These thresholds reflect the practical significance of the carry advantage after accounting for typical swap costs.
Carry is a supportive factor, not a standalone signal. The most reliable setups align carry direction with the composite score direction - a pair where the higher-yielding currency is also technically stronger represents confluent macro and fundamental pressure.
Every trader has a different edge. Some are purely technical and want EMA structure to dominate the score. Others trade with a macro bias and want COT positioning weighted heavily. Pro subscribers can adjust all five layer weights freely - one-click presets (Price-Led, Swing, Position, Carry Hunter) cover the common styles. Each slider moves independently rather than auto-rebalancing the others: the total is free to land anywhere, and the composite is normalised by whatever that total actually is, so a custom set of weights scores the same regardless of whether it happens to sum to 100.
Weights are applied client-side using the stored sub-scores, so there's no server round-trip when you adjust them. Hit Apply Weights and every currency score and pair ranking updates immediately. Your custom weights are saved in your browser and persist across sessions on this device.
In practice the scores move once per trading day. The underlying exchange rate is a single official fixing published once per TARGET working day, so the EMA and momentum layers cannot change faster than that. The scoring job itself runs every 4 hours; re-reading an unchanged fixing six times a day does not make the number newer, which is why the cadence above is described by the data rather than by the job. The data freshness bar at the top of the Pro dashboard shows exactly when each source last updated.
KairosBias modifies this source data: exchange rate cross-rates, exponential moving averages, normalised sub-scores and the composite score are all calculated by KairosBias and are not published by any of the sources above. No raw vendor price feed, chart or vendor indicator is redistributed.
The underlying European Central Bank exchange rate data used by KairosBias may be obtained free of charge from the ECB Data Portal. CFTC data is in the public domain and may be obtained free of charge from the CFTC. What you pay for is the scoring, ranking and presentation layer, not access to the data itself.
This product uses the FRED® API but is not endorsed or certified by the Federal Reserve Bank of St. Louis.
Every change to the layers, weights or transforms above is dated in the methodology changelog.
A tool that scores each currency on its own, rather than as one half of a pair, so you can see which currencies are strong or weak across the whole market. KairosBias scores all 8 major (G8) currencies on a -100 to +100 composite scale.
A weekly report from the US CFTC showing how large institutional traders are positioned in currency futures. Net positioning that is heavily long or short a currency is a widely watched macro signal. KairosBias normalizes COT net positioning into a -100 to +100 score, worth 27% of the default composite.
The arrangement of a currency's exponential moving averages (20, 50, and 200 period). A bullish stack (price above 20 above 50 above 200) scores +100; a fully bearish stack scores -100. This trend-structure layer is 32% of the default composite score.
The difference between the two composite scores in a currency pair: base score minus quote score. A large positive divergence means the base currency is much stronger than the quote, which maps to a bullish bias on the pair.
The directional lean a trader assigns a pair before the session: bullish, bearish, or neutral. KairosBias derives its bias labels from pair divergence between fundamental and positioning-based currency scores, not from chart patterns.
Holding a currency with a higher interest rate against one with a lower rate to collect the rate differential. KairosBias ranks all 28 G8 pairs by that differential and flags where carry direction agrees with the composite score.
The gap between two currencies' effective interest rates. Money tends to flow toward higher yields over time, so persistent differentials are a structural driver of currency trends. This layer is 13% of the default composite.
A currency's historical tendency to strengthen or weaken in a specific calendar month, weighted by how consistently that tendency has held across roughly 27 years of ECB data - a large average move on an inconsistent (near coin-flip) year split scores close to zero. Added 2026-08-11, this layer is 10% of the default composite, the smallest of the five.