Main Content

Supported Constraints for Portfolio Optimization Using Portfolio Objects

The final element for a complete specification of a portfolio optimization problem is the set of feasible portfolios, which is called a portfolio set. A portfolio set XRn is specified by construction as the intersection of sets formed by a collection of constraints on portfolio weights. A portfolio set necessarily and sufficiently must be a nonempty, closed, and bounded set.

When setting up your portfolio set, ensure that the portfolio set satisfies these conditions. The most basic or “default” portfolio set requires portfolio weights to be nonnegative (using the lower-bound constraint) and to sum to 1 (using the budget constraint). The most general portfolio set handled by the portfolio optimization tools (Portfolio, PortfolioCVaR, and PortfolioMAD objects) can have any of these constraints:

  • Linear inequality constraints

  • Linear equality constraints

  • 'Simple' Bound constraints

  • 'Conditional' Bound constraints

  • Budget constraints

  • Group constraints

  • Group ratio constraints

  • Average turnover constraints

  • One-way turnover constraints

  • Tracking error constraints (only for Portfolio object)

  • Cardinality constraints

Linear Inequality Constraints

Linear inequality constraints are general linear constraints that model relationships among portfolio weights that satisfy a system of inequalities. Use setInequality to set linear inequality constraints. Linear inequality constraints take the form

AIxbI

where:

x is the portfolio (n vector).

AI is the linear inequality constraint matrix (nI-by-n matrix).

bI is the linear inequality constraint vector (nI vector).

n is the number of assets in the universe and nI is the number of constraints.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify linear inequality constraints are:

  • AInequality for AI

  • bInequality for bI

  • NumAssets for n

The default is to ignore these constraints.

Linear Equality Constraints

Linear equality constraints are general linear constraints that model relationships among portfolio weights that satisfy a system of equalities. Use setEquality to set linear equality constraints. Linear equality constraints take the form

AEx=bE

where:

x is the portfolio (n vector).

AE is the linear equality constraint matrix (nE-by-n matrix).

bE is the linear equality constraint vector (nE vector).

n is the number of assets in the universe and nE is the number of constraints.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify linear equality constraints are:

  • AEquality for AE

  • bEquality for bE

  • NumAssets for n

The default is to ignore these constraints.

'Simple' Bound Constraints

'Simple' Bound constraints are specialized linear constraints that confine portfolio weights to fall either above or below specific bounds. Use setBounds to specify bound constraints with a 'Simple' BoundType. Since every portfolio set must be bounded, it is often a good practice, albeit not necessary, to set explicit bounds for the portfolio problem. To obtain explicit 'Simple' bounds for a given portfolio set, use the estimateBounds function. Bound constraints take the form

lBxuB

where:

x is the portfolio (n vector).

lB is the lower-bound constraint (n vector).

uB is the upper-bound constraint (n vector).

n is the number of assets in the universe.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify bound constraints are:

  • LowerBound for lB

  • UpperBound for uB

  • NumAssets for n

The default is to ignore these constraints.

The default portfolio optimization problem (see Default Portfolio Problem) has lB = 0 with uB set implicitly through a budget constraint.

'Conditional' Bound Constraints

'Conditional' Bound constraints, also called semicontinuous constraints, are mixed-integer linear constraints that confine portfolio weights to fall either above or below specific bounds if the asset is selected; otherwise, the value of the asset is zero. Use setBounds to specify bound constraints with a 'Conditional' BoundType. To mathematically formulate this type of constraints, a binary variable vi is needed. vi = 0 indicates that asset i is not selected and vi indicates that the asset was selected. Thus

livixiuivi

where

x is the portfolio (n vector).

l is the conditional lower-bound constraint (n vector).

u is the conditional upper-bound constraint (n vector).

n is the number of assets in the universe.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify the bound constraint are:

  • LowerBound for lB

  • UpperBound for uB

  • NumAssets for n

The default is to ignore this constraint.

Budget Constraints

Budget constraints are specialized linear constraints that confine the sum of portfolio weights to fall either above or below specific bounds. Use setBudget to set budget constraints. The constraints take the form

lS1TxuS

where:

x is the portfolio (n vector).

1 is the vector of ones (n vector).

lS is the lower-bound budget constraint (scalar).

uS is the upper-bound budget constraint (scalar).

n is the number of assets in the universe.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify budget constraints are:

  • LowerBudget for lS

  • UpperBudget for uS

  • NumAssets for n

The default is to ignore this constraint.

The default portfolio optimization problem (see Default Portfolio Problem) has lS = uS = 1, which means that the portfolio weights sum to 1. If the portfolio optimization problem includes possible movements in and out of cash, the budget constraint specifies how far portfolios can go into cash. For example, if lS = 0 and uS = 1, then the portfolio can have 0–100% invested in cash. If cash is to be a portfolio choice, set RiskFreeRate (r0) to a suitable value (see Return Proxy and Working with a Riskless Asset).

Group Constraints

Group constraints are specialized linear constraints that enforce “membership” among groups of assets. Use setGroups to set group constraints. The constraints take the form

lGGxuG

where:

x is the portfolio (n vector).

lG is the lower-bound group constraint (nG vector).

uG is the upper-bound group constraint (nG vector).

G is the matrix of group membership indexes (nG-by-n matrix).

Each row of G identifies which assets belong to a group associated with that row. Each row contains either 0s or 1s with 1 indicating that an asset is part of the group or 0 indicating that the asset is not part of the group.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify group constraints are:

  • GroupMatrix for G

  • LowerGroup for lG

  • UpperGroup for uG

  • NumAssets for n

The default is to ignore these constraints.

Group Ratio Constraints

Group ratio constraints are specialized linear constraints that enforce relationships among groups of assets. Use setGroupRatio to set group ratio constraints. The constraints take the form

lRi(GBx)i(GAx)iuRi(GBx)i

for i = 1,..., nR where:

x is the portfolio (n vector).

lR is the vector of lower-bound group ratio constraints (nR vector).

uR is the vector matrix of upper-bound group ratio constraints (nR vector).

GA is the matrix of base group membership indexes (nR-by-n matrix).

GB is the matrix of comparison group membership indexes (nR-by-n matrix).

n is the number of assets in the universe and nR is the number of constraints.

Each row of GA and GB identifies which assets belong to a base and comparison group associated with that row.

Each row contains either 0s or 1s with 1 indicating that an asset is part of the group or 0 indicating that the asset is not part of the group.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify group ratio constraints are:

  • GroupA for GA

  • GroupB for GB

  • LowerRatio for lR

  • UpperRatio for uR

  • NumAssets for n

The default is to ignore these constraints.

Average Turnover Constraints

Turnover constraint is a linear absolute value constraint that ensures estimated optimal portfolios differ from an initial portfolio by no more than a specified amount. Although portfolio turnover is defined in many ways, the turnover constraints implemented in Financial Toolbox™ compute portfolio turnover as the average of purchases and sales. Use setTurnover to set average turnover constraints. Average turnover constraints take the form

121T|xx0|τ

where:

x is the portfolio (n vector).

1 is the vector of ones (n vector).

x0 is the initial portfolio (n vector).

τ is the upper bound for turnover (scalar).

n is the number of assets in the universe.

Portfolio, PortfolioCVaR, and PortfolioMAD object properties to specify the average turnover constraint are:

  • Turnover for τ

  • InitPort for x0

  • NumAssets for n

The default is to ignore this constraint.

One-Way Turnover Constraints

One-way turnover constraints ensure that estimated optimal portfolios differ from an initial portfolio by no more than specified amounts according to whether the differences are purchases or sales. Use setOneWayTurnover to set one-way turnover constraints. The constraints take the forms

1Tmax{0,xx0}τB

1Tmax{0,x0x}τS

where:

x is the portfolio (n vector)

1 is the vector of ones (n vector).

x0 is the Initial portfolio (n vector).

τB is the upper bound for turnover constraint on purchases (scalar).

τS is the upper bound for turnover constraint on sales (scalar).

To specify one-way turnover constraints, use the following properties in the Portfolio, PortfolioCVaR, or PortfolioMAD object:

  • BuyTurnover for τB

  • SellTurnover for τS

  • InitPort for x0

The default is to ignore this constraint.

Note

The average turnover constraint (see Working with Average Turnover Constraints Using Portfolio Object) with τ is not a combination of the one-way turnover constraints with τ = τB = τS.

Tracking Error Constraints

Tracking error constraint, within a portfolio optimization framework, is an additional constraint to specify the set of feasible portfolios known as a portfolio set. Use setTrackingError to set tracking error constraints. The tracking-error constraint has the form

(xxT)TC(xxT)τT2

where:

x is the portfolio (n vector).

xT is the tracking portfolio against which risk is to be measured (n vector).

C is the covariance of asset returns.

τT is the upper bound for tracking error (scalar).

n is the number of assets in the universe.

Portfolio object properties to specify the average turnover constraint are:

  • TrackingPort for xT

  • TrackingError for τT

The default is to ignore this constraint.

Note

The tracking error constraints can be used with any of the other supported constraints in the Portfolio object without restrictions. However, since the portfolio set necessarily and sufficiently must be a non-empty compact set, the application of a tracking error constraint may result in an empty portfolio set. Use estimateBounds to confirm that the portfolio set is non-empty and compact.

Cardinality Constraints

Cardinality constraint limits the number of assets in the optimal allocation for an Portfolio, PortfolioCVaR, or PortfolioMAD object. Use setMinMaxNumAssets to specify the 'MinNumAssets' and 'MaxNumAssets' constraints. To mathematically formulate this type of constraints, a binary variable vi is needed. vi = 0 indicates that asset i is not selected and vi = 1 indicates that the asset was selected. Thus

MinNumAssetsi=1NumAssetsviMaxNumAssets

The default is to ignore this constraint.

See Also

| |

Related Examples

More About

External Websites