Methodology
How ParallaxFX computes the numbers it shows you, and why specific denominators are chosen where they are.
What counts as an exposure — the foreign amount is what’s fixed
Every figure in ParallaxFX rests on one assumption, so it is worth stating before any of the arithmetic: an exposure is an obligation to pay or receive an amount in a currency that is not your reporting currency, on a date. The foreign amount is the fixed quantity. What varies — and what the platform measures — is the cost of that obligation in your own currency.
Every conversion in the platform is therefore the same shape, with the rate quoted as your currency per unit of foreign currency:
home-currency value = foreign amount × rate
A contract clause that fixes or bands a rate changes what the foreign amount converts at. It does not change the foreign amount itself. That distinction is why a pegged payment and an unprotected one of the same size are the same obligation measured two ways, rather than two different obligations.
Both sides of a contract can use this — each records its own foreign-denominated side
A buyer paying in euros and a vendor receiving those euros are two separate profiles, each holding its own exposure, not two views of a shared one. The buyer records an outflow; the vendor records an inflow. Each sees the figure from where they actually stand, and neither figure is derived from the other.
The consequence is that a contract priced in your own currency is not an exposure here, however large it is. If you pay a foreign supplier in your reporting currency, you pay what the invoice says and the conversion risk sits with them. The platform refuses such a position rather than recording it as zero: an exposure whose currency matches your reporting currency is rejected at the database level, because a row that converts at 1.0 contributes nothing and would only dilute every percentage computed against it.
Transaction exposure, not economic exposure
ParallaxFX measures committed obligations — signed contracts, scheduled milestones, invoices raised or settled. It does not model economic exposure: the slower effect of currency moves on your competitiveness, pricing power, or the value of future business you have not yet contracted.
Those two give different answers for the same contract, and the difference is largest exactly where a clause is involved. Under a hard peg, transaction exposure is zero — the amount you will pay is fixed and no market move changes it. Economic exposure under that same peg is constant and real: you may be paying above the open market for years. Both readings are correct; they answer different questions.
ParallaxFX measures the first, and shows the second as position without pricing it.A pegged commitment’s tile states how far the market has drifted from your pegged rate, as a percentage, so the gap is visible to you. It does not put a currency figure on that gap anywhere in the platform.
That restraint is deliberate rather than a missing feature. Valuing the drift produces the economic-exposure number, and it sits one subtraction away from telling you that you are overpaying on a contract you have already signed and cannot unwind. Whether a peg was a good trade depends on why you agreed to it — budget certainty, a counterparty concession, a financing covenant — none of which the platform knows. The drift is a fact and we show it. The verdict is yours.
One known imprecision follows from this and is worth naming: the sensitivity tornado still counts a pegged commitment’s exposure in its bars, so those bars slightly overstate how much of your position can actually move. The peg’s own figure lives on the realized / settlement view instead.
What the platform will and won’t tell you
The peg example above is one instance of a rule that runs through everything here, so it is worth stating directly:
ParallaxFX states what is true about your position. It does not tell you what that means for your business, or what to do about it.
The test we apply to any figure before showing it: does stating this require knowing why you agreed to the deal? If it does, it is a judgement rather than a fact, and we leave it to you.
- We will say “spot is 3.2% from your budget rate, inside your ±5% band”, and “the market has drifted 4.1% from your pegged rate”, and “your 60% share of the move past the band is a $1,808 cost”. Each is arithmetic on your own contract terms.
- We will not say that you are overpaying, that a clause was a good or bad trade, that a breach means a true-up applies, that you are owed anything, or that you should hedge. Those depend on why the contract was structured the way it was — budget certainty, a concession won elsewhere, a covenant — and on remedies written in your agreement rather than ours.
Direction is a fact and we state it: money settling to you or to your counterparty, a cost or a benefit on a signed figure. The judgement attached to that direction is not ours to add. It is why the Realized FX Impact Kit reports a signed number with its sign convention stated, rather than labelling results favorable and unfavorable.
Forecast Impact denominator — why operating income, not face value
ParallaxFX computes severity in two places, and they answer two different questions:
- "How risky is this in proportional terms?" — the per-currency severity tables (Currency Risk Breakdown, Hedge Recommendation by Currency) use each currency's own face-value exposure as the denominator. A 5% EUR move against your EUR position reads high-severity regardless of whether your company is $5M or $5B. That's the right framing for policy bands like "hedge EUR exposure 50–80% when net EUR exceeds 5% of EUR revenue."
- "How material is this to the business?" — the Forecast Impact KPI on this page uses your operating-income and revenue baselines as the denominator instead. A $120K worst-case FX swing reads very different against a $6M operating income (2% of OI, material) than against a $60M operating income (0.2%, a rounding error). FP&A audiences anchor on the operating-income framing — boards want EBITDA impact, not exposure %.
Both views ship side-by-side. The KPI strip shows the business-anchored framing; the per-currency tables retain the face-value framing. The two are internally consistent and answer their respective questions correctly — collapsing them into one denominator would lose information.
To enable the business-anchored framing, fill in annual revenue + operating income on the profile edit form. Both fields are optional; the per-currency tables work without them.
Currency netting (Inflows / Outflows / Net)
For each currency, ParallaxFX computes Level 1 same-currency netting (Inflows − Outflows = Net position) alongside the face-value gross exposure. The redesigned currency table shows all three columns. Both shapes ship on every engine output; neither replaces the other.
Competitive engine pass-through coefficient
The Competitive engine applies a pass-through coefficient to model how much of an FX move flows into your pricing. Industry default is 50% (half the move absorbed, half passed through). Differentiated SaaS / branded products typically run 30–50% (pricing power absorbs); commodity / pass-through resellers run 80–100%. Configure per profile on the profile edit form.
Hedge recommendation weights
The hedge recommendation balances downside reduction against upside preservation, with an additional anti-full-hedge bias at 100% coverage. The weights are driven by your company's risk appetite (Conservative / Balanced / Aggressive), set on the Company Settings page and overridable per profile:
- Conservative — upside-loss weight 0.25, full-hedge penalty 0.20× total upside. Downside reduction wins easily.
- Balanced — upside-loss weight 0.50, full-hedge penalty 0.40× total upside. Default behavior.
- Aggressive — upside-loss weight 0.75, full-hedge penalty 0.60× total upside. Preserves upside; recommends lower coverage.
ECB data layer — where rates come from, how drift and VaR are computed
ParallaxFX prices everything against the European Central Bank's daily reference rates (the ECB euro foreign exchange reference rates, published each Eurozone trading day at ~16:00 CET). The feed is free, audit-defensible, and covers 30+ currencies against EUR going back to 1999. We currently hold 2024-05-16 to 2026-10-16 (619 trading days), and the window grows every trading day — a scheduled job appends each close as the ECB publishes it.
ECB is EUR-base — it publishes EUR/USD, EUR/JPY, and so on, but never USD/JPY directly. For any pair where neither side is EUR, we derive the cross rate per day via the EUR bridge:rate(X/Y) = rate(EUR/Y) / rate(EUR/X). Storage stays compact and consistency questions stay simple: there's exactly one source row per (currency, trading day).
Stale-data check — what "drift" means
When you import a forecast or a batch of invoices, ParallaxFX snapshots the rates we have at that moment onto the import batch. The freshness signal on every analysis view ("valued 1 day ago", "within tolerance", "stale") compares that snapshot to the latest ECB close. Drift is reported as max |%| across all pairs in the snapshot — one currency drifting 2.5% is enough to mark the snapshot Aging, even if the rest are unchanged. Historical analysis runs freeze the drift figure against the rate that was current on the day the run was saved.
Annualized volatility (σ_annual)
For Forecast Risk and VaR, we compute the annualized volatility of each relevant pair from its last 90 trading days of closes. Daily log returns r_t = ln(price_t / price_{t-1}) go through a sample standard deviation (n−1 denominator), then scaled to annual via σ_annual = σ_daily × √252. For sanity checks: as of mid-2026, σ_annual(EUR/USD) over the last 90 days runs ≈ 6.5%, EUR/JPY ≈ 6.7%, GBP/USD (derived as a cross) ≈ 7.4% — typical ranges for developed-market major pairs.
Parametric VaR
The "Forecast Risk" / VaR figure is the parametric (variance– covariance) Value-at-Risk for a single position:
VaR = |Net Exposure| × σ_annual × z × √(t / 252)
where z is the one-tailed normal quantile for the chosen confidence (1.2816 for 90%, 1.6449 for 95%, 2.3263 for 99%) and t is the horizon in trading days (90 ≈ a quarter, 252 ≈ a year). Reads as "the largest loss we'd expect with X% confidence over t trading days, in your home-currency units." Worked example: a $1M GBP/USD position over 90 days at 95% confidence ≈ $1M × 0.074 × 1.6449 × √(90/252) ≈ $73,000.
The single-position formula is exact only when positions are uncorrelated. v1 sums per-currency VaR across a portfolio, which is an upper bound on the correlated total — natural offsets (e.g. EUR receivables and GBP costs that tend to move together) would reduce the true figure. Portfolio VaR with a full covariance matrix is a future enhancement; the upper-bound shape is the conservative read.