Чтобы создать полностью заданную задачу оптимизации портфеля 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, ...)
Задача оптимизации портфеля 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: [] 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);
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
объект принимает, что вы определяете проблему с одним активом, и вызывает ошибку при вызове, чтобы задать сценарии с четырьмя активами.
The 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
функция или любая из функций симуляции сценария.
estimateBounds
| PortfolioCVaR