Expected Loss From Stale Quotes Under Compound Poisson Jumps
You are a market maker quoting a symmetric spread around the mid-price $M_t$. The mid-price follows a compound Poisson jump process:
$dM_t = J \, dN_t$
where $N_t$ is a Poisson process with intensity $\lambda$, and each jump size $J$ is drawn independently from $J \sim N(0, \sigma_J^2)$.
You rest a bid at $M_0 - s$ and an offer at $M_0 + s$, where $s > 0$ is your half-spread. After posting the quote, there is a reaction time window $\delta$ during which you cannot cancel or update your quotes.
- What is the probability that at least one jump occurs during the window $\delta$?
- Suppose a single jump of size $Y$ occurs during $\delta$. If $Y > s$, a customer can hit your stale offer and you lose $Y - s$. If $Y < -s$, a customer can lift your stale bid and you lose $|Y| - s$. What is the expected loss conditional on a fill -- i.e., $E[|Y| - s \mid |Y| > s]$?
- Combining parts (1) and (2), derive the overall expected stale-quote loss per quote cycle of length $\delta$. You may assume $\lambda \delta$ is small enough that at most one jump occurs during $\delta$.
Hints
- The number of jumps in a short window $\delta$ is Poisson$(\lambda \delta)$. For small $\lambda \delta$, at most one jump matters.
- A fill occurs when the jump size exceeds the half-spread: $|Y| > s$. Use the truncated normal expectation (inverse Mills ratio) to compute the average overshoot.
- Write the total expected loss as $\lambda \delta \times P(|Y| > s) \times E[|Y| - s \mid |Y| > s]$ and simplify using $E[Y \cdot \mathbf{1}_{Y > s}] = \sigma_J \phi(s/\sigma_J)$.
Worked Solution
How to Think About It: This is a bread-and-butter market microstructure calculation. You are posting quotes and cannot react for a short window $\delta$. During that window, the mid can jump away from where you quoted, and a customer can pick you off on the stale side. The question boils down to: how often does a jump happen, how often is it big enough to cross your spread, and when it does, how much do you lose on average? The key levers are jump intensity $\lambda$, jump volatility $\sigma_J$, the half-spread $s$, and the reaction time $\delta$.
Quick Estimate: Take $\lambda = 5$ jumps/sec, $\delta = 0.001$ sec (1 ms), $\sigma_J = 0.5$ ticks, $s = 1$ tick. The probability of a jump in $\delta$ is $\lambda \delta = 0.005$. The probability a single jump crosses the spread is $P(|Y| > 1) = 2\Phi(-1/0.5) = 2\Phi(-2) \approx 0.046$. The conditional expected overshoot $E[|Y| - 1 \mid |Y| > 1]$ is on the order of $0.2$ ticks (we will compute this precisely). So the expected loss per cycle is roughly $0.005 \times 0.046 \times 0.2 \approx 0.000046$ ticks per cycle -- small but it compounds across thousands of cycles per second.
Approach: We break the problem into three clean pieces: jump probability, fill probability conditional on a jump, and expected overshoot conditional on a fill.
Formal Solution:
Part 1: Probability of at least one jump in $\delta$.
Since $N_t$ is Poisson with intensity $\lambda$, the number of jumps in $[0, \delta]$ is $\text{Poisson}(\lambda \delta)$. The probability of at least one jump is:
$P(\text{jump in } \delta) = 1 - e^{-\lambda \delta}$
For small $\lambda \delta$, this is approximately $\lambda \delta$.
Part 2: Expected loss conditional on a fill.
A fill occurs when $|Y| > s$, where $Y \sim N(0, \sigma_J^2)$. By symmetry of the normal distribution, we can work with $|Y|$ directly. The fill probability is:
$P(|Y| > s) = 2\Phi\!\left(-\frac{s}{\sigma_J}\right) = 2\left(1 - \Phi\!\left(\frac{s}{\sigma_J}\right)\right)$
where $\Phi$ is the standard normal CDF. Let $\alpha = s / \sigma_J$.
We need $E[|Y| - s \mid |Y| > s]$. By the standard formula for the truncated normal expectation:
$E[|Y| \mid |Y| > s] = \frac{E[|Y| \cdot \mathbf{1}_{|Y|>s}]}{P(|Y| > s)}$
Since $Y \sim N(0, \sigma_J^2)$, by symmetry $E[|Y| \cdot \mathbf{1}_{|Y|>s}] = 2 \, E[Y \cdot \mathbf{1}_{Y>s}]$. Using the standard tail expectation of a normal:
$E[Y \cdot \mathbf{1}_{Y > s}] = \sigma_J \, \phi(\alpha)$
where $\phi$ is the standard normal PDF and $\alpha = s/\sigma_J$. Therefore:
$E[|Y| \cdot \mathbf{1}_{|Y|>s}] = 2\sigma_J \, \phi(\alpha)$
and the conditional expected overshoot is:
$E[|Y| - s \mid |Y| > s] = \frac{2\sigma_J \, \phi(\alpha)}{2\Phi(-\alpha)} - s = \sigma_J \frac{\phi(\alpha)}{\Phi(-\alpha)} - s$
Recognizing that $\phi(\alpha)/\Phi(-\alpha)$ is the inverse Mills ratio $\text{IMR}(\alpha)$ for the upper tail:
$E[|Y| - s \mid |Y| > s] = \sigma_J \, \text{IMR}(\alpha) - s$
Part 3: Overall expected loss per cycle.
Under the approximation that at most one jump occurs in $\delta$:
$E[\text{loss per cycle}] = P(\text{jump}) \times P(\text{fill} \mid \text{jump}) \times E[\text{overshoot} \mid \text{fill}]$
$E[\text{loss}] = \lambda \delta \cdot 2\Phi(-\alpha) \cdot \left(\sigma_J \, \text{IMR}(\alpha) - s\right)$
Substituting back $\text{IMR}(\alpha) = \phi(\alpha)/\Phi(-\alpha)$:
$E[\text{loss}] = \lambda \delta \left[2\sigma_J \, \phi(\alpha) - 2s \, \Phi(-\alpha)\right]$
where $\alpha = s / \sigma_J$. This is the clean final form.
Sanity checks: - As $s \to 0$ (zero spread), the loss approaches $\lambda \delta \cdot 2\sigma_J \, \phi(0) = \lambda \delta \cdot \sigma_J \sqrt{2/\pi}$, which is $\lambda \delta$ times the expected value of $|Y|$. That makes sense -- every jump causes a fill, and the average loss is the average absolute jump size. - As $s \to \infty$ (very wide spread), the loss goes to 0 because no jump can cross the spread. Both $\phi(\alpha)$ and $\Phi(-\alpha)$ decay to 0 for large $\alpha$, confirming this. - The loss scales linearly in $\lambda \delta$, which is the expected number of jumps in the window.
Answer: The expected stale-quote loss per cycle is:
$\boxed{E[\text{loss}] = \lambda \delta \left[2\sigma_J \, \phi\!\left(\frac{s}{\sigma_J}\right) - 2s \, \Phi\!\left(-\frac{s}{\sigma_J}\right)\right]}$
where $\phi$ and $\Phi$ are the standard normal PDF and CDF, respectively.
Intuition
This problem captures the fundamental tension in electronic market making: you want tight spreads to attract flow, but every millisecond your quote sits unattended is a free option you have written to the market. The half-spread $s$ is the strike of that option, and the jump volatility $\sigma_J$ determines how often it finishes in the money. The result -- that expected adverse selection cost scales as $\lambda \delta$ times a function of $s/\sigma_J$ -- is the quantitative backbone of optimal spread-setting in high-frequency market making.
The inverse Mills ratio appears naturally here and in many adverse-selection models. It measures "how bad is a bad outcome, given that it is bad" -- which is exactly the question a market maker faces. When $s/\sigma_J$ is large (wide spread relative to jump size), fills are rare but each one is devastating because it takes a huge jump to cross the spread. When $s/\sigma_J$ is small, fills happen often but the average loss per fill is modest. The optimal spread balances these two regimes against the flow you capture -- and that tradeoff is at the heart of the Avellaneda-Stoikov framework and its descendants.