Чтобы создать полностью заданную задачу оптимизации портфеля MAD, инстанцируйте объекта PortfolioMAD с помощью объекта PortfolioMAD
. Для получения информации о рабочем процессе при использовании объектов PortfolioMAD смотрите Рабочий процесс Объекта PortfolioMAD.
Используйте PortfolioMAD
, чтобы создать экземпляр объекта класса PortfolioMAD
. Можно использовать объект PortfolioMAD
несколькими способами. Чтобы настроить задачу оптимизации портфеля в объекте PortfolioMAD, самый простой синтаксис:
p = PortfolioMAD;
p
, такой, что все свойства объектов пусты. Объект PortfolioMAD
также принимает наборы аргументов пары "имя-значение" аргумента для свойств и их значений. Объект PortfolioMAD
принимает входные параметры для публичных свойств с общим синтаксисом:
p = PortfolioMAD('property1', value1, 'property2', value2, ... );
Если объект PortfolioMAD уже существует, синтаксис разрешает первому (и только первый аргумент) PortfolioMAD
быть существующим объектом с последующими аргументами пары "имя-значение" аргумента для свойств, которые будут добавлены или изменены. Например, учитывая существующий объект PortfolioMAD в p
, общий синтаксис:
p = PortfolioMAD(p, 'property1', value1, 'property2', value2, ... );
Имена входного параметра не являются чувствительными к регистру, но должны быть полностью заданы. Кроме того, несколько свойств могут быть заданы с альтернативными именами аргумента (см. Ярлыки для Имен свойства). Объект PortfolioMAD
пытается обнаружить проблемные размерности от входных параметров и, когда-то установить, последующие входные параметры могут подвергнуться различным скалярным или матричным операциям расширения, которые упрощают полный процесс, чтобы сформулировать проблему. Кроме того, объект 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: []
Перечисленные подходы обеспечивают способ настроить задачу оптимизации портфеля с объектом 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
принимает, что вы задаете проблему одно актива, и производит ошибку в вызове, чтобы установить сценарии актива с четырьмя активами.
Объект 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
или через любую из функций симуляции сценария.