Hello Daniel, thank you for your comments, let me try to address your questions:
What is the 'final' software product?
This is not a software, but the companion code for my book
Modern Computational Finance book with Wiley.
It looks like both of us published books with Wiley around the same time with similar titles but, I think, different contents. The principal focus of my book is adjoint differentiation (AD) and its automatic implementation (AAD). The book also teaches generic Monte-Carlo simulations (meaning modular in terms of models and products) with a strong focus on a parallel (multi-threaded) implementation, and instrumentation with AAD. My book teaches the implementation of all of these in C++, but it is not a book to learn C++, modern or otherwise. It is a book on AAD and Monte-Carlo, with implementation in C++.
This being said, the files AAD
.h (with dependencies on gaussians.h and blocklist.h) form a self contained AAD framework, applicable not only for financial simulations but also FDM and other numerical implementations, as well calibration, back-propagation in deep learning and whatever application where many differentials of scalar results must be computed quickly. The files MC.h (with dependencies) constitute the skeleton of a generic (modular) Monte-Carlo framework, which can accommodate a wide range of models and products.
What is 'Modern C++'?
You are right, I should really specify what I mean since this word is thrown around a lot. What I mean is that the implementation strongly relies on some patterns, constructs and libraries from C++11 (threading, lambdas, move semantics...) and (much less) from C++ 14/17 like constexpr (which I happen to like a lot, I would be
very happy to discuss C++ constructs with you privately, at your convenience).
What I
don't do is systematically apply recent or fashionable design patterns. The focus is on code that runs fast (a critical requirement with the massive regulatory calculations demanded of banks) and may be easily reused, extended and modified (another key requirement in a fast changing environment). Under these constraints, I tried to make the code as easy to understand as possible by most quants, risk managers, developers, derivatives professionals and students, and so avoid elegant but complicated code unless necessary.
Finally, the design of the Monte-Carlo library is object oriented, which is maybe why it has this nostalgic 90s feel. I believe that OOD is still well suited to Monte-Carlo libraries, and I explain exactly why in the book.
Can you make 'professional implementation' more precise?
The wording 'professional implementation' is not a judgement about quality. What I mean is that the code in the book is implemented similarly to how we do it in banks, as opposed to a demonstration code just for the purpose of illustrating the concepts in the book.
For example, the code of my
introductory presentation to AAD in machine learning and finance is
not professional. This is demonstration code, simplified to the extreme, and biased towards C so it is understandable by anyone with minimum programming experience. The code for the presentation is gathered in a file named toyCode.h.
On the contrary, the code in the book is professional in the sense that it reflects the production code implemented in financial institutions (in banks anyway, I never worked for a fund but I do have 23 years experience in French, American, Japanese and Danish banks).
Why the Microsoft XLL kit?
This kit is necessary to export C++ code to Excel. For convenience, the code is exported to Excel so readers can easily and immediately replicate the results of the book or make calculations of their own.
In addition, I am often asked how to connect C++ with Excel. I ended up writing a tutorial
here, which I made part of the GitHub repo because I did not want to include it in the book, where it would feel out of place. The tutorial is based on Microsoft's kit, it is meant for an audience who wants to quickly learn a recipe to export code to Excel and doesn't need to depth or detail of a complete reference
like the (excellent) Dalton, also with Wiley.
Finally, my book is also the curriculum for my Computational Finance classes at Copenhagen University, where students are asked to produce XLLs for their hand-ins (again, because this is very convenient and because this is how it works in banks).
I do hope I clarified your concerns and I am happy to discuss more at your convenience, preferably on the phone or over coffee. I have every intention to read your book, and I would be honored if you read and reviewed mine, again, keeping in mind that my book does not teach C++, but the 'modern' algorithms and techniques recently introduced to finance, together with a professional implementation (now these terms are clarified) .
Congratulations and thank you for the good job training professional C++ coders for the financial industry.
Kind regards,
Antoine Savine