Иногда, можно хотеть подтвердить или входные параметры к или выходные параметры от, задача оптимизации портфеля. Несмотря на то, что большая часть проверки ошибок, которая происходит во время проблемной фазы настройки, отлавливает большинство трудностей с задачей оптимизации портфеля, процессы, чтобы подтвердить наборы портфеля и портфели являются трудоемкими и лучше всего сделаны оффлайн. Так, инструменты оптимизации портфеля специализировали функции, чтобы подтвердить наборы портфеля и портфели. Для получения информации о рабочем процессе при использовании 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
0estimateBounds возвращается (возможно бесконечный), ограничивает и устанавливает 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 0q. Решение второго использования задач checkFeasibility демонстрирует что эффективный портфель для Portfolio объект q выполнимо относительно начальной проблемы:
qwgt = estimateFrontier(q); checkFeasibility(p, qwgt)
ans =
1 1 1 1 1 1 1 1 1 1Portfolio | estimateBounds | checkFeasibility