Конечным элементом для полной спецификации задачи оптимизации портфеля является набор допустимых портфелей, который называется портфельным набором. Портфельный набор задается как конструкция пересечение наборов, образованное набором ограничений на веса портфеля. Набор портфеля обязательно и в достаточной степени должен быть непустым, закрытым и ограниченным набором.
При настройке портфельного набора убедитесь, что портфельный набор удовлетворяет этим условиям. Самый основной набор портфеля или набор портфелей по умолчанию требует, чтобы веса портфеля были неотрицательными (с использованием ограничения, связанного ниже) и чтобы сумма 1
(с использованием ограничения бюджета). Для получения информации о рабочем процессе при использовании Portfolio
объекты, см. раздел Рабочий процесс объекта портфеля.
Задача портфеля по умолчанию имеет два ограничения на веса портфеля:
Веса портфеля должны быть неотрицательными.
Веса портфеля должны равняться 1
.
Неявно, эти ограничения подразумевают, что веса портфеля не больше 1
, хотя это является излишним ограничением, которое необходимо наложить на проблему.
Учитывая задачу оптимизации портфеля с NumAssets
= 20
ресурсы, используйте Portfolio
объект, чтобы настроить задачу по умолчанию и явным образом задать границы и бюджетные ограничения:
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: [] BoundType: [] MinNumAssets: [] MaxNumAssets: []
ФункцияАльтернативным подходом является использование setDefaultConstraints
функция. Если количество активов уже известно в Portfolio
объект, использование setDefaultConstraints
без аргументов для настройки необходимых ограничений и бюджетных ограничений. Предположим, что у вас есть 20 активов для настройки набора портфелей для задачи по умолчанию:
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: [] BoundType: [0×0 categorical] MinNumAssets: [] MaxNumAssets: []
Если количество активов неизвестно, setDefaultConstraints
принимает NumAssets
как необязательный аргумент для формирования набора портфелей для задачи по умолчанию. Предположим, что у вас есть 20 активов:
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: [] BoundType: [0×0 categorical] MinNumAssets: [] MaxNumAssets: []
Portfolio
| setBounds
| setBudget
| setDefaultConstraints
| setEquality
| setGroupRatio
| setGroups
| setInequality
| setOneWayTurnover
| setTrackingError
| setTrackingPort
| setTurnover