Working with Portfolio Constraints Using Defaults
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 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). For information on the workflow
when using Portfolio
objects, see Portfolio Object Workflow.
Setting Default Constraints for Portfolio Weights Using Portfolio Object
The “default” portfolio problem has two constraints on portfolio weights:
Portfolio weights must be nonnegative.
Portfolio weights must sum to
1
.
Implicitly, these constraints imply that portfolio weights are no
greater than 1
, although this is a superfluous constraint to
impose on the problem.
Setting Default Constraints Using the Portfolio Function
Given a portfolio optimization problem with NumAssets
=
20
assets, use the Portfolio
object to set up a
default problem and explicitly set bounds and budget constraints:
p = Portfolio('NumAssets', 20, 'LowerBound', 0, 'Budget', 1); disp(p)
Portfolio with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] AssetMean: [] AssetCovar: [] TrackingError: [] TrackingPort: [] Turnover: [] BuyTurnover: [] SellTurnover: [] Name: [] NumAssets: 20 AssetList: [] InitPort: [] AInequality: [] bInequality: [] AEquality: [] bEquality: [] LowerBound: [20×1 double] UpperBound: [] LowerBudget: 1 UpperBudget: 1 GroupMatrix: [] LowerGroup: [] UpperGroup: [] GroupA: [] GroupB: [] LowerRatio: [] UpperRatio: [] MinNumAssets: [] MaxNumAssets: [] ConditionalBudgetThreshold: [] ConditionalUpperBudget: [] BoundType: []
Setting Default Constraints Using the setDefaultConstraints
Function
An alternative approach is to use the setDefaultConstraints
function.
If the number of assets is already known in a Portfolio
object, use setDefaultConstraints
with no
arguments to set up the necessary bound and budget constraints. Suppose that you
have 20 assets to set up the portfolio set for a default
problem:
p = Portfolio('NumAssets', 20);
p = setDefaultConstraints(p);
disp(p)
Portfolio with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] AssetMean: [] AssetCovar: [] TrackingError: [] TrackingPort: [] Turnover: [] BuyTurnover: [] SellTurnover: [] Name: [] NumAssets: 20 AssetList: [] InitPort: [] AInequality: [] bInequality: [] AEquality: [] bEquality: [] LowerBound: [20×1 double] UpperBound: [] LowerBudget: 1 UpperBudget: 1 GroupMatrix: [] LowerGroup: [] UpperGroup: [] GroupA: [] GroupB: [] LowerRatio: [] UpperRatio: [] MinNumAssets: [] MaxNumAssets: [] ConditionalBudgetThreshold: [] ConditionalUpperBudget: [] BoundType: [20×1 categorical]
If the number of assets is unknown, setDefaultConstraints
accepts
NumAssets
as an optional argument to form a portfolio set
for a default problem. Suppose that you have 20
assets:
p = Portfolio; p = setDefaultConstraints(p, 20); disp(p)
Portfolio with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] AssetMean: [] AssetCovar: [] TrackingError: [] TrackingPort: [] Turnover: [] BuyTurnover: [] SellTurnover: [] Name: [] NumAssets: 20 AssetList: [] InitPort: [] AInequality: [] bInequality: [] AEquality: [] bEquality: [] LowerBound: [20×1 double] UpperBound: [] LowerBudget: 1 UpperBudget: 1 GroupMatrix: [] LowerGroup: [] UpperGroup: [] GroupA: [] GroupB: [] LowerRatio: [] UpperRatio: [] MinNumAssets: [] MaxNumAssets: [] ConditionalBudgetThreshold: [] ConditionalUpperBudget: [] BoundType: [20×1 categorical]
See Also
Portfolio
| setDefaultConstraints
| setBounds
| setBudget
| setConditionalBudget
| setGroups
| setGroupRatio
| setEquality
| setInequality
| setTurnover
| setOneWayTurnover
| setTrackingPort
| setTrackingError
Related Examples
- Working with 'Simple' Bound Constraints Using Portfolio Object
- Working with Budget Constraints Using Portfolio Object
- Working with Group Constraints Using Portfolio Object
- Working with Group Ratio Constraints Using Portfolio Object
- Working with Linear Equality Constraints Using Portfolio Object
- Working with Linear Inequality Constraints Using Portfolio Object
- Working with Average Turnover Constraints Using Portfolio Object
- Working with One-Way Turnover Constraints Using Portfolio Object
- Working with Tracking Error Constraints Using Portfolio Object
- Working with 'Conditional' BoundType, MinNumAssets, and MaxNumAssets Constraints Using Portfolio Objects
- Creating the Portfolio Object
- Adding Constraints to Satisfy UCITS Directive
- Validate the Portfolio Problem for Portfolio Object
- Estimate Efficient Portfolios for Entire Efficient Frontier for Portfolio Object
- Estimate Efficient Frontiers for Portfolio Object
- Constraint Specification Using a Portfolio Object
- Asset Allocation Case Study
- Portfolio Optimization Examples Using Financial Toolbox
- Portfolio Optimization with Semicontinuous and Cardinality Constraints
- Black-Litterman Portfolio Optimization Using Financial Toolbox
- Portfolio Optimization Using Factor Models
- Portfolio Optimization Using Social Performance Measure
- Diversify Portfolios Using Custom Objective
More About
- Portfolio Object
- Portfolio Optimization Theory
- Portfolio Object Workflow
- Setting Up a Tracking Portfolio