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

Чтобы создать полностью заданную задачу оптимизации портфеля CVaR, создайте экземпляр PortfolioCVaR объект, использующий PortfolioCVaR. Для получения информации о рабочем процессе при использовании PortfolioCVaR объекты, см. Рабочий процесс объекта 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

Задача оптимизации портфеля 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: []
        MinNumAssets: []
        MaxNumAssets: []
           BoundType: []

Перечисленные подходы обеспечивают способ настроить задачу оптимизации портфеля с 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);
The 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 объект принимает, что вы определяете проблему с одним активом, и вызывает ошибку при вызове, чтобы задать сценарии с четырьмя активами.

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

The 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 функция или любая из функций симуляции сценария.

См. также

|

Похожие примеры

Подробнее о

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