Портфель

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

Описание

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

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

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

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

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

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

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

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

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

q = Portfolio(p, ...)

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

Для более подробной информации на теоретической основе для оптимизации среднего отклонения см. Теорию Оптимизации Портфеля.

Создание

Синтаксис

p = Portfolio
p = Portfolio(Name,Value)
p = Portfolio(p,Name,Value)

Описание

пример

p = Portfolio создает пустой объект Portfolio для оптимизации портфеля среднего отклонения и анализа. Можно затем добавить, что элементы к объекту Portfolio с помощью поддерживаемого "добавляют" и "устанавливают" функции. Для получения дополнительной информации смотрите Создание Объекта Портфеля.

пример

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

Сгруппируйте веса, которые будут ограничены весами в группе 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

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

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

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

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

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

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

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

Безрисковый уровень, заданный как скаляр.

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

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

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

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

setAssetListНастройте список идентификаторов для активов
setInitPortНастройте начальный или текущий портфель
setDefaultConstraintsНастройте ограничения портфеля с неотрицательными весами та сумма к 1
getAssetMomentsПолучите среднее значение, и ковариация актива возвращается из объекта Portfolio
setAssetMoments Установите моменты (среднее значение, и ковариация) актива возвращается для объекта Portfolio
estimateAssetMomentsОценочное среднее значение и ковариация актива возвращаются из данных
setCostsНастройте пропорциональные операционные издержки
addEqualityДобавьте линейные ограничения равенства для весов портфеля к существующим ограничениям
addGroupRatioДобавьте ограничения отношения группы для весов портфеля к существующим ограничениям отношения группы
addGroupsДобавьте ограничения группы для весов портфеля к существующим ограничениям группы
addInequalityДобавьте линейные ограничения неравенства для весов портфеля к существующим ограничениям
getBoundsПолучите границы для весов портфеля от объекта портфеля
getBudgetПолучите границы ограничения бюджета из объекта портфеля
getCostsПолучите покупают и продают операционные издержки от объекта портфеля
getEqualityПолучите ограничительные массивы равенства из объекта портфеля
getGroupRatioПолучите ограничительные массивы отношения группы из объекта портфеля
getGroupsПолучите ограничительные массивы группы из объекта портфеля
getInequalityПолучите массивы ограничения неравенства из объекта портфеля
getOneWayTurnoverПолучите односторонние ограничения оборота из объекта портфеля
setGroupsНастройте ограничения группы для весов портфеля
setInequalityНастройте линейные ограничения неравенства для весов портфеля
setBoundsНастройте границы для весов портфеля для объекта портфеля
setBudgetНастройте ограничения бюджета
setCostsНастройте пропорциональные операционные издержки
setDefaultConstraintsНастройте ограничения портфеля с неотрицательными весами та сумма к 1
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);

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

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