Pricing models
Closed forms, lattices and numerical schemes, with measured convergence and stability arithmetic.
Every value in this section was recomputed from the stated formulas in double precision. The standard normal cumulative distribution is evaluated as N(x) = 0.5*(1 + erf(x/sqrt(2))), which is exact to machine precision; the Abramowitz and Stegun 26.2.17 rational approximation was run alongside it as a cross-check and agrees to within 7.5e-8 over the range -5 to +5, which is its published error bound. The reference scenario is S = 100, r = 0.04, q = 0, sigma = 0.20, T = 0.25 unless an entry states otherwise, and the Black-Scholes-Merton call at K = 100 on those inputs is 4.485236409 - every convergence figure below is an error against that number. Numeric inputs are chosen so the arithmetic is checkable; they are not observations of any market.
Model families and what each one prices
A closed form exists only where the payoff depends on the terminal price alone and exercise is European. Everything else is a numerical problem, and the choice of method is a choice about which error you are willing to measure.
| Model | Underlying process assumed | European closed form | American exercise | Path dependence | Error measured as |
|---|---|---|---|---|---|
| Black-Scholes-Merton 1973 | Geometric Brownian motion, constant sigma, continuous dividend yield q | Yes | No | No | None; exact within the model |
| Black-76 | Lognormal forward, constant sigma | Yes | No | No | None; exact within the model |
| Binomial, Cox-Ross-Rubinstein 1979 | Two-state discrete approximation to the same diffusion | Converges | Yes | Only through the lattice state | Value error against the closed form |
| Trinomial | Three-state discrete approximation | Converges | Yes | Only through the lattice state | Value error against the closed form |
| Bjerksund-Stensland 1993 and 2002 | Same diffusion, flat exercise boundary approximated | n/a | Approximated | No | Gap to a converged lattice |
| Monte Carlo | Simulated paths under the risk-neutral measure | Converges | Only with a regression or duality method | Yes | Standard error of the estimate |
| Finite difference | The Black-Scholes partial differential equation discretised | Converges | Yes, by projecting the payoff each step | Only with an added state variable | Truncation error in space and time |
Binomial and trinomial convergence to Black-Scholes-Merton, verified
European call, S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. The closed-form value is 4.485236409. CRR uses u = exp(sigma*sqrt(dt)), d = 1/u, p = (exp((r-q)*dt) - d)/(u - d). The trinomial uses dx = sigma*sqrt(2*dt) with the Kamrad-Ritchken probabilities. Every value below was recomputed; the trinomial column at n steps is numerically identical to the CRR column at 2n steps, to every printed digit.
| Steps n | CRR u | CRR p | CRR value | CRR error | Trinomial value at n steps | Trinomial error |
|---|---|---|---|---|---|---|
| 1 | 1.10517092 | 0.52518799 | 5.46849110 | plus 0.98325469 | 4.03156245 | minus 0.45367395 |
| 2 | 1.07327066 | 0.51774405 | 4.03156245 | minus 0.45367395 | 4.24592704 | minus 0.23930937 |
| 4 | 1.05127110 | 0.51252345 | 4.24592704 | minus 0.23930937 | 4.36286187 | minus 0.12237454 |
| 8 | 1.03598777 | 0.50884712 | 4.36286187 | minus 0.12237454 | 4.42345524 | minus 0.06178117 |
| 16 | 1.02531512 | 0.50625293 | 4.42345524 | minus 0.06178117 | 4.45421023 | minus 0.03102617 |
| 32 | 1.01783484 | 0.50442045 | 4.45421023 | minus 0.03102617 | 4.46969114 | minus 0.01554527 |
| 64 | 1.01257845 | 0.50312537 | 4.46969114 | minus 0.01554527 | 4.47745595 | minus 0.00778046 |
| 128 | 1.00887801 | 0.50220984 | 4.47745595 | minus 0.00778046 | 4.48134425 | minus 0.00389216 |
| 256 | 1.00626957 | 0.50156255 | 4.48134425 | minus 0.00389216 | 4.48328985 | minus 0.00194656 |
| 512 | 1.00442920 | 0.50110487 | 4.48328985 | minus 0.00194656 | 4.48426301 | minus 0.00097340 |
| 1024 | 1.00312989 | 0.50078126 | 4.48426301 | minus 0.00097340 | 4.48474968 | minus 0.00048673 |
| 2048 | 1.00221215 | 0.50055243 | 4.48474968 | minus 0.00048673 | n/a | n/a |
Finite-difference schemes: measured error and the stability boundary
Same call and same closed-form target. The grid is uniform in x = ln(S) with Dirichlet boundaries at plus and minus five standard deviations, M space steps and Nt time steps. The stability quantity is sigma^2 * dt / dx^2. Every value was recomputed; the two explicit rows above the boundary are the actual output, not a description of what would happen.
| Scheme | M | Nt | sigma^2 dt/dx^2 | Value | Error vs closed form |
|---|---|---|---|---|---|
| Explicit | 200 | 400 | 0.9803 | 4.48524380 | plus 7.40e-06 |
| Explicit | 400 | 1600 | 0.9803 | 4.48523847 | plus 2.06e-06 |
| Explicit | 200 | 100 | 3.9212 | minus 2.2e+81 | Diverged |
| Explicit | 200 | 20 | 19.6059 | minus 7.1e+29 | Diverged |
| Implicit | 200 | 100 | 3.9212 | 4.47896828 | minus 6.27e-03 |
| Implicit | 200 | 400 | 0.9803 | 4.48273241 | minus 2.50e-03 |
| Implicit | 400 | 1600 | 0.9803 | 4.48461107 | minus 6.25e-04 |
| Crank-Nicolson | 200 | 100 | 3.9212 | 4.48400038 | minus 1.24e-03 |
| Crank-Nicolson | 200 | 400 | 0.9803 | 4.48398869 | minus 1.25e-03 |
| Crank-Nicolson | 400 | 1600 | 0.9803 | 4.48492481 | minus 3.12e-04 |
Monte Carlo estimates and their standard errors, verified
Same call and same closed-form target of 4.485236409. The stratified rows are fully deterministic: draw z_i = Phi-inverse((i - 0.5)/n) for i = 1..n, so any reader reproduces them exactly. The pseudo-random rows depend on the generator and are stated with the seed used, 20260827, and Python's Mersenne Twister via random.gauss. The antithetic rows use the same total number of normal draws arranged as n/2 sign-paired pairs.
| Method | Draws n | Estimate | Sample s.d. | Standard error | Error vs closed form |
|---|---|---|---|---|---|
| Stratified midpoint | 10 | 4.32466075 | n/a, deterministic | n/a | minus 0.16057566 |
| Stratified midpoint | 100 | 4.47126008 | n/a, deterministic | n/a | minus 0.01397633 |
| Stratified midpoint | 1,000 | 4.48396632 | n/a, deterministic | n/a | minus 0.00127009 |
| Stratified midpoint | 10,000 | 4.48511797 | n/a, deterministic | n/a | minus 0.00011844 |
| Stratified midpoint | 100,000 | 4.48522517 | n/a, deterministic | n/a | minus 0.00001124 |
| Pseudo-random, plain | 10,000 | 4.449312 | 6.486307 | 0.064863 | minus 0.035925 |
| Pseudo-random, antithetic | 10,000 | 4.550518 | 3.347707 | 0.047344 | plus 0.065282 |
| Pseudo-random, plain | 100,000 | 4.486298 | 6.551935 | 0.020719 | plus 0.001062 |
| Pseudo-random, antithetic | 100,000 | 4.491230 | 3.363438 | 0.015042 | plus 0.005994 |
| Pseudo-random, plain | 1,000,000 | 4.490235 | 6.536779 | 0.006537 | plus 0.004999 |
| Pseudo-random, antithetic | 1,000,000 | 4.487653 | 3.354441 | 0.004744 | plus 0.002417 |
Entries
Black-Scholes-Merton: the six inputs and where each one enters
The closed form takes six inputs and nothing else. Five are observable or contractual and one, sigma, is not. Every quoted implied volatility is the residual of that asymmetry: it is whatever number makes the other five reproduce the observed price.
| Field | Value |
|---|---|
| Formula | d1 = [ln(S/K) + (r - q + sigma^2/2)*T] / (sigma*sqrt(T)); d2 = d1 - sigma*sqrt(T) |
| S, underlying price | Enters only through ln(S/K), so the model is homogeneous of degree one in S and K together |
| K, strike | Contractual. Enters through ln(S/K) and through the discounted term K*exp(-r*T) |
| T, time to expiration in years | Enters as sqrt(T) inside the volatility scaling and as T inside the discounting and drift |
| r, risk-free rate | Discounts the strike and sets the forward drift. Continuously compounded |
| q, continuous dividend yield | Discounts the spot to a forward. Setting q = 0 recovers the 1973 Black-Scholes form |
| sigma, volatility | The only input with no observable value. Everything called implied volatility is an inversion of this one number |
| Worked | Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. d1 = [ln(1) + (0.04 - 0 + 0.02)*0.25] / (0.20*0.5) = 0.015 / 0.1 = 0.150000. d2 = 0.150000 - 0.100000 = 0.050000. N(d1) = 0.559617692, N(d2) = 0.519938810, exp(-r*T) = 0.990049834. Call = 100*0.559617692 - 100*0.990049834*0.519938810 = 55.9617692 - 51.4765328 = 4.485236409 |
- Homogeneity in S and K is why a per-unit price computed at S = 1, K = 1 can be multiplied by S to price any at-the-money option of the same tenor. Forward-starting structures are priced entirely on that property.
- The drift term carries plus sigma-squared-over-two, which is why at-the-money d1 is positive and at-the-money call delta exceeds 0.50 even with zero rates.
- There is no volatility of volatility, no jump term and no skew anywhere in these six inputs. Everything the market does that the model cannot represent gets pushed into sigma, one strike at a time.
- The formula is the same at every strike. The reason a single sigma cannot reprice a whole expiration is not a defect in the arithmetic; it is that the process assumption is false and the arithmetic is faithfully reporting that.
Source: Black and Scholes 1973; Merton 1973
Black-Scholes-Merton closed forms with continuous dividend yield
The European call and put values under geometric Brownian motion with a continuous proportional dividend yield q. Both are combinations of two digital-style terms and reduce to the 1973 Black-Scholes form at q = 0.
| Field | Value |
|---|---|
| Formula | C = S*exp(-q*T)*N(d1) - K*exp(-r*T)*N(d2); P = K*exp(-r*T)*N(-d2) - S*exp(-q*T)*N(-d1) |
| Decomposition | C = AssetOrNothing(K) - K*CashOrNothing(K), where AssetOrNothing = S*exp(-q*T)*N(d1) and CashOrNothing = exp(-r*T)*N(d2) |
| No-arbitrage bounds | max(S*exp(-q*T) - K*exp(-r*T), 0) is at most C, and C is at most S*exp(-q*T) |
| Monotone in sigma | dC/dsigma = Vega is strictly positive, so the inversion for implied volatility has at most one solution |
| Worked | Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. Call = 4.485236409, put = 3.490220. Cross-checks that hold at every sigma: C - P = 0.995017 = S*exp(-q*T) - K*exp(-r*T) to eight decimals. The digital decomposition: asset-or-nothing call = 55.961769, cash-or-nothing call = 0.514765, and 55.961769 - 100*0.514765 = 4.485236, recovering the call exactly. Lower bound at these inputs is 0.995017 and the upper bound is 100.000000, so 4.485236 sits inside them |
- The two terms are not the two halves of a probability. N(d2) is the risk-neutral probability of finishing in the money; N(d1) is a delta and a probability under a different measure. Reading either as a real-world chance is the single most common misuse of the formula.
- Every arbitrage bound above is checkable from a quote screen in one subtraction. A price outside them is a stale or crossed quote, not an opportunity.
- Put value is not monotone in r. The put term -K*T*exp(-r*T)*N(-d2) is negative, which is why a rate rise cheapens puts and is the mechanism behind interest-driven early exercise.
Source: Black and Scholes 1973; Merton 1973
The assumptions the closed form requires, and what each one being false costs
The derivation requires continuous frictionless hedging in a market with a constant rate, a constant volatility, a lognormal price with no jumps, and no transaction costs or position limits. Each assumption maps to a specific, identifiable pricing error rather than to a general caveat.
| Field | Value |
|---|---|
| Constant sigma | False by observation: implied volatility differs across strikes and expirations. Consequence is the surface, and the need for a local- or stochastic-volatility model to reprice it consistently |
| No jumps | A jump breaks the delta hedge over the gap. Consequence is that a delta-hedged short option loses more than gamma predicts, because the loss is 0.5*Gamma*dS^2 with dS realised all at once |
| Continuous hedging | Discrete rehedging leaves a residual whose variance grows with the rehedge interval. Consequence is hedging error that is zero-mean under the model and non-zero in cost once spreads are paid |
| Constant r | Material only through rho, which grows roughly linearly in T. Consequence concentrates in long-dated contracts |
| European exercise | American exercise adds a premium the closed form cannot express. Consequence is that put-call parity becomes an inequality |
| Frictionless | Consequence is that the model produces one price and the market produces two, and the distance between them is measured in volatility points rather than in cents |
| Worked | Discrete-hedging cost of the constant-sigma and continuous-hedging assumptions taken together, at Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. A one-point move rehedged once realises 0.5*Gamma*dS^2 = 0.5*0.039448*1 = 0.019724 per share, 1.97 per contract, against daily theta of 0.027257 per share, 2.73 per contract. The position needs 1.18 of movement per day to recover theta, since 0.5*0.039448*1.18^2 = 0.027464 |
- The model is used as a quoting convention, not as a belief. A trader who says a strike is at 28 volatility is naming a price in a unit that removes S, K, T and r from the comparison.
- The assumption that is violated most and matters least is the constant rate. The assumption that is violated least and matters most is the absence of jumps.
- None of these are reasons to reject the arithmetic. They are the reasons the same arithmetic returns a different sigma at every strike.
Source: Black and Scholes 1973; Merton 1973
Black-76 for options on futures and forwards
The forward-measure version of the same formula. It prices an option on a forward or futures price F directly, with no dividend yield and no spot, and discounts the whole payoff at the risk-free rate.
| Field | Value |
|---|---|
| Formula | C = exp(-r*T)*[F*N(d1) - K*N(d2)]; P = exp(-r*T)*[K*N(-d2) - F*N(-d1)]; d1 = [ln(F/K) + sigma^2*T/2]/(sigma*sqrt(T)) |
| Equivalence to Black-Scholes-Merton | Setting F = S*exp((r - q)*T) makes Black-76 and the spot form identical at every strike |
| Parity | C - P = exp(-r*T)*(F - K), with no spot and no dividend term |
| Delta with respect to F | exp(-r*T)*N(d1), which is smaller than the spot delta by the discount factor |
| Worked | At Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. the forward is F = 100*exp(0.04*0.25) = 101.005017. Black-76 at K = 100 returns 4.485236409 for the call and 3.490220 for the put, matching the spot-form values to 1e-14. Black-76 parity: C - P = 0.995017 = exp(-0.01)*(101.005017 - 100). Forward-delta is exp(-0.01)*N(0.150000 adjusted for the forward) = 0.554049, and multiplying by dF/dS = exp(0.01) recovers the spot delta 0.559618 exactly. At K = 105 both forms return 2.390877 |
- A futures option quoted at a given volatility and an equity option quoted at the same volatility are not the same exposure, because one has forward-delta and the other spot-delta. The difference is the discount factor and it is not negligible on a long-dated contract.
- Because there is no q, Black-76 is the natural form whenever the carry is already embedded in a traded forward. Trying to back a dividend yield out of a futures price and then use the spot form reintroduces an estimate that Black-76 never needed.
- The forward-delta is bounded by exp(-r*T), not by 1. A deep in-the-money futures call cannot have a delta of one.
Source: Black 1976
Cox-Ross-Rubinstein binomial parameterisation
A lattice in which the underlying multiplies by u or by d each step, with the risk-neutral probability chosen so that the one-step expected growth equals the carry. The parameterisation is not unique; this is the one that matches the first two moments of the log return.
| Field | Value |
|---|---|
| Formula | u = exp(sigma*sqrt(dt)); d = 1/u; p = (exp((r - q)*dt) - d)/(u - d); V = exp(-r*dt)*[p*V_up + (1 - p)*V_down] |
| Step size | dt = T/n for n steps |
| Recombining property | u*d = 1, so the tree has n+1 terminal nodes rather than 2^n |
| Terminal node j of n | S*u^j*d^(n-j) for j = 0..n |
| Worked | At Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. with n = 4: dt = 0.0625, u = exp(0.20*0.25) = 1.05127110, d = 0.95122942, p = (exp(0.0025) - 0.95122942)/(1.05127110 - 0.95122942) = 0.51252345. Rolling back gives 4.24592704 against the closed form 4.48523641, an error of minus 0.23930937. At n = 1024 the value is 4.48426301, an error of minus 0.00097340, and at n = 2048 it is 4.48474968, error minus 0.00048673 - the error halves as n doubles, which is first-order convergence |
- Error halves when n doubles, so the scheme is first-order in the number of steps. Getting one more correct decimal costs ten times the work, which is why lattices are used for early exercise and almost never for European values that have a closed form.
- The value oscillates as well as converging: at these inputs n = 1 overshoots by 0.98 and n = 2 undershoots by 0.45. Averaging n and n+1 is a cheap and standard way to kill most of the oscillation.
- p is a risk-neutral probability, not a forecast. It contains the carry and nothing about the direction anyone expects.
Source: Cox, Ross and Rubinstein 1979
The trinomial lattice and its exact relation to the binomial
A lattice with three branches per step, up, middle and down, with the space step widened to sigma*sqrt(2*dt) so the probabilities remain admissible. Under the standard parameterisation it is not an independent method: it reproduces the binomial value at twice the number of steps, digit for digit.
| Field | Value |
|---|---|
| Formula | dx = sigma*sqrt(2*dt); pu = [(exp((r-q)*dt/2) - exp(-sigma*sqrt(dt/2))) / (exp(sigma*sqrt(dt/2)) - exp(-sigma*sqrt(dt/2)))]^2; pd = [(exp(sigma*sqrt(dt/2)) - exp((r-q)*dt/2)) / (exp(sigma*sqrt(dt/2)) - exp(-sigma*sqrt(dt/2)))]^2; pm = 1 - pu - pd |
| Node count | 2n+1 terminal nodes for n steps, against n+1 for the binomial |
| Probabilities at the reference inputs, n = 32 | pu = 0.25313513, pm = 0.49998046, pd = 0.24688440 |
| Measured identity | Trinomial(n) equals CRR(2n) at every n tested from 1 to 512, to all printed digits |
| Worked | At Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. the trinomial at n = 8 returns 4.42345524 and CRR at n = 16 returns 4.42345524. At n = 32 the trinomial returns 4.46969114 and CRR at n = 64 returns 4.46969114. The pattern held at every n checked. The practical consequence is that the trinomial buys accuracy per time step, not accuracy per unit of work, since 2n+1 nodes per level is roughly the same arithmetic as two binomial levels |
- The middle branch is what makes a trinomial useful in practice: a barrier or a strike can be placed exactly on a node layer, which removes the largest single source of lattice error for path-dependent payoffs.
- The identity with the binomial at 2n steps is specific to this parameterisation. Other choices of dx break it and are genuinely different schemes.
- Because pm is close to one half at small dt, most of the probability mass sits on the middle branch and the tree is doing less exploring per step than the node count suggests.
Source: Cox, Ross and Rubinstein 1979; Boyle 1986
The step-size bound that keeps the risk-neutral probability admissible
The CRR probability p is not automatically between zero and one. It exceeds one when the carry over a step is larger than the up-move the volatility allows, which makes the lattice produce arbitrary values rather than a slightly wrong one.
| Field | Value |
|---|---|
| Formula | 0 is less than p and p is less than 1 requires dt to be less than (sigma/(r - q))^2 |
| Failure mode | p above 1 gives negative weight to the down node and the rolled-back value is not a discounted expectation of anything |
| Bound at sigma = 0.20 | r - q = 0.04 allows dt up to 25 years; r - q = 0.50 allows 0.160000 years, 58.40 days; r - q = 1.00 allows 0.040000 years, 14.60 days |
| Worked | At sigma = 0.20 and r - q = 0.50 with T = 0.25: n = 1 gives dt = 0.25 and p = 1.139655, outside the range. n = 2 gives dt = 0.125 and p = 0.937995, admissible. At r - q = 1.00, n = 1, 2 and 4 all give p above one, at 1.892784, 1.423047 and 1.132179 respectively, and only n at 7 or more brings dt below the 0.040000 bound |
- The bound is almost never binding at ordinary equity rates and volatilities, and is routinely binding on a low-volatility name in a high-carry currency or on a heavily shorted stock where the effective carry is large and negative.
- A lattice that silently returns a value with p outside zero and one is the worst kind of numerical failure: the answer looks like a price. Check p once at construction rather than trusting the value.
- Widening the tree, as the trinomial does, is one fix. Reducing dt is the other. Both cost work.
Source: Cox, Ross and Rubinstein 1979
American exercise in a binomial lattice
At each node the value is the larger of the discounted continuation value and the immediate exercise value. That single comparison is the entire American feature; nothing else in the roll-back changes.
| Field | Value |
|---|---|
| Formula | V_node = max( exp(-r*dt)*[p*V_up + (1-p)*V_down], Intrinsic(S_node) ) |
| American premium | Value with the comparison minus value without it, at the same n |
| Convergence of the premium | Slower than the European value, because the exercise boundary is itself resolved only to the lattice grid |
| Worked | American put at Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. European value 3.490220. CRR with the exercise comparison: n = 50 gives 3.56022411, n = 200 gives 3.56895928, n = 1000 gives 3.57125335, n = 4000 gives 3.57167665. The premium therefore converges to about 0.0815 per share, 8.15 per contract, or 2.33 percent of the European value. American call at q = 0 returns 4.48498720 against a European 4.48523641 at n = 4000, a difference of 0.00025 which is lattice error and not an early-exercise premium: with no dividend there is none |
- With q = 0 an American call has no early-exercise premium, so any positive number a lattice reports for one is discretisation error. Reporting it as a premium is a common and avoidable mistake.
- The American put premium is driven entirely by the interest on the strike proceeds. It grows with r, with T and with how far in the money the strike sits.
- Because the boundary sits on the lattice, the premium converges more slowly than the value. Doubling n to sharpen an American premium is often necessary where it would be wasteful for a European value.
Source: Cox, Ross and Rubinstein 1979
The early-exercise boundary read off a lattice
The critical underlying price at each date below which an American put is exercised immediately. It is not an input to the lattice; it is recovered by recording, at each time step, the highest node price at which exercise beat continuation.
| Field | Value |
|---|---|
| Formula | S*(t) = max{ S_node at time t : Intrinsic(S_node) is at least the continuation value } |
| Shape | Monotonically rising in t toward the strike, meeting K exactly at expiration |
| At expiration | S*(T) = K, since continuation value is zero |
| Worked | American put at Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. CRR with n = 1000 steps, dt = 0.000250. Critical price at t = 0.025 is 86.4620; at t = 0.0625 it is 87.0106; at t = 0.125 it is 88.6773; at t = 0.1875 it is 90.9493; at t = 0.225 it is 93.8713; at t = 0.2475 it is 97.5019; at t = 0.24975 it is 99.6843. The boundary rises 13.2 points over the life and covers the last 6 of that in the final three trading days |
- The boundary is steepest at the very end. Most of the early-exercise decision compresses into the final days, which is also when the lattice resolves it worst.
- A position that sits above the boundary at 87 with the underlying at 100 is nowhere near exercise, and the same position with the underlying at 92 two days before expiry is on it. The distance to the boundary, not the distance to the strike, is the relevant number.
- For an American call on a dividend-paying underlying the boundary exists only in the interval immediately before an ex-dividend date, and is a single-date test rather than a continuous curve.
Source: Cox, Ross and Rubinstein 1979
Bjerksund-Stensland approximation for an American option
A closed-form approximation that replaces the true curved exercise boundary with a flat trigger level X, chosen from the model inputs, and prices the option as a combination of six power-and-normal terms. It is an approximation with a measurable gap to a converged lattice, not an exact value.
| Field | Value |
|---|---|
| Formula | beta = (0.5 - b/sigma^2) + sqrt((b/sigma^2 - 0.5)^2 + 2*r/sigma^2), with b = r - q; Binf = beta/(beta - 1)*K; B0 = max(K, r/(r - b)*K); X = B0 + (Binf - B0)*(1 - exp(h)), h = -(b*T + 2*sigma*sqrt(T))*B0/(Binf - B0) |
| Applies to | An American call with b = r - q below r. American puts are priced by the transformation P(S,K,r,b) = C(K,S,r-b,-b) |
| Degenerate case | At q = 0 there is no early-exercise premium on a call and the formula returns the European value exactly |
| Published benchmark reproduced | S = 42, K = 40, T = 0.75, r = 0.04, q = 0.08, sigma = 0.35 returns 5.270404, matching the value published for this case to six figures |
| Worked | American call at S = 100, K = 100, T = 0.25, r = 0.04, sigma = 0.20, q = 0.06 so b = minus 0.02. European value 3.696260. The approximation returns 3.719873. A CRR lattice with the exercise comparison returns 3.739858 at n = 500 and 3.741151 at n = 8000, so the approximation understates the converged lattice by 0.021278, which is 0.57 percent of the value and 47 percent of the early-exercise premium. At q = 0.10 the approximation returns 3.317712 against a lattice value of 3.370388, a gap of 0.052676. At q = 0 it returns 4.485236409, exactly the European value |
- The gap to the lattice grows with the size of the early-exercise premium, which is the case the approximation exists to handle. Quoting it to four decimals implies an accuracy it does not have.
- The 2002 two-step version splits the boundary into two flat segments and is materially more accurate than the 1993 single-boundary form worked above. If the premium matters, that is the version to use.
- Its real advantage is that it is a formula, so it differentiates analytically and evaluates in constant time. A lattice cannot do either, which is why the approximation survives despite the error shown here.
Source: Bjerksund and Stensland 1993; Bjerksund and Stensland 2002
Monte Carlo estimator and the standard error of the estimate
Simulate terminal prices under the risk-neutral measure, discount the payoff of each, and average. The estimate is unbiased and its uncertainty is a computable standard error that falls with the square root of the sample size, so a further correct decimal costs one hundred times the paths.
| Field | Value |
|---|---|
| Formula | S_T = S*exp((r - q - sigma^2/2)*T + sigma*sqrt(T)*z); Estimate = (1/n)*sum of exp(-r*T)*Payoff(S_T^i); SE = s_hat/sqrt(n), s_hat the sample standard deviation of the discounted payoffs |
| Convergence rate | SE proportional to n^(-1/2), independent of the payoff and of the number of dimensions |
| Paths for a target SE | n = (s_hat/SE_target)^2 |
| Confidence interval | Estimate plus or minus 1.96*SE for a nominal 95 percent interval, valid by the central limit theorem, not by any property of the option |
| Worked | European call at Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. Plain pseudo-random sampling, seed 20260827: at n = 10,000 the estimate is 4.449312 with sample s.d. 6.486307, so SE = 6.486307/100 = 0.064863 and the true value sits 0.55 standard errors away. At n = 100,000 the estimate is 4.486298 with SE 0.020719. At n = 1,000,000 it is 4.490235 with SE 0.006537. To reach an SE of 0.001 at this sample s.d. requires n = (6.54/0.001)^2, about 42.8 million paths |
- The standard error is a statement about the simulation, not about the option. A tight standard error on a mis-specified process is a precise wrong answer.
- Sample standard deviation of a call payoff is dominated by the right tail, so it is roughly 1.5 times the option value at the money and far larger for a wing. Budgeting paths from the value rather than from s_hat understates the requirement badly.
- Never quote a Monte Carlo price without its standard error. A price of 4.45 and a price of 4.49 are the same number when the standard error is 0.065.
Antithetic variates and the measured variance reduction
Pair every normal draw z with its negation and average the two payoffs before averaging across pairs. The estimator stays unbiased, the number of normal draws is unchanged, and the variance falls because the paired payoffs are negatively correlated.
| Field | Value |
|---|---|
| Formula | Estimate = (2/n)*sum over n/2 pairs of 0.5*[Payoff(z_i) + Payoff(-z_i)] |
| Why it works | Var of the average of two negatively correlated variables is below the variance of either, and the payoff is monotone in z, which guarantees the correlation is negative |
| Measured effect | Standard error ratio 0.7257 and variance ratio 0.2633 at one million draws, so about a 27 percent reduction in standard error for no extra draws |
| Equivalent path saving | A 27 percent standard-error reduction is worth a factor of 1/0.7257^2, about 1.9 times the paths |
| Worked | Same call and seed 20260827. At 10,000 draws: plain sample s.d. 6.486307 and SE 0.064863; antithetic sample s.d. 3.347707 over 5,000 pairs and SE 0.047344, a ratio of 0.7299. At 100,000 draws the SE ratio is 0.7260. At 1,000,000 draws it is 0.7257 with a variance ratio of 0.2633. The ratio is stable, which is what a variance-reduction technique should look like |
- The reduction is real but modest, and it is not free on a path-dependent payoff, where the antithetic path must be regenerated rather than reused.
- Antithetic variates help most where the payoff is close to linear in z and least where it is close to a digital, because a digital payoff is nearly uncorrelated with its own reflection.
- A control variate on the same underlying, using the closed-form European value as the control, usually beats antithetics by a wide margin on a European-style payoff. Antithetics are the cheapest thing to add, not the strongest.
Deterministic stratified sampling, and why a published Monte Carlo figure should use it
Replace pseudo-random draws with the inverse normal evaluated at the midpoints of n equal-probability strata. The result is fully deterministic, so it is reproducible by any reader without agreeing on a random number generator, and it converges far faster than pseudo-random sampling on a one-dimensional payoff.
| Field | Value |
|---|---|
| Formula | z_i = Phi_inverse((i - 0.5)/n) for i = 1..n; Estimate = (1/n)*sum of exp(-r*T)*Payoff(S*exp((r - q - sigma^2/2)*T + sigma*sqrt(T)*z_i)) |
| Reproducibility | No seed, no generator, no library dependence. The same n gives the same number on any machine |
| Measured convergence | Error falls by roughly a factor of ten per factor of ten in n at these inputs, against a factor of about three for pseudo-random sampling |
| Limitation | The advantage is a one-dimensional effect. It degrades as the number of independent normal draws per path grows |
| Worked | European call at Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. Stratified midpoint estimates: n = 10 gives 4.32466075, error minus 0.16057566; n = 100 gives 4.47126008, error minus 0.01397633; n = 1,000 gives 4.48396632, error minus 0.00127009; n = 10,000 gives 4.48511797, error minus 0.00011844; n = 100,000 gives 4.48522517, error minus 0.00001124. The pseudo-random estimator at 100,000 draws has a standard error of 0.020719, so the stratified estimate at the same n is about 1,800 times more accurate on this payoff |
- The inverse normal used here is the Acklam rational approximation, verified to within 2.7e-10 by round-tripping N(Phi_inverse(u)) against u across a ten-thousand-point grid.
- Any Monte Carlo number published as a reference figure and not reproducible without a seed is not a reference figure. Stratification removes the excuse.
- On a genuinely high-dimensional payoff, a low-discrepancy sequence with a Brownian bridge construction is the equivalent move, and it keeps the reproducibility.
Finite-difference schemes: explicit, implicit and Crank-Nicolson
Discretise the Black-Scholes partial differential equation on a grid in log-price and time and step backwards from the payoff. The three standard schemes differ in where the space derivatives are evaluated in time, and that single choice determines both stability and accuracy order.
| Field | Value |
|---|---|
| Formula | In x = ln(S): dV/dt + 0.5*sigma^2*d2V/dx2 + (r - q - sigma^2/2)*dV/dx - r*V = 0. Discretised: (I - theta*dt*L)*V_new = (I + (1 - theta)*dt*L)*V_old, with theta = 0 explicit, theta = 1 implicit, theta = 0.5 Crank-Nicolson |
| Explicit, theta = 0 | No linear solve. Conditionally stable. Accuracy first order in dt |
| Implicit, theta = 1 | One tridiagonal solve per step. Unconditionally stable. Accuracy first order in dt |
| Crank-Nicolson, theta = 0.5 | One tridiagonal solve per step. Unconditionally stable. Accuracy second order in dt |
| American exercise | Project the value onto the payoff after each step, which turns the scheme into a linear complementarity solver |
| Worked | European call at Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. closed form 4.485236409, grid to plus and minus five standard deviations. At M = 400 space steps and Nt = 1600 time steps: explicit 4.48523847, error plus 2.06e-06; implicit 4.48461107, error minus 6.25e-04; Crank-Nicolson 4.48492481, error minus 3.12e-04. At M = 200, Nt = 100 the explicit scheme diverges to minus 2.2e+81 while implicit returns 4.47896828 and Crank-Nicolson 4.48400038. Independent check on a barrier payoff: Crank-Nicolson with an absorbing boundary reproduces the closed-form down-and-out call at H = 90 to within 2.3e-06 at M = Nt = 3200 |
- Crank-Nicolson is second order in time but oscillates near a kink in the payoff, which at expiry is exactly at the strike. Two fully implicit steps at the start, the Rannacher smoothing, is the standard fix and costs almost nothing.
- Grid truncation is a separate error from discretisation. A boundary placed at three standard deviations rather than five will dominate the error no matter how fine the grid.
- The implicit scheme is the only one of the three that never blows up, which is why it is what you reach for when the inputs are unknown at build time.
The explicit-scheme stability condition, and what violating it actually does
The explicit scheme is stable only while the dimensionless quantity sigma-squared times dt over dx-squared stays at or below one. Above that the scheme does not become inaccurate; it amplifies rounding error geometrically and returns a number with no relation to a price.
| Field | Value |
|---|---|
| Formula | Stability requires sigma^2*dt/dx^2 to be at most 1, equivalently dt at most dx^2/sigma^2 |
| Equivalent probability reading | The explicit step is a three-point weighted average; the condition is exactly the condition that all three weights stay non-negative |
| Consequence of violation | Error grows by a factor of order the ratio each step, so it is not a small mistake at any grid size |
| Cost of compliance | Halving dx forces dt to fall by four, so total work grows with the cube of the space refinement |
| Worked | Same call and grid. dx = 0.005050 at M = 200. The bound gives dt at most 0.005050^2/0.04 = 0.000638 years, so Nt must be at least T/0.000638 = 392 steps. Measured: Nt = 400 gives ratio 0.9803 and a value of 4.48524380, error plus 7.40e-06. Nt = 100 gives ratio 3.9212 and a value of minus 2.2e+81. Nt = 20 gives ratio 19.6059 and minus 7.1e+29. The implicit and Crank-Nicolson schemes on the identical grids return 4.47896828 and 4.48400038 at Nt = 100, both usable |
- A divergent explicit run is easy to spot because the answer is absurd. The dangerous case is a ratio slightly above one on a coarse grid, where the answer is merely wrong by a plausible-looking amount.
- Check the ratio at construction and refuse to run rather than checking the output for reasonableness. The condition is one line of arithmetic and it is a hard boundary, not a guideline.
- This is the reason the explicit scheme is rare in production despite being the simplest to write: its accuracy is competitive only on grids where the time-step count is already dictated by stability rather than by accuracy.
Put-call parity for American options is an inequality
European parity is an identity because neither side can be exercised early. With American exercise the relationship becomes a two-sided bound, and the width of that band is the combined early-exercise value. Any claim of an arbitrage from an American call-put difference has to clear the band, not the identity.
| Field | Value |
|---|---|
| Formula | S - K is at most C_A - P_A, and C_A - P_A is at most S - K*exp(-r*T), for a non-dividend-paying underlying |
| Band width | K - K*exp(-r*T) = K*(1 - exp(-r*T)), the interest on the strike over the remaining life |
| With a dividend yield | The lower bound becomes S*exp(-q*T) - K and the band widens by the dividend term |
| European limit | C - P equals the upper bound exactly, which is the identity |
| Worked | At Reference inputs used throughout this site: S = 100, K = 100, T = 0.25, r = 0.04, q = 0, sigma = 0.20. These are inputs chosen to make the arithmetic checkable, not observations of any market. At those inputs the call is 4.485236 and the put is 3.490220. the band is 100 - 100 = 0.000000 at the bottom and 100 - 100*exp(-0.01) = 0.995017 at the top, so it is 0.995017 wide. A CRR lattice at n = 4000 gives C_A = 4.484987 and P_A = 3.571677, so C_A - P_A = 0.913311, which sits inside the band at 91.8 percent of the way up it. The European difference is 0.995017, exactly the upper bound. The gap between the American difference and the upper bound, 0.081706, is the American put premium computed independently as 0.081457 at n = 4000 - the residual 0.000249 is lattice error on the call |
- The band is narrow at short tenors and low rates and wide at long tenors and high rates. On a one-week contract it is close enough to an identity to use as a data check; on a two-year contract it is not.
- Observed American call-put differences on listed equity options sit inside this band almost always, and when they do not the explanation is normally borrow cost or an unmodelled dividend rather than a tradable arbitrage.
- The lower bound is the interesting one. It says the American difference can never fall below immediate intrinsic, which is a statement about the put being exercisable, not about the call.