Иногда, можно хотеть подтвердить или входные параметры к или выходные параметры от, задача оптимизации портфеля. Несмотря на то, что большая часть проверки ошибок, которая происходит во время проблемной фазы настройки, отлавливает большинство трудностей с задачей оптимизации портфеля, процессы, чтобы подтвердить наборы портфеля и портфели являются трудоемкими и лучше всего сделаны оффлайн. Так, инструменты оптимизации портфеля специализировали функции, чтобы подтвердить наборы портфеля и портфели. Для получения информации о рабочем процессе при использовании объектов Портфеля смотрите Рабочий процесс Объекта Портфеля.
Поскольку это необходимо и достаточно, что ваш набор портфеля должен быть непустым, закрытым и ограниченным множеством, чтобы иметь допустимую задачу оптимизации портфеля, функция 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 | checkFeasibility | estimateBounds