5-Return Based Style Analysis PDF

Title 5-Return Based Style Analysis
Author Luca Zaffaina
Course Matematica finanziaria
Institution Università degli Studi di Trento
Pages 7
File Size 344.1 KB
File Type PDF
Total Downloads 590
Total Views 786

Summary

clear all; close all; %load data file load StyleAnalysisData2 %dataset che contiene: % FactorNames 1x8 2316 cell % Nomi dei fattori utilizzati % Factor_returns 60x8 3840 double % Rendimenti dei fattori % FundsNames 1x1 278 cell % Nomi dei fondi (uno in questo caso) % Funds_returns 60x1 480 double % ...


Description

clear all; close all; %load data file load StyleAnalysisData2.mat %dataset che contiene: % FactorNames 1x8 2316 cell % Nomi dei fattori utilizzati % Factor_returns 60x8 3840 double % Rendimenti dei fattori % FundsNames 1x1 278 cell % Nomi dei fondi (uno in questo caso) % Funds_returns 60x1 480 double % Rendimenti del fondo Numero di osservazioni per riga e in colonna i % diversi fattori % Period 60x1 480 double % Periodo considerato con le singole date in colonna fund_eq=Funds_returns(:,1); % tutte le righe prima colonna -> serie % storica del fondo (Prime Italy), se voglio cambiare fondo modifico la % colonna -> inserisco questo fondo in fund_eq sharpe_factors=Factor_returns(:,:); % inserisco tutta la serie storica dei % rendimenti dei fattori (posso modificare i ":" e inserire quelli che % voglio nel caso volessi modificare. % Calcolo la matrice delle osservazioni -> per fare l'analisi di Sharpe % devo avere che le osservazioni sono simultanee. [NOBS,NFunds]=size(fund_eq); % qui vedo il numero di osservazioni del fondo % (lunghezza serie storica) % controllo se i dati sono giusti ovvero che poi sotto con ciclo if % controllo se il numero di osservazioni -> quindi la lunghezza della serie % storica del fondo è uguale alla lunghezza della serie storica dei fattori [NOBS_IND,NFactors]=size(sharpe_factors); % numero di osservazioni dei % fattori (lunghezza serie storica)

%Select Sharpe's factors sel_indexes=[1:1:NFactors]; % metti tutti i valori da 1 al numero dei fattori % con passo 1 -> seleziona solo quei fattori (tutti) sharpe_factors=Factor_returns(:,sel_indexes); %matrice di tutte le righe, % seleziona gli indici (da 1 a 8) SelIndexesNames=FactorNames(sel_indexes); % salvo i nomi degli indici selezionati [NOBS_IND,NINDEXES]=size(sharpe_factors); % fornisce la dimensione di sharp_factors % Calcolo la matrice delle correlazioni CorrMat=corrcoef(sharpe_factors) % uguale a farla in Excel -> simmetrica CorrMat = 8×8 1.0000 0.7114 0.5663 0.3923 0.5652 0.2283 0.3408 0.1252

0.7114 1.0000 0.8137 0.6346 0.7447 0.0579 0.4792 0.0992

0.5663 0.8137 1.0000 0.6895 0.7708 0.1281 0.6726 0.0847

0.3923 0.6346 0.6895 1.0000 0.7240 0.0020 0.6088 -0.1572

0.5652 0.7447 0.7708 0.7240 1.0000 -0.0521 0.4022 -0.0226

0.2283 0.0579 0.1281 0.0020 -0.0521 1.0000 0.1974 0.2897

1

0.3408 0.4792 0.6726 0.6088 0.4022 0.1974 1.0000 -0.1038

0.1252 0.0992 0.0847 -0.1572 -0.0226 0.2897 -0.1038 1.0000

% controllo se il numero di osservazioni per i fattori è uguale a quello del % fondo se così non è mostrami l'errore if NOBS_IND ~=NOBS fprintf('ERROR: The number of obs of the funds and of the indexes is not the same'); end % se viene stampato l'errore allora fondo e fattori hanno dimensione % diversa

Stima Modello sull'Intero periodo (SHARPE ANALISI STRONG)

beta_whole = 8×1 0.8279 0.1721 0.0000 0.0000 0.0000 0.0000 0.0000 0.0000 RSS = 0.0576 error = 60×1 0.0147 -0.0083 0.0046 0.0517 -0.0182 0.0078 -0.0307 0.0047 0.0178 -0.0175

type=3; % analisi strong (type=2 semistrong; type=1 weak) % type 1 - weak: no vincoli (utilizzo regressione semplice per la stima % type 2 - semistrong: tutti i beta >= 0 (ma che non sommano a 1). % type 3 - strong: tutti i beta >= 0; somma dei bata = 1 [beta_whole ,RSS, error, rsq, var_e, StyleComponent] = style_sharpe ... (fund_eq, sharpe_factors, type)

rsq = 0.8327 var_e = 9.6641e-04 StyleComponent = 0.8225

% Qui inserisco l'intera serie storica dei rendimenti % i "..." mi permettono di scrivere sotto % % % % % % % % % % % % %

FUNZIONE "style_sharpe" INPUT y = (vector numero osservazioni x 1 ): serie temporale del fondo. X = (matrice numero osservazioni x numero indici): matrice degli indici da usare nel Sharpe's model type (scalare 1x1): specifies which Sharpe model will be used type = 1 se Weak style analysis; type = 2 Semi-strong style analysis (solo beta non negativi >= 1 non c'è vincolo con beta a somma 1); type = 3 Strong style analysis OUTPUT b = vector of weights for the Sharpe model (beta) RSS = scalar: regression sum of squares (residual sum of squares) e = vector (num_observations x 1): vettore degli errori 2

% rsq = scalar: R-square statistic % var_e = vector (num_observations x 1): vettore di varianza degli errori % StyleComponent (scalar): Componente di Stile (R^2) % "beta_whole" mi da tutti i valori dei beta e per trovare i nomi dei % diversi beta devo fare "FactcorNames" % posso fare i grafici a torta e a barre figure() labels = {'Style','Selection'}; pie([StyleComponent, 1- StyleComponent],labels) % grafico a torta

figure() bar(beta_whole) % grafico a barre plotta l'esposizione rispetto ai

3

% differenti fattori quindi i beta dei diversi fattori

Rolling Style Analysis beta=[]; RSS=[]; e=[]; rsq=[];beta1=[]; %Define WindowSize WindowSize=40; %lunghezza della finestra temporale -> % Maggiore è la finestra temporale e più le stime dei beta saranno lisce % nel grafico finale. Io vorrei vedere transizioni abbastanza stabili (per questo % uso 40). Ma più aumento più assumo la finestra e più assumo una ipotesi % di costanza dei pesi su un arco temporale più lungo, in questo caso % più aumento la WindowSize e meno finestra ho out-of-sample per valutare la % performance (c'è trade off) for i=1:NOBS-WindowSize [beta1(:,i) ,RSS(i,1), e(:,i),rsq(i,1),var_e(i,1),StyleComponent(i,1)]= ... style_sharpe(fund_eq(i:i+WindowSize-1),sharpe_factors(i:i+WindowSize-1,:),type); % La funzione style_sharpe prende come input il vettore di y, la matrice % dei fattori e la tipologia di analisi. Se voglio fare l'analisi rolling % prendo subito una determinata finestra di y e la corrispondente finestra % di x. Poi voglio che questa finestra cambi scartando l'oss. più vecchia % e aggiungere la più nuovo. Quindi voglio che gli input dipendano dal % ciclo "i". Se i=1 voglio che gli input di fund_eq vadano per le righe % da 1 a 40-1, per colonna prende tutti i fattori (:); la seconda finestra % andrà da 2 a 41-1. La stessa cosa accade per gli sharpe_factors che sono % una matrice (riga ho la dim.temporale, per colonna ho i fattori), % prendo tutti i fattori e come righe prende i+WS-1.

4

% Iterativamente nell'ultimo valore di i=NOBS-WS ho quindi che prende da i % che è uguale a NOBS-WS a i+WS-1 quindi a NOBS-WS+WS-1 quindi scarto l'ultima % osservazione che voglio tenere per l'out-of-sample per valutare la performance. % salvo i beta come matrice riga. % Immagazzino in due vettori colonna l'out of sample: % Se nella prima finestra l'in-sample va da 1 a 40 % l'out of sample sarà l'osservazione 40+1. Nell'ultima finestra, l'ultima % osservazione sarà NOBS + WS - WS quindi l'ultima osservazione del vettore. Outsample_RBSABenchmark(i,1)=beta(i,:)*sharpe_factors(i+WindowSize,:)'; % qui beta è un vettore riga, sharpe_factors sarebbe anch'esso un vettore % colonna quindi ho il " ' " alla fine per prendere il trasposto. % Lo scalare che ottengo lo immagazzino nella variabile "i,1" quindi % out-of-sample avranno la stessa dimensione 20x1 (finestra di 40 ha 20 % out-of-sample). Outsample_FundReturn(i,1)=fund_eq(i+WindowSize); % valore del fondo nel primo % momento out-of-sample. TE(i,1)=Outsample_FundReturn(i,1)-Outsample_RBSABenchmark(i,1); % TE = Tracking error. TE avrà la stessa dimensione di i -> se i = 20, sarà 20. % quindi 20 x 1 se ho un totale di 60 osservazioni. end % % % %

Se voglio confrontare i beta trovati con l'analisi rolling in EXCEL, devo guardare alla dimensione di beta che è un 36x8; dove 36 è il numero di finestre temporali se faccio con WS=40 ho beta 20x8, ora devo guardare alle prime 12 finestre (che sono quelle che ho in EXCEL).

Compute TE, TEV, IR and perform HP test for active management TE_mean=mean(TE); % Average Tracking Error (con finestra pari a 24.) % Questo valore è statisticamente diverso da zero? Calcolo TEV (tracking % error volatility), IR e così trovo la statistica t TEV=std(TE); % Tracking Error Volatility IR=mean(TE)/TEV; % Informatio Ratio tStat=sqrt(length(TE)-1)*IR; % t-Ratio dove leght(TE)-1 è n-1 nella formula SL=0.05; % SL = alfa = 5% = livello di significatività. % Qui sotto: faccio il % Se il valore assoluto della statistica test è maggiore del valore dell'inversa % dove calcolo il valore del t-critico dove l'area a destra è alfa/2 % ho quindi un valore più estremo. Se questo è vero allora rifiuto l'ipotesi % nulla di H0 per cui non vi è alcun contributo dalla potenziale gestione % attiva o da uno scostamento di investimento pari al benchmark di sharpe; % altrimenti non rifiuto H0 e quindi ipotizzo che la media si uguale a 0. % Length (TE) è il numero di finestre = numero di osservazioni del tracking error % devo considerare su quante osservazioni calcolo il TE meadio, so che % calcolo il TE una volta per finestra. % La finestra out of sample con 24 osservazioni in-sample sarà 60-24. % length(TE)-1 è il numero di gradi di libertà % tinv è il t critico in corrispondenza di 0,975 con 35 gdl. if abs(tStat)>tinv(1-SL/2,length(TE)-1) disp('REJECT H0:TE_mean is not equal to 0')

5

else disp('DO NOT REJECT H0:TE_mean is equal to 0') end DO NOT REJECT H0:TE_mean is equal to 0

% % % % % % % % % % %

Questo potrebbe questo essere un incidatore di una possibile gestione attiva/passiva anche se può essere che il fondo faccia gestione attiva ma non riesca a sovraperformare il benchmark quindi questo test mi dice che può non esserci contributo da una gestione attiva o uno scostamento di investimento pari al benchmark di sharpe. per avere gestione attiva mi aspetto: selezione alta quindi R2 basso; di avere componente di cash elevata; poi potrei fare un test sullo scostamento del benchmark di sharpe come questo. Questo test non differenzia gestione attiva o passiva ma può essere utile se tutto il resto è coerente. Perchè potrei avere gestione attiva ma non battere il benchmark.

figure() area(beta) legend(FactorNames)

6

SPIEGAZIONE MOLTIPLICAZIONE TRA BETA E TRASPOSTO in “launch_PaterliniSandra.m” Parte di spiegazione dentro il ciclo for (riferita alla moltiplicazione: Outsample_RBSABenchmark(i,1)=beta(i,:)*sharpe_factors(i+WindowSize,:)';

TEST T – MATLAB “COMPUTE TE, TEV, IR AND PERFORM HP TEST FOR ACTIVE MANAGEMENT” in “launch_PaterliniSandra.m” Questo è un test t con n-1 gdl sulla media, testo l’ipotesi nulla che il tracking error medio della popolazioen è uguale a 0, contro l’alternativa che sia diverso da 0. Facendo tutti i passaggi risulta che la statistica test è uguale a radice di (n-1) moltiplicato per l’information ratio (IR)....


Similar Free PDFs