Professional Documents
Culture Documents
hw8 101071010
hw8 101071010
101071010
CVDOPutMC.m
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
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
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
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
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
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)