PortfolioAnalytics with turnover constraint

Previous Topic Next Topic
 
classic Classic list List threaded Threaded
3 messages Options
Reply | Threaded
Open this post in threaded view
|

PortfolioAnalytics with turnover constraint

Bos, Roger-2
Dear All,

I am trying to use the PortfolioAnalytics package to run an optimization with a turnover constraint.  I didn't see any examples in the demos.  The example code below runs in I set the portfolio up using equal weights:

init.portf <- portfolio.spec(assets=funds)

But if I instead try to use a named vector of initial weights, as described in the docs, as such:

init.portf <- portfolio.spec(assets=wgts) # Does not work with this line added

I get an error when I try to run the optimization:

11:57:01  > minStdDev.DE <- optimize.portfolio(R=R, portfolio=init.portf, optimize_method="DEoptim", search_size = 2000)
 Show Traceback

 Rerun with Debug
 Error in result[2, ] <- rep(1/length(seed), length(seed)) :
  incorrect number of subscripts on matrix

The portfolio.spec function did take in the initial weights properly, as shown using the print function:

11:57:01  > print.default(init.portf)
$assets
   CA CTAG  DS  EM EQM
1 0.1  0.3 0.4 0.1 0.1

Can anyone provide me with a working example using both initial weights and a turnover constraint?  I don't care it if uses DEoptim or some other optimizer, I just want to get started with something.

Thanks,

Roger


library(PortfolioAnalytics)

data(edhec)
R <- edhec[, 1:5]
colnames(R) <- c("CA", "CTAG", "DS", "EM", "EQM")
funds <- colnames(R)
wgts <- data.frame("CA" = .1, "CTAG" = .3, "DS" = .4, "EM" = .1, "EQM" = .1)
wgts

# Set up portfolio with objectives and constraints
init.portf <- portfolio.spec(assets=funds)
init.portf <- portfolio.spec(assets=wgts) # Does not work with this line added
init.portf <- add.constraint(portfolio = init.portf, type="weight_sum", min_sum = .99, max_sum = 1.01)
init.portf <- add.constraint(portfolio = init.portf, type="long_only")
init.portf <- add.constraint(portfolio = init.portf, type="turnover", turnover_target = .2)

# Add an objective to minimize portfolio standard deviation
init.portf <- add.objective(portfolio=init.portf, type="risk", name="StdDev")
print.default(init.portf)

# Solve with DEoptim
minStdDev.DE <- optimize.portfolio(R=R, portfolio=init.portf, optimize_method="DEoptim", search_size = 2000)
minStdDev.DE





This message and any attachments are for the intended recipient’s use only. This message may contain confidential, proprietary or legally privileged information. No right to confidential or privileged treatment of this message is waived or lost by an error in transmission.
If you have received this message in error, please immediately notify the sender by e-mail, delete the message, any attachments and all copies from your system and destroy any hard copies. You must not, directly or indirectly, use, disclose, distribute, print or copy any part of this message or any attachments if you are not the intended recipient.




_______________________________________________
[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.
Reply | Threaded
Open this post in threaded view
|

Re: PortfolioAnalytics with turnover constraint

Ross Bennett
Roger,

The "assets" argument for the portfolio.spec function should be a vector.
You are passing in a data.frame object.

Try defining your wgts object as follows
wgts <- c("CA" = .1, "CTAG" = .3, "DS" = .4, "EM" = .1, "EQM" = .1)

Best,
Ross


On Thu, Jan 18, 2018 at 11:06 AM, Bos, Roger <[hidden email]>
wrote:

> Dear All,
>
> I am trying to use the PortfolioAnalytics package to run an optimization
> with a turnover constraint.  I didn't see any examples in the demos.  The
> example code below runs in I set the portfolio up using equal weights:
>
> init.portf <- portfolio.spec(assets=funds)
>
> But if I instead try to use a named vector of initial weights, as
> described in the docs, as such:
>
> init.portf <- portfolio.spec(assets=wgts) # Does not work with this line
> added
>
> I get an error when I try to run the optimization:
>
> 11:57:01  > minStdDev.DE <- optimize.portfolio(R=R, portfolio=init.portf,
> optimize_method="DEoptim", search_size = 2000)
>  Show Traceback
>
>  Rerun with Debug
>  Error in result[2, ] <- rep(1/length(seed), length(seed)) :
>   incorrect number of subscripts on matrix
>
> The portfolio.spec function did take in the initial weights properly, as
> shown using the print function:
>
> 11:57:01  > print.default(init.portf)
> $assets
>    CA CTAG  DS  EM EQM
> 1 0.1  0.3 0.4 0.1 0.1
>
> Can anyone provide me with a working example using both initial weights
> and a turnover constraint?  I don't care it if uses DEoptim or some other
> optimizer, I just want to get started with something.
>
> Thanks,
>
> Roger
>
>
> library(PortfolioAnalytics)
>
> data(edhec)
> R <- edhec[, 1:5]
> colnames(R) <- c("CA", "CTAG", "DS", "EM", "EQM")
> funds <- colnames(R)
> wgts <- data.frame("CA" = .1, "CTAG" = .3, "DS" = .4, "EM" = .1, "EQM" =
> .1)
> wgts
>
> # Set up portfolio with objectives and constraints
> init.portf <- portfolio.spec(assets=funds)
> init.portf <- portfolio.spec(assets=wgts) # Does not work with this line
> added
> init.portf <- add.constraint(portfolio = init.portf, type="weight_sum",
> min_sum = .99, max_sum = 1.01)
> init.portf <- add.constraint(portfolio = init.portf, type="long_only")
> init.portf <- add.constraint(portfolio = init.portf, type="turnover",
> turnover_target = .2)
>
> # Add an objective to minimize portfolio standard deviation
> init.portf <- add.objective(portfolio=init.portf, type="risk",
> name="StdDev")
> print.default(init.portf)
>
> # Solve with DEoptim
> minStdDev.DE <- optimize.portfolio(R=R, portfolio=init.portf,
> optimize_method="DEoptim", search_size = 2000)
> minStdDev.DE
>
>
>
>
>
> This message and any attachments are for the intended recipient’s use
> only. This message may contain confidential, proprietary or legally
> privileged information. No right to confidential or privileged treatment of
> this message is waived or lost by an error in transmission.
> If you have received this message in error, please immediately notify the
> sender by e-mail, delete the message, any attachments and all copies from
> your system and destroy any hard copies. You must not, directly or
> indirectly, use, disclose, distribute, print or copy any part of this
> message or any attachments if you are not the intended recipient.
>
>
>
>
> _______________________________________________
> [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.

        [[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.
Reply | Threaded
Open this post in threaded view
|

Re: PortfolioAnalytics with turnover constraint

Bos, Roger-2
That worked!  Thanks so much Ross. I really look forward to using this package.

-----Original Message-----
From: R-SIG-Finance [mailto:[hidden email]] On Behalf Of Ross Bennett
Sent: Thursday, January 18, 2018 12:26 PM
To: [hidden email]
Subject: Re: [R-SIG-Finance] PortfolioAnalytics with turnover constraint

Roger,

The "assets" argument for the portfolio.spec function should be a vector.
You are passing in a data.frame object.

Try defining your wgts object as follows wgts <- c("CA" = .1, "CTAG" = .3, "DS" = .4, "EM" = .1, "EQM" = .1)

Best,
Ross


On Thu, Jan 18, 2018 at 11:06 AM, Bos, Roger <[hidden email]>
wrote:

> Dear All,
>
> I am trying to use the PortfolioAnalytics package to run an
> optimization with a turnover constraint.  I didn't see any examples in
> the demos.  The example code below runs in I set the portfolio up using equal weights:
>
> init.portf <- portfolio.spec(assets=funds)
>
> But if I instead try to use a named vector of initial weights, as
> described in the docs, as such:
>
> init.portf <- portfolio.spec(assets=wgts) # Does not work with this
> line added
>
> I get an error when I try to run the optimization:
>
> 11:57:01  > minStdDev.DE <- optimize.portfolio(R=R,
> portfolio=init.portf, optimize_method="DEoptim", search_size = 2000)
> Show Traceback
>
>  Rerun with Debug
>  Error in result[2, ] <- rep(1/length(seed), length(seed)) :
>   incorrect number of subscripts on matrix
>
> The portfolio.spec function did take in the initial weights properly,
> as shown using the print function:
>
> 11:57:01  > print.default(init.portf)
> $assets
>    CA CTAG  DS  EM EQM
> 1 0.1  0.3 0.4 0.1 0.1
>
> Can anyone provide me with a working example using both initial
> weights and a turnover constraint?  I don't care it if uses DEoptim or
> some other optimizer, I just want to get started with something.
>
> Thanks,
>
> Roger
>
>
> library(PortfolioAnalytics)
>
> data(edhec)
> R <- edhec[, 1:5]
> colnames(R) <- c("CA", "CTAG", "DS", "EM", "EQM") funds <- colnames(R)
> wgts <- data.frame("CA" = .1, "CTAG" = .3, "DS" = .4, "EM" = .1, "EQM"
> =
> .1)
> wgts
>
> # Set up portfolio with objectives and constraints init.portf <-
> portfolio.spec(assets=funds) init.portf <- portfolio.spec(assets=wgts)
> # Does not work with this line added init.portf <-
> add.constraint(portfolio = init.portf, type="weight_sum", min_sum =
> .99, max_sum = 1.01) init.portf <- add.constraint(portfolio =
> init.portf, type="long_only") init.portf <- add.constraint(portfolio =
> init.portf, type="turnover", turnover_target = .2)
>
> # Add an objective to minimize portfolio standard deviation init.portf
> <- add.objective(portfolio=init.portf, type="risk",
> name="StdDev")
> print.default(init.portf)
>
> # Solve with DEoptim
> minStdDev.DE <- optimize.portfolio(R=R, portfolio=init.portf,
> optimize_method="DEoptim", search_size = 2000) minStdDev.DE
>
>
>
>
>
> This message and any attachments are for the intended recipient’s use
> only. This message may contain confidential, proprietary or legally
> privileged information. No right to confidential or privileged
> treatment of this message is waived or lost by an error in transmission.
> If you have received this message in error, please immediately notify
> the sender by e-mail, delete the message, any attachments and all
> copies from your system and destroy any hard copies. You must not,
> directly or indirectly, use, disclose, distribute, print or copy any
> part of this message or any attachments if you are not the intended recipient.
>
>
>
>
> _______________________________________________
> [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.

[[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.



This message and any attachments are for the intended recipient’s use only. This message may contain confidential, proprietary or legally privileged information. No right to confidential or privileged treatment of this message is waived or lost by an error in transmission.
If you have received this message in error, please immediately notify the sender by e-mail, delete the message, any attachments and all copies from your system and destroy any hard copies. You must not, directly or indirectly, use, disclose, distribute, print or copy any part of this message or any attachments if you are not the intended recipient.




_______________________________________________
[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.