Many firms test market making with a live game: you quote, the interviewer trades, you re-quote, and at the end they ask for your position and PnL. Keeping track of trades in your head (“trader memory”) matters as much as the maths. Here are three games from the guide, replayable trade by trade.
Case 1: Red Sox wins
Make a 10-wide market on the number of regular-season games the Boston Red Sox will win. Then give 50% and 90% confidence intervals. The interviewer trades; you re-quote; repeat.
Theoretical value. State assumptions: a full 162-game season. Recent seasons: .519 (84 wins), .667 (108, the World Series year) and about .400 in a shortened 60-game season. Weight the recent past more, shade down for roster turnover, and call it .500: 81 wins. Opening market: 76 @ 86.
Intervals. Treat wins as Binomial, approximately normal with mean 81 and :
The game.
After a buy, move up: they think it’s worth more, you are now short, and showing the same price invites the same trade. With little information, move more at first (half a width, to the edge of your 90% interval). After both a buy at 86 and a sell at 85, their value is bracketed, roughly 86 to 90, so centre near 88.
Scoring. Pair opposite trades: sold 86 / bought 85 is +1; sold 93 / bought 84 is +9. The sale at 91 is still open, so you are short one contract at 91 with 10 banked. If the Red Sox win games your PnL is : 11 if they win 90, breakeven at 101.
Case 2: the population of Tanzania
Make a market on Tanzania’s population. The ask can be at most 1.5 times the bid. The interviewer trades; you re-quote.
- 20 @ 30. The US has about 325 million people and Tanzania is much smaller; guess 25 million.
- 60 @ 90. With one buy and little knowledge, moving too little costs more than moving too much. It’s surely under 100 million; triple your estimate to 75.
- 40 @ 60. Now bracketed between 25 and 75; centre on 50.
- 50 @ 75. They bought at 60 rather than sell at 40, so it’s near 60. You have trades on both sides, so move less: the mid shifts by half the previous move, from 50 to 62.5.
You end flat (two buys, two sells). Sold 30 / bought 60 is −30, sold 60 / bought 50 is +10: PnL −$20. The real figure is about 56 million. Losing money is normal here; the interviewer is watching how sensibly you move.
Case 3: trade or tighten
You and the interviewer each get a private value for stock XYZ, drawn independently and uniformly from 90 to 110. Yours is 100. You open a market; they either trade or tighten it (raise the bid and/or lower the ask); then you either trade on their market or tighten; and so on until someone trades.
- Open with the full range, 90 @ 110: you know nothing about their value.
- Their 95 @ 107 has mid 101: probably their value is above 100. Don’t trade on it (both sides lose against your 100), but use it.
- When the inside market is 100 @ 106, bidding 101 is a calculated risk: they just bid 100, so they’re unlikely to sell to you at 101, and it keeps the option of selling higher later.
- At 102 bid, bidding 103 is too risky; offer at 105 instead, then 104, where they buy.
You sold at 104 against your value of 100: +4. Their value was 105. (Exercise: could you have inferred that from their moves?)
In code
def score(trades, settle=None):
"""trades: list of ('buy'|'sell', price) from YOUR side. Returns (position, cash, pnl)."""
pos = sum(+1 if side == "buy" else -1 for side, _ in trades)
cash = sum(-px if side == "buy" else +px for side, px in trades)
pnl = cash + pos * settle if settle is not None else (cash if pos == 0 else None)
return pos, cash, pnl
red_sox = [("sell", 86), ("sell", 91), ("buy", 85), ("sell", 93), ("buy", 84)]
print(score(red_sox, settle=90)) # (-1, 101, 11): short one, PnL = 101 - wins
tanzania = [("sell", 30), ("buy", 60), ("sell", 60), ("buy", 50)]
print(score(tanzania)) # (0, -20, -20)
Check yourself
You sell at 52, buy at 48, sell at 55 and buy at 50. What is your position and PnL?