How is the US Dollar Index (DXY) calculated?
Quick answer
The DXY is a weighted geometric mean of six dollar exchange rates: 50.14348112 × EURUSD^-0.576 × USDJPY^0.136 × GBPUSD^-0.119 × USDCAD^0.091 × USDSEK^0.042 × USDCHF^0.036. The exponents are the weights (euro 57.6%, yen 13.6%, pound 11.9%, Canadian dollar 9.1%, krona 4.2%, Swiss franc 3.6%), negative where the dollar is the quote currency, and the constant sets March 1973 to 100. Rebuilt from Federal Reserve noon rates, it gave 101.76 on 23 October 2026 against ICE's 101.81 close.
The US Dollar Index (DXY) is a weighted geometric mean of six exchange rates against the dollar: USDX = 50.14348112 × EURUSD^-0.576 × USDJPY^0.136 × GBPUSD^-0.119 × USDCAD^0.091 × USDSEK^0.042 × USDCHF^0.036. The exponents are the weights, the sign is negative wherever the dollar is the quote currency, and the constant scales the index to 100 at its March 1973 base.
That formula is easy to find. Proof that it works, and what it implies, is harder to find. We rebuilt the index from the Federal Reserve's published exchange rates. It lands within 0.09 index points of ICE's close on an average day, and it shows that the euro drove about three quarters of the dollar's rise over the past year.
The DXY formula, from the source
ICE Futures U.S. compiles and publishes the index, and its USDX FAQ gives the formula above with these weights: euro 57.6%, Japanese yen 13.6%, British pound 11.9%, Canadian dollar 9.1%, Swedish krona 4.2%, Swiss franc 3.6%. The Federal Reserve originally built the index in 1973. ICE has run it since futures on it listed in 1985. Three details matter when you implement it.
The sign follows the quote convention. EURUSD and GBPUSD are quoted as dollars per euro or per pound, so a rising quote means a weaker dollar, and those two terms carry negative exponents. USDJPY, USDCAD, USDSEK and USDCHF are quoted as foreign currency per dollar, so they carry positive exponents. If your data source quotes a pair the other way round, invert the rate or flip the sign. Never both.
It is geometric, not arithmetic. Each rate is raised to its weight and the results are multiplied. That makes the index behave consistently in percentage terms, and it lets you split any move into exact currency contributions, which we do below.
The basket is fixed. ICE's FAQ says there are no scheduled rebalancings, and the index has been adjusted once, when the euro replaced five of the original ten currencies. The weights are a 1970s snapshot, which is why there is no Chinese yuan or Mexican peso in it.
Rebuilding the DXY in Python
The Federal Reserve's H.10 release publishes daily rates for all six currencies. They are noon buying rates in New York, certified by the New York Fed, and the H.10 historical pages quote them in exactly the conventions the formula uses: dollars per euro and per pound, units of currency per dollar for the other four. No pair needs inverting.
import numpy as np
import pandas as pd
WEIGHTS = {"EURUSD": -0.576, "USDJPY": 0.136, "GBPUSD": -0.119,
"USDCAD": 0.091, "USDSEK": 0.042, "USDCHF": 0.036}
def dxy(fx: pd.DataFrame) -> pd.Series:
"""fx: one column per pair, quoted the way the WEIGHTS keys read."""
log_index = np.log(50.14348112) + sum(w * np.log(fx[p]) for p, w in WEIGHTS.items())
return np.exp(log_index)On 23 October 2026 the H.10 rates were EURUSD 1.1199, USDJPY 156.87, GBPUSD 1.3375, USDCAD 1.3993, USDSEK 9.9237 and USDCHF 0.8248. The formula gives 101.760. ICE's close that day, as distributed by market-data vendors, was 101.81.
How close is the rebuild to the official index?
Over the 249 trading days from 24 October 2025 to 23 October 2026, the rebuilt index differed from ICE's daily close by 0.09 points on average, and by 0.64 points at most. The two levels correlate at 0.994.
Daily changes correlate at only 0.82, and the cause is timing. H.10 rates are struck at noon in New York. ICE calculates the index roughly every 15 seconds from the mid-point of the best bid and offer in each currency, and the daily close comes hours after noon. Whatever the dollar does in the afternoon shows up in ICE's daily change and not in yours.
So the formula is right, and a noon-rate rebuild is fine for charting levels and trends over weeks and months. Do not use it to explain a single day's move, and do not use it where you need the official print, such as marking a DX futures position.
Which currency moved the dollar index?
Because the index is a product of powers, its log change is a weighted sum of the log changes in the six rates: ln(DXY_end / DXY_start) = Σ w × ln(rate_end / rate_start), using the signed weights from the formula. Each term is that currency's exact contribution, and the terms add up to the total with nothing left over.
def contributions(fx: pd.DataFrame, start, end) -> pd.Series:
"""Each currency's contribution to the DXY log change, in percentage points."""
return pd.Series({p: 100 * w * np.log(fx.loc[end, p] / fx.loc[start, p])
for p, w in WEIGHTS.items()})From 23 October 2025 to 23 October 2026 the rebuilt index rose from 98.984 to 101.760, a log change of 2.77% (2.80% as a simple percentage). Here is how that splits:
Currency Rate, 23 Oct 2025 -> 23 Oct 2026 Contribution Share
Euro EURUSD 1.1612 -> 1.1199 +2.09 pp 75%
Japanese yen USDJPY 152.72 -> 156.87 +0.37 pp 13%
Swedish krona USDSEK 9.3930 -> 9.9237 +0.23 pp 8%
Swiss franc USDCHF 0.7956 -> 0.8248 +0.13 pp 5%
Canadian dollar USDCAD 1.3991 -> 1.3993 +0.00 pp 0%
British pound GBPUSD 1.3323 -> 1.3375 -0.05 pp -2%
Total +2.77 pp 100%The euro's weight is 57.6%, but its share of the move was 75%, because the euro was also among the currencies that fell furthest against the dollar. Year to date the effect is stronger: from 2 January to 23 October 2026 the rebuilt index rose 3.44%, the euro accounts for 79% of that, and the yen, which ended almost where it started the year, contributed almost nothing.
That is the practical point. A headline saying the dollar rose 2.8% is mostly a statement about EURUSD. If you care about the dollar against the yen, the Canadian dollar or the Australian dollar (which is not in the index at all), the DXY tells you little. A currency strength meter weights every major currency equally and gives a very different answer for the same year: a dollar score of +0.38%.
How to chart the dollar index honestly
Plot the level as a line and label its source: "DXY (ICE)" for the official index, "DXY rebuilt from Fed H.10 noon rates" for a replication. Do not splice the two into one series.
For any period that matters, put the contributions next to the line as a waterfall, the same chart shape used in performance attribution. It answers the question readers actually have, "was that the dollar or the euro?", and because the decomposition is exact it needs no caveats.
If your readers think in trade terms rather than market convention, the H.10 release also publishes the Fed's own nominal dollar indexes and their currency weights. Showing one of those beside the DXY makes the euro bias visible at a glance.
[QUADESTO-EMBED: DXY rebuilt from Fed H.10 noon rates as a line, with a contribution waterfall by currency for a selectable window]
Where Quadesto fits
The rebuild is six exchange rates and one line of arithmetic. Keeping it current, labeled and decomposed every week is where a spreadsheet usually gives up. Quadesto takes series like the H.10 rates, applies the calculation, and gives you a chart you can share as a link, embed in a newsletter or download as an image. Build your first chart free.