exponenta event banner

Портфель

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

Описание

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

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

Создание

Описание

пример

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 Оценка эффективности портфеля для максимизации коэффициента резкости для объекта портфеля
estimatePortMoments Оценка моментов возврата портфеля для объекта портфеля
estimatePortReturnОценочное среднее значение доходности портфеля
estimatePortRiskОценка риска портфеля в соответствии с прокси-сервером риска, связанным с соответствующим объектом
setSolverВыберите основной решатель и укажите связанные опции решателя для оптимизации портфеля
setSolverMINLPВыбор решателя смешанного целочисленного нелинейного программирования (MINLP) для оптимизации портфеля

Примеры

свернуть все

Можно создать объект портфолио, 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 объект предполагает, что вы определяете проблему с одним активом и создаете ошибку при вызове установки моментов актива с четырьмя активами.

Можно создать объект портфолио, 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