#install.packages("quantmod")  
#install.packages("fBasics") 
#install.packages("sn")  
#install.packages("PerformanceAnalytics") 
#install.packages("car") 
#install.packages("tseries")  
#install.packages("forecast") 
library(quantmod) 
library(fBasics)
library(sn)
library(PerformanceAnalytics)
library(car)
library(tseries)
library(forecast)

#CAT
getSymbols("CAT",from="2000-01-03",to="2021-01-21")
da1=CAT
CAT_price=da1[,6]
CAT_logprice=log(CAT_price)
CAT_logreturn=diff(log(CAT_price))
CAT_simplereturn <-exp(CAT_logreturn)-1
par(mfrow=c(2,1))
plot(CAT_logreturn,type='l')
plot(CAT_simplereturn)
#AOT.BK
getSymbols("AOT.BK",from="2000-01-03",to="2021-01-21")
da2=AOT.BK
AOT.BK_price=da2[,6]
AOT.BK_logprice=log(AOT.BK_price)
AOT.BK_logreturn=diff(log(AOT.BK_price))
AOT.BK_simplereturn <-exp(AOT.BK_logreturn)-1
par(mfrow=c(2,1))
plot(AOT.BK_logreturn,type='l')
plot(AOT.BK_simplereturn)

#2.1 CAT's  log return mean, variance, standard deviation, skewness, excess kurtosis, minimum and maximum
table.Stats(CAT_simplereturn)
#2.2 AOT's mean, variance, standard deviation, skewness, excess kurtosis, minimum and maximum
table.Stats(AOT.BK_simplereturn)

#3
CAT_newlogreturn <- CAT_logreturn[2:nrow(CAT_logreturn),]
CAT_newsimplereturn <- CAT_simplereturn[2:nrow(CAT_logreturn),]
par(mfrow=c(1,1))
qqnorm(CAT_newsimplereturn)
qqline(CAT_newsimplereturn, col = 2)
jarque.bera.test(CAT_newsimplereturn)
#since the calculated p-value=2.2e-16 which is less than alpha=0.05. Thus, CAT's simple return data is not normally distributed

#4.1 CAT's  log return mean, variance, standard deviation, skewness, excess kurtosis, minimum and maximum
table.Stats(CAT_logreturn)
#4.2 AOT's log return mean, variance, standard deviation, skewness, excess kurtosis, minimum and maximum
table.Stats(AOT.BK_logreturn)

#5.1 Test for AOT.BK's mean=0
AOT.BK_newlogreturn <- AOT.BK_logreturn[2:nrow(AOT.BK_logreturn),]
t.test(AOT.BK_newlogreturn)
#5.2 Test for CAT's mean=0
t.test(CAT_newlogreturn)

#6
par(mfrow=c(2,1))
qqnorm(CAT_newlogreturn)
qqline(CAT_newlogreturn, col = 2)
qqnorm(AOT.BK_newlogreturn)
qqline(AOT.BK_newlogreturn, col = 2)

#7
table.Stats(CAT_newlogreturn)
t.test(CAT_logreturn, conf.level=0.95)

#8 Test Skewness = 0
T1=length(CAT_newlogreturn)
CAT_s3=skewness(CAT_newlogreturn)
CAT_s3
tst = CAT_s3/sqrt(6/T1)
tst
pv1 = 2*pnorm(tst)
pv1

T2=length(AOT.BK_newlogreturn)
AOT.BK_s3=skewness(AOT.BK_newlogreturn)
AOT.BK_s3
tst2 = AOT.BK_s3/sqrt(6/T2)
tst2
pv2 = 2*pnorm(tst2)
pv2

#9 Test excess kurtosis = 0
CAT_k4 = kurtosis(CAT_newlogreturn)
CAT_k4
tst3 = CAT_k4/sqrt(24/T1)
tst3
pv3 = 2*(1-pnorm(tst3))
pv3

AOT.BK_k4 = kurtosis(AOT.BK_newlogreturn)
AOT.BK_k4
tst4 = AOT.BK_k4/sqrt(24/T2)
tst4
pv4 = 2*(1-pnorm(tst4))
pv4
