A EUR-denominated portfolio that holds positions on the London Stock Exchange, the SIX Swiss Exchange, and Nasdaq Stockholm has a currency problem that does not disappear just because the investor thinks in euros. The GBP-denominated UK equity, the CHF-denominated Swiss bond, and the SEK-denominated Nordic stock all move in EUR terms when their local currencies move against the euro — regardless of whether the underlying securities have changed in price at all.
This creates phantom drift: the appearance of a significant allocation deviation from target that is entirely the product of exchange rate movement, not of any change in the underlying portfolio economics the investor cares about. Triggering a rebalancing event on phantom drift is expensive. It generates transaction costs and potentially realised gains or losses to correct an imbalance that, in the absence of continued FX movement, will mean-revert on its own.
This piece examines how multi-currency portfolios generate both real and phantom drift, how to separate them, and what a currency overlay approach means in the rebalancing context.
How FX creates phantom drift
Start with a concrete example. A EUR-denominated portfolio has a 20% target allocation to UK equities, held on LSE (denomination: GBP), and an 80% allocation to eurozone equities on Xetra (denomination: EUR). On the day the portfolio is last rebalanced, EUR/GBP is 0.860.
Over the following three months, the UK equity position's GBP price is flat — no price movement. The eurozone equity position is also flat. But EUR weakens against GBP: the EUR/GBP rate moves from 0.860 to 0.820. That is a 4.7% depreciation in EUR terms.
The EUR value of the GBP-denominated UK equity position increases by 4.7% purely due to the FX movement. If the UK position started at 20% of portfolio value, it now represents approximately 20% × 1.047 = 20.94% of portfolio value in EUR terms. A 3% drift threshold would not trigger — the position has moved less than 1 percentage point. But if the FX movement continued to EUR/GBP at 0.780 (a 9.3% EUR depreciation), the UK position would represent 21.9% of portfolio value — still under a 5% threshold, but getting close.
Now consider a more extreme scenario: a portfolio with meaningful CHF exposure in a year where EUR/CHF moves sharply. Swiss franc appreciation against the euro has been significant in several periods (post-2015 SNB cap removal, post-2022 energy crisis). A 10% CHF appreciation against EUR translates directly into a 10% relative increase in the EUR value of any CHF-denominated position, independent of price movement in the underlying securities. For a portfolio with a 15% target CHF allocation, a 10% FX move adds 1.5 percentage points of apparent drift immediately.
This phantom drift, if not separated from price-driven drift, causes the rebalancing engine to systematically over-trade on portfolios with significant non-EUR exposure.
Real drift versus phantom drift
Real drift is the component of allocation deviation caused by differential price performance of the underlying securities in their local currencies. If the UK equity position's GBP price rises 8% while the eurozone equity position's EUR price rises 2%, the allocation drift from that differential performance is real — the UK equities have genuinely outperformed, and a rebalancing event that reduces the UK overweight and adds to the eurozone underweight is executing the portfolio's intended risk management.
Phantom drift is the component caused by FX movement. If the UK equities are flat in GBP terms but the EUR value of the GBP position increases because GBP has strengthened against EUR, triggering a rebalance to reduce the UK allocation is selling GBP-denominated assets to buy EUR-denominated assets because the EUR has weakened — not because UK equities have outperformed. If the EUR subsequently recovers, the rebalance was unnecessary and the portfolio ends up underweight UK equities relative to its target for no fundamental reason.
The separation is straightforward mathematically but requires that the engine track two components of position value change: local-currency price return and FX return.
For each non-base-currency position, drift in base-currency terms can be decomposed as:
Δ weight (EUR) = Δ weight (local price) + Δ weight (FX) + interaction term
The interaction term is typically small for modest FX moves. For the purpose of triggering rebalancing decisions, treating the decomposition as additive is a reasonable approximation. The engine compares the local-price-driven drift component to the drift threshold; the FX-driven component is treated as a separate signal that may or may not warrant action depending on the platform's currency overlay policy.
The currency overlay question
Currency overlay is a portfolio management approach that separates the currency exposure decision from the underlying asset allocation decision. In its institutional form, it involves actively managing FX positions (typically via forwards or FX swaps) independently of the underlying portfolio. In the retail rebalancing context, "currency overlay logic" refers to a more modest goal: preventing the FX-driven component of drift from triggering unnecessary rebalancing events.
There are three basic approaches:
Approach 1: No FX separation (naive rebalancing)
The engine computes total drift in the portfolio's base currency and triggers rebalancing on the total drift signal, regardless of whether the drift is price-driven or FX-driven. Simple to implement. Systematically over-triggers rebalancing on portfolios with multi-currency exposure. In a volatile FX year (like 2022, when EUR/USD moved more than 15%), a portfolio with 30% USD-denominated exposure running a 3% drift threshold could trigger rebalancing 6–8 times on FX movement alone, incurring 50–120bps in unnecessary transaction costs.
Approach 2: FX-adjusted drift triggering
The engine decomposes drift into local-price-driven and FX-driven components. Rebalancing is triggered only on the local-price-driven component. The FX-driven component is tracked and used for informational purposes (the portfolio's FX exposure is visible to the platform and the investor) but does not independently trigger rebalancing.
This is the fx_overlay: true mode in Portfolwright's API. It is the appropriate default for EUR-denominated portfolios with meaningful non-EUR equity exposure — which describes the majority of European retail model portfolios, since most broad market ETFs include significant UK, Swiss, and Nordic components.
Approach 3: FX-triggered rebalancing with cost-benefit gate
The engine uses the full drift signal (including FX) but applies a cost-benefit gate: a rebalancing event is triggered on FX-driven drift only if the estimated FX transaction cost to execute the rebalance is less than the expected reduction in portfolio risk from returning to target. This is more sophisticated than Approach 2 but requires a model for the expected FX return mean-reversion — essentially a view on whether the FX move is likely to partially reverse.
For most retail platforms, Approach 3 is over-engineered. The implementation complexity is high and the incremental benefit over Approach 2 is modest. Approach 2, consistently applied, is the right solution.
FX cost in the rebalancing plan
Separating FX drift from price drift addresses the triggering problem. But even when a rebalancing event is correctly triggered on real price-driven drift, the execution may involve cross-currency trades that carry FX costs.
A EUR-denominated portfolio rebalancing away from a GBP-denominated LSE position (reducing UK equity exposure) involves selling GBP-denominated shares and converting the GBP proceeds back to EUR. The cost of this conversion — typically 20–50bps on a retail FX conversion — is a real cost that must appear in the rebalancing plan's cost estimate.
Platforms often omit FX conversion costs from their rebalancing cost estimates because the FX leg is handled by the custody or brokerage layer separately from the equity trade. This produces cost estimates that systematically understate the true cost of rebalancing multi-currency portfolios. When the actual cost of a rebalancing event (including FX) is 30–40bps but the estimated cost was 12bps (excluding FX), the platform's cost budget — set to prevent over-trading on expensive rebalances — fails to fire on events that should have been deferred.
The correct approach is to include an FX cost estimate in the rebalancing plan for every non-base-currency trade. For a EUR-denominated portfolio, this means estimating the EUR/GBP, EUR/CHF, or EUR/SEK conversion cost at current market spreads and adding it to the per-trade cost estimate. The aggregate FX cost component should be visible in the rebalancing plan response and counted against any cost_budget parameter.
Currency overlay in practice: what the API needs to know
To implement currency overlay logic correctly, the rebalancing engine needs the following inputs:
- Position denomination currency per ISIN: Not just the exchange (XLON), but the currency in which the specific security is denominated (GBP for most LSE equities, USD for some LSE-listed American depositary receipts)
- Portfolio base currency: The currency in which target weights are expressed and performance is measured (typically EUR for European retail)
- FX rate source: Intraday or end-of-day FX rates for all relevant currency pairs, with a known timestamp for the drift calculation. The ECB's daily reference rates are a common source for EUR-denominated portfolios; for intraday drift monitoring, live market FX feeds are required
- FX drift versus price drift decomposition: The engine must store the previous rebalancing date's FX rates and use them as the reference point for computing the FX component of drift since last rebalance
One operational detail that frequently causes bugs: the FX rate used to compute the drift calculation must be consistent with the FX rate used to compute the cost estimates in the rebalancing plan. If the drift calculation uses end-of-day ECB rates and the cost estimate uses live market rates, the two calculations can disagree on whether a threshold has been breached, producing plans that appear contradictory when reviewed.
A worked example with EUR/GBP and EUR/CHF exposure
Portfolio base currency: EUR. Target allocation: 60% Xetra eurozone equities, 25% LSE UK equities (GBP), 15% SIX Swiss equities (CHF). Drift threshold: 4% absolute.
Month 1: EUR/GBP moves from 0.860 to 0.835 (EUR weakens 3%). EUR/CHF moves from 0.930 to 0.910 (EUR weakens 2.2%). Underlying security prices are flat in local currency terms.
Without FX overlay: The GBP position's EUR value has increased by 3%, and the CHF position's EUR value has increased by 2.2%. The GBP position now represents approximately 25.75% of portfolio value, and the CHF position represents 15.33%. Neither breaches the 4% threshold individually, but the combined FX-driven drift has shifted the portfolio's currency exposure in a way that the investor has not asked for.
With FX overlay enabled: Neither position has moved in local-currency price terms, so neither triggers a rebalancing event. The FX drift is logged as informational. The engine notes that 1.08% of current drift is attributable to EUR/GBP and EUR/CHF movement.
Month 3: UK equities (in GBP) have risen 6% in addition to the continued EUR/GBP move. The GBP position now represents 28% of EUR portfolio value — 3 percentage points above target. The FX-decomposition shows: 1.5% of drift from price movement, 1.5% from continued EUR/GBP movement.
With FX overlay, the price-driven component (1.5%) is below the 4% threshold. The engine does not trigger a rebalance. The FX-driven component has grown but is tracked separately.
By month 4, the UK equity price appreciation has added another 3% of local-currency return. Total price-driven drift is now 4.5% — above the threshold. The engine triggers a rebalancing event. The rebalancing plan includes the FX conversion cost of selling GBP-denominated assets, and the total plan cost estimate reflects the full cost.
The FX overlay has prevented two unnecessary rebalancing events (months 1 and 3) that would have each cost approximately 10–15bps, while still triggering the correct rebalancing event when price-driven drift genuinely warranted it.
Nordic currencies: a specific challenge for European platforms
EUR/GBP and EUR/CHF are widely understood and liquid FX pairs with deep institutional market-making. EUR/SEK, EUR/NOK, and EUR/DKK are less liquid outside Scandinavian business hours and can carry wider spreads at retail conversion volumes. For platforms that include Nasdaq Nordic-listed ETFs — via XSTO, XCSE, or XHEL — the FX conversion cost on SEK- or DKK-denominated positions can run materially higher than the equivalent GBP conversion, even on similarly sized trades.
Copenhagen-listed ETFs (XCSE, DKK) present a particular case: the Danish krone has been in a managed float against the euro since Denmark's ERM II membership, maintaining a peg within ±2.25% of 7.46038 DKK/EUR. The FX conversion cost on DKK positions is therefore much lower than on freely floating currencies. An fx_overlay implementation that treats DKK the same as SEK will over-estimate conversion costs for XCSE positions and may suppress rebalancing events that should trigger on price-driven drift.
The correct treatment is to apply currency-pair-specific FX cost parameters, not a single retail spread estimate across all non-EUR currencies. The DKK peg makes EUR/DKK conversion close to negligible; EUR/SEK and EUR/NOK conversions carry meaningful retail spreads that need explicit cost accounting.
When currency overlay doesn't apply
Currency overlay logic is appropriate for portfolios where the currency exposure is an incidental consequence of holding foreign securities, and where the investor's return expectations are based on local-currency performance of those securities rather than on EUR/GBP or EUR/CHF movements.
It is not appropriate for portfolios where currency exposure is intentional — for example, a currency-diversified portfolio where the investor is explicitly seeking GBP and CHF exposure as part of the risk profile. In that case, FX movements are real drift, not phantom drift, and should trigger rebalancing.
The correct application of currency overlay depends on the product design. The engine should expose the choice as a configuration parameter — fx_overlay: true or false — with the platform making the appropriate choice per product, not the engine deciding for it.
We are not saying that all currency exposure in a European retail portfolio is incidental or unintended. We are saying that for the majority of passive index-tracking model portfolios sold to European retail investors, the currency exposure is a byproduct of index composition, not a strategic bet, and treating FX drift as phantom drift is the correct default. Platforms offering explicit currency-allocation products are a different case.
Phantom drift is a real cost. Separating it from real drift is not complicated, but it requires the infrastructure to be built for it. The platforms that account for currency overlay in their rebalancing engines will run systematically lower transaction costs on multi-currency portfolios than those that don't.