【问题标题】:Calculating monthly returns in R在 R 中计算月收益
【发布时间】:2012-12-21 03:06:49
【问题描述】:

这可能是一个无关紧要的问题,但不幸的是我无法解决它。我有 50 家公司的股票投资组合。我有每家公司在那一天的日期和收盘价。每家公司的数据因股票交易日期而异。

我使用此代码计算每日收益:

return=matrix(NA,nrow(companies),ncol(companies)-1)


for (j in 2:52){
  k=0
  for (i in 1:nrow(companies)){
    if (!is.na(companies[i,j]) & k==0) {
      base= companies[i,j]
      k=k+1
    }
    else {if ( k==1) {return[i,j-1] = ((companies[i,j]-base)/base)*100} 
          else {temp=0}
    }
  }
}
return[1:30,]

我现在想计算相同公司投资组合的每月回报。我用来计算的公式是:

Return = [(Price on Last day of month) - (Price on other day)]*100/(Price on last day of month)

我想在一年中重复此过程 12 个月和 12 年(因为那是我拥有的数据的持续时间)。我打算写一个for循环来做这个计算。有人可以帮我解决这个问题。不幸的是,我不能使用 quantmod 包,因为股票价格来自印度证券交易所,quantmod 无法从中读取价格。

【问题讨论】:

  • 您的数据日期如何? 2001-09-11 ?
  • 如果我能用quantomod 做到这一点,我的第一反应就是格式化我的数据以使用这个好包。
  • @agstudy 是对的:编写一两行代码来读取 IndianStock 格式并将其写入quantmod 识别的格式会简单得多。
  • @CarlWitthoft 也是对的。将数据导入 R 应该不是很困难。但是,如果是,您很可能使用 yahoo 作为数据源。例如,尝试getSymbols(c("BPCL.NS", "HPCL.BO"), src="yahoo")

标签: r for-loop finance portfolio


【解决方案1】:

你应该绝对使用quantmod,你可以。 quantmod 方法 monthlyReturn, dailyReturn, ..., allReturns 需要 xts 时间序列作为输入。因此,如果您有每日数据(例如收盘价)和相应的日期,您可以构建时间序列并将其传递给所需的 quantmod 方法。

例子:

library(package="quantmod")

prices <- c(7655.88, 7612.39, 7612.39, 7778.78, 7756.44, 7776.37)
dates <- as.Date(c("2012-12-26", "2012-12-27", "2012-12-30", "2013-01-01", "2013-01-02", "2013-01-03"))
ts <- xts(prices, dates)

dailyReturn(ts)
monthlyReturn(ts) # this will return bogus data because we don't have one month of data in this example

【讨论】:

  • 实际上,它们不需要xts 对象
  • 我实际上有这些公司过去 12 年(即自 2000 年以来)的数据。但是这些公司中的大多数可用的数据只是 2004 年左右在 yahoo Finance 中的数据,因此我很难使用该软件包。我可以在 quantmod 中使用我在 csv 文件中的数据吗?
  • 06-Jan-00 1355.85 这是我的数据格式。我有 52 列和大约 3300 行数据。
  • 另外,我在使用这个包时面临的另一个问题是用于计算回报的公式。由于我用来计算回报的方法与 quantmod 包使用的不同,我想编写一个代码来计算回报。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-07-22
  • 2021-01-24
  • 1970-01-01
  • 2021-02-08
  • 2022-01-13
  • 2018-06-08
  • 2015-01-28
相关资源
最近更新 更多