Чтобы создать полностью заданную задачу оптимизации портфеля MAD, создайте экземпляр PortfolioMAD
объект, использующий PortfolioMAD
. Для получения информации о рабочем процессе при использовании PortfolioMAD
объекты, см. раздел Рабочий процесс объекта PortfolioMAD.
Использование PortfolioMAD
чтобы создать образец объекта PortfolioMAD
класс. Можно использовать PortfolioMAD
объект несколькими способами. Чтобы настроить задачу оптимизации портфеля в PortfolioMAD
объект, самый простой синтаксис:
p = PortfolioMAD;
PortfolioMAD
объект, p
, таким образом, что все свойства объекта пусты. The PortfolioMAD
объект также принимает наборы аргументов пары "имя-значение" аргументов для свойств и их значений. The PortfolioMAD
объект принимает входы для общественной собственности с общим синтаксисом:
p = PortfolioMAD('property1', value1, 'property2', value2, ... );
Если a PortfolioMAD
объект уже существует, синтаксис разрешает первый (и только первый аргумент) из PortfolioMAD
быть существующим объектом с последующими аргументами пары "имя-значение" для свойств, которые будут добавлены или изменены. Для примера, учитывая существующее PortfolioMAD
объект в p
Общий синтаксис:
p = PortfolioMAD(p, 'property1', value1, 'property2', value2, ... );
Входные параметры не зависят от регистра, но должны быть полностью заданы. Кроме сложения, несколько свойств могут быть заданы с помощью альтернативных имен аргумента (см. Ярлыки для Имен свойства). The PortfolioMAD
объект пытается обнаружить размерности задачи из входов и, после того, как набор, последующие входы могут подвергаться различным скалярным или матричным операциям расширения, которые упрощают общий процесс для формирования задачи. В сложение a PortfolioMAD
объект является объектом значения, так что, данный портфель p
следующий код создает два объекта, p
и q
, которые являются различными:
q = PortfolioMAD(p, ...)
Задача оптимизации портфеля MAD полностью задана с PortfolioMAD
объект, если удовлетворены следующие три условия:
Необходимо задать набор возвратов активов или цен, известных как сценарии, так что все сценарии являются конечными доходами активов или ценами. Эти сценарии предназначены для выборок из базового распределения вероятностей возвратов активов. Это условие может быть удовлетворено setScenarios
функция или с несколькими консервированными функциями симуляции сценария.
Набор допустимых портфелей должен быть непустым компактным набором, где компактный набор закрыт и ограничен. Можно удовлетворить это условие с помощью обширного набора свойств, которые задают различные типы ограничений, чтобы сформировать набор допустимых портфелей. Поскольку такие наборы должны быть ограничены, могут быть наложены явные или неявные ограничения и несколько инструментов, таких как estimateBounds
функция, обеспечивают способы гарантировать, что ваша проблема правильно сформулирована.
Хотя общие достаточные условия для оптимизации портфеля MAD выходят за рамки этих условий, PortfolioMAD
объект обрабатывает все эти дополнительные условия.
Если вы создаете PortfolioMAD
объект, p
без входных параметров можно отобразить его с помощью disp
:
p = PortfolioMAD; disp(p)
PortfolioMAD with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] Turnover: [] BuyTurnover: [] SellTurnover: [] NumScenarios: [] Name: [] NumAssets: [] AssetList: [] InitPort: [] AInequality: [] bInequality: [] AEquality: [] bEquality: [] LowerBound: [] UpperBound: [] LowerBudget: [] UpperBudget: [] GroupMatrix: [] LowerGroup: [] UpperGroup: [] GroupA: [] GroupB: [] LowerRatio: [] UpperRatio: [] MinNumAssets: [] MaxNumAssets: [] BoundType: []
Перечисленные подходы обеспечивают способ настроить задачу оптимизации портфеля с PortfolioMAD
объект. Пользовательские функции набора предлагают дополнительные способы задать и изменить наборы свойств в PortfolioMAD
объект.
Можно использовать PortfolioMAD
объект для непосредственной настройки «стандартной» задачи оптимизации портфеля. Заданные сценарии возвратов активов в переменной AssetScenarios
, эта задача полностью задана следующим образом:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; m = m/12; C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioMAD('Scenarios', AssetScenarios, ... 'LowerBound', 0, 'LowerBudget', 1, 'UpperBudget', 1);
LowerBound
значение свойства подвергается скалярному расширению, так как AssetScenarios
предоставляет размерности задачи.Вы можете использовать запись через точку с функцией plotFrontier
.
p.plotFrontier
Альтернативный способ выполнить ту же задачу настройки «стандартной» задачи оптимизации портфеля MAD, учитывая AssetScenarios
переменная:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; m = m/12; C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioMAD; p = setScenarios(p, AssetScenarios); p = PortfolioMAD(p, 'LowerBound', 0); p = PortfolioMAD(p, 'LowerBudget', 1, 'UpperBudget', 1); plotFrontier(p);
Этот способ работает, потому что вызовы в PortfolioMAD
объект находится в этом конкретном порядке. В этом случае вызов для инициализации AssetScenarios
предоставляет размерности для задачи. Если бы вы сделали этот шаг последним, вам пришлось бы явно измерить LowerBound
свойство следующим образом:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; m = m/12; C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioMAD; p = PortfolioMAD(p, 'LowerBound', zeros(size(m))); p = PortfolioMAD(p, 'LowerBudget', 1, 'UpperBudget', 1); p = setScenarios(p, AssetScenarios);
Примечание
Если вы не указали размер LowerBound
но вместо этого введите скалярный аргумент, PortfolioMAD
объект принимает, что вы определяете проблему с одним активом, и вызывает ошибку при вызове, чтобы задать сценарии с четырьмя активами.
The PortfolioMAD
объект имеет более короткие имена аргумента, которые заменяют более длинные имена аргумента, сопоставленные с конкретными свойствами PortfolioMAD
объект. Для примера, а не вводите 'AInequality'
, а PortfolioMAD
объект принимает имя без учета регистра 'ai'
для установки AInequality
свойство в PortfolioMAD
объект. Каждое более короткое имя аргумента соответствует одному свойству в PortfolioMAD
объект. Единственным исключением является имя альтернативного аргумента 'budget'
, что означает оба LowerBudget
и UpperBudget
свойства. Когда 'budget'
используется, затем LowerBudget
и UpperBudget
свойства заданы в том же значении, чтобы сформировать ограничение бюджета равенства.
Ярлыки для имен свойства
Имя аргумента ярлыка | Эквивалентный аргумент/имя свойства |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Для примера этот вызов на PortfolioMAD
использует эти ярлыки для свойств:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; m = m/12; C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioMAD('scenario', AssetScenarios, 'lb', 0, 'budget', 1); plotFrontier(p);
Несмотря на то, что не рекомендуемый, вы можете задать свойства непосредственно с помощью записи через точку, однако проверка на ошибку на ваших входах не выполняется:
m = [ 0.05; 0.1; 0.12; 0.18 ]; C = [ 0.0064 0.00408 0.00192 0; 0.00408 0.0289 0.0204 0.0119; 0.00192 0.0204 0.0576 0.0336; 0 0.0119 0.0336 0.1225 ]; m = m/12; C = C/12; AssetScenarios = mvnrnd(m, C, 20000); p = PortfolioMAD; p = setScenarios(p, AssetScenarios); p.LowerBudget = 1; p.UpperBudget = 1; p.LowerBound = zeros(size(m)); plotFrontier(p);
Примечание
Сценарии не могут быть назначены непосредственно с помощью записи через точку PortfolioMAD
объект. Сценарии всегда должны быть заданы через любой из PortfolioMAD
объект, setScenarios
функция или любая из функций симуляции сценария.