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.

Reply via email to