[R] HAR-RV-CJ Moedel

cursethiscure caolan.harvey6 at mail.dcu.ie
Thu Jul 12 18:59:31 CEST 2012

I am trying to write a loop to forecast realized volatility over successive
days for the purpose of VaR prediction using the HAR-RV-CJ model which is as

    log(RV_t+1) = β_0 + β_CD log(CV_t) + β_CW log(CV_t-5) + β_CM
log(CV_t-22) + β_JD log(J_t + 1) + β_JW log(J_t-5 + 1) + β_JM log(J_t-22 +
1) + e_t

where RV is realized volatility, CV is continuous volatility and J is the
jump which is RV - CV, _t is subscript for time t, which is one day

basically I know how to compute ex post CV and J, and RV and have done in
another loop but need to forecast for half of my sample data to compare to
ex-post estimates of RV.

 but I don't know  how to compute the weekly and monthly estimates _t-5 and
weekly continuous volatility is given as:

    log(CV_t-5) = 1/5 * ∑ _i=1 to 5 log(C_t-i)
and similar for monthly CV and weekly and Monthly J
which I think is:

    cw = apply(embed((log(cv)), 5), 1, sum, na.rm=T) 
    cw = 1/5*(cw)
correct me if I am wrong please. 

I think also the daily lagged CV is:

    lcv = cv[-length(cv)]

Now if I can get the lagged variables correct, how do I run the above
regression so it loops over each successive day?

thanks, If i am missing any vital info please advise me. thanks

the loop for the data that I have used to compute RV and CV to get daily
statistics is:

dollar <- getdat("eurd")
#dollar = dollar[seq(1, nrow(dollar), by =3), ]
tim = strptime(dollar[,1], "%d/%m/%Y %H:%M");
dollar$day = format(tim, "%Y-%m-%d");
##ddx <- row index for each day
ddx = split(seq.int(nrow(dollar)), dollar$day);

dollarbns = data.frame(day=as.Date(names(ddx)), m=NA, rtn=NA, rv=NA, bv=NA,
zg=NA, lzg=NA, zj=NA, zmj=NA, lzm=NA, zgtp=NA, lzgtp=NA, zmjtp=NA, zjtp=NA,
for (i in seq_along(ddx)) {
  ##quotes for day i
  x = dollar$mid[ddx[[i]]];
  n = length(x);
  y = log(x[-1]/x[-n]);#log price difference 
  y2 = y^2
  m = length(y);
  z999 = (qnorm(1 - .001))
  if (m>=260) { 
    ##raw moments
    rtn = sum(y) * 100
    rv = sum(y*y);#realized variance [Y]
    bv = (m/(m-1))*(pi/2)*(sum(abs(y[-1]*y[-m])));#bi-power vairiation
    rj = (rv-bv)/rv
    tmp = apply(embed(y, 4), 1, prod);#y{j}*y{j-1}*y{j-2}*y{j-3}
    tp1 = apply(embed(y, 3), 1, prod)#y{j}*y{j-1}*y{j-2}
    tpq = (mu43^-3)*((m^2)/(m-3))*(sum((abs(tp1))^(4/3)))
    qp =  ((pi*pi)/4)*((m^2)/(m-3))*(sum(abs(tmp)));#quad-power
    ##jump test statistic (10)
    theta = pi*pi/4 + pi - 5;#(6)
    zg = sqrt(m) * (bv - rv) / sqrt(theta*qp); # difference test
    lzg = sqrt(m) * ((log(bv)) - (log(rv))) / sqrt(theta*(qp/(bv^2))); # log
difference test
    zmj = sqrt(m) * ((bv/rv) - 1)/(sqrt((theta)*(sapply((qp/(bv^2)),
function(x) max(x, 1))))) # relative (max) jump
    zj =  sqrt(m) * ((bv/rv) - 1)/(sqrt(theta*(qp/(bv^2))))
    lzm = sqrt(m) * ((log(bv)) - (log(rv))) /
(sqrt((theta)*(sapply((qp/(bv^2)), function(x) max(x, 1))))) # log max
    # tpq bv
    zgtp = sqrt(m) * (bv - rv) / sqrt(theta*tpq); # difference test
    lzgtp = sqrt(m) * ((log(bv)) - (log(rv))) / sqrt(theta*(tpq/(bv^2))); #
log difference test
    zmjtp = sqrt(m) * ((bv/rv) - 1)/(sqrt((theta)*(sapply((tpq/(bv^2)),
function(x) max(x, 1))))) # relative (max) jump
    zjtp =  sqrt(m) * ((bv/rv) - 1)/(sqrt(theta*(tpq/(bv^2))))
    lzmtp = sqrt(m) * ((log(bv)) - (log(rv))) /
(sqrt((theta)*(sapply((tpq/(bv^2)), function(x) max(x, 1))))) # log max
  #  if (abs(zg)>z999 && abs(zj)>z999 && abs(lzg)>z999 && abs(zmj)>z999 &&
abs(lzm)>z999 && abs(zgtp)>z999 && abs(zjtp)>z999 && abs(lzgtp)>z999 &&
abs(zmjtp)>z999 && abs(lzmtp)>z999)
    ##store results for day i
    dollarbns[i,-1] = c(m, rtn, rv, bv, zg, lzg, zmj, zj, lzm, zgtp, lzgtp,
zmjtp, zjtp, lzmtp);   
this loops return the test statistics for how to test for presence of jumps
for my entire data set. I need to estimate the above HAR-RV-CJ so that it
estimates RV for say half the period i have to compare to ex-post RV.

I should add say I want to loop over T days one day at a time.

 I have data for those T days but I need to compare my forecast with the
ex-post realized volatility.


View this message in context: http://r.789695.n4.nabble.com/HAR-RV-CJ-Moedel-tp4636326.html
Sent from the R help mailing list archive at Nabble.com.

More information about the R-help mailing list