|
From: Luigi B. <lui...@gm...> - 2012-12-03 08:15:24
|
Thanks Peter, I'll try and have a look. Luigi On Sun, Dec 2, 2012 at 9:03 PM, Peter Caspers <pca...@gm...> wrote: > Hi, > > I implemented a Markov functional model which I would like to contribute > to the lib. I would consider the development to be something like an > alpha version. > > The model is an one factor interest rate model with a non parametric > numeraire that can be fitted to a set of (arbitrage free) smiles on an > option expiry grid. In addition a volatility function can be used to > calibrate to a second instrument set (but only for one strike per > expiry). An example would be a numeraire calibration to constant > maturity swaption smiles which allows to recover market cms coupon > prices. As a second instrument set atm coterminal swaptions can be > chosen. The resulting model is then a good candidate for pricing > callable cms swaps. The mean reversion parameter in the model is fixed, > i.e. it can not be calibrated, but must be given externally. It can be > used to control intertemporal correlations. References can be found in > the documentation mentioned below. > > The package comes with the model, an implementation of Kahale's method > for arbitrage free smile extrapolation (because arbitrage free smile > input is essential for the numeraire to calibrate) and vanilla pricing > engines for caps and swaptions. The swaption engine can also handle > bermudan exercise rights. At the moment all engines are based on > numerical integration. PDE engines and more product support will follow > soon. > > You can find the code on github. I updated only the project files for > msvc10, but it should be easy to include the relevant files in other > enviroments. They are located in ql/experimental/models/markovfunctional. > > https://github.com/pcaspers/quantlib/commit/879c0fdd4f4149facdc8e771d838acafa7d6aae9 > > A good starting point is probably running the test-suite to which I > added a suite for the mf model which can be found in > test-suite/markovfunctional.xpp. > > There are some changes in the ql I made, some essential for the model to > work, others which I found worthwhile to do in the context and which > support the test cases to run smoothly. I posted some of these changes > on this list in the past, but I summarize all of them at the end of this > mail. > > Any feedback is highly appreciated. There is also some documentation > available here > > http://papers.ssrn.com/sol3/papers.cfm?abstract_id=2183721 > > Thank you and kind regards > Peter > > > Changes to the lib I made: > > 1 ql/math/cubicinterpolation.hpp > > essential for mf model, I added the Lagrange boundary condition. I > tested against the MatLab implementation. Works fine. > > > 2 ql/math/sabrinterpolation.hpp > > not essential for mf model, but necessary for the test suite to run. > > I use a derivative of swaptionvolcube1 for daily swaption smile > calibration for quite a time now. I noticed that two problems occur from > time to time: First, calibration is not satisfactory because of unlucky > start values. The solution for this I implemented is not very smart, but > it is working well and is still fast enough. Secondly (very rarely) > calibration stops with error values. I located the problem to be the > transformation of valid parameters to numeric error values during > optimization. Fix is very easy. > > More specifically I added a try and error method for calibration. Up to > maxGuesses start values for the calibration are generated. If the error > is below errorAccept the current calibration is returned immedeately > without further tries. Otherwise the best calibration seen is returned. > The error here may be specified to be the average error instead of the > maximum error. The parameter transformation is adjusted to ensure that > valid parameter values are not > transformed into error values during calibration. > > > 3 ql/models/calibrationhelper.xpp > > not essential for mf model, but necessary for test suite to run. > > I made the calibration helpers lazy objects. Seems reasonable because > otherwise market data structures loose their lazy behaviour. > > > 4 ql/models/model.xpp > > essential for mf model. I replaced the update() call during calibration > by generateArguments() and notifyObservers(). This allows to separate > the smile update triggered by market data change from the numeraire > update triggered by model volatility changes. > The calibration to a second instrument set is faster then. Behaviour of > existing models is not affected by this change. > > > 5 ql/pricingengines/blackformula.xpp > > not essential for mf model, but model trace output may contain false > vega for zero strike, which I corrected. > > > 6 ql/termstructures/volatility/optionlet/strippedoptionletadapter.xpp > > not essential for mf model, but if you want to calibrate the numeraire > to caplet smiles, you need a volatility structure returning a smile section. > > I added a smile section section implementation returning a smooth spline > interpolated smile curve. The markov functional > model requires the volatility structure to provide a smile section. In > addition this should be smooth in prices, at least C^1, > to ensure smooth digital prices. I did not put much energy in this > enhancement, just wanted to make the model work with cap smiles. > > > 7 ql/termstructures/volatility/sabrsmilesection.xpp > > not essential for mf model, but needed if you want to feed > sabrsmilesections for numeraire calibration. I floored the strike at > 0.1bp for volatility computation to avoid problems for strikes near zero. > > > 8 ql/termstructures/volatility/smilesection.xpp > > essential for mf model. I added some supporting functions including > arbitrage tests and option price calculation. The best place for these > functions seemed here. > > > 9 ql/termstructures/volatility/swaption/swaptionvolcube1.xpp > > not essential for mf model, just the same comments as under 2 apply. > > I added functionality to exclude negative strikes in single smiles, so > that the -200bp quotes can be used where reasonable. Furthermore I added > the same functionality as in sabrinterpolation above. > > > ------------------------------------------------------------------------------ > Keep yourself connected to Go Parallel: > DESIGN Expert tips on starting your parallel project right. > http://goparallel.sourceforge.net/ > _______________________________________________ > QuantLib-dev mailing list > Qua...@li... > https://lists.sourceforge.net/lists/listinfo/quantlib-dev |