MEng FinTech · Algorithmic Trading II · Assignment 1.1

Option Surface Lab ·

Listed options are not a filled sheet. They are a sparse cloud with large, structured holes. This page plots the two prices a stranger might confuse — the mark and the last trade — and then shows you exactly where each one stops existing.

The two numbers

Pick a slice

The market is arbitrage-free. The mid is not.

Two rules hold for any option market, with no model and no volatility assumption behind them. A call struck higher cannot cost more than one struck lower. And a butterfly — buy the wings, sell twice the body — cannot cost negative money, because it can never be worth less than zero.

Both are tested twice: once on MID_PRICE, and once on prices you could actually transact at — buying the wings at the ask and selling the body at the bid. Only strictly consecutive $0.50 strikes on the same expiry and date are compared, so a missing strike never manufactures a violation.

The hole has a shape

If missingness were random you could do nothing about it. It is not — it is a smooth, structured gradient, which means it is something you could model.

What I tested and did not find

Reading the plot

Where is the cloud of price data dense, and where is it empty?

Which field will you treat as the mark next week, and which field will you treat as evidence that someone traded?

The mark is not the trade

Where the data actually stops

Show the numbers behind this slice as a table

So what would you actually get filled at?

The assignment poses this and answers "you do not know." That is right — but the size of the not-knowing is measurable, because the same pull that gives a mark also gives the BID and ASK it sits between. The mark is a point estimate. The spread is its error bar.

How wrong is the interpolated sheet, really?

Rather than assert that filling holes is dangerous, measure it. Every cell that is observed gets hidden in turn, rebuilt by linear interpolation from its neighbors, and compared against the truth.

These errors are a best case. Each tested cell is an interior point ringed by real observations. The holes you would actually want to fill sit in the wings with far less support around them, so the true error is worse than what this measures.

Interpolation in the wrong space

The section above measures the error from interpolating price and attributes its positive bias to convexity: price curves upward in strike, so a straight chord between two observed strikes sits above the truth. If that diagnosis is right, it names its own fix. Convexity belongs to the price, not to the contract. Implied volatility is far flatter in strike, which is why surfaces are quoted in vol and not in dollars.

So the identical test runs twice. Same cells, same triangulation, same axis rescaling — the only thing that changes is the quantity the straight line is drawn through. In vol space the guess is converted back to dollars through Black-76 at that cell's own strike, maturity and forward, so both errors are measured in dollars and remain comparable.

The forward, backed out of the options themselves

Inverting Black-Scholes needs a forward and a discount factor, and neither is assumed anywhere on this page. Put-call parity, C − P = D (F − K), is an identity — no model, no volatility. Fitting it across the strikes where both rights are quoted returns the slope −D and the intercept D F, so the market's own forward and its own rate fall out of the option prices. It needs a call and a put on the same strike, which is the one thing a single-sided chain cannot give you.

It also repairs a caveat this page used to carry. The intrinsic-value floor in the arbitrage audit compared against spot, with no carry or dividend adjustment, and admitted it was an approximation. It now has a fitted forward to compare against instead.

Does this generalize, or is it one ticker’s quirk?

The underlying, for context

Method & honest caveats