ТОП просматриваемых книг сайта:
Modern Computational Finance. Antoine Savine
Читать онлайн.Название Modern Computational Finance
Год выпуска 0
isbn 9781119540793
Автор произведения Antoine Savine
Жанр Математика
Издательство John Wiley & Sons Limited
To document how we did xVA on an iPad Mini without thoroughly describing our approach to scripting would be wrong and not give the reader the full picture. I was therefore very happy when Antoine told me he was going to write a book on scripting. This would give us the opportunity to finally get our work on scripting languages documented and pave the way for fully documenting our xVA system.
There are a number of reasons why the story of scripting has not been told before. Among these:
1 – It's not mathematics, but software design, which is actually something that we do every day but not something that we usually write about.
2 – It's a complex and relatively long and winding story that cannot easily be summoned in a few punchlines. On top of this it contains subjects that most people haven't even heard about, such as visitors and pre‐processors.
3 – It's a hard sell to change conventional wisdom that scripting is only for exotics and has no relevance in post‐crisis finance. Actually, scripting is more relevant now than ever, because banks are under tough regulatory and cost pressures.
4 – It's very C++ and as such not following the current trend of lighter languages such as Matlab and Python backed by GPUs running parallel instructions in C.
5 – The subject is still very much alive: whenever we start documenting our efforts, we always get new ideas that we can do with scripting, which in turn tends to take away focus from documenting past glories.
My next employer is Saxo Bank and the scripting language there will be Jife.
Jesper Andreasen, June 2018
Introduction
This part leads readers through the development steps of the scripting library provided in our source repository.
A transaction consists of a number of events occurring on given dates in the future. This is where a payment or coupon is fixed, a discrete barrier is monitored, or an exercise takes place. This is also where a path‐dependency is updated with reference to the simulated variables on that future date.1 Future dates when such events take place are called event dates.
As an illustration, we consider a simplified version of the popular autocallable transaction. It pays a high coupon (say 10%) if some index (say S&P500) increased during the first year of its life. In this case, it pays the notional redemption together with the coupon of 10% and terminates at the end of year 1. Otherwise, it may still deliver a 20% coupon (10% per annum) at the end of year 2 provided the index overall increased over the two years. In this case, it repays the notional together with the 20% coupon and terminates at the end of year 2. If not, it is given a last chance on year 3, provided the underlying index increased over the three years. If this is the case, the investor receives the redemption + 30% at the end of year 3. If not, only 50% of the notional is repaid. It is easy to see that the investor implicitly sells a (somewhat exotic) option on what may appear as a low probability event (index decreasing over one, two, and three years) in exchange for a high coupon in a low‐yield environment, which explains the success of this structure.2 This product may be scripted as follows (say today is 1 June 2020)3:
01Jun2020 | vRef=spot() vAlive=1 |
01Jun2021 | if spot() > vRef then prd=110 vAlive=0 endIf |
01Jun2022 | if spot() > vRef then if vAlive=1 then prd=120 endIf vAlive=0 endIf |
01Jun2023 | if vAlive=1 then if spot() > vRef then prd=130 else prd=50 endIf endIf |
We have four events on four event dates:
1 Today, we set the reference to the current spot level and initialize the alive status to 1.
2 Year 1, we check whether the spot increased, in which case we pay redemption + 10% and die.
3 Year 2, we check that the spot overall increased over two years. In this case, provided we survived year 1, we pay redemption + 20% and die.
4 Year 3, provided we survived the first two, we check if the spot overall increased. In this case we pay redemption + 30%. If not, we repay 50% of the notional.
We see that our language must at the very minimum support numbers, arithmetic operations, and conditional statements. We know we also need some mathematical functions like
The language considers as a variable anything that starts with a letter and is not otherwise a keyword. We used the variables
Products are variables. The language makes no difference between products and ancillary variables; only users do. Our example actually scripts three products: