# Basket option: two assets

PricingLab by Raganel Consulting, powered by MatLogica AADC

## What it values

A basket option pays out on the combined value of several assets rather than one. This model prices a call on an equally weighted basket of two assets: at expiry it pays the amount by which half of asset 1 plus half of asset 2 ends above the strike. Because the two assets do not always move together, the basket swings less than the average of the two, so the option costs less than half a call on each asset. How much less depends on the correlation between them. The model returns the price and how it moves with each asset's price (delta 1 and delta 2), with asset 1's volatility (vega 1) and with the interest rate (rho).

## Who uses this kind of number

Equity and multi-asset derivatives desks, structurers who build notes on baskets of shares or indices, investors hedging a portfolio with one option instead of several, and risk and validation teams checking dealer quotes.

## Inputs

| Name | Unit | Default | Meaning |
|---|---|---|---|
| `spot_1` | price | 100 | Current price of asset 1 |
| `spot_2` | price | 100 | Current price of asset 2 |
| `strike` | price | 100 | Strike on the basket (0.5 × asset 1 + 0.5 × asset 2) |
| `vol_1` | fraction/yr | 0.20 | Volatility of asset 1 |
| `vol_2` | fraction/yr | 0.25 | Volatility of asset 2 |
| `correlation` | fraction | 0.5 | Correlation between the two assets |
| `rate` | fraction/yr | 0.05 | Risk-free rate, continuously compounded |
| `maturity` | years | 1.0 | Time to expiry |
| `n_paths` | count | 262,144 | Monte Carlo paths (262,144 at most on the free hosted service) |

Every input has a supported range; `describe_model` lists it. Any input you leave out takes its default.

## Outputs

- **Value**: the option price, in the same currency as the spot prices.
- **delta_1, delta_2**: change in price per 1.00 change in the price of asset 1 or asset 2.
- **vega_1**: change in price per 1.00 change in the volatility of asset 1 (per 0.01, divide by 100).
- **rho**: change in price per 1.00 change in the interest rate (per 0.01, divide by 100).
- **Timing** of the calculation in milliseconds.

## How the sensitivities are computed

The model simulates the two asset prices together, day by day, with the chosen correlation, and pays the call on the basket at expiry. All four sensitivities come from that same run, in one forward pass and one backward pass over the calculation (adjoint algorithmic differentiation).

## How they are checked

**Against bump-and-revalue.** The `check_against_bumping` tool nudges each input up and down, re-prices on the same random paths, and reports the gaps. Measured on 5 November 2026 at the default inputs, 262,144 paths, on two cores of an Intel Xeon 8280L:

| Sensitivity | One pass | Bump-and-revalue | Gap (relative to the largest sensitivity) |
|---|---|---|---|
| delta_1 | 0.313171 | 0.313171 | 0.000001% |
| delta_2 | 0.323526 | 0.323526 | 0.000001% |
| vega_1 | 15.88826 | 15.88824 | 0.00005% |
| rho | 53.4100 | 53.4103 | 0.0005% |

All agree within the 2% tolerance the check applies. The one-pass calculation took 975 ms; bump-and-revalue needed 8 valuations and took 4,797 ms.

**Against an independent pricer.** There is no exact formula for a basket option, so the price is compared with QuantLib, the open-source pricing library. Its Monte Carlo basket engine (400,000 samples) gives 10.2737 ± 0.0228 for the default option; this model gives 10.2596 with 262,144 paths, inside that band.

## What the model includes

- One European call on an equally weighted basket of two assets.
- Both assets follow the Black–Scholes model, lognormal with their own constant volatilities, a constant correlation between them, a constant interest rate and no dividend yield.

It is designed to price two-asset basket calls and their hedge sensitivities, with every number checkable against bumping and against an independent pricer.

## Worked example (default inputs)

A one-year at-the-money basket call: both assets at 100, strike 100, volatilities 20% and 25%, correlation 0.5, rate 5%. Run on 5 November 2026 with 262,144 paths:

| Output | Result |
|---|---|
| Price | 10.2596 |
| delta_1 | 0.3132 |
| delta_2 | 0.3235 |
| vega_1 | 15.89 per 1.00 of volatility (about 0.159 per volatility point) |
| rho | 53.41 per 1.00 of rate (about 0.534 per percentage point) |

This is the same run as the QuantLib comparison above. The value with all four sensitivities took 966 ms.

## Three ways to use it

**1. From an AI tool, through the hosted MCP endpoint.** In any MCP client, add a remote server with this address and no authentication:

```
https://mypricinglab.com/lab/mcp
```

Then ask, for example: "Price the basket option with correlation 0.2 and with correlation 0.8, and compare the prices." The tools are `list_models`, `describe_model`, `price_model`, `check_against_bumping` and `run_model_function`. The hosted service is free, needs no login, and caps the number of paths.

**2. In Excel.** Install the PricingLab add-in and open the workbook `PricingLab_BasketOption.xlsx`. Instructions and downloads: https://mypricinglab.com/excel

**3. On your own machine.** The local install runs the same tools with no size caps, and your inputs never leave your machine. It is sent on request (Linux x86-64 today; ask about Mac and Windows): write to info@mypricinglab.com. Once installed:

```
pricinglab mcp      # MCP server for a local MCP client
pricinglab serve    # local web server for the Excel workbook
```

Details: https://mypricinglab.com/install

## With login

A private hosted service, with your own trades and larger runs, is available. Contact us.

## Contact

PricingLab by Raganel Consulting, powered by MatLogica AADC. To run this on your own book, inside your own network, write to info@mypricinglab.com.
