R函数periodReturn()不使用调整后的收盘价计算回报

时间:2016-01-13 16:59:13

标签: r time-series quantmod

我是R的新手,并且很难使用periodReturn()来计算VOO的年度总回报,因为结果看起来与我期望的不同。

getSymbols("VOO", from = "2010-12-31")

returns <- periodReturn(VOO, period = 'yearly', type='arithmetic', leading = TRUE)

returns

           yearly.returns
2010-12-31    0.002437750
2011-12-30   -0.002084402
2012-12-31    0.134725864
2013-12-31    1.594722945
2014-12-31    0.113804320
2015-12-31   -0.007802553
2016-01-12   -0.050714152

以2015年为例:

> VOO["2014-12-31"]

           VOO.Open VOO.High VOO.Low VOO.Close VOO.Volume VOO.Adjusted
2014-12-31   190.75   190.91  188.38     188.4    1365800     184.4854

> VOO["2015-12-31"]

           VOO.Open VOO.High VOO.Low VOO.Close VOO.Volume VOO.Adjusted
2015-12-31   188.12   188.76  186.93    186.93    2395200       186.93

这将导致2015年的正回报为0.013251018而上述为-0.007802553。

任何建议都将不胜感激。

2 个答案:

答案 0 :(得分:1)

@Regressionman,我认为'伪造'原始数据是一个可怕的想法!您丢失了数据并破坏了OHLC结构。为什么不使用endpoints? (它位于你的示例中使用的quantmod-package依赖的xts-package中)

> ROC(VOO$VOO.Adjusted[endpoints(VOO, on = 'years'),],type='discrete')
           VOO.Adjusted
2010-12-31           NA
2011-12-30   0.01897461
2012-12-31   0.15992784
2013-12-31   0.32386492
2014-12-31   0.12927916
2015-12-31   0.01325102
2016-01-13  -0.07393138

有关部分年份的问题的更新:

要获得部分年份返回,其中第1次观察不是端点,请将第一个obs添加到端点,如下所示:

ROC(VOO$VOO.Adjusted[c(1,endpoints(VOO, on = 'years')),],type='discrete')

答案 1 :(得分:0)

periodReturn仅适用于收盘价。

算法非常简单,看起来你已经为你的例子做了0.013251018。因此,您可以轻松编写一个函数来自己完成。

或假冒它:

> VOO$VOO.Close = VOO$VOO.Adjusted
> periodReturn(VOO, period = 'yearly', type='arithmetic', leading = TRUE)
           yearly.returns
2010-12-31     0.81795783
2011-12-30     0.01897461
2012-12-31     0.15992784
2013-12-31     0.32386492
2014-12-31     0.12927916
2015-12-31     0.01325102
2016-01-12    -0.05071415