Memo·Conceptual outline · implementation in progress
Investment·Case Study 04
Case Study 04 · FX · Tick Data · EDA · GARCH · Time-Series Regression
FX Liquidity & Time-Series Arbitrage
Global macro funds trade currencies around the clock. But executing a large FX order at the wrong time means the market moves against you before the trade is filled; a cost that compounds at scale. This project performs exploratory data analysis on historical to identify when , then trains a -based time-series model to forecast short-term liquidity drop-offs.
The Travel Industry Connection
Travel companies are among the largest non-financial FX users in the world. A tour operator selling EUR-denominated holidays to British customers collects GBP revenues but pays USD-denominated hotel contracts and JPY-denominated Japan packages. An airline generates revenues in 50+ currencies but pays for jet fuel (priced in USD) globally.
TUI AG, for example, hedges over €4 billion of FX exposure annually. Timing those hedges badly (executing in a thin market or ahead of a macro release) adds measurable cost to the P&L. Knowing when the will spike is not just a trading advantage; it is a treasury management problem for any company with global travel revenues.
| FX Pair | Travel Industry Relevance |
|---|---|
| EUR/USD | Euro-area inbound travel revenues vs. USD costs |
| USD/JPY | Japan inbound tourism (USD spending) vs. JPY operations |
| GBP/EUR | UK outbound operators (TUI, Thomas Cook legacy) |
| USD/CHF | Swiss luxury travel & alpine hospitality segment |
| AUD/JPY | Asia-Pacific leisure corridor, carry-funded travel flows |
The Method
EDA → → Regression Forecast
The analysis starts with exploratory data analysis on raw : building time-of-day spread profiles, intraday heatmaps, and event-window studies. EDA reveals structural liquidity patterns: not from theory, but from the data itself.
The modelling phase fits a on the spread residuals to capture volatility clustering, the empirical finding that wide-spread periods tend to persist. The structure (Ljung-Box test) confirms that spread time series has memory, making it forecastable. A final regression model uses GARCH conditional variance plus lagged features to predict spread 5 minutes ahead.
σ²ₜ = ω + α·ε²ₜ₋₁ + β·σ²ₜ₋₁
GARCH(1,1): α = shock, β = persistence; α+β < 1 required
spread̂ₜ₊₅ = f(spreadₜ, σ²ₜ, lagₜ₋ₖ, eventₜ)
OLS regression; event = binary dummy for macro releases in next 60 min
EDA · Intraday Spread Profile (EUR/USD, UTC)
| Session | UTC Window | Spread | Note |
|---|---|---|---|
| Sydney | 22:00 – 06:00 | Wide | Thin liquidity, few major dealers active |
| Tokyo | 00:00 – 09:00 | Medium | JPY pairs tighten; others remain wide |
| London Open | 07:00 – 08:00 | Narrow | Peak liquidity: most dealers online |
| London / NY | 12:00 – 17:00 | Narrow | Highest volume window of the day |
| NY Close | 20:00 – 22:00 | Widening | Liquidity drains; spreads expand 1.5–2× |
| NFP Release | 13:30 (Fri) | 3–5× | Spreads spike; smart money avoids execution |
Technical Pipeline
Tick Data Ingestion
Python · Dukascopy · Parquet
Download historical bid/ask tick data for 5 FX pairs (2015–present). Store in columnar Parquet format. ~80 GB compressed per pair for the full history.
Exploratory Data Analysis
pandas · polars · matplotlib
Compute time-of-day spread profiles. Plot intraday spread heatmaps by weekday and hour. Identify structural liquidity drop-off windows. Correlate with scheduled macro event calendar.
Feature Engineering
pandas · TA-Lib
Aggregate ticks to 1-minute bars. Compute: realised spread (5-min window), lagged spread, volume proxy (tick count per minute), event dummies (NFP, ECB, BOJ, CPI releases).
GARCH Volatility Model
arch · statsmodels
Fit GARCH(1,1) on spread residuals per session to capture volatility clustering. Ljung-Box test confirms significant autocorrelation in squared spread series.
Regression Forecast
scikit-learn · statsmodels
OLS / Ridge regression to forecast spread t+5 minutes using lagged features + GARCH conditional variance. Evaluate on held-out year of tick data.
Signal Output
FastAPI · WebSocket
Real-time inference endpoint: given current time, recent spread, and scheduled events in the next 60 minutes, output a liquidity forecast and recommended execution window.
Key EDA Findings
1.2 pips
EUR/USD spread at London/NY overlap
Tightest window of the trading day
3.8 pips
EUR/USD spread at NY Close
3× wider than the London overlap window
5–7×
Spread spike on NFP release (5-min)
Market makers widen aggressively to hedge
~78%
GARCH variance explained
α+β ≈ 0.97: high persistence in spread volatility
Conclusion
Liquidity is not constant. Its pattern is predictable.
The in FX markets follows a highly structured intraday pattern, one driven by session overlaps, dealer staffing, and the cadence of macro data releases. This pattern is not random: it exhibits strong and volatility clustering that a model can capture.
For a travel company hedging multi-billion-dollar FX exposures, the practical implication is direct: executing at 13:00 UTC on a Tuesday (London/NY overlap, no events) is structurally cheaper than executing at 20:30 UTC or within 30 minutes of an NFP release. Quantifying that difference, and automating the execution window selection, is the value this model delivers.
In FX, the cost of the trade is determined before the trade is placed.