%% Testo % Il vettore di seguito contiene l'andamento del prezzo di un titolo % in 11 quadrimestri consecutivi a partire dal primo quadrimestre del 2019. % % 6.015 6.166 6.255 6.268 6.165 6.395 6.419 6.325 6.359 6.218 6.024; % % Calcolare (come vettori colonna): % % 1) la serie a_t dei rendimenti assoluti; % % 2) la serie s_t dei rendimenti netti; % % 3) la serie dei rendimenti lordi; % % 4) la serie r_t dei rendimenti (logaritmici); % % 5) Tracciare il grafico con le due serie dei rendimenti netti e dei % rendimenti logaritmici. Discutere il grafico. % % 6) la serie dei rendimenti netti annuali s_t(3); % % 7) la serie dei rendimenti logaritmici annuali r_t(3); % % 8) Inserire le 7 serie in esame prima in un array, poi in una table ed % infine in una timetable. % % 9) Mostrare il grafico di tutte le serie della timetable tramite lo stackedplot % % 10) Calcolare le serie r_t e s_t tramite la funzione tick2ret % Controllare tramite istruzione if che le serie r_t e s_t calcolate % tramite tick2ret siano uguali a quelle calcolare manualmente in % precedenza. %% Soluzione x=[6.015 6.166 6.255 6.268 6.165 6.395 6.419 6.325 6.359 6.218 6.024]'; T=length(x); % pt= serie dei prezzi da p_2 fino a p_T pt=x(2:end); % ptminus1= serie dei prezzi da p_1 fino a p_{T-1} ptminus1=x(1:end-1); % at = serie dei rendimenti assoluti at=pt-ptminus1; % st = serie dei rendimenti netti; st=pt./ptminus1-1; % stplus1 = serie dei rendimenti lordi stplus1=st+1; % rt = serie dei rendimenti logaritmici rt=log(pt./ptminus1); %% Grafico di s_t e r_t % 5) Tracciare il grafico con le due serie dei rendimenti netti e dei % rendimenti logaritmici tempo=(2:T)'; plot(tempo,st,'b-',tempo,rt,'r--','LineWidth',2) legend({'$s_t$' '$r_t$'},'Interpreter','latex','FontSize',16) title('Confronto tra $s_t$ e $r_t$','Interpreter','latex','FontSize',16) xlabel('Instanti di osservazione') %% Risoluzioni punti 6 e 7 % 6) la serie dei rendimenti netti annuali s_t(3) % 7) la serie dei rendimenti logaritmici annuali r_t(3) % Faccio le aggregazioni annuali per i rendimenti netti s_t(3) ed i % rendimenti logaritmici r_t(3) rt3=nan(T,1); st3=rt3; % La serie storica è quadrimestrale di conseguenza si deve aggregare tre % osservazioni (3 quadrimestri). Quindi, i primi 3 valori (ossia i dati dei % rendimenti dei primi tre quadrimestri) vanno a formare il dato % complessivo aggregato per l'osservazione 4. % In altri termini se sono al tempo i=4 devo aggregare le osservazioni 1:3 % ossia devo aggregare i rendimenti da i-3 a i-1. for i=4:T rt3(i)=sum(rt(i-3:i-1)); st3(i)=prod(stplus1(i-3:i-1))-1; end %% Costruzione array Y=[pt at st stplus1 rt st3(2:end) rt3(2:end)]; varnames=["pt" "at" "st=simple net return" "simple gross return" ... "rt=rendimento logaritmico" "stannuale" "rtannuale"]; % Aggiungo la riga riferito al primo prezzo primariga=[x(1) NaN(1,6)]; % Aggiungo il vettore primariga all'array Y=[primariga;Y]; %% Costruzione della table Ytable=array2table(Y,"VariableNames",varnames); %% Costruzione della timetable datainizio=datetime('2019-01-1'); cadenzaRilevazione=calmonths(4); Ytimetable=table2timetable(Ytable,"StartTime",datainizio,"TimeStep",cadenzaRilevazione); %% Mostrare il grafico di tutte le serie in esame tramite stackedplot stackedplot(Ytimetable) %% Calcolo in automatico dei simple returns s_t tramite la funzione tick2ret stauto = tick2ret(Ytimetable(:,1)); % Osservazione % Si poteva anche utilizzare il name pair % stauto = tick2ret(Ytimetable(:,1),'Method','Simple'); %% Confronto returns % Confronto che la serie dei returns ottenuta automaticamente sia uguale a % quella ottenuta tramite l'implementazion manuale if max(abs(stauto{:,1}-Ytimetable{2:end,3})) > 1e-15 disp('Errore nel calcolo manuale dei simple returns') end %% Calcolo in automatico dei rendimenti logaritmici tramite la funzione tick2ret rtauto = tick2ret(Ytimetable(:,1),'Method','Continuous'); %% Confronto returns % Confronto che la serie dei returns ottenuta automaticamente sia uguale a % quella ottenuta tramite l'implementazion manuale if max(abs(rtauto{:,1}-Ytimetable{2:end,5})) > 1e-15 disp('Errore nel calcolo manuale dei rendimenti logaritmici') end %% Osservazione dai rendimenti ai prezzi % Per passare dalla serie dei rendimenti a quella dei prezzi occorre % utilizzare la funzione inversa ret2tick. % Dato che per passare dai rendimenti ai prezzi avevo specificato % 'Method','Continuous' devo fare la stessa cosa con la funzione inversa. ptchk=ret2tick(rtauto,'StartPrice',Ytimetable{1,1},'Method','Continuous'); diffpteptchk=abs(ptchk{:,:}-Ytimetable{2:end,1}); assert(max(diffpteptchk)<1e-10,"La serie dei prezzi non è stata" + ... " ricostruita correttamente")