Compute Returns
Convert prices into returns.
returns(x, ...) ## Default S3 method: returns(x, t = NULL, period = NULL, complete.first = TRUE, pad = NULL, position = NULL, weights = NULL, rebalance.when = NULL, lag = 1, ...) ## S3 method for class 'zoo' returns(x, period = NULL, complete.first = TRUE, pad = NULL, position = NULL, weights = NULL, rebalance.when = NULL, lag = 1, ...) ## S3 method for class 'p_returns' print(x, ..., year.rows = TRUE, month.names = NULL, zero.print = "0", plus = FALSE, digits = 1, na.print = NULL) ## S3 method for class 'p_returns' toLatex(object, ..., year.rows = TRUE, ytd = "YTD", month.names = NULL, eol = "\\\\", stand.alone = FALSE) ## S3 method for class 'p_returns' toHTML(x, ..., year.rows = TRUE, ytd = "YTD", month.names = NULL, stand.alone = TRUE, table.style = NULL, table.class = NULL, th.style = NULL, th.class = NULL, td.style = "text-align:right; padding:0.5em;", td.class = NULL, tr.style = NULL, tr.class = NULL, browse = FALSE) .returns(x, pad = NULL, lag)
x |
for the default method, a For |
t |
timestamps. See arguments |
period |
Typically All returns are computed as simple returns. They
will only be annualised with option |
complete.first |
logical. For holding-period returns such an monthly or yearly, should the first period (if incomplete) be used. |
pad |
either |
position |
either a numeric vector of the same length as the
number of assets (i.e. |
weights |
either a numeric vector of the same length as the
number of assets (i.e. |
rebalance.when |
logical or numeric. If |
... |
further arguments to be passed to methods |
year.rows |
logical. If |
zero.print |
character. How to print zero values. |
na.print |
character. How to print |
plus |
logical. Add a ‘ |
lag |
The lag for computing returns. A positive integer,
defaults to one; ignored for time-weighted returns
or if |
object |
an object of class |
month.names |
character: names of months. Default is an
abbreviated month name as provided by the
locale. That may cause trouble, notably with
|
digits |
number of digits in table |
ytd |
header for YTD |
eol |
character |
stand.alone |
logical or character |
table.class |
character |
table.style |
character |
th.class |
character |
th.style |
character |
td.class |
character |
td.style |
character |
tr.class |
character |
tr.style |
character |
browse |
logical: open table in browser? |
returns
is a generic function. It computes
simple returns: current values divided by prior
values minus one. The default method works for
numeric vectors/matrices. The function
.returns
does the actual computations and may
be used when a ‘raw’ return computation is
needed.
When a timestamp is available, returns
can
compute returns for specific calendar periods. See
argument period
.
returns
may compute returns for a portfolio
specified in weights
or position
. The
portfolio is rebalanced at rebalance.when
; the
default is every period. Weights need not sum to
one. A zero-weight portfolio, or a portfolio that never
rebalances (e.g. with rebalance.when
set to
FALSE
), will result in a zero return.
rebalance.when
may either be logical,
integers or of the same class as a timestamp
(e.g. Date
).
If called as returns(x)
: a numeric vector or
matrix, possibly with a class attribute (e.g. for a
zoo
series).
In some cases, additional attributes may be attached:
when portfolio returns were computed (i.e. argument
weights
was specified), there are attributes
holdings
and contributions
. For
holding-period returns, there may be a logical attribute
is.annualised
, and an attribute from.to
,
which tells the start and end date of the holding period.
Enrico Schumann <es@enricoschumann.net>
x <- 101:105 returns(x) returns(x, pad = NA) returns(x, pad = NA, lag = 2) ## monthly returns t <- seq(as.Date("2012-06-15"), as.Date("2012-12-31"), by = "1 day") x <- seq_along(t) + 1000 returns(x, t = t, period = "month") returns(x, t = t, period = "month", complete.first = FALSE) ### formatting print(returns(x, t = t, period = "month"), plus = TRUE, digits = 0) ## returns per year (annualised returns) returns(x, t = t, period = "ann") ## less than one year, not annualised returns(x, t = t, period = "ann!") ## less than one year, *but* annualised is.ann <- function(x) attr(x, "is.annualised") is.ann(returns(x, t = t, period = "ann")) ## FALSE is.ann(returns(x, t = t, period = "ann!")) ## TRUE ## with weights and fixed rebalancing times prices <- cbind(p1 = 101:105, p2 = rep(100, 5)) R <- returns(prices, weights = c(0.5, 0.5), rebalance.when = 1) ## ... => resulting weights h <- attr(R, "holdings") h*prices / rowSums(h*prices) ## p1 p2 ## [1,] 0.5000000 0.5000000 ## <== only initial weights are .5/.5 ## [2,] 0.5024631 0.4975369 ## [3,] 0.5049020 0.4950980 ## [4,] 0.5073171 0.4926829 ## [5,] 0.5097087 0.4902913
Please choose more modern alternatives, such as Google Chrome or Mozilla Firefox.