Celem niniejszego raportu jest zbudowanie i analiza równoważonego portfela inwestycyjnego. W pracy do zbudowania portfela, użylismy niestandardowego podejścia, a mianowicie macierzy BCG, która zazwyczaj służy 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 małych i innowacyjnych, jak CD_Project, czy Braster. W analizie powstałego 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 wartości narażonej na ryzyko w okresach in-sample oraz out-of-sample. Ostatnim elementem badania byla analiza wrażliwości dla najlepiej dopasowanego modelu.
W niniejszym projekcie wykorzystano stosunkowo nietypowe podejscie do zagadnienia budowania portfela inwestycyjnego, ponieważ postanowiliśmy poslużyć się macierzą Boston Consulting Group. Macierz BCG jest zazwyczaj używana do analizy portfela produktów, jednak po pewnych modyfikacjach można poczynić 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 przybliżeniu udział poszczególnych grup w całym 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 – odznaczają sie niskim tempem wzrostu, jednak bardzo dużym udzialem w rynku. Często slużą one do pozyskiwania środków finansowych w celu poczynienia inwestycji w bardziej ryzykowne aktywa. Część ze spółek charakteryzuje sie wypłatą dywidendy.
Gwiazdy – charakteryzują sie bardzo dużymi perspektywami rozwoju, ale także stosunkowo wysokimi nakładami inwestycyjnymi, przede wszystkim na rozwój. Inwestorzy nie mogą spodziewać się raczej wypłaty dywidend, jednak mogą oczekiwać bardzo wysokich zysków w przyszłości poprzez zwiększenie wartości spółki.
Znaki zapytania – spółki o małym udziale w sektorze, jednak bardzo perspektywiczne; działające na rynku charakteryzującym sie dużym wzrostem.
Psy – spółki cechujące się powolnym wzrostem i niskim tempem rozwoju. Zazwyczaj występują w portfelu z powodu błędnie przeprowadzonej wcześniejszej analizy i identyfikacji spółek.
Aby omówić dobór instrumentów, którego dokonalismy, wpierw musieliśmy zaimportować wszelkie niezbędne dla nas pakiety. W tym wypadku były to:
library("fBasics")
library("tseries")
library("car")
library("FinTS")
library("fGarch")
library("rugarch")
Do naszego modelu wybraliśmy 6 aktywów. Był to kurs złota wyrażony w PLN oraz notowania 5 spółek, dobranych zgodnie z zasadą z poprzedniego rozdziału. Byly to kursy akcji CDA Project S.A., Braster, 11bit Studio, Orange S.A., Pekao S.A. Dla wymienionych aktywów wzięliśmy pod uwagę jedynie ceny zamknięcia, aby na ich podstawie później wyznaczyć logarytmiczne stopu zwrotów. Użylismy poniższej procedury, aby pobrać odpowiednie dane dla spółki Orange S.A, a także pozostałych aktywów,
url_orange <- "http://stooq.com/q/d/l/?s=opl"
orange <- read.csv(url_orange,header = TRUE,
sep = ",", dec = ".", stringsAsFactors = F)
a także od razu ograniczyć je do potrzebnych nam wartości, tworząc 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))
Przedział czasowy uwzględniony przez nas to okres 18-stu miesięcy, od 1 stycznia 2016 roku do 30 czerwca 2017 roku. Wybór takiego przedziału czasu był podyktowany wcześniejszą analizą sytuacji finansowej przede wszystkim gwiazd i znaków zapytania, które w znacznej mierze dopiero w latach 2016 - 2017 zaczynały wchodzić w fazę wzrostu; a więc mogły być utożsamiane z wyżej wymienionymi grupami. Z drugiej jednak strony inwestycje w zloto analizowane w aspekcie dojnej krowy powinny charakteryzować sie stosunkowo długim horyzontem czasowym, co spowodowało, iż analizowane dane nie powinny pochodzic z okresu krótszego niż rok.
s_date <- "2016-01-01"
f_date <- "2017-06-30"
Następnie ograniczyliśmy każdy z tych szeregów, do wyzej wyznaczonych dat, tak aby każdy cechował się tą samą iloscią obserwacji.
orange <- orange[orange$Date <= as.Date(f_date), ]
orange <- orange[orange$Date > as.Date(s_date), ]
Taki dobór przedziału czasowego pozwolił nam na skuteczne ujęcie w zgodzie z teoretyczną zasadą BCG, różnego rodzaju spółek/aktywów, które w naszym portfelu pelniły konkretne role. Sposród szcześciu aktywów, trzy z nich pelniły role “Dojnych Krów”, dwie wybraliśmy jako “Supergwiazdy”, jedna zaś stanowiła “Znak Zapytania”. Podział, którego dokonaliśmy prezentuje sie następująco:
Aktywa Pekao i Orange charakteryzują sie jednymi z najwyższych wypłacanych dywidend, złoto zaś to inwestycja długoterminowa, która czasem jest określana wręcz jako „bezpieczna przystań”, szczególnie w czasach spadków notowań czy kryzysów.
11 bit studio SA jest deweloperem gier wideo i od wydania gry “This War of Mine”" jedną z gwiazd GPW. CD Project także zajmuje sie grami – działa w rozwijającej sie obecnie dynamicznie branży elektronicznej rozrywki – gier video (studio należące do spółki znane jest jako twórca gry Wiedzmin). Powoduje to, że obie spółki mogą być analizowane w niniejszym projekcie jako gwiazdy.
Spółka zajmuje sie badaniami dotyczącymi zastosowania ciekłych kryształów w diagnostyce raka, a także próbami komercjalizacji stworzonego przez nią urządzenia służącego do domowego badania piersi.
Sumarycznie dojne krowy stanowia 50% portfela, gwiazdy 33%, zaś znaki zapytania 17%. Poniższe wykresy prezentują wahania cen zamkniecia na GPW w badanym okresie czasu.
Orange
PEKAO
ZLOTO
CDA PROJECT
11BIT STUDIO
BRASTER
Zgodnie z tym co wcześniej opisaliśmy nasz model składać sie będzie z 6 wskazanych wczesniej aktywów giełdowych uwzględniających ceny zamknięcia, z których otrzymamy logarytmiczne stopu zwrotu dla każdego z tych insrumentów. Aby otrzymać zrównoważony portfel połaczyliśmy wpierw wybrane przez nas dane do wspólnej tablicy dodając 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 zbudowaliśmy w kolejnym kroku portfel, w którym każde z aktywów liczone jest z taką samą wagą, tworząc portfel zrównoważony. Zastowaliśmy następującą formułę:
tab$r<-((tab$rbit+tab$rbra+tab$rpekao+tab$rorange+tab$rzloto+tab$rcda)/6)
Wyorzystując funkcję:
basicStats(tab$r)
możemy uzyskać podstawowe dane opisowe o tak zbudowanym portfelu. Minimalna wartość stopy zwrotu dla naszych danych wyniosła -0.0297, zaś największą wartością było 0.53. Średnia tego rozkładu wyniosła 0.001, a mediana 0.000597. Obie te wartości choć niewielkie, są większe od 0. Kurtoza równa sie 1.34, co odbiega od typowej wartości 3 dla rozkladu normalnego.
Poniżej prezentujemy wykres dziennych stóp zwrotu z portfela.
W celu zbadania normalności rozkładu wygenerowaliśmy także histogram naszych stóp z nałożoną na niego gęstościa rozkladu normalnego.
Korzystając następnie ze statystyki testowej Jarque-Bery, możemy jednoznacznie odrzucić hipotezę o normalności rozkładu 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
Następnie wykonaliśmy testy funkcyjne na badanie autokorelacji w portfelu ze względu na istotne opóznienia. Jak pokazane jest poniżej, w modelu nie występują istotne opóznienia,co potwierdza także 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 występowanie istotnego drugiego opóżnienia.
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 możemy stwierdzić występowania istotnych opóżnień dla poziomu istotności 5% dla opóźnień 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
Zauważamy, zatem istotność drugiego opóżnienia dla kwadratów reszt, co oznacza, że możemy odrzucić H0 o braku autokorelacji dla pierwszych 5 opóżnień. Co potwierdza tylko wnioski, które mogliśmy wyciagnąć ze wcześniejszych korelogramów. Następnie przeprowadzamy test na występowanie efektów ARCH wsród stóp zwrotów. Niestety wyniki wskazują jednoznacznie, że nie możemy odrzucić hipotezy zerowej o braku występowania 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, zaglębimy sie w klase modeli Garch(p,q). Wywodzą sie one z klasy Arch(q). Zastosowanie jednak wersji w tej właśnie postaci często wiąże się z przyjmowaniem dużych opóznień, co powoduje, że zmuszeni jesteśmy estymować nierzadko bardzo dużą liczbę parametrów. Ponieważ nie jest to rzecz pożądana, wprowadzamy model uogólnionej metody autoregresyjnej heteroskedastycznosci warunkoej - Garch. W naszym Badaniu zajmiemy sie więc analizą modelu Garch, Egarch oraz GJGarach.
Na pierwszy model bierzemy klase modeli Garch. Są to modele, które dopuszczają aby wartości warunkowej wariancji zależały także od swoich własnych opóznień. Zaczniemy od sprawdzenia 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. Wartość AIC dla tego modelu to -6.1692.
Następnie sprawdziliśmy 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 okazały się być parametry stałej oraz alpha. Wartość AIC to -6.1645 co sugeruje, że jest on nieznacznie gorszy od poprzedniego (większa wartość AIC), pomimo iz również dla niego nie mamy podstaw do odrzucenia hipotezy o braku efektów typu Arch w modelu.
Uzyskaliśmy podobne wnioski również w przypadku modelu GARCH(2,2). Na podstawie kryteriów informacyjnych także nie można było go uznać za model lepszy od GARCH (1,1) Także wykorzystanie przez nas modelu GARCH(2,1) nie wywołało różnicy w stosunku do poprzednich modeli.
W kolejnej fazie zwróciliśmy się w stronę sprawdzenia modeli EGARCH, związanych z symulowaniem efektu dźwigni i modelowaniem logarytmu wariancji. W tym przypadku oszacowania parametrów nie muszą byc dodatnie. Zaczęliśmy 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
Otrzymaliśmy nieistotne wartości parametrów alpha1 i gamma1, zaś istotne okazały się omega oraz beta1. Wsród reszt nie występują efekty ARCH. Wartość statystyki AIC wyniosła -6.1657. Nie ma także podstaw do odrzucenia H0, o tym że kwadraty wystandaryzowanych reszt są białym szumem.
Następnie symulowaliśmy 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 okazały się być istotne. Nie mamy podstaw do odrzucenia hipotezy, mówiącej, iż kwadraty wystandaryzowanych reszt są białym szumem. Wsród reszt nie występują po raz kolejny efekty ARCH. Wartość statystyki AIC wyniosła natomiast -6.1714. Model ten jest dużo lepszy niz poprzedni.
Wyestymowaliśmy również modele EGARCH(2,1) i EGARCH(2,2). Kryteria informacyjne wskazują, ze najlepszym dopasowaniem moze charakteryzowac sie model EGARCH(2,1), jednak patrząc na istotność paramterów, zdecydowaliśmy się w dalszych analizach poslużyć sie EGARCH (1,2), którego wartość kryterium informacyjnego nie odbiega znaczaco od modelu EGARCH(2,1).
Kolejna klasa analizowanych przez nas modeli są to modele z klasy GJR-GARCH(p,q).Jest to podejście, które modeluje asymetryczny wplyw pozytywnych i negatywnych wiadomości na zmienność. Na pierwszy model do omówienia wybraliśmy 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 okazał się istotny.Nie udało nam się odrzucić hipotezy o braku efektów ARCH, a wystandaryzowane reszty okazały sie być białym szumem, a wszystko to dla modelu z wartością 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 odznaczał się wartością AIC=-6.1558. Wszystkie paramtery poza alpha1 oraz stalą były istotne. W tym modelu także nie odrzucamy H0 o braku efektów ARCH oraz możemy uznać kwadraty wystandaryzowanych reszt za biały szum.
Dla kolejnych modeli klasy GJR-GARCH, wyniki byly juz gorsze, charakteryzowały się wyższą wartością AIC niż model GJRGARCH (1,2).
W pierwszym kroku postanowiliśmy podczas szacowania wartości narażonej na ryzyko określić zakres okresów in-sample oraz out-sample. Ponieważ dane pochodzą za okres 1,5 roku i jest to okres stosunkowo krótki, postanowiono przyjąc za okres in-sample czas obejmujący 2016 r., zaa za out-sample pierwsze pólrocze z 2017 r., by posiadać wystarczającą liczbę rekordów do przeprowadzenia badania. Wykonano następujące czynności:
Ograniczono podzbiór in sample
Wystandaryzowano zwroty z portfela
Porównano 1% kwantyl rozkładu normalnego z 1% kwantylem empirycznym rozkładu zwrotów. Wartość 1% kwantyla empirycznego rozkładu zwrotów wyniosła -2.246897 i rózniła się od 1% kwantyla rozkładu normalnego (-2.326348). Wartość narażona na ryzyko została oszacowana jako iloczyn 1% kwantyla empirycznego rozkładu oraz wektora oszacowań odchylenia standardowego.
Oszacowano następujące modele: GARCH(1,1), GJRGARCH (1,2) oraz EGARCH (1,2)
Wyniki analizy dla poszczególnych modeli przedstawiono poniżej.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 nastepująco
Straty w modelu GARCH (1,1) przekraczają zakładany poziom VAR w 0.12% przypadków.
Kolejnym uwzględnionym przez nas modelem jest GJRGARCH(1,2).
Straty w modelu GJRGARCH (1,2) przekraczają zakładany poziom VAR w 0.12% przypadków.
Ostatni przenalizowany przez nas model to EGARCH(1,2) .
Straty w modelu EGARCH (1,2) przekraczają zakładany poziom VAR w 0.08% przypadków.
Ze wzgledu na najniższy poziom strat przekraczający zakładany poziom VAR model EGARCH wydaje sie najbardziej odpowiedni dla analizowanego portfela.
Jak wspomniano powyżej w okresie out-sample przyjęto 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) wygląda następująco:
Straty w modelu GARCH (1,1) przekraczają zakładany poziom VAR w 0 % przypadków.
GJRGARCH (1,2)
Wykres dla GJRGARCH (1,2) wygląda następująco:
Straty w modelu GJRGARCH (1,2) przekraczają zakładany poziom VAR w 0% przypadków.
EGARCH (1,2)
Wykres dla EGARCH (1,2) wygląda następująco:
Straty w modelu EGARCH (1,2) przekraczają zakładany poziom VAR w 0% przypadków.
Ponieważ analiza wrażliwosci jest to analiza, która śskupia sie na wynikach badania, zależnie od zastosowania róznych warunków, postanowiliśmy ją przeprowadzić dla modelu najbardziej dopasowanego, a mianowicie EGARCH(1,2). W tym celu zamiast analizować 6 miesięczny okres out-of-sample, postanowiliśmy zrobić analogiczną analizę dla okresu 3 miesięcznego out-of-sample. Wyniki między jedną a drugą analizą zasadniczo sie nie róznią, poniewaz w obu przypadkach potencjalne straty nie przekroczyly zakładanego 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 ukazało, że najlepiej dopasowanym modelem dla zbudowanego portfela inwestycyjnego jest EGARCH(1,2). Wniosek taki został wysuniety na podstawie przede wszystkim analizy istotności parametrów, ale także 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.