|
From: Luigi B. <lui...@gm...> - 2007-11-02 16:16:48
|
Hi Frank, On Thu, 2007-11-01 at 22:12 +0100, Frank Hövermann wrote: > When I change the value which is passed to .withTimeSteps starting > from 1 to, say, 5 in the case of non-flat vol term structure (but flat > skew) which is defined by 5 points on the time scale, the value 1 > results in a plain vanilla call option's value which corresponds to > the start vol (all else being equal). Increasing the number of time > steps the option's value seems to approach the value of the closed > form solution where the speed of convergence depends on the particular > shape of the term structure in the neighborhood of maturity. > > I would expect, especially in the case of one time step for this plain > vanilla call, the vol to be taken as the terminal vol not the initial > one. Am I wrong? No, you're right. The problem is in the way that the Black-Scholes stochastic process is discretized. By default, it uses Euler discretization, which at each step simply takes the initial value (see <ql/processes/eulerdiscretization.cpp>.) You can obtain the behavior you want by defining another discretization (you can do it by cloning the Euler code and modify it) that takes the terminal value. Once you have implemented it, you can pass it to the BlackScholesProcess constructor so that it overrides the default behavior. If you want, you can implement more refined behaviors, too (such as integrating the variance, or using some predictor-corrector algorithm.) Luigi P.S. If you implement the new class and want to contribute it, I'll be glad to add it to the library. -- The nice thing about standards is that there are so many of them to choose from. -- Andrew S. Tanenbaum |