Binomial Tree Option Pricing › Convergence to Black-Scholes

Michael BrenndoerferDecember 1, 20255 min read
Quantitative FinanceAll chapters
Part 6 of 15Numerical Methods for Derivative Pricing
Chapter 33Binomial Tree Option Pricing › Convergence to Black-Scholes
Reading section 6 of 12 · Convergence to Black-Scholes · 5 minSection 6 of 12 · 5 min

Book contents

Section 6 of 12 · 5 min read

Binomial Tree Option Pricing › Convergence to Black-ScholesOne section · Sections in this chapter6 / 12 ↓
Reading tools Definitions & inline links

Choose your expertise level to adjust how many terms are explained. Beginners see more tooltips, experts see fewer to maintain reading flow. Hover over underlined terms for instant definitions.

Article links

Make inline references clickable

One of the most elegant properties of the binomial model is its convergence to the Black-Scholes price as the number of steps increases. This convergence validates that the binomial approach captures the same economic principles as the continuous-time framework. It also offers practical assurance that binomial trees produce accurate prices when enough steps are used.

Theoretical Convergence

As we discussed in Part III Chapter 2, the binomial random walk converges in distribution to geometric Brownian motion as N→∞N \to \infty (a consequence of the central limit theorem applied to the sum of log-returns). Each step in the binomial tree contributes a small random increment to the log-price, and the sum of many such increments becomes normally distributed. Since the Black-Scholes model assumes geometric Brownian motion, and since both models use risk-neutral valuation, the binomial price converges to the Black-Scholes price.

The rate of convergence for European options is O(1/N)O(1/N), meaning doubling the number of steps roughly halves the error. However, convergence is not monotonic: prices oscillate around the true value, particularly for at-the-money options. This oscillation arises from the discrete nature of the tree and how the strike price falls relative to the tree's nodes at each step.

In[19]:
Code
import numpy as np
from scipy.stats import norm


def black_scholes_price(S0, K, T, r, sigma, option_type="call"):
    """Calculate Black-Scholes price for European options."""
    d1 = (np.log(S0 / K) + (r + sigma**2 / 2) * T) / (sigma * np.sqrt(T))
    d2 = d1 - sigma * np.sqrt(T)

    if option_type == "call":
        price = S0 * norm.cdf(d1) - K * np.exp(-r * T) * norm.cdf(d2)
    else:
        price = K * np.exp(-r * T) * norm.cdf(-d2) - S0 * norm.cdf(-d1)

    return price
In[20]:
Code
# Compare binomial convergence to Black-Scholes
S0 = 100
K = 100
T = 1
r = 0.05
sigma = 0.2

bs_price = black_scholes_price(S0, K, T, r, sigma, "call")

# Calculate convergence data
step_counts = [10, 25, 50, 100, 200, 500, 1000]
convergence_data = []

for N in step_counts:
    binomial_price = binomial_tree_european(S0, K, T, r, sigma, N, "call")
    error = binomial_price - bs_price
    pct_error = 100 * error / bs_price
    convergence_data.append((N, binomial_price, error, pct_error))
Out[21]:
Console
Black-Scholes Call Price: $10.450584

Binomial Tree Convergence:
---------------------------------------------
     N     Binomial        Error    % Error
---------------------------------------------
    10 $  10.253409    -0.197175   -1.8867%
    25 $  10.520966     0.070382    0.6735%
    50 $  10.410692    -0.039892   -0.3817%
   100 $  10.430612    -0.019972   -0.1911%
   200 $  10.440591    -0.009992   -0.0956%
   500 $  10.446585    -0.003998   -0.0383%
  1000 $  10.448584    -0.001999   -0.0191%
Out[22]:
Visualization
Line chart showing binomial option prices oscillating and converging toward the Black-Scholes reference price as the number of steps increases.
Binomial tree option prices oscillating and converging toward the Black-Scholes value (dashed reference line) as the number of steps $N$ increases.
Line chart showing the pricing error alternating in sign and decreasing in magnitude as the number of steps increases, illustrating O(1/N) convergence.
Pricing error relative to Black-Scholes, alternating in sign and decreasing in magnitude, illustrating the $O(1/N)$ convergence rate of the CRR parameterization.

The characteristic oscillation occurs because of how the strike price falls relative to the tree's nodes. For even N, the strike may fall exactly on a node, while for odd N it falls between nodes. This creates alternating over- and under-estimation that damps out as N increases.

Convergence Rate Analysis

The error decreases roughly proportionally to 1/N1/N:

In[23]:
Code
# Analyze convergence rate
N_values = [25, 50, 100, 200, 400, 800]
errors = []

products = []

for N in N_values:
    binomial_price = binomial_tree_european(S0, K, T, r, sigma, N, "call")
    err = abs(binomial_price - bs_price)
    errors.append(err)
    products.append(N * err)
Out[24]:
Console
Convergence Rate Analysis:
--------------------------------------------------
     N      |Error|    N × |Error|
--------------------------------------------------
    25     0.070382         1.7596
    50     0.039892         1.9946
   100     0.019972         1.9972
   200     0.009992         1.9985
   400     0.004998         1.9991
   800     0.002499         1.9994

If convergence is O(1/N), then N × |Error| should be roughly constant.

The product N×∣Error∣N \times |\text{Error}| being approximately constant confirms the O(1/N)O(1/N) convergence rate. This means that to reduce the error by a factor of 10, we need to increase the number of steps by a factor of 10, which has practical implications for computational cost.