How to identify stylized facts on SNP new data
> getSymbols("SNP", from="2004-01-01", to=Sys.Date())
[1] "SNP"
> chartSeries(Cl(SNP))
> addMACD()
> addRSI()
> addVolatility()
Error in array(x, c(length(x), 1L), if (!is.null(names(x))) list(names(x), :
'data' must be of a vector type, was 'NULL'
> ret <- dailyReturn(Cl(SNP), type='log')
> par(mfrow=c(2,2))
> acf(ret, main="Return ACF");
> pacf(ret, main="Return PACF");
> acf(ret^2, main="Squared return ACF");
> pacf(ret^2, main="Squared return PACF")
> par(mfrow=c(1,1))
> m=mean(ret);s=sd(ret);
> par(mfrow=c(1,2))
> hist(ret, nclass=40, freq=FALSE, main='Return histogram');curve(dnorm(x,
+ mean=m,sd=s), from = -0.3, to = 0.2, add=TRUE, col="red")
> plot(density(ret), main='Return empirical distribution');curve(dnorm(x,
+ mean=m,sd=s), from = -0.3, to = 0.2, add=TRUE, col="red")
> par(mfrow=c(1,1))
> library("moments", lib.loc="~/R/win-library/3.6")
Attaching package: ‘moments’
The following objects are masked from ‘package:timeDate’:
kurtosis, skewness
> kurtosis(ret)
daily.returns
9.264181
> skewness(ret)
daily.returns
0.2025379
> plot(density(ret), main='Return EDF - upper tail', xlim = c(0.1, 0.2),
+ ylim=c(0,2));
> curve(dnorm(x, mean=m,sd=s), from = -0.3, to = 0.2, add=TRUE, col="red")
> plot(density(ret), xlim=c(-5*s,5*s),log='y', main='Density on log-scale')
> curve(dnorm(x, mean=m,sd=s), from=-5*s, to=5*s, log="y", add=TRUE,
+ col="red")
> qqnorm(ret);qqline(ret);
> chartSeries(Cl(SNP))
> head(SNP)
SNP.Open SNP.High SNP.Low SNP.Close
2004-01-02 38.00000 38.76923 37.96154 38.38462
2004-01-05 38.30769 38.54615 36.38462 37.87692
2004-01-06 34.03846 35.38462 33.19231 33.62308
2004-01-07 33.38462 33.63077 32.00000 32.78462
2004-01-08 33.15385 34.28462 33.07692 33.80769
2004-01-09 34.23077 34.61538 33.50000 33.76923
SNP.Volume SNP.Adjusted
2004-01-02 1469700 18.73949
2004-01-05 1435200 18.49163
2004-01-06 2170800 16.41490
2004-01-07 1176300 16.00555
2004-01-08 1043900 16.50503
2004-01-09 567500 16.48625
> tail(SNP)
SNP.Open SNP.High SNP.Low SNP.Close
2020-01-16 60.23 60.66 60.20 60.42
2020-01-17 60.81 60.81 60.53 60.70
2020-01-21 59.23 59.41 58.46 58.51
2020-01-22 58.95 58.97 58.02 58.18
2020-01-23 57.60 57.98 57.02 57.77
2020-01-24 57.73 57.80 56.84 57.16
SNP.Volume SNP.Adjusted
2020-01-16 114800 60.42
2020-01-17 102800 60.70
2020-01-21 259800 58.51
2020-01-22 169600 58.18
2020-01-23 227900 57.77
2020-01-24 146200 57.16
[1] "SNP"
> chartSeries(Cl(SNP))
DailyReturn
> ret <- dailyReturn(Cl(SNP), type='log')> par(mfrow=c(2,2))
> acf(ret, main="Return ACF");
> pacf(ret, main="Return PACF");
> acf(ret^2, main="Squared return ACF");
> pacf(ret^2, main="Squared return PACF")
> par(mfrow=c(1,1))
> m=mean(ret);s=sd(ret);
> par(mfrow=c(1,2))
> hist(ret, nclass=40, freq=FALSE, main='Return histogram');curve(dnorm(x,
+ mean=m,sd=s), from = -0.3, to = 0.2, add=TRUE, col="red")
> plot(density(ret), main='Return empirical distribution');curve(dnorm(x, mean=m,sd=s), from = -0.3, to = 0.2, add=TRUE, col="red")
> par(mfrow=c(1,1))
plot(density(ret), main='Return EDF - upper tail', xlim = c(0.1, 0.2),
+ ylim=c(0,2));
> curve(dnorm(x, mean=m,sd=s), from = -0.3, to = 0.2, add=TRUE, col="red")
> plot(density(ret), xlim=c(-5*s,5*s),log='y', main='Density on log-scale')
> curve(dnorm(x, mean=m,sd=s), from=-5*s, to=5*s, log="y", add=TRUE,
+ col="red")
> qqnorm(ret);qqline(ret);
> ret.snp <- dailyReturn(Cl(SNP), type='log')
> chartSeries(ret.snp)
> garch11.spec = ugarchspec(variance.model = list(model="sGARCH",garchOrder=c(1,1)), mean.model = list(armaOrder=c(0,0)))
> snp.garch11.fit = ugarchfit(spec=garch11.spec, data=ret.snp)
> coef(snp.garch11.fit)
mu omega alpha1
1.875552e-04 5.697513e-06 5.572483e-02
beta1
9.312202e-01
> coef(snp.garch11.fit)
mu omega alpha1
1.875552e-04 5.697513e-06 5.572483e-02
beta1
9.312202e-01
> vcov(snp.garch11.fit)
[,1] [,2]
[1,] 8.296207e-08 3.994761e-11
[2,] 3.994761e-11 8.807742e-12
[3,] 3.307207e-08 3.487837e-09
[4,] -1.192944e-07 -2.277728e-08
[,3] [,4]
[1,] 3.307207e-08 -1.192944e-07
[2,] 3.487837e-09 -2.277728e-08
[3,] 3.386259e-05 -3.639961e-05
[4,] -3.639961e-05 8.409941e-05
> infocriteria(snp.garch11.fit)
Akaike -4.982447
Bayes -4.976050
Shibata -4.982449
Hannan-Quinn -4.980177
> newsimpact(snp.garch11.fit)
$zy
[1] 0.0054273408 0.0052267519
[3] 0.0050302566 0.0048378550
[5] 0.0046495470 0.0044653327
[7] 0.0042852120 0.0041091850
[9] 0.0039372517 0.0037694119
[11] 0.0036056659 0.0034460135
[13] 0.0032904547 0.0031389896
[15] 0.0029916181 0.0028483403
[17] 0.0027091562 0.0025740657
[19] 0.0024430688 0.0023161656
[21] 0.0021933561 0.0020746402
[23] 0.0019600179 0.0018494894
[25] 0.0017430544 0.0016407131
[27] 0.0015424655 0.0014483115
[29] 0.0013582512 0.0012722845
[31] 0.0011904114 0.0011126321
[33] 0.0010389463 0.0009693543
[35] 0.0009038558 0.0008424511
[37] 0.0007851399 0.0007319225
[39] 0.0006827987 0.0006377685
[41] 0.0005968320 0.0005599891
[43] 0.0005272399 0.0004985843
[45] 0.0004740224 0.0004535542
[47] 0.0004371796 0.0004248986
[49] 0.0004167113 0.0004126176
[51] 0.0004126176 0.0004167113
[53] 0.0004248986 0.0004371796
[55] 0.0004535542 0.0004740224
[57] 0.0004985843 0.0005272399
[59] 0.0005599891 0.0005968320
[61] 0.0006377685 0.0006827987
[63] 0.0007319225 0.0007851399
[65] 0.0008424511 0.0009038558
[67] 0.0009693543 0.0010389463
[69] 0.0011126321 0.0011904114
[71] 0.0012722845 0.0013582512
[73] 0.0014483115 0.0015424655
[75] 0.0016407131 0.0017430544
[77] 0.0018494894 0.0019600179
[79] 0.0020746402 0.0021933561
[81] 0.0023161656 0.0024430688
[83] 0.0025740657 0.0027091562
[85] 0.0028483403 0.0029916181
[87] 0.0031389896 0.0032904547
[89] 0.0034460135 0.0036056659
[91] 0.0037694119 0.0039372517
[93] 0.0041091850 0.0042852120
[95] 0.0044653327 0.0046495470
[97] 0.0048378550 0.0050302566
[99] 0.0052267519 0.0054273408
$zx
[1] -0.300000000 -0.293939394
[3] -0.287878788 -0.281818182
[5] -0.275757576 -0.269696970
[7] -0.263636364 -0.257575758
[9] -0.251515152 -0.245454545
[11] -0.239393939 -0.233333333
[13] -0.227272727 -0.221212121
[15] -0.215151515 -0.209090909
[17] -0.203030303 -0.196969697
[19] -0.190909091 -0.184848485
[21] -0.178787879 -0.172727273
[23] -0.166666667 -0.160606061
[25] -0.154545455 -0.148484848
[27] -0.142424242 -0.136363636
[29] -0.130303030 -0.124242424
[31] -0.118181818 -0.112121212
[33] -0.106060606 -0.100000000
[35] -0.093939394 -0.087878788
[37] -0.081818182 -0.075757576
[39] -0.069696970 -0.063636364
[41] -0.057575758 -0.051515152
[43] -0.045454545 -0.039393939
[45] -0.033333333 -0.027272727
[47] -0.021212121 -0.015151515
[49] -0.009090909 -0.003030303
[51] 0.003030303 0.009090909
[53] 0.015151515 0.021212121
[55] 0.027272727 0.033333333
[57] 0.039393939 0.045454545
[59] 0.051515152 0.057575758
[61] 0.063636364 0.069696970
[63] 0.075757576 0.081818182
[65] 0.087878788 0.093939394
[67] 0.100000000 0.106060606
[69] 0.112121212 0.118181818
[71] 0.124242424 0.130303030
[73] 0.136363636 0.142424242
[75] 0.148484848 0.154545455
[77] 0.160606061 0.166666667
[79] 0.172727273 0.178787879
[81] 0.184848485 0.190909091
[83] 0.196969697 0.203030303
[85] 0.209090909 0.215151515
[87] 0.221212121 0.227272727
[89] 0.233333333 0.239393939
[91] 0.245454545 0.251515152
[93] 0.257575758 0.263636364
[95] 0.269696970 0.275757576
[97] 0.281818182 0.287878788
[99] 0.293939394 0.300000000
$yexpr
expression(sigma[t]^2)
$xexpr
expression(epsilon[t - 1])
uncvariance
uncvariance(snp.garch11.fit)
[1] 0.0004364257
> uncmean(snp.garch11.fit)
[1] 0.0001875552
infocriteria(snp.garch11.fit)
Akaike -4.982447
Bayes -4.976050
Shibata -4.982449
Hannan-Quinn -4.980177
> vcov(snp.garch11.fit)
[,1] [,2]
[1,] 8.296207e-08 3.994761e-11
[2,] 3.994761e-11 8.807742e-12
[3,] 3.307207e-08 3.487837e-09
[4,] -1.192944e-07 -2.277728e-08
[,3] [,4]
[1,] 3.307207e-08 -1.192944e-07
[2,] 3.487837e-09 -2.277728e-08
[3,] 3.386259e-05 -3.639961e-05
[4,] -3.639961e-05 8.409941e-05
Newsimpact
ni.garch11 <- newsimpact(snp.garch11.fit)
> plot(ni.garch11$zx, ni.garch11$zy, type="l", lwd=2, col="blue",main="GARCH(1,1) - News Impact", ylab=ni.garch11$yexpr, xlab=ni.garch11$xexpr)
ni.garch11 <- newsimpact(snp.garch11.fit)
> plot(ni.garch11$zx, ni.garch11$zy, type="l", lwd=2, col="blue",main="GARCH(1,1) - News Impact", ylab=ni.garch11$yexpr, xlab=ni.garch11$xexpr)
> egarch11.spec = ugarchspec(variance.model = list(model="eGARCH",
+ garchOrder=c(1,1)), mean.model = list(armaOrder=c(0,0)))
> snp.egarch11.fit = ugarchfit(spec=egarch11.spec, data=ret.snp)
coef(snp.egarch11.fit)
mu omega
4.096138e-05 -8.514104e-02
alpha1 beta1
-1.377602e-02 9.883733e-01
gamma1
1.300730e-01
> ni.egarch11 <- newsimpact(snp.egarch11.fit)
> plot(ni.egarch11$zx, ni.egarch11$zy, type="l", lwd=2, col="blue",
+ main="EGARCH(1,1) - News Impact",
+ ylab=ni.egarch11$yexpr, xlab=ni.egarch11$xexpr)
Ugarch
garch11.spec = ugarchspec(variance.model = list(garchOrder=c(1,1)),mean.model = list(armaOrder=c(0,0)),
+ fixed.pars=list(mu = 0, omega=0.1, alpha1=0.1,beta1 = 0.7))
> garch11.sim = ugarchpath(garch11.spec, n.sim=1000)
snp.garch11.fit = ugarchfit(spec=garch11.spec, data=ret.snp, out.sample=20)
plot(snp.garch11.fit, which='all')


















0 Comments