You are on page 1of 15

Homework8

101071010

CVDOPutMC.m

function [P,std,CI] = CVDOPutMC(S0,Sb,X,r,T,sigma,NSteps,NRepl,NPilot)


Payoff = zeros(NPilot,1);
OriginalPayoff = zeros(NPilot,1);
[Call, Put] = blsprice(S0,X,r,T,sigma);
for i=1:NPilot
Path = AssetPaths1(S0,r,sigma,T,NSteps,1);
OriginalPayoff(i) = max(0,X-Path(NSteps+1));
crossed = any(Path <= Sb);
if crossed == 0
Payoff(i) = max(0,X-Path(NSteps+1));
end
end

OriginalPayoff = exp(-r*T)*OriginalPayoff;
Payoff = exp(-r*T)*Payoff;
covMat = cov(OriginalPayoff, Payoff);
varVanilla = var(OriginalPayoff);
c = -covMat(1,2)/varVanilla;
newPayoff = zeros(NRepl,1);
newOriginalPayoff = zeros(NRepl,1);
for i=1:NRepl
Path = AssetPaths1(S0,r,sigma,T,NSteps,1);
newOriginalPayoff(i) = max(0,X-Path(NSteps+1));
crossed = any(Path <= Sb);
if crossed == 0
newPayoff(i) = max(0,X-Path(NSteps+1));
end
end
newOriginalPayoff = exp(-r*T)*newOriginalPayoff;
newPayoff = exp(-r*T)*newPayoff;
CVpayoff = newPayoff + c*(newOriginalPayoff - Put);
[P, std, CI] = normfit(CVpayoff);

CompCVDOPutMC.m

>> [P,std,CI] = DOPutMC(S0,X,r,T,sigma,Sb,NSteps,NRepl)


P=
1.3292
std =
2.3516
CI =
1.2831
1.3753
>>[P,std,CI] = CVDOPutMC(S0,Sb,X,r,T,sigma,NSteps,NRepl,NPilot)
P=
1.3690
std =
2.1765
CI =
1.3263
1.4116
>> P = DOPut(S0,X,r,T,sigma,Sb)
P=
1.2204

DoPutHalton.m
function Price = DoPutHalton(S0,Sb,X,r,T,sigma,NPoints,Base1,Base2)
nuT = (r - 0.5*sigma^2)*T;
siT = sigma * sqrt(T);

H1 = GetHalton(ceil(NPoints/2),Base1);
H2 = GetHalton(ceil(NPoints/2),Base2);
VLog = sqrt(-2*log(H1));
Norm1 = VLog .* cos(2*pi*H2);
Norm2 = VLog .* sin(2*pi*H2);
Norm = [Norm1 ; Norm2];

Payoff = zeros(NPoints,1);
NCrossed = 0;
Path=S0*exp(nuT+siT*Norm);
for i=1:NPoints
crossed = any(Path <= Sb);
if crossed == 0
Payoff(i) = max(0, X-Path(NPoints));
else
Payoff(i) = 0;
NCrossed = NCrossed + 1;
end
end
DiscPayoff= exp(-r*T) * Payoff;
Price = mean(DiscPayoff);

CompDoPutHalton.m

S0=50;Sb=30;X=50;r=0.1;T=2/12;sigma=0.4;
Base1=2;Base2=3;NRepl=100;NSteps=10;
Price= DOPutHalton(S0,Sb,X,r,T,sigma,NSteps,NRepl,Base1,Base2)
Price =
7.5873

Convertible Bond.m

function [ price,lattice ] = CB( S0,r,rb,b0,T,sigma,N,Q)


deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
I=b0*(1+rb);
lattice=zeros(N+1,N+1);
for j=0:N
lattice(N+1,j+1)=max(I/Q,S0*(u^j)*(d^(N-j)));
end
for i=N-1:-1:0
for j=0:i
lattice(i+1,j+1)=max(S0*u^(j)*d^(i-j),exp(-r*deltaT)*(p*lattice(i+2,j+2)+(1-p)*lattice(i+2,j+1)));
end
end
price=lattice(1,1)*Q;

CompCB.m
S0=80;r=0.05;rb=0.02;b0=100;T=5;sigma=0.2;N=12;Q=1;
[ price,lattice ] = CB( S0,r,rb,b0,T,sigma,N,Q)

CBprice_puttable.m

function [ price, lattice] = CBprice_puttable(S0,r,rb,b0, T, sigma,N,Q,PutP, PutT)


deltaT = T/N;
PutN = ceil(PutT / deltaT);
u = exp( sigma * sqrt(deltaT) );
d = 1/u;
p = ( exp( r * deltaT ) - d ) / ( u - d );
I=b0*(1+rb);
lattice=zeros(N+1,N+1);
for i = 0 : N
lattice(N+1,i+1)= max( I/Q, S0 * u^(i) * d^(N-i) );
end
for i = N-1 : -1 : 0
for j = 0 : i
lattice(i+1,j+1)= max( exp(-r*deltaT) * ( lattice(i+2,j+2)*p + lattice(i+2,j+1)*(1-p) ), S0 * u^(j) * d^(i-j));
if(i>= PutN-1)
lattice(i+1,j+1)= max( lattice(i+1,j+1) , PutP/Q );
end
end
end
price=lattice(1,1)*Q;

CompCBprice_puttable.m
S0=80;r=0.05;rb=0.02;b0=100;T=5;sigma=0.2;N=12;Q=1;PutP=105;PutT=4;
[ price, lattice] = CBprice_puttable(S0,r,rb,b0, T, sigma,N,Q,PutP, PutT)

CBprice_callable.m

function [ price, lattice] = CBprice_callable( S0,r,rb,b0, T, sigma,N,Q,CallP, CallT)


deltaT = T/N;
CallN = ceil(CallT / deltaT);
u = exp( sigma * sqrt(deltaT) );
d = 1/u;
p = ( exp( r * deltaT ) - d ) / ( u - d );
I=b0*(1+rb);
lattice=zeros(N+1,N+1);
for i = 0 : N
lattice(N+1,i+1)= max( I/Q, S0 * u^(i) * d^(N-i) );
end
for i = N-1 : -1 :0
for j = 0 : i
lattice(i+1,j+1) = exp(-r*deltaT) * (lattice(i+2,j+2)*p + lattice(i+2,j+1)*(1-p) );
if(i >= CallN-1)
lattice(i+1,j+1) = min( lattice(i+1,j+1) , CallP/Q );
end
Sp = S0 * u^(j) * d^(i-j) ;
lattice(i+1,j+1) = max(lattice(i+1,j+1) , Sp );
end
end
price = lattice(1,1) * Q;

CompCBprice_callable.m
S0=80;r=0.05;rb=0.02;b0=100;T=5;sigma=0.2;N=12;Q=1;CallP=90;CallT=4;
[ price, lattice] = CBprice_callable( S0,r,rb,b0, T, sigma,N,Q,CallP, CallT)

CBprice_callabe&puttable.m

function [ price, lattice] = CBprice_cp( S0,r,rb,b0, T, sigma,N,Q,CallP, CallT,PutP, PutT)

deltaT = T/N;
PutN = ceil(PutT / deltaT);
CallN = ceil(CallT / deltaT);
u = exp( sigma * sqrt(deltaT) );
d = 1/u;
p = ( exp( r * deltaT ) - d ) / ( u - d );
I=b0*(1+rb);
lattice=zeros(N+1,N+1);
for i = 0 : N
lattice(N+1,i+1)= max( I/Q, S0 * u^(i) * d^(N-i) );
end
for i = N-1 : -1 :0
for j = 0 : i
lattice(i+1,j+1) = exp(-r*deltaT) * (lattice(i+2,j+2)*p + lattice(i+2,j+1)*(1-p) );
if(i >= CallN-1)
lattice(i+1,j+1) = min( lattice(i+1,j+1) , CallP/Q );
end
Sp = S0 * u^(j) * d^(i-j) ;
lattice(i+1,j+1) = max(lattice(i+1,j+1) , Sp );
if(i>= PutN-1)
lattice(i+1,j+1)= max( lattice(i+1,j+1) , PutP/Q );
end
end
end
price = lattice(1,1) * Q;

CompCBprice_callabe&puttable

S0=80;r=0.05;rb=0.02;b0=100;T=5;sigma=0.2;N=12;Q=1;CallP=90;CallT=4;PutP=105;PutT=4;
[ price, lattice] = CBprice_cp( S0,r,rb,b0, T, sigma,N,Q,CallP, CallT,PutP, PutT)

You might also like