I’m back from the QuantLib User Meeting in Düsseldorf, and it was great. There were about 30 participants from a number of banks and companies, discussing openly about the way they use QuantLib in their work. The intent of the organizers was to start a network of people that could promote the use of QuantLib and learn from each other. It was certainly a good beginning. Thanks to the organizers, the sponsors (IKB, Quaternion and d-fine), the speakers, and all the participants. They all contributed to a great couple of days.
My notes aren’t going to do justice to all that was said, so I’ll just write a brief summary here. I’ll make the slides and/or the audio of the talks available on the QuantLib site as soon as we get the material (and the permission to publish it) from the several speakers. In the meantime, here’s a taste of what was said. (The space given to each talk here is not due to its importance; only to the length of the notes I took.)
I had the honor of being asked for the opening keynote. I had a look at the evolution of QuantLib and pointed out a few flaws in the current architecture (not the only ones, of course): lack of support for multi-threading, some abstraction leak as some classes are used for more and more tasks, and a lack of a stand-alone functional core. I suggested a few direction that could be explored in order to fix some of those problems.
Michael von den Driesch spoke about the way QuantLib is used at IKB in the pricing and financial modeling group (part of the bank risk control group). The library is part of a number of applications for valuation, historical simulation, in-house consultancy and so on. Michael’s group can use Murex curves seamlessly with QuantLib and compare them with their own. Also, he showed the use of IPython notebooks: a nice tool that I’ll have to explore.
Roland Lichters presented the Quaternion Risk Engine, a cross-asset CVA application based on QuantLib plus a number of proprietary extensions. By choosing analytically tractable models and by applying some modification to the library, they were able to speed up calculations until it became feasible (with the help of a 96-core cluster) to obtain the billions of NPVs required by CVA simulation. The most interesting modification was to allow a user to momentarily bypass the Observer/Observable notification mechanism. If one knows what one’s doing, it is possible to send a single notification for the simultaneous update of multiple rates, thus reducing the overhead of the pattern.
André Miemiec talked about his implementation of the Hunt-Kennedy model for pricing accreting swaptions. “Strangely enough, it works”, in his own words. The implementation is available in the QuantLib patch tracker, and I hope to include it in the library shortly.
Concluding the first day of talks, Peter Caspers presented the Markov functional model he added to QuantLib 1.3 and showed a few results. Then we were off to dinner together.
The second day started with Sarp Kaya Acar and Henning Segger talking about two extensions to the library made by Quaternion: the implementation of the Jarrow-Yildirim model for inflation and the JCIR++ model for hazard rates, respectively.
After this, we had a bit of open discussion about new ideas for the library. Those included:
- treating a swap leg as an instrument in its own right, to allow using different pricing engines for each one;
- a generic mechanism for creating a composite instrument where different components have different currencies;
- a more useful implementation of currencies, which at this time are basically not used;
- alternative approaches to reducing the overhead of the Observer/Observable pattern.
Another idea floated, not directly related to the library: what if a number of small banks joined forces to implement pricing models, distributing the effort between them? The general consensus seemed to be that it would be very nice, but a very hard sell. The same could be said of starting an open-source financial library, though, so I’m not without hopes…
Next talk: Martin Dietrich explained how QuantLib is used at E.ON Global Commodities from Excel, LexiFi or even a web browser through a technology stack including a webserver written in Scala, WebSockets in .Net, and the open-source Excel-DNA. (I know it sounds like a Rube Goldberg machine, but it works fine.)
Klaus Spanderen presented ways to introduce some parallelism in QuantLib; from the easiest (multi-processing, which turns out to be ok in most use cases) to more complex such as OpenMP, multi-threaded calibrations, thread-local objects, or Boost.MPI. He also described his experimental redesign of the Observer/Observable pattern that makes it safe to use QuantLib in languages such as Java or C#, that run garbage collection in a separate thread.
Finally, Sebastian Schlenkrich of d-fine talked about algorithmic differentiation and the proof of concept he coded to calculate Bermudan-swaption vegas; and Johannes Göttker-Schnetmann described how QuantLib is used at Helaba for pricing equity derivatives.
As I said, two great days, full of varied and interesting talks. I hope there will be other editions of the user meeting. For my part, I’ll surely try to encourage events of this kind happening in other countries.