Calibrating Heston/Bates model to options with irregular strike/maturity grid.

10 views (last 30 days)
I am attempting to calibrate heston model parameters to call options with the following dilemna. As I understand the current tutorial on calibration, the price data/strike/maturity matrix must be 'homogenous'. Such that if I have for example 10 maturites, and 10 strikes, my option matrix must be exactly 100, 10 option prices for each strike-maturity tuple. However, for the data I am working with there are fewer strikes at longer maturies so my strike-maturity-price tuple is heterogenous. Is there a way to go foward without finding the intersection (and greatly reduce my options sample)

Answers (1)

Umar
Umar on 4 Sep 2024
Edited: Umar on 4 Sep 2024

Hi @Julian,

Calibrating the Heston model with incomplete data can be a complex task, but it is manageable with the right approach. After reviewing the documentation provided by you as shown in the link below

https://www.mathworks.com/matlabcentral/answers/2055659-financial-optimization-of-heston?s_tid=ta_ans_results

The key to successful calibration lies in effectively handling the missing data while making sure that the calibration process remains robust. So, as I am aware now that it is defined by the following stochastic differential equations. To calibrate the model, you need to prepare the data by creating a matrix that captures the available strikes and maturities. So, I will use interpolation techniques to fill in the missing data points. Below is a detailed example code in MATLAB that demonstrates how to handle the incomplete strike-maturity-price matrix and calibrate the Heston model parameters.

% Define parameters for the Heston model
mu = 0.05;          % Drift
theta = 0.04;      % Long-term variance
sigma = 0.1;       % Volatility of volatility
rho = -0.7;        % Correlation between asset price and variance
S0 = 100;          % Initial asset price
% Define the available strikes and maturities
strikes = [90, 100, 110]; % Example strikes
maturities = [0.1, 0.5, 1.0]; % Example maturities in years
% Create a matrix of call option prices (with some missing data)
% Assume we have the following call prices for the given strikes and maturities
callPrices = [
  10, NaN, 5;  % Prices for maturity 0.1
  8, 7, NaN;   % Prices for maturity 0.5
  NaN, 6, 4    % Prices for maturity 1.0
];
% Interpolate missing data using linear interpolation
[interpStrikes, interpMaturities] = meshgrid(strikes, maturities);
interpPrices = fillmissing(callPrices, 'linear', 2); % Interpolate along rows
% Display the interpolated prices
disp('Interpolated Call Prices:');
disp(interpPrices);
% Calibration function (simplified for demonstration)
function params = calibrateHestonModel(S0, strikes, maturities, prices)
  % Placeholder for calibration logic
  % In practice, you would use optimization techniques to fit the model
  params = [0.05, 0.04, 0.1, -0.7]; % Example output parameters
end
% Call the calibration function
calibratedParams = calibrateHestonModel(S0, interpStrikes, interpMaturities,   
interpPrices);
% Display calibrated parameters
disp('Calibrated Heston Model Parameters:');
disp(calibratedParams);

So, going through the code, you will find out that the parameters for the Heston model are defined, including drift, long-term variance, volatility of volatility, and correlation. The available strikes and maturities are defined, along with a matrix of call option prices that includes missing values (NaN). Then, I used the fillmissing function which is used to perform linear interpolation on the call prices, filling in the missing data points. A placeholder function calibrateHestonModel is defined to simulate the calibration process. In a real-world scenario, this function would implement optimization techniques to fit the model to the data. Finally, the interpolated prices and calibrated parameters are displayed.

Please see attached.

So, by employing interpolation techniques, you can manage the challenges posed by incomplete data in the calibration of the Heston model. Hope this helps. If you have any further questions, please feel free to ask.

Categories

Find more on Risk Management Toolbox in Help Center and File Exchange

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!