PortfolioCVaR

Создает объект PortfolioCVaR для оптимизации и анализа портфеля с условной ценностью под риском

Описание

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

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

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

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

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

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

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

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

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

q = PortfolioCVaR(p, ...)

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

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

Создание

Описание

пример

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

пример

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

пример

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

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

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

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

Свойства

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Уровень вероятности «значение под риском», который составляет 1 − (вероятность потерь), задается как скаляр.

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

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

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

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

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

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

setAssetListНастройка списка идентификаторов для активов
setInitPortНастройка начального или текущего портфеля
setDefaultConstraintsНастройте ограничения портфеля с неотрицательными весами, которые равны 1
estimateAssetMomentsОценка среднего и ковариационная возвратов активов из данных
setCostsНастройка пропорциональных транзакционных издержек
addEqualityДобавьте линейные ограничения равенства для весов портфеля к существующим ограничениям
addGroupRatioДобавьте ограничения группового соотношения для весов портфеля к существующим ограничениям группового соотношения
addGroupsДобавьте ограничения группы для весов портфеля к существующим ограничениям группы
addInequalityДобавьте линейные ограничения неравенства для весов портфеля к существующим ограничениям
getBoundsПолучите ограничения для весов портфеля из объекта портфеля
getBudgetПолучите ограничения бюджета из объекта портфеля
getCostsПолучите транзакционные затраты на покупку и продажу из объекта портфеля
getEqualityПолучите массивы ограничений равенства из объекта портфеля
getGroupRatioПолучите массивы ограничений группового отношения из объекта портфеля
getGroupsПолучите массивы ограничений группы из объекта портфеля
getInequalityПолучите массивы ограничений неравенства из объекта портфеля
getOneWayTurnoverПолучите односторонние ограничения оборота от объекта портфеля
setGroupsНастройте групповые ограничения для весов портфеля
setInequalityНастройте линейные ограничения неравенства для весов портфеля
setBoundsУстановите ограничения для весов портфеля для объекта портфеля
setMinMaxNumAssetsУстановите ограничения кардинальности на количество активов, вложенных в объект портфеля
setBudgetНастройка бюджетных ограничений
setCostsНастройка пропорциональных транзакционных издержек
setDefaultConstraintsНастройте ограничения портфеля с неотрицательными весами, которые равны 1
setEqualityНастройте линейные ограничения равенства для весов портфеля
setGroupRatioНастройте ограничения группового соотношения для весов портфеля
setInitPortНастройка начального или текущего портфеля
setOneWayTurnoverНастройка односторонних ограничений по обороту портфеля
setTurnoverНастройка ограничения на максимальный оборот портфеля
checkFeasibilityПроверяйте допустимость входа портфелей по объекту портфеля
estimateBoundsОцените глобальные нижнюю и верхнюю границы для набора портфелей
estimateFrontierОценка заданного количества оптимальных портфелей на эффективной границе
estimateFrontierByReturnОценка оптимальных портфелей с целевыми возвратами портфеля
estimateFrontierByRiskОценка оптимальных портфелей с целевыми портфельными рисками
estimateFrontierLimitsОценка оптимальных портфелей в конечных точках эффективной границы
plotFrontierПостройте эффективную границу
estimatePortReturnСреднее расчетное значение возвратов портфеля
estimatePortRiskОценка портфельного риска согласно прокси по риску, связанной с соответствующим объектом
setSolverВыберите основной решатель и укажите связанные опции решателя для оптимизации портфеля
setProbabilityLevelУстановите уровень вероятности для вычислений VaR и CVaR
setScenariosУстановите сценарии возвратов активов по прямой матрице
getScenariosПолучите сценарии из объекта портфеля
simulateNormalScenariosByDataСимулируйте многомерные сценарии нормального возврата активов из данных
simulateNormalScenariosByMomentsСимулируйте многомерные сценарии нормального возврата активов из среднего и ковариационного значений возвратов активов
estimateScenarioMomentsОценка среднего и ковариационная сценариев возврата активов
estimatePortVaRОценка значения риска для объекта PortfolioCVaR
estimatePortStdОценка стандартного отклонения возвратов портфеля

Примеры

свернуть все

Можно создать объект 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: []
        MinNumAssets: []
        MaxNumAssets: []
           BoundType: []

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

Можно использовать 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)
p = 
  PortfolioCVaR with properties:

             BuyCost: []
            SellCost: []
        RiskFreeRate: []
    ProbabilityLevel: 0.9500
            Turnover: []
         BuyTurnover: []
        SellTurnover: []
        NumScenarios: 20000
                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 значение свойства подвергается скалярному расширению, так как AssetScenarios предоставляет размерности задачи.

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

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

Этот способ работает, потому что вызовы в PortfolioCVaR находятся в этом конкретном порядке. В этом случае вызов для инициализации 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); 

plotFrontier(p);

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

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

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

             BuyCost: []
            SellCost: []
        RiskFreeRate: []
    ProbabilityLevel: 0.9500
            Turnover: []
         BuyTurnover: []
        SellTurnover: []
        NumScenarios: 20000
                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 ];
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));
disp(p)
  PortfolioCVaR with properties:

             BuyCost: []
            SellCost: []
        RiskFreeRate: []
    ProbabilityLevel: 0.9500
            Turnover: []
         BuyTurnover: []
        SellTurnover: []
        NumScenarios: 20000
                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: []

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

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

load CAPMuniverse

p = PortfolioCVaR('AssetList',Assets(1:12));
p = simulateNormalScenariosByData(p, Data(:,1:12), 20000 ,'missingdata',true);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);

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.010562      0.07364     0.11931    0.13073    0    
    AMZN           0            0           0          0    0    
    CSCO           0            0           0          0    0    
    DELL    0.022649            0           0          0    0    
    EBAY           0            0           0          0    0    
    GOOG       0.203      0.38011     0.56202    0.75919    1    
    HPQ     0.042772    0.0094711           0          0    0    
    IBM      0.44444      0.36456     0.26305    0.11009    0    
    INTC           0            0           0          0    0    
    MSFT     0.27658      0.17222    0.055624          0    0    
    ORCL           0            0           0          0    0    
    YHOO           0            0           0          0    0    

Подробнее о

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

Ссылки

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

См. также

| | | | |

Введенный в R2012b