[R-SIG-Finance] portfolio rebalancing
spencer.graves at prodsyse.com
Sun May 24 04:20:51 CEST 2009
The error "number of items to replace is not a multiple of
replacement length" occurs because shares[, 2] is an xts object with one
row and one column, and you are trying to replace that single element by
(capital/3)/prices["2009-02-02"], which is an xts object with one row
and three columns. Three numbers won't fit into one storage location.
Beyond this, my favorite tool for finding capabilities in
contributed R packages is "RSiteSearch.function":
pr <- RSiteSearch.function('portfolio rebalancing')
nrow(pr) # 0
pb <- RSiteSearch.function('portfolio balancing')
nrow(pb) # 1
HTML(pb) # data sets; not what you want.
These search terms produced nothing, and trying these terms in
RSiteSearch including the email archives failed to produce more. I
seemed to have better results Googling for "R-SIG-Finance portfolio
balancing". Of course, you would need to decide if you found anything
Hope this helps.
Fuchs Ira wrote:
> I'm trying (so far unsuccessfully) to figure out how I might write a
> function (or more likely a set of functions) to backtest a few
> rebalancing algorithms. for example, starting with some amount of
> capital I want to equal weight purchase a set of equities and then
> rebalance in a variety of frequencies (daily, weekly, monthly, and
> perhaps based on % change from equal weights). Getting the prices
> with getSymbols is easy enough but things kind of go downhill from
> there. I know this should be easy for anyone familiar with R but my
> background is APL and whenever I try to do something that I think
> should work, it doesn't. I know this is just because I don't have
> enough R experience but if anyone can suggest any functions that I
> could reuse for this purpose, that would be much appreciated.
> As an example of my bad R intuition:
> Let's say I want the prices of stock tickers MSFT, IBM, ORCL:
> I say
> Now I have 3 data frames which I think would be easier to deal with as
> one so I say
> so far so good.
> Now I have a dataframe with 3 columns each with the adjusted prices of
> a stock.
> I can calculate the number of shares for the equal weight purchase for
> a specific date (2009-01-02] by saying:
> shares=(capital/3)/prices["2009-01-02"] #determine shares
> but now I'd like to do this calculation each day, or week, or month
> and after each calculation determine the new total value and redo the
> equal weighting (or for that matter a more complex weighting).
> functions like to.weekly won;t work because the dataframe is not OHLC.
> Are there other similar functions that will just give me the rows for
> some set of periodic dates?
> Here's where my R intuition starts to break down...I try
> sum(shares*prices["2009-02-02"]) #calculate total share value on
> I get:
>  0
> not quite what I expected..so guessing that multiplying data.frames is
> not good form, I try:
> which works:
> > capital
>  945462
> OK, so now I have a new starting capital value and I can repeat as
> above but with the following day's or week's or month's prices.
> shares=(capital/3)/prices["2009-02-02"] # gives me the number of
> shares to own on 2009-02-02
> but what if I want shares (and the capital values) to be a time series
> so I can see the share and capital amounts by date...I tried
> shares[,2]=(capital/3)/prices["2009-02-02"] gives:
> Error in NextMethod(.Generic) :
> number of items to replace is not a multiple of replacement length
> No doubt this is simple to do...right?
> Of course, the real goal is to have a set of functions that would
> permit easy changes to the frequencies, the threshold for rebalancing
> and so on but maybe some kind soul could put me on the right R way to
> think about this.
> R-SIG-Finance at stat.math.ethz.ch mailing list
> -- Subscriber-posting only.
> -- If you want to post, subscribe first.
More information about the R-SIG-Finance