calculate simple or compound returns from prices

`Return.calculate(prices, method = c("discrete", "log", "difference"))`CalculateReturns(prices, method = c("discrete", "log"))

prices

data object containing ordered price observations

method

calculate "discrete" or "log" returns, default discrete(simple)

Two requirements should be made clear. First, the function
`Return.calculate`

assumes regular price data. In this case, we
downloaded monthly close prices. Prices can be for any time scale, such as
daily, weekly, monthly or annual, as long as the data consists of regular
observations. Irregular observations require time period scaling to be
comparable. Fortunately, `to.period`

in the `xts`

package, or the `aggregate.zoo`

in the `zoo`

package
supports supports management and conversion of irregular time series.

Second, if corporate actions, dividends, or other adjustments such as time-
or money-weighting are to be taken into account, those calculations must be
made separately. This is a simple function that assumes fully adjusted close
prices as input. For the IBM timeseries in the example below, dividends and
corporate actions are not contained in the "close" price series, so we end
up with "price returns" instead of "total returns". This can lead to
significant underestimation of the return series over longer time periods.
To use adjusted returns, specify `quote="AdjClose"`

in
`get.hist.quote`

, which is found in package
`tseries`

.

We have changes the default arguments and settings for `method`

from `compound`

and `simple`

to `discrete`

and
`log`

and `discrete`

to avoid confusing between the return type
and the chaining method. In most of the rest of `PerformanceAnalytics`

,
compound and simple are used to refer to the *return chaining* method used for the returns.
The default for this function is to use discrete returns, because most other package
functions use compound chaining by default.

Bacon, C. *Practical Portfolio Performance Measurement and
Attribution*. Wiley. 2004. Chapter 2

# NOT RUN { # } # NOT RUN { require(quantmod) prices = getSymbols("IBM", from = "1999-01-01", to = "2007-01-01") # } # NOT RUN { # } # NOT RUN { R.IBM = Return.calculate(xts(prices), method="discrete") colnames(R.IBM)="IBM" chart.CumReturns(R.IBM,legend.loc="topleft", main="Cumulative Daily Returns for IBM") round(R.IBM,2) # }