Hello,I am calibrating the Heston (93) model to real S&P500 option data from 23.6.2005 - 14.6.2007 using Matlab fmincon optimization with the following initial guesses and constraints:x0 =[4.190.05 0.15 0.05 -0.95]lb = [e e e e -.999] % Lower bounds for the parameter estimates ub = [100 10 10 10 0.9999] % Upper bounds for the parameter estimatesObjective function is (MarketPrice - HestonPrice)^2*(1/N) or MSEI also use the estimated parameters from time t as initial guesses for time t+1.Results are abit strange. I keep getting highly positive correlation, usually it is between +0.8 - +0.99. Also the reversion speed tends to be around +50. Other parameters converge to 0.000001. Errors tend to be zero point something using those constraints. However, if I give correlation constraint ub as -0.2 the calibration errors increase drasticly. The question is that should I prefer small calibration error and ignore the "economicly unreasonable" parameters OR should I put more strict constraint and ignore the optimization error?Thank you

- observer84
**Posts:**195**Joined:**

Have you tried out alternative objective functions such as relative price or implied volatility? This way you seem to overweigh at-the-money options relative to out-of-the money ones.How does the implied volatility smile of your calibration-data set look like?bestobs

I have not tried alternative objective functions. I tried to search for academic studies about which cost function is the "best" but there seems to be no consensus whatsoever. They all seem to yield different parameters.This might sound abit stupid question, but why should I use the implied vol instead? I ran another set of calibrations yesterday and found out that the correlation is first very negative -0.99 and then suddenly jumps to positive 0.99 in the middle of the sample period. Is it reasonable to use that high positive price-vol correlation?

Last edited by JSHellen on August 3rd, 2014, 10:00 pm, edited 1 time in total.

Implied volatility is a good candidate, however the inversion has a huge computational cost. An alternative is to use (MarketPrice - ModelPrice) / BSVega as an approximation of MarketVol - ModelVol (the BS vega is computed with the market vol so no multiple inversion needed)

Before asking for help, the least you can do is spend some time seeing what others have done - no more than a few minutes with Google - Heston calibration smart parameters were my four chosen wordsThis is the first article returnedhttp://papers.ssrn.com/sol3/papers.cfm?abstract_id=1496982

QuoteOriginally posted by: spursfanBefore asking for help, the least you can do is spend some time seeing what others have done - no more than a few minutes with Google - Heston calibration smart parameters were my four chosen wordsThis is the first article returnedhttp://papers.ssrn.com/sol3/papers.cfm?abstract_id=1496982I understand your point.However, as I mentioned I have done some excessive research and read through almost all papers regarding the calibration using local optimization. In addition, alot of the number crunching is omitted and only results are given.

Calibration works now and all parameters seem to be quite stable. I used initial parameters from a paper "A Perfect Calibration! Now What?" http://workshop.mathfinance.com/2005/pa ... ension.pdf and used the following code. The idea is to use the estimated parameters from t-1 as starting values for period t.for t=1:NT if t==1 x0=x0 [param feval] = fmincon(@HestonObjFun,x0,[],[],[],[],lb,ub) output(t,1)=param(1) output(t,2)=param(2) output(t,3)=param(3) output(t,4)=param(4) output(t,5)=param(5) CalibrationError(t,3)=feval else x0=[output(t-1,1) output(t-1,2) output(t-1,3) output(t-1,4) output(t-1,5)] [param feval] = fmincon(@HestonObjFun,x0,[],[],[],[],lb,ub) output(t,1)=param(1) output(t,2)=param(2) output(t,3)=param(3) output(t,4)=param(4) output(t,5)=param(5) CalibrationError(t,3)=feval end end

GZIP: On