1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88
| function [wact, wbons, pa, bons, d1, Nd1, d2, Nd2, port,eps,mult] = obpi2(s)
%Définition des variables
x = 50;
t = 1;
r = 0.08;
mu = 0.15;
sigma = 0.75;
port(1)=1000;
pas = 52;
dt = t/pas;
pa(1)=s;
%Créons le code pour la première semaine
%Calculons d1,N(d1), N(-d1)
d1(1)= log(s/x)+( r + 0.5 * sigma * sigma ) * t / (sigma * sqrt(t));
Nd1(1)= normcdf(d1(1));
Nminusd1(1) = normcdf(-d1(1));
%Calculons d2,N(d2), N(-d2)
d2(1)=d1(1) - sigma * sqrt(t);
Nd2(1)= normcdf(d2(1));
Nminusd2(1) = normcdf(-d2(1));
%Calculons la valeur du put
put0(1) = (-s * Nminusd1(1)) + ( x * exp( -1 * r * t ) * Nminusd2(1));
%Calculons les proportions d'actions et de bons
wact(1) = (s * Nd1(1)) / (s + put0(1));
wbons(1) = 1 - wact(1);
%Calculons les valeurs d'actions et de bons contenues dans le portefeuille
act(1) = wact(1) * port(1);
bons(1) = port(1) - act(1);
port(1) = act(1)+ bons(1);
eps(1)=0;
mult(1)=0;
%Semaines 1 à 51
%Act,bons,port font références aux proportion en d'actions, d'obligations et le montant total du portefeuille
for i = 1 : pas
%On calcules la nouvelle valeur des obligations
bons (i+1:i+1) = bons(i) * exp(r / pas);
%On crée le vecteur eps pour ranger les valeurs générés aléatoirement
a=rand
eps(i+1:i+1) = norminv(a);
%On génère le nouveau prix de l'actions
pa(i+1:i+1)= pa(i) + (mu * pa(i)* dt) + (sigma * pa(i)* eps(i) * sqrt(dt));
%Mult est le ratio du nouveau prix de l'action sur l'ancien prix
mult(i+1:i+1) = pa(i+1:i+1) / pa(i:i);
act(i+1:i+1) = act(i:i) * mult(i+1:i+1);
port(i+1:i+1) = act(i+1:i+1) + bons(i+1:i+1);
%Début de la semaine 1
%On commence par calculer les différentes variables du temps
%La variable du temps classique
dur(i:i) = i * dt;
%La variable du temps restant
tstar(i:i) = t - dur(i:i);
num (i:i) = log(pa(1)/x)+((r+0.5*sigma^2)*(tstar(i:i)));
%On calcule des différents paramètres de la formule de BxS
%On calcule d1,N(d1),N(-d1)
d1(i+1:i+1) = num / (sigma * sqrt(tstar));
Nd1(i+1:i+1) =normcdf(d1(i+1:i+1)) ;
Nminusd1(i+1:i+1) = normcdf(-d1(i+1:i+1));
%On calcule d2,N(d2),N(-d2)
d2(i+1:i+1) = d1(i+1:i+1) - sigma * sqrt(t - i * dt);
Nd2(i+1:i+1) = normcdf(d2(i+1:i+1));
Nminusd2(i+1:i+1) = normcdf(-d2(i+1:i+1));
puts(i+1:i+1) = ( -pa(i+1:i+1) * Nminusd1(i+1:i+1)) + (x * exp(-r * (t - i * dt)) * Nminusd2(i+1:i+1));
%Calcul des proportions et des valeurs totales des obligations 0-coupon et actions
wact(i+1:i+1) = (pa(i+1:i+1) * Nd1(i+1:i+1)) / (pa(i+1:i+1) +puts(i+1:i+1));
wbons(i+1:i+1) = 1 - wact(i+1:i+1);
act(i+1:i+1) = wact(i+1:i+1) * port(i+1:i+1);
bons(i+1:i+1) = wbons(i+1:i+1) * port(i+1:i+1);
port(i+1:i+1) = act(i+1:i+1) + bons(i+1:i+1);
end |
Partager