Иногда, можно хотеть подтвердить или входные параметры к или выходные параметры от, задача оптимизации портфеля. Несмотря на то, что большая часть проверки ошибок, которая происходит во время проблемной фазы настройки, отлавливает большинство трудностей с задачей оптимизации портфеля, процессы, чтобы подтвердить наборы портфеля и портфели являются трудоемкими и лучше всего сделаны оффлайн. Так, инструменты оптимизации портфеля специализировали функции, чтобы подтвердить наборы портфеля и портфели. Для получения информации о рабочем процессе при использовании Portfolio
объекты, смотрите Рабочий процесс Объекта Портфеля.
Поскольку это необходимо и достаточно, что ваш набор портфеля должен быть непустым, закрытым и ограниченным множеством, чтобы иметь допустимую задачу оптимизации портфеля, estimateBounds
функция позволяет вам исследовать свой набор портфеля, чтобы определить, непусто ли это и, если непустой, ограничено ли это. Предположим, что вам установили следующий портфель, который является пустым множеством потому что начальный портфель в 0
слишком далеко от портфеля, который удовлетворяет ограничение оборота и бюджет:
p = Portfolio('NumAssets', 3, 'Budget', 1); p = setTurnover(p, 0.3, 0);
Если набор портфеля пуст, estimateBounds
возвращает NaN
границы и наборы isbounded
отметьте к []
:
[lb, ub, isbounded] = estimateBounds(p)
lb = NaN NaN NaN ub = NaN NaN NaN isbounded = []
Предположим, что вы создаете неограниченный набор портфеля можно следующим образом:
p = Portfolio('AInequality', [1 -1; 1 1 ], 'bInequality', 0); [lb, ub, isbounded] = estimateBounds(p)
lb = -Inf -Inf ub = 1.0e-08 * -0.3712 Inf isbounded = logical 0
estimateBounds
возвращается (возможно бесконечный), ограничивает и устанавливает isbounded
отметьте к false
. Результат показывает, какие активы неограниченны так, чтобы можно было применить связанные ограничения по мере необходимости.Наконец, предположите, что вы создали набор портфеля, который и непуст и ограничен. estimateBounds
не только подтверждает набор, но также и получает более трудные границы, которые полезны, если вы обеспокоены фактической областью значений выбора портфеля для отдельных активов в вашем наборе портфеля:
p = Portfolio; 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 = logical 1
В этом примере у всех кроме второго актива есть более трудные верхние границы, чем входная верхняя граница подразумевает.
Учитывая набор портфеля, заданный в Portfolio
объект, вы часто хотите проверять, выполнимы ли определенные портфели относительно набора портфеля. Это может произойти с, например, начальные портфели и с портфелями, полученными из других процедур. checkFeasibility
функция определяет, выполним ли набор портфелей. Предположим, что вы выполняете следующую оптимизацию портфеля и хотите определить, выполнимы ли результирующие эффективные портфели относительно модифицированной проблемы.
Во-первых, настройте проблему в Portfolio
объект 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 ]; p = Portfolio; p = setAssetMoments(p, m, C); p = setDefaultConstraints(p); 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
q
. Решение второй проблемы с помощью checkFeasibility
демонстрирует что эффективный портфель для Portfolio
объект q
выполнимо относительно начальной проблемы:qwgt = estimateFrontier(q); checkFeasibility(p, qwgt)
ans = 1 1 1 1 1 1 1 1 1 1
Portfolio
| checkFeasibility
| estimateBounds