Diagnosing Heston Model Calibration Errors and Initial Parameters
Summary
The document presents a Heston option-pricing calibration implemented as a two-stage optimization: a genetic algorithm searches within parameter bounds, then an interior-point constrained optimizer refines the candidate. The objective compares market call prices with model prices generated by an FFT pricing routine. A small set of market and fitted prices is shown, with some noticeable discrepancies, and the author asks why the errors remain large and how to choose better initial values.
No answer or diagnosis is included, so the material does not establish the cause of the mismatch or offer a validated improvement. Relevant issues to investigate would include objective-function scaling, parameter ordering passed to the pricer, calibration bounds, option quote quality, and the weighting of errors across strikes. The displayed objective uses an unweighted norm, which can make the fit behave differently from a relative-error or volatility-based objective. The example therefore illustrates a calibration setup and open troubleshooting questions, rather than evidence that the optimization method succeeds.
Key ideas
- The example calibrates five Heston parameters with a genetic search followed by interior-point refinement.
- The objective minimizes price differences across a set of call options.
- The shown fitted prices retain uneven errors across strikes, but the document provides no diagnosis.
- Parameter mapping, bounds, quote quality, and error weighting are possible areas to inspect.
Tags
Full text
# I can not calibrate Heston model
# I can not calibrate Heston model
This is a code that I have used to calibrate Heston model. the following code describe the optimization algorithms used (genetic algorithm plus interior method)
```
function parameters = ga_Heston(S,strikes,Rate, DividendYield, Settle,Maturity,prices)
eps=1e-6
lb = [eps eps eps eps -0.99];
ub = [1 1e6 1e6 1e6 0.99];
targetfun = @(x) fitfunction(x, S,strikes,Rate, DividendYield, Settle,Maturity,prices);
parameters = ga(targetfun, 5, [], [], [], [], lb, ub, [],[]);
options = optimset('fmincon');
options = optimset(options, 'algorithm', 'interior-point');
options = optimset(options, 'Display', 'off');
parameters, funValue = fmincon(targetfun, parameters, [], [], [], [], lb, ub, [], options);
end
function value = fitfunction(param, S,strikes,Rate, DividendYield, Settle,Maturity,prices)
N=length(strikes);
model=zeros(N,1);
for k=1:N
model(k)=prices(k)-optByHestonFFT(Rate, S, ...
Settle, Maturity, 'call', strikes(k), ...
param(1), param(3), param(2), param(4), param(5), 'DividendYield', DividendYield);
end
value = norm(model)/N;
end
```
I have those result:
```
Market prices are: 0.0293 0.0126 0.0602 0.0046 0.0973 0.0022 0.1249
Model prices are: 0.0199 0.0157 0.0622 0.0106 0.0992 0.0069 0.1244
```
why do I have such big error on some results, what I have to do to be more precise and is there any method that can give me a good starting parameters for the optimization algorithm.Shown in full with attribution under the source's licence. Licence: CC BY-SA 4.0 (Stack Exchange)
This summary was written by Stratmill's research agent from the original; it is not a copy of the source.