You are on page 1of 7

Homework09

103071509


Convertible Bond Price
function [price,lattice]=mycbprice(SO,FV,rc,r,T,sigma,N)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for i=0:N
lattice(i+1,N+1)=max(FV+FV*rc*(T/N)*N,SO*(u^(N-i)*(d^i))+FV*rc*(T/N)*N);
end
for j=N-1:-1:0
for i=0:j
lattice(i+1,j+1)=max(SO*(u^(j-i))*(d^i)+FV*rc*(T/N)*j,...
exp(-r*deltaT)*(p*lattice(i+1,j+2)+(1-p)*lattice(i+2,j+2)));
end
end
price=lattice(1,1);

>> [price,lattice]=mycbprice(80,100,0.02,0.05,5,0.2,10)
price =
100.6197
lattice =
100.6197 109.1949 120.0732 133.7622 150.7394 171.3860 195.9448 224.5653 257.5045
295.4178 339.0600
0 95.6821 101.8840 109.8896 120.2727 133.6570 150.6173 171.5266 196.4088 225.0410
257.9922
0
0 93.4109 97.7254 103.2331 110.4789 120.1823 133.2018 150.3646 172.0023
196.8965
0
0
0 93.3546 96.4324 100.0944 104.6998 110.8363 119.4499 132.0303 150.8523
0
0
0
0 94.8308 97.3577 100.0561 103.0217 106.4306 110.6074 116.1517
0
0
0
0
0 97.0747 99.5321 102.0518 104.6352 107.2841 110.0000
0
0
0
0
0
0 99.5321 102.0518 104.6352 107.2841 110.0000
0
0
0
0
0
0
0 102.0518 104.6352 107.2841 110.0000
0
0
0
0
0
0
0
0 104.6352 107.2841 110.0000
0
0
0
0
0
0
0
0
0 107.2841 110.0000
0
0
0
0
0
0
0
0
0
0 110.0000

function [price,lattice]=mycbprice(SO,FV,rc,r,T,sigma,N,callable)
deltaT=T/N;
u=exp(sigma*sqrt(deltaT));
d=1/u;
p=(exp(r*deltaT)-d)/(u-d);
lattice=zeros(N+1,N+1);
for i=0:N
lattice(i+1,N+1)=max(FV+FV*rc*(T/N)*N,SO*(u^(Ni)*(d^i))+FV*rc*(T/N)*N);
end
for j=N-1:-1:0
for i=0:j
lattice(i+1,j+1)=max(SO*(u^(j-i))*(d^i)+FV*rc*(T/N)*j,...
min(callable,exp(-r*deltaT)*(p*lattice(i+1,j+2)+(1p)*lattice(i+2,j+2))));
end
end
price=lattice(1,1);

clc;clear;
CBprice=[];
for callable=linspace(100,200,20)
CBprice=[CBprice,mycbprice(80,100,0.02,0.05,5,0.2,10,callable)];
end
callable=linspace(100,200,20)
plot(callable,CBprice)


up-and-out call
function
[Cdo,CI,NCrossed]=UOCallMCCondIS(SO,X,r,T,si
gma,Sb,NSteps,NRepl,bp)
dt=T/NSteps;
nudt=(r-0.5*sigma^2)*dt;
b=bp*nudt;
sidt=sigma*sqrt(dt);
[Call,Put]=blsprice(SO,X,r,T,sigma);
%Generate asset paths and payyoffs for the up
and in option
NCrossed=0;
Payoff=zeros(NRepl,1);
Times=zeros(NRepl,1);
StockVals=zeros(NRepl,1);
ISRratio=zeros(NRepl,1);
for i=1:NRepl
%ggenerate normals
vetZ=nudt+b+sidt*randn(1,NSteps);
LogPath=cumsum([log(SO),vetZ]);
Path=exp( LogPath);
jcrossed=find(Path>=Sb,1)

if not(isempty(jcrossed))
NCrossed= NCrossed+1;
TBreach=jcrossed-1;
Times(NCrossed)=TBreach*dt;
StockVals(NCrossed)=Path(jcrossed);
ISRatio(NCrossed)=exp(TBreach*b^2/2/sigma^
2/dt-...
b/sigma^2/dt*sum(vetZ(1:TBreach))+...
TBreach*b/sigma^2*(r-sigma^2/2));
end
end
if (NCrossed>0)
[Caux,Paux]=blsprice(StockVals(1:NCrossed),X,
r,...
T-Times(1:NCrossed),sigma);
Payoff(1:NCrossed)=exp(r*Times(1:NCrossed)).*Caux...
.*ISRatio(1:NCrossed);
end
[Cdo,aux,CI]=normfit(Call-Payoff);

You might also like