Modern Computational Finance. Antoine Savine

Чтение книги онлайн.

Читать онлайн книгу Modern Computational Finance - Antoine Savine страница 7

Modern Computational Finance - Antoine Savine

Скачать книгу

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

PART I A Scripting Library in C++

      This part leads readers through the development steps of the scripting library provided in our source repository.

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.

      The language considers as a variable anything that starts with a letter and is not otherwise a keyword. We used the variables images, images, and images in our example. Evidently, ancillary variable names don't have to start with the letter V; this is only for clarity.

      Products are variables. The language makes no difference between products and ancillary variables; only users do. Our example actually scripts three products: images obviously; images, which pays the spot fixing today and is worth today's underlying asset price; and images, which is worth 1 at maturity if the product survived the first two years, 0 otherwise. Its value is the (risk‐neutral) probability of surviving to year 3. All variables may be seen as products, although, in general, the values of ancillary variables are disregarded in the end. In chapter5, we will implement other means of distinguishing products from helper variables, and actual payments from assignments, with the keyword pays.

      To value a script in the context of path‐wise Monte‐Carlo simulations means to evaluate it against a number of scenarios, each scenario providing different values for spot on the event dates in 1y, 2y, and 3y. For every such scenario generated by the model, we evaluate the script and record the final value of all its variables. In the end, we average those final variables' values across scenarios to estimate the values of the corresponding products. If we also require risk sensitivities, we compute the derivatives of the final variable values to changes in the model parameters. Evidently, the derivatives of prices are averages of the path‐wise derivatives, which permits an efficient path‐wise computations of sensitivities, in particular with adjoint propagation. See for instance Giles and Glasseman's “Smoking Adjoints,” which introduced adjoint techniques to finance [14], and our publication [27], which explains automatic adjoint differentiation (AAD) and provides professional differentiation code.

      We remind the reader, however, that evaluation (including of sensitivities) is only one thing we can do with the script. The purpose of this library is to parse scripts into visitable data structures and implement a framework that enables all types of visitors, not only the evaluator, to traverse and manipulate scripts in many ways.

      We split the implementation in five steps.

      First, we describe in chapter 2 the data structure for the internal representation of the script, ready for evaluation and other forms of visits. We will use expression trees as a data structure, and we describe these

Скачать книгу