Login  Register

Use Local Volatility in FDAmericanEngine

Posted by Jack Pai on Jun 02, 2017; 7:02pm
URL: http://quantlib.414.s1.nabble.com/Use-Local-Volatility-in-FDAmericanEngine-tp18328.html

Hi,

I'm trying to use the FDAmericanEngine in QL to price American Option with Local Volatility.

I've made these steps:

1, provide local volatility. GeneralizedBlackScholesProcess already provides an implementation for local vol, I overwrote this with my own. This is not my question ( FYI, I've changed FDAmericanEngine to take a StochasticProcess1D instead of GeneralizedBlackScholesProcess, and my own LocalVolatilityProcess is a subclass of StochasticProcessID and implements the diffusion by returning local volatility that I provide)

2, create FDAmericanEngine with last argument timeDependent set to true. This will allow the engine to update the Operator on every single step with the diffusion provided by my LocalVolatilityProcess.

That's the key changes I made. Now the FDAmericanEngine will get local volatility based on time and underlying price in every step to generate Operator.

My question:
1, I noticed that at the end of the FDStepConditionEngine.hpp, the calculate() method, it use the FD Engine to get both American (or any Exotic) and European (the Control set) option value. Then, it gets the difference between the American and European, and apply the difference to the Analytical BlackCalculator result for European Option. So it is taking the Black Analytical results as the base, and adding only the difference from the FD Engine. Why not use the FD Engine result for the American (Exotic) Option directly? Current implementation still depends on Black Vol. If user only has Local Vol, FDAmericanEngine won't be able to calculate option value at all.

2, I tried to use the value from the FDStepConditionEngine calculate() directly, without going through the BlackCalculator at all. In other words, I take the FD Model output directly, after rollback to T0, without going through the subtract Control value (FD European value) and add BlackCalculator value.  I compared the FDStepConditionEngine value to the BlackCalculator value for European Option, the difference is quite big, can be up to 10%. I'm wondering, if the FD step engine was known for big error? Is that why it uses Black Analytical calculator as the base for results?

Thanks