%% ESAME METODI QUANTITATIVI PER I MERCATI FINANZIARI 24/01/2024 %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %%% DURATA: 1 ora e 30 minuti %%% Il file Matlab (script), formato m oppure mlx, %%% va salvato con aNumeroMatricola (ad esempio a051485.m oppure %%% a051485.mlx) e va caricato nella pagina che viene comunicata. %%% La votazione finale terrà conto della qualità del codice e della %%% sua chiara presentazione. %%% Controllare che il codice che si scrive non produca errori! %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% MODULO I (15 punti) % Caricare in memoria la timetable (denominata sesame) che contiene le % serie storiche delle importazioni mensili di semi di sesamo dall'India e % dal Pakistan tramite l'istruzione load TTsesame.mat load TTsesame.mat % La descrizione del dataset è riportata di seguito: % Monthly time series of quantities (in Kg) of sesame seeds imported % from India (first column) and from Pakistan (second column) into the EU. % The observed period goes from February 2020 to September 2022. % % Rappresentare le due serie storiche in due pannelli orizzontali in modo % tale che se si fa click con il mouse in un qualsiasi punto all'interno % del grafico, appare automaticamente una linea verticale che consente di % visualizzare il valore delle due serie storiche in corrispondenza % dell'istante temporale selezionato. % Utilizzare come stile di linea "Dashed line" (punti 5) stackedplot(sesame,'LineStyle',"--") % Calcolare in una timetable denominata con le prime 3 lettere del proprio % cognome la media delle importazioni annuali di semi di sesamo per le due % serie storiche. Mostrare la timetable nella command window (punti 5) RIA=retime(sesame,"yearly",'mean'); disp('Medie annuali') disp(RIA) % Partendo dalla timetable sesame estrarre tutti i record che si riferiscono % alle importazioni nei mesi di marzo, aprile e maggio dell'intervallo di % anni 2020-2021. % Mostrare l'output nella Command Window (punti 5) anni=sesame.Properties.RowTimes.Year==2020 | sesame.Properties.RowTimes.Year==2021; mesi=sesame.Properties.RowTimes.Month>=3 & sesame.Properties.RowTimes.Month<=5; disp('Importazioni mensili mesi mar, apr e mag anni 2020-2021') disp(sesame(anni & mesi,:)) %% MODULO II (15 punti) %% ESERCIZIO 1 (4 punti) % Si supponga che sul mercato finanziario vi siano due titoli rischiosi. % Il primo titolo ha un rendimento atteso del 4%, mentre il secondo un % rendimento atteso del 5%. Supponendo di comprare 100 azioni del titolo 1 % che al momento hanno una quotazione di 10 euro e di comprare 50 azioni % del titolo 2 che al momento hanno una quotazione di 40 euro, calcolare % il rendimento atteso del portafogli, soggetto al vincolo di bilancio. % Si assuma inoltre che la deviazione standard dei rendimenti del primo % titolo è del 10%, mentre quella del secondo titolo del 15%. Se il % coefficiente di correlazione è del 30%, si calcoli la deviazione standard % del portafogli. % Soluzione A_1 = 100*10; % l'ammontare investito nel primo titolo A_2 = 50*40; % l'ammontare investito nel secondo titolo x_1 = A_1/sum(A_1+A_2);% il peso del primo titolo x_2 = A_2/sum(A_1+A_2);% il peso del secondo titolo x = [x_1 x_2]; % il vettore dei pesi mu_1 = 4/100; % il rendimento atteso del primo titolo mu_2 = 5/100; % il rendimento atteso del secondo titolo sigma_1 = 10/100; % la deviazione standard del primo titolo sigma_2 = 15/100; % la deviazione standard del secondo titolo rho_12 = 30/100; % il coefficiente di correlazione tra i due titoli mu = [mu_1 mu_2]; % il vettore dei rendimenti attesi V = [sigma_1^2 sigma_1*sigma_2*rho_12;sigma_1*sigma_2*rho_12 sigma_2^2]; % la matrice di varianza-covarianza mu_p = mu*x'; % il rendimento atteso del portafogli dev_p = sqrt(x*V*x'); % la deviazione standard del portafogli %% ESERCIZIO 2 (6 punti) % Si consideri adesso un portafogli composto dai due titoli del punto % precedente. Supponendo che i pesi del primo titolo si possano ricavare % dalla sequenza: 0, 0.05, 0.1, 0.15,...,1 e che il vincolo di bilancio sia % di nuovo rispettato, si crei un ciclo loop per calcolare la deviazione % standard e il rendimento atteso del portafogli per ogni possibile % combinazione. Si faccia il grafico nello spazio rischio-rendimento dei % portafogli ottenuti e si aggiunga anche il portafogli calcolato al punto % precedente. % Soluzione xnew_1 = 0:0.05:1; % i pesi del primo titolo xnew = [xnew_1; (1-xnew_1)];% il vettore dei pesi devnew_p = zeros(1,length(xnew_1)); % prealloca la deviazione standard dei portafogli munew_p = zeros(1,length(xnew_1)); % prealloca il vettore dei rendimenti attesi dei portafogli for i = 1:length(xnew_1) devnew_p(i) = sqrt(xnew(:,i)'*V*xnew(:,i)); % la deviazione standard del rendimento di ciascun portafogli munew_p(i) = xnew(:,i)'*mu'; % il rendimento atteso del rendimento di ciascun portafogli end %% effettua il plotting della deviazione standard e del rendimento atteso dei % portafogli generati precedentemente figure('Name', 'Portafogli aleatori'); % il grafico viene disegnato in una nuova finestra scatter(devnew_p,munew_p, 'MarkerEdgeColor',[0 .5 .5],... 'MarkerFaceColor',[0 .7 .7],... 'LineWidth',1.5); % il grafico a dispersione xlabel('Rischio (std)'); % il titolo dell'asse x ylabel('Valore atteso'); % il titolo dell'asse y title('Rischio-Rendimento'); % il titolo del grafico hold on; % aggiungi grafici al grafico esistente scatter(dev_p,mu_p,50, 'k', 'filled');% mostra anche il portafogli precedente legend('Portafogli Aleatori con solo titoli rischiosi', ... 'Portafogli del punto precedente', 'Location','northwest'); % aggiungi legenda al grafico hold off; % interrompe la sovrapposizione di grafici %% ESERCIZIO 3 (5 punti) % Supponete che sul mercato ci sia anche un altro titolo con rendimento atteso % pari all'1% e varianza dei rendimenti uguale a zero. Si calcoli la frontiera % efficiente con tre titoli supponendo che il vincolo di bilancio sia di % nuovo valido. % Soluzione % calcola la frontiera efficiente con due titoli rischiosi e uno non-rischioso options = optimoptions('fmincon','Display', 'notify'); % visualizza l'output della funzione fmnicon solo se la funzione non converge rf = 1/100;% il rendimento del terzo titolo (è un titolo non-rischioso!!) n = 2; % il numero dei titoli rischiosi numberp = 100; % il numero dei punti della frontiera efficiente murf_p = linspace(rf,max(mu),numberp); % i rendimenti attesi desiderati sigmarf_p = ones(numberp,1); % prealloca la deviazione standard dei portafogli valore_iniziale = ones(n,1)/n;% imposta i valori di ipotesi/partenza for i=1:numberp %%% per ciascun rendimento atteso murf_p calcola %%% la deviazione standard del portafogli utilizzando la funzione fmincon [~, fval] = fmincon(@(x) sqrt(x'*V*x), ...% la funzione da minimizzare valore_iniziale, ... % imposta i valori di ipotesi/partenza [], [], ... % nessun vincolo di disuguaglianza mu-rf*ones(1,n), ... % il termine Aeq -> vincolo di uguaglianza Aeq*x=beq murf_p(i)-rf, ... % il termine beq -> vincolo di uguaglianza Aeq*x=beq [],[],[], options); % non ci sono altri vincoli sigmarf_p(i) = fval; % memorizza la deviazione standard corrispondente end %% effettua il plotting della frontiera efficiente richiesta figure('Name', 'Frontiera Efficiente con un titolo non rischioso'); % il grafico viene disegnato in una nuova finestra plot(sigmarf_p, murf_p); % plotta la frontiera efficiente con il titolo non-rischioso incluso title('Frontiera Efficiente con un titolo non rischioso'); % aggiungi un titolo al grafico xlabel('Rischio (std)'); % il titolo dell'asse x ylabel('Valore atteso'); % il titolo dell'asse y