(I) Write a function or functions to evaluate the Black-Scholes functions for Put and Call. Test it by verifying the
Put-Call parity relationship. Perform the test on a variety of different values of r, , S0, and T - t. (Take q = 0.)
Write the program so that it takes as input actual dates (current date and expiration date).
Hint: The time to expiration of the option in years = (the number of business days between current date and
expiration date)/ (total number of business days in one year).
Functions should be declared in .h files and defined in corresponding .cpp files. (e.g., hw2_StdNormal.h and
hw2_StdNormal.cpp)
Please do the following:
1. Complete the code for the function: double Normal(double) by implementing the algorithm in the notes.
2. Implement Black-Scholes functions for Call and Put. Follow the examples of BSF_call and BSF_put found in
the file BSF_wk4.py.
3. Test your work in step 2 by implementing a function like BSF_Test in BSF_wk4.py
4. Try to write one BSF function that returns a pair<double, double> where the first member is the call value and
the second is the put value.
5. Try to implement the Black-Scholes functions as Function Objects in which the single variable is the spot price.
6. Finally, try to implement the Black-Scholes functions as Function Objects in which the single variable is the
volatility .
(II) There are three variables of interest: T - t, S, . If T- t is held fixed, one can investigate the near term behavior
of the option price as S and vary. If is held fixed, one can view the theoretical future dynamics of the option
prices. Each of these studies can be made by creating grids of values that can be imported into a spreadsheet and
charted. Write a program to create these types of data.
Hint: The program’s input should include fixed current date, fixed expiration date, range of S, the range of and
other necessary parameters (e.g., r, q, flag of call/put, etc.) The output should be a csv-file of option prices with
varying and S. The generation the range of S or should be done in an automatic manner. For example, let the
user set the min(S)=20, max(S)=35, step(S)=1 (or n(S)=16), and then an array of [20, 21, …, 35] would be
generated. In the csv files, column names and row names should be presented, and the first line should contain
basic information of the option, like below:
Call Option K=27 sigma=1 r=0.01 q=0 t=08/19/2014 T=09/19/2014 range(S)=20:1:35 range()=0.5:0.1:1.5
S \ 0.5 0.6 0.7 … 1.4 1.5
20
…
35
(III) Implement the plan of Problem 2 for the case of an option portfolio consisting of one European Call that
expires in expiration date T1 (e.g., November 21st
) and a short position in a European call that expires in another
expiration date T2 (e.g., October 17th
) . Both options have the same underlying and the same strike. (This position
is called a “Call Calendar Spread".)
One table of the portfolio price for varying S and is expected to output in a csv file. The input current date
should be no later than min(T1,T2). The format requirement of csv file remains the same as that in problem (II).