EQUITY BASKET OPTION
A basket option is an option where the payout is related to the cumulative performance of a specified basket of underlying assets. Typically examples include options on baskets of currencies and equities. In this option, the multifactor element is the multiple underlying assets incorporated into option structure. The payoff of single option is based on the value at expiry or exercise value of individual asset. In contrast, the payoff of basket option is based on the aggregate value of basket of assets.
There are analytical pricing formulas available for basket options, but in this example we will use Monte Carlo method for pricing. Pricing procedure for M assets and N simulations can be described with the following steps
- Create matrix (NxM) of correlated normal random numbers by using Gaussian Copula
- Simulate M asset paths by using standard Geometric Brownian Motion (GBM)
- Sum all M simulated asset prices at expiration to get aggregate asset value at expiration
- Calculate option payoff for aggregate asset value at expiration
- Discount calculated payoff back to today
- Repeat steps 2-5 N times
- Calculate average for all discounted payoffs to get the option value today
We are aiming to have as flexible design as possible. This means, that first we try to identify the main components what might change in the future. The current design is presented in the picture below.
We can identify at least four important components, which we might want to change in the future.
- Payoff - even we are pricing multifactor option, the payoff itself is one-factor payoff since we are calculating the difference of aggregate asset value at expiration and the strike price. In the future, we might want to create implementations for other types of payoffs. As the other parts of the program are communicating with payoff interface, it is easy to change the payoff type without having any modifications for other parts of the program.
- Copula - in the future, we might want to create implementations for other types of copula models.
- Random - in the future, we might want to create implementations for other types of random number generators.
- Option - this example is pricing equity basket option, but it is also an implementation of multi-factor option interface. In the future, we might want to create implementations for other types of multi-factor options, such as the best-of or worst-of basket options.
Input parameters for the program are read from Excel worksheet. The screenshot of interface is shown in the picture below.
Important input parameters are marked with yellow color. The program is configured to read all required input parameters from the following named Excel ranges.
- Correlation matrix - range("F5:N13") = "_correlation"
- Spot prices - range("P5:P13") = "_spot"
- Spot voltilities - range("Q5:Q13") = "_vol"
- Discount curve - range("T5:U19") = "_curve"
- Number of simulations - range("C18") = "_simulations"
- Maturity - range("C20") = "_maturity"
- Error reporting - range("C21") = "_status"
- Results reporting - range("C25") = "_result"
Note, that the number of assets in the basket is not hard-coded in anywhere. There is not any particular limitation for having exactly those nine stocks in the basket. When the parameters are created for the actual program, Copula implementation is creating its random number matrix based on the dimensions of given correlation matrix and the number of simulations. If we define the named Excel range for correlation to be (3 x 3) matrix and the number of simulations to be 250 000, Copula creates (250 000 x 3) matrix of correlated random numbers. This means, that the actual simulation procedure is then having total of 250 000 paths for each asset. The only requirement is, that the number of rows and columns of correlation matrix must be correspond to the number of rows in spot and volatility ranges.
Copy-paste the following program and break it up into different VBA modules and classes. Follow the instructions given. For external library needed (dll), check my post on Gaussian Copula. Remember also to create reference into Microsoft Scripting Runtime library. Also, insert one ActiveX command button into pricer worksheet, name it as "btnExecute" and create event as shown below. The program starts, as we press this button.
In the testing run, equity basket has nine different GBP-nominated shares. Strike price has been calculated as the sum of current spot prices to be 12308.4 GBP. With the current correlation structure between the assets and 1.2 million simulated sample paths for each asset in the basket, the option value has been calculated to be approximately 631.8 GBP.
When changing all correlations to be exactly one with correlation override matrix, we get the value of 856.73 GBP, which should be approximately the same value as the sum of values of individually priced equity options. Plain Black & Scholes pricing model is giving the value of 856.32 GBP for such basket, so we are close enough.
Thanks for reading!