Создание объекта PortfolioCVaR

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

Синтаксис

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

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

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

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

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

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

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

q = PortfolioCVaR(p, ...)

Проблемная достаточность PortfolioCVaR

Задача оптимизации портфеля CVaR полностью задана с объектом PortfolioCVaR, если следующие три условия соблюдают:

  • Необходимо указать, что набор актива возвращается или цены, известные как сценарии, таким образом, что все сценарии являются конечным активом, возвращается или цены. Эти сценарии предназначаются, чтобы быть выборками от базового распределения вероятностей актива, возвращается. Это условие может быть удовлетворено функцией setScenarios или с несколькими консервированными функциями симуляции сценария.

  • Набор выполнимых портфелей должен быть непустым компактным набором, где компактный набор закрыт и ограничен. Можно удовлетворить это условие с помощью обширного набора свойств, которые задают различные типы ограничений, чтобы сформировать набор выполнимых портфелей. Поскольку такие наборы должны быть ограничены, или явные или неявные ограничения могут быть наложены и несколько инструментов, таких как функция estimateBounds, обеспечить способы гарантировать, что ваша проблема правильно формулируется.

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

    Несмотря на то, что общие достаточные условия для оптимизации портфеля CVaR идут вне первых трех условий, указатели на объект PortfolioCVaR все эти дополнительные условия.

Примеры функции PortfolioCVaR

Если вы создаете объект PortfolioCVaR, p, без входных параметров, можно отобразить его с помощью disp:

p = PortfolioCVaR;
disp(p);
PortfolioCVaR with properties:

             BuyCost: []
            SellCost: []
        RiskFreeRate: []
    ProbabilityLevel: []
            Turnover: []
         BuyTurnover: []
        SellTurnover: []
        NumScenarios: []
                Name: []
           NumAssets: []
           AssetList: []
            InitPort: []
         AInequality: []
         bInequality: []
           AEquality: []
           bEquality: []
          LowerBound: []
          UpperBound: []
         LowerBudget: []
         UpperBudget: []
         GroupMatrix: []
          LowerGroup: []
          UpperGroup: []
              GroupA: []
              GroupB: []
          LowerRatio: []
          UpperRatio: []

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

Используя функцию PortfolioCVaR для одноступенчатого Setup

Можно использовать объект PortfolioCVaR непосредственно настроить “стандартную” задачу оптимизации портфеля. Учитывая сценарии актива возвращается в переменной 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 = PortfolioCVaR('Scenarios', AssetScenarios, ...
'LowerBound', 0, 'LowerBudget', 1, 'UpperBudget', 1, ...
'ProbabilityLevel', 0.95);
Значение свойства LowerBound подвергается скалярному расширению, поскольку AssetScenarios обеспечивает размерности проблемы.

Можно использовать запись через точку с функциональным plotFrontier.

p.plotFrontier;

Используя функцию PortfolioCVaR с последовательностью шагов

Альтернативный способ выполнить ту же задачу подготовки “стандартной” задачи оптимизации портфеля CVaR, учитывая переменную 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 = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p = PortfolioCVaR(p, 'LowerBound', 0);
p = PortfolioCVaR(p, 'LowerBudget', 1, 'UpperBudget', 1);
p = setProbabilityLevel(p, 0.95);

plotFrontier(p);

Этот путь работает потому что вызовы в этом конкретном порядке. В этом случае вызов, чтобы инициализировать 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 = PortfolioCVaR;
p = PortfolioCVaR(p, 'LowerBound', zeros(size(m)));
p = PortfolioCVaR(p, 'LowerBudget', 1, 'UpperBudget', 1);
p = setProbabilityLevel(p, 0.95);
p = setScenarios(p, AssetScenarios);

Примечание

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

Ярлыки для имен свойства

Объект PortfolioCVaR имеет более короткие имена аргумента, которые заменяют более длинные имена аргумента, сопоставленные на определенные свойства объекта PortfolioCVaR. Например, вместо того, чтобы ввести 'ProbabilityLevel', объект PortfolioCVaR принимает, что нечувствительное к регистру имя 'plevel' устанавливает свойство ProbabilityLevel в объекте PortfolioCVaR. Каждое более короткое имя аргумента соответствует одному свойству в объекте PortfolioCVaR. Одним исключением является альтернативное имя аргумента 'budget', который показывает обоих свойства LowerBudget и UpperBudget. Когда 'budget' используется, затем свойства LowerBudget и UpperBudget собираются в то же значение сформировать ограничение бюджета равенства.

Ярлыки для имен свойства

Имя аргумента ярлыка

Эквивалентный Аргумент / Имя свойства

ae

AEquality

ai

AInequality

assetnames или assets

AssetList

be

bEquality

bi

bInequality

budget

UpperBudget и LowerBudget

group

GroupMatrix

lb

LowerBound

n или num

NumAssets

level, problevel или plevel

ProbabilityLevel

rfr

RiskFreeRate

scenario или assetscenarios

Scenarios

ub

UpperBound

Например, этот вызов объекта PortfolioCVaR использует эти ярлыки для свойств:

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 = PortfolioCVaR('scenario', AssetScenarios, 'lb', 0, 'budget', 1, 'plevel', 0.95);
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 = PortfolioCVaR;

p = setScenarios(p, AssetScenarios);
p.ProbabilityLevel = 0.95;

p.LowerBudget = 1;
p.UpperBudget = 1;
p.LowerBound = zeros(size(m));

plotFrontier(p);

Примечание

Сценарии не могут быть присвоены непосредственно с помощью записи через точку для объекта PortfolioCVaR. Сценарии должны всегда устанавливаться или через объект PortfolioCVaR, функцию setScenarios или через любую из функций симуляции сценария.

Смотрите также

|

Связанные примеры

Больше о

Внешние веб-сайты

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