Root finding in Lord Kahl Method to Compute Heston Call Price (Part III)
I forgot two important points in my previous post about Lord-Kahl method to compute the Heston call price:
- Scaling: scaling the call price appropriately allows to increase the maximum precision significantly, because the Carr-Madan formula operates on log(Forward) and log(Strike) directly, but not the ratio, and alpha is multiplied by the log(Forward). I simply scale by the spot, the call price is (S_0*max(S/S_0-K/S0)). Here are the results for Lord-Kahl, Kahl-Jaeckel (the more usual way limited to machine epsilon accuracy), Forde-Jacquier-Lee ATM implied volatility without scaling for a maturity of 1 day:
Strike | Lord-Kahl | Kahl-Jaeckel | Forde-Jacquier-Lee |
---|---|---|---|
62.5 | 2.919316809400033E-34 | 8.405720564041985E-12 | 0.0 |
68.75 | -8.923683388191852E-28 | 1.000266536266281E-11 | 0.0 |
75.0 | -3.2319611910032E-22 | 2.454925152051146E-12 | 0.0 |
81.25 | 1.9401743410877718E-16 | 2.104982854689297E-12 | 0.0 |
87.5 | -Infinity | -1.6480150577535824E-11 | 0.0 |
93.75 | Infinity | 1.8277663826893331E-9 | 1.948392142070432E-9 |
100.0 | 0.4174318393886519 | 0.41743183938679845 | 0.4174314959743768 |
106.25 | 1.326968012594355E-11 | 7.575717830832218E-11 | 1.1186618909114702E-11 |
112.5 | -5.205783145942609E-21 | 2.5307755890935368E-11 | 6.719872683111381E-45 |
118.75 | 4.537094156599318E-25 | 1.8911094912255066E-11 | 3.615356241778357E-114 |
125.0 | 1.006555799739525E-27 | 3.2365221613872563E-12 | 2.3126009701775733E-240 |
131.25 | 4.4339539263484925E-31 | 2.4794388764348696E-11 | 0.0 |
One can see negative prices and meaningless prices outside ATM. With scaling it changes to:
Strike | Lord-Kahl | Kahl-Jaeckel | Forde-Jacquier-Lee |
---|---|---|---|
62.5 | 2.6668642552659466E-182 | 8.405720564041985E-12 | 0.0 |
68.75 | 7.156278101597845E-132 | 1.000266536266281E-11 | 0.0 |
81.25 | 7.863105641534119E-55 | 2.104982854689297E-12 | 0.0 |
87.5 | 7.073641308465115E-28 | -1.6480150577535824E-11 | 0.0 |
93.75 | 1.8375145950924849E-9 | 1.8277663826893331E-9 | 1.948392142070432E-9 |
100.0 | 0.41743183938755385 | 0.41743183938679845 | 0.4174314959743768 |
106.25 | 1.3269785342953315E-11 | 7.575717830832218E-11 | 1.1186618909114702E-11 |
112.5 | 8.803247187972696E-42 | 2.5307755890935368E-11 | 6.719872683111381E-45 |
118.75 | 5.594342441346233E-90 | 1.8911094912255066E-11 | 3.615356241778357E-114 |
125.0 | 7.6539757567179276E-149 | 3.2365221613872563E-12 | 2.3126009701775733E-240 |
131.25 | 0.0 | 2.4794388764348696E-11 | 0.0 |
One can now now see that the Jacquier-Lee approximation is quickly not very good.
- Put: the put option price can be computed using the exact same Carr-Madan formula, but using a negative alpha instead of a positive alpha. When I derived this result (by just reproducing the Carr-Madan steps with the put payoff instead of the call payoff), I was surprised, but it works.