---
title: "Short-Horizon Alpha"
book: "Market Making and High-Frequency Trading"
subject: quant
language: en
chapter: 7
exercises: 8
source: https://one-course.com/books/quant/11/en/chapter/7-short-horizon-alpha
---

# Chapter 7 — Short-Horizon Alpha

The bid queue is three times the ask queue, and the future ticked up half a second ago. A market maker that ignores both will sell at the ask to someone who did not. In this chapter’s simulated market, where a fund follows its index future half a second late, five features of the book, the trades and the future forecast the fund’s mid two seconds ahead with an information coefficient of 0.48. That is an upper bound: this market’s mid trails its efficient price for seconds, which real books do less. Withdrawing the quote the forecast says will be picked off raises the two-second mark-out of the market maker’s fills from 0.29 to 0.45 ticks a share. The forecast barely ages in one message; in fifty it loses more than a third of its power.

## 7.1 What predicts the next second

**Definition 7.1 (Short-horizon alpha).**

*Short-horizon alpha* is a forecast of an instrument’s price change over the next milliseconds to seconds, built from the state of its order book, its recent trades and the recent moves of related instruments, and used to decide how to quote and when to trade.

It differs from the intraday alpha of One Quant Book 8, chapter 14 by its horizon and its use. At minutes, a forecast pays for crossing the spread and is traded like any other signal. At seconds, a forecast is rarely large enough to pay for the spread; its main use is to decide which of the market maker’s own quotes to leave in the book. The predictors are the order-book and trade-flow features of One Quant Book 7, chapters 8 to 10: queue imbalance, order-flow imbalance, signed trade flow, the lead of a related instrument, and the instrument’s own recent move.

## 7.2 Building the forecast: book, flow, cross-asset

The chapter’s market has two instruments on one efficient price. A leads, the index future; B, the fund, follows half a second later, each with its own order flow. The market maker quotes B and reads A’s book. After every message of B, five features are computed over a one-second window ([Listing 7.1](#lst-hf-short-horizon-alpha-features)): the queue imbalance $(Q^b-Q^a)/(Q^b+Q^a)$; the order-flow imbalance of Cont, Kukanov and Stoikov, who found price changes over short intervals linear in it with a slope inversely proportional to depth; the net aggressive volume; A’s mid change; and B’s own mid change. A ridge regression on four twenty-minute calibration sessions forecasts B’s mid change over the next two seconds.

On two validation sessions (information coefficients, signs as fitted, forecasting two seconds ahead):

|  | imbalance | order-flow imb. | trade flow | leader’s move | own move | combined |
| --- | --- | --- | --- | --- | --- | --- |
| information coefficient | 0.320 | 0.285 | 0.077 | 0.288 | 0.150 | 0.480 |
| per unit (ticks) | 0.30 | 0.0045 | 0.0057 | 0.34 | 0.27 |  |

The second row reads: a book fully imbalanced towards the bid forecasts $+0.30$ ticks; a tick of A’s move forecasts $+0.34$ ticks of B’s; a lot of order-flow imbalance, $+0.0045$. The own move enters with a positive sign: in this market the mid trends for seconds after the efficient price jumps (One Quant Book 7 records a lag-one correlation of 0.44 of two-second mid returns in it), and that trend is why every coefficient here is larger than in real books. Treat the numbers as an upper bound and the ranking as the lesson: the book and the leader carry the forecast, the trade flow little.

## 7.3 Horizon, decay and evaluation at high frequency

The information coefficient depends on the horizon ([Figure 7.1](#fig-hf-short-horizon-alpha-ic)): 0.28 at half a second, 0.48 at two, a peak of 0.54 at five, 0.50 at ten. Imbalance peaks early and fades; order-flow imbalance keeps gaining to ten seconds. Kolm, Turiel and Westray, forecasting 115 Nasdaq stocks from order flow with neural networks, found the effective horizon of such forecasts to be about two average price changes; in this market two price changes take a few seconds, which is where the curve flattens.

![Out-of-sample information coefficient of each feature and of the ridge combination, forecasting the fund’s mid change over each horizon (log scale), on two validation sessions of twenty minutes; the model for each horizon is fitted on four other sessions. Data: hf_alpha.ic_by_horizon.](https://one-course.com/images/onecourse/chapters/quant-11/hf-short-horizon-alpha/fig-3fb42220fab5.svg)

***Figure 7.1.** Out-of-sample information coefficient of each feature and of the ridge combination, forecasting the fund’s mid change over each horizon (log scale), on two validation sessions of twenty minutes; the model for each horizon is fitted on four other sessions. Data: `hf_alpha.ic_by_horizon`.*

A forecast is also a race against its own age. The same two-second forecast built from features that are $k$ messages old keeps an information coefficient of 0.477 one message late (a median of 33 milliseconds here), 0.405 twenty messages late (0.9 seconds) and 0.303 fifty messages late (2.3 seconds). At the two-second horizon the decay is slow; what decays fast is the value of acting before the others, which is chapter 9’s subject.

## 7.4 Coupling the forecast to quotes: skew

**Definition 7.2 (Forecast skew).**

A *forecast skew* shifts a market maker’s quotes in the direction of its short-horizon forecast: the side that the forecast says will be picked off (the ask when the price is expected to rise) is moved away from the [fair price](https://one-course.com/books/quant/11/en/chapter/2-fair-value#def-hf-fair-value-fair) or withdrawn, the other side kept or improved.

In a small-tick market the skew is continuous: the forecast drift enters the control problem (chapter 4, [drift-adjusted quoting](https://one-course.com/books/quant/11/en/chapter/4-extensions-of-the-inventory-framework#def-hf-extensions-of-the-inventory-framework-drift)), or the [fair price](https://one-course.com/books/quant/11/en/chapter/2-fair-value#def-hf-fair-value-fair) itself moves (chapter 2). In a one-tick market it is a decision about which side to show. Cartea, Donnelly and Jaimungal put a volume-imbalance signal inside a market maker’s control problem, calibrated it on eleven Nasdaq stocks over one half-year and tested it over the next, and found that the signal improved the strategy out of sample.

![The chapter’s coupling of a two-second forecast to one-tick quotes: both sides are shown while the forecast is within ±0.3 ticks; beyond it, the side that would be picked off is withdrawn (skew); beyond ±0.9 ticks, half the spread plus the taker fee plus a margin, the market maker also crosses the spread for one lot (take threshold).](https://one-course.com/images/onecourse/chapters/quant-11/hf-short-horizon-alpha/fig-9f1bbae8b7f6.svg)

***Figure 7.2.** The chapter’s coupling of a two-second forecast to one-tick quotes: both sides are shown while the forecast is within $\pm0.3$ ticks; beyond it, the side that would be picked off is withdrawn (skew); beyond $\pm0.9$ ticks, half the spread plus the taker fee plus a margin, the market maker also crosses the spread for one lot ([take threshold](#def-hf-short-horizon-alpha-take)).*

## 7.5 When to take instead of make

**Definition 7.3 (Take threshold).**

A *take threshold* is the size of short-horizon forecast beyond which a market maker crosses the spread instead of waiting to be filled: at least half the spread plus the taker fee, plus a margin for the forecast’s error and for the other traders who see the same signal.

A market maker that buys at the ask pays half the spread and the taker fee against the mid; it gains only if the mid rises by more before the forecast is stale. Here half the spread is half a tick, the taker fee a tenth of a tick, the margin three tenths: 0.9 ticks. Forecasts that large are rare: on the validation sessions 0.01% of the forecasts exceed it in absolute value, against 5.8% for the skew threshold of 0.3.

On six test sessions, a one-lot quoter in B (a taker fee of 0.1 cent a share, no rebate):

| coupling | passive shares | passive mark-out | takes | take mark-out | P&L (sd) |
| --- | --- | --- | --- | --- | --- |
|  | a session | (ticks a share) | a session | (ticks a share) | ($ a session) |
| none | 16 550 | 0.294 |  |  | $-33.58$ (107.68) |
| skew | 11 050 | 0.451 |  |  | 25.58 (50.82) |
| skew and take | 10 867 | 0.452 | 4.2 | 0.540 | 46.17 (51.22) |
| the same, one message late | 10 883 | 0.414 | 4.5 | 0.722 | 46.47 (36.29) |

The skew lifts the passive mark-out by 0.16 ticks a share and gives up a third of the volume, the same trade-off as chapter 6’s fading, from a forecast of direction instead of a forecast of mark-out. Takes are few, four a session; their mark-out is positive but rests on 25 to 27 trades, and the late version’s higher figure is noise. One message late, the passive mark-out drops by 8%. The P&L column is too noisy over six sessions to rank the couplings, as in the previous chapters.

## 7.6 Strategy files

**Strategy file 7.1 — Book-imbalance quote skew.**

**Who pays you, and why.** Uninformed takers who cross into the side of the book that is about to hold; informed takers are avoided rather than paid.

**Instruments and venues.** Large-tick equities, futures and exchange-traded funds on price-time venues.

**Signal.** Queue imbalance $(Q^b-Q^a)/(Q^b+Q^a)$ at the best prices, with order-flow imbalance over a short window; forecast $\hat\alpha$ of the mid change over one to a few seconds.

**Sizing and execution.** Show both sides while $|\hat\alpha|$ is small; withdraw the side against the forecast beyond a threshold; hysteresis to keep queue places (chapter 6).

**Costs.** Queue places lost on each withdrawal; messages; the volume given up.

**How it dies.** Every market maker reads the same imbalance, so the side about to hold is crowded and the queue that remains is the one about to be eaten; no specific public episode is recorded.

**Horizon, capacity, infrastructure.** Seconds; one lot to a few per level; an order-by-order feed and a fast quote update.

**Backtest honestly.** A queue-position model (One Quant Book 7, chapter 18) or a reactive simulator: shadow orders that never lose their place flatter the withdrawal.

**Sources.** Cartea, Donnelly and Jaimungal (2018); Kolm, Turiel and Westray (2023); this chapter: passive mark-out 0.451 against 0.294 ticks a share, a synthetic market (upper bound).

**Strategy file 7.2 — Order-flow-imbalance taking.**

**Who pays you, and why.** Liquidity providers whose quotes are stale after a burst of order flow.

**Instruments and venues.** Liquid futures and equities with deep books.

**Signal.** Order-flow imbalance over the last second, scaled by depth (Cont, Kukanov and Stoikov’s linear relation).

**Sizing and execution.** Cross for one lot when $|\hat\alpha|$ exceeds the [take threshold](#def-hf-short-horizon-alpha-take); a cooldown between takes.

**Costs.** Half the spread and the taker fee on every trade, against the forecast’s gain.

**How it dies.** The same signal is visible to every fast trader; the first to act takes the opportunity, and the arms race shortens its life (chapter 9).

**Horizon, capacity, infrastructure.** Sub-second to seconds; very small capacity per opportunity; co-location.

**Backtest honestly.** Execute a message later than the signal and at the price then available; count only takes whose forecast exceeded the threshold at the delayed time.

**Sources.** Cont, Kukanov and Stoikov (2014); this chapter: 4.2 takes a session, mark-out 0.540 ticks on too few trades to trust.

**Strategy file 7.3 — Trade-sign continuation.**

**Who pays you, and why.** The market maker avoids the side a metaorder is taking; the metaorder’s owner pays through the spread it keeps paying.

**Instruments and venues.** Any instrument with long memory in order signs.

**Signal.** Net aggressive volume over a window; the sign autocorrelation of One Quant Book 7, chapter 9.

**Sizing and execution.** A term in the forecast; alone, the weakest of the five features here (information coefficient 0.077).

**Costs.** As for the skew.

**How it dies.** Execution algorithms that randomise sizes and timing hide the sign; persistence is partly offset by mean-reverting limit orders (Bouchaud and co-authors).

**Horizon, capacity, infrastructure.** Seconds to minutes.

**Backtest honestly.** Sign trades with the rule the live system will use (One Quant Book 7, chapter 9), not with the simulator’s truth.

**Sources.** Bouchaud, Gefen, Potters and Wyart (2004); this chapter’s coefficient.

**Strategy file 7.4 — Futures-led quoting.**

**Who pays you, and why.** Slower liquidity providers in the fund or the stocks, whose quotes lag the future.

**Instruments and venues.** An index future and its fund or constituents; a Treasury future and the cash bond; any leader and follower.

**Signal.** The leader’s mid change over the last window, translated into the follower’s units (chapter 2’s [cross-instrument fair price](https://one-course.com/books/quant/11/en/chapter/2-fair-value#def-hf-fair-value-cross)).

**Sizing and execution.** Withdraw the follower’s quote on the side the leader has moved against; take when the gap exceeds the [take threshold](#def-hf-short-horizon-alpha-take).

**Costs.** Latency between the two venues; fees on both.

**How it dies.** Speed: the median life of an index future-fund arbitrage fell from 97 milliseconds in 2005 to 7 in 2011 as firms invested in speed (Budish, Cramton and Shim), while its median profit per opportunity stayed near 0.08 index points.

**Horizon, capacity, infrastructure.** Milliseconds to seconds; a data path from the leader’s venue, chapter 8.

**Backtest honestly.** Timestamps of both venues on one clock, with the real propagation delay between them.

**Sources.** Budish, Cramton and Shim (2015); this chapter: the leader’s move has an information coefficient of 0.288 at two seconds.

**Strategy file 7.5 — Post-sweep reversion.**

**Who pays you, and why.** A trader who swept several levels and moved the price past its level after the impact decays.

**Instruments and venues.** Stocks and futures with transient impact.

**Signal.** The instrument’s own move over the last window, after a sweep; the propagator of One Quant Book 10, chapter 12 gives the expected reversion.

**Sizing and execution.** Quote into the reversion: show the side that fades the sweep.

**Costs.** Adverse selection when the sweep was informed.

**How it dies.** When the sweep was information, not liquidity: the price keeps going. In this chapter’s market the own move predicts continuation (coefficient $+0.27$), so there is no reversion to trade.

**Horizon, capacity, infrastructure.** Seconds.

**Backtest honestly.** Separate sweeps by what followed them only out of sample; the planted market here would show the strategy losing.

**Sources.** Bouchaud, Gefen, Potters and Wyart (2004); One Quant Book 10, chapter 12.

## 7.7 Tutorial: forecasting the fund from the future

**Goal.** Build a seconds-ahead forecast from book, flow and a leading instrument, evaluate it out of sample, and couple it to a quoter. **End state:** the three tables, Figures [7.1](#fig-hf-short-horizon-alpha-ic) and [7.3](#fig-hf-short-horizon-alpha-calib).

1. **Features.** `firm.hfalpha.FeatureEngine` updates on every message; the same code runs over stored sessions (`stream`) and inside the quoter. `def update (self , t, kind, agg, qty, bid, bid_qty, ask, ask_qty) -> np.ndarray: bq, aq = bid_qty / self .lot, ask_qty / self .lot if self .prev is not None : pb, pbq, pa, paq = self .prev e = (bq if bid >= pb else 0.0 ) - (pbq if bid <= pb else 0.0 ) - (aq if ask <= pa else 0.0 ) \ + (paq if ask >= pa else 0.0 ) if e: self .ofi_q.append((t, e)) self .ofi += e self .prev = (bid, bq, ask, aq) if kind == b " E " : v = agg * qty / self .lot self .flow_q.append((t, v)) self .flow += v for q, name in ((self .ofi_q, " ofi " ), (self .flow_q, " flow " )): while q and q[0 ][0 ] < t - self .window: setattr (self , name, getattr (self , name) - q.popleft()[1 ]) mid = 0.5 * (bid + ask) self .mid_q.append((t, mid)) while len (self .mid_q) > 1 and self .mid_q[1 ][0 ] <= t - self .window: self .mid_q.popleft() own = mid - self .mid_q[0 ][1 ] imb = (bq - aq) / (bq + aq) if bq + aq else 0.0 return np.array([imb, self .ofi, self .flow, self ._lead(t), own])` **Listing 7.1.** Order-flow imbalance, trade flow, own move and imbalance, updated on every message. code/firm/hfalpha/firm_hfalpha.py
2. **Fit and evaluate.** `hf_alpha.model(h)` fits a ridge regression on four sessions; `ics(h)` scores it on two others; `ic_by_delay()` ages the features.
3. **Couple.** `AlphaQuoter` reads the book without its own orders, forecasts, skews and takes. `def on_market (self , ctx, t, top): m, x = ctx.last, ctx.external(top) # the book without our own orders, as the model was fitted f = self .eng.update(t, m[" kind " ], m[" agg " ], m[" qty " ], int (x[" bid " ]), int (x[" bid_qty " ]), int (x[" ask " ]), int (x[" ask_qty " ])) self .hist.append(float (self .model.predict(f)[0 ]) if self .model is not None else 0.0 ) fc = self .hist[0 ] bq = self .size if ctx.position + self .size <= self .limit else 0 aq = self .size if ctx.position - self .size >= -self .limit else 0 if self .skew is not None : if fc > self .skew: aq = 0 elif fc < -self .skew: bq = 0 ctx.quote(int (x[" bid " ]), bq, int (x[" ask " ]), aq) if self .take is not None and t - self .last_take > self .cooldown: if fc > self .take and ctx.position + self .size <= self .limit: ctx.take(1 , self .size) self .last_take, self .takes = t, self .takes + 1 elif fc < -self .take and ctx.position - self .size >= -self .limit: ctx.take(-1 , self .size) self .last_take, self .takes = t, self .takes + 1` **Listing 7.2.** The forecast drives which side to show and when to cross. code/firm/hfalpha/firm_hfalpha.py
4. **Compare** with `compare()` on six test sessions.

**What to change next.** Replace the ridge with gradient boosting (One Quant Book 12, chapter 5) and check that the out-of-sample coefficient improves; make the leader’s lag random from session to session and watch the leader’s coefficient.

![The two-second forecast on the validation sessions, sorted into tenths: mean forecast and mean realised change of the fund’s mid, in ticks. Data: hf_alpha.calibration.](https://one-course.com/images/onecourse/chapters/quant-11/hf-short-horizon-alpha/fig-a8e2c1a87cc1.svg)

***Figure 7.3.** The two-second forecast on the validation sessions, sorted into tenths: mean forecast and mean realised change of the fund’s mid, in ticks. Data: `hf_alpha.calibration`.*

## 7.8 Build: the short-horizon alpha engine

**Purpose.** One feature engine for research and trading, a forecast fitted and scored out of sample, and the couplings a market maker uses.

**Interface.** `FeatureEngine(window, lot, leader).update(t, kind, agg, qty, bid, bid_qty, ask, ask_qty)`; `stream(tape, window, leader)`; `target(times, mid, horizon)`; `Ridge.fit(X, y, lam)`, `.predict`; `ic`; `AlphaQuoter(model, window, leader, skew, take, lag, size, limit)`.

**Rules.** The engine sees only what a feed has shown; the leader is read as of the same time. Features in the quoter use the book without its own orders, as the model was fitted. Every score is out of sample.

**Acceptance tests.** `code/firm/hfalpha/tests/`: order-flow imbalance, trade flow, the leader’s and own move by hand on a five-message feed, including the window emptying; the target by hand; the ridge recovers a planted relation.

**Stretch.** Features on several book levels; a forecast per horizon, blended by the quoter’s holding time.

Sources and further reading

- R. Cont, A. Kukanov and S. Stoikov, “The price impact of order book events”, *Journal of Financial Econometrics* 12(1), 2014.
- P. N. Kolm, J. Turiel and N. Westray, “Deep order flow imbalance: extracting alpha at multiple horizons from the limit order book”, *Mathematical Finance* 33(4), 2023.
- Á. Cartea, R. Donnelly and S. Jaimungal, “Enhancing trading strategies with order book signals”, *Applied Mathematical Finance* 25(1), 2018.
- E. Budish, P. Cramton and J. Shim, “The high-frequency trading arms race: frequent batch auctions as a market design response”, *Quarterly Journal of Economics* 130(4), 2015.
- J.-P. Bouchaud, Y. Gefen, M. Potters and M. Wyart, “Fluctuations and response in financial markets: the subtle nature of random price changes”, *Quantitative Finance* 4(2), 2004.

## 7.9 Exercises

**Exercise 7.1 ★.**

The bid queue holds 12 lots and the ask 4. With the chapter’s coefficient of 0.30 ticks per unit of imbalance, what does the imbalance alone forecast?

**Solution of Exercise 7.1.**

Imbalance $(12-4)/16=0.5$; forecast $0.30\times0.5=0.15$ ticks.

**Exercise 7.2 ★.**

With a one-cent tick, a half-spread of half a tick and a taker fee of 0.1 cent a share, what is the smallest forecast at which taking breaks even, before any margin?

**Solution of Exercise 7.2.**

Half a tick plus the fee, 0.1 cent $=0.1$ tick: 0.6 ticks.

**Exercise 7.3 ★.**

The best bid rises from 99 to 100 with 3 lots, while the ask stays at 101 and grows from 5 to 6 lots. What is the order-flow imbalance increment?

**Solution of Exercise 7.3.**

Bid up: $+3$ (the new bid size, nothing removed); ask unchanged in price: $-6+5=-1$. The increment is $3-1=2$ lots.

**Exercise 7.4 ★★.**

Why does the own-move feature have a positive coefficient in this market, and what would you expect in a real stock?

**Solution of Exercise 7.4.**

The mid lags the efficient price for seconds, so a recent move tends to continue while the book catches up. In a real stock, where quotes follow information faster and impact partly reverts, the own move usually enters with a small or negative coefficient at these horizons.

**Exercise 7.5 ★★.**

From [Figure 7.1](#fig-hf-short-horizon-alpha-ic), which feature is best at half a second and which at ten seconds? What does that suggest about the coupling for a quoter that holds positions for five seconds?

**Solution of Exercise 7.5.**

Imbalance (0.187) at half a second; order-flow imbalance (0.372) at ten. A quoter holding for five seconds should weight the slower features: fit the forecast at the horizon it holds, not the shortest one.

**Exercise 7.6 ★★.**

Why can a forecast with an information coefficient of 0.48 rarely pay for crossing the spread?

**Solution of Exercise 7.6.**

The forecast’s typical size is its correlation times the target’s volatility, much smaller than the target itself; only a tiny share of forecasts exceed the cost of crossing (0.01% exceeded 0.9 ticks here). Its value lies in many small decisions about which quote to show.

**Exercise 7.7 ★★★.**

*Coding.* With `ic_by_delay()`, give the information coefficient of the two-second forecast made ten messages late, and the median time those messages take.

**Solution of Exercise 7.7.**

0.444, with ten messages taking a median of 451 milliseconds.

**Exercise 7.8 ★★★.**

*Find the flaw.* “Our backtest takes whenever the forecast exceeds the spread and earns 0.7 ticks a trade; it executes at the mid at the moment of the forecast.”

**Solution of Exercise 7.8.**

It executes at the mid, at the instant of the signal: taking costs half the spread and the fee, and the price available a message later has already moved with the signal. Rerun at the ask (or bid) of the next message with fees; the edge per trade falls by at least the half-spread.

## 7.10 Problem: Three to One on the Bid

**Problem 7.1.**

Weekend problem — three to one on the bid

A fund’s market maker must decide, message by message, which of its two quotes to show and when to cross.

**Part I — The forecast.**

1. Define [short-horizon alpha](#def-hf-short-horizon-alpha-alpha) and say how it differs from intraday alpha.
2. List the five features and how each is computed.
3. Give the out-of-sample information coefficients at two seconds, and the combination’s.
4. Interpret the per-unit coefficients of imbalance and of the leader’s move.
5. Why are these coefficients an upper bound for a real market?

**Part II — Horizons and age.**

6. How does the combination’s coefficient change from half a second to ten?
7. What did Kolm, Turiel and Westray find about the effective horizon?
8. Give the coefficient one, twenty and fifty messages late, and the times involved.
9. What does [Figure 7.3](#fig-hf-short-horizon-alpha-calib) show?

**Part III — Using it.**

10. Define a [forecast skew](#def-hf-short-horizon-alpha-skew) and describe it in a one-tick market.
11. Define the [take threshold](#def-hf-short-horizon-alpha-take) and derive the chapter’s 0.9 ticks.
12. How often does the forecast exceed each threshold?
13. Give the couplings’ passive shares and mark-outs.

**Part IV — The verdict.**

14. State the *named result* : the passive mark-out per share of the skewed quoter against the unskewed one, and the fraction of it lost one message late.
15. Why are the take results not evidence?
16. How does the skew relate to chapter 6’s fading?
17. Which strategy file has no edge in this market, and why?
18. How did the arms race change futures-led trading between 2005 and 2011?
19. What would you change in the backtest before believing the take mark-out?
20. In one sentence: what is a seconds-ahead forecast mainly for, for a market maker?

**Solution of Problem 7.1.**

1. A forecast over milliseconds to seconds from book, trades and related instruments, used mainly to decide which quotes to show; intraday alpha works at minutes and pays for crossing.
2. Queue imbalance; order-flow imbalance over one second; net aggressive volume over one second; the leader’s mid change over one second; the own mid change over one second.
3. 0.320, 0.285, 0.077, 0.288, 0.150; combined 0.480.
4. A fully bid-imbalanced book forecasts $+0.30$ ticks; a tick of the leader’s move $+0.34$ ticks.
5. The simulated mid trails its efficient price for seconds (lag-one correlation of two-second returns 0.44), which makes the next move unusually predictable.
6. 0.28 at half a second, 0.37 at one, 0.48 at two, 0.54 at five, 0.50 at ten.
7. About two average price changes.
8. 0.477 (33 ms), 0.405 (0.9 s), 0.303 (2.3 s).
9. Mean realised changes rise with the forecast across tenths, matching it closely at the extremes (top tenth 0.31 forecast, 0.33 realised).
10. Moving or withdrawing the side the forecast says will be picked off; in one tick: showing only the favourable side.
11. Cross when the forecast exceeds half the spread plus the taker fee plus a margin: $0.5+0.1+0.3=0.9$ ticks.
12. 0.01% of forecasts beyond 0.9 ticks, 5.8% beyond 0.3.
13. None 16 550 at 0.294; skew 11 050 at 0.451; skew and take 10 867 at 0.452; one message late 10 883 at 0.414.
14. 0.451 against 0.294 ticks a share; one message late the passive mark-out falls by 8% (0.452 to 0.414), while the forecast’s information coefficient falls by less than 1% (0.480 to 0.477).
15. About 25 takes in six sessions: their mark-out has a standard error as large as the differences.
16. Both withdraw a side; fading uses a forecast of the fill’s mark-out, the skew a forecast of the price’s direction; both give up a third of the volume for better fills.
17. Post-sweep reversion: in this market the own move predicts continuation.
18. Median arbitrage life fell from 97 ms to 7 ms while the median profit per opportunity stayed near 0.08 index points.
19. Execute a message later at the then-available price with fees, and count enough takes (more sessions) for a standard error.
20. Deciding which of its own quotes to leave in the book.

## 7.11 Interview questions

**Interview question 7.1 ★ trader.**

The future just ticked up and your fund quote has not moved. What do you do with your ask, and why?

**Solution of Interview question 7.1.**

Withdraw or raise the fund’s ask: the future’s move will reach the fund, and a stale ask will be lifted by whoever reads the future faster; keep the bid.

*What the interviewer is looking for: the leader’s move as a forecast and protecting the stale side.*

**Interview question 7.2 ★★ researcher.**

Define order-flow imbalance at the best prices and explain why it predicts price changes better than signed trade volume.

**Solution of Interview question 7.2.**

The change of the bid queue (counting a better bid as its new size, a worse one as the loss of the old) minus the same for the ask, summed over events. It includes cancellations and new limit orders, which move the price as much as trades do, while signed volume sees only executions.

*What the interviewer is looking for: the definition and why cancellations matter.*

**Interview question 7.3 ★★ researcher.**

How do you evaluate a forecast whose target windows overlap, message after message?

**Solution of Interview question 7.3.**

Overlapping targets make neighbouring errors correlated: use HAC standard errors (One Quant Book 7, chapter 6), evaluate on sessions not used for fitting, and report the information coefficient by horizon.

*What the interviewer is looking for: overlap, HAC errors, out-of-sample sessions.*

**Interview question 7.4 ★★ developer.**

Research computed features from stored data; production computes them from the live feed. How do you make sure they are the same numbers?

**Solution of Interview question 7.4.**

One feature engine for both, fed message by message; a replay test that runs the production engine over stored feeds and compares its output to research’s, value by value.

*What the interviewer is looking for: a single implementation and a parity test.*

**Interview question 7.5 ★★ trader, researcher.**

When should a market maker take instead of make? Give the threshold and what goes into its margin.

**Solution of Interview question 7.5.**

When the forecast exceeds half the spread plus the taker fee plus a margin; the margin covers the forecast’s error, its age by the time the order arrives, and the chance that faster traders took the move first.

*What the interviewer is looking for: the threshold and its components.*

**Interview question 7.6 ★★★ researcher.**

A forecast $\hat\alpha$ of a price change $y$ has correlation $\rho$ with it, and $\hat\alpha$ is the conditional mean. If $y$ has standard deviation $s$, how often, roughly, does $|\hat\alpha|$ exceed a threshold $c$ when $\hat\alpha$ is Gaussian? Apply it to $\rho=0.48$, $s=0.6$ ticks, $c=0.9$.

**Solution of Interview question 7.6.**

The conditional mean has standard deviation $\rho s$, so $P(|\hat\alpha|>c)=2\Phi(-c/(\rho s))$: with $\rho s=0.288$ and $c=0.9$, $2\Phi(-3.13)
\approx0.18\%$.

*What the interviewer is looking for: the variance of a forecast and a Gaussian tail.*
