[R-SIG-Finance] Stock Total Returns?
R. Michael Weylandt
michael.weylandt at gmail.com
Sat Feb 18 23:27:59 CET 2012
I think you're over-thinking this: if you have adjusted prices, they
already incorporate splits+dividends --- so the return in adjusted
price *is* the total return. (Up to some fuzziness in how that
adjustment should be done)
Michael
On Sat, Feb 18, 2012 at 5:20 PM, SW <kryp33 at yahoo.com> wrote:
> Hello All,
>
>
> I am relatively new to R and I am still not very comfortable with syntactic and libraries. Is there are any nice way to calculate and plot total returns for stocks which I would define as change in price and paid dividends? I made a code to do that but the loop that constructs prices+dividends looks ugly(see code below). Any suggestions to do it more efficiently? Thanks. Sergey
>
> ############## CODE ##################################
> library(quantmod)
> library(PerformanceAnalytics)
>
> #Time frame
> dt.end = "2010-01-01"
> dt.start = "2007-01-01"
>
> tickers = c('SPY',
> 'XLY',
> 'XLP',
> 'XLE',
> 'XLF',
> 'XLV',
> 'XLI',
> 'XLB',
> 'XLK',
> 'XLU')
> tickers.desc = c('SNP500',
> 'ConsumerCyclicals',
> 'ConsumerStaples',
> 'Energy',
> 'Financials',
> 'HealthCare',
> 'Industrials',
> 'Materials',
> 'Technology',
> 'Utilities')
>
> ############ Get prices ###############################
> setDefaults(getSymbols, warnings=FALSE,auto.assign=FALSE)
> fnPx <- function(i) { return(Ad(getSymbols(tickers[i], from=dt.start,to=dt.end))) }
> ts = lapply(1:length(tickers), fnPx)
> ###########################################################################
>
> ############ Get Dividends ################################
> fnDiv<- function(i) { return(getDividends(tickers[i], from=dt.start,to=dt.end,auto.assign=FALSE)) }
> div = lapply(1:length(tickers), fnDiv)
> ###########################################################################
>
> ########### Create Prices + Dividends (UGLY !!!!) #####################
> fnTotPx <- function(i)
> {
> ret = ts[[i]]
> for(j in 1:length(div[[i]]))
> {
> row = div[[i]][j,]
> tm = time(row)
> val = as.double(row[1,1])
> iFwd = paste(tm,"::",sep='')
> iBk = paste("::",tm-1,sep='')
> unch = ret[iBk]
> chg = ret[iFwd]+val
> ret = rbind(unch,chg)
> }
> return(ret)
> }
> totPx = lapply(1:length(tickers), fnTotPx)
> ############################################################################
>
>
> ################ Calc Total Returns ##########################
> fnRet <- function(i) { return(periodReturn(totPx[[i]],period='daily')) }
> ts.ret = lapply(1:length(tickers), fnRet)
>
> ################ Plot Total Returns ##########################
> ts.ret.df = as.data.frame(ts.ret)
> colnames(ts.ret.df)=tickers.desc
> chart.CumReturns(ts.ret.df, main="Cumulative Returns",geometric=FALSE,legend.loc="bottomleft")
> ############################################################################
>
> _______________________________________________
> 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