Quantitative Finance · Book 11 · Market making

Market Making and High-Frequency Trading

Market Making and High-Frequency Trading · Market making

20Options: Cross-Venue and Volatility Arbitrage at Speed

The day before a stock goes ex-dividend, thousands of deep in-the-money calls should be exercised and some are not; the holders who forget pay the ones who remember, and the trade that collects it has been in the academic literature for nearly twenty years. Pool, Stoll and Whaley found that more than half of the long positions that should have been exercised were not, over ten years to 2006, at a cost to holders of over $491 million. In this chapter’s model the play starts to pay when 1.7% of holders forget; at 10% it earns $1.05 for every public contract open, at 50% $10.

20.1 Parity at speed: conversions and reversals

Put–call parity (Book 1, chapter 25) ties a call, a put and the forward. When quotes violate it beyond costs, three legs lock in the difference.

Definition 20.1 (Conversion arbitrage, reversal arbitrage)

Conversion arbitrage buys the stock, buys a put and sells a call with the same strike and expiry, locking in the strike at expiry, when the call is rich relative to the put and the stock. Reversal arbitrage does the opposite: shorts the stock, sells the put and buys the call, when the call is cheap; it pays the stock’s borrow and any dividends.

With many venues quoting the same series, the best bid and offer of each option across venues may violate parity even when no single venue does. In the chapter’s scan (Listing 20.1), nine strikes of a three-month chain are quoted ten cents wide on each venue around fair values from Black-76, each venue’s mid off by its own noise of three cents; the stock is a cent either side of 100; each leg costs a cent. A violation appears in 0.7% of snapshots with one venue, 6.6% with three and 26% with six, worth one to two cents a share. Then the quotes refresh once, keeping a share of their noise: when half persists, only 6–8% of the violations are still there; when 90% persists, 43%. The arbitrage exists in proportion to the number of venues and survives in proportion to how slowly they update.

20.2 Box spreads and the rate they imply

A box (One Quant Book 5, chapter 1) combines a bull call spread and a bear put spread with the same strikes: it pays K2−K1K_2-K_1 at expiry whatever happens, so its price is a zero-coupon bond. A box between 95 and 105 expiring in three months at $9.90 lends at 4.02% continuously compounded; if the arbitrageur’s own rate is 4%, buying it at $9.89 earns a cent. Van Binsbergen, Diamond and Grotteria used this: inferring risk-free rates from option prices without a model of risk, they found the convenience yield on Treasuries equal to about 40 basis points, larger below three months and four times larger during the financial crisis. The box’s implied rate is a market rate for secured lending through the clearing house, and trading the box against one’s own funding is arbitrage only within the costs of the four legs and the capital the positions consume.

Definition 20.2 (Jelly roll)

A jelly roll is a long synthetic forward (long call, short put) in one expiry against a short synthetic forward in another, at the same strike; its price is the difference of two forwards and implies the cost of carry (financing less dividends and borrow) between the two expiries.

In the chapter’s chain, a jelly roll between the three- and six-month expiries implies a carry of 4.0%, the model’s rate, since no dividend falls between them. A dividend announced for that period, or a change in the stock’s borrow, moves the jelly roll before it moves anything else.

20.3 Early exercise, dividends and the dividend play

American calls on dividend-paying stocks should be exercised the day before the ex-date when the dividend exceeds the time value given up (One Quant Book 5, chapter 6). For a call struck at 40 on a $60 stock with a month left, a dividend above 13 cents makes exercise optimal. Holders who fail to exercise leave their short counterparts unassigned: those keep a call that has lost its dividend. Assignment falls pro rata on all short open interest, so market makers who trade large offsetting positions with each other just before the ex-date and exercise all their longs take most of the assignments that the forgetful holders did not cause (Book 5’s firm.optmm.best_play). Hao, Kalay and Mayhew found this scheme inflating reported volume on the last cum-dividend day, and facilitated by the exchanges’ limits on the transaction costs passed to traders.

The dividend play at its best size: net profit of the two market makers per contract of public open interest (10 000 contracts), and the share of the value left by failing holders that they capture, against the share of holders who fail to exercise (log scale); 30 cents a share gained on each unassigned short call, trade fees of 0.2 cent and exercise fees of 0.1 cent a share. Data: hf_optarb.dividend.
Figure 20.1. The dividend play at its best size: net profit of the two market makers per contract of public open interest (10 000 contracts), and the share of the value left by failing holders that they capture, against the share of holders who fail to exercise (log scale); 30 cents a share gained on each unassigned short call, trade fees of 0.2 cent and exercise fees of 0.1 cent a share. Data: hf_optarb.dividend.

The play’s profit rises with the share that fails (Figure 20.1), and so does the share of the failures’ value the players capture: 42% at 5% failing, 82% at half. Below the break-even, f<c/(2g)f<c/(2g) with cc the fees per contract traded and gg the gain per unassigned call, the play does not pay at any size: 1.7% with the chapter’s fees.

20.4 The same volatility on several listings

An index’s options trade on the index itself (cash-settled, European) and on its exchange-traded fund (physically settled, American, with dividends); a stock’s options trade on several exchanges, identical and fungible. The first pair should carry the same volatility after adjusting for exercise style and dividends; the second, the same prices. A market maker quoting both hedges one with the other, and the spread between their implied volatilities, net of the adjustments, is a relative-value trade that lives in seconds when one listing’s quotes lag the other’s (chapter 8’s lead–lag, applied to volatility).

20.5 Strategy files

Strategy file 20.1 — Conversion and reversal arbitrage

Who pays you, and why. Venues whose quotes lag the others’, and traders who cross wide on one venue.

Instruments and venues. A stock, its calls and puts on every options exchange.

Signal. Parity violations of the best quotes across venues beyond three legs’ costs, the borrow and dividends.

Sizing and execution. All three legs at once, the options on the venues quoting the violation; hold to expiry or unwind when parity returns.

Costs. Three legs’ fees, the borrow for reversals, early assignment risk on American options.

How it dies. Speed: in the model, with quotes keeping half their noise, only 6–8% of violations survive one refresh.

Horizon, capacity, infrastructure. Microseconds to expiry; every venue’s feed.

Backtest honestly. Quotes as received, the refresh that follows, the borrow and dividends as known then.

Sources. Book 1, chapter 25; this chapter.

Strategy file 20.2 — Box-spread financing arbitrage

Who pays you, and why. Borrowers and lenders who use boxes to finance, and Treasury holders who pay for convenience.

Instruments and venues. European-style index options (no early exercise), four legs.

Signal. The box’s implied rate against the firm’s funding and Treasury rates.

Sizing and execution. Lend or borrow through the box when its rate beats funding by more than the four legs’ costs.

Costs. Four legs’ fees and spreads, margin, balance sheet.

How it dies. It is a financing trade with a thin margin; the convenience yield is the market’s price for Treasuries’ safety, not a free lunch.

Horizon, capacity, infrastructure. Weeks to years; capacity from the box market’s depth.

Backtest honestly. The firm’s actual funding rate and capital charges.

Sources. van Binsbergen, Diamond and Grotteria (2022).

Strategy file 20.3 — Dividend play on unexercised calls

Who pays you, and why. Call holders who fail to exercise before the ex-date.

Instruments and venues. Deep in-the-money calls on dividend-paying stocks, on the last cum-dividend day.

Signal. Calls whose optimal exercise is certain (dividend above the time value), and the open interest.

Sizing and execution. Trade large offsetting positions with another participant, exercise all longs; size by the expected failure share.

Costs. Trade and exercise fees (what the exchanges’ caps limit); the risk that everyone exercises.

How it dies. Holders learning to exercise, fee changes, rules on such trades.

Horizon, capacity, infrastructure. One day per ex-date; capacity from the failing open interest.

Backtest honestly. Assignment by the clearing house’s actual process; fees as capped at the time.

Sources. Pool, Stoll and Whaley (2008); Hao, Kalay and Mayhew (2010).

Strategy file 20.4 — Index against ETF options volatility arbitrage

Who pays you, and why. Quoters in the listing whose surface lags, and users who pay for one listing’s features.

Instruments and venues. Index options and the fund’s options on the same index.

Signal. Implied volatility difference, adjusted for exercise style, dividends and settlement.

Sizing and execution. Quote or take the lagging listing; hedge vega in the other.

Costs. Two listings’ spreads; the adjustments’ model error.

How it dies. Early exercise and dividend surprises in the fund’s options.

Horizon, capacity, infrastructure. Seconds to days.

Backtest honestly. Both surfaces on one clock; the adjustments as known at the time.

Sources. Chapter 8; this chapter.

20.6 Tutorial: the calls nobody exercised

Goal. Scan a chain on several venues for parity violations and measure how many survive; price a box and a jelly roll; size the dividend play. End state: Figure 20.1 and the numbers in the text.

  1. The scan of conversions and reversals across venues with firm.parity.

    def scan(ls: Listings, spot_bid: float = 99.99, spot_ask: float = 100.01, fee: float = 0.01, lag_rho: float = 0.5,
             rounds: int = 2000) -> dict:
        """Over `rounds` independent snapshots: conversions (sell call bid, buy put ask, buy share) and reversals across
        venues net of `fee` a leg (three legs); for each found, refresh once and test it again."""
        found = survived = 0
        edges = []
        for _ in range(rounds):
            ls.refresh(0.0)
            hits = []
            for k in ls.strikes:
                cb, ca = ls.best(k, "C")
                pb, pa = ls.best(k, "P")
                conv = fp.conversion_edge(cb, pa, spot_ask, k, ls.years, ls.rate, ls.div_pv) - 3 * fee
                rev = fp.reversal_edge(ca, pb, spot_bid, k, ls.years, ls.rate, ls.div_pv) - 3 * fee
                if conv > 0:
                    hits.append((k, "conv"))
                    edges.append(conv)
                if rev > 0:
                    hits.append((k, "rev"))
                    edges.append(rev)
            found += len(hits)
            if hits:
                ls.refresh(lag_rho)
                for k, kind in hits:
                    cb, ca = ls.best(k, "C")
                    pb, pa = ls.best(k, "P")
                    e = (fp.conversion_edge(cb, pa, spot_ask, k, ls.years, ls.rate, ls.div_pv) if kind == "conv"
                         else fp.reversal_edge(ca, pb, spot_bid, k, ls.years, ls.rate, ls.div_pv)) - 3 * fee
                    survived += e > 0
        return {"per_snapshot": found / rounds, "mean_edge": float(np.mean(edges)) if edges else 0.0,
                "survive": survived / found if found else 0.0}
    Listing 20.1. Best quotes across venues, three legs’ fees, and a second look after one refresh. code/firm/optarb/firm_optarb.py
  2. Boxes and jelly rolls.

    def box_rate(k1: float, k2: float, price: float, years: float) -> float:
        return -math.log(price / (k2 - k1)) / years
    
    
    def box_edge(box_ask: float, box_bid: float, k1: float, k2: float, years: float, rate: float) -> tuple[float, float]:
        """(lend edge, borrow edge): buying the box at its ask earns (k2 - k1) at expiry, worth PV at `rate`."""
        pv = (k2 - k1) * math.exp(-rate * years)
        return pv - box_ask, box_bid - pv
    
    
    def jelly_roll(c1: float, p1: float, c2: float, p2: float, k: float, t1: float, t2: float, rate: float) -> float:
        """C - P = e^{-rT}(F - K) at each expiry; the two forwards give the carry r - q between t1 and t2."""
        f1 = fp.implied_forward(c1, p1, k, t1, rate)
        f2 = fp.implied_forward(c2, p2, k, t2, rate)
        return math.log(f2 / f1) / (t2 - t1)
    Listing 20.2. The box’s implied rate and edges; the carry implied by two synthetic forwards. code/firm/optarb/firm_optarb.py
  3. The dividend play for each share of failing holders (hf_optarb.dividend); the exercise threshold with firm.american.

What to change next. Add the borrow fee to reversals and see which violations remain; replace the noise by quotes that lag the stock by a venue-specific delay; estimate the failure share from open interest before and after past ex-dates.

20.7 Build: the options arbitrage module

Purpose. Scan listed options for parity, box and carry violations across venues, and size the dividend play.

Interface. box_rate, box_edge, jelly_roll, Listings(n_venues, strikes, seed) with refresh and best, scan(listings, spot_bid, spot_ask, fee, lag_rho, rounds), dividend_curve(fails), exercise_threshold. Built on firm.parity (Book 1), firm.american and firm.optmm (Book 5).

Rules. Dollars per share; fees per leg; the dividend play’s gain and fees per share, times 100 a contract.

Acceptance tests. code/firm/optarb/tests/: box rate and edges by hand; the jelly roll recovers the carry; no violation without noise; more persistent noise lets more violations survive; the play pays nothing below its break-even and more as more holders fail.

Stretch. Borrow and hard-to-borrow stocks; venue delays; SPX against SPY volatility.

Sources and further reading

  • R. Pool, H. R. Stoll, R. E. Whaley, Failure to exercise call options: an anomaly and a trading game, Journal of Financial Markets 11(1), 2008, 1–35.
  • J. Hao, A. Kalay, S. Mayhew, Ex-dividend arbitrage in option markets, Review of Financial Studies 23(1), 2010, 271–303.
  • J. H. van Binsbergen, W. F. Diamond, M. Grotteria, Risk-free interest rates, Journal of Financial Economics 143(1), 2022, 1–29.

20.8 Exercises

Exercise 20.1 ★

A 95–105 box expiring in three months trades at $9.90. What rate does it imply?

Solution

Solution of Exercise 20.1.

−ln⁡(9.90/10)/0.25=4.02%-\ln(9.90/10)/0.25=4.02\%.

Exercise 20.2 ★

Call bid 4.60, put ask 4.10, stock ask 100.01, strike 100, three months, rate 4%, dividends worth 0.50 before expiry. What is the conversion’s edge?

Solution

Solution of Exercise 20.2.

4.60−4.10−100.01+0.50+100e−0.01=−0.0054.60-4.10-100.01+0.50+100e^{-0.01}=-0.005: half a cent negative before fees; no arbitrage.

Exercise 20.3 ★

With trade fees of 0.2 cent and exercise fees of 0.1 cent a share and a gain of 30 cents per unassigned call, what failure share makes the dividend play pay?

Solution

Solution of Exercise 20.3.

c=4×0.2+2×0.1=1.0c=4\times0.2+2\times0.1=1.0 cent per contract traded (per share), g=30g=30 cents: the play pays above c/(2g)=1/60≈1.7%c/(2g)=1/60\approx1.7\%.

Exercise 20.4 ★★

Why do more venues produce more parity violations, and why do they not produce more profit?

Solution

Solution of Exercise 20.4.

The best bid and offer across more venues are more extreme, so they cross parity more often; but each violation is a venue’s noise that the next refresh removes, and all scanners see the same quotes: only the fastest captures it.

Exercise 20.5 ★★

Why is a box’s implied rate above the Treasury rate of the same maturity?

Solution

Solution of Exercise 20.5.

Treasuries carry a convenience yield (liquidity, collateral value, regulatory treatment) that lowers their yield; the box’s rate, inferred without it, is the risk-free rate before that premium: about 40 basis points above on average in van Binsbergen, Diamond and Grotteria.

Exercise 20.6 ★★

What does the dividend play do to the options’ reported volume, and why does it matter to others?

Solution

Solution of Exercise 20.6.

It inflates volume on the last cum-dividend day with trades that transfer no risk; anyone who reads volume as liquidity or interest is misled.

Exercise 20.7 ★★★

Coding. With firm.american.dividend_threshold, find the dividend above which a call struck at 40 on a $60 stock with a month left should be exercised, at 25% volatility and 4%.

Solution

Solution of Exercise 20.7.

About 13 cents.

Exercise 20.8 ★★★

Find the flaw. “Our scanner found 257 parity violations per thousand snapshots across six venues, a cent each: a steady income.”

Solution

Solution of Exercise 20.8.

The violations are counted before execution: after one refresh with half the noise kept, only about 6% remain, and every other scanner sees the same quotes. The income is the share the firm wins at speed, net of fees, not the count.

20.9 Problem: The Calls Nobody Exercised

Problem 20.1

Weekend problem — the calls nobody exercised

An options arbitrage desk runs parity scans, box trades and the dividend play.

Part I — Parity.

  1. Define conversion and reversal arbitrage.
  2. Describe the scan and its violation rates by number of venues.
  3. How many survive a refresh, and what decides it?
  4. Why must reversals include the borrow?

Part II — Rates and carry.

  1. What rate does the example box imply, and what does buying it at $9.89 earn?
  2. What did van Binsbergen, Diamond and Grotteria find?
  3. Define a jelly roll and its value in the chapter’s chain.
  4. What moves a jelly roll first?

Part III — The dividend play.

  1. When is exercising a call before the ex-date optimal?
  2. What did Pool, Stoll and Whaley find?
  3. How does the play work, and what did Hao, Kalay and Mayhew add?
  4. Give the break-even failure share.

Part IV — The verdict.

  1. State the named result: the dividend play’s expected profit per contract as a function of the share of holders who fail to exercise.
  2. Who loses in the dividend play, and could they avoid it?
  3. What would lower fee caps do to the play?
  4. Why are cross-listing volatility trades lead–lag trades?
  5. Which strategy file carries the most capital?
  6. How would you estimate the failure share before an ex-date?
  7. What does a brokerage owe clients holding calls before an ex-date?
  8. In one sentence: who pays for the calls nobody exercised?
Solution

Solution of Problem 20.1.

  1. See Definition 20.1.
  2. Nine strikes, venues quoting 10 cents wide with 3 cents of noise, a cent a leg: violations in 0.7%, 6.6% and 26% of snapshots for 1, 3 and 6 venues, worth one to two cents.
  3. 6–8% with half the noise kept, 43% with 90%: the quotes’ persistence.
  4. The reversal is short the stock and pays the borrow and dividends.
  5. 4.02%; one cent against a 4% funding rate.
  6. Treasury convenience yields of about 40 basis points, larger below three months, four times larger in the crisis.
  7. See Definition 20.2; 4.0% carry between three and six months.
  8. A dividend announcement or a borrow change between the expiries.
  9. When the dividend exceeds the time value given up (the put’s value at the strike); 13 cents in the example.
  10. More than half of long positions that should be exercised were not, 1996–2006, costing holders over $491 million.
  11. Offsetting trades between market makers who exercise all longs and take most assignments; the volume it inflates, facilitated by exchanges’ fee limits.
  12. c/(2g)c/(2g): 1.7%.
  13. Zero below 1.7%; $0.27 per public contract at 5%, $1.05 at 10%, $3.04 at 20%, $10.02 at 50%, capturing 42% to 82% of the failures’ value.
  14. Holders who fail to exercise; by exercising, or by their brokers doing it for them.
  15. Lower fees lower the break-even and raise the play’s size.
  16. One listing’s quotes follow the other’s with a delay; the trade takes the stale one.
  17. The box, which ties capital and balance sheet for its whole term.
  18. From open interest in calls that should be exercised and past ex-dates’ exercise rates by holder type.
  19. Notice and, where agreed, automatic exercise instructions.
  20. The holders who forget, paid to whoever trades to take their assignments.

20.10 Interview questions

Interview question 20.1 ★ trader

Write put–call parity for a dividend-paying stock and say what you would trade if the call were a dime rich.

Solution

Solution of Interview question 20.1.

C−P=S−PV(D)−Ke−rTC-P=S-\mathrm{PV}(D)-Ke^{-rT}; with the call rich, sell the call, buy the put and the stock (a conversion), if the dime exceeds the costs.

What the interviewer is looking for: parity with dividends, the right trade.

Interview question 20.2 ★★ researcher

How would you measure the convenience yield of Treasuries from option prices?

Solution

Solution of Interview question 20.2.

Price boxes on European index options across maturities, infer the zero rates, and subtract Treasury yields of the same maturity.

What the interviewer is looking for: box-implied rates.

Interview question 20.3 ★★ trader

Tomorrow a stock goes ex-dividend 50 cents; you are short 1 000 deep in-the-money calls. What do you expect overnight, and what do you do?

Solution

Solution of Interview question 20.3.

Most will be exercised and you will be assigned: short the stock the next morning without the dividend. Buy the stock or exercise offsetting longs; the unassigned part gains the dividend less time value.

What the interviewer is looking for: assignment and its position.

Interview question 20.4 ★★ developer

Design a parity scanner over 5 000 series on 16 venues that reports only executable violations.

Solution

Solution of Interview question 20.4.

Maintain best bid and offer per series across venues incrementally; recompute parity only for series whose quotes changed; require sizes on all legs and apply fees, borrow and dividends; send all legs together.

What the interviewer is looking for: incremental, executable, all legs.

Interview question 20.5 ★★ risk

A reversal desk is short 2 million shares of a stock that becomes hard to borrow. What happens?

Solution

Solution of Interview question 20.5.

The borrow fee jumps or shares are recalled: the reversal loses its carry or must be closed; parity for that stock shifts and puts become dear.

What the interviewer is looking for: borrow risk.

Interview question 20.6 ★★★ researcher

Derive the dividend play’s optimal size q∗=(aP/c−P)/2q^\ast=\bigl(\sqrt{aP/c}-P\bigr)/2 from its expected profit aq/(P+2q)−cqaq/(P+2q)-cq.

Solution

Solution of Interview question 20.6.

The derivative of aq/(P+2q)aq/(P+2q) is aP/(P+2q)2aP/(P+2q)^2; setting it equal to cc gives (P+2q)2=aP/c(P+2q)^2=aP/c, so q∗=(aP/c−P)/2q^\ast=(\sqrt{aP/c}-P)/2.

What the interviewer is looking for: the first-order condition.

Terms defined in this chapter

See all 2333 terms in the glossary