[R-SIG-Finance] Excessive data needed for volatility{TTR} calculation?

Joshua Ulrich josh.m.ulrich at gmail.com
Sat May 28 05:39:58 CEST 2011


Hi James,

On Fri, May 27, 2011 at 9:33 PM, J Toll <jctoll at gmail.com> wrote:
> Hi again,
>
> I've been trying to figure out the problem and I believe there is a
> problem with the vectorization in volatility, which results in the
> volatility calculations for the close to close method being
> inaccurate.  I believe the issue is with this part of line 14.
>
> runSum((r - rBar)^2, n - 1)
>
> The first 9 r all have to be differenced against the same rBar, not a
> running sum of rBars.  I believe a better way to accomplish this would
> be:
>
> s <- sqrt(N) * runSD(r, (n -1))
>
>> volatility
> function (OHLC, n = 10, calc = "close", N = 260, ...)
> {
>    OHLC <- try.xts(OHLC, error = as.matrix)
>    calc <- match.arg(calc, c("close", "garman.klass", "parkinson",
>        "rogers.satchell", "gk.yz", "yang.zhang"))
>    if (calc == "close") {
>        if (NCOL(OHLC) == 1) {
>            r <- ROC(OHLC[, 1], 1, ...)
>        }
>        else {
>            r <- ROC(OHLC[, 4], 1, ...)
>        }
>        rBar <- runSum(r, n - 1)/(n - 1)
>        s <- sqrt(N/(n - 2) * runSum((r - rBar)^2, n - 1))       # line 14
>    }
>
> Please let me know if this makes sense to anyone else, or if I'm
> mistaken.  Thanks.
>
> James
>
>
>
Thanks for digging into this.  I've recently received one or two
emails about this off-list, but have not had time to look into the
issue.

I think your solution will work, but using 'n' instead of 'n-1'.  The
code below shows the same results using your solution and a formula
similar to the one found here (which I mis-interpreted when I
originally wrote the function):
http://web.archive.org/web/20081224134043/http://www.sitmo.com/eq/172

set.seed(21)
N <- 260
n <- 100
r <- rnorm(n)/100
last(sqrt(N) * runSD(r, n))
sqrt(N/(n-1)*sum((r-mean(r))^2))

Thanks!
--
Joshua Ulrich  |  FOSS Trading: www.fosstrading.com



> On Fri, May 27, 2011 at 6:52 PM, J Toll <jctoll at gmail.com> wrote:
>> Hi,
>>
>> I have been using the volatility function from the TTR package and I
>> noticed something that I thought was a bit unusual. I expected that I
>> should be able to calculate the default 10-day volatility using the
>> close estimator starting with 10 or maybe 11 days of data.  That's not
>> what I found.  It appears that 18 days of data is necessary to
>> calculate a 10-day volatility.  For example:
>>
>>> getSymbols("SPY")
>> [1] "SPY"
>>> volatility(tail(SPY, 10), n = 10, calc = "close", N = 260)
>> Error in `[.xts`(x, beg:(n + beg - 1)) : subscript out of bounds
>>> volatility(tail(SPY, 11), n = 10, calc = "close", N = 260)
>> Error in `[.xts`(x, beg:(n + beg - 1)) : subscript out of bounds
>>> volatility(tail(SPY, 18), n = 10, calc = "close", N = 260)
>>                 [,1]
>> 2011-05-03         NA
>> 2011-05-04         NA
>> 2011-05-05         NA
>> - edited for brevity -
>> 2011-05-23         NA
>> 2011-05-24         NA
>> 2011-05-25         NA
>> 2011-05-26 0.09481466
>>
>> Stranger still (at least to me), it appears that 38 days worth of data
>> is necessary to start calculating a 20-day volatility.
>>
>>> volatility(tail(SPY, 37), n = 20, calc = "close", N = 260)
>> Error in `[.xts`(x, beg:(n + beg - 1)) : subscript out of bounds
>>> volatility(tail(SPY, 38), n = 20, calc = "close", N = 260)
>>                [,1]
>> 2011-04-04        NA
>> 2011-04-05        NA
>> 2011-04-06        NA
>>  - edited for brevity -
>> 2011-05-23        NA
>> 2011-05-24        NA
>> 2011-05-25        NA
>> 2011-05-26 0.1088309
>>
>> 58 days of data is necessary for a 30-day volatility calculation.
>> From looking at the code for the volatility function, I'm not seeing
>> why so much additional data is needed to calculate the volatility.
>> Does anybody have an idea of why so much additional data is necessary?
>>  Thanks.
>>
>> James
>>
>> R version 2.13.0 (2011-04-13)
>> Copyright (C) 2011 The R Foundation for Statistical Computing
>> ISBN 3-900051-07-0
>> Platform: x86_64-apple-darwin9.8.0/x86_64 (64-bit)
>>
>
> _______________________________________________
> R-SIG-Finance at r-project.org mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only. If you want to post, subscribe first.
> -- Also note that this is not the r-help list where general R questions should go.



More information about the R-SIG-Finance mailing list