Thanks, Brian! I implemented the following: ---------------------------------------------------------------------------------------------- data("edhec") returns <- edhec[,1:12] colnames(returns) <- c("CA","CTAG","DS","EM","EN","ED","FIA","GMLS","MA","RV","SS","FF") print(head(returns,5)) fund.names <- colnames(returns)
#Giving Portfolio Specifications pspec <- portfolio.spec(assets=fund.names) print.default(pspec) #Adding Constraints #Full investment constraint: sum of all x_i is 1 pspec <- add.constraint(portfolio= pspec, type = "weight_sum",min=0.99,max=1.01) #Box constraint: value of x_i varies between 0.2 to 0.8 pspec <- add.constraint(portfolio= pspec, type="box", min = 0.01, max = 0.25) #Cardinality constraint pspec <- add.constraint(portfolio= pspec, type="position_limit",max_pos = 6,enabled=TRUE) #Adding Objective pspec <- add.objective(portfolio=pspec, type="risk", name="var") pspec <- add.objective(portfolio=pspec, type="return", name="mean") opt_meanvar <- optimize.portfolio(R=returns,portfolio = pspec, optimize_method="pso", trace=TRUE) ------------------------------------------------------------------------------------------ Results: Optimal Weights: CA CTAG DS EM EN ED FIA GMLS MA RV SS FF 0.1319 0.0551 0.0312 0.1312 0.1127 0.1467 0.0641 0.0218 0.0805 0.1101 0.0296 0.0952 _____________________________________________________ I obtained weights for all 12 assets. That's why I was not sure whether position_limit constraint is same as cardinality constraint. On Mon, Sep 19, 2016 at 8:32 PM, Brian G. Peterson <br...@braverock.com> wrote: > On Mon, 2016-09-19 at 20:22 +0530, Abhay Bhadani wrote: > > I just started exploring PortfolioAnalytics package. > > > > Similar to setting up custom objective functions, is there a way to set > up > > custom constraints too? > > > > I would like to know how to set up cardinality constraint (i.e., limiting > > number of assets in a portfolio). > > cardinality constraints are already supported via the 'position_limit' > constraint which is an integer constraint limiting the maximum number of > non-zero weight positions in the portfolio. It may be added like this: > > > pspec <- add.constraint(portfolio=pspec, > type="position_limit", > max_pos=3, > enabled=TRUE) > > assuming that your portfolio specification object is 'pspec'. > > As with other constraint types, this may not be efficiently supported by > all optimization engines. (This is a limitation of the underlying > optimizers/solvers, not of PortfolioAnalytics). > > On a more general note, any constraint may be expressed as an objective > by creating a penalty for violating the constraint. As noted above, > this may lead to very inefficient or non-converging optimization. > > Regards, > > Brian > > -- > Brian G. Peterson > http://braverock.com/brian/ > Ph: 773-459-4973 > IM: bgpbraverock > > > > > [[alternative HTML version deleted]] _______________________________________________ R-SIG-Finance@r-project.org 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.