My Life in Script by Jesper Andreasen xi
Part I A Scripting Library in C++
Introduction 3
Chapter 1 Opening Remarks 7
Introduction 7
1.1 Scripting is not only for exotics 12
1.2 Scripting is for cash-flows not payoffs 13
1.3 Simulation models 15
1.4 Pre-processing 17
1.5 Visitors 19
1.6 Modern implementation in C++ 21
1.7 Script templates 22
Chapter 2 Expression Trees 25
2.1 In theory 25
2.2 In code 35
Chapter 3 Visitors 41
3.1 The visitor pattern 41
3.2 The debugger visitor 47
3.3 The variable indexer 50
3.4 Pre-processors 54
3.5 Const visitors 55
3.6 The evaluator 57
3.7 Communicating with models 65
Chapter 4 Putting Scripting Together with a Model 71
4.1 A simplistic Black-Scholes Monte-Carlo simulator 71
4.1.1 Random number generators 71
4.1.2 Simulation models 73
4.1.3 Simulation engines 76
4.2 Connecting the model to the scripting framework 76
Chapter 5 Core Extensions and the “Pays” Keyword 81
5.1 In theory 81
5.2 In code 83
Part II Basic Improvements
Introduction 93
Chapter 6 Past Evaluator 95
Chapter 7 Macros 97
Chapter 8 Schedules of Cash-Flows 99
Chapter 9 Support for Dates 105
Chapter 10 Predefined Schedules and Functions 109
Chapter 11 Support for Vectors 113
11.1 Basic functionality 113
11.2 Advanced functionality 115
11.2.1 New node types 116
11.2.2 Support in the parser 116
11.2.3 Processing 117
11.2.4 Evaluation 117
Part III Advanced Improvements Introduction 121
Chapter 12 Linear Products 123
12.1 Interest rates and swaps 123
12.2 Equities, foreign exchange, and commodities 125
12.3 Linear model implementation 126
Chapter 13 Fixed Income Instruments 127
13.1 Delayed payments 127
13.2 Discount factors 128
13.3 The simulated data processor 129
13.4 Indexing 129
13.5 Upgrading “pays” to support delayed payments 131
13.6 Annuities 132
13.7 Forward discount factors 132
13.8 Back to equities 132
13.9 Libor and rate fixings 133
13.10 Scripts for swaps and options 134
Chapter 14 Multiple Underlying Assets 137
14.1 Multiple assets 137
14.2 Multiple currencies 139
Chapter 15 American Monte-Carlo 143
15.1 Least Squares Method 143
15.2 One proxy 147
15.3 Additional regression variables 149
15.4 Feedback and exercise 149
15.5 Multiple exercise and recursion 152
Part IV Fuzzy Logic and Risk Sensitivities Introduction 157
Chapter 16 Risk Sensitivities with Monte-Carlo 161
16.1 Risk instabilities 161
16.2 Two approaches toward a solution 165
16.3 Smoothing for digitals and barriers 166
16.4 Smoothing for scripted transactions 168
Chapter 17 Support for Smoothing 169
Chapter 18 An Automated Smoothing Algorithm 175
18.1 Basic algorithm 176
18.2 Nested and combined conditions 179
18.3 Affected variables 179
18.4 Further optimization 180
Chapter 19 Fuzzy Logic 183
Chapter 20 Condition Domains 189
20.1 Fuzzy evaluation of discrete conditions 189
20.1.1 Condition domains 189
20.1.2 Constant conditions 190
20.1.3 Boolean conditions 191
20.1.4 Binary conditions 193
20.1.5 Discrete conditions 193
20.1.6 Putting it all together 197
20.2 Identification of condition domains 198
20.3 Constant expressions 201
Chapter 21 Limitations 203
21.1 Dead and alive 203
21.2 Non-linear use of fuzzy variables 206
Chapter 22 The Smoothing Factor 209
22.1 Scripting support 209
22.2 Automatic determination 211
Part V Application to xVA
Chapter 23 xVA 215
Chapter 24 Branching 219
Chapter 25 Closing Remarks 223
25.1 Script examples 223
25.2 Multi-threading and AAD 228
25.3 Advanced LSM optimizations 229
Appendix A Parsing 231
A.1 Preparing for parsing 231
A.2 Parsing statements 234
A.3 Recursively parsing conditions 238
A.4 Recursively parsing expressions 244
A.5 Performance 252
Bibliography 255
Index 257