Then, some (unfortunate) limitations: the program can only handle one transaction at a time, so simulating exposures for netting sets having several transactions is not possible. Also, the program can simulate only one risk factor at a time, so simulating exposures for transactions exposed to more than one risk factor is not possible. However, with some careful re-designing, these properties could also be implemented by using QuantLib library tools.
The complete program can be found in my GitHub repository. Thanks for reading this blog. Merry Christmas for everyone.
-Mike
Simulated exposures
Data
A few notes on data.
- Swap transaction is 5Y receiver vs. 3M USD Libor + spread. At inception, swap PV has been solved to be zero. Details can be found in the screenshot below.
- Interest rate data for spot term structure (discount factors) has been retrieved from Bloomberg Swap Manager as of 12.12.2018.
- Default term structures for the both parties (counterparty, self) are created from flat CDS term structures (100 bps), as seen on Bloomberg Swap Manager CVA tab.
- Short rate simulations are processed by using Hull-White one-factor model, which uses parameters calibrated to a given set of flat 20% swaption volatilities, as seen on Bloomberg Swap Manager CVA tab.
Results
Bloomberg Swap Manager results: CVA = 6854 and DVA = 1557. Program results (for one run): CVA = 6727 and DVA = 1314, using weekly time steps and 1000 paths. However, "close enough" results can be achieved with considerably smaller amount of paths and less dense time grid.
Screens
Bloomberg swap transaction
Bloomberg CVA
Bloomberg DVA
Bloomberg EPE
Program EPE
Bloomberg ENE
Program ENE
I would be curious to know if you can give us any information with regard to the overall execution time of this very interesting experiment.
ReplyDeleteAlso I would like to ask you if you have any idea on how the answer to the above compares with the time that would be required if the whole python program was running in one thread in C++.