Чтобы создать полностью заданную задачу оптимизации портфеля CVaR, инстанцируйте объекта PortfolioCVaR с помощью PortfolioCVaR
. Для получения информации о рабочем процессе при использовании объектов PortfolioCVaR смотрите Рабочий процесс Объекта PortfolioCVaR.
Используйте PortfolioCVaR
, чтобы создать экземпляр объекта класса PortfolioCVaR
. Можно использовать объект PortfolioCVaR
несколькими способами. Чтобы настроить задачу оптимизации портфеля в объекте PortfolioCVaR, самый простой синтаксис:
p = 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, ...)
Задача оптимизации портфеля CVaR полностью задана с объектом PortfolioCVaR, если следующие три условия соблюдают:
Необходимо указать, что набор актива возвращается или цены, известные как сценарии, таким образом, что все сценарии являются конечным активом, возвращается или цены. Эти сценарии предназначаются, чтобы быть выборками от базового распределения вероятностей актива, возвращается. Это условие может быть удовлетворено функцией setScenarios
или с несколькими консервированными функциями симуляции сценария.
Набор выполнимых портфелей должен быть непустым компактным набором, где компактный набор закрыт и ограничен. Можно удовлетворить это условие с помощью обширного набора свойств, которые задают различные типы ограничений, чтобы сформировать набор выполнимых портфелей. Поскольку такие наборы должны быть ограничены, или явные или неявные ограничения могут быть наложены и несколько инструментов, таких как функция estimateBounds
, обеспечить способы гарантировать, что ваша проблема правильно формулируется.
Необходимо задать уровень вероятности, чтобы определить местоположение уровня потери хвоста, выше которой должно быть минимизировано подверженное риску значения условное выражение. Это условие может быть удовлетворено функцией setProbabilityLevel
.
Несмотря на то, что общие достаточные условия для оптимизации портфеля CVaR идут вне первых трех условий, указатели на объект 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
непосредственно настроить “стандартную” задачу оптимизации портфеля. Учитывая сценарии актива возвращается в переменной 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;
Альтернативный способ выполнить ту же задачу подготовки “стандартной” задачи оптимизации портфеля 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
собираются в то же значение сформировать ограничение бюджета равенства.
Ярлыки для имен свойства
Имя аргумента ярлыка | Эквивалентный Аргумент / Имя свойства |
---|---|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
Например, этот вызов объекта 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
или через любую из функций симуляции сценария.
PortfolioCVaR
| estimateBounds