Иногда, можно хотеть подтвердить или входные параметры к или выходные параметры от, задача оптимизации портфеля. Несмотря на то, что большая часть проверки ошибок, которая происходит во время проблемной фазы настройки, отлавливает большинство трудностей с задачей оптимизации портфеля, процессы, чтобы подтвердить наборы портфеля CVaR и портфели являются трудоемкими и лучше всего сделаны оффлайн. Так, инструменты оптимизации портфеля специализировали функции, чтобы подтвердить наборы портфеля CVaR и портфели. Для получения информации о рабочем процессе при использовании PortfolioCVaR
объекты, смотрите Рабочий процесс Объекта PortfolioCVaR.
Поскольку это необходимо и достаточно, что ваш набор портфеля CVaR должен быть непустым, закрытым и ограниченным множеством, чтобы иметь допустимую задачу оптимизации портфеля, estimateBounds
функция позволяет вам исследовать свой набор портфеля, чтобы определить, непусто ли это и, если непустой, ограничено ли это. Предположим, что у вас есть следующий набор портфеля CVaR, который является пустым множеством потому что начальный портфель в 0
слишком далеко от портфеля, который удовлетворяет ограничение оборота и бюджет:
p = PortfolioCVaR('NumAssets', 3, 'Budget', 1); p = setTurnover(p, 0.3, 0);
Если набор портфеля CVaR пуст, estimateBounds
возвращает NaN
границы и наборы isbounded
отметьте к []
:
[lb, ub, isbounded] = estimateBounds(p)
lb = NaN NaN NaN ub = NaN NaN NaN isbounded = []
Предположим, что вы создаете неограниченный набор портфеля CVaR можно следующим образом:
p = PortfolioCVaR('AInequality', [1 -1; 1 1 ], 'bInequality', 0); [lb, ub, isbounded] = estimateBounds(p)
lb = -Inf -Inf ub = 1.0e-008 * -0.3712 Inf isbounded = 0
estimateBounds
возвращается (возможно бесконечный), ограничивает и устанавливает isbounded
отметьте к false
. Результат показывает, какие активы неограниченны так, чтобы можно было применить связанные ограничения по мере необходимости.Наконец, предположите, что вы создали набор портфеля CVaR, который и непуст и ограничен. estimateBounds
не только подтверждает набор, но также и получает более трудные границы, которые полезны, если вы обеспокоены фактической областью значений выбора портфеля для отдельных активов в вашем наборе портфеля:
p = PortfolioCVaR; p = setBudget(p, 1,1); p = setBounds(p, [ -0.1; 0.2; 0.3; 0.2 ], [ 0.5; 0.3; 0.9; 0.8 ]); [lb, ub, isbounded] = estimateBounds(p)
lb = -0.1000 0.2000 0.3000 0.2000 ub = 0.3000 0.3000 0.7000 0.6000 isbounded = 1
В этом примере у всех кроме второго актива есть более трудные верхние границы, чем входная верхняя граница подразумевает.
Учитывая набор портфеля CVaR, заданный в PortfolioCVaR
объект, вы часто хотите проверять, выполнимы ли определенные портфели относительно набора портфеля. Это может произойти с, например, начальные портфели и с портфелями, полученными из других процедур. checkFeasibility
функция определяет, выполним ли набор портфелей. Предположим, что вы выполняете следующую оптимизацию портфеля и хотите определить, выполнимы ли результирующие эффективные портфели относительно модифицированной проблемы.
Во-первых, настройте проблему в PortfolioCVaR
объект p
, оцените эффективные портфели в pwgt
, и затем подтвердите, что эти портфели выполнимы относительно начальной проблемы:
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 = setDefaultConstraints(p); p = setProbabilityLevel(p, 0.95); pwgt = estimateFrontier(p); checkFeasibility(p, pwgt)
ans = 1 1 1 1 1 1 1 1 1 1
Затем настройте различную проблему портфеля, которая запускает с начальной проблемы с дополнительным ограничение оборота и одинаково взвешенный начальный портфель:
q = setTurnover(p, 0.3, 0.25); checkFeasibility(q, pwgt)
ans = 0 0 0 1 1 0 0 0 0 0
PortfolioCVaR
объект q
. Решение второй проблемы с помощью checkFeasibility
демонстрирует что эффективный портфель для PortfolioCVaR
объект q
выполнимо относительно начальной проблемы:
qwgt = estimateFrontier(q); checkFeasibility(p, qwgt)
ans = 1 1 1 1 1 1 1 1 1 1
PortfolioCVaR
| checkFeasibility
| estimateBounds