A practice-oriented guide to using C# to design and program pricing and trading modelsIn this step-by-step guide to software development for financial analysts, traders, developers and quants, the authors show both novice and experienced practitioners how to develop robust and accurate pricing models and employ them in real environments. Traders will learn how to design and implement applications for curve and surface modeling, fixed income products, hedging strategies, plain and exotic option modeling, interest rate options, structured bonds, unfunded structured products, and more. A unique mix of modern software technology and quantitative finance, this book is both timely and practical. The approach is thorough and comprehensive and the authors use a combination of C# language features, design patterns, mathematics and finance to produce efficient and maintainable software.Designed for quant developers, traders and MSc/MFE students, each chapter has numerous exercises and the book is accompanied by a dedicated companion website, www.datasimfinancial.com, providing all source code, alongside audio, support and discussion forums for readers to comment on the code and obtain new versions of the software.
Author(s): Daniel J. Duffy, Andrea Germani
Series: The Wiley Finance Series
Edition: 1
Publisher: Wiley
Year: 2013
Language: English
Pages: 856
Tags: Библиотека;Компьютерная литература;C#;
C# for Financial Markets......Page 3
Contents......Page 5
List of Figures......Page 21
List of Tables......Page 25
0.2 Special Features in This Book......Page 27
0.4 Structure of This Book......Page 28
0.5 C# Source Code......Page 29
1.2 Comparing C# and C++......Page 31
1.3 Using This Book......Page 32
2.2 Background to C#......Page 35
2.4 Built-in Data Types in C#......Page 36
2.5 Character and String Types......Page 38
2.6 Operators......Page 39
2.7 Console Input and Output......Page 40
2.8 User-defined Structs......Page 41
2.9 Mini Application: Option Pricing......Page 42
2.10 Summary and Conclusions......Page 47
2.11 Exercises and Projects......Page 48
3.2 The Structure of a Class: Methods and Data......Page 51
3.4 Properties......Page 54
3.5 Class Variables and Class Methods......Page 56
3.7 Example: European Option Price and Sensitivities......Page 59
3.7.1 Supporting Mathematical Functions......Page 60
3.7.2 Black-Scholes Formula......Page 61
3.7.3 C# Implementation......Page 62
3.7.4 Examples and Applications......Page 65
3.8 Enumeration Types......Page 66
3.9 Extension Methods......Page 68
3.10 An Introduction to Inheritance in C#......Page 70
3.11 Example: Two-factor Payoff Hierarchies and Interfaces......Page 72
3.13 Summary and Conclusions......Page 76
3.14 Exercises and Projects......Page 77
4.2 Interfaces......Page 79
4.3 Using Interfaces: Vasicek and Cox-Ingersoll-Ross (CIR) Bond and Option Pricing......Page 80
4.3.2 Bond Models and Stochastic Differential Equations......Page 81
4.3.3 Option Pricing and the Visitor Pattern......Page 84
4.4 Interfaces in .NET and Some Advanced Features......Page 87
4.4.1 Copying Objects......Page 88
4.4.2 Interfaces and Properties......Page 89
4.4.3 Comparing Abstract Classes and Interfaces......Page 90
4.4.5 Casting an Object to an Interface......Page 91
4.5.1 Design Philosophy: Modular Programming......Page 93
4.5.2 A Model Problem and Interfacing......Page 94
4.5.3 Implementing the Interfaces......Page 95
4.6 Introduction to Delegates and Lambda Functions......Page 98
4.6.1 Comparing Delegates and Interfaces......Page 100
4.7 Lambda Functions and Anonymous Methods......Page 102
4.8.1 Static Constructors......Page 103
4.8.2 Finalisers......Page 104
4.8.3 Casting......Page 105
4.9 Advanced .NET Delegates......Page 106
4.9.1 Provides and Requires Interfaces: Creating Plug-in Methods with Delegates......Page 108
4.9.2 Multicast Delegates......Page 111
4.9.3 Generic Delegate Types......Page 112
4.10 The Standard Event Pattern in .NET and the Observer Pattern......Page 113
4.11 Summary and Conclusions......Page 117
4.12 Exercises and Projects......Page 118
5.2 Arrays......Page 123
5.2.1 Rectangular and Jagged Arrays......Page 124
5.3.1 Creating and Modifying Dates......Page 127
5.3.2 Formatting and Parsing Dates......Page 129
5.3.3 Working with Dates......Page 130
5.4 Enumeration and Iterators......Page 131
5.5 Object-based Collections and Standard Collection Interfaces......Page 133
5.6 The List Class......Page 135
5.7 The Hashtable Class......Page 136
5.8 The Dictionary Class......Page 137
5.9 The HashSet Classes......Page 138
5.11.1 Stack......Page 140
5.11.2 Queue......Page 141
5.11.3 Sorted Dictionaries......Page 142
5.12 Strings and StringBuilder......Page 143
5.12.1 Methods in string......Page 144
5.12.2 Manipulating Strings......Page 145
5.13.1 Optional Parameters......Page 146
5.13.3 COM Interoperability in .NET 4.0......Page 147
5.13.4 Dynamic Binding......Page 148
5.15 Exercises and Projects......Page 149
6.2.1 An Introduction to C# Generics......Page 151
6.2.2 Generic Methods and Generic Delegates......Page 154
6.2.3 Generic Constraints......Page 155
6.2.5 Other Remarks......Page 156
6.3 Arrays and Matrices......Page 157
6.4 Vectors and Numeric Matrices......Page 161
6.5 Higher-dimensional Structures......Page 165
6.6 Sets......Page 166
6.7.1 Associative Arrays......Page 168
6.7.2 Associative Matrices......Page 170
6.8 Standardisation: Interfaces and Constraints......Page 171
6.9 Using Associative Arrays and Matrices to Model Lookup Tables......Page 178
6.10 Tuples......Page 181
6.12 Exercises and Projects......Page 182
7.1 Introduction and Objectives......Page 185
7.3 The Time Value of Money: Fundamentals......Page 186
7.3.1 A Simple Bond Class......Page 190
7.3.2 Testing the Bond Functionality......Page 191
7.4 Measuring Yield......Page 192
7.5 Macauley Duration and Convexity......Page 193
7.6 Dates and Date Schedulers for Fixed Income Applications......Page 194
7.6.1 Accrued Interest Calculations and Day Count Conventions......Page 195
7.6.2 C# Classes for Dates......Page 196
7.6.3 DateSchedule Class......Page 200
7.7 Exporting Schedulers to Excel......Page 202
7.8 Other Examples......Page 203
7.9 Pricing Bonds: An Extended Design......Page 204
7.11 Exercises and Projects......Page 207
8.2 Data Lifecycle in Trading Applications......Page 211
8.3.1 Stream Architecture......Page 212
8.3.2 Backing Store Streams Functionality......Page 213
8.3.3 Stream Decorators......Page 215
8.3.4 Stream Adapters......Page 217
8.4 File and Directory Classes......Page 221
8.4.1 The Class Hierarchy......Page 222
8.4.2 FileInfo and DirectoryInfo Classes......Page 224
8.5.1 DataContractSerializer......Page 225
8.5.3 Formatters......Page 227
8.6 The Binary Serialiser......Page 229
8.7 XML Serialisation......Page 230
8.7.1 Subclasses and Child Objects......Page 231
8.7.2 Serialisation of Collections......Page 232
8.7.3 The IXmlSerializable Interface......Page 233
8.8 Data Lifetime Management in Financial and Trading Applications......Page 235
8.10 Exercises and Projects......Page 239
9.1 Introduction and Objectives......Page 241
9.2 Design of Binomial Method......Page 242
9.3.1 Creating Input Data: Factory Method Pattern......Page 243
9.3.2 Binomial Parameters and the Strategy Pattern......Page 245
9.3.3 The Complete Application Object and the Mediator Pattern......Page 254
9.3.4 Lattice Presentation in Excel......Page 256
9.4 Early Exercise Features......Page 258
9.6 Multi-dimensional Binomial Method......Page 259
9.7 Improving Performance Using Padé Rational Approximants......Page 262
9.9 Projects and Exercises......Page 264
10.2 Trinomial Model of the Asset Price and Its C# Implementation......Page 267
10.4 The Black-Scholes Partial Differential Equation and Explicit Schemes......Page 272
10.5 Implementing Explicit Schemes in C#......Page 273
10.5.1 Using the Explicit Finite Difference Method......Page 277
10.6 Stability of the Explicit Finite Difference Scheme......Page 278
10.7.1 ADE in a Nutshell: The One-factor Diffusion Equation......Page 281
10.7.2 ADE for Equity Pricing Problems......Page 282
10.8 Implementing ADE for the Black-Scholes PDE......Page 284
10.9 Testing the ADE Method......Page 288
10.12 Appendix: ADE Numerical Experiments......Page 289
10.13 Exercises and Projects......Page 294
11.2 Namespaces......Page 297
11.2.1 Applications of Namespaces......Page 298
11.3 An Introduction to Assemblies......Page 299
11.3.1 Assembly Types......Page 300
11.3.2 Specifying Assembly Attributes in AssemblyInfo.cs......Page 301
11.4 Reflection and Metadata......Page 302
11.4.1 Other Classes in the Reflection Namespace......Page 307
11.4.3 Dynamic Object Creation......Page 309
11.4.5 Attributes and Reflection......Page 310
11.4.6 Custom Attributes......Page 312
11.5.1 Using Native C++ from C#......Page 315
11.6 Using C# from C++......Page 319
11.7 Code Generation Using the Reflection API......Page 324
11.7.1 The DynamicMethod Class......Page 325
11.7.2 The Evaluation Stack and Argument Passing to Dynamic Methods......Page 326
11.7.3 The Case in Hand: Operator Overloading for Generic Vectors and Matrices......Page 327
11.8.1 Creating and Destroying Application Domains......Page 330
11.8.2 Multiple Application Domains......Page 331
11.8.3 Sharing Data between Domains......Page 333
11.8.4 When to Use Application Domains......Page 334
11.10 Exercises and Projects......Page 335
12.2 High-level Design of Bond Pricing Problem......Page 337
12.3 Bond Scheduling......Page 338
12.4 Bond Functionality and Class Hierarchies......Page 339
12.5 Calculating Price, Yield and Discount Factors: MathTools......Page 343
12.6 Data Presentation and Excel Interop......Page 345
12.7.1 Data into Memory......Page 347
12.7.2 Serialisation and Deserialisation......Page 348
12.8 Using the Excel Files......Page 350
1 Code Integration: Handling Bond Details......Page 354
2 Spread on Benchmark......Page 356
3 Floating Rate Bond and Other Structured Notes......Page 357
4 Class Hierarchy Integration......Page 359
13.2 Interpolation and Curve Building: Basic Formula for Interpolator Tests......Page 361
13.3 Types of Curve Shape......Page 363
13.4 An Overview of Interpolators......Page 364
13.5 Background to Interpolation......Page 365
13.6 Approximation of Function Derivatives......Page 367
13.7 Linear and Cubic Spline Interpolation......Page 368
13.8 Positivity-preserving Cubic Interpolations: Dougherty/Hyman and Hussein......Page 370
13.9 The Akima Method......Page 374
13.10 Hagan-West Approach......Page 375
13.11 Global Interpolation......Page 376
13.11.1 Polynomial Interpolation......Page 377
13.12 Bilinear Interpolation......Page 378
13.13 Some General Guidelines, Hints and Tips......Page 381
13.14.1 The 101 Example, from A to Z......Page 383
13.14.2 Some Financial Formulae......Page 386
13.14.3 Cubic Spline Interpolation: an Application Example......Page 387
13.14.4 A Bilinear Interpolation Simple Example......Page 390
13.16 Exercises and Projects......Page 393
14.1 Introduction and Objectives......Page 395
14.3 Sources of Risk in Money Market Transactions......Page 396
14.5 STIR Futures......Page 397
14.6 Pricing STIR Options......Page 400
14.7 Generating International Monetary Market (IMM) Dates......Page 404
14.7.1 Modelling Option Delta and Sensitivity Analysis......Page 406
14.7.2 Listed Instruments and Contracts......Page 409
14.8 List STIR Futures and STIR Futures Options......Page 410
14.9 Putting It All Together: STIR versus OTC from a Trader’s Perspective......Page 413
14.11 Exercises and Projects......Page 415
15.2 Starting Definitions and Overview of Curve Building Process......Page 419
15.3.1 Unsecured Deposit......Page 421
15.3.2 Forward Rate Agreements (FRA)......Page 422
15.4 Introduction to Interest Rate Swap......Page 423
15.4.1 IRS Cash Flow......Page 424
15.4.3 Contract Specification and Practical Aspects......Page 425
15.4.4 Traditional Swap Valuation......Page 428
15.5 The Curve Construction Mechanism......Page 429
15.5.1 Traditional Bootstrapping Method......Page 430
15.5.3 The Key Role of Interpolation......Page 431
15.6.2 ISingleRateCurve Interface......Page 432
15.6.3 RateSet Class and BuildingBlock Class......Page 433
15.6.4 Interpolator and Adapters......Page 435
15.6.5 The Generic Base Class SingleCurveBuilder......Page 436
15.6.6 Derived Class for Traditional Bootstrapping Method......Page 438
15.6.7 Derived Class for Global Method with Interpolation......Page 439
15.6.8 Derived Class for Global Method with Smoothness Condition......Page 441
15.7.3 Calculate the Time Taken to Instantiate a SingleCurveBuilder......Page 444
15.7.4 Visualise Forward Rates in Excel......Page 445
15.7.6 Computing Sensitivities: An Initial Example......Page 447
15.7.7 More on Sensitivities......Page 448
15.8 Summary and Conclusions......Page 452
15.9 Exercises and Projects......Page 453
15.10 Appendix: Types of Swaps......Page 455
16.2 The Consequences of the Crisis on Interest Rate Derivatives Valuation......Page 457
16.2.2 Collateralisation under a CSA......Page 458
16.2.4 Basis......Page 459
16.2.5 The Par Swap Rate Formulae......Page 460
16.3.3 Risk Effect......Page 462
16.4 The Bootstrapping Process Using Two Curves: Description of the Mechanism......Page 463
16.5 Sensitivities......Page 464
16.6.1 IRateCurve Base Interface and Derived Interfaces......Page 465
16.6.2 The class MultiCurveBuilder......Page 467
16.7.1 Calibration Consistency......Page 471
16.7.3 Sensitivities on Console......Page 472
16.7.4 Forward Swap Matrix......Page 473
16.7.5 Mark-to-Market Differences......Page 474
16.7.6 Comparing Two Versions of the MultiCurveBuilder......Page 476
16.7.7 Input Data, Interpolation and Forward Rates......Page 478
16.9 Exercises and Projects......Page 479
16.10 Appendix: Par Asset Swap Spread and Zero Volatility Spread......Page 481
17.2.1 Cap and Floor: Description and Formulae......Page 485
17.2.2 Cap and Floor at the money Strike......Page 487
17.2.3 Cap Volatility and Caplet Volatility......Page 488
17.2.5 Multi-strike and Amortising Cap and Floor......Page 489
17.2.6 Swaption: Mechanism and Closed Pricing Formulae......Page 490
17.2.7 Call Put Parity for Cap, Floor and Swaption......Page 492
17.3 Multi-curve Framework on Cap, Floor and Swaption......Page 493
17.4.1 Cap Stripping......Page 495
17.4.2 Missing Data, Volatility Models and Interpolation......Page 499
17.5.1 Ready to Use Formula......Page 500
17.5.3 Calculating Mono-strike Caplet Volatilities......Page 502
17.5.4 Managing More Mono-strike Caplet Volatilities......Page 505
17.6.1 Simple Caplet Price......Page 507
17.6.2 Cap As a Sum of Caplets......Page 508
17.6.3 Simple Cap Volatility Bootstrapping: First Unknown Volatility......Page 509
17.6.4 ATM Strike and Recursive Bootstrapping......Page 511
17.6.5 Sparse Data from the Market: Volatility Optimisation and Input Interpolation......Page 513
17.7 Summary and Conclusions......Page 516
17.8 Exercise and Discussion......Page 517
18.1 Introduction and Objectives......Page 519
18.2 An Overview of the GOF Pattern......Page 520
18.4 Builder Pattern......Page 522
18.5.2 Layers Pattern......Page 525
18.6 Behavioural Patterns......Page 526
18.6.2 Strategy and Template Method Patterns......Page 527
18.7.1 Example Caplet Volatility Matrix......Page 528
18.7.2 Volatility Matrix with Multiple Strikes......Page 529
18.8 A PDE/FDM Patterns-based Framework for Equity Options......Page 530
18.8.1 High-level Design......Page 532
18.8.2 Generalisations and Extensions......Page 534
18.9 Using Delegates to Implement Behavioural Design Patterns......Page 535
18.10 A System Design for Monte Carlo Applications......Page 536
18.10.1 A Universal System Design Methodology......Page 537
18.11 Dynamic Programming in .NET......Page 539
18.11.1 Numeric Type Unification......Page 540
18.12 Summary and Conclusions......Page 542
18.13 Exercises and Projects......Page 543
19.2 Scope of Chapter and Prerequisites......Page 549
19.3.1 Collection as Input, Collection as Output......Page 550
19.3.2 Collection as Input, Noncollection as Output......Page 551
19.4 LINQ Queries and Initial Examples......Page 552
19.4.1 Lambda Queries and Composition......Page 553
19.4.2 Comprehension Queries......Page 554
19.4.3 Deferred Execution......Page 555
19.5.1 Subqueries......Page 557
19.5.2 Composition Strategies......Page 558
19.6.1 Basic Functionality......Page 559
19.6.2 User-defined Aggregation Methods......Page 560
19.7 Join and GroupJoin......Page 561
19.8.2 Discount Factors......Page 566
19.8.3 Bonds......Page 568
19.8.4 Scenarios......Page 569
19.8.5 Cash Flow Aggregation......Page 571
19.8.6 Ordering Collections......Page 572
19.8.7 Eonia Rates Replication......Page 573
19.9 LINQ and Excel Interoperability......Page 575
19.11 Exercises and Projects......Page 583
20.3 Using COM Technology in .NET......Page 587
20.4 Primary Interop Assemblies (PIA)......Page 589
20.5.1 Standalone Application: Workbook and Worksheets......Page 590
20.5.3 Using Excel with C++/CLI......Page 591
20.6 Types of Excel Add-ins......Page 592
20.6.4 Automation......Page 593
20.6.5 VSTO......Page 594
20.7 The IDTExtensibility2 Interface and COM/.NET Interoperability......Page 595
20.8.1 Excel Driver......Page 596
20.8.3 ExcelMechanisms and Exception Handling......Page 598
20.8.4 Examples and Applications......Page 601
20.9 Conclusion and Summary......Page 604
20.10 Exercises and Projects......Page 605
21.2 COM Overview......Page 607
21.3 Creating Automation Add-ins: The Steps......Page 609
21.4 Example: Creating a Calculator, Version 1......Page 611
21.5 Example: Creating a Calculator, Version 2......Page 614
21.8 Volatile Methods......Page 616
21.9 Optional Parameters......Page 617
21.10 Using VBA with Automation Add-ins......Page 618
21.11 Summary and Conclusions......Page 619
21.12 Exercises and Projects......Page 620
22.2 Preparations for COM Add-ins......Page 621
22.4 Creating COM Add-ins: The Steps......Page 622
22.5 Utility Code and Classes......Page 623
22.6 Using Windows Forms......Page 626
22.7 Example: Creating a COM Add-in......Page 627
22.9 An Introduction to Excel-DNA......Page 629
22.9.1 Example 001: Hello World......Page 630
22.9.2 Example 101: Simple Option Pricer......Page 631
22.9.3 Excel-DNA and Rate Curves......Page 634
22.9.4 Registration and Loading......Page 639
22.9.5 What Is Inside ExcelDna.Integration.dll?......Page 640
22.10 Excel COM Interoperability and Rate Multi-curve......Page 641
22.12 Exercises and Projects......Page 648
23.2 Real-time Data in Excel: Overview......Page 651
23.3 Real-time Data Function......Page 652
23.4 Example......Page 653
23.5 The Topic Class and Data......Page 655
23.7 Using the RTD Server......Page 657
23.10 Exercises and Projects......Page 658
24.1 Introduction and Objectives......Page 661
24.2 Processes......Page 662
24.3 Using ProcessStartInfo to Redirect Process I/O......Page 663
24.4 An Introduction to Threads in C#......Page 664
24.5 Passing Data to a Thread and between Threads......Page 667
24.6 Thread States and Thread Lifecycle......Page 670
24.6.1 Sleep......Page 671
24.6.2 Thread Joining......Page 672
24.6.3 Thread Interrupt and Abort......Page 674
24.7 Thread Priority......Page 676
24.8 Thread Pooling......Page 677
24.9 Atomic Operations and the Interlocked Class......Page 678
24.10 Exception Handling......Page 679
24.11 Multi-threaded Data Structures......Page 680
24.11.1 Extended Producer–Consumer Pattern......Page 683
24.12 A Simple Example of Traditional Multi-threading......Page 685
24.14 Exercises and Projects......Page 687
25.1 Introduction and Objectives......Page 691
25.2 Thread Safety......Page 692
25.3 Locking Mechanisms for Objects and Classes......Page 693
25.3.2 Nested Locking......Page 695
25.4 Mutex and Semaphore......Page 699
25.5 Notification and Signalling......Page 702
25.5.1 Thread Notification and the Monitor Class......Page 704
25.6 Asynchronous Delegates......Page 705
25.7 Synchronising Collections......Page 707
25.8 Timers......Page 708
25.9 Foreground and Background Threads......Page 710
25.10 Executing Operations on Separate Threads: the BackgroundWorker Class......Page 711
25.11.1 The Parallel Class......Page 713
25.12 Task Parallel Library (TPL)......Page 717
25.12.1 Creating and Starting Tasks......Page 718
25.13 Concurrent Data Structures......Page 720
25.13.1 An Example: Producer Consumer Pattern and Random Number Generation......Page 721
25.13.2 The Barrier Class......Page 724
25.13.3 PLINQ......Page 725
25.14 Exception Handling......Page 727
25.15 Shifting Curves......Page 728
25.17 Exercises and Projects......Page 730
26.2 Multi-threaded and Parallel Applications for Computational Finance......Page 733
26.3 Fork and Join Pattern......Page 735
26.4 Geometric Decomposition......Page 737
26.5 Shared Data and Reader/Writer Locks: Multiple Readers and Multiple Writers......Page 741
26.5.1 Upgradeable Locks and Recursion......Page 744
26.6 Monte Carlo Option Pricing and the Producer–Consumer Pattern......Page 745
26.7 The StopWatch Class......Page 752
26.8.1 Disposal and the IDisposable Interface......Page 753
26.8.2 Automatic Garbage Collection......Page 754
26.10 Exercises and Projects......Page 756
A1.2 Object-oriented Paradigm......Page 761
A1.3 Generic Programming......Page 763
A1.5 Structural Relationships......Page 764
A1.5.1 Aggregation......Page 765
A1.5.2 Association......Page 766
A1.5.3 Generalisation/Specialisation (Gen/Spec Relationship)......Page 768
A1.6.1 The Defining Attribute View......Page 769
A1.6.4 The Explanation-based View......Page 770
A1.8 Whole–Part Pattern......Page 771
A1.8.1 Data Decomposition......Page 772
A1.9 Message-passing Concept versus Procedural Programming......Page 774
A2.2 Nonlinear Programming and Multi-variable Optimisation......Page 777
A2.3.1 Nonlinear Regression......Page 779
A2.3.3 Derivatives of Sum-of-Squares Functions......Page 780
A2.4 Some Specific Methods......Page 781
A2.5 The ALGLIB Library......Page 782
A2.6 An Application to Curve Building......Page 784
A2.7 Rate Calibration Example......Page 785
A2.8 Exercises and Projects......Page 790
A3.2 Background to ADE......Page 791
A3.3 Scoping the Problem: One-factor Problems......Page 792
A3.4 An Example: One-factor Black-Scholes PDE......Page 794
A3.5 Boundary Conditions......Page 795
A3.7 Motivating the ADE Method......Page 798
A3.9 The Convection Term......Page 799
A3.10 Other Kinds of Boundary Conditions......Page 800
A3.12 ADE for PDEs in Conservative Form......Page 801
A3.13.1 The Consequences of Conditional Consistency......Page 802
A3.13.3 General Formulation of the ADE Method......Page 803
A3.15 Summary and Conclusions......Page 804
A3.16 Exercises and Projects......Page 805
A4.2 Different Ways of Stripping Cap Volatility......Page 815
A4.3 Comparing Caplet Volatility Surface......Page 818
A4.4 Call Put Parity......Page 820
A4.5 Cap Price Matrix......Page 821
A4.6 Multi-strike and Amortising......Page 823
A4.7 Simple Swaption Formula......Page 824
A4.8 Swaption Straddle......Page 826
A4.9 Exercises......Page 830
Bibliography......Page 831
Web References......Page 838
Index......Page 841