Portfolio Manager

Forex Impact on Our Portfolio β€” The EUR/USD Move Cost Us €47K

32% of Feb returns were FX, not investment performanceFinance & Trading6 min read

Key Takeaway

Our AI agent tracks daily FX impact on a multi-currency portfolio, separating investment returns from currency effects β€” last month, a 2.3% EUR/USD drop added €47K to our USD positions in EUR terms.

The Problem

I hold assets in four currencies. US equities in USD. Japanese stocks in JPY. French equities in EUR. Some crypto denominated in USD, some DeFi yields in stablecoins. My reporting currency is EUR.

Here's what most portfolio trackers don't tell you: when your NVDA position goes up 5% but EUR/USD drops 2%, your EUR-denominated return isn't 5%. It's roughly 7%. The investment made money, and the currency made money. But the reverse is also true β€” your gains can quietly evaporate if the currency moves against you.

At the board level, this matters enormously. "The portfolio returned 12% this quarter" sounds great until someone asks "How much of that was currency?" If 4% was EUR weakness, the actual investment performance was 8%. Boards deserve to know the difference.

I wasn't tracking this. Nobody was. The brokerage shows returns in the local currency of each position. Converting everything to EUR and decomposing the return into investment vs. currency components β€” that's a calculation nobody does manually. Too many positions. Too many daily rates. Too much spreadsheet gymnastics.

The Solution

An Alpha Vantage-powered FX tracker combined with our portfolio watcher. The agent pulls daily exchange rates for every currency in the portfolio (EUR/USD, EUR/JPY, EUR/GBP), calculates the currency impact on each position, and produces a monthly report that separates investment returns from FX effects.

It also runs a hedging analysis: given the current FX exposure, should we hedge? What's the cost of hedging (forward premium)? Is the expected FX move large enough to justify the hedge cost?

The Process

FX monitoring config:

yamlShow code
# fx-impact-tracker config
schedule: "0 7 * * *"  # daily at 7AM UTC
report_schedule: "0 7 1 * *"  # monthly report on 1st
base_currency: EUR

currency_pairs:
  - pair: EUR/USD
    portfolio_exposure: 1250000  # USD-denominated assets in EUR
  - pair: EUR/JPY
    portfolio_exposure: 380000   # JPY-denominated assets in EUR
  - pair: EUR/GBP
    portfolio_exposure: 120000   # GBP-denominated assets in EUR

positions_by_currency:
  USD:
    - { ticker: "TSLA", value_usd: 420000 }
    - { ticker: "NVDA", value_usd: 380000 }
    - { ticker: "PLTR", value_usd: 250000 }
    - { ticker: "GOOGL", value_usd: 200000 }
    - { ticker: "BTC", value_usd: 180000 }
    - { ticker: "ETH", value_usd: 140000 }
    - { ticker: "USDC_defi", value_usd: 500000 }
  JPY:
    - { ticker: "7203.T", value_jpy: 45000000 }  # Toyota
    - { ticker: "6758.T", value_jpy: 18000000 }   # Sony
  GBP:
    - { ticker: "SHEL.L", value_gbp: 100000 }  # Shell

hedging:
  analyze: true
  threshold_exposure_pct: 15  # flag if single currency >15% of portfolio
  cost_ceiling_bps: 50  # don't recommend hedge if cost >50bps/year

Daily FX impact calculation:

pythonShow code
def calculate_fx_impact(positions, fx_rates_today, fx_rates_yesterday):
    impacts = {}
    total_fx_pnl = 0

    for currency, holdings in positions.items():
        pair = f"EUR/{currency}"
        rate_today = fx_rates_today[pair]
        rate_yesterday = fx_rates_yesterday[pair]
        fx_change_pct = (rate_today - rate_yesterday) / rate_yesterday

        # EUR strengthening = negative impact on foreign holdings
        # EUR weakening = positive impact on foreign holdings
        for position in holdings:
            eur_value = position.foreign_value / rate_today
            fx_pnl = eur_value * (-fx_change_pct)

            impacts[position.ticker] = {
                "eur_value": eur_value,
                "fx_change": fx_change_pct,
                "fx_pnl_eur": fx_pnl
            }
            total_fx_pnl += fx_pnl

    return FXImpactReport(impacts=impacts, total_fx_pnl=total_fx_pnl)

def hedging_analysis(exposures, forward_rates, spot_rates):
    recommendations = []
    for currency, exposure in exposures.items():
        exposure_pct = exposure / total_portfolio_value
        if exposure_pct > threshold:
            hedge_cost_bps = (forward_rates[currency] - spot_rates[currency]) \
                            / spot_rates[currency] * 10000

            recommendations.append({
                "currency": currency,
                "exposure_pct": exposure_pct,
                "hedge_cost_annual_bps": hedge_cost_bps,
                "recommendation": "hedge" if hedge_cost_bps < cost_ceiling else "accept",
                "reasoning": build_reasoning(currency, exposure_pct, hedge_cost_bps)
            })
    return recommendations

Monthly FX report:

View details
πŸ“Š FX IMPACT REPORT β€” February 2026
Base currency: EUR

CURRENCY MOVEMENTS (Month)
| Pair    | Open   | Close  | Change  | Direction        |
|---------|--------|--------|---------|------------------|
| EUR/USD | 1.0820 | 1.0571 | -2.30%  | EUR weakened     |
| EUR/JPY | 161.40 | 162.85 | +0.90%  | EUR strengthened |
| EUR/GBP | 0.8340 | 0.8295 | -0.54%  | EUR weakened     |

PORTFOLIO FX IMPACT
| Currency | Exposure (EUR) | FX Change | FX P&L (EUR) |
|----------|---------------|-----------|--------------|
| USD      | €1,250,000    | -2.30%    | +€47,150     |
| JPY      | €380,000      | +0.90%    | -€3,420      |
| GBP      | €120,000      | -0.54%    | +€648        |
| **Total** | β€”            | β€”         | **+€44,378** |

RETURN DECOMPOSITION
Total portfolio return (Feb): +6.8%
Investment return component: +4.6%
Currency return component: +2.2%
β†’ 32% of this month's return was FX, not investment performance

HEDGING ANALYSIS
| Currency | Exposure % | Hedge Cost | Recommendation |
|----------|-----------|------------|----------------|
| USD      | 48.2%     | 32 bps/yr  | ⚠️ HEDGE (over threshold, cost acceptable) |
| JPY      | 14.6%     | 85 bps/yr  | ACCEPT (cost too high, exposure manageable) |
| GBP      | 4.6%      | 28 bps/yr  | ACCEPT (exposure below threshold) |

USD hedging note: At 48% portfolio exposure, a 5% EUR/USD move
equals ±€125K. Forward hedge for 6 months costs ~€4K.
Recommend hedging 50% of USD exposure (€625K notional).

The Results

MetricBeforeAfter
FX impact awarenessNone (hidden in returns)Daily tracking, monthly report
Return decompositionNot doneInvestment vs. currency split
Hedging analysisAd hoc, annualMonthly, quantified cost/benefit
Time to produce FX reportN/A (wasn't done)Automated
Board reporting quality"Portfolio returned X%""Investment returned Y%, FX added Z%"
Surprise FX lossesDiscovered quarterlyFlagged daily

Try It Yourself

Install the alpha-vantage skill on Mr.Chief for FX data. Configure your positions by currency and set your reporting base currency. The agent handles daily tracking and monthly decomposition.

The insight most portfolio managers miss: FX is not noise. On a multi-currency portfolio, currency effects can be 20-40% of your total return in a given month. If you're not measuring it, you're not managing it.


Your investment returns and your currency returns are two different things. Reporting them as one number is a lie of omission. We stopped lying.

forexcurrency-riskportfolio-managementFX-hedgingmulti-currency

Want results like these?

Start free with your own AI team. No credit card required.

Forex Impact on Our Portfolio β€” The EUR/USD Move Cost Us €47K β€” Mr.Chief