Jack Pai
2017-06-02 19:02:23 UTC
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
--
View this message in context: http://quantlib.10058.n7.nabble.com/Use-Local-Volatility-in-FDAmericanEngine-tp18328.html
Sent from the quantlib-users mailing list archive at Nabble.com.
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
--
View this message in context: http://quantlib.10058.n7.nabble.com/Use-Local-Volatility-in-FDAmericanEngine-tp18328.html
Sent from the quantlib-users mailing list archive at Nabble.com.