Чтобы создать полностью заданную задачу оптимизации портфеля MAD, инстанцируйте PortfolioMAD
объект с помощью PortfolioMAD
. Для получения информации о рабочем процессе при использовании PortfolioMAD
объекты, смотрите Рабочий процесс Объекта PortfolioMAD.
Используйте PortfolioMAD
создать экземпляр объекта PortfolioMAD
класс. Можно использовать PortfolioMAD
объект несколькими способами. Настраивать задачу оптимизации портфеля в PortfolioMAD
объект, самый простой синтаксис:
p = PortfolioMAD;
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: [] 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)
p = PortfolioMAD with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] Turnover: [] BuyTurnover: [] SellTurnover: [] NumScenarios: 20000 Name: [] NumAssets: 4 AssetList: [] InitPort: [] AInequality: [] bInequality: [] AEquality: [] bEquality: [] LowerBound: [4×1 double] UpperBound: [] LowerBudget: 1 UpperBudget: 1 GroupMatrix: [] LowerGroup: [] UpperGroup: [] GroupA: [] GroupB: [] LowerRatio: [] UpperRatio: [] MinNumAssets: [] MaxNumAssets: [] BoundType: []
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
функция или любая из функций симуляции сценария.