View source: R/realizedMeasures.R
rSemiCov | R Documentation |
Calculate the Realized Semicovariances (rSemiCov).
Let r_{t,i}
be an intraday M x N
return matrix and i=1,...,M
the number of intraday returns. Then, let r_{t,i}^{+} = max(r_{t,i},0)
and r_{t,i}^{-} = min(r_{t,i},0)
.
Then, the realized semicovariance is given by the following three matrices:
\mbox{pos}_t =\sum_{i=1}^{M} r^{+}_{t,i} r^{+'}_{t,i}
\mbox{neg}_t =\sum_{i=1}^{M} r^{-}_{t,i} r^{-'}_{t,i}
\mbox{mixed}_t =\sum_{i=1}^{M} (r^{+}_{t,i} r^{-'}_{t,i} + r^{-}_{t,i} r^{+'}_{t,i})
The mixed covariance matrix will have 0 on the diagonal.
From these three matrices, the realized covariance can be constructed as pos + neg + mixed
.
The concordant semicovariance matrix is pos + neg
.
The off-diagonals of the concordant matrix is always positive, while for the mixed matrix, it is always negative.
rSemiCov(
rData,
cor = FALSE,
alignBy = NULL,
alignPeriod = NULL,
makeReturns = FALSE
)
rData |
an |
cor |
boolean, in case it is |
alignBy |
character, indicating the time scale in which |
alignPeriod |
positive numeric, indicating the number of periods to aggregate over. For example, to aggregate
based on a 5-minute frequency, set |
makeReturns |
boolean, should be |
In the case that cor is TRUE
, the mixed matrix will be an N \times N
matrix filled with NA as mapping the mixed covariance matrix into correlation space is impossible due to the 0-diagonal.
In case the data consists of one day a list of five N \times N
matrices are returned. These matrices are named mixed
, positive
, negative
, concordant
, and rCov
.
The latter matrix corresponds to the realized covariance estimator and is thus named like the function rCov
.
In case the data spans more than one day, the list for each day will be put into another list named according to the date of the estimates.
Emil Sjoerup.
Bollerslev, T., Li, J., Patton, A. J., and Quaedvlieg, R. (2020). Realized semicovariances. Econometrica, 88, 1515-1551.
ICov
for a list of implemented estimators of the integrated covariance.
# Realized semi-variance/semi-covariance for prices aligned
# at 5 minutes.
# Univariate:
rSVar = rSemiCov(rData = sampleTData[, list(DT, PRICE)], alignBy = "minutes",
alignPeriod = 5, makeReturns = TRUE)
rSVar
## Not run:
library("xts")
# Multivariate multi day:
rSC <- rSemiCov(sampleOneMinuteData, makeReturns = TRUE) # rSC is a list of lists
# We extract the covariance between stock 1 and stock 2 for all three covariances.
mixed <- sapply(rSC, function(x) x[["mixed"]][1,2])
neg <- sapply(rSC, function(x) x[["negative"]][1,2])
pos <- sapply(rSC, function(x) x[["positive"]][1,2])
covariances <- xts(cbind(mixed, neg, pos), as.Date(names(rSC)))
colnames(covariances) <- c("mixed", "neg", "pos")
# We make a quick plot of the different covariances
plot(covariances)
addLegend(lty = 1) # Add legend so we can distinguish the series.
## End(Not run)
Add the following code to your website.
For more information on customizing the embed code, read Embedding Snippets.