Skip to content

Multi-Asset BS

The Multi-Asset Black-Scholes Model is an extension of the classic Black-Scholes model that is used to price options on portfolios of multiple assets, or basket options. The model assumes that the assets in the basket follow geometric Brownian motions that are correlated.

Model Dynamics

In a multi asset Black-Scholes model, for asset \(i\), the lognormal stock process \(X^i_t\) is,

\[ dX^i_t = (\mu_i - \frac{\sigma_i^2}{2}) dt + dW^i_s \]

Where \(dW^1_s, dW^2_s, \dots\) are Weiner processes with covariance matrix

\[ cov = \begin{bmatrix} \sigma_1^2 & \rho_{12} \sigma_1 \sigma_2 & \dots & \rho_{1n} \sigma_1 \sigma_n \\ \rho_{12} \sigma_1 \sigma_2 & \sigma_2^2 & \dots & \rho_{2n} \sigma_2 \sigma_n \\ \vdots & \vdots & \ddots & \vdots \\ \rho_{1n} \sigma_1 \sigma_n & \rho_{2n} \sigma_2 \sigma_n & \dots & \sigma_n^2 \end{bmatrix} \]

Dataset

The model specific component in the dataset (BSM) is a dict with the following parameters:

  • ASSETS: ordered list of asset names
  • COV: the covariance matrix

Example

This is an example with two assets.

from finmc.models.multi import BSMC
# Covariance matrix
cov = np.array(
    [
        [0.09, 0.03],
        [0.03, 0.04],
    ]
)

# Complete dataset
dataset = {
    "MC": {
        "PATHS": 100_000,
        "TIMESTEP": 1 / 10,
        "SEED": 1,
    },
    "BASE": "USD",
    # assets with discounts and forwards for two years
    "ASSETS": {
        "USD": ("ZERO_RATES", np.array([[2.0, 0.05]])),
        "NVDA": ("FORWARD", np.array([[0.0, 116.00], [2.0, 120.64]])),
        "INTC": ("FORWARD", np.array([[0.0, 21.84], [2.0, 22.70]])),
    },
    "BSM": {
        "ASSETS": ["NVDA", "INTC"],
        "COV": cov,
    },
}

model = BSMC(dataset)
model.advance(1.0)
nvda_spots = model.get_value("NVDA")
intc_spots = model.get_value("INTC")