Using Trade-Time Sampling to Model Large EUR/USD Ranges
Summary
The document considers how to improve an Ornstein–Uhlenbeck model of EUR/USD when it understates large two-hour price ranges. The author has calibrated the process to historical mean, standard deviation, and total absolute variation, then explored adding rare signed jumps. Those jumps make simulated range tails heavier, but the author reports that the result still does not match the historical range distribution.
The cited response proposes sampling after a fixed number of trades rather than at fixed time intervals, noting that returns can appear less fat-tailed when measured on a trade or volume clock. This offers an alternative way to represent market activity before adding complexity to the price equation. The document gives no empirical comparison, calibration recipe, or evidence that a particular trade count fits EUR/USD. The suggestion is a modeling direction, not a validated solution, and its relevance may depend on the data and sampling design.
Key ideas
- The author’s Ornstein–Uhlenbeck model matches selected historical moments but understates large two-hour ranges.
- Adding rare signed jumps increases the simulated range tail, though the author reports that the fit remains inadequate.
- The proposed alternative is to sample after a fixed number of trades instead of at fixed time intervals.
- The document offers this as a modeling suggestion and provides no empirical validation or calibration procedure.
Tags
Full text
# Modelling EUR/USD with Ornstein-Uhlenbeck + jumps?
# Modelling EUR/USD with Ornstein-Uhlenbeck + jumps?
I'm trying to simulate a process as close as possible to EUR/USD of the ten past years.
I've used a Ornstein-Uhlenbeck process:
$$d X_t = -\theta (X_t - \mu) d t + \sigma d B_t$$
with the parameters $\mu$, $X_0$, $\theta$, $\sigma$ being calibrated such that mean, standard deviation, total absolute variation (i.e. $\sum_i |X_{t_{i+1}} - X_{t_i}|$ for a given sampling rate) are as close as possible to the real historical data. For example I used $\mu \approx$ 1.3 $ / 1 €.
The only thing that fails is that the created process doesn't have big spikes whereas the real historical data sometimes shows such jumps.
More precisely, here is the histogram of the range over 2 hours (each $X_t$ represents one minute, so 120 means 2 hours): $$range_t = \max_{k \leq 120} X_{t-k} - \min_{k \leq 120} X_{t-k}$$
## Question:
The simulated O-U process I did is too "nice and gentle": the range in 2 hours never exceeds 100 pips, whereas in real-life, the range in 2 hours can exceed 100 pips. How to make it more like the real data?
How should I improve the model (i.e. the Stochastic Differential Equation) to have more "big ranges"? Add some "jump diffusion" (with which method)? Make $\sigma$ vary, and how?
EDIT: I tried to add a "jump" term $d\, q_t$ to the SDE, i.e. very rarely we have a "jump" of height $h$ pips, with $h \sim \pm 0.0060 \cdot Log\mathcal{N}(0,1)$, i.e. a "jump" of average height 60 pips (with random sign + or -).
This has an effect of having a heavier tail for the "2hours range" distribution:
but even by choosing the right parameters, the "heavier tail" still doesn't look like the real EURUSD "2 hours range" histogram tail...
Another option: Should I replace $d\, B_t$, which is a $\mathcal{N}(0, \sigma)$ by another random variable with a higher kurtosis? Which one?
## Answer by experquisite (score 1)
https://quant.stackexchange.com/a/23017
Try modelling samples every 20,000 ticks, instead of 2 hours (or any such number like that). Markets are often less fat tailed in terms of the trade- or volume-clock. See http://www.amazon.ca/Introduction-High-Frequency-Finance-Ramazan-Gen%C3%A7ay/dp/0122796713 and http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2034858Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.