Home/AI Orchestration · Model Risk/Part II

Series 2 · Episode 19 · PROBLEM · Contrast · L19

Black-Scholes is not a trade ticket

A closed form is a contrast card, and on a real book the choice of mesh moves the number further than the edge anyone is claiming

BS float is contrast, not a trade ticket: DENY_BS_AS_ALPHA.

flowchart TB
  BS["BS closed form ~10.45"]:::artifact --> CLAIM["Trade ticket / alpha"]:::risk
  MESH["Discrete meshes 12.16 / 9.54 / 9.97"]:::process --> SPREAD["Spread 2.62"]:::risk
  CLAIM --> DENY["DENY_BS_AS_ALPHA"]:::gate
  SPREAD --> DENY
  BUD["Path budgets F vs S"]:::input --> DENY

  classDef input fill:#CCFBF1,stroke:#0F766E,color:#134E4A,stroke-width:2px
  classDef decision fill:#FEF3C7,stroke:#B45309,color:#78350F,stroke-width:2px
  classDef risk fill:#FEE2E2,stroke:#B91C1C,color:#7F1D1D,stroke-width:2px
  classDef gate fill:#DCFCE7,stroke:#15803D,color:#14532D,stroke-width:2px
  classDef process fill:#E0E7FF,stroke:#4338CA,color:#312E81,stroke-width:2px
  classDef artifact fill:#F5F5F4,stroke:#57534E,color:#1C1917,stroke-width:2px

Simple claim: Black–Scholes is a contrast card about replication under a named mesh — not a trade ticket, and mesh choice can move the number more than the claimed edge. The trench is incompleteness and discrete honesty.

There is a specific slide I have seen too many times, and it is always convincing.

Model value 10.45. Market mark 9.90. Difference 0.55. The column is headed edge, sometimes dislocation, occasionally something more careful like model-implied richness. Whatever it is called, the next column is a suggested size, and the meeting is now about whether to act rather than about whether the 10.45 means what the column header says it means.

The formula is not the problem. Black-Scholes is one of the most tested objects in the field, and everything this series has built, replication, measure change, the price of risk, converges on it. The problem is what happens in the two inches between a closed form and a size.

What the formula is a statement about

The derivation is worth holding in mind precisely because it is so clean. Under Q the stock is a geometric Brownian motion with drift equal to the short rate, so log S_T is normal with drift r − σ²/2 and variance σ²τ. The call is worth the discounted risk-neutral expectation of max(S_T − K, 0), a Gaussian integral that collapses to

V = S Φ(d₁) − K e^{−rτ} Φ(d₂).

Take S = K = 100, r = 5%, σ = 20%, τ = 1. Then d₁ = 0.35, d₂ = 0.15, and V ≈ 10.45.

Now read what had to be true. Trading is continuous. The self-financing portfolio rebalances at every instant, at no cost, in arbitrary fractional size, with no spread and no market impact. Volatility is constant. The market is complete, so the claim is exactly attainable and its price unique. Under those conditions 10.45 is not an estimate, it is the cost of a portfolio, in the same sense that 7.14 was the cost of half a share and a loan in the one-period tree.

Every one of those conditions is false on a real desk. Not approximately false, categorically false.

What the mesh alone does to the number

Here is the experiment I wish appeared next to every model-value column. Price the same claim, in the same world, with the same σ, using a properly calibrated binomial tree, and vary only the number of rebalancing dates.

With one period: 12.16. With two: 9.54. With four: 9.97. Continuous ideal: 10.45.

Nothing changed except how often the hedge is allowed to trade. The numbers do converge toward 10.45 as the mesh refines. CRR is a consistent scheme and the oscillation around the strike is a known, well-behaved artifact. But look at the spread across meshes anyone might plausibly run: 2.62, on a claim worth about ten.

Set that against the 0.55 in the edge column. The mesh choice moves the price nearly five times as far as the dislocation being traded. Which means the honest reading of the slide is not "we found 0.55 of edge." It is "we found a number that is 0.55 away from the market, using one point from a family of defensible model values that spans 2.62." The edge is inside the model's own resolution.

And refining the mesh is not a free fix, because the two error sources point in opposite directions. Coarse hedging leaves discretization error: the position tracks badly between rebalances. Fine hedging leaves cost error: every rebalance crosses a spread. With a five-cent spread and a delta that moves meaningfully across four rebalances, trading cost on a ten-point premium is a visible fraction of the claimed edge. There is an optimum, it depends on liquidity, and it is emphatically not "as fine as possible." A path budget, how often you may rebalance, how much spread you may spend, is therefore part of the price, not part of the execution notes.

How this shows up in production

  1. Model-minus-market as expected profit. A difference between a model value and a mark gets treated as a directional forecast. It is not. It is a statement that the model and the market disagree, and on a thinly-traded structure the prior should be roughly symmetric about which of them is wrong.
  1. The unposted mesh. A pricing library defaults to some number of steps. Nobody chose it, it does not appear on the output, and it does not appear when two teams reconcile. Two "identical" prices differ, and the reconciliation goes looking in the inputs, where the discrepancy is not.
  1. Continuous ideal assumed downstream. The price is computed under frictionless continuous trading, then the same artifact drives exposure, limits, and P&L attribution for a book that trades a few times a week. The frictions were never subtracted because they were never represented.
  1. A point where the market is incomplete. The formula always returns a scalar, and nothing in it can tell you the claim is not attainable in your actual market. A single number arriving where a band belongs is POINT_ON_INCOMPLETE: the same failure the tree posts warned about, now dressed in a closed form and therefore much more persuasive.

A CEH-001 edge that looks like alpha

Same never-traded note. Spread frame near 1.50, curve frame near 2.10, and the desk denies 1.80 because the midpoint is a way of not answering.

The equity leg gets a closed-form value. It comes in above the spread-frame implied level and below the curve-frame one, which is exactly what you would expect from a formula with a single volatility input applied to a structure whose two frames disagree about the volatility surface in the first place. The memo reads well: independent model value sits between the two frames, suggesting both are somewhat mismarked and fair value is closer to the middle.

That sentence is how 1.80 gets built. Not by anyone advocating for the midpoint, but by a model whose single-point output lands near the center of a disagreement it was never equipped to adjudicate, and whose own mesh uncertainty is wider than the gap between the frames. The formula did not resolve 1.50 versus 2.10. It produced a third number with no error bar and let proximity do the arguing.

The refuse code is DENY_BS_AS_ALPHA, and it is not a claim that the formula is wrong. It is a claim about what the output is for. 10.45 is a contrast, a benchmark against which the tree's 9.54, the market's mark, and the incomplete-market band can be compared, and disagreements among them are informative. What it is not is a signal, because a signal has to survive its own model uncertainty, and here that uncertainty is 2.62 wide before anyone has argued about volatility.

What stacks quietly assume

That a closed form is more trustworthy than a numerical one because it has no visible parameters. That discretization is an implementation concern rather than a pricing input. That the difference between a model and a market forecasts which will move. That σ is a number rather than a surface. That a formula returning a scalar means a scalar exists. That the continuous ideal approximates a book which trades weekly, when it is an entirely different regime with different costs.

What a solution must do

It has to demote the number and promote the portfolio. A model value should be unable to leave the system without a path budget attached, the rebalancing frequency and spread allowance it assumed, and without the family of values that other defensible meshes produce, so anyone reading the edge column can see whether the edge clears the model's own resolution. It has to refuse the model-minus-market subtraction as a spend signal outright, and ship a contrast report instead: closed form here, tree at several meshes there, band where the claim is not attainable, frictions named. Where the market is genuinely incomplete, the output must be an interval and the verdict must be able to come back inconclusive rather than being rounded into a trade.

Agents may compute closed forms, quote them, and argue with them. What they may not do is subtract a mark from a formula and call the difference profit.

Curious how others post mesh uncertainty next to a model value, and whether anyone's edge column has ever been required to clear the spread of its own pricing scheme before it could be sized.

Clearance coupling. BS closed form is a contrast card under a named mesh and completeness story — DENY_BS_AS_ALPHA when used as a live edge ticket. Mesh fan-out without scheme card is the discrete cousin of silent rulers (Series 1 ep32–33).

Incompleteness: when the book cannot replicate, output bands; stolen points are refuse.

Next. Open S2-20: Replication certificate or refuse. Previous: S2-18 (Price of risk as the bridge). Part II index.