没有合适的资源?快使用搜索试试~ 我知道了~
首页Financial numerical recipes in C++
资源详情
资源评论
资源推荐

Financial Numerical Recipes in C
++
.
Bernt Arne Ødegaard
December 10, 2003

Contents
1 On C++ and programming. 4
1.1 Compiling and linking . . . . . . . . . . . . . . . . 4
1.2 The structure of a C++ program . . . . . . . . . . 4
1.2.1 Types . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Operations . . . . . . . . . . . . . . . . . . . 5
1.2.3 Functions and libraries . . . . . . . . . . . . 5
1.2.4 Templates and libraries . . . . . . . . . . . . 6
1.2.5 Flow control . . . . . . . . . . . . . . . . . . 6
1.2.6 Input Output . . . . . . . . . . . . . . . . . 7
1.2.7 Splitting up a program . . . . . . . . . . . . 7
1.2.8 Namespaces . . . . . . . . . . . . . . . . . . 8
1.3 Extending the language, the class concept. . . . . . 8
1.3.1 date, an example class . . . . . . . . . . . . 8
1.4 Const references . . . . . . . . . . . . . . . . . . . . 10
2 The value of time 11
2.1 Present value. . . . . . . . . . . . . . . . . . . . . . 11
2.2 Internal rate of return. . . . . . . . . . . . . . . . . 12
2.2.1 Check for unique IRR . . . . . . . . . . . . . 15
2.3 Bonds . . . . . . . . . . . . . . . . . . . . . . . . . 16
2.3.1 Bond Price . . . . . . . . . . . . . . . . . . . 16
2.3.2 Yield to maturity. . . . . . . . . . . . . . . . 17
2.3.3 Duration. . . . . . . . . . . . . . . . . . . . 19
3 The term structure of interest rates and an object
lesson 21
3.1 Term structure calculations . . . . . . . . . . . . . . 21
3.2 Using the currently observed term structure. . . . . 22
3.2.1 Linear Interpolation. . . . . . . . . . . . . . 22
3.3 The term structure as an object . . . . . . . . . . . 22
3.4 Implementing a term structure class . . . . . . . . . 23
3.4.1 Base class . . . . . . . . . . . . . . . . . . . 23
3.4.2 Flat term structure. . . . . . . . . . . . . . . 25
3.4.3 Interpolated term structure. . . . . . . . . . 26
3.5 Bond calculations using the term structure class . . 28
4 Futures algoritms. 29
4.1 Pricing of futures contract. . . . . . . . . . . . . . . 29
5 Binomial option pricing 30
5.1 Multiperiod binomial pricing . . . . . . . . . . . . . 32
6 Basic Option Pricing, the Black Scholes formula 37
6.1 The formula . . . . . . . . . . . . . . . . . . . . . . 37
6.2 Understanding the why’s of the formula . . . . . . . 40
6.2.1 The original Black Scholes analysis . . . . . 40
6.2.2 The limit of a binomial case . . . . . . . . . 40
6.2.3 The representative agent framework . . . . . 41
6.3 Partial derivatives. . . . . . . . . . . . . . . . . . . 41
6.3.1 Delta . . . . . . . . . . . . . . . . . . . . . . 41
6.3.2 Other Derivatives . . . . . . . . . . . . . . . 41
6.3.3 Implied Volatility. . . . . . . . . . . . . . . . 44
7 Warrants 47
7.1 Warrant value in terms of assets . . . . . . . . . . . 47
7.2 Valuing warrants when observing the stock value . . 48
7.3 Readings . . . . . . . . . . . . . . . . . . . . . . . . 48
8 Extending the Black Scholes formula 50
8.1 Adjusting for payouts of the underlying. . . . . . . . 50
8.1.1 Continous Payouts from underlying. . . . . . 50
8.1.2 Dividends. . . . . . . . . . . . . . . . . . . . 51
8.2 American options. . . . . . . . . . . . . . . . . . . . 52
8.2.1 Exact american call formula when stock is
paying one dividend. . . . . . . . . . . . . . 52
8.3 Options on futures . . . . . . . . . . . . . . . . . . 56
8.3.1 Black’s model . . . . . . . . . . . . . . . . . 56
8.4 Foreign Currency Options . . . . . . . . . . . . . . 58
8.5 Perpetual puts and calls . . . . . . . . . . . . . . . 60
8.6 Readings . . . . . . . . . . . . . . . . . . . . . . . . 61
9 Option pricing with binomial approximations 62
9.1 Introduction . . . . . . . . . . . . . . . . . . . . . . 62
9.2 Pricing of options in the Black Scholes setting . . . 63
9.2.1 European Options . . . . . . . . . . . . . . . 63
9.2.2 American Options . . . . . . . . . . . . . . . 63
9.2.3 Estimating partials. . . . . . . . . . . . . . . 66
9.3 Adjusting for payouts for the underlying . . . . . . 69
9.4 Pricing options on stocks paying dividends using a
binomial approximation . . . . . . . . . . . . . . . . 70
9.4.1 Checking for early exercise in the binomial
model. . . . . . . . . . . . . . . . . . . . . . 70
9.4.2 Proportional dividends. . . . . . . . . . . . . 70
9.4.3 Discrete dividends . . . . . . . . . . . . . . . 70
9.5 Option on futures . . . . . . . . . . . . . . . . . . . 74
9.6 Foreign Currency options . . . . . . . . . . . . . . . 75
9.7 References . . . . . . . . . . . . . . . . . . . . . . . 76
10 Finite Differences 77
10.1 Explicit Finite differences . . . . . . . . . . . . . . . 77
10.2 European Options. . . . . . . . . . . . . . . . . . . 77
10.3 American Options. . . . . . . . . . . . . . . . . . . 79
11 Option pricing by simulation 81
11.1 Simulating lognormally distributed random variables 81
11.2 Pricing of European Call options . . . . . . . . . . . 82
11.3 Hedge parameters . . . . . . . . . . . . . . . . . . . 83
11.4 More general payoffs. Function prototypes . . . . . 83
11.5 Improving the efficiency in simulation . . . . . . . . 85
11.5.1 Control variates. . . . . . . . . . . . . . . . 85
11.5.2 Antithetic variates. . . . . . . . . . . . . . . 86
11.5.3 Example . . . . . . . . . . . . . . . . . . . . 88
11.6 More exotic options . . . . . . . . . . . . . . . . . . 90
11.7 Exercises . . . . . . . . . . . . . . . . . . . . . . . . 90
12 Approximations 91
12.1 A quadratic approximation to American prices due
to Barone–Adesi and Whaley. . . . . . . . . . . . . 91
13 Average, lookback and other exotic options 95
13.1 Bermudan options . . . . . . . . . . . . . . . . . . . 95
13.2 Asian options . . . . . . . . . . . . . . . . . . . . . 98
13.3 Lookback options . . . . . . . . . . . . . . . . . . . 99
13.4 Monte Carlo Pricing of options whose payoff depend
on the whole price path . . . . . . . . . . . . . . . . 100
13.4.1 Generating a series of lognormally dis-
tributed variables . . . . . . . . . . . . . . . 100
13.5 Control variate . . . . . . . . . . . . . . . . . . . . 103
1

14 Alternatives to the Black Scholes type option for-
mula 104
14.1 Merton’s Jump diffusion model. . . . . . . . . . . . 104
15 Using a library for matrix algebra 106
15.1 An example matrix class . . . . . . . . . . . . . . . 106
15.2 Finite Differences . . . . . . . . . . . . . . . . . . . 106
15.3 European Options . . . . . . . . . . . . . . . . . . . 106
15.4 American Options . . . . . . . . . . . . . . . . . . . 106
16 Mean Variance Analysis. 109
16.1 Introduction. . . . . . . . . . . . . . . . . . . . . . . 109
16.2 Mean variance portfolios. . . . . . . . . . . . . . . . 110
16.3 Short sales constraints . . . . . . . . . . . . . . . . 111
17 Pricing of bond options, basic models 112
17.1 Black Scholes bond option pricing . . . . . . . . . . 112
17.2 Binomial bond option pricing . . . . . . . . . . . . . 114
18 Credit risk 116
18.1 The Merton Model . . . . . . . . . . . . . . . . . . 116
19 Term Structure Models 117
19.1 The Nelson Siegel term structure approximation . . 117
19.2 Cubic spline. . . . . . . . . . . . . . . . . . . . . . . 117
19.3 Cox Ingersoll Ross. . . . . . . . . . . . . . . . . . . 120
19.4 Vasicek . . . . . . . . . . . . . . . . . . . . . . . . . 122
20 Binomial Term Structure models 124
20.1 The Rendleman and Bartter model . . . . . . . . . 124
20.2 Readings . . . . . . . . . . . . . . . . . . . . . . . . 125
21 Term Structure Derivatives 127
21.1 Vasicek bond option pricing . . . . . . . . . . . . . 127
A Normal Distribution approximations. 129
A.1 The normal distribution function . . . . . . . . . . . 129
A.2 The cumulative normal distribution . . . . . . . . . 129
A.3 Multivariate normal . . . . . . . . . . . . . . . . . . 130
A.4 Calculating cumulative bivariate normal probabilities 130
A.5 Simulating random normal numbers . . . . . . . . . 132
A.6 Cumulative probabilities for general multivariate
distributions . . . . . . . . . . . . . . . . . . . . . . 132
A.7 References . . . . . . . . . . . . . . . . . . . . . . . 132
A.8 Exercises . . . . . . . . . . . . . . . . . . . . . . . . 133
B C++ concepts 134
C Summarizing routine names 135
D Installation 142
D.1 Source availability . . . . . . . . . . . . . . . . . . . 142
E Acknowledgements. 146
2

This book is a a discussion of the calculation of specific formulas in finance. The field of finance has seen
a rapid development in recent years, with increasing mathematical sophistication. While the formalization
of the field can be traced back to the work of Markowitz [1952] on investors mean-variance decisions and
Modigliani and Miller [1958] on the capital structure problem, it was the solution for the price of a call option
by Black and Scholes [1973], Merton [1973] which really was the starting point for the mathematicalization
of finance. The fields of derivatives and fixed income have since then been the main fields where complicated
formulas are used. This book is intended to be of use for people who want to both understand and use these
formulas, which explains why most of the algorithms presented later are derivatives prices.
This project started when I was teaching a course in derivatives at the University of British Columbia, in
the course of which I sat down and wrote code for calculating the formulas I was teaching. I have always
found that implementation helps understanding these things. For teaching such complicated material it is
often useful to actually look at the implementation of how the calculation is done in practice. The purpose
of the book is therefore primarily pedagogical, although I believe all the routines presented are correct and
reasonably efficient, and I know they are also used by people to price real options.
To implement the algorithms in a computer language I choose C
++
. My students keep asking why anybody
would want to use such a backwoods computer language, they think a spreadsheet can solve all the worlds
problems. I have some experience with alternative systems for computing, and no matter what, in the end
you end up being frustrated with higher end “languages”, such as Matlab og Gauss (Not to mention the
straitjacket which is is a spreadsheet.) and going back to implementation in a standard language. In my
experience with empirical finance I have come to realize that nothing beats knowledge a real computer
language. This used to be FORTRAN, then C, and now it is C
++
. All example algorithms are therefore coded
in C
++
.
The manuscript has been sitting on the internet for a number of years, during which it has been visited by
a large number of people, to judge by the number of mails I have received about the routines. The present
(2003) version mainly expands on the background discussion of the routines, this is much more extensive. I
have also added a good deal of introductory material on how to program in C
++
, since a number of questions
make it obvious this manuscript is used by a number of people who know finance but not C
++
. All the
routines have been made to confirm to the new ISO/ANSI C
++
standard, using such concepts as namespaces
and the standard template library.
The current manscript therefore has various intented audiences. Primarily it is for students of finance who
desires to see a complete discussion and implementation of some formula. But the manuscript is also useful
for students of finance who wants to learn C
++
, and for computer scientists who want to understand about
the finance algorithms they are asked to implent and embed into their programs.
In doing the implementation I have tried to be as generic as possible in terms of the C
++
used, but I have taken
advantage of a some of the possibilities the language provides in terms of abstraction and modularization.
This will also serve as a lesson in why a real computer language is useful. For example I have encapsulated
the term structure of interest rate as an example of the use of classes.
This is not a textbook in the underlying theory, for that there are many good alternatives. For much of the
material the best textbooks to refer to are Hull [2003] and McDonald [2002], which I have used as references,
and the notation is also similar to these books.
3

Chapter 1
On C++ and programming.
Contents
1.1 Compiling and linking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2 The structure of a C++ program . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1.2.2 Operations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.3 Functions and libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2.4 Templates and libraries . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.5 Flow control . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.6 Input Output . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.7 Splitting up a program . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
1.2.8 Namespaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Extending the language, the class concept. . . . . . . . . . . . . . . . . . . . . . 8
1.3.1 date, an example class . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.4 Const references . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10
In this chapter I introduce C
++
and discuss how to run programs written in C
++
. This is by no means a
complete reference to programming in C
++
, it is designed to give enough information to understand the rest
of the book. This chapter also only discusses a subset of C
++
, it concentrates on the parts of the language
used in the remainder of this book. For really learning C
++
a textbook is necessary. I have found Lippman
and Lajoie [1998] an excellent introduction to the language. The authorative source on the language is
Stroustrup [1997].
1.1 Compiling and linking
To program in C
++
one has to first write a separate file with the program, which is then compiled into
low-level instructions (machine language) and linked with libraries to make a complete executable program.
The mechanics of doing the compiling and linking varies from system to system, and we leave these details
as an exercise to the reader.
1.2 The structure of a C++ program
The first thing to realize about C
++
is that it is a strongly typed language. Everything must be declared
before it is used, both variables and functions. C
++
has a few basic building blocks, which can be grouped
into types, operations and functions.
1.2.1 Types
The types we will work with in this book are bool, int, long, double and string.
Here are some example definitions
bool this_is_true=true;
int i = 0;
long j = 123456789;
double pi = 3.141592653589793238462643;
string s("this is a string");
4
剩余151页未读,继续阅读

















安全验证
文档复制为VIP权益,开通VIP直接复制

评论0