- boulala666
**Posts:**17**Joined:**

Hey there,I have calibrated my Heston Model to market volas for 261 trading days in 2014. The Underlying is the EURUSD, as interest rates I have use the Euro implicit rate and USD OIS. My issue now is, that for each single day my correlation is positive. Is that possible? I have never seen a paper that has a positive correlation as result.I know rho is defined [-1,1], but for every calibration day? A little bit suspicious and I dont know if i can trust my results.An example dataset for the 31.01.2014, 1 year to maturity:Input:10DP 25DP ATM 25DC 10DC rd rf Spot0,10295 0,08993 0,0797 0,0764 0,0781 0,1035% 0,19% 1,3486this was calculated that way:σ_25DP= σ_25DBF-1/2 *σ_25DRR+ σ_ATMσ_25DC= σ_25DBF+1/2 *σ_25DRR+ σ_ATMRR10D RR25D ATM BF25D BF10D-0,0248 -0,01353 0,079725 0,00345 0,0108Output:v01y vv1y kappa1y theta1y rho1y Feller Condition1y0,006356076 0,218474777 1,5 0,00851788 0,330004278 -0,022177589Implied Vols10,30027291 8,97891378 7,989664084 7,62976013 7,813644113As you can see it is an almost perect fit.So what do you think about the positive rho? Do you think it must be positive, because of the distribution of the MarketVola Smile. Or do you think the result cant be right?Regards boulala

This is not surprising for FX as the Heston rho for C1/C2 is minus the rho for C2/C1 => at least one rho is >=0.However, your volatilities seem to have a negative skew (on the graph), then one would expect a negative rho.

I have some experience of the Heston calibration using equity options. Generally speaking, the calibration gets more stable when you calibrate to a vol surface instead of a skew. If you have just time series for a single skew you may end up getting decent fit BUT very unstable and economically unreasonable values. Also, if possible, try to use global optimizer to seek out the global minimum lets say for the first trading day. Then use this set of parameters as the initial guess for the subsequent calibration runs. If that is not stable when calibrated to whole sample try to use penalty function/penalty term in your loss function to "force" the program to seek a local minimum near the "historical" global minimum.The method I just described is ad hoc and I dont guarantee that it yields any "better" parameters. Personally, I dont like to use the Heston (or any other stoch vol model.) in practice just because of the calibration. The model itself is nice but the calibration makes the real life application abit bogus.

Last edited by JSHellen on March 22nd, 2015, 11:00 pm, edited 1 time in total.

- boulala666
**Posts:**17**Joined:**

Thank you both.@JSHellen: I have the Vol Surface for each day, but I calibrate each Maturity of the surface seperately. Do you mean I should do one calibration for each day including every maturity? Am I right?Yes I was thinking about a global calibration for the first day. But I have to write a new code for it thats why I tried in a first step just a local one

Interesting. I agree with JSHellen's advice. But to try to confirm boulala666's result, I plotted the model IV's for a larger range of strikes.The minimum IV seems to agree and, as you can see, the IV plot is not too far from symmetric with this positive rho. But, if you look at the plot closely, you can see the slope of the IV at K=S is positive, as you might expect with a positive rho (although this is really only guaranteed very close to expiration).And indeed, flipping the sign of rho, keeping the other parameters the same, will generate a new (less symmetric) plot with a negative skew slope at K=S.I can't tell from boulala666's plot if there is agreement on this aspect, as he is plotting vs Delta.But, as VivienB noted, the OP's plot looks suspicious on this point.So, this looks like something to double check on both the Heston fit and the market data for the EURUSD options.

Last edited by Alan on March 22nd, 2015, 11:00 pm, edited 1 time in total.

QuoteOriginally posted by: boulala666Thank you both.@JSHellen: I have the Vol Surface for each day, but I calibrate each Maturity of the surface seperately. Do you mean I should do one calibration for each day including every maturity? Am I right?Yes I was thinking about a global calibration for the first day. But I have to write a new code for it thats why I tried in a first step just a local one :DYes you are supposed to do that. Those parameters should yield the whole surface . Why? Let me try to explain it. This is how I understand and use the calibration with satisfactory results:The idea behind all this stochastic volatility with or without jumps is to "explain" the whole smile action with a bunch of parameters. Im sure you are familiar with the motivation for this: if you back out the BS implieds for all available option prices and maturities you see different implieds which does not fit into BS assumptions. You also see (in equities) that low strike vols tend to revert to lower level as maturity increases and high strike vols tend to increase. This is the mean reversion of ivol. So options have different BS implied vols as strike and maturity is changed. Now, this implies that the distributional assumption about the evolution of the underlying asset does not follow normal distribution. So to "fix" this issue the Heston model introduces vol of vol and mean reversion which yields abit more similar distribution which is observable in rela markets. Fix those 5 parameters, price calls with same maturities and strikes. Back out BS implieds and boom you see the similar "synthetic" BS implied vol dynamics.Now what comes to the calibration issue. Think about this: If you just calibrate to each skew individually, each skew implies (of course it is possible to get exactly similar params out of each skew but then again if you had infinite amount of apes jumping on a type writer......) different Heston parameters for each maturity. Then you logically ask yourself: Which set of parameters is the right one if I had to price option with maturity which drops in between those you have? Solution: calibrate each day to current vol surface,i.e., to all available information. This way, each day has only one set of Heston parameters. Moreover, those parameters explain the whole surface. Now you have a model which is consistent with vanillas and can be used to price those options for which market implieds are not available.The calibration in VBA / Matlab is not that hard for the whole surface. Try it first for one single day and then create a loop that implements it for the whole data. Make sure that you use at least the Fourier transformation of the call/put price for Heston. It saves time significantly. Trust me, the time you spend understanding the Fourier transform is worth it. When you go to work at a desk and even if its not a quant one you need your own model for sanity checking. And the model has to be fast.Create array where you have all the strikes and maturities K1 K2 K3 K40.5 3.45% 4.45% 5.45% 6.56%1.0 4.45% 5.45% 6.45% 7.45%1.4 5.45% 6.45% 7.45% 8.45%etc...Then create a loop which loops through the matrixk denotes strike indext denotes maturity indexparam=[10.0 0.004 1.5 0.05 -0.75]ub = [20.0 1.0 5.0 1.0 1.0]e=0.000001lb =[20.0 e e e -1.0]For day=1:1**use fmincon**endObjective Function could look like thisFor t=1:n For k=1:4 If Type= "NoPenalty" Then ObjFun=sqrt((MktPrice(t,k)-HestonPrice(t,k,param))^2) If Type ="Penalty" Then ObjFun=sqrt((MktPrice(t,k)-HestonPrice(t,k,param))^2 +alpha*(param-param(t-1)) End IfendAnd one more thing. Do not waste time trying to build those fancy Differential Evolution or Simulated Annealing algos. These may yield better results, but in real life there is no time to spend 6 hours to calibrate a model and from my experience they yield similar results.

Last edited by JSHellen on March 22nd, 2015, 11:00 pm, edited 1 time in total.

- boulala666
**Posts:**17**Joined:**

@JSHellen: thanks for the very detailed answer. I will try my best to implement it

QuoteOriginally posted by: boulala666@JSHellen: thanks for the very detailed answer. I will try my best to implement it :)I have some Matlab code on my old computer but its in different country. You should do it yourself to gain more confidence solving this kind of problems. But it you are still unable to do it, pm me, and Ill send it to you once I visit Finland.

- boulala666
**Posts:**17**Joined:**

@JSHellen: that would be awesome. Another point: which interest rates would you use to calibrate Heston for EURUSD Vanillas??