Чтобы создать полностью заданную задачу оптимизации портфеля среднего отклонения, инстанцируйте Portfolio
объект с помощью Portfolio
. Для получения информации о рабочем процессе при использовании Portfolio
объекты, смотрите Рабочий процесс Объекта Портфеля.
Используйте Portfolio
создать экземпляр объекта Portfolio
класс. Можно использовать Portfolio
несколькими способами. Настраивать задачу оптимизации портфеля в Portfolio
объект, самый простой синтаксис:
p = Portfolio;
Portfolio
объект, p
, таким образом, что все свойства объектов пусты. Portfolio
объект также принимает наборы аргументов пары "имя-значение" аргумента для свойств и их значений. Portfolio
объект принимает входные параметры для публичных свойств с общим синтаксисом:
p = Portfolio('property1', value1, 'property2', value2, ... );
Если Portfolio
объект уже существует, синтаксис разрешает первое (и только первый аргумент) Portfolio
быть существующим объектом с последующими аргументами пары "имя-значение" аргумента для свойств, которые будут добавлены или изменены. Например, учитывая существующий Portfolio
объект в p
, общий синтаксис:
p = Portfolio(p, 'property1', value1, 'property2', value2, ... );
Имена входного параметра не являются чувствительными к регистру, но должны быть полностью заданы. Кроме того, несколько свойств могут быть заданы с альтернативными именами аргумента (см. Ярлыки для Имен свойства). Portfolio
объект обнаруживает проблемные размерности от входных параметров и, когда-то набор, последующие входные параметры могут подвергнуться различным скалярным или матричным операциям расширения, которые упрощают полный процесс, чтобы сформулировать проблему. Кроме того, Portfolio
объект является объектом значения так, чтобы, учитывая портфель p
, следующий код создает два объекта, p
и q
, это отлично:
q = Portfolio(p, ...)
Оптимизация портфеля среднего отклонения полностью задана с Portfolio
возразите, соблюдают ли эти два условия:
Моменты возвратов актива должны быть заданы таким образом что свойство AssetMean
содержит допустимый конечный вектор средних значений актива, возвращается и свойство AssetCovar
содержит допустимую симметричную положительно-полуопределенную матрицу для ковариации актива, возвращается.
Первому условию удовлетворяют путем установки свойств, сопоставленных с моментами актива, возвращается.
Набор выполнимых портфелей должен быть непустым компактным набором, где компактный набор закрыт и ограничен.
Второму условию удовлетворяет обширный набор свойств, которые задают различные типы ограничений, чтобы сформировать набор выполнимых портфелей. Поскольку такие наборы должны быть ограничены, или явные или неявные ограничения могут быть наложены, и несколько функций, такой как estimateBounds
, обеспечьте способы гарантировать, что ваша проблема правильно формулируется.
Несмотря на то, что общие условия достаточности для оптимизации портфеля среднего отклонения идут вне этих двух условий, Portfolio
объект, реализованный в Financial Toolbox™ неявно, обрабатывает все эти дополнительные условия. Для получения дополнительной информации о модели Markowitz для оптимизации портфеля среднего отклонения смотрите Оптимизацию Портфеля.
Если вы создаете Portfolio
объект, p
, без входных параметров можно отобразить его с помощью disp
:
p = Portfolio; disp(p)
Portfolio with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] AssetMean: [] AssetCovar: [] TrackingError: [] TrackingPort: [] Turnover: [] BuyTurnover: [] SellTurnover: [] Name: [] NumAssets: [] AssetList: [] InitPort: [] AInequality: [] bInequality: [] AEquality: [] bEquality: [] LowerBound: [] UpperBound: [] LowerBudget: [] UpperBudget: [] GroupMatrix: [] LowerGroup: [] UpperGroup: [] GroupA: [] GroupB: [] LowerRatio: [] UpperRatio: [] MinNumAssets: [] MaxNumAssets: [] BoundType: []
Перечисленные подходы обеспечивают способ настроить задачу оптимизации портфеля с Portfolio
объект. set
функции предлагают дополнительные способы установить и изменить наборы свойств в Portfolio
объект.
Можно использовать Portfolio
возразите, чтобы непосредственно настроить “стандартную” задачу оптимизации портфеля, учитывая среднее значение, и ковариация актива возвращается в переменных m
и C
:
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 ]; p = Portfolio('assetmean', m, 'assetcovar', C, ... 'lowerbudget', 1, 'upperbudget', 1, 'lowerbound', 0)
p = Portfolio with properties: BuyCost: [] SellCost: [] RiskFreeRate: [] AssetMean: [4×1 double] AssetCovar: [4×4 double] TrackingError: [] TrackingPort: [] Turnover: [] BuyTurnover: [] SellTurnover: [] 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
значение свойства подвергается скалярному расширению начиная с AssetMean
и AssetCovar
обеспечьте размерности проблемы.Можно использовать запись через точку с функцией plotFrontier
.
p.plotFrontier
Альтернативный способ выполнить ту же задачу подготовки “стандартной” задачи оптимизации портфеля, учитывая среднее значение и ковариацию актива возвращается в переменных m
и C
(который также иллюстрирует, что имена аргумента не являются чувствительными к регистру):
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 ]; p = Portfolio; p = Portfolio(p, 'assetmean', m, 'assetcovar', C); p = Portfolio(p, 'lowerbudget', 1, 'upperbudget', 1); p = Portfolio(p, 'lowerbound', 0); plotFrontier(p)
Этот путь работает потому что вызовы Portfolio
находятся в этом конкретном порядке. В этом случае, вызов, чтобы инициализировать AssetMean
и AssetCovar
обеспечивает размерности для проблемы. Если бы необходимо было выполнить этот шаг в последний раз, необходимо было бы явным образом определить размеры 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 ]; p = Portfolio; p = Portfolio(p, 'LowerBound', zeros(size(m))); p = Portfolio(p, 'LowerBudget', 1, 'UpperBudget', 1); p = Portfolio(p, 'AssetMean', m, 'AssetCovar', C); plotFrontier(p)
Если вы не задавали размер LowerBound
но, вместо этого, введите скалярный аргумент, Portfolio
объект принимает, что вы описываете задачу одно актива, и производит ошибку в вызове, чтобы установить моменты актива с четырьмя активами.
Portfolio
объект имеет более короткие имена аргумента, которые заменяют более длинные имена аргумента, сопоставленные на определенные свойства Portfolio
объект. Например, вместо того, чтобы ввести 'assetcovar'
, Portfolio
объект принимает нечувствительное к регистру имя 'covar'
установить AssetCovar
свойство в Portfolio
объект. Каждое более короткое имя аргумента соответствует одному свойству в Portfolio
объект. Одним исключением является альтернативное имя аргумента 'budget'
, который показывает обоих LowerBudget
и UpperBudget
свойства. Когда 'budget'
используется, затем LowerBudget
и UpperBudget
свойства собираются в то же значение сформировать ограничение бюджета равенства.
Ярлыки для имен свойства
Имя аргумента ярлыка | Эквивалентный Аргумент / Имя свойства |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Например, этот вызов Portfolio
использование эти ярлыки для свойств и эквивалентно предыдущим примерам:
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 ]; p = Portfolio('mean', m, 'covar', C, 'budget', 1, 'lb', 0); 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 ]; p = Portfolio; p.NumAssets = numel(m); p.AssetMean = m; p.AssetCovar = C; p.LowerBudget = 1; p.UpperBudget = 1; p.LowerBound = zeros(size(m)); plotFrontier(p)