%% ESAME METODI QUANTITATIVI PER I MERCATI FINANZIARI 12/12/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. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% %% MODULO I (15 punti) % Generare una matrice di dati di dimensione 200x4 denominata X (4 % variabili X1, X2, X3 e X4) con le seguenti caratteristiche. Correlazione % tra X1 ed X2 inversa molto elevata (vicina a -0.9). X1 e X3 con % correlazione vicino a zero. Correlazione diretta molto elevata tra X1 e % X4 (vicino a 0.8). Per la replicabilità dei risultati utilizzare il seed % 100 e la distribuzione T di Student con 10 gradi di libertà. (punti 5) % rng(100) n=200; p=4; X=zeros(n,p); X(:,1)=trnd(10,n,1); sigma1=1.05; % tanto più grande è sigma1 tanto più la correlazione diminuisce % Il valore di sigma1 è trovato facendo diversi tentativi X(:,2)=-2*X(:,1)+sigma1*trnd(10,n,1); X(:,3)=trnd(10,n,1); X(:,4)=2*X(:,1)+1.55*trnd(10,n,1); % Calcolare la matrice di correlazione e mostrarla nella Command Window % per verificare che le 4 variabili presentino le correlazioni richieste e % mostrare la matrice dei diagrammi di dispersione. % (punti 2) % R=corr(X); disp('Matrice di correlazione') disp(R); spmplot(X); % Caricare in memoria il dataset citiesItaly. % Calcolare il primo decile di tutte le variabili. % Mostrare la table che contiene il primo decile per tutte le variabili % nella Command Window % (punti 2) load citiesItaly.mat; quan=quantile(citiesItaly{:,:},0.1); quanT=array2table(quan,"RowNames","X0.1","VariableNames",citiesItaly.Properties.VariableNames); disp(quanT) % Commentare il primo decile per la variabile unemploy (punti 2) % Il 10% delle province presenta un valore di disoccupazione inferiore al % primo decile (3.02) ed il rimanente 90 per cento un valore superiore % % Estrarre in una nuova table tutti i record in cui il nome della provincia % inizia con le lettere nell'intervallo A-M (estremi compresi). % Denominare questa nuova table con le prime 3 lettere del proprio cognome. % (punti 4) nomi=citiesItaly.Properties.RowNames; pat=characterListPattern('A','M'); RIA=citiesItaly(startsWith(nomi,pat),:); %% ESERCIZIO 1 (6 punti) % Importare i dati contenuti nei file "mu.mat" e "V.mat", % creando due matrici "mu" e "V". In questi file sono riportati i rendimenti % attesi di tre titoli e la loro matrice delle varianze-covarianze. % Trovare e registrare utilizzando la funzione "quadprog" di Matlab i pesi, il rendimento atteso % e la deviazione standard del portafoglio con la varianza minima supponendo % l'esistenza dei seguenti vincoli: il vincolo di bilancio, -2*x_1 +x_2=>-x_3, "0<=x_1<=0.5", % "0<=x_2<=0.8", "0<=x_3<=0.4", dove x_1, x_2 e x_3 sono, rispettivamente, i pesi del titolo 1, 2 e 3. %% Soluzione load('mu.mat'); % caricare i dati load('V.mat'); % caricare i dati mu = table2array(mu); V = table2array(V); options = optimoptions('quadprog','Display','off'); % ulteriori opzioni n = length(mu); % il numero dei titoli H = 2*V; f = zeros(n,1); [Xmin, fvalmin] = quadprog(H, f, ... % la funzione da minimizzare [2 -1 -1], 0, ... % il vincolo di disuguaglianza ones(1,n), 1,... % il vincolo di uguaglianza [0 0 0], [0.5 0.8 0.4], [], options); % i limiti inferiori e superiori sui pesi x % calcola il rendimento atteso e la deviazione standard del portafogli di % minima varianza mu_min=Xmin'*mu'; std_min=sqrt(fvalmin); formatSpec = 'il rendimento atteso del portafoglio di minima varianza è uguale a %6.4f \n'; fprintf(formatSpec,mu_min); % mostra il rendimento atteso %% ESERCIZIO 2 (5 punti) % Supponendo l'esistenza degli stessi vincoli del punto precedente, si % determinino e si registrino utilizzando di nuovo la funzione "quadprog" le % deviazioni standard dei portafogli efficienti che hanno un rendimento atteso % uguale a 0.01% e 0.07%. %% Soluzione k =[0.01/100 0.07/100]; % i rendimenti attesi desiderati sigma_p = ones(length(k),1); % prealloca la deviazione standard dei portafogli for i=1:2 %%% per ciascun rendimento atteso k calcola %%% la deviazione standard del portafoglio utilizzando la funzione %%% quadprog [~, fval] = quadprog(H,f, ... % la funzione da minimizzare [2 -1 -1], 0, ... % il vincolo di disuguaglianza [ones(1,n); mu], ... % termine Aeq -> vincolo di uguaglianza Aeq*x=beq [1; k(i)], ... % termine beq -> vincolo di uguaglianza Aeq*x=beq [0 0 0], [0.5 0.8 0.4],[],options); % i limiti inferiori e superiori sui pesi x sigma_p(i) = sqrt(fval); % memorizza la deviazione standard corrispondente end %% ESERCIZIO 3 (4 punti) % Si supponga adesso che il tasso privo di rischio sia pari a 0.0002. Si % determini l'indice di Sharpe per i seguenti portafogli: % Portafoglio 1 Portafoglio 2 % Titolo Quota % Quota % % A 10 15 % B 40 25 % C 50 60 % Si commentino i risultati ottenuti. % Portafoglio 1 rf = 0.0002; % il tasso privo di rischio X_1 = [10/100 40/100 50/100]; % pesi del portafoglio mu_1 = X_1*mu'; % il suo rendimento atteso var_1 = X_1*V*X_1'; % la sua varianza SR_1 = (mu_1-rf)/sqrt(var_1); % l'indice di Sharpe formatSpec = 'l''indice di Sharpe del portafoglio 1 è pari a %6.4f\n'; fprintf(formatSpec, SR_1); % Portafoglio 2 X_2 = [15/100 25/100 60/100]; % pesi del portafoglio mu_2 = X_2*mu'; % il suo rendimento atteso var_3 = X_2*V*X_2'; % la sua varianza SR_2 = (mu_2-rf)/sqrt(X_2*V*X_2'); % l'indice di Sharpe formatSpec = 'l''indice di Sharpe del portafoglio 2 è pari a %6.4f\n'; fprintf(formatSpec, SR_2); % In base all'indice di Sharpe, il primo portafoglio risulta migliore in termini % di rapporto rischio/rendimento.