Celem niniejszego raportu jest zbudowanie i analiza równowazonego portfela inwestycyjnego. W pracy do zbudowania portfela, uzylismy niestandardowego podejscia, a mianowicie macierzy BCG, która zazwyczaj sluzy do analizy portfela produktów. Spowodowalo to, ze portfel sklada sie z akcji zarówno spólek doskonale wszystkim znanych, tj. Orange, czy Pekao; ale takze malych i innowacyjnych, jak CD_Project, czy Braster. W analizie powstalego w ten sposób portfela inwestycyjnego przeprowadzilismy oszacowania funkcji warunkowej wariancji za pomoca modeli klasy GARCH (uzyto standardowego modelu GARCH, jak tez EGARCH i GJGARCH) oraz wartosci narazonej na ryzyko w okresach in-sample oraz out-of-sample. Ostatnim elementem badania byla analiza wrazliwosci dla najlepiej dopasowanego modelu.
W niniejszym projekcie wykorzystano stosunkowo nietypowe podejscie do zagadnienia budowania portfela inwestycyjnego, poniewaz postanowilismy posluzyc sie macierza Boston Consulting Group. Macierz BCG jest zazwyczaj uzywana do analizy portfela produktów, jednak po pewnych modyfikacjach mozna poczynic próby wykorzystania jej w dywersyfikacji portfela inwestycyjnego. Istota macierzy BCG polega na podziale produktów (zas w niniejszym projekcie wybranych instrumentów) na cztery grupy: dojne krowy, gwiazdy, znaki zapytania i psy. W przyblizeniu udzial poszczególnych grup w calym portfelu powinien wynosic: 40-50% dla dojnych krów, 30% dla gwiazd, 10%-20% dla znaków zapytania oraz maksymalnie do 10% dla psów. Poszczególne kategorie w odniesieniu do spólek i ich notowan powinny charakteryzowac sie nastepujacymi charakterystykami:
Dojne krowy – odznaczaja sie niskim tempem wzrostu, jednak bardzo duzym udzialem w rynku. Czesto sluza one do pozyskiwania srodków finansowych w celu poczynienia inwestycji w bardziej ryzykowne aktywa. Czesc ze spólek charakteryzuje sie wyplata dywidendy.
Gwiazdy – charakteryzuja sie bardzo duzymi perspektywami rozwoju, ale takze stosunkowo wysokimi nakladami inwestycyjnymi, przede wszystkim na rozwój. Inwestorzy nie moga spodziewac sie raczej wyplaty dywidend, jednak moga oczekiwac bardzo wysokich zysków w przyszlosci poprzez zwiekszenie wartosci spólki.
Znaki zapytania – spólki o malym udziale w sektorze, jednak bardzo perspektywiczne; dzialajace na rynku charakteryzujacym sie duzym wzrostem.
Psy – spólki cechujace sie powolnym wzrostem i niskim tempem rozwoju. Zazwyczaj wystepuja w portfelu z powodu blednie przeprowadzonej wczesniejszej analizy i identyfikacji spólek.
Aby omówic dobór instrumentów, którego dokonalismy, wpierw musielismy zamportowac wszelkie niezbedne dla nas pakiety. W tym wypadku byly to:
library("fBasics")
library("tseries")
library("car")
library("FinTS")
library("fGarch")
library("rugarch")
Do naszego modelu wybralismy 6 aktywów. Byl to kurs zlota wyrazony w PLN oraz notowania 5 spólek, dobranych zgodnie z zasada z poprzedniego rozdzialu. Byly to kursy akcji CDA Project S.A., Braster, 11bit Studio, Orange S.A., Pekao S.A.. Dla wymienionych aktywów wzielismy pod uwage jedynie ceny zamkniecia, aby na ich podstawie pózniej wyznaczyc logarytmiczne stopu zwrotów. Uzylismy ponizszej procedury, aby pobrac odpowiednie dane dla spólki Orange S.A, a takze pozostalych aktywów,
url_orange <- "http://stooq.com/q/d/l/?s=opl"
orange <- read.csv(url_orange,header = TRUE,
sep = ",", dec = ".", stringsAsFactors = F)
a takze od razu ograniczyc je do potrzebnych nam wartosci, tworzac przy okazji szereg stopy zwrotu dla kazdego z aktywów.
orange$Date <- as.Date(orange$Date)
orange <- orange[, c("Date", "Close")]
colnames(orange) <- c("Data", "orange")
orange$rorange <- diff.xts(log(orange$orange))
Przedzial czasowy uwzgledniony przez nas to okres 18-stu miesiecy, od 1 stycznia 2016 roku do 30 czerwca 2017 roku. Wybór takiego przedzialu czasu byl podyktowany wczesniejsza analiza sytuacji finansowej przede wszystkim gwiazd i znaków zapytania, które w znacznej mierze dopiero w latach 2016 - 2017 zaczynaly wchodzic w faze wzrostu; a wiec mogly byc utozsamiane z wyzej wymienionymi grupami. Z drugiej jednak strony inwestycje w zloto analizowane w aspekcie dojnej krowy powinny charakteryzowac sie stosunkowo dlugim horyzontem czasowym, co spowodowalo, iz analizowane dane nie powinny pochodzic z okresu krótszego niz rok.
s_date <- "2016-01-01"
f_date <- "2017-06-30"
Nastepne ograniczylismy kazdy z tych szeregów, do wyzej wyznaczonych dat, tak aby kazdy cechowal sie ta sama iloscia obserwacji.
orange <- orange[orange$Date <= as.Date(f_date), ]
orange <- orange[orange$Date > as.Date(s_date), ]
Taki dobór przedzialu czasowego pozwolil nam na skuteczne ujecie w zgodzie z teoretyczna zasada BCG, róznego rodzaju spólek/aktywów, które w naszym portfelu pelnily konkretne role. Sposród szczesciu aktywów, trzy z nich pelnily role “Dojnych Krów”, dwie wybralismy jako “Supergwiazdy”, jedna zas stanowila “Znak Zapytania”. Podzial, którego dokonalismy prezentuje sie nastepujaco:
Aktywa Pekao i Orange charakteryzuja sie jednymi z najwyzszych wyplacanych dywidend, zloto zas to inwestycja dlugoterminowa jest czasem okreslana wrecz jako „bezpieczna przystan”, szczególnie w czasach spadków notowan czy kryzysów.
11 bit studio SA jest deweloperem gier wideo i od wydania gry “This War of Mine”" jedna z gwiazd GPW. CD Project takze zajmuje sie grami – dziala w rozwijajacej sie obecnie dynamicznie branzy elektronicznej rozrywki – gier video (studio nalezace do spólki znane jest jako twórca gry Wiedzmin). Powoduje to, ze obie spólki moga byc analizowane w niniejszym projekcie jako gwiazdy.
Spólka zajmuje sie badaniami dotyczacymi zastosowania cieklych krysztalów w diagnostyce raka, a takze próbami komercjalizacji stworzonego przez nia urzadzenia sluzacego do domowego badania piersi.
Sumarycznie dojne krowy stanowia 50% portfela, gwiazdy 33%, zas znaki zapytania 17%. Ponizsze wykresy prezentuja wahania cen zamkniecia na GPW w badanym okresie czasu.
Orange
PEKAO
ZLOTO
CDA PROJECT
11BIT STUDIO
BRASTER
Zgodnie z tym co wczesniej opisalisy nasz model skladal sie bedzie z 6 wskazanych wczesniej aktywów gieldowych uwzgledniajacych ceny zamkniecia, z których otrzymamy logarytmiczne stopu zwrotu dla kazdego z tych insrumentów. Aby otrzymac zrównowazony portfel polaczylismy wpierw wybrane przez nas dane do wspólnej tablicy dodajac do niej od razu numer obserwacji.
mer1<-merge(bit,bra, by="Data")
mer2<-merge(mer1,cda, by="Data")
mer3<-merge(mer2,orange, by="Data")
mer4<-merge(mer3,pekao, by="Data")
tab<-merge(mer4,zloto, by="Data")
tab$obs<-1:length(tab$bit)
Na jej podstawie zbudowalismy w kolejnym kroku portfel, w którym kazde z aktywów liczone jest taka z sama waga, tworzac portfel zrównowazony. Zastowalismy nastepujaca formule:
tab$r<-((tab$rbit+tab$rbra+tab$rpekao+tab$rorange+tab$rzloto+tab$rcda)/6)
Wyorzystujac funkcje:
basicStats(tab$r)
mozemy uzyskac podstawowe dane opisowe o tak zbudowanym portfelu. Minalna wartosc stopy zwrotu dla naszych danych wyniosla -0.0297, zas najwieksza wartoscia bylo 0.53. Srednia tego rozkladu wyniosla 0.001, a mediana 0.000597. Obie te wartosci choc niewielkie, sa wieksze od 0. Kurtoza równa sie 1.34, co odbiega od typowej wartosci 3 dla rozkladu normalnego.
Ponizej prezentujemy wykres dziennych stóp zwrotu z portfela.
W celu zbadania normalnosci rozkladu wygenerowalismy takze histogram naszych stóp z nalozona na niego gestoscia rozkladu normalnego.
Korzystajac nastepnie ze statystyki testowej Jarque-Bery, mozemy jednoznacznie odrzucic hipoteze o normalnosci rozkladu stóp zwrotu.
jarque.bera.test(na.omit(tab$r))
Jarque Bera Test
data: na.omit(tab$r)
X-squared = 45.408, df = 2, p-value = 1.38e-10
Nastepnie wykonalismy testy funkcyjne na badanie autokorelacji w portfelu ze wzgledu ma istotne opóznienia. Jak pokazane jest ponizej, w modelu nie wystepuja istotne opóznienia,co potwierdza takze test Durbina-Watsona.
acf(tab$r, lag.max = 18, na.action = na.pass,
ylim = c(-0.15, 0.15),
col = "blue3", lwd = 6,
main = "ACF st?p zwrotu z portfolio")
Wykres ACF dla kwadratów zwrotów wskazuje na wystepowanie istotnego drugiego opóznienia.
acf(tab$r^2, lag.max = 18, na.action = na.pass,
ylim = c(-0.15, 0.15),
col = "blue3", lwd = 6,
main = "ACF kwadrat?w st?p zwrotu z portfolio")
Z wykorzystaniem statystyki testowej Durbina-Watsona nie mozemy stwierdzic wystepowania istotnych opóznien dla poziomu istotnosci 5% dla opóznien w modelu.
durbinWatsonTest(lm(formula = tab$r ~ 1),max.lag = 5)
lag Autocorrelation D-W Statistic p-value
1 0.03438814 1.927655 0.460
2 0.04108488 1.892988 0.296
3 -0.03530054 2.041797 0.662
4 -0.09238377 2.153990 0.090
5 -0.07435487 2.105132 0.212
Alternative hypothesis: rho[lag] != 0
Ten sam test dla kwadratów reszt wychodzi juz jednak korzystniej:
durbinWatsonTest(lm(formula = tab$r^2 ~ 1),max.lag = 5)
lag Autocorrelation D-W Statistic p-value
1 0.006147089 1.987403 0.798
2 0.131001267 1.706515 0.020
3 -0.028735301 2.025186 0.844
4 0.014025149 1.938763 0.542
5 -0.050213318 2.057274 0.496
Alternative hypothesis: rho[lag] != 0
Zauwazamy, zatem istotnosc drugiego opóznienia dla kwadratów reszt, co oznacza, ze mozemy odrzucic H0 o braku autokorelacji dla pierwszych 5 opóznien. Co potwierdza tylko wnioski, które moglismy wyciagnac ze wczesniejszych korelogramów. Nastepnie przeprowadzamy test na wystepowanie efektów ARCH wsród stóp zwrotów. Niestety wyniki wskazuja jednoznacznie, ze nie mozemy odrzucic hipotezy zerowej o braku wystepowania efektów ARCH.
ArchTest(tab$r, lags = 5)
ARCH LM-test; Null hypothesis: no ARCH effects
data: tab$r
Chi-squared = 8.4813, df = 5, p-value = 0.1316
W poszukiwaniu najodpowiedniejszej formy modelu, zaglebimy sie w klase modeli Garch(p,q). Wywodza sie one z klasy Arch(q). Zastosowanie jednak wersji w tej wlasnie postaci czesto wiaze sie z przjmowaniem duzych opóznien, co powoduje, ze zmuszeni jestesmy estymowac nierzadko bardzo duza liczbe parametrów. Poniewaz nie jest to rzecz pozadana, wprowadzamy model uogólnionej metody autoregresyjnej heteroskedastycznosci warunkoej - Garch. W naszym Badaniu zajmiemy sie wiec analiza modelu Garch, Egarch oraz GJGarach.
Na pierwszy model bierzemy klase modeli Garch. Sa to modele, które dopuszczaja aby wartosci warunkowej wariancji zalezaly takze od swoich wlasnych opóznien. Zaczniemy od sprawdzenie modelu GARCH(1,1)
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0, 0), include.mean = T),
distribution.model = "norm")
garch1.1 <- ugarchfit(spec = spec, data = na.omit(tab$r))
garch1.1
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : sGARCH(1,1)
Mean Model : ARFIMA(0,0,0)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 0.001129 0.000568 1.98873 0.046731
omega 0.000000 0.000000 0.75492 0.450298
alpha1 0.000317 0.000546 0.58120 0.561109
beta1 0.997094 0.000260 3829.66242 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.001129 0.000540 2.091481 0.036485
omega 0.000000 0.000004 0.078558 0.937384
alpha1 0.000317 0.006402 0.049579 0.960458
beta1 0.997094 0.004138 240.937155 0.000000
LogLikelihood : 1154.551
Information Criteria
------------------------------------
Akaike -6.1692
Bayes -6.1271
Shibata -6.1694
Hannan-Quinn -6.1525
Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1] 0.4235 0.5152
Lag[2*(p+q)+(p+q)-1][2] 0.7610 0.5827
Lag[4*(p+q)+(p+q)-1][5] 2.9588 0.4146
d.o.f=0
H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1] 0.04434 0.8332
Lag[2*(p+q)+(p+q)-1][5] 4.93094 0.1587
Lag[4*(p+q)+(p+q)-1][9] 6.43205 0.2516
d.o.f=2
Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[3] 0.4585 0.500 2.000 0.4983
ARCH Lag[5] 0.8669 1.440 1.667 0.7728
ARCH Lag[7] 1.0195 2.315 1.543 0.9104
Nyblom stability test
------------------------------------
Joint Statistic: 89.298
Individual Statistics:
mu 0.05718
omega 16.36172
alpha1 0.08453
beta1 0.09955
Asymptotic Critical Values (10% 5% 1%)
Joint Statistic: 1.07 1.24 1.6
Individual Statistic: 0.35 0.47 0.75
Sign Bias Test
------------------------------------
t-value prob sig
Sign Bias 1.4495 0.1480
Negative Sign Bias 0.6023 0.5474
Positive Sign Bias 0.7419 0.4586
Joint Effect 2.2070 0.5306
Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1 20 21.91 0.28895
2 30 40.49 0.07631
3 40 52.63 0.07123
4 50 57.97 0.17825
Elapsed time : 0.0896039
Suma parametrów w modelu jest mniejsza o 1. Wszystkie parametry sa dodatnie, jednak tylko Beta1, zdaje sie byc istotna w modelu (p-value-0.000). Na podstawie testu Ljunga-Boxa dla kwadratów wystandaryzowanych reszt, nie mamy podstaw do odrzucenia hipotezy, ze kwadraty wystandaryzowanych reszt sa bialym szumem. P-value dla testu LM ARCH wskazuje nam na brak podstaw od odrzucenia hipotezy zerowej o braku efektów ARCH wsród reszt modelu. Wartosc AIC dla tego modelu to -6.1692.
Nastepnie sprawdzilismy model GARCH(1,2)
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(0, 0), include.mean = T),
distribution.model = "norm")
garch1.2 <- ugarchfit(spec = spec, data = na.omit(tab$r))
garch1.2
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : sGARCH(1,2)
Mean Model : ARFIMA(0,0,0)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
mu 0.001043 0.000567 1.8411e+00 0.065612
omega 0.000000 0.000001 1.0580e-01 0.915743
alpha1 0.000000 0.000154 2.4900e-04 0.999801
beta1 0.029005 0.000031 9.4650e+02 0.000000
beta2 0.969995 0.000058 1.6676e+04 0.000000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
mu 0.001043 0.000551 1.8943e+00 0.058185
omega 0.000000 0.000010 7.7400e-03 0.993825
alpha1 0.000000 0.001073 3.6000e-05 0.999971
beta1 0.029005 0.000820 3.5360e+01 0.000000
beta2 0.969995 0.000800 1.2129e+03 0.000000
LogLikelihood : 1154.681
Information Criteria
------------------------------------
Akaike -6.1645
Bayes -6.1119
Shibata -6.1649
Hannan-Quinn -6.1436
Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1] 0.4112 0.5214
Lag[2*(p+q)+(p+q)-1][2] 0.7564 0.5845
Lag[4*(p+q)+(p+q)-1][5] 2.9686 0.4128
d.o.f=0
H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1] 0.04217 0.8373
Lag[2*(p+q)+(p+q)-1][8] 6.14340 0.2211
Lag[4*(p+q)+(p+q)-1][14] 8.81635 0.2984
d.o.f=3
Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[4] 0.06078 0.500 2.000 0.8053
ARCH Lag[6] 0.64962 1.461 1.711 0.8494
ARCH Lag[8] 1.92677 2.368 1.583 0.7563
Nyblom stability test
------------------------------------
Joint Statistic: 14.6559
Individual Statistics:
mu 0.07545
omega 24.75807
alpha1 0.09837
beta1 0.11938
beta2 0.11938
Asymptotic Critical Values (10% 5% 1%)
Joint Statistic: 1.28 1.47 1.88
Individual Statistic: 0.35 0.47 0.75
Sign Bias Test
------------------------------------
t-value prob sig
Sign Bias 1.4486 0.1483
Negative Sign Bias 0.5935 0.5532
Positive Sign Bias 0.7465 0.4558
Joint Effect 2.2046 0.5310
Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1 20 22.01 0.28359
2 30 36.30 0.16490
3 40 56.06 0.03764
4 50 57.43 0.19119
Elapsed time : 0.1101999
W modelu tym, podobnie jak w modelu dla parametrów (1,1) nieistotne okazaly sie byc parametry stalej oraz alpha. Wartosc AIC to -6.1645 co sugeruje, ze jest on nieznacznie gorszy od poprzedniego (wieksza wartosc AIC), pomimo iz równiez dla niego nie mamy podstaw do odrzucenia hipotezy o braku efektów typu Arch w modelu.
Uzyskalismy podobne wnioski równiez w przypadku modelu GARCH(2,2). Na podstawie kryteriów informacyjnych takze nie mozna byllo go uznac za model lepszy od GARCH (1,1) Takze wykorzystanie przez nas modelu GARCH(2,1) nie wywolalo, zadnej róznicy w stosunku do poprzednich modeli.
W kolejnej fazie zwrócilismy sie w strone sprawdzenia modeli EGARCH, zwiazanych z symulowaniem efektu dzwigni i modelowaniem logarytmu wariancji. W tym przypadku oszacowania parametrów nie musza byc dodatnie. Zaczelismy od modelu EGARCH(1,1).
spec = ugarchspec(variance.model = list(model ="eGARCH",
garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0, 0), include.mean = F),
distribution.model = "norm")
egarch1.1 <- ugarchfit( spec = spec, data = na.omit(tab$r))
egarch1.1
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : eGARCH(1,1)
Mean Model : ARFIMA(0,0,0)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
omega -3.688485 2.410057 -1.53046 0.125904
alpha1 0.028886 0.067848 0.42574 0.670300
beta1 0.591712 0.266774 2.21802 0.026553
gamma1 0.123224 0.109390 1.12647 0.259968
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
omega -3.688485 1.593943 -2.31406 0.020664
alpha1 0.028886 0.084718 0.34096 0.733134
beta1 0.591712 0.177022 3.34259 0.000830
gamma1 0.123224 0.092060 1.33852 0.180726
LogLikelihood : 1153.909
Information Criteria
------------------------------------
Akaike -6.1657
Bayes -6.1237
Shibata -6.1660
Hannan-Quinn -6.1490
Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1] 0.6277 0.4282
Lag[2*(p+q)+(p+q)-1][2] 0.7734 0.5780
Lag[4*(p+q)+(p+q)-1][5] 2.8324 0.4385
d.o.f=0
H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1] 0.4511 0.5018
Lag[2*(p+q)+(p+q)-1][5] 4.3189 0.2169
Lag[4*(p+q)+(p+q)-1][9] 5.7999 0.3219
d.o.f=2
Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[3] 0.6015 0.500 2.000 0.4380
ARCH Lag[5] 1.2614 1.440 1.667 0.6573
ARCH Lag[7] 1.5063 2.315 1.543 0.8201
Nyblom stability test
------------------------------------
Joint Statistic: 0.4065
Individual Statistics:
omega 0.08535
alpha1 0.15215
beta1 0.08674
gamma1 0.05458
Asymptotic Critical Values (10% 5% 1%)
Joint Statistic: 1.07 1.24 1.6
Individual Statistic: 0.35 0.47 0.75
Sign Bias Test
------------------------------------
t-value prob sig
Sign Bias 1.6629 0.09719 *
Negative Sign Bias 0.4663 0.64126
Positive Sign Bias 1.4840 0.13866
Joint Effect 3.4779 0.32364
Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1 20 22.66 0.2528
2 30 36.79 0.1518
3 40 43.84 0.2738
4 50 57.43 0.1912
Elapsed time : 0.4508021
Otrzymalismy nieistotne wartosci parametrów alpha1 i gamma1, zas istotne okazaly sie omega oraz beta1. Wsród reszt nie wystepuja efekty ARCH. Wartosc statystyki AIC wyniosla -6.1652. Nie ma takze podstawy do odrzucenia H0, o tym ze kwadraty wystandaryzowanych reszt sa bialym szumem.
Nastepnie symulowalismy model EGARCH(1,2).
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : eGARCH(1,2)
Mean Model : ARFIMA(0,0,0)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
omega -0.069775 0.000001 -69688.172 0
alpha1 -0.008328 0.000173 -48.045 0
beta1 0.165391 0.000010 16801.502 0
beta2 0.826662 0.000072 11416.695 0
gamma1 -0.069402 0.000208 -332.902 0
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
omega -0.069775 0.000067 -1048.0600 0.0e+00
alpha1 -0.008328 0.002034 -4.0938 4.2e-05
beta1 0.165391 0.000161 1024.8466 0.0e+00
beta2 0.826662 0.001257 657.6153 0.0e+00
gamma1 -0.069402 0.000126 -550.0320 0.0e+00
LogLikelihood : 1155.964
Information Criteria
------------------------------------
Akaike -6.1714
Bayes -6.1188
Shibata -6.1717
Hannan-Quinn -6.1505
Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1] 0.3656 0.5454
Lag[2*(p+q)+(p+q)-1][2] 0.6361 0.6330
Lag[4*(p+q)+(p+q)-1][5] 2.9926 0.4084
d.o.f=0
H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1] 0.4014 0.5264
Lag[2*(p+q)+(p+q)-1][8] 5.4847 0.2912
Lag[4*(p+q)+(p+q)-1][14] 8.2421 0.3572
d.o.f=3
Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[4] 0.02311 0.500 2.000 0.8792
ARCH Lag[6] 1.02056 1.461 1.711 0.7419
ARCH Lag[8] 2.07798 2.368 1.583 0.7258
Nyblom stability test
------------------------------------
Joint Statistic: 3.1584
Individual Statistics:
omega 0.2421
alpha1 0.2376
beta1 0.2420
beta2 0.2392
gamma1 0.2376
Asymptotic Critical Values (10% 5% 1%)
Joint Statistic: 1.28 1.47 1.88
Individual Statistic: 0.35 0.47 0.75
Sign Bias Test
------------------------------------
t-value prob sig
Sign Bias 1.4851 0.1384
Negative Sign Bias 0.9468 0.3444
Positive Sign Bias 0.2538 0.7998
Joint Effect 2.5520 0.4660
Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1 20 16.87 0.5989
2 30 23.60 0.7486
3 40 30.54 0.8316
4 50 61.99 0.1008
Elapsed time : 1.182016
Dla tego modelu wszystkie parametry okazaly sie byc istotne. Nie mamy podstaw do odrzucenia Hipotezy, mówiacej, iz kwadraty wystandaryzowanych reszt sa bialym szumem. Wsród reszt nie wystepuja po raz kolejny efekty ARCH. Wartosc statystyki AIC wyniosla natomiast -6.1714. Model ten jest duzo lepszy niz poprzedni.
Wyestymowalismy równiez modele EGARCH(2,1) i EGARCH(2,2). Kryteria informacyjne wskazuja, ze najlepszym dopasowaniem moze charakteryzowac sie model EGARCH(2,1), jednak patrzac na istotnosc paramterów, zdecydowalismy sie w dalszych analizach posluzyc sie EGARCH (1,2), którego wartosc kryterium informacyjnego nie odbiega znaczaco od modelu EGARCH(2,1).
Kolejna klasa analizowanych przez nas modeli sa modele z klasy GJR-GARCH(p,q).Jest to podejscie, które modeluje asymetryczny wplyw pozytywnych i negatywnych wiadomosci na zmiennosc. Na pierwszy model do omówienia wybralismy GJR-Garch(1,1).
spec = ugarchspec(variance.model = list(model ='gjrGARCH',
garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0, 0), include.mean = F),
distribution.model = "norm")
gjgarch1.1 <- ugarchfit( spec = spec, data = na.omit(tab$r))
gjgarch1.1
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : gjrGARCH(1,1)
Mean Model : ARFIMA(0,0,0)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
omega 0.000000 0.000000 1.304862 0.19194
alpha1 0.000099 0.003787 0.026014 0.97925
beta1 0.998374 0.000242 4119.643412 0.00000
gamma1 -0.004248 0.010483 -0.405249 0.68529
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
omega 0.000000 0.000002 0.170147 0.86489
alpha1 0.000099 0.006725 0.014648 0.98831
beta1 0.998374 0.001209 825.566451 0.00000
gamma1 -0.004248 0.023685 -0.179358 0.85766
LogLikelihood : 1153.058
Information Criteria
------------------------------------
Akaike -6.1612
Bayes -6.1191
Shibata -6.1614
Hannan-Quinn -6.1445
Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1] 0.4569 0.4991
Lag[2*(p+q)+(p+q)-1][2] 0.7713 0.5787
Lag[4*(p+q)+(p+q)-1][5] 2.9670 0.4131
d.o.f=0
H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1] 0.01252 0.9109
Lag[2*(p+q)+(p+q)-1][5] 5.72455 0.1044
Lag[4*(p+q)+(p+q)-1][9] 7.35152 0.1715
d.o.f=2
Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[3] 0.3427 0.500 2.000 0.5583
ARCH Lag[5] 0.9642 1.440 1.667 0.7436
ARCH Lag[7] 1.1654 2.315 1.543 0.8853
Nyblom stability test
------------------------------------
Joint Statistic: 93.0365
Individual Statistics:
omega 4.25718
alpha1 0.09532
beta1 0.11157
gamma1 0.10525
Asymptotic Critical Values (10% 5% 1%)
Joint Statistic: 1.07 1.24 1.6
Individual Statistic: 0.35 0.47 0.75
Sign Bias Test
------------------------------------
t-value prob sig
Sign Bias 1.5449 0.1232
Negative Sign Bias 0.7179 0.4733
Positive Sign Bias 0.6852 0.4937
Joint Effect 2.5062 0.4742
Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1 20 21.26 0.3225
2 30 36.95 0.1476
3 40 36.76 0.5725
4 50 50.19 0.4260
Elapsed time : 0.3844051
Dla tego modelu po raz kolejny tylko parametr beta1 okazal sie istotny.Nie udalo nam sie odrzucic hipotezy o braku efektów ARCH, a wystandaryzowane reszty okazaly sie byc bialym szumem, a wszystko to dla AIC=-6.1612.
*---------------------------------*
* GARCH Model Fit *
*---------------------------------*
Conditional Variance Dynamics
-----------------------------------
GARCH Model : gjrGARCH(1,2)
Mean Model : ARFIMA(0,0,0)
Distribution : norm
Optimal Parameters
------------------------------------
Estimate Std. Error t value Pr(>|t|)
omega 0.000000 1.0e-06 5.0000e-06 1.00000
alpha1 0.000053 4.9e-05 1.0682e+00 0.28544
beta1 0.422241 1.6e-05 2.6193e+04 0.00000
beta2 0.580660 2.0e-06 3.1393e+05 0.00000
gamma1 -0.008055 8.6e-05 -9.3142e+01 0.00000
Robust Standard Errors:
Estimate Std. Error t value Pr(>|t|)
omega 0.000000 7.0e-06 0.0000 1.00000
alpha1 0.000053 4.8e-05 1.0886 0.27634
beta1 0.422241 2.5e-05 16665.4270 0.00000
beta2 0.580660 3.0e-06 208469.6207 0.00000
gamma1 -0.008055 8.9e-05 -90.1099 0.00000
LogLikelihood : 1153.061
Information Criteria
------------------------------------
Akaike -6.1558
Bayes -6.1033
Shibata -6.1562
Hannan-Quinn -6.1349
Weighted Ljung-Box Test on Standardized Residuals
------------------------------------
statistic p-value
Lag[1] 0.4462 0.5041
Lag[2*(p+q)+(p+q)-1][2] 0.7710 0.5789
Lag[4*(p+q)+(p+q)-1][5] 2.9838 0.4100
d.o.f=0
H0 : No serial correlation
Weighted Ljung-Box Test on Standardized Squared Residuals
------------------------------------
statistic p-value
Lag[1] 0.01188 0.9132
Lag[2*(p+q)+(p+q)-1][8] 7.05576 0.1475
Lag[4*(p+q)+(p+q)-1][14] 9.55349 0.2332
d.o.f=3
Weighted ARCH LM Tests
------------------------------------
Statistic Shape Scale P-Value
ARCH Lag[4] 0.07607 0.500 2.000 0.7827
ARCH Lag[6] 0.95983 1.461 1.711 0.7593
ARCH Lag[8] 2.09680 2.368 1.583 0.7220
Nyblom stability test
------------------------------------
Joint Statistic: 71.8171
Individual Statistics:
omega 32.9633
alpha1 0.1363
beta1 0.1512
beta2 0.1512
gamma1 0.1501
Asymptotic Critical Values (10% 5% 1%)
Joint Statistic: 1.28 1.47 1.88
Individual Statistic: 0.35 0.47 0.75
Sign Bias Test
------------------------------------
t-value prob sig
Sign Bias 1.5330 0.1261
Negative Sign Bias 0.7275 0.4674
Positive Sign Bias 0.6854 0.4935
Joint Effect 2.4512 0.4842
Adjusted Pearson Goodness-of-Fit Test:
------------------------------------
group statistic p-value(g-1)
1 20 22.87 0.2431
2 30 29.23 0.4534
3 40 44.48 0.2520
4 50 53.94 0.2910
Elapsed time : 0.5324008
Model ten okazal sie byc znacznie lepszy od poprzedniego, o czym swiadczy nie tylko wartosc AIC=-6.1558, ale takze istotnosc wszystkich parametrów poza alpha1 oraz stala. W tym modelu takze nie odrzucamy H0 o braku efektów ARCH oraz mozemy uznac kwadraty wystandaryzowanych reszt za bialy szum.
Dla kolejny modeli klasy GJR-GARCH, wyniki byly juz gorsze,a najnizsza wartoscia krtyeriów informacyjnych dla klasy modeli GJRGARCH charakteryzowal sie model GJRGARCH (1,2).
W pierwszym kroku postanowilismy podczas szacowania wartosci narazonej na ryzyko okreslic zakres okresów in-sample oraz out-sample. Poniewaz dane pochodza za okres 1,5 roku i jest to okres stosunkowo krótki , postanowiono przyjac za okres in-sample czas obejmujacy 2016 r., zas za out-sample pierwsze pólrocze z 2017 r., by posiadac wystarczajaca liczbe rekordów do przeprowadzenia badania. Wykonano nastepujace czynnosci:
Ograniczono podzbiór in sample
Wystandaryzowano zwroty z portfela
Porównano 1% kwantyl rozkladu normalnego z 1% kwarntylem empirycznym rozkladu zwrotów. Wartosc 1% kwantyla empirycznego rozkladu zwrotów wyniosla -2.246897 i róznila sie od 1% kwantyla rozkladu normalnego (-2.326348). Wartosc narazona na ryzyko zostala oszacowana jako iloczyn 1% kwantyla empirycznego rozkladu oraz wektora oszacowan odchylenia standardowego.
Oszacowano nastepujace modele: GARCH(1,1), GJRGARCH (1,2) oraz EGARCH (1,2)
Wyniki analizy dla poszczególnych modeli przedstawiono ponizej.Pierwszym z nich jest GARCH (1,1)
tab20 <- tab[tab$Data <= as.Date("2016-12-30"), ]
tab20 <- tab20[as.Date("2016-01-05") <= tab20$Data, ]
tail(tab20)
tab20$rstd <- (tab20$r - mean(tab20$r, na.rm=T)) /
sd(tab20$r ,na.rm = T)
tail(tab20)
q1 <- quantile(tab20$rstd, 0.01, na.rm = T)
q1
qnorm(0.01, 0, 1)
spec <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0, 0), include.mean = T),
distribution.model = "norm")
tab20.garch1.1 <- ugarchfit(spec = spec,
data = na.omit(tab20$r))
plot(tab20.garch1.1, which = 10)
str(tab20.garch1.1)
tab20.garch1.1@fit$sigma
tab20$VaR <- q1 * tab20.garch1.1@fit$sigma
plot(tab20$Data, tab20$r, col = "red", lwd = 1, type = 'l',
ylim = c(-0.1, 0.1), ylab="",
xlab="Date", main="Zwroty i VaR dla modelu GARCH(1,1)")
abline(h = 0, lty = 2)
lines(tab20$Data, tab20$VaR, type = 'l', col = "green")
sum(tab20$r < tab20$VaR) / length(tab20$VaR)
A wykres Zwrotów i VaR dla modelu GARCH(1,1) prezentuje sie nastepujaco
Straty w modelu GARCH (1,1) przekraczaja zakladany poziom VAR w 0.12% przypadków.
Kolejnym uwzglednionym przez nas modelem jest GJRGARCH(1,2).
Straty w modelu GJRGARCH (1,2) przekraczaja zakladany poziom VAR w 0.12% przypadków.
Ostatni przenalizowany przez nas model to EGARCH(1,2) .
Straty w modelu EGARCH (1,2) przekraczaja zakladany poziom VAR w 0.08% przypadków.
Ze wzgledu na najnizszy poziom strat przekraczajacy zakladany poziom VAR model EGARCH wydaje sie najbardziej odpowiedni dla analizowanego portfela.
Jak wspomniano powyzej w okresie out-sample przyjeto podzbiór od poczatku stycznia 2017 r. do konca czerwca 2017 r.
GARCH (1,1)
start <- tab$obs[tab$Data == as.Date("2017-01-03")]
finish <- tab$obs[tab$Data == as.Date("2017-06-30")]
tab4 <-tab[start:finish, ]
spec2 <- ugarchspec(variance.model = list(model = "sGARCH", garchOrder = c(1, 1)),
mean.model = list(armaOrder = c(0, 0), include.mean = T),
distribution.model = "norm")
garch1.1 <- ugarchfit( spec = spec,
data = na.omit(tab$r))
garch1.1
tab$r<-((tab$rbit+tab$rbra+tab$rpekao+tab$rorange+tab$rzloto+tab$rcda)/6)
VaR <- rep(NA,times = finish - start + 1)
for (k in start:finish) {
tmp.data <- tab[tab$obs <= (k - 1), ]
tmp.data$rstd <- (tmp.data$r - mean(tmp.data$r, na.rm = T)) /
sd(tmp.data$r, na.rm = T)
q2 <- quantile(tmp.data$rstd, 0.01, na.rm = T)
tmp.garch1.1<- ugarchfit(spec = spec2, data = na.omit(tmp.data$r))
sigma.forecast <- ugarchforecast(tmp.garch1.1, n.ahead = 1)
sigma.forecast2 <- sigma.forecast@forecast$sigmaFor[1, 1]
VaR[k - start + 1] <- q2 * sigma.forecast2
}
tab4$VaR <- VaR
plot(tab4$Data, tab4$r, col = "red", lwd = 1, type = 'l',
ylim = c(-0.15, 0.15),
xlab="Time",ylab="",
main="Zwroty z portfela i VaR w okresie out-of-sample
w modelu GARCH(1,1)")
abline(h = 0, lty = 2)
lines(tab4$Data, tab4$VaR, type = 'l', col = "green")
sum(tab4$r < tab4$VaR) / length(tab4$VaR)
Wykres dla GARCH (1,1) wyglada nastepujaco:
Straty w modelu GARCH (1,1) przekraczaja zakladany poziom VAR w 0 % przypadków.
GJRGARCH (1,2)
Wykres dla GJRGARCH (1,2) wyglada nastepujaco:
Straty w modelu GJRGARCH (1,2) przekraczaja zakladany poziom VAR w 0% przypadków.
EGARCH (1,2)
Wykres dla EGARCH (1,2) wyglada nastepujaco:
Straty w modelu EGARCH (1,2) przekraczaja zakladany poziom VAR w 0% przypadków.
Poniewaz analiza wrazliwosci jest to analiza, która skupia sie na wynikach badania, zaleznie od stosowania róznych warunków, postanowilismy ja przeprowadzic dla modelu najbardziej dopasowanego, a mianowicie EGARCH(1,2). W tym celu zamiast analizowac 6 miesieczny okres out-of-sample, postanowilismy zrobic analogiczna analize dla okresu 3 miesiecznego out-of-sample. Wyniki miedzy jedna a druga analiza zasadniczo sie nie róznia, poniewaz w obu przypadkach potencjalne straty nie przekroczyly zakladanego poziomu VaR (0% przypaków).
start <- tab$obs[tab$Data == as.Date("2017-03-31")]
finish <- tab$obs[tab$Data == as.Date("2017-06-30")]
tab6 <-tab[start:finish, ]
spec2 = ugarchspec(variance.model = list(model ="eGARCH",
garchOrder = c(1, 2)),
mean.model = list(armaOrder = c(0, 0), include.mean = F),
distribution.model = "norm")
VaR <- rep(NA,times = finish - start + 1)
for (k in start:finish) {
tmp.data <- tab[tab$obs <= (k - 1), ]
tmp.data$rstd <- (tmp.data$r - mean(tmp.data$r, na.rm = T)) /
sd(tmp.data$r, na.rm = T)
q2 <- quantile(tmp.data$rstd, 0.01, na.rm = T)
tmp.egarch1.2 <- ugarchfit(spec = spec2, data = na.omit(tmp.data$r))
sigma.forecast <- ugarchforecast(tmp.egarch1.2, n.ahead = 1)
sigma.forecast2 <- sigma.forecast@forecast$sigmaFor[1, 1]
VaR[k - start + 1] <- q2 * sigma.forecast2
}
tab6$VaR <- VaR
plot(tab6$Data, tab6$r, col = "red", lwd = 1, type = 'l',
ylim = c(-0.15, 0.15), xlab="Time",ylab="",
main="Zwroty z portfela i VaR w okresie 3 miesiecy
w modelu EGARCH(1,2)")
abline(h = 0, lty = 2)
lines(tab6$Data, tab6$VaR, type = 'l', col = "green")
sum(tab6$r < tab6$VaR) / length(tab6$VaR)
Badanie ukazalo, ze najlepiej dopasowanym modelem dla zbudowanego portfela inwestycyjnego jest EGARCH(1,2). Wniosek taki zostal wysuniety na podstawie przede wszystkim analizy istotnosci parametrów, ale takze kryteriów informacyjnych. EGARCH (1,2), GARCH (1,1) oraz GJRGARCH (1,2) byly najlepiej dopasowanymi modelami w swoich grupach, dlatego tez analizowano je w okresach out-sample oraz in-sample.