exponenta event banner

Проверка проблемы с портфелем MAD

Иногда может потребоваться проверить либо входные данные, либо выходные данные, связанные с проблемой оптимизации портфеля. Несмотря на то, что большинство проверок ошибок, возникающих на этапе настройки проблемы, сталкиваются с наибольшими трудностями при оптимизации портфеля, процессы проверки наборов и портфелей MAD занимают много времени и лучше всего выполняются в автономном режиме. Таким образом, инструменты оптимизации портфеля имеют специализированные функции для проверки наборов и портфелей MAD. Сведения о рабочем процессе при использовании PortfolioMAD см. раздел Рабочий процесс объекта MAD.

Проверка набора портфолио MAD

Поскольку необходимо и достаточно, чтобы набор портфеля MAD был непустым, закрытым и ограниченным набором, чтобы иметь действительную проблему оптимизации портфеля, estimateBounds функция позволяет проверить набор портфолио, чтобы определить, является ли он непустым и, если нет, ограничен ли он. Предположим, что у вас есть следующий набор портфолио MAD, который является пустым набором, поскольку начальный портфель на 0 слишком далеко от портфеля, который удовлетворяет ограничениям бюджета и оборота:

p = PortfolioMAD('NumAssets', 3, 'Budget', 1);
p = setTurnover(p, 0.3, 0);

Если набор портфеля MAD пуст, estimateBounds прибыль NaN границы и устанавливает isbounded флаг для []:

[lb, ub, isbounded] = estimateBounds(p)
lb =

   NaN
   NaN
   NaN

ub =

   NaN
   NaN
   NaN

isbounded =

     []

Предположим, что вы создаете неограниченный набор портфолио MAD следующим образом:

p = PortfolioMAD('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. Результат показывает, какие активы являются неограниченными, чтобы при необходимости можно было применить связанные ограничения.

Наконец, предположим, что вы создали PortfolioMAD объект, который является непустым и ограниченным. estimateBounds не только проверяет набор, но и получает более жесткие границы, которые полезны, если вас интересует фактический диапазон выбора портфеля для отдельных активов в вашем портфеле:

p = PortfolioMAD;
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

В этом примере все активы, кроме второго, имеют более жесткие верхние границы, чем подразумевает входная верхняя граница.

Проверка портфелей MAD

Учитывая набор портфолио MAD, указанный в PortfolioMAD object, часто требуется проверить, являются ли конкретные портфели выполнимыми по отношению к набору портфелей. Это может происходить, например, с первоначальными портфелями и портфелями, полученными из других процедур. checkFeasibility функция определяет возможность сбора портфелей. Предположим, что выполняется следующая оптимизация портфеля и требуется определить, являются ли результирующие эффективные портфели выполнимыми относительно измененной задачи.

Сначала настройте проблему в PortfolioMAD объект 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 = PortfolioMAD;
p = setScenarios(p, AssetScenarios);
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     1     1     1     0     0     0     0     0
В этом случае только два из 10 эффективных портфелей из начальной проблемы являются выполнимыми относительно новой проблемы в PortfolioMAD объект q. Решение второй задачи с помощью checkFeasibility демонстрирует, что эффективный портфель для PortfolioMAD объект q выполнима относительно первоначальной проблемы:

qwgt = estimateFrontier(q);
checkFeasibility(p, qwgt)
ans =

     1     1     1     1     1     1     1     1     1     1

См. также

| |

Связанные примеры

Подробнее