Methodology
Each trading day runs 17:00 ET → 17:00 ET (the FX "New York cut"), converted from real
America/New_York local time so the UTC boundary is correct across DST. Prices are 1-minute
closes from massive.com's consolidated FX feed. A fixed daily window, 16:55–18:15 ET,
is always excluded — the last 5 minutes of New York hours plus the following 1h15m, the daily
rollover stretch found to produce most single-tick bad prints. Bars manually reviewed and marked erase
in the bad-tick review pass are excluded the same way.
Every excluded or missing minute — weekend, holiday, an erased tick, or a genuine gap in the source
feed (AUD/USD in particular has known chronic gaps, confirmed by massive.com support as a source-side
issue) — is filled by geometric/log-linear interpolation between the nearest real closes: a
straight line in log-price, the mode of a lognormal bridge conditioned on its two endpoints. A day is
only included if every pair still has at least 360 genuinely observed minutes after exclusions; 4 days
in this range were dropped on that basis (2 holidays, 2 AUD/USD gap days).
The realized-covariance estimator combines 5-minute and 1-minute sampling scales to cancel
microstructure-noise bias (Zhang/Mykland/Aït-Sahalia, 2005) — the same estimator used across
this pipeline's S&P 500 side , unmodified.
The seven pairs don't natively share a quoting side: EUR, GBP, AUD and NZD quote USD as the denominator
(price up = dollar weaker), while JPY, CAD and CHF quote it as the numerator (price up = dollar
stronger ) — the opposite sign. Left uncorrected, any broad dollar move would mechanically
flip the sign of every correlation between the two groups, which has nothing to do with real
co-movement. Returns for USD/JPY, USD/CAD and USD/CHF are negated before entering the estimator so all
seven series consistently represent that currency's move against the dollar; tickers still display in
their normal market convention. Realized volatility (the diagonal) is unaffected by this, since
Var(−X) = Var(X).