> ## Content Index
> Fetch the complete content index at: https://www.incomestead.com/llms.txt
> Use this file to discover other available public pages before exploring further.

# How to Track a Portfolio in Two Currencies: The Exchange Rate Moves Your Weights
- URL: https://www.incomestead.com/blog/track-a-portfolio-in-two-currencies/
- Published: 2026-10-08T14:29:57.000Z
- Updated: 2026-10-08T14:29:57.000Z
- Description: A move in the exchange rate, with nothing you own changing price, moves your allocation. Here is how to track it so you can see it, and reproduce it later.
- Author: Stefano Starkel
- Tags: The Stack, #stage-2

How to track a portfolio in two currencies comes down to three rules. Value everything in one base currency. Convert each non-base position at the rate your broker reports for that position, on the same statement as its price. And when a rate is missing, carry the last known one forward and mark it, rather than quietly fetching another. Almost every guide covers the first rule. The other two matter more than they look, because an exchange rate does not just change what your book is worth. On a book of $1,000,000 with a quarter of it priced in euros, a rate move alone, with every price unchanged, moved that Layer's weight by 2.47 points in the example below.

TL;DR

- Pick one base currency and convert every other position into it at the rate your broker reports for that position, dated to the same statement as the price. A rate fetched separately, "live", makes last week's reading impossible to reproduce.
- An exchange rate is an input to your allocation, not a background fact. A rate move alone shifts a Layer's weight against its target; the same price move can read in-band, out of band, or back on target depending on the rate.
- Record the rate beside the positions it priced. That is the only way to tell price drift from rate drift after the fact. A missing rate is carried forward and flagged, never silently replaced.

On this page

- [Which exchange rate should you use to track a portfolio?](#which-exchange-rate-should-you-use-to-track-a-portfolio)
- [How can an exchange rate move your allocation when nothing changed price?](#how-can-an-exchange-rate-move-your-allocation-when-nothing-changed-price)
- [Is it price drift or rate drift?](#is-it-price-drift-or-rate-drift)
- [What do you do when a rate is missing?](#what-do-you-do-when-a-rate-is-missing)
- [What this method does not tell you](#what-this-method-does-not-tell-you)
- [Frequently asked questions](#frequently-asked-questions)

## Which exchange rate should you use to track a portfolio?

The one your broker used, for that position, on that statement. Not a rate you look up afterwards, and not one rate applied to the whole book from a different source.

Start with the base currency, because everything else hangs off it. It is the one currency every number in your governance is expressed in: your total, each Layer's weight, your targets and the bands around them. For most readers it is the currency you spend and the currency your broker account is denominated in. Choose it once and do not change it casually. A change of base re-expresses your entire history, and readings taken before and after the change are no longer the same measurement.

Then the rate. Interactive Brokers, which I use, publishes in its open-positions statement a field called FX Rate to Base, which it defines as *"the conversion rate from asset currency to base currency,"* alongside a Report Date, *"the date of the statement,"* and a Mark Price, *"the closing price of the position as of the report date"* ([IBKR Reporting Reference, "Open Positions – Flex Statement"](https://www.ibkrguides.com/reportingreference/reportguide/open%20positionsfq.htm?ref=incomestead.com)). Other brokers name it differently, and I can only vouch for what I see in my own exports. The principle travels: the price and the rate that converts it should come from the same statement, as of the same date.

Here is why that matters more than it sounds. A common recommendation in multi-currency tracking guides is to convert at a live or daily rate. That answers the question *"what is my book worth right now?"* well. It answers *"what did my book read last Tuesday, and why?"* badly. If your tracker re-converts Tuesday's positions on Wednesday at Wednesday's rate, instead of storing the rate each reading used, the same holdings produce a different total and different weights, and you have no record of the number you actually governed on. A governance reading has to be reproducible: same inputs, same answer, next week and next year.

> A live rate tells you what the book is worth now. A recorded rate tells you what you decided on, and why.

So the rule I hold my own book to is this: take the broker's per-position rate from the same export as the prices, use no outside rate source at all, and keep the rate with the reading it priced. That is a choice, not the only defensible one. But it is the one that lets a past week be read back exactly as it was read the first time.

If you track in a spreadsheet, this is one of the places it starts to strain. My [comparison of spreadsheets and tracking software](https://www.incomestead.com/blog/portfolio-tracking-spreadsheet-vs-software/) names holding more than one currency as a threshold, in a single line: which rate, sourced when, applied to which leg. This post is the long answer to that line.

## How can an exchange rate move your allocation when nothing changed price?

Because a weight is a ratio, and the rate sits on one side of it. Take an illustrative book, not mine: $1,000,000, base currency US dollars, no margin loan. One Layer, call it Pillars, holds a Portfolio of European blue chips priced in euros, €227,273 of them. At a rate of 1.10 dollars per euro that is $250,000, exactly the Layer's 25% target. Everything else in the book, $750,000, is priced in dollars and stays flat throughout. The rates here are round hypotheticals I chose to make the arithmetic visible. They are not a forecast and not a claim about any real period.

LAYERJOB

Cryptoasymmetric upside

Short-Horizon Growthtactical compounding

Long-Horizon Growthpatient compounding

Income Enginecash it pays you

Precious Metalsinsurance

Pillarsdurable blue-chip

Bedrockthe foundation

The Incomestead Stack — Layers by job, foundation at the base. Cash sits alongside as dry powder. Weights are yours to set; the Stack is the structure, not a prescription.

A currency is not a Layer. Layers in the [Incomestead Stack](https://www.incomestead.com/blog/strategy-allocation-incomestead-stack/) are sorted by the job the money does, and a euro-priced Portfolio sits inside whichever Layer its job puts it in. Here that is Pillars. The currency is a property of the holding, and the weight is a property of the Layer. The point of this example is that the first can move the second.

Now suppose the euro strengthens from 1.10 to 1.25 dollars, a 13.6% move, and not one share changes price. The euros are the same €227,273\. Converted, they are now $284,091, and the book is $1,034,091\. The Layer reads 27.47%. It has drifted 2.47 points above target, and nothing you own did anything.

Then run the same exercise across the cases that actually happen, where prices and rates both move. Under my own policy most Layers carry a band proportional to their target: the lower edge is 70% of the target and the upper edge 130%. For a 25% target that puts the band at 17.50% to 32.50%. The table holds the dollar side flat and moves only the euro Layer.

| Case                    | Euro prices | Rate ($ per €) | Layer in $ | Layer weight | Against the 17.50%–32.50% band |
| ----------------------- | ----------- | -------------- | ---------- | ------------ | ------------------------------ |
| Start                   | unchanged   | 1.10           | $250,000   | 25.00%       | on target                      |
| Rate only               | unchanged   | 1.25           | $284,091   | 27.47%       | inside, drifting up            |
| Price only              | up 30%      | 1.10           | $325,000   | 30.23%       | inside, near the upper edge    |
| Price and rate together | up 30%      | 1.25           | $369,318   | 32.99%       | above the upper edge           |
| Price up, rate down     | up 30%      | 0.85           | $251,136   | 25.09%       | reads as on target             |

The bottom three rows share the same euro price move, up 30%, and produce three different readings: comfortably inside the band, through its upper edge, and back on target. The difference between them is entirely the rate. The two components of a foreign holding's return in your own currency are not added; as the CFA Institute's introduction to currency management puts it, *"these two components of the domestic-currency return are multiplicative"* ([CFA Institute, "Currency Management: An Introduction"](https://www.cfainstitute.org/insights/professional-learning/refresher-readings/2026/currency-management-introduction?ref=incomestead.com)). In the fourth row the euro Layer's dollar value rose 47.7%, because the growth factors multiply (1.30 × 1.136 = 1.477), which is more than the 43.6% you would get by adding the two moves.

## Is it price drift or rate drift?

Usually some of each, and the reading alone will not tell you which. My explanation of [what allocation drift is and how to measure it](https://www.incomestead.com/blog/allocation-drift/) describes drift as different parts of the book growing at different rates. That is true in your base currency. What it leaves unsaid, because most books never need it said, is that for a non-base holding "growing" has two sources, and only one of them is the holding.

Look at the fourth row again. At 32.99% the Layer is above its 32.50% upper edge. On the price move alone it would have read 30.23%, inside the band. The rate is what carried it through. My rule does not ask why a Layer is overweight before it acts: under the two-week persistence rule, a breach must persist across 2 consecutive weekly snapshots before it drives an action, and for an overweight Layer my rule recommends trimming back to the midpoint between the target and the breached edge, here 28.75%. The rule reads the weight, and the weight is real whatever caused it.

But you are the one who reads the recommendation, and the cause changes what you learn from it. A Layer that breached because its holdings outgrew the rest of the book is telling you something about those holdings. A Layer that breached because the currency moved is telling you something about your exposure to that currency. If the rate was not recorded with the positions, you cannot separate the two after the fact, and you will tell yourself whichever story you prefer.

> The rule acts on the weight. You learn from the cause. Only a recorded rate lets you see the cause.

The last row is the quieter danger. The euro holdings rose 30% in their own currency, to €295,455, and the rate fell from 1.10 to 0.85, a 22.7% move. The Layer reads 25.09%, close enough to target that nobody would look twice. Nothing is wrong with that reading as a weight. But your book now holds 30% more euro-priced assets than it did, and a later move back in the rate would show up as drift that seems to come from nowhere. A reading that records only the dollar total hides that. A reading that records quantity, local price and rate does not.

In practice the decomposition needs no special tool. For each non-base position, keep the local value and the rate beside the converted value, week by week. The change in the converted value splits into a part from the local price, a part from the rate, and an interaction term from both moving at once. How you assign that last piece is a convention; pick one and use it every week. None of it can be done afterwards if the rate was never recorded.

## What do you do when a rate is missing?

Carry the last recorded rate forward, use it, and mark the reading as carrying a stale rate. Do not drop the position, and do not quietly substitute a rate from somewhere else.

Each of the alternatives does more damage than it looks. Dropping the position removes a whole Layer's holding from the total and moves every other weight with it, so one missing number becomes a wrong reading everywhere. Substituting an outside rate mixes two sources in one snapshot. The reading still looks complete, and it can no longer be reproduced from the statement alone. Carrying the last rate forward is wrong by however far the rate has moved since, and you do not know which way. But it is stale from a known date, and the flag tells you to treat that Layer's weight as approximate until the next statement fills it in.

> A carried-forward rate is stale from a known date, and the next statement corrects it. A substituted rate cannot be traced back to any statement at all.

Take the rate-only case above and say the following week's statement carries no euro rate. The reading reuses 1.25, the Layer still shows 27.47% on unchanged prices, and it is marked as carrying a rate from the prior statement's date. The number is usable; the mark tells you how far to trust it.

This is the same discipline I set out for the export as a whole in [what an IBKR Flex Query actually exports](https://www.incomestead.com/blog/what-an-ibkr-flex-query-exports/): a missing field is an event to record, not a default to fill. The rate is simply the field where getting it wrong is hardest to notice, because the converted number still looks like a number.

## What this method does not tell you

It does not tell you whether to hedge. Hedging is a separate decision with its own costs and trade-offs, and the CFA Institute reading cited above notes there is no single correct approach to currency strategy. This post makes no recommendation either way. It does not tell you where any currency is going, and nothing in the example is a view on the euro or the dollar. And it says nothing about how currency gains or losses are taxed where you live. That is a question for a tax professional.

It also leaves one thing to another post. If you carry a margin loan, a non-base holding moves the denominator of your margin utilization along with your weights, and the convention for reading that number is set out in [how I use margin safely](https://www.incomestead.com/blog/using-margin-safely/). I deliberately kept the example here unlevered so the currency effect stands alone.

What the method does give you is a weekly reading you can trust and repeat: one base currency, the broker's own rate for each position on the same statement, the rate stored with the snapshot, and a flag on anything carried forward. That is enough to see a currency move for what it is, before it turns into a decision you did not know you were making.

Do this next

Convert each non-base holding at your latest statement's own rate, add it into its Layer, and then check the weights. The Allocation Reality Check lets you put your real weights next to the targets you actually committed to — nothing leaves the page. It does not convert currencies itself, so bring the converted weights with you, and note the statement date and the rates you used beside your answer.

[Run the Allocation Reality Check →](https://www.incomestead.com/blog/allocation-drift/#tool-allocation-reality-check) and see each Layer against your own band.

## Frequently asked questions

### How do I track a portfolio in two currencies?

Pick one base currency and express every total, weight and target in it. Convert each non-base position at the exchange rate your broker reports for that position on the same statement as its price, and store that rate with the reading. If a rate is missing, carry the last recorded one forward and flag the reading rather than dropping the position or fetching a rate from another source.

### Should I use live exchange rates for my portfolio tracker?

A live rate is fine for answering what the book is worth right now. For the reading you make decisions on, use the rate from the same statement as the prices and keep it. A tracker that re-converts past holdings at today's rate, instead of storing each reading's rate, changes last week's weights after the fact, and you can no longer reproduce the number you acted on.

### Can a currency move cause allocation drift on its own?

Yes. Allocation drift is the gap between the weight a part of your book is meant to hold and the weight it actually holds. For a holding priced in another currency, a change in the exchange rate changes its value in your base currency even when its own price is unchanged, so its weight moves. In an illustrative $1,000,000 book with a quarter priced in euros, a rate move from 1.10 to 1.25 moved that quarter from 25.00% to 27.47% with no price change at all.

### What should I do if my broker statement is missing an exchange rate?

Use the last rate you recorded for that currency, carry it forward, and mark the reading as approximate for the part of the book it affects. Do not drop the position, which would shift every other weight, and do not mix in a rate from another source, which makes the reading impossible to reproduce from the statement. The next statement that carries a rate replaces the carried one.

By **Stefano Starkel**

This is education, not personalized advice. I run a leveraged, income-oriented book myself and write from that experience; I am not a licensed adviser. The book in this post is illustrative and its exchange rates are round hypotheticals, not forecasts. Nothing here is a recommendation to hedge or not to hedge, and the tax treatment of currency gains and losses is a question for a tax professional.

Incomestead recommends. You decide.