%% ESAME METODI QUANTITATIVI PER I MERCATI FINANZIARI 21/05/2024 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% DURATA: 1 ora e 30 minuti %%% Il file Matlab (script), formato m oppure mlx, %%% va salvato con il vostro nome e cognome e va %%% caricato nella pagina che viene comunicata. %%% La votazione finale terrà conto della qualità del codice e della %%% sua chiara presentazione. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % Caricare in memoria la serie storica in formato array denominata % daticc tramite l'istruzione load daticc.mat % daticc(1) si riferisce al primo di gennaio 2018. % daticc(2) si riferisce al primo di febbraio 2018... % Creare la timetable corrispondente e denominarla con le prime 3 % lettere del proprio cognome % (punti 3) % % Calcolare la serie storica delle medie mobili con il metodo del livellamento % esponenziale utilizzando k=3; (punti 5) % Confrontare l'implementazione manuale e quella automatica. (punti 3) % Controllare l'uguaglianza delle due implementazioni. (punti 1) % Aggiungere la serie delle medie mobili come seconda colonna della timetable % Tramite funzione stackedplot rappresentare le due serie storiche % (punti 3) load daticc.mat RIA=array2timetable(daticc,"StartTime",datetime(2022,1,1),"TimeStep",calmonths); k1=3; T=length(daticc); mm=zeros(T,1); mm(1)=daticc(1); alpha1=2/(k1+1); for i=2:T mm(i,1)=(1-alpha1)*mm(i-1,1)+alpha1*daticc(i); end %% Media mobile esponenziale implementazione automatica mmAUTO= movavg(daticc,'exponential',k1); %% Confrontare l'implementazione manuale e quella automatica. (punti 6) assert(max(abs(mm-mmAUTO),[],'all')<1e-10,"Wrong implementation") %% Aggiungere la serie delle medie mobili come seconda colonna della timetable RIA.mm=mm; %% Tramite funzione stackedplot rappresentare le due serie storiche stackedplot(RIA) %% MODULO II (15 punti) %% ESERCIZIO 1 (4 punti) % Si supponga che sul mercato finanziario vi siano due titoli rischiosi (A % e B) con rendimenti attesi pari a mu_A=10%, mu_B=5% e varianze V_A=0.05 e % V_B=0.03. Si supponga inoltre di investire il 40% della ricchezza totale nel % titolo A e il 60% nel titolo B. Si calcoli il rendimento atteso del % portafogli e si scrivi un "ciclo for" per calcolare la deviazione standard % dei rendimenti del portafogli assumendo che il coefficiente di correlazione % sia pari a -1, 0 e 1. %% Soluzione x_A = 60/100; % il peso del primo titolo x_B = 1-x_A; % il peso del secondo titolo x = [x_A x_B]; % il vettore dei pesi mu_A = 10/100; % il rendimento atteso del primo titolo mu_B = 5/100; % il rendimento atteso del secondo titolo V_A = 0.05; % la varianza del primo titolo V_B = 0.03; % la varianza del secondo titolo mu = [mu_A mu_B]; % il vettore dei rendimenti attesi mu_p = mu*x'; % il rendimento atteso del portafogli % il ciclo for per calcolare la deviazione standard dei rendimenti del portafogli rho = -1:1:1; % il vettore contenente i coefficienti di correlazione % prealloca la deviazione standard dei portafogli Dev_p = zeros(1,length(rho)); for i = 1:length(rho) % la deviazione standard dei rendimenti del portafogli Dev_p(i) = sqrt(x_A^2*V_A+x_B^2*V_B+2*x_A*x_B*rho(i)*sqrt(V_A)*sqrt(V_B)); end %% ESERCIZIO 2 (6 punti) % Si generino 1000 numeri casuali provenienti da una distribuzione % normale con media paria a -1 e deviazione standard pari a 1. % Si calcoli poi il VaR (utilizzando il metodo storico) con un livello di % confidenza del 90%, 92%, e 96%. Si visualizzi alla fine l'istogramma % delle densità dei dati (moltiplicando i dati per meno uno) e si aggiunga % allo stesso grafico i valori dei VaR calcolati precedentemente. %% Soluzione number = 1000; % numeri casuali da generare mu_n = -1; % media sigma_n = 1; % deviazione standard rstat = mu_n+sigma_n*randn(number,1);% genera "number" numeri da una distribuzione % normale con parametri -1 e 1 % (1-epsilon) livelli di confidenza epsilon_1 = 90/100; % livello di confidenza 1 epsilon_2 = 92/100; % livello di confidenza 2 epsilon_3 = 96/100; % livello di confidenza 3 epsilon = [1-epsilon_1 1-epsilon_2 1-epsilon_3]; y1 = sort(rstat); % ordina la distribuzione dei dati if rem((epsilon).*number,1) == 0 Nepsilon = (epsilon).*number; Quantile = (y1(Nepsilon) +y1(Nepsilon+1))/2; else Nepsilon1 = round((epsilon).*number); Quantile = (y1(Nepsilon1)); end VaR_rstat = -Quantile; % VaR storico dei dati % Grafici Nnew=histogram(-y1); Nnew.Normalization='pdf'; % l'istogramma delle densità Nnew.FaceColor='b'; % fissa il colore hold on; % aggiungi grafici al grafico esistente % aggiungi i valori dei VaR h(1)=line([VaR_rstat(1) VaR_rstat(1)],[0 max(Nnew.Values)],'Color','k','LineWidth',3); h(2)=line([VaR_rstat(2) VaR_rstat(2)],[0 max(Nnew.Values)],'Color','r','LineWidth',3,'LineStyle','--'); h(3)=line([VaR_rstat(3) VaR_rstat(3)],[0 max(Nnew.Values)],'Color','g','LineWidth',3,'LineStyle','-.'); % aggiungi legenda legend(h, num2str(epsilon(1)), num2str(epsilon(2)),num2str(epsilon(3))); title('L''istogramma delle densità'); % aggiungi titolo xlabel('Dati'); % aggiungi l'etichetta all'asse x ylabel('Funzione di densità di probabilità');% aggiungi l'etichetta all'asse y hold off; % interrompi la sovrapposizione di grafici %% ESERCIZIO 3 (5 punti) % Si consideri un mercato con solo due titoli aventi le stesse statistiche % del primo esercizio. Si assuma inoltre che il coefficiente di correlazione % sia pari a uno. Supponendo l'esistenza del vincolo di bilancio e che le vendite % allo scoperto non siano permesse, si determini il portafogli efficiente con % un rendimento atteso pari all'8%. Si registri anche la deviazione standard % di questo portafogli. %% Soluzione options = optimoptions('fmincon','Display', 'notify'); % visualizza l'output della funzione fmnicon solo se la funzione non converge % il portafogli richiesto n = 2; % numero di titoli rho_AB = 1; % il coefficiente di correlazione % matrice di covarianza V = [V_A sqrt(V_A)*sqrt(V_B)*rho_AB; sqrt(V_A)*sqrt(V_B)*rho_AB V_B]; k = 8/100; % il livello di rendimento atteso desiderato [X, fvalmin] = fmincon(@(x) sqrt(x'*V*x), ... % la funzione da minimizzare ones(n,1)/n, ... % imposta i valori di ipotesi/partenza [], [], ... % il vincolo di disuguaglianza A*x<=b [ones(1,n); mu], [1,k], ... % i vincoli di uguaglianza Aeq*x=beq zeros(n, 1), [],[], options); % limite inferiore sui pesi x sigma_p=sqrt(X'*V*X); % la deviazione standard