Anteprima
Vedrai una selezione di 3 pagine su 8
Esercitazioni codici Matlab Pag. 1 Esercitazioni codici Matlab Pag. 2
Anteprima di 3 pagg. su 8.
Scarica il documento per vederlo tutto.
Esercitazioni codici Matlab Pag. 6
1 su 8
D/illustrazione/soddisfatti o rimborsati
Disdici quando
vuoi
Acquista con carta
o PayPal
Scarica i documenti
tutte le volte che vuoi
Estratto del documento

PRIMA ESERCITAZIONE

%% === LOAD PRICE DATA" ===

lename = "DatasetEsercitazione";

sheet = "Stock Prices";

% Imposta le opzioni di importazione dei dati da un le Excel chiamato "DatasetEsercitazione",

% speci cando il foglio da cui leggere (variabile 'sheet' da de nire precedentemente).

opts = detectImportOptions("DatasetEsercitazione","sheet",sheet);

% Imposta il tipo di variabili, dalla seconda colonna in poi, a "double" (numerico).

opts = setvartype(opts,2:numel(opts.VariableNames),"double");

% Speci ca che le stringhe "NaN" nelle celle del le devono essere trattate come valori mancanti

(NaN reali).

opts = setvaropts(opts,2:numel(opts.VariableNames),"TreatAsMissing","NaN");

% Importa tutti i dati del foglio selezionato come tabella.

T = readtable("DatasetEsercitazione",opts);

% Estrae il vettore delle date (prima colonna).

D = T{:,1};

% Estrae i nomi delle variabili (nomi degli stock), escludendo la colonna della data.

Names = T.Properties.VariableNames(2:end);

% Estrae la matrice dei prezzi, convertendo le colonne dalla seconda in poi in un array numerico.

P = table2array(T(:,2:end));

% Crea la prima gura con i prezzi dei titoli 1 e 40 nel tempo.

gure(1)

plot(D,P(:,[1 40])) %Plotta i prezzi dei due titoli selezionati

legend(Names{[1 40]}) %Aggiunge la legenda con i nomi dei due titoli

title("stock 1 and 40 - Prices")

xlabel("Date"); ylabel("Prices")

% Calcola i rendimenti percentuali giornalieri (o per intervallo temporale tra righe) per ogni titolo.

R = ((P(2:end,:)-P(1:end-1,:))./P(1:end-1,:))*100;

% Aggiorna il vettore delle date per adattarsi alla nuova lunghezza dei rendimenti (una in meno).

D_R = D(2:end);

% Estrae i rendimenti per lo stock 1 e lo stock 40.

R1 = R(:,1);

R40 = R(:,40);

% Crea la seconda gura con i rendimenti dei titoli 1 e 40.

gure(2)

plot(D_R,R1) %Plotta i rendimenti del primo titolo

legend(Names{[1 40]})

title("stock 1 and 40 - Prices") %(NB: titolo da correggere non prices ma returns, è sui rendimenti

non sui prezzi)

xlabel("Date"); ylabel("Prices")

hold on %mi tiene aperto il primo plot, e mandando il secondo plot mi verra sovrapposto al

precedente, Mantiene il primo gra co per sovrapporre il secondo

fi

fi

fi fi fi fi fi fi fi fi fi

plot(D_R,R40) %Sovrappone i rendimenti del titolo 40

hold o

% De nisce i pesi del portafoglio: 70% in R1, 30% in R40.

w = [0.7;0.3];

% Calcola la matrice di covarianza tra i rendimenti di R1 e R40

C_2 = cov(R1,R40);

%% metodo1- formula analitica 2 asset

% Calcola il rendimento atteso del portafoglio (media pesata).

mu_1 = w(1)*mean(R1)+w(2)*mean(R40);

% Calcola la varianza del portafoglio usando la formula per 2 asset.

Vp_1 = w(1)^2*var(R1)+w(2)^2*var(R40)+2*w(1)*w(2)*C_2(2,1);

% Calcola la deviazione standard (rischio) del portafoglio.

Sp_1 = sqrt(Vp_1);

%% metodo 2 - notazione matriciale (per piu asset)

% Calcola il rendimento atteso in forma matriciale.

mu_2 = [mean(R1) mean(R40)]*w;

% Calcola la varianza e il rischio del portafoglio in forma matriciale.

Vp_2 = (w'*C_2*w);

Sp_2 = sqrt(w'*C_2*w);

%% example per 10 asset

% Calcola i rendimenti medi per i primi 10 titoli, escludendo eventuali NaN.

mu_10 = mean(R(:,1:10),"omitnan");

% Calcola la matrice di covarianza tra i primi 10 titoli.

C_10 = cov(R(:,1:10));

%% trasformo il dataset

P=readmatrix("DatasetEsercitazione.xlsx","Sheet","stock prices","Range","B2:SJ3274");

% "P=" Assegna i dati letti a una variabile chiamata P. Dopo l'esecuzione, P conterrà una matrice

con i dati importati.

% "readmatrix" È la funzione di MATLAB per leggere dati da un le Excel in formato matrice

numerica (i testi vengono ignorati o convertiti in NaN se non possono essere interpretati come

numeri).

% "DatasetEsercitazione" È il nome del le Excel da cui leggere i dati. Deve trovarsi nella current

folder o devi fornire il percorso completo

% "sheet" Speci ca il foglio di Excel da cui leggere i dati. In questo caso il foglio si chiama "stock

prices".

% "Range.." Indica l'intervallo preciso di celle da leggere: dalla cella B2 no a SJ3274.

N=readcell("DatasetEsercitazione.xlsx","Sheet","stock prices","Range","B1:SJ1");

R= 100*(P(2:end,:)-P(1:end-1,:))./P(1:end-1,:);

assets=[494,268];

% stai creando un vettore riga chiamato assets contenente due valori

% numerici:494,268

Port=R(:,assets);

% Questo comando estrae da una matrice R solo le colonne speci cate nel vettore assets,

mantenendo tutte le righe, e assegna il risultato alla variabile Port.

fi ff fi fi fi fi fi

mu=mean(Port);

mu=mu';

Sigma=cov(Port);

% calcoliamo rendimento e rischio del portafoglio

w_s= [0.3;0.7];

mu_s = mu'*w_s;

sigma_s=sqrt(w_s'*Sigma*w_s);

%% calcoliamo ora la frontiera

N=100;

w1=linspace(0,1,N);

w2=1-w1;

w=[w1;w2];

%valore atteso portafoglio

mu_p=mu'*w;

%sigma portafoglio versione intuitiva, ossia con il "for loop"

sigma_p = nan(N,1);

for j = 1:N

w_j = w(:,j);

sigma_p(j) = sqrt(w_j'*Sigma*w_j);

end

%% visualizziamo la frontiera e ciente

gure (1);

plot(sigma_p,mu_p,"b-","LineWidth",2);

hold on

plot(sqrt(diag(Sigma)),mu,"ro","MarkerSize",8);

plot(sigma_s,mu_s,"kp","MarkerSize",12,"MarkerFaceColor","k");

xlabel("\sigma");

ylabel("\mu")

title("Frontiera Portafogli")

legend("Frontiera","Singoli Titoli","Portafoglio Scelto","Location","best");

grid on

hold o

SECONDA ESERCITAZIONE

P=readmatrix("DatasetEsercitazione.xlsx","Sheet","Stock Prices","Range","B2:SJ3274");

Mkt = readmatrix("DatasetEsercitazione.xlsx","Sheet","Factors","Range","B2:B3273");

Rf=readmatrix("DatasetEsercitazione.xlsx","Sheet","Factors","Range","F2:F3273");

Mkt= ipud(Mkt);

Rf= ipud(Rf);

Mkt= Mkt+Rf;

R= 100*(P(2:end,:)-P(1:end-1,:))./P(1:end-1,:);

R_494= R(:,494);

R_268= R(:,264);

check494= anynan(R_494);

check268= anynan(R_268);

gure(1);

subplot(1,2,1);

scatter(Mkt,R_494);

xlabel("R_m");

ylabel("R_{494}");

h=lsline;

fi

fi fl fl ff ffi

set(h,"color","r");

subplot(1,2,2);

scatter(Mkt,R_268);

xlabel("R_m");

ylabel("R_{268}");

h=lsline;

set(h,"color","r");

%% Stimiamo Market Model

mm_494 = tlm(Mkt,R_494);

b_494 = mm_494.Coe cients.Estimate;

mm_268 = tlm(Mkt,R_268);

b_268 = mm_268.Coe cients.Estimate;

%per tutti i titoli

[T,N]= size(R);

b2 = nan(N,2);

for i=1:N

if not(anynan(R(:,i)))

Y=R(:,i);

b2(i,:)= tlm(Mkt,Y).Coe cients.Estimate;

end

end

%compute the Market Model for a portfolio

w_1=0.6;

TERZA ESERCITAZIONE

P=readmatrix("DatasetEsercitazione.xlsx","Sheet","Stock Prices","Range","B2:SJ3274");

Emkt = readmatrix("DatasetEsercitazione.xlsx","Sheet","Factors","Range","B2:B3273");

Rf=readmatrix("DatasetEsercitazione.xlsx","Sheet","Factors","Range","F2:F3273");

Emkt= ipud(Emkt);

Rf= ipud(Rf);

R= 100*(P(2:end,:)-P(1:end-1,:))./P(1:end-1,:);

R_494= R(:,494);

R_268= R(:,264);

%stimiamo il CAPM

B1_CAPM= tlm(Emkt,R_494-Rf);

%testiamo la validità di questa formula,stiamo il CAPM per tutti i titoli

Y=R-Rf;

[T,N]=size(Y);

%stiamiamo la X ossia tutti i titoli del portafoglio ma non con tlm che è

%fancy ma con regress che pero stimerà solo Y=BX e quindi dobbiamo

%speci cargli che vogliamo anche "a" (+BX);con horzcat che ci aggrega

X=horzcat(ones(T,1),Emkt);

B=nan(N,2);

for i=1:N

B(i,:)=regress(Y(:,i),X);

end

%andiamo a fare la SML

fl fl fi fi

fi fi

fi ffi

ffi ffi fi

gure(1)

scatter(B(:,2),mean(Y,'omitnan')')

xlabel('\beta_{im}');

ylabel('E(R_i-Rf');

title('SML');

h=lsline;

set(h,'color','r');

SML= tlm(B(:,2),mean(Y)');

check_g1=mean(Emkt);

%%black jensen scholes metod

Nport=10;

W=252;

B_p=nan( oor(T/W),N);

Rp=nan(T-W,Nport);

for t=1: oor(T/W)

t0=(t-1)*W+1;

t1=t*W;

t2=min((t+1)*W,T);

window_est=t0:t1;

window_port=t1+1:t2;

for j=1:N

Y=R(window_est,j)-Rf(window_est);

if not(anynan(Y))

X=horzcat(ones(W,1),Emkt(window_est));

B_temp=regress(Y,X);

end

B_p(t,j)=B_temp(2);

end

P1=prctile(B_p(t,:),[0 10:10:100]);

for k=1:Nport

Rp(window_port-W,k)=mean(R(window_port,B_p(t,:)>P1(k) & B_p(t,:) <=

P1(k+1) ),2,'omitnan');

end

end

%stima CAPM dei 10 portafogli BJS

Y_bj=Rp-Rf(W+1:end);

X_bj=Emkt(W+1:end);

B_bj=NaN(Nport,2);

ep_bj=NaN(T-W,Nport);

for k=1:Nport

capm= tlm(X_bj,Y_bj(:,k));

B_bj(k,:)=capm.Coe cients.Estimate;

ep_bj(:,k)=capm.Residuals.Raw;

end

%SML, ora possiamo farla

gure(2)

scatter(B_bj(:,2),mean(Y_bj,'omitnan'));

xlabel('\beta_{pm}');

ylabel('E(Rp-Rf');

title('SML BJS');

fi

fi fi fl fi

fl ffi

h=lsline;

set(h,'color','r');

SMKL_bj= tlm(B_bj(:,2),mean(Y_bj)');

chk_g1_bj=mean(Emkt(W+1:end));

%vediamo come con BJS siamo riusciti ad andare a far rispettare gamma0=0 e

%gamma1=Rp-Rf

%%fama e macbeth (estensione ulteriore che è stata elaborata) ci dimostra

%%come aggiungendo gamma2 e gamma3 siano =0 e che quindi ci spiega il

%%modello solamente gamma1 diverso da 0 ossia B

%14.

X_fm=horzcat(B_bj(:,2),B_bj(:,2).^2,var(ep_bj)');

Y_fm=Rp-Rf(W+1:end);

g_fm= tlm(X_fm,mean(Y_fm,'omitnan'));

c_fm=corr(X_fm);

%14.a

X_fm_14a=horzcat(B_bj(:,2),B_bj(:,2).^2);

g_fm_14a= tlm(X_fm_14a,mean(Y_fm,'omitnan'));

%14.b

X_fm_14b=horzcat(B_bj(:,2),var(ep_bj)');

g_fm= tlm(X_fm_14b,mean(Y_fm,’omitnan'));

QUARTA ESERCITAZIONE

clc

%rng(1)

%Carichiamo le serie storiche Emkt, Rf e dei fattori SMB, HML

P = readmatrix("Dataset.xlsx",'Sheet','Stock Prices','Range','B2:SJ3274');

Emkt = readmatrix("Dataset.xlsx",'Sheet','Factors','Range',

Dettagli
Publisher
A.A. 2024-2025
8 pagine
SSD Scienze economiche e statistiche SECS-P/09 Finanza aziendale

I contenuti di questa pagina costituiscono rielaborazioni personali del Publisher NicoleAnn di informazioni apprese con la frequenza delle lezioni di Finanza applicata e studio autonomo di eventuali libri di riferimento in preparazione dell'esame finale o della tesi. Non devono intendersi come materiale ufficiale dell'università Università degli Studi di Roma Tor Vergata o del prof Ciciretti Rocco.