这可能是一个微不足道的问题,但不幸的是我无法解决它。我有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无法读取价格。
答案 0 :(得分: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