Quantcast

Quantstrat to backtest portfolio strategy. User Defined Weights

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Quantstrat to backtest portfolio strategy. User Defined Weights

Vineet Gupta
Hi,

 

I am trying to use Quantstrat to backtest a portfolio strategy with user
defined weights at each re-balance date. The user defined weights, are given
in a matrix (example shown below)

 

         Date     ABC.UN   ABT.UN ACN.UN ADBE.UW

20 2015-05-15 0.50000000 0.000000    0.5       0

21 2015-05-22 0.50000000 0.000000    0.5       0

22 2015-05-29 0.50000000 0.000000    0.5       0

23 2015-06-05 0.50000000 0.000000    0.5       0

24 2015-06-12 0.08865296 0.411347    0.5       0

25 2015-06-19 0.00000000 0.500000    0.5       0

 

Simply put, how can I backtest such a strategy, using Quantstrat? I have
looked at the rule, 'rulePctEquity', but this appears to only govern maximum
trade sizes.

 

What information does Quantstrat need to re-balance my portfolio at each
user-defined re-balance date?

 

Thanks in advance. Very much appreciated

 

Rgds,

Vineet

 


        [[alternative HTML version deleted]]

_______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Quantstrat to backtest portfolio strategy. User Defined Weights

braverock
On Wed, 2016-12-14 at 14:28 +0000, Vineet Gupta wrote:

> I am trying to use Quantstrat to backtest a portfolio strategy with
> user defined weights at each re-balance date. The user defined
> weights, are given in a matrix (example shown below)
>
>          Date     ABC.UN   ABT.UN ACN.UN ADBE.UW
>
> 20 2015-05-15 0.50000000 0.000000    0.5       0
> 21 2015-05-22 0.50000000 0.000000    0.5       0
> 22 2015-05-29 0.50000000 0.000000    0.5       0
> 23 2015-06-05 0.50000000 0.000000    0.5       0
> 24 2015-06-12 0.08865296 0.411347    0.5       0
> 25 2015-06-19 0.00000000 0.500000    0.5       0
>
> Simply put, how can I backtest such a strategy, using Quantstrat? I
> have looked at the rule, 'rulePctEquity', but this appears to only
> govern maximum trade sizes. 
>
> What information does Quantstrat need to re-balance my portfolio at
> each user-defined re-balance date?
>
> Thanks in advance. Very much appreciated

You haven't really given us enough information to answer your question,
so I'm just guessing based on the information you did provide.

If you are simply 'trading' a portfolio strategy where the portfolio is
rebalanced form one set of weights to another on a specified
rebalancing period, you probably don't want quantstrat at all.

In that case, you likely want the function Return.portfolio in
PerformanceAnalytics or you want to use PortfolioAnalytics to construct
your target portfolio.

Working in returns and weights is different than working in trades and
cash.

rulePctEquity simply governs how much of the total equity is available
for each instrument in the strategy.  It doesn't reduce the size of an
existing position on the rebalance period, if there is one.  It could
certainly be extended to enter orders or transactions to rebalance, if
you wanted it to.

You'll have to provide a minimal reproducible example and more
information about what you'd like to do for someone to be able to help
you further.

Regards,

Brian

_______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.
Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Quantstrat to backtest portfolio strategy. User Defined Weights

Vineet Gupta
Dear Brian,

 

Thank you for your answer.

 

My apologies for not providing enough information. I have a small example at the bottom of this page – it is incomplete, as I could not figure out how to backtest my portfolio strategy with Quantstrat.

 

Your assumptions are correct. I just want to re-balance my portfolio at specified re-balancing dates, according to a set of weights.

 

With the function ‘Return.portfolio’, aside from the R help documentation, do you know of any other guides for how to use it? If there is no documentation available, then I would be happy to share my notes, if I need to make any.

 

Also, does the ‘Return.portfolio’ function return objects to the Blotter environment, that we can analyse in the same way as Quantstrat strategies?

 

Example code

 

library(quantstrat)

startDate <- '2010-01-01'   # start of data

endDate <- '2010-07-31'     # end of data

symbols = c("XLF", "XLP", "XLE", "XLY", "XLV", "XLI", "XLB", "XLK", "XLU")

Sys.setenv(TZ = "UTC")      # set time zone

getSymbols(symbols, src = 'yahoo', index.class = c("POSIXt", "POSIXct"),

           from = startDate, to = endDate, adjust = TRUE)

 

#Initialise currency and instruments

initDate <- '2009-12-31'

initEq <- 1e6

currency("USD")

stock(symbols, currency = "USD", multiplier = 1)

 

#Create our Markowitz weights

m_wts <- data.frame('Date' = seq(as.Date("2010-01-31"), by="month", length.out=7))

invisible(lapply(symbols, function(x) m_wts[[x]] <<- as.numeric(NaN)))

invisible(lapply(1:nrow(m_wts), function(i) m_wts[i, 2:9] <<- round(runif(8)/8,2)))

invisible(lapply(1:nrow(m_wts), function(i) m_wts[i, 10] <<- 1 - sum(m_wts[i, 2:9])))

unlist(lapply(1:nrow(m_wts), function(i) sum(m_wts[i,2:10 ])))

 

initPortf(name = "markowitz", symbols, initDate = initDate)

initAcct(name="markowitz", portfolios="markowitz", initDate = initDate,

                                                                initEq = initEq)

initOrders(portfolio = "markowitz", initDate = initDate)

strategy('markowitz', store = T)

 

 

Rgds,

Vineet

 

-----Original Message-----
From: Brian G. Peterson [mailto:[hidden email]]
Sent: 14 December 2016 14:40
To: Vineet Gupta <[hidden email]>; [hidden email]
Subject: Re: [R-SIG-Finance] Quantstrat to backtest portfolio strategy. User Defined Weights

 

On Wed, 2016-12-14 at 14:28 +0000, Vineet Gupta wrote:

> I am trying to use Quantstrat to backtest a portfolio strategy with

> user defined weights at each re-balance date. The user defined

> weights, are given in a matrix (example shown below)

>

>          Date     ABC.UN   ABT.UN ACN.UN ADBE.UW

>

> 20 2015-05-15 0.50000000 0.000000    0.5       0

> 21 2015-05-22 0.50000000 0.000000    0.5       0

> 22 2015-05-29 0.50000000 0.000000    0.5       0

> 23 2015-06-05 0.50000000 0.000000    0.5       0

> 24 2015-06-12 0.08865296 0.411347    0.5       0

> 25 2015-06-19 0.00000000 0.500000    0.5       0

>

> Simply put, how can I backtest such a strategy, using Quantstrat? I

> have looked at the rule, 'rulePctEquity', but this appears to only

> govern maximum trade sizes.

>

> What information does Quantstrat need to re-balance my portfolio at

> each user-defined re-balance date?

>

> Thanks in advance. Very much appreciated

 

You haven't really given us enough information to answer your question, so I'm just guessing based on the information you did provide.

 

If you are simply 'trading' a portfolio strategy where the portfolio is rebalanced form one set of weights to another on a specified rebalancing period, you probably don't want quantstrat at all.

 

In that case, you likely want the function Return.portfolio in PerformanceAnalytics or you want to use PortfolioAnalytics to construct your target portfolio.

 

Working in returns and weights is different than working in trades and cash.

 

rulePctEquity simply governs how much of the total equity is available for each instrument in the strategy.  It doesn't reduce the size of an existing position on the rebalance period, if there is one.  It could certainly be extended to enter orders or transactions to rebalance, if you wanted it to.

 

You'll have to provide a minimal reproducible example and more information about what you'd like to do for someone to be able to help you further.

 

Regards,

 

Brian


        [[alternative HTML version deleted]]

_______________________________________________
[hidden email] mailing list
https://stat.ethz.ch/mailman/listinfo/r-sig-finance
-- Subscriber-posting only. If you want to post, subscribe first.
-- Also note that this is not the r-help list where general R questions should go.
Loading...