---
title: "Index and Basket Arbitrage"
book: "Market Making and High-Frequency Trading"
subject: quant
language: en
chapter: 13
exercises: 8
source: https://one-course.com/books/quant/11/en/chapter/13-index-and-basket-arbitrage
---

# Chapter 13 — Index and Basket Arbitrage

The index future ticks up and five hundred stocks have not moved yet. Buying all five hundred takes longer than the gap lasts, so the arbitrageur buys the thirty that matter and accepts the risk of the rest. In this chapter’s simulated index of fifty names, an arbitrageur who sends one leg every twenty microseconds earns most per trade with a basket of five names and the best ratio of edge to risk with fifteen; one that sends a leg every two microseconds earns most with ten, and its best ratio of edge to risk is with all fifty.

## 13.1 The futures–cash basis at high frequency

Index arbitrage (One Quant Book 9, chapter 26) holds the future to its fair value (Book 1, chapter 21), $F=S\,e^{(r-q)T}$, within a band set by the costs of trading the future and the basket. At a horizon of days it is a financing trade; at a horizon of milliseconds it is a lead–lag trade (chapter 8): the future, one instrument with one order book, reacts to market-wide news before the hundreds of order books of the index’s constituents do, and for a moment the basis leaves its band because the cash side is stale.

The band’s width is a matter of liquidity. Roll, Schwartz and Subrahmanyam studied the NYSE Composite index future’s basis against the NYSE’s aggregate liquidity over some 3 000 trading days: liquidity and the absolute basis forecast each other, with two-way Granger causality at short horizons, and shocks to the basis predicted later liquidity. The arbitrage keeps prices together when the market is liquid enough to let it.

## 13.2 Partial baskets and tracking risk

**Definition 13.1 (Partial basket).**

A *partial basket* is a subset of an index’s constituents, with weights chosen to track the index as closely as possible, traded in place of the full basket to save time and cost at the price of tracking error.

With a covariance matrix $\Sigma$ of the constituents’ returns and index weights $w$, the tracking variance of a basket $h$ is $(h-w)^\top\Sigma(h-w)$. For a given set $S$ of names the minimising weights solve $\Sigma_{SS}h_S=(\Sigma w)_S$; the set is chosen greedily, one name at a time, each the one that most reduces the tracking variance ([Listing 13.1](#lst-hf-index-and-basket-arbitrage-partial)). In a one-factor model the first names chosen are the largest and the most typical; the basket’s beta approaches one as names are added. In the chapter’s fifty-name index, the ten largest names are half its weight; a five-name basket holds 73% of the notional with a beta of 0.83, a fifteen-name basket 90% with a beta of 0.94.

## 13.3 Legging and execution risk

**Definition 13.2 (Legging risk).**

*Legging risk* is the risk that the prices of the legs of a multi-instrument trade move between the execution of the first leg and the last, so that the trade completes at worse prices than those that justified it, or does not complete.

The arbitrageur’s edge on a leg is the move it captures by buying before that stock’s market makers update their quotes. The legs leave one after another through the firm’s order gateway: with $k$ legs sent every $\delta$ microseconds, the last arrives $k\delta$ after the first. If a stock’s quote updates after an exponential delay of mean $\tau$, leg $j$ arrives in time with probability $e^{-j\delta/\tau}$. More names bring lower tracking error and more weight in the trade, but the later legs arrive after their stocks have moved, and each name added is smaller and has a wider spread. The best basket size balances the three.

![Net edge per trade (capture less costs, basis points of the notional) against the size of the partial basket, when the future jumps 3 basis points and each stock’s quote follows after an exponential delay of mean 400 microseconds; legs sent every 20 or every 2 microseconds; costs are the legs’ and the future’s half-spreads in and out. 20 000 trades per point. Data: hf_basket.sweep.](https://one-course.com/images/onecourse/chapters/quant-11/hf-index-and-basket-arbitrage/fig-fe2aa38c2d4a.svg)

***Figure 13.1.** Net edge per trade (capture less costs, basis points of the notional) against the size of the [partial basket](#def-hf-index-and-basket-arbitrage-partial), when the future jumps 3 basis points and each stock’s quote follows after an exponential delay of mean 400 microseconds; legs sent every 20 or every 2 microseconds; costs are the legs’ and the future’s half-spreads in and out. 20 000 trades per point. Data: `hf_basket.sweep`.*

## 13.4 Financing and dividend risk

Held beyond the day, the position carries the terms of the fair value: the financing rate (the implied financing rate of Book 1, chapter 21, against the arbitrageur’s own) and the dividends. A dividend yield forecast wrong by 0.2% a year moves the fair value of a three-month future by 5 basis points, more than the whole high-frequency edge; dividend risk (One Quant Book 5, chapter 5) is why the high-frequency version of the trade is closed within seconds and the slow version is a separate book with its own dividend forecasts.

## 13.5 The same index on several futures

**Definition 13.3 (Cross-listed futures).**

*Cross-listed futures* are futures on the same index listed on different exchanges or in different sizes or currencies; their prices are tied by the index, and their gaps reflect differences in currency, contract terms, trading hours and liquidity.

The same index trades as a full-size contract, a mini, a micro, and on exchanges in several time zones. A position in one is hedged in another in the ratio of their multipliers and currencies: an Osaka contract of ¥1 000 times the Nikkei is matched by $1\,000/(5\times150)=1.33$ contracts of a hypothetical dollar-denominated listing paying $5 a point, at 150 yen to the dollar. The arbitrage between them is a lead–lag trade (chapter 8) between two order books on one index, with the currency as a third leg when the contracts are denominated differently, and a quanto adjustment in the fair gap.

**As of September 2026 — Micro contracts and one index on three exchanges.**

CME Group launched Micro E-mini futures on the S&P 500, Nasdaq-100, Russell 2000 and Dow Jones Industrial Average indexes on 6 May 2019, one-tenth the size of its E-mini contracts. Nikkei 225 futures trade on the Singapore Exchange and CME Group (¥500 times the index, in yen or dollars, tick 5 points) and on the Osaka Exchange (¥1 000 times the index, in yen, tick 10 points), as a broker’s comparison of June 2024 describes; under their mutual offset system a position opened on CME or SGX can be closed on the other the same day.

## 13.6 Strategy files

**Strategy file 13.1 — Futures against an optimised partial basket.**

**Who pays you, and why.** Market makers in the constituents whose quotes lag a market-wide move shown first in the future.

**Instruments and venues.** An index future and a [partial basket](#def-hf-index-and-basket-arbitrage-partial) of its constituents on their lit venues.

**Signal.** The future’s move through the fair value to index points, against the basket’s quoted value.

**Sizing and execution.** Buy (sell) the [partial basket](#def-hf-index-and-basket-arbitrage-partial) leg by leg, largest weights first, and sell (buy) the future; choose the basket size from the speed of the gateway and the constituents’ quote lags; unwind in seconds as the stocks catch up.

**Costs.** Half-spreads on every leg in and out (wider for small names), the future’s, fees; tracking error while held.

**How it dies.** Speed: with legs every 2 microseconds instead of 20, the best basket grows from 5 names to 10 and the edge by half; the arbitrageur with the fastest gateway sets the price of every slower one.

**Horizon, capacity, infrastructure.** Microseconds to seconds; capacity from the constituents’ top-of-book sizes; a gateway that sends many orders at once (One Quant Book 13).

**Backtest honestly.** Each stock’s own quote-update times after the future’s move; the legs’ real send times; fills only at quotes that existed when the order arrived.

**Sources.** Roll, Schwartz and Subrahmanyam (2007); this chapter.

**Strategy file 13.2 — Cross-listed index futures arbitrage.**

**Who pays you, and why.** Participants in the less liquid listing, whose prices follow the leading one late.

**Instruments and venues.** One index’s futures on two exchanges (the Nikkei in Osaka, Singapore and Chicago), and the currency.

**Signal.** The gap between the listings beyond its fair value (currency, quanto adjustment, financing, expiry and settlement differences).

**Sizing and execution.** Take the lagging listing, hedge in the leading one in the ratio of multipliers and currencies; hold to convergence or offset across exchanges where a mutual offset arrangement allows.

**Costs.** Two futures’ spreads and fees, the currency hedge, margin at two clearing houses.

**How it dies.** The leader changes with the time of day: each listing leads in its own market’s hours.

**Horizon, capacity, infrastructure.** Milliseconds (co-located) to minutes; long-distance links between the exchanges’ data centres.

**Backtest honestly.** Clocks synchronised across continents; the currency’s price at each trade; the fair gap’s inputs as known at the time.

**Sources.** Contract terms (dated box); chapter 8.

**Strategy file 13.3 — Mini against full-size contract arbitrage.**

**Who pays you, and why.** Traders in the smaller contract, whose order book updates after the larger one.

**Instruments and venues.** A full-size or E-mini contract and its mini or micro contract on the same exchange.

**Signal.** The price gap between the two in index points (their fair gap is zero for the same expiry and settlement).

**Sizing and execution.** Ten micros against one E-mini; quote the micro around the E-mini’s price, or take when the gap exceeds costs.

**Costs.** Fees per contract, which weigh ten times more on the micro’s notional; the tick is the same in index points.

**How it dies.** Many participants quote both books from the same data; the gap rarely exceeds a tick.

**Horizon, capacity, infrastructure.** Microseconds; capacity from the small contract’s depth.

**Backtest honestly.** The exchange’s matching order between the two books; fees per contract.

**Sources.** CME Group’s launch of the Micro E-mini (dated box).

## 13.7 Tutorial: thirty names out of five hundred

**Goal.** Find the basket size that maximises the net edge of a high-frequency index arbitrage, and how it depends on the speed of the legs. **End state:** [Figure 13.1](#fig-hf-index-and-basket-arbitrage-edge) and the table below.

1. **The index.** `firm.basketarb.Index` : fifty names with lognormal capitalisation weights, betas 0.6–1.4 scaled so that the index’s is one, idiosyncratic volatility 1–3% a day, half-spreads from 0.5 basis point for the largest name to 1.7 for the smallest.
2. **The [partial basket](#def-hf-index-and-basket-arbitrage-partial)** ([Definition 13.1](#def-hf-index-and-basket-arbitrage-partial)), chosen greedily. `def partial_basket (w, cov, k: int ) -> tuple [np.ndarray, np.ndarray]: """Add, one at a time, the name that most reduces the tracking variance with least-squares weights on the chosen set; returns (indices, weights on all names).""" w = np.asarray(w, float ) n = len (w) target = cov @ w chosen: list [int ] = [] best_h = np.zeros(n) for _ in range (k): best = (math.inf, -1 , None ) for j in range (n): if j in chosen: continue S = chosen + [j] hS = np.linalg.solve(cov[np.ix_(S, S)], target[S]) h = np.zeros(n) h[S] = hS v = tracking_var(w, h, cov) if v < best[0 ]: best = (v, j, h) chosen.append(best[1 ]) best_h = best[2 ] return np.array(chosen), best_h` **Listing 13.1.** Greedy choice of names; least-squares weights on the chosen set. code/firm/basketarb/firm_basketarb.py
3. **The trade.** The future jumps 3 basis points; each stock’s quote follows after an exponential delay of mean 400 microseconds; the legs leave every 20 (or 2) microseconds, largest first; hold ten seconds. `rng = np.random.default_rng(seed) idx, h = partial_basket(ix.w, ix.cov, k) hS = h[idx] if order == " weight " : o = np.argsort(-hS) idx, hS = idx[o], hS[o] arrive = leg_us * np.arange(1 , k + 1 ) lags = rng.exponential(lag_us, (n_trades, k)) early = arrive[None , :] < lags capture = (early * (hS * ix.beta[idx])[None , :]).sum(axis=1 ) * jump_bp costs = 2.0 * float (np.sum(hS * ix.hs[idx])) + 2.0 * fut_hs_bp te = math.sqrt(tracking_var(ix.w, h, ix.cov) * hold_s / SECONDS_PER_DAY) * 1e4 noise = rng.standard_normal(n_trades) * te pnl = capture - costs + noise` **Listing 13.2.** Legs in time capture their stock’s move; costs in and out; tracking noise over the holding. code/firm/basketarb/firm_basketarb.py
4. **Sweep** the basket size from one name to fifty ( `hf_basket.sweep` ).

**What to change next.** Send the legs in parallel over several gateways; let the quote delays depend on each stock’s liquidity; add the future’s own lead over a second, slower future.

| names | 1 | 5 | 10 | 15 | 30 | 50 |
| --- | --- | --- | --- | --- | --- | --- |
| capture (bp) | 1.44 | 2.13 | 2.17 | 2.10 | 1.84 | 1.72 |
| costs (bp) | 0.93 | 1.21 | 1.29 | 1.39 | 1.52 | 1.65 |
| tracking s.d. (bp) | 1.74 | 0.92 | 0.62 | 0.44 | 0.16 | 0 |
| net edge (bp) | 0.51 | 0.92 | 0.88 | 0.71 | 0.32 | 0.07 |
| edge / s.d. | 0.29 | 0.91 | 1.24 | 1.33 | 1.06 | 0.32 |
| net edge, legs every 2 $\mu$s (bp) | 0.57 | 1.23 | 1.36 | 1.34 | 1.28 | 1.15 |

With a leg every twenty microseconds, the net edge peaks at five names (0.92 basis point a trade) and the edge per unit of risk at fifteen. Buying all fifty captures less (the last legs arrive a millisecond after the future moved, when most quotes have updated) and pays more (the small names’ spreads) for a trade that is nearly riskless and nearly worthless: 0.07 basis point. Ten times faster legs move the best edge to ten names (1.36 basis points) and make the full basket the best per unit of risk. When the stocks’ quotes follow faster (a mean of 150 microseconds), the best basket is two names; slower (a millisecond), ten.

## 13.8 Build: the basket arbitrage module

**Purpose.** Choose [partial baskets](#def-hf-index-and-basket-arbitrage-partial), set basis bands, simulate legging, and size cross-listed hedges.

**Interface.** `covariance`, `tracking_var`, `partial_basket(w, cov, k)`, `fair_future`, `basis_band`, `Index(n, seed)`, `trade(index, k, jump_bp, leg_us, lag_us, hold_s)`, `cross_listed`, `hedge_ratio`.

**Rules.** Weights are least-squares on the chosen set; legs leave largest first; all P&L in basis points of the notional.

**Acceptance tests.** `code/firm/basketarb/tests/`: covariance and tracking variance by hand; tracking variance falls with each name and is zero for the full index; the greedy pair is no better than the best pair by brute force; fair future and band by hand; faster legs capture more at equal cost; with every leg in time the capture is the jump.

**Stretch.** Parallel gateways; tick sizes and minimum lots; optimal ordering of legs by quote-update speed rather than weight.

Sources and further reading

- R. Roll, E. Schwartz, A. Subrahmanyam, Liquidity and the law of one price: the case of the futures-cash basis, *Journal of Finance* 62(5), 2007, 2201–2234.
- CME Group, announcement of the launch of Micro E-mini equity index futures, 6 May 2019.
- Phillip Nova, Differences between the Nikkei 225 futures contracts on SGX, CME Group and OSE, 5 June 2024.

## 13.9 Exercises

**Exercise 13.1 ★.**

An index is at 5 000, the rate 5%, the dividend yield 1.5%, and the future expires in three months. What is its fair value, and the band at 1 basis point of costs?

**Solution of Exercise 13.1.**

$5\,000\,e^{(0.05-0.015)\times0.25}=5\,043.94$; the band is 5 043.44 to 5 044.45.

**Exercise 13.2 ★.**

How many Micro E-mini contracts hedge one E-mini? How many contracts of a hypothetical dollar-denominated Nikkei listing paying $5 a point hedge one Osaka contract of ¥1 000 a point at 150 yen to the dollar?

**Solution of Exercise 13.2.**

Ten micros per E-mini. $1\,000/(5\times150)=1.33$ dollar contracts per Osaka contract.

**Exercise 13.3 ★.**

By how many basis points does a dividend forecast wrong by 0.2% a year move a three-month future’s fair value?

**Solution of Exercise 13.3.**

$e^{0.002\times0.25}-1\approx5.0$ basis points.

**Exercise 13.4 ★★.**

With legs every 20 microseconds and quote delays of mean 400, what is the probability that the tenth leg arrives in time? The thirtieth?

**Solution of Exercise 13.4.**

$e^{-200/400}=0.61$ and $e^{-600/400}=0.22$.

**Exercise 13.5 ★★.**

Why does the edge per unit of risk peak at a larger basket than the edge itself?

**Solution of Exercise 13.5.**

Adding names past the edge’s peak lowers the edge slowly but the tracking noise quickly (from 0.92 to 0.44 basis point between five and fifteen names), so the ratio keeps rising until the loss of capture and the small names’ spreads dominate.

**Exercise 13.6 ★★.**

Why are the largest names sent first?

**Solution of Exercise 13.6.**

The first legs are the most likely to arrive in time; putting the largest weights there maximises the weight captured.

**Exercise 13.7 ★★★.**

*Coding.* Rerun the sweep with quote delays of mean 150 and 1 000 microseconds. Which basket sizes maximise the edge and the edge per unit of risk?

**Solution of Exercise 13.7.**

Mean 150 microseconds: the edge peaks at two names and the edge per unit of risk at three. Mean 1 000 microseconds: ten and forty. The slower the stocks follow, the more legs arrive in time and the bigger the best basket.

**Exercise 13.8 ★★★.**

*Find the flaw.* “Our backtest buys all 500 names at the prices displayed when the future moved; the full basket has no tracking error, so it is the best trade.”

**Solution of Exercise 13.8.**

The legs are not sent at once: in the chapter’s simulation the fiftieth leg arrives a millisecond after the future, when most stocks’ quotes have already moved. A backtest that fills every leg at the displayed price overstates the capture of large baskets; the full basket’s edge was 0.07 basis point, not the 1.35 an instantaneous fill would give.

## 13.10 Problem: Thirty Names out of Five Hundred

**Problem 13.1.**

Weekend problem — thirty names out of five hundred

An arbitrageur trades an index future against its constituents when the future moves first.

**Part I — The basis.**

1. Write the fair value and the no-arbitrage band.
2. Why does the basis leave its band at high frequency, and why does it come back?
3. What did Roll, Schwartz and Subrahmanyam find about liquidity and the basis?
4. Why do dividend forecasts matter to the slow trade and not to the fast one?

**Part II — Baskets and legs.**

5. Define a [partial basket](#def-hf-index-and-basket-arbitrage-partial) and its tracking variance.
6. How are the names and weights chosen?
7. Define [legging risk](#def-hf-index-and-basket-arbitrage-legging) and write the probability that leg $j$ is in time.
8. Why does each added name cost more than the one before?

**Part III — Measurements.**

9. Give capture, costs and net edge for 1, 5, 15 and 50 names at 20 microseconds a leg.
10. Where do the edge and the edge per unit of risk peak?
11. What changes with legs every 2 microseconds?
12. What changes when the quotes follow in 150 microseconds or a millisecond?

**Part IV — The verdict.**

13. State the *named result* : the net edge per trade as a function of the basket size, and the size that maximises it.
14. Define [cross-listed futures](#def-hf-index-and-basket-arbitrage-cross) and the hedge ratio between two of them.
15. What does the dated box say about micro contracts and the Nikkei’s listings?
16. Which of the three strategy files depends most on speed?
17. Why does the arbitrage make the market better for everyone else?
18. What would a 500-name index change?
19. How would you estimate the stocks’ quote delays from data?
20. In one sentence: what decides the size of the basket?

**Solution of Problem 13.1.**

1. $F=Se^{(r-q)T}$ , and $F(1\pm c)$ with $c$ the costs.
2. The future reacts first and the stocks’ quotes follow with delays; arbitrageurs and the stocks’ own market makers close the gap.
3. Liquidity and the absolute basis forecast each other, with two-way Granger causality at short horizons, over some 3 000 days.
4. The slow trade holds to expiry and bears the dividend forecast; the fast one is closed in seconds.
5. See [Definition 13.1](#def-hf-index-and-basket-arbitrage-partial) ; $(h-w)^\top\Sigma(h-w)$ .
6. Greedily, each name the one that most reduces the tracking variance, with weights solving $\Sigma_{SS}h_S=(\Sigma w)_S$ .
7. See [Definition 13.2](#def-hf-index-and-basket-arbitrage-legging) ; $e^{-j\delta/\tau}$ .
8. It arrives later and it is a smaller name with a wider spread.
9. 1 name: 1.44, 0.93, 0.51; 5: 2.13, 1.21, 0.92; 15: 2.10, 1.39, 0.71; 50: 1.72, 1.65, 0.07 (basis points).
10. Edge at 5 names, edge per unit of risk at 15.
11. The edge peaks at 10 names (1.36) and the ratio at all 50.
12. The best basket is 2 names at 150 microseconds and 10 at a millisecond.
13. At 20 microseconds a leg, net edge 0.51, 0.92, 0.88, 0.71, 0.32 and 0.07 basis point for 1, 5, 10, 15, 30 and 50 names: five names maximise the edge and fifteen the edge per unit of risk.
14. See [Definition 13.3](#def-hf-index-and-basket-arbitrage-cross) ; the ratio of multipliers times currencies.
15. Micro E-minis, one-tenth of the E-mini, since 6 May 2019; the Nikkei on SGX and CME at ¥500 a point and in Osaka at ¥1 000.
16. The [partial basket](#def-hf-index-and-basket-arbitrage-partial) : its best size is set by the gateway’s speed.
17. It keeps the future and the stocks together, so that hedgers in either pay a [fair price](https://one-course.com/books/quant/11/en/chapter/2-fair-value#def-hf-fair-value-fair) .
18. More, smaller names: the best basket would still be a few dozen, with more tracking error left.
19. From the time between the future’s move and each stock’s first quote change, by stock and time of day.
20. The race between the legs and the stocks’ quotes, priced against spreads and tracking error.

## 13.11 Interview questions

**Interview question 13.1 ★ trader.**

The E-mini is 2 points above its fair value. Walk through what you check before you trade.

**Solution of Interview question 13.1.**

The fair value’s inputs (financing, dividends to expiry), the costs of the basket and the future, whether the stocks have already moved (the gap may be stale data), and the size available.

*What the interviewer is looking for: fair value inputs and executable prices.*

**Interview question 13.2 ★★ researcher.**

Derive the least-squares weights of a [partial basket](#def-hf-index-and-basket-arbitrage-partial) and show that they minimise the tracking variance for the chosen names.

**Solution of Interview question 13.2.**

Minimise $(h-w)^\top\Sigma(h-w)$ over $h$ with $h_j=0$ off $S$: the gradient on $S$ is $2(\Sigma(h-w))_S=0$, so $\Sigma_{SS}h_S=(\Sigma w)_S$; the objective is convex, so this is the minimum.

*What the interviewer is looking for: first-order conditions on the subset.*

**Interview question 13.3 ★★ developer.**

You must send 50 orders as fast as possible after a market-data packet. What limits you, and how do you get them out in parallel?

**Solution of Interview question 13.3.**

Serialisation on one session and one network card, the exchange’s per-session throttle, and the gateway’s per-order work; pre-build the orders, spread them across sessions and cards, and send in parallel.

*What the interviewer is looking for: pre-computation and parallel sessions.*

**Interview question 13.4 ★★ risk.**

Half the legs of a basket trade filled and the rest did not. What is your exposure, and what should the system do?

**Solution of Interview question 13.4.**

Long the filled stocks against a future sized for the whole basket: a factor exposure and the unfilled names’ tracking error. Resize the future hedge to the filled legs at once, then decide whether to complete or unwind.

*What the interviewer is looking for: hedge what is filled, immediately.*

**Interview question 13.5 ★★ trader.**

The Nikkei trades in Osaka, Singapore and Chicago. Which leads, and when?

**Solution of Interview question 13.5.**

Each listing tends to lead in its home market’s hours: Osaka in the Tokyo day, Singapore and Chicago when Osaka is closed; measure it rather than assume it (chapter 8).

*What the interviewer is looking for: time-varying leadership, measured.*

**Interview question 13.6 ★★★ researcher.**

With leg spacing $\delta$, exponential quote delays of mean $\tau$ and equal weights, find the number of legs that maximises the expected capture less a cost per leg.

**Solution of Interview question 13.6.**

Expected capture $\propto\sum_{j=1}^{k}e^{-j\delta/\tau}$ less $ck$; the marginal leg is worth adding while $e^{-k\delta/\tau}>c$ (in capture units), so $k^\ast=\lfloor(\tau/\delta)\ln(1/c)\rfloor$.

*What the interviewer is looking for: the marginal leg.*
