联系方式

  • QQ:99515681
  • 邮箱:99515681@qq.com
  • 工作时间:8:00-21:00
  • 微信:codinghelp

您当前位置:首页 >> C/C++编程C/C++编程

日期:2020-04-26 10:34

7CCMFM13

This paper is part of an examination of the College counting towards the award of a degree.

Examinations are governed by the College Regulations under the authority of the Academic

Board.

FOLLOW the instructions you have been given on how to upload your solutions

MSc Examination

7CCMFM13 C++ for Financial Mathematics (MSc)

Summer Mock Exam 2020

Time Allowed: Two Hours

All questions carry equal marks.

Full marks will be awarded for complete answers to FOUR questions.

If more than four questions are attempted, then only the best FOUR will

count.

You may consult lecture notes.

Mock Exam 2020

c King’s College London

7CCMFM13

1. (i) Write a function max(double, double) which takes two doubles and

returns the maximum of them. [20%]

(ii) Write a function mean which takes as input a vector of doubles (using

<vector>) and which returns the mean of the elements of the vector.

[20%]

(iii) What’s wrong with the following code?

int& Setx(){

int x=3;

return x;

}

[20%]

(iv) What does the following code print out and why?

# include <iostream>

using namespace std;

void MyFunction(double& a){

a*=10;

}

int main()

{

double a=1;

MyFunction(a);

cout<<a<<"\n";

return 0;

}

[20%]

(v) What does static mean in a class definition? Give an example of a class

with a static member variable. [20%]

- 2 - See Next Page

7CCMFM13

2. (i) We aim to define an interface class RNG with a function rand() to

generate random numbers according to a given distribution. What are

the two things which are missing from the code below?

class RNG{

public:

double rand() const=0;

};

[30%]

(ii) Write a class RUNG which provides an implementation of the function

rand() to generate a number in the interval (0, 1) from the uniform distribution

(we assume that we have declared an object mt19937

MersenneTwister).

[40%]

(iii) Write a class RENG which provides an implementation of the function

rand() to generate a random number from the exponential distribution

with mean parameter λ. [30%]

Hint: We recall the Inverse transform technique to simulate random numbers

according to a given distribution: let U be a uniform random variable

in the range (0, 1). If X = F

−1

(U), then X is a random variable with cumulative

distribution function FX(x) = F. The inverse of the exponential

cumulative distribution function is −λ × ln(1 − u).

- 3 - See Next Page

7CCMFM13

3. (i) Give an implementation of the class MyVector. It should have a member

variable size and a member variable ptr containing a pointer to a memory

location containing an array of ints. Show how would you implement the

following:

(a) A constructor which takes as parameter a given size; [15%]

(b) A destructor; [15%]

(c) The other functions required by the “rule of three”; [15%]

(d) A subscript operator “[]” which returns a modifiable value; [15%]

(e) A “+” operator to add two MyVector instances with the same size.

[15%]

(ii) Redesign the class MyVector by introducing a new member variable capacity

which stores the size of the storage space currently allocated for

MyVector, expressed in terms of elements (don’t write the implementations

of the functions). Note that this capacity is not necessarily equal to

the vector size. It can be equal or greater, with the extra space allowing to

accommodate for growth without the need to reallocate on each insertion.

Write a function push back(int) that inserts a new int in MyVector.

[25%]

- 4 - See Next Page

7CCMFM13

4. We consider the following class defining the Black&Sholes model:

class BlackAndSholes{

public:

double S0;

double sigma;

double interest_rate;

double date;

BlackAndSholes();

vector<double> generateRiskNeutralPricePath(double T,

int NSteps) const;

...

};

The following function prices a put option by Monte-Carlo in the Black&Sholes

model.

double PriceByMonteCarlo(const BlackAndSholes& model, const

PutOption& option, int NSimulations, int NSteps)

{

vector<double> path(NSteps, 0.0);

double total=0.0;

double payoff;

for (int i=0;i<NSimulations; i++)

{

path=model.generateRiskNeutralPricePath(option.GetMaturity(),

NSteps);

payoff=option.payoff(path.back());

total+=payoff;

}

double mean=total/NSimulations;

double r=model.interest_rate;

double T=option.GetMaturity()-Model.date;

return exp(-r*T)*mean;

}

class PutOption{

private: double T, K;

public:

double payoff(double x) const;

double GetMaturity() const{return T;};- 5 - See Next Page

7CCMFM13};

double PutOption::payoff(double x) const

{if (x<K) return K-x;

return 0;}

In the above code, the function generateRiskNeutralPricePath generates

a price path under the risk neutral probability measure in the Black&Sholes

model.

(i) How would you redesign your code in order to include the ability to price

a Call Option using only one function PriceByMonteCarlo? Provide

an implementation only for the specific functions to the Call Option.

[20%]

(ii) Illustrate your code by showing how to price a Digital Put Option.

Provide an implementation only for the specific functions to the Digital

Put Option. [20%]

(iii) We now aim to include the ability to price an Arithmetic Asian Call,

with minimum changes on the already existing code and classes. What

design changes would you make to the function PriceByMonteCarlo

and to the hierarchy of classes ? Provide an implementation only for the

specific functions to the Arithmetic Asian Call.

Hint: The payoff of an Arithmetic Asian Call is defined as follows:

max(A(0, T) − K, 0),

with A(0, T) = 1n+1Pn

i=0 S(ti), where ti = iTn, 0 ≤ i ≤ n. [20%]

(iv) Illustrate your code by showing how to price a up-and-out knock-out

call option. Provide an implementation only for the specific functions

to the up-and-out knock-out call option.

- 6 - See Next Page

7CCMFM13

Hint: We recall that an up-and-out knock-out call option with maturity

T and strike K and barrier B has a payoff given by:



max{ST − K, 0} if St < B for all t ∈ [0, T]

0 otherwise.

[20%]

(v) How would you test the function PriceByMonteCarlo? [20%]

- 7 - See Next Page

7CCMFM13

5. We consider the following two classes: BinModel and DiscreteTimePut. The

class BlackAndSholes used here is the one defined in the previous exercise.

class BinModel{

private: double S0,R,D,U;

public: ...

void SetStock(double);

void SetU(double);

void SetD(double);

void SetR(double);

};

class DiscreteTimePut{

private:

int N;

double K;

public: ...

double payoff(double x) const;

void SetN(int);

void SetK(double);

double PriceBySnell(const BinModel &) const;

};

double DiscreteTimePut::payoff(double x) const

{if (x<K) return K-x;

return 0;}

In the above code, the function PriceBySnell computes the price at time 0 of

an American Put in the Binomial Model.

(i) Write a function BlackSholesToBinomial(const BlackAndSholes&

Model, double T, int N) which returns the corresponding object of

type BinModel.

Hint: Recall that you have to divide the time interval [0, T] into N steps

of length h =TN, and set the parameters of the binomial model to be

- 8 - See Next Page

where σ is the volatility and r is the continously compounded interest rate

in the Black-Sholes model. [20%]

(ii) Rewrite the function BlackSholesToBinomial that we rename ToBinomial

as a member function of the class BlackAndSholes. [20%]

(iii) Write a function AmericanPutBlackSholes(const BlackAndSholes

& Model, double T, double K, const DiscreteTimePut & option)

which returns an approximation of the price of the American put in the

Black-Sholes model by means of the binomial approximation (the number

of steps N should be defined in this function). [20%]

(iv) Write a new class DiscreteTimeCall and a new function AmericanCallBlackSholes(const

BlackAndSholes & Model, double T, double

K, const DiscreteTimeCall & option) which returns an approximation

of the price of the American Call in the Black-Sholes model by

means of the binomial approximation. [20%]

(v) Which aspects of the design do you find unsatisfactory? What solution

do you propose? [20%]

- 9 - Final Page


版权所有:编程辅导网 2021 All Rights Reserved 联系方式:QQ:99515681 微信:codinghelp 电子信箱:99515681@qq.com
免责声明:本站部分内容从网络整理而来,只供参考!如有版权问题可联系本站删除。 站长地图

python代写
微信客服:codinghelp