[R-SIG-Finance] portfolio rebalancing
spencerg
spencer.graves at prodsyse.com
Sun May 24 04:20:51 CEST 2009
Hello:
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":
library(RSiteSearch)
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
relevant there.
Hope this helps.
Spencer
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
>
> getSymbols(c("MSFT","IBM","ORCL"))
>
> Now I have 3 data frames which I think would be easier to deal with as
> one so I say
>
> prices=merge(ORCL[,6],merge(MSFT[,6],IBM[,6]))
>
> 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
> 2009-02-02
>
> I get:
>
> [1] 0
>
> not quite what I expected..so guessing that multiplying data.frames is
> not good form, I try:
>
> capital=sum(shares*as.numeric(prices["2009-02-02"]))
>
> which works:
>
> > capital
> [1] 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.
>
> Thanks.
>
> _______________________________________________
> R-SIG-Finance at stat.math.ethz.ch mailing list
> https://stat.ethz.ch/mailman/listinfo/r-sig-finance
> -- Subscriber-posting only.
> -- If you want to post, subscribe first.
>
More information about the R-SIG-Finance
mailing list