Portfolio

Создайте объект Portfolio для оптимизации и анализа портфеля средних дисперсий

Описание

Используйте Portfolio функция для создания Portfolio объект для оптимизации портфеля средних дисперсий.

Основной рабочий процесс оптимизации портфеля состоит в том, чтобы создать образец Portfolio объект, который полностью задает задачу оптимизации портфеля и для работы с Portfolio объект, использующий поддерживаемые функции для получения и анализа эффективных портфелей. Для получения дополнительной информации об этом рабочем процессе смотрите Рабочий процесс объекта портфеля.

Можно использовать Portfolio объект несколькими способами. Чтобы настроить задачу оптимизации портфеля в Portfolio объект, самый простой синтаксис:

p = Portfolio;
Этот синтаксис создает Portfolio объект, p, таким образом, что все свойства объекта пусты.

The Portfolio объект также принимает наборы аргументов пары "имя-значение" для свойств и их значений. The Portfolio объект принимает входы для свойств с общим синтаксисом:

	p = Portfolio('property1',value1,'property2',value2, ... );

Если a Portfolio объект существует, синтаксис разрешает первый (и только первый аргумент) из Portfolio объект, который будет существующим объектом с последующими аргументами пары "имя-значение" для свойств, которые будут добавлены или изменены. Для примера, учитывая существующее Portfolio объект в pОбщий синтаксис:

p = Portfolio(p,'property1',value1,'property2',value2, ... );

Входные параметры не зависят от регистра, но должны быть полностью заданы. Кроме сложения, несколько свойств могут быть заданы с помощью альтернативных имен аргумента (см. Ярлыки для Имен свойства). The Portfolio объект пытается обнаружить размерности задачи из входов и, после того, как набор, последующие входы могут подвергаться различным скалярным или матричным операциям расширения, которые упрощают общий процесс для формирования задачи. В сложение a Portfolio объект является объектом значения, так что, данный портфель pследующий код создает два объекта, p и q, которые являются различными:

q = Portfolio(p, ...)

После создания Portfolio объект, можно использовать связанные функции объекта, чтобы задать ограничения портфеля, проанализировать эффективную границу и подтвердить модель портфеля.

Для получения более подробной информации о теоретическом базисе оптимизации средних дисперсий, смотрите Теорию оптимизации портфеля.

Создание

Описание

пример

p = Portfolio создает пустой Portfolio объект для оптимизации и анализа портфеля средних дисперсий. Затем можно добавить элементы в Portfolio объект с использованием поддерживаемых функций «add» и «set». Для получения дополнительной информации смотрите Создание объекта портфеля.

пример

p = Portfolio(Name,Value) создает Portfolio объект (p) и устанавливает Свойства используя пары "имя-значение". Для примера, p = Portfolio('AssetList',Assets(1:12)). Можно задать несколько пары "имя-значение".

пример

p = Portfolio(p,Name,Value) создает Portfolio объект (p) с использованием ранее созданного Portfolio p объекта и устанавливает Свойства используя пары "имя-значение". Можно задать несколько пары "имя-значение".

Входные параметры

расширить все

Ранее построенные Portfolio объект, заданный с помощью Portfolio.

Свойства

расширить все

Настройка объекта

Имена или символы активов во вселенной, заданные как массив ячеек из векторов символов или строковые массивы.

Типы данных: cell | string

Начальный портфель, заданный как вектор.

Типы данных: double

Имя для образца из Portfolio объект, заданный как вектор символов или строка.

Типы данных: char | string

Количество активов во вселенной, заданное как целочисленный скаляр.

Типы данных: double

Ограничения, накладываемые на объекты портфеля

Линейная матрица ограничений равенства, заданная как матрица.

Типы данных: double

Линейная матрица ограничений неравенства, заданная как матрица.

Типы данных: double

Ограничение равенства, заданный как вектор.

Типы данных: double

Линейный вектор ограничения неравенства, заданный как вектор.

Типы данных: double

Веса группы A, которые будут ограничены весами группы B, заданными в виде матрицы.

Типы данных: double

Веса группы B, заданные как матрица.

Типы данных: double

Матрица принадлежности к группе, заданная как матрица.

Типы данных: double

Нижнее ограничение, заданное как вектор.

Типы данных: double

Нижнее ограничение бюджета, заданное как скаляр.

Типы данных: double

Ограничение нижней группы, заданное как вектор.

Типы данных: double

Минимальное соотношение ассигнований между GroupA и GroupB, заданный как вектор.

Типы данных: double

Верхняя граница для отслеживания ограничения ошибки, заданная как скаляр.

Типы данных: double

Портфель отслеживания для отслеживания ограничения ошибки, заданный как вектор.

Типы данных: double

Верхнее ограничение, заданное как вектор.

Типы данных: double

Верхнее ограничение бюджета, заданное как скаляр.

Типы данных: double

Ограничение верхней группы, заданное как вектор.

Типы данных: double

Максимальное соотношение распределений между GroupA и GroupB, заданный как вектор.

Типы данных: double

Тип границ для каждого веса актива, заданный как скалярный вектор символов или строка, или массив ячеек из векторов символов или строковые массивы. Для получения дополнительной информации см. setBounds.

Типы данных: char | cell | string

Минимальное количество активов, выделенных в портфеле, заданное в виде скалярного числового значения. Для получения дополнительной информации см. setMinMaxNumAssets.

Типы данных: double

Максимальное количество активов, выделенных в портфеле, заданное в виде скалярного числового значения. Для получения дополнительной информации см. setMinMaxNumAssets.

Типы данных: double

Ограничение оборота на продажах, заданное как скаляр.

Типы данных: double

Ограничение оборота на покупки, заданное как скаляр.

Типы данных: double

Ограничение оборота, заданное как скаляр.

Типы данных: double

Моделирование объекта портфеля

Ковариация возвратов активов, заданная как квадратная матрица. Если AssetCovar не является симметричной положительной полуопределенной матрицей, использование nearcorr создать положительную полуопределенную матрицу для корреляционной матрицы.

Типы данных: double

Среднее значение возвратов активов, заданное как вектор.

Типы данных: double

Пропорциональные затраты на покупку, заданные как вектор.

Типы данных: double

Безрисковая ставка, заданная как скаляр.

Типы данных: double

Пропорциональные затраты на продажу, заданные как вектор.

Типы данных: double

Функции объекта

setAssetListНастройка списка идентификаторов для активов
setInitPortНастройка начального или текущего портфеля
setDefaultConstraintsНастройте ограничения портфеля с неотрицательными весами, которые равны 1
getAssetMomentsПолучите среднее значение и ковариацию возвратов активов из объекта Портфолио
setAssetMoments Установите моменты (среднее и ковариационное) возвратов активов для объекта Портфолио
estimateAssetMomentsОценка среднего и ковариационная возвратов активов из данных
setCostsНастройка пропорциональных транзакционных издержек
addEqualityДобавьте линейные ограничения равенства для весов портфеля к существующим ограничениям
addGroupRatioДобавьте ограничения группового соотношения для весов портфеля к существующим ограничениям группового соотношения
addGroupsДобавьте ограничения группы для весов портфеля к существующим ограничениям группы
addInequalityДобавьте линейные ограничения неравенства для весов портфеля к существующим ограничениям
getBoundsПолучите ограничения для весов портфеля из объекта портфеля
getBudgetПолучите ограничения бюджета из объекта портфеля
getCostsПолучите транзакционные затраты на покупку и продажу из объекта портфеля
getEqualityПолучите массивы ограничений равенства из объекта портфеля
getGroupRatioПолучите массивы ограничений группового отношения из объекта портфеля
getGroupsПолучите массивы ограничений группы из объекта портфеля
getInequalityПолучите массивы ограничений неравенства из объекта портфеля
getOneWayTurnoverПолучите односторонние ограничения оборота от объекта портфеля
setGroupsНастройте групповые ограничения для весов портфеля
setInequalityНастройте линейные ограничения неравенства для весов портфеля
setBoundsУстановите ограничения для весов портфеля для объекта портфеля
setBudgetНастройка бюджетных ограничений
setCostsНастройка пропорциональных транзакционных издержек
setEqualityНастройте линейные ограничения равенства для весов портфеля
setGroupRatioНастройте ограничения группового соотношения для весов портфеля
setInitPortНастройка начального или текущего портфеля
setOneWayTurnoverНастройка односторонних ограничений по обороту портфеля
setTurnoverНастройка ограничения на максимальный оборот портфеля
setTrackingPortНастройте портфель бенчмарков для отслеживания ограничения на ошибки
setTrackingErrorНастройте ограничение на максимальное отслеживание ошибок портфеля
setMinMaxNumAssetsУстановите ограничения кардинальности на количество активов, вложенных в объект портфеля
checkFeasibilityПроверяйте допустимость входа портфелей по объекту портфеля
estimateBoundsОцените глобальные нижнюю и верхнюю границы для набора портфелей
estimateFrontierОценка заданного количества оптимальных портфелей на эффективной границе
estimateFrontierByReturnОценка оптимальных портфелей с целевыми возвратами портфеля
estimateFrontierByRiskОценка оптимальных портфелей с целевыми портфельными рисками
estimateFrontierLimitsОценка оптимальных портфелей в конечных точках эффективной границы
plotFrontierПостройте эффективную границу
estimateMaxSharpeRatio Оцените эффективный портфель, чтобы максимизировать коэффициент Шарпа для объекта Portfolio
estimatePortMoments Оценка моментов возвратов портфеля для объекта Portfolio
estimatePortReturnСреднее расчетное значение возвратов портфеля
estimatePortRiskОценка портфельного риска согласно прокси по риску, связанной с соответствующим объектом
setSolverВыберите основной решатель и укажите связанные опции решателя для оптимизации портфеля
setSolverMINLPВыберите целое число смешанного решателя нелинейного программирования (MINLP) для оптимизации портфеля

Примеры

свернуть все

Можно создать объект 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 функция. Затем можно использовать связанные функции набора, чтобы задать и изменить наборы свойств в 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: [4x1 double]
       AssetCovar: [4x4 double]
    TrackingError: []
     TrackingPort: []
         Turnover: []
      BuyTurnover: []
     SellTurnover: []
             Name: []
        NumAssets: 4
        AssetList: []
         InitPort: []
      AInequality: []
      bInequality: []
        AEquality: []
        bEquality: []
       LowerBound: [4x1 double]
       UpperBound: []
      LowerBudget: 1
      UpperBudget: 1
      GroupMatrix: []
       LowerGroup: []
       UpperGroup: []
           GroupA: []
           GroupB: []
       LowerRatio: []
       UpperRatio: []
     MinNumAssets: []
     MaxNumAssets: []
        BoundType: []

Обратите внимание, что LowerBound значение свойства подвергается скалярному расширению, так как AssetMean и AssetCovar обеспечивают размерности задачи.

Использование последовательности шагов является альтернативным способом выполнить ту же задачу настройки «стандартной» задачи оптимизации портфеля, учитывая среднее и ковариационное значение возвратов активов в переменных 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);

Figure contains an axes. The axes with title \bfEfficient Frontier contains an object of type line.

Этот способ работает, потому что вызовы в 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);

Figure contains an axes. The axes with title \bfEfficient Frontier contains an object of type line.

Если вы не указали размер LowerBound но вместо этого введите скалярный аргумент, Portfolio объект принимает, что вы определяете проблему с одним активом и вызывает ошибку при вызове установки моментов с четырьмя активами.

Можно создать объект Portfolio, p с 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)
p = 
  Portfolio with properties:

          BuyCost: []
         SellCost: []
     RiskFreeRate: []
        AssetMean: [4x1 double]
       AssetCovar: [4x4 double]
    TrackingError: []
     TrackingPort: []
         Turnover: []
      BuyTurnover: []
     SellTurnover: []
             Name: []
        NumAssets: 4
        AssetList: []
         InitPort: []
      AInequality: []
      bInequality: []
        AEquality: []
        bEquality: []
       LowerBound: [4x1 double]
       UpperBound: []
      LowerBudget: 1
      UpperBudget: 1
      GroupMatrix: []
       LowerGroup: []
       UpperGroup: []
           GroupA: []
           GroupB: []
       LowerRatio: []
       UpperRatio: []
     MinNumAssets: []
     MaxNumAssets: []
        BoundType: []

Несмотря на то, что не рекомендуемый, вы можете задать свойства непосредственно, однако проверка ошибок на ваших входах не выполняется.

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));
disp(p)
  Portfolio with properties:

          BuyCost: []
         SellCost: []
     RiskFreeRate: []
        AssetMean: [4x1 double]
       AssetCovar: [4x4 double]
    TrackingError: []
     TrackingPort: []
         Turnover: []
      BuyTurnover: []
     SellTurnover: []
             Name: []
        NumAssets: 4
        AssetList: []
         InitPort: []
      AInequality: []
      bInequality: []
        AEquality: []
        bEquality: []
       LowerBound: [4x1 double]
       UpperBound: []
      LowerBudget: 1
      UpperBudget: 1
      GroupMatrix: []
       LowerGroup: []
       UpperGroup: []
           GroupA: []
           GroupB: []
       LowerRatio: []
       UpperRatio: []
     MinNumAssets: []
     MaxNumAssets: []
        BoundType: []

Создайте эффективные портфели:

load CAPMuniverse

p = Portfolio('AssetList',Assets(1:12));
p = estimateAssetMoments(p, Data(:,1:12),'missingdata',true);
p = setDefaultConstraints(p);
plotFrontier(p);

Figure contains an axes. The axes with title \bfEfficient Frontier contains an object of type line.

pwgt = estimateFrontier(p, 5);

pnames = cell(1,5);
for i = 1:5
	pnames{i} = sprintf('Port%d',i);
end

Blotter = dataset([{pwgt},pnames],'obsnames',p.AssetList);

disp(Blotter);
            Port1        Port2       Port3       Port4      Port5
    AAPL     0.017926    0.058247    0.097816    0.12955    0    
    AMZN            0           0           0          0    0    
    CSCO            0           0           0          0    0    
    DELL    0.0041906           0           0          0    0    
    EBAY            0           0           0          0    0    
    GOOG      0.16144     0.35678     0.55228    0.75116    1    
    HPQ      0.052566    0.032302    0.011186          0    0    
    IBM       0.46422     0.36045     0.25577    0.11928    0    
    INTC            0           0           0          0    0    
    MSFT      0.29966     0.19222    0.082949          0    0    
    ORCL            0           0           0          0    0    
    YHOO            0           0           0          0    0    

Подробнее о

расширить все

Ссылки

[1] Полный список ссылок на объект Portfolio см. в разделе Оптимизация портфеля.

См. также

| | | |

Введенный в R2011a