import numpy as np
p = np.loadtxt('stocks.csv',delimiter=',',skiprows=1)
p = p[:,[0,1]] # consider first two stocks
y = np.diff(np.log(p), n=1, axis=0)*100 # calculate returns
y[:,0] = y[:,0]-np.mean(y[:,0]) # subtract mean
y[:,1] = y[:,1]-np.mean(y[:,1])
T = len(y[:,0])
using CSV, Statistics, DataFrames;
p = CSV.read("stocks.csv", DataFrame);
y1 = diff(log.(p[:,1])).*100; # consider first two stocks
y2 = diff(log.(p[:,2])).*100; # convert prices to returns
y1 = y1 .- mean(y1); # subtract mean
y2 = y2 .- mean(y2);
y = hcat(y1,y2); # combine both series horizontally
T = size(y,1); # get the length of time series
EWMA = np.full([T,3], np.nan)
lmbda = 0.94
S = np.cov(y, rowvar = False)
EWMA[0,] = S.flatten()[[0,3,1]]
for i in range(1,T):
S = lmbda * S + (1-lmbda) * np.transpose(np.asmatrix(y[i-1]))* np.asmatrix(y[i-1])
EWMA[i,] = [S[0,0], S[1,1], S[0,1]]
EWMArho = np.divide(EWMA[:,2], np.sqrt(np.multiply(EWMA[:,0],EWMA[:,1])))
print(EWMArho)
## create a matrix to hold covariance matrix for each t
EWMA = fill(NaN, (T,3))
lambda = 0.94
S = cov(y) # initial (t=1) covar matrix
EWMA[1,:] = [S[1], S[4], S[2]] # extract var and covar
for i in 2:T # loop though the sample
S = lambda*S + (1-lambda)*y[i-1,:]*(y[i-1,:])'
EWMA[i,:] = [S[1], S[4], S[2]] # convert matrix to vector
end
EWMArho = EWMA[:,3]./sqrt.(EWMA[:,1].*EWMA[:,2]); # calculate correlations
## Python does not have a proper OGARCH package at present
## No OGARCH code available in Julia at present
## Python does not have a proper DCC package at present
using ARCHModels, Plots;
## Multivariate models in ARCHModel package
dcc = fit(DCC{1, 1, GARCH{1, 1}}, y; meanspec = NoIntercept);
## Access covariances
H = covariances(dcc);
## Getting correlations
DCCrho = [correlations(dcc)[i][1,2] for i = 1:T];
plot(DCCrho, title = "Correlations", legend = false)
## Python does not have a proper OGARCH/DCC package at present
## No OGARCH code available in Julia at present