Quantitative Finance Stack Exchange is a question and answer site for finance professionals and academics. Join them; it only takes a minute:

Sign up
Here's how it works:
  1. Anybody can ask a question
  2. Anybody can answer
  3. The best answers are voted up and rise to the top

I want to use the R package stochvol to fit a SV model to a DAX training set and use the output to estimate a rolling one-step-ahead forecast:

DAX2log<- (logret(DAX, demean=TRUE))^2
trainset <- DAX2log[1:1912]

SV <- svsample(trainset, priormu = c(-10, 1), priorphi = 
         c(20, 1.1), priorsigma = .1, draws = 50000, burnin = 5000)

SVroll <- function(svsampleOBJ, NumofForecast, Data)
  mu <- summary(svsampleOBJ)$para[1]
      phi <- summary(svsampleOBJ)$para[2]
  sigma <- summary(svsampleOBJ)$para[3]
  HSV <- vector(mode=c("double"),length=NoF)

  for(i in 1:NumofForecast)
    H <- mu + phi*(Data[i] - mu) + sigma
    HSV[i] <- exp(H/2)

 HSV <- SVroll(svsampleOBJ = SV,NumofForecast = 2000,
             Data = DAX2log[1913:length(DAx2log)])

The main problem with this code is that the model becomes deterministic, but I did not manage to extract further draws from the predict function for the rolling forecast.

How can I get those draws from the posterior distribution and is my formula adequate?

In addition, there seems to be some mix up in the units, since HSV is squared daily returns, while the input is in log.

share|improve this question
Hi BeneSP, welcome to quant.SE! Thank you for asking your question here! – Bob Jansen Aug 11 '14 at 15:14
up vote 1 down vote accepted

You might want to have a look at the stochvol vignette (http://cran.r-project.org/web/packages/stochvol/vignettes/article.pdf), where this process is described in detail in Algorithm 1. In particular, if I understand you correctly, what you need is step 4b.

Now to your code:

1) It's not really a rolling forecast, because you estimate the model only once.

2) When predicting, in the first three lines of your function, you only use the posterior mean of the parameters (as a point estimate). Why not use the entire distribution? That way you can also handle parameter uncertainty properly.

3) In an SV model (as opposed to GARCH-type models), volatility is assumed to be a latent random variable, thus when predicting (line H <- ...), you might want to do so by drawing from the corresponding (normal) distribution instead of updating deterministically. That's exactly what predict.svdraws does. You could have a look at the code there and adapt it to your needs.

Best, Gregor

share|improve this answer

Your Answer


By posting your answer, you agree to the privacy policy and terms of service.

Not the answer you're looking for? Browse other questions tagged or ask your own question.