[R-SIG-Finance] XTS - endpoints omits price changes

Jeff Ryan jeff.a.ryan at gmail.com
Thu Jul 17 03:39:17 CEST 2008


An alternate (simpler) approach using 'quantmod':

> monthlyReturn(x[,'Close'],type='log')
         monthly.returns
Jan 2007     0.019013286
Feb 2007    -0.016934043
Mar 2007     0.004605120
Apr 2007     0.054321097
May 2007     0.031061724
Jun 2007     0.003999584
Jul 2007    -0.001471671
Aug 2007     0.027802621
Sep 2007     0.050668995
Oct 2007     0.068045785
Nov 2007    -0.069992826
Dec 2007    -0.001755584

> sum(monthlyReturn(x[,'Close'],type='log'))
[1] 0.1693641

> yearlyReturn(x[,'Close'],type='log')
           yearly.returns
2007-12-31      0.1693641

What is being called by periodReturn internally:
> Delt(Cl(to.monthly(x)),type='log')
           Delt.1.log
Jan 2007           NA
Feb 2007 -0.016934043
Mar 2007  0.004605120
Apr 2007  0.054321097
May 2007  0.031061724
Jun 2007  0.003999584
Jul 2007 -0.001471671
Aug 2007  0.027802621
Sep 2007  0.050668995
Oct 2007  0.068045785
Nov 2007 -0.069992826
Dec 2007 -0.001755584

see ?periodReturn for more info on formats and options.

Jeff
On Wed, Jul 16, 2008 at 4:30 PM, James <j at jtoll.com> wrote:
> Hi,
>
>
> I've been learning to use the XTS package and have run into a problem.  If I
> calculate monthly log normal price relatives as such:
>
>> df<-yahooSeries("QQQQ", from = "2007-01-01", to = "2007-12-31",
>> returnClass=c("data.frame"))
>> x<-as.xts(df)
>> names(df)<-c("Open","High","Low","Close","Volume")
>> period.apply(x$Close, INDEX=endpoints(x, 'months'), FUN=function(x)
>> sum(diff(log(x))))
> 2007-01-31   2007-02-28   2007-03-30   2007-04-30   2007-05-31   2007-06-29
>   2007-07-31   2007-08-31   2007-09-28
>  0.019013286 -0.015344398  0.009231545  0.052943687  0.027803331
>  0.003367007 -0.010464725  0.020048207  0.050668995
>  2007-10-31   2007-11-30   2007-12-31
>  0.056634772 -0.051098382  0.006660162
>
> What happens is that the price change between the last day of the previous
> month and the first day of the current month is ignored for all 12 months.
>  This is a problem because I should, at least in my opinion, be able to add
> all twelve monthly changes to get the yearly change.  And that should be the
> same as:
>
>> period.apply(x$Close, INDEX=endpoints(x, 'years'), FUN=function(x)
>> sum(diff(log(x))))
> 2007-12-31
>  0.1693641
>
> But it's not, because 12 daily returns have been left out.  Is there a way
> to change this behavior, so that any given month, or period, will include
> all the price changes?
>
> Thanks,
>
> James
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only.
> -- If you want to post, subscribe first.
>



-- 
Jeffrey Ryan
jeffrey.ryan at insightalgo.com

ia: insight algorithmics
www.insightalgo.com



More information about the R-SIG-Finance mailing list