Methodology/Gold and FX
Methodology

Was gold up, or was your currency down?

From 10 July 2025 to 10 July 2026, USD gold rose 23.93%. The same gold position gained 26.95% in EUR, 37.97% in IDR, and 45.50% in TRY after the local-currency FX leg was included.

MMexchangerate.dev·Jul 13, 2026·7 min read

For an investor measuring gold in a currency quoted per USD, local gold return is (1 + gold USD return) × (1 + USD/local FX return) − 1. The final term matters: adding the two percentage moves is an approximation, not the exact result. This comparison uses settled gold bars and non-forward-filled FX observations on the same two business dates.

Key points
Over the selected year, USD gold returned 23.93%; the local-currency results shown here range from 26.95% in EUR to 45.50% in TRY.
Local-currency gold combines a USD gold move, an FX move, and a small interaction term.
The formula is an accounting identity. It does not establish what caused either market to move.
Both endpoint observations must be settled or published for the selected business date.
Forward-filled FX observations are excluded from the research comparison.

The question the series answers

A USD gold chart answers one useful question. It does not answer what a local investor experienced. When gold is measured in IDR, INR, JPY, EUR, or TRY, the dollar price and the dollar’s exchange rate against that currency both enter the result.

That does not mean a rising local gold price has one simple cause. The calculation only separates the observable price and FX components over a stated interval. It makes no forecast and no claim about what investors should do.

The exact formula

Let g be the USD gold return and f be the return in the FX rate expressed as local currency per USD. Let L be the local-currency gold return. Then:

formula · local-currency gold returncopy
g = gold_usd_end / gold_usd_start - 1
f = usd_to_local_end / usd_to_local_start - 1
L = (gold_usd_end × usd_to_local_end) / (gold_usd_start × usd_to_local_start) - 1

L = g + f + (g × f)

The last expression is useful for explanation. g is the USD gold component, f is the currency component, and g × f is their interaction. It is why simply adding two percentage changes is not exact.

The validated comparison period

Validated shared business dates
10 July 2025 and 10 July 2026 both have a settled daily XAU/USD close and non-forward-filled USD-base FX observations for EUR, JPY, IDR, INR, and TRY. Weekend and still-forming dates were excluded.

Selected period: 2025-07-10 through 2026-07-10. Gold close: 3323.81 to 4119.172 USD per troy ounce. Each FX rate is local currency per USD. All display percentages are rounded to two decimal places; calculations retain full precision.

CurrencyUSD gold / FX componentsLocal gold return
EUR23.93% + 2.44% + 0.58%26.95%
JPY23.93% + 10.63% + 2.54%37.10%
IDR23.93% + 11.33% + 2.71%37.97%
INR23.93% + 11.16% + 2.67%37.76%
TRY23.93% + 17.41% + 4.17%45.50%

The source observations

The USD gold leg comes from settled daily XAU-USD-SPOT bars. The FX leg comes from dated USD-base observations for EUR, JPY, IDR, INR, and TRY. Both FX responses were source: ecb_daily, had is_forward_filled: false, and had data_updated_at equal to the requested date. These are indicative reference rates, not settlement or execution prices.

requests · exact inputs to preservecopy
GET https://api.goldprice.dev/v1/bars?symbol=XAU-USD-SPOT&interval=1d&from=2025-07-10T00:00:00Z&to=2026-07-10T00:00:00Z&limit=400

GET https://api.exchangerate.dev/v1/2025-07-10/USD?symbols=EUR,JPY,IDR,INR,TRY
GET https://api.exchangerate.dev/v1/2026-07-10/USD?symbols=EUR,JPY,IDR,INR,TRY

A date is valid only when the gold bar is settled and the FX observation is not forward-filled. If a calendar anniversary does not satisfy both conditions, both comparison dates move backward together to the nearest shared business-date pair. That prevents one series from quietly borrowing a different day than the other.

Reproduce the calculation

python · calculate and verify each currencycopy
from decimal import Decimal

gold_start = Decimal("3323.81")
gold_end = Decimal("4119.172")
fx_start = Decimal("16237.25")  # IDR per USD on 2025-07-10
fx_end = Decimal("18076.55")    # IDR per USD on 2026-07-10

g = gold_end / gold_start - 1
f = fx_end / fx_start - 1
local_return = (gold_end * fx_end) / (gold_start * fx_start) - 1
interaction = g * f

assert local_return == g + f + interaction

The assertion is a useful publication check. A non-zero difference after exact-decimal arithmetic usually means the rate orientation was reversed, a date was misaligned, or an intermediate value was rounded too early.

What this does not measure

  • Retail dealer premiums, taxes, storage costs, spreads, or delivery costs.
  • A tradable execution price or settlement price. FX observations are indicative reference data.
  • A causal explanation, forecast, or investment recommendation.

For application code that needs a longer local-currency series, see the historical FX range guide and the goldprice.dev bars reference. The key is not the multiplication. It is preserving the two observations that make the multiplication historically honest.

MM
exchangerate.dev
Methodology notes for developers working with historical FX data.

Keep reading

GuideHistorical FX rates and time series in one callRead GuideHow to backfill FX rates without look-ahead biasRead GuideBacktest gold returns in your home currencyRead