Quantitative Finance · Book 11 · Market making

Market Making and High-Frequency Trading

Market Making and High-Frequency Trading · Market making

18News and Event Trading

At half past eight on the first Friday of the month a number is released. Within a millisecond futures trade in Chicago, and the market makers who did not want to be part of it pulled their quotes a second before. In this chapter’s release model the fastest tier of traders, 50 microseconds from the number, takes 88% of everything the release’s stale quotes give away and the next tier the rest; a market maker who leaves its quotes loses 58 tick-lots a release, and one that pulls them and comes back five seconds later earns 29% more over the next two minutes than one that never left.

18.1 Scheduled numbers and the release race

Economic releases (One Quant Book 2, chapter 31) arrive at known times with a consensus forecast; the price moves with the data surprise. Their publishers control who sees the number first.

Definition 18.1 (Release lock-up)

A release lock-up is an arrangement in which a statistical agency or data publisher gives journalists or data vendors the number before its public release, under embargo and without outside communication, so that stories and feeds are ready at the release time.

Definition 18.2 (Release race)

A release race is the latency race (chapter 9) triggered by a scheduled release: traders who receive and parse the number first take the quotes that the number has made stale, in every instrument that depends on it.

The race’s outcome depends on who gets the number first, and on how quickly the quotes it makes stale are withdrawn. Hu, Pan and Wang studied a period from 2007 to June 2013 when select high-speed traders received the Michigan index of consumer sentiment two seconds before its public release: trading was highly concentrated in those two seconds and price discovery took less than 200 milliseconds. Comparing with other releases and with the period after the arrangement ended, they concluded that the tiered release may have reduced, rather than enhanced, the informational advantage of the fastest traders, and made price discovery more efficient.

As of September 2026 — Early access, a hacked headline and a tweet

On 8 July 2013 the New York Attorney General announced that Thomson Reuters had agreed to discontinue immediately the practice of providing high-frequency traders with certain market-moving consumer survey results two seconds before its other subscribers. On 23 April 2013, just after 1 p.m., a false tweet from the Associated Press’s hacked account reported explosions at the White House; the Dow Jones Industrial Average, the Nasdaq and the S&P 500 spiked downward for a few minutes until traders realised it was false. On 29 September 2018 the SEC announced that Elon Musk and Tesla would each pay a $20 million penalty and that Musk would step down as chairman, settling charges over his tweets that he could take Tesla private at $420 a share with funding secured.

18.2 Machine-readable headlines

Machine-readable news (One Quant Book 8, chapter 17) sends headlines and numbers in fields a program can parse without reading. The trader that parses first wins the race; the trader that parses wrongly loses it. A strategy that captures 2 ticks when it reads a headline right and loses 10 when it reads it wrong earns 1.76 ticks a headline at a 2% error rate and loses at 20%: misparsing, not speed, is often the binding constraint once a firm is fast enough.

18.3 Social media and unscheduled events

Unscheduled events arrive without a consensus, often through channels built for people rather than machines, and sometimes false. The April 2013 hack in the dated box moved the whole US market for minutes; a tweet by a company’s chief executive moved its stock and ended in a settlement. A market maker cannot win a race it does not know has started; what it can do is recognise that one has, and protect its quotes.

18.4 The market maker’s event protocol

Definition 18.3 (Event protocol)

An event protocol is a market maker’s written schedule for a known event: when to cancel or widen quotes before it, which inputs must be updated before quoting resumes, when and how wide to re-enter, and which limits apply until normal quoting resumes.

The chapter’s model (Listing 18.1): the number’s surprise moves the future’s fair value by three ticks per standard deviation; ten levels of fifty lots each, from providers who update 20 milliseconds after the release, plus our market maker’s twenty lots at each of the first three levels; four tiers of takers at 0.05, 1, 5 and 50 milliseconds, two hundred lots each. A lot taken kk ticks from the old price earns J−kJ-k ticks for a move of JJ.

takers’ latency0.05 ms1 ms5 ms50 ms
share of the stale quotes’ value captured88.1%11.6%0.3%0

The race is winner-take-most: 223 tick-lots of stale value per release, almost all to the first tier. Our market maker’s quotes sit behind the others’ (it was not first to the level) and still lose 57.5 tick-lots a release on average (Listing 18.2): at $12.50 a tick, $719.

The protocol’s second half is re-entry. After the release the flow is heavy (twenty-one times normal at first, decaying over thirty seconds) and toxic (a mark-out of three ticks at first, decaying over five seconds). Quoting from tt seconds until two minutes after the release earns (Figure 18.1): 872 tick-lots from the release itself, 911 from half a second, 1 052 from five seconds, and less after that as the volume fades. A market maker that stays through the release earns 872−58=814872-58=814; one that pulls and re-enters at five seconds earns 1 052.

Spread less mark-outs earned by quoting from the re-entry time until two minutes after a release, in tick-lots, when post-release flow starts at twenty-one times normal and decays over thirty seconds and its mark-out starts at three ticks and decays over five; dashed, a market maker that never pulled its quotes, after its loss in the race. Data: hf_news.reentry_curve.
Figure 18.1. Spread less mark-outs earned by quoting from the re-entry time until two minutes after a release, in tick-lots, when post-release flow starts at twenty-one times normal and decays over thirty seconds and its mark-out starts at three ticks and decays over five; dashed, a market maker that never pulled its quotes, after its loss in the race. Data: hf_news.reentry_curve.

18.5 Risk controls for event trading

Event trading concentrates risk in seconds. The controls of chapter 27 apply with event-specific settings: position and loss limits that tighten before a release, a check that the parsed number is within a plausible range of the consensus before a taking strategy acts on it, a maximum size per headline, and a kill switch that a human can reach within the event’s window. The market maker’s protocol is itself a risk control: an automated cancel at a scheduled time, verified before the event, not left to a trader’s reflexes.

18.6 Strategy files

Strategy file 18.1 — Macro-release race in futures

Who pays you, and why. Providers whose quotes are stale for the milliseconds after a scheduled number.

Instruments and venues. Rates, equity index and currency futures; the release’s official feed or a vendor’s.

Signal. The surprise against consensus, mapped to each instrument’s move from past releases.

Sizing and execution. Take the stale levels inside the expected move, largest first; exit into the post-release flow.

Costs. Feed and co-location at the release point and the exchanges; fees; the wrong-sign risk if the mapping is wrong.

How it dies. The race: the first tier takes 88% of the value in the model; the second-fastest has little.

Horizon, capacity, infrastructure. Microseconds to seconds; capacity from stale depth, which protocols shrink.

Backtest honestly. The release’s exact timestamp at the trader’s location, the depth that was resting then, and the fastest competitor.

Sources. Hu, Pan and Wang (2017); this chapter.

Strategy file 18.2 — Machine-readable earnings headline race

Who pays you, and why. Providers in the stock and its options whose quotes lag the headline.

Instruments and venues. The stock, its options, its sector fund; a machine-readable news feed.

Signal. Parsed fields (earnings, guidance) against consensus.

Sizing and execution. Small sizes, scaled by parsing confidence; stop on any field outside its plausible range.

Costs. The feed; misparsing (a 20% error rate turns 2-tick captures and 10-tick losses into a loss).

How it dies. Parsing errors and faster competitors on the same feed.

Horizon, capacity, infrastructure. Milliseconds to minutes.

Backtest honestly. Feed timestamps at receipt, not at publication; the headlines as first sent, including corrections.

Sources. One Quant Book 8, chapter 17.

Strategy file 18.3 — Social-media headline reaction

Who pays you, and why. Slower traders reacting to the same post; or, on false posts, the traders who acted on them.

Instruments and venues. Index futures and the stocks named; social media feeds.

Signal. Posts from verified sources, with credibility scores and confirmation from other sources.

Sizing and execution. Tiny until confirmed; fading moves that lack confirmation, as after the April 2013 hack.

Costs. False positives; the feed.

How it dies. Hacked or false accounts; regulatory action against manipulative posting.

Horizon, capacity, infrastructure. Seconds to minutes.

Backtest honestly. Posts as they appeared, including deleted ones, with the timestamp of receipt.

Sources. The dated box.

Strategy file 18.4 — Market-maker event protocol: pull, widen, re-enter

Who pays you, and why. The heavy post-release flow, once its toxicity has decayed.

Instruments and venues. Every instrument the market maker quotes that the release moves.

Signal. The release calendar; after the release, the decay of mark-outs.

Sizing and execution. Cancel before the release; re-enter after the toxic seconds (five in the model) at a wider spread, narrowing as mark-outs decay.

Costs. The spread foregone in the seconds out of the market.

How it dies. Unscheduled events, for which there is no calendar.

Horizon, capacity, infrastructure. Seconds; an automated scheduler verified before each event.

Backtest honestly. Post-release fills and mark-outs by second after the release, not averaged over the day.

Sources. This chapter: 1 052 tick-lots re-entering at five seconds against 814 staying.

18.7 Tutorial: half past eight

Goal. Measure who captures a release’s stale quotes, what a market maker loses by staying, and when it should come back. End state: the table and Figure 18.1.

  1. The race: tiers in latency order take stale levels inside the move.

    def race(J: int, stale_lots, tiers, stale_ms: float) -> tuple[np.ndarray, np.ndarray]:
        """stale_lots[k] is the lots resting k+1 ticks from the old price on the side the move takes out. tiers: list of
        (latency_ms, capacity_lots). Returns the tick-lots each tier captures and the lots taken at each level."""
        J = abs(J)
        left = np.array(stale_lots, float)
        taken = np.zeros_like(left)
        got = np.zeros(len(tiers))
        order = sorted(range(len(tiers)), key=lambda i: tiers[i][0])
        for i in order:
            lat, cap = tiers[i]
            if lat >= stale_ms:
                continue
            for k in range(min(J - 1, len(left))):          # levels strictly inside the move are worth taking
                q = min(cap, left[k])
                got[i] += q * (J - (k + 1))
                left[k] -= q
                taken[k] += q
                cap -= q
                if cap <= 0:
                    break
        return got, taken
    Listing 18.1. Fastest first, each tier up to its capacity; a lot kk ticks from the old price earns J−kJ-k. code/firm/newsrace/firm_newsrace.py
  2. The market maker’s loss from the back of each level’s queue.

    def mm_loss(J: int, mm_lots, other_lots, tiers, stale_ms: float) -> float:
        """Our lots rest at the back of each level's queue (the others were there first); takers consume a level from
        the front. Loss: for each lot of ours taken at level k, J - k ticks."""
        mm_lots, other_lots = np.asarray(mm_lots, float), np.asarray(other_lots, float)
        _, taken = race(J, mm_lots + other_lots, tiers, stale_ms)
        ours = np.clip(taken - other_lots, 0.0, mm_lots)
        k = np.arange(1, len(mm_lots) + 1)
        return float(np.sum(ours * np.maximum(abs(J) - k, 0)))
    Listing 18.2. Our lots are taken only after the others’ at each level. code/firm/newsrace/firm_newsrace.py
  3. Twenty thousand releases with standard normal surprises (hf_news.base).
  4. Re-entry: spread less decaying mark-outs from each re-entry time (hf_news.reentry_curve).

What to change next. Replay the release on firm.exchsim with the providers as agents that react after their own latencies; add a second instrument that the number moves; let the surprise’s mapping be estimated with error.

18.8 Build: the release race module

Purpose. Simulate scheduled releases, the race for stale quotes, and a market maker’s event protocol.

Interface. move(z, beta), race(J, stale_lots, tiers, stale_ms), mm_loss(J, mm_lots, other_lots, tiers, stale_ms), reentry(t), simulate(n, seed), misparse(p_wrong, capture_right, loss_wrong). Unscheduled news: firm.newsevent (Book 8).

Rules. Ticks and lots; takers arriving after the providers’ reaction get nothing; our lots are behind the others’.

Acceptance tests. code/firm/newsrace/tests/: a 4-tick race by hand, including a tier too slow to take anything; the market maker’s loss by hand on both sides; re-entry after the toxic seconds beats re-entry at once; shares sum to one and the slowest tier gets nothing; the misparsing value by hand.

Stretch. Providers as agents on firm.exchsim; several instruments; a learned post-release mark-out curve.

Sources and further reading

  • G. X. Hu, J. Pan, J. Wang, Early peek advantage? Efficient price discovery with tiered information disclosure, Journal of Financial Economics 126(2), 2017, 399–421.
  • New York State Attorney General, press release on Thomson Reuters, 8 July 2013.
  • US Securities and Exchange Commission, press release 2018-226, 29 September 2018.
  • NBC News, report on the Associated Press Twitter account hijack, 23 April 2013.

18.9 Exercises

Exercise 18.1 ★

A release moves the future four ticks. A taker buys 10 lots at each of the first three levels above the old price. What does it earn?

Solution

Solution of Exercise 18.1.

10×3+10×2+10×1=6010\times3+10\times2+10\times1=60 tick-lots.

Exercise 18.2 ★

A headline strategy captures 2 ticks when right and loses 10 when wrong. At what error rate does it break even?

Solution

Solution of Exercise 18.2.

(1−p)×2=p×10(1-p)\times2=p\times10: p=1/6≈16.7%p=1/6\approx16.7\%.

Exercise 18.3 ★

At $12.50 a tick, what is 57.5 tick-lots, and what is the protocol’s advantage of 238 tick-lots a release worth over twelve monthly releases?

Solution

Solution of Exercise 18.3.

$719; 238×12.50×12=$35 700238\times12.50\times12=\$35\,700 a year for one contract’s releases.

Exercise 18.4 ★★

Why does the fastest tier take almost everything?

Solution

Solution of Exercise 18.4.

Stale quotes are limited and taken in latency order: the first tier’s capacity covers most of them before the second arrives, and the providers update before the slow tiers arrive at all.

Exercise 18.5 ★★

Why is re-entering at once worse than re-entering after five seconds, and why is re-entering after thirty seconds worse again?

Solution

Solution of Exercise 18.5.

In the first seconds the mark-out exceeds the spread (three ticks against one); after thirty seconds the extra flow has mostly decayed, so a late market maker misses the best of it.

Exercise 18.6 ★★

Hu, Pan and Wang found that early access for a few may have improved price discovery. Give the argument.

Solution

Solution of Exercise 18.6.

With a few informed traders trading for two seconds, prices moved to the new value before the public release; other traders then faced a price that already reflected the news, and the public release resolved less uncertainty. Concentrated early trading, they argued, reduced the advantage of speed after the public release.

Exercise 18.7 ★★★

Coding. Rerun firm.newsrace.simulate with the providers updating after 0.5 ms instead of 20. What happens to the tiers’ shares and to the value captured per release?

Solution

Solution of Exercise 18.7.

Only the 0.05-millisecond tier arrives before the providers update: it takes all of it; the value given away falls from 223 to 197 tick-lots a release (the first tier’s capacity binds) and our market maker’s loss from 57.5 to 52.7.

Exercise 18.8 ★★★

Find the flaw. “We backtested our release strategy on the vendor’s timestamps and it captures 3 ticks on every release.”

Solution

Solution of Exercise 18.8.

Vendor timestamps are when the vendor sent the number, not when the trader received it; the backtest assumes a latency the firm does not have and fills at quotes that faster traders took first. Use receipt timestamps at the trader’s location and the resting depth after faster tiers.

18.10 Problem: Half Past Eight

Problem 18.1

Weekend problem — half past eight

A futures market maker and several takers face a monthly release.

Part I — Releases.

  1. Define a release lock-up and a release race.
  2. What did Hu, Pan and Wang find?
  3. Summarise the dated box’s three events.
  4. Why does misparsing matter more than speed for many firms?

Part II — The race.

  1. Describe the model: move, stale levels, tiers.
  2. Give the tiers’ shares of the stale value.
  3. Why is our market maker’s loss computed from the back of the queue?
  4. What does it lose a release, in tick-lots and dollars?

Part III — The protocol.

  1. Define an event protocol.
  2. Give the re-entry curve’s values at 0, 0.5, 5 and 30 seconds.
  3. Compare staying with pulling and re-entering at five seconds.
  4. Which risk controls belong in the protocol?

Part IV — The verdict.

  1. State the named result: the share of the release’s move captured by each latency tier, and the market maker’s loss with and without its event protocol.
  2. Who pays for the race?
  3. What would faster providers change?
  4. How should the protocol handle unscheduled events?
  5. Why must a backtest use the receipt timestamp?
  6. Which strategy file is most exposed to false information?
  7. How would you estimate the post-release mark-out curve?
  8. In one sentence: what does a market maker’s event protocol buy?
Solution

Solution of Problem 18.1.

  1. See Definition 18.1 and Definition 18.2.
  2. Two-second early access (2007–June 2013) produced concentrated trading and price discovery within 200 milliseconds; the tiered release may have reduced the advantage of faster traders.
  3. Thomson Reuters ended two-second early access (July 2013); a hacked Associated Press tweet moved US indices for minutes (April 2013); Musk and Tesla paid $20 million each over the funding-secured tweets (September 2018).
  4. Once fast enough, a wrong read loses more than being second costs.
  5. J=round(3z)J=\mathrm{round}(3z) ticks; ten levels of fifty stale lots plus ours; four tiers of 200 lots at 0.05, 1, 5, 50 ms; providers update after 20 ms.
  6. 88.1%, 11.6%, 0.3% and 0.
  7. Its quotes joined the levels after the others’; the takers consume queues from the front.
  8. 57.5 tick-lots, $719.
  9. See Definition 18.3.
  10. 872, 911, 1 052 and 599 tick-lots.
  11. Staying: 872−58=814872-58=814; pulling and re-entering at five seconds: 1 052.
  12. Pre-release limits, plausibility checks on parsed numbers, maximum size per event, a reachable kill switch, and the automated cancel itself.
  13. 88% to the fastest tier, 12% to the next; the market maker loses 58 tick-lots staying and none with its protocol, and earns 1 052 against 814 over two minutes.
  14. The providers who leave stale quotes, and through wider spreads around releases, everyone.
  15. Less value given away and all of it to the very fastest.
  16. With triggers (volatility, headline flags) that pull quotes automatically, and re-entry rules.
  17. The race is decided at the trader’s receipt time.
  18. Social-media headline reaction.
  19. Mark-outs of fills by second after each release, averaged over many releases.
  20. Avoiding the race’s losses and being present when the flow is heavy but no longer toxic.

18.11 Interview questions

Interview question 18.1 ★ trader

Payrolls are in ten minutes. What do you do with your quotes, and when do you come back?

Solution

Solution of Interview question 18.1.

Cancel or widen automatically a few seconds before; re-enter at a wider spread once the first seconds’ mark-outs have passed, narrowing as they decay.

What the interviewer is looking for: automated pull and measured re-entry.

Interview question 18.2 ★★ developer

Design the path from a machine-readable release to an order, and list where it can fail.

Solution

Solution of Interview question 18.2.

Feed handler, parser, plausibility check, mapping to instruments, order generation, risk checks, gateway. Failures: feed delay, parse error, a number outside its range, stale consensus, a risk check that blocks or does not.

What the interviewer is looking for: the chain and its failure points.

Interview question 18.3 ★★ researcher

How would you map a release’s surprise to the move of ten different instruments, and test the mapping?

Solution

Solution of Interview question 18.3.

Regress each instrument’s move in the first seconds on the standardised surprise over past releases; test out of sample and by regime.

What the interviewer is looking for: estimation and out-of-sample validation.

Interview question 18.4 ★★ risk

A headline strategy made money on 95% of events and lost ten times its average gain on the rest. How do you set its limits?

Solution

Solution of Interview question 18.4.

Size so that the tail loss (ten times the mean gain) on one event stays within the daily loss limit; cap concurrent events.

What the interviewer is looking for: sizing to the tail.

Interview question 18.5 ★★ trader

A tweet says a company has received a takeover offer. What do you check before trading, and in what order?

Solution

Solution of Interview question 18.5.

The source’s authenticity, confirmation from the company or a wire service, whether trading has been halted, and the price move so far.

What the interviewer is looking for: verification before action.

Interview question 18.6 ★★★ researcher

With flow decaying as e−s/T1e^{-s/T_1} and mark-outs as e−s/T2e^{-s/T_2}, find the re-entry time that maximises the market maker’s expected earnings.

Solution

Solution of Interview question 18.6.

Earnings from tt are ∫tHλ(1+Be−s/T1)(h−ae−s/T2) ds\int_t^H\lambda(1+Be^{-s/T_1})(h-a e^{-s/T_2})\,ds; the derivative in tt is minus the integrand at tt, so the optimum is where h=ae−t/T2h=a e^{-t/T_2}: t∗=T2ln⁡(a/h)t^\ast=T_2\ln(a/h), here 5ln⁡3=5.55\ln3=5.5 seconds.

What the interviewer is looking for: re-enter when the marginal fill breaks even.

Terms defined in this chapter

See all 2333 terms in the glossary