backtest {backtest} | R Documentation |
Conducts a backtest and returns the results as an object of class backtest
.
backtest(x, in.var, ret.var, universe, by.var = NULL, date.var = NULL, id.var = NULL, buckets = 5, natural = FALSE, do.spread = TRUE, by.period = TRUE, overlaps = 1)
x |
A data frame containing the data to be analysed in the backtest. The details of what this data frame must contain are given below. |
in.var |
A character vector which indicates the name of the
column or columns in x to be used as input variables. |
ret.var |
A character vector which indicates the name of the
column or columns in x to be used as return variables. |
by.var |
An optional character value, specifying a second
variable in x to be used for categorising the data. The details
of how categories are created are given below. |
id.var |
An optional character value which indicates the name of
the column in x containing a unique identifier for each
observation. id.var must be specified if natural is
TRUE. |
date.var |
An optional character vector which indicates the name
of the column in x to be used as a date for each
observation. date.var must be specified if natural is
TRUE. In order to call plot , the contents of date.var
must be of class Date or be coercible to an object of class
Date via as.Date . |
buckets |
An optional numeric vector which specifies how many
quantiles to create according to in.var and by.var . |
universe |
An optional expression for selecting a subset of x .
The details of how this expression may be constructed are given below.
|
natural |
An optional logical value. If TRUE, the summary
method returns additional information and the backtest object may be
plotted. The details of how a natural backtest differs from a pooled
backtest are given below.
|
do.spread |
Object of class "logical" . If TRUE the summary
method displays information about the spread between the extreme
quantiles. If FALSE this information is suppressed. Defaults to TRUE.
|
by.period |
Object of class "logical" . If TRUE the quantiles are
recalculated within each date period. If FALSE the quantiles are
calculated all at once. Defaults to TRUE.
|
overlaps |
An object of class "numeric" which specifies
the number of prior periods to include in the current period's
portfolio weights calculation. If overlaps is the default of 1,
backtest behaves as usual and only uses a periods own data to
determine its portfolio. If overlaps is set to
n > 1, a period's portfolio comprises the weighted mean of
portfolio weights from the previous n periods, with period n
having a weight of 1/n.
|
Data frames for backtest
must, at a minimum, contain a column of class
numeric to be referenced by the in.var
and ret.var
arguments.
The in.var
is the primary variable by which the backtest categorises
observations. It must reference a numeric column in x
. Using the
values in x
, backtest
breaks the values into equal sized
quantiles, or buckets
.
The by.var
is the secondary variable by which the backtest categorises
observations. When specifying both in.var
and by.var
, backtest
organises the observations into a n
by j
matrix where n
is the
number of quantiles or categories created for the by.var
and j
is
the number of quantiles created for the in.var
. By default,
backtest
creates 5 quantiles.
If natural
is TRUE, the data and arguments must meet certain
requirements. First, the frequency of the observations and ret.var
must be the same. Second, an id.var
and date.var
are
required. Third, a by.var
is not allowed. Note that the code
does not verify that the backtest is truly natural; backtest
accepts the value passed by the user as valid.
Returns an object of class backtest
.
The functions show
and summary
are used to obtain and
print a short description and longer summary of the results of the
backtest
. The accessor functions counts
, totalCounts
,
marginals
, means
, naCounts
, and turnover
extract different parts of the value returned by backtest
.
Kyle Campbell kyle.w.campbell@williams.edu and Jeff Enos jeff@kanecap.com
data(starmine) ## Backtest with 1 'in.var' and 1 'ret.var' bt <- backtest(starmine, in.var = "smi", ret.var = "ret.0.1.m", by.period = FALSE) summary(bt) ## Backtest with 2 'in.var' values, 1 'ret.var', and a 'by.var' bt <- backtest(starmine, in.var = c("smi", "cap.usd"), ret.var = "ret.0.1.m", by.var = "sector", by.period = FALSE) summary(bt) ## Backtest with 1 'in.var', 1 'by.var', and 1 'ret.var'. Number of ## buckets changed from default of 5 to 4. Change in number of buckets ## only affects the 'in.var' because the 'by.var' column in 'starmine' ## contains character data. For each value in this column there is a ## unique category. bt <- backtest(starmine, in.var = "smi", by.var = "sector", ret.var = "ret.0.1.m", buckets = 4, by.period = FALSE) summary(bt) ## Backtest with 1 'in.var', multiple 'ret.var', and a ## universe restriction bt <- backtest(starmine, in.var = "smi", ret.var = c("ret.0.1.m", "ret.0.6.m"), universe = sector == "HiTec", by.period = FALSE) summary(bt) ## Running a natural backtest with 2 'in.vars', 1 'ret.var' ## 10 buckets bt <- backtest(starmine, in.var = c("smi","cap.usd"), ret.var = "ret.0.1.m", date.var = "date", id.var = "id", buckets = 10, natural = TRUE, by.period = FALSE) summary(bt) ## The same backtest, but calculating quantiles within periods. bt <- backtest(starmine, in.var = c("smi","cap.usd"), ret.var = "ret.0.1.m", date.var = "date", id.var = "id", buckets = 10, natural = TRUE, by.period = TRUE) summary(bt) plot(bt, type = "turnover") plot(bt, type = "return") plot(bt, type = "cumreturn") plot(bt, type = "cumreturn.split")