Проверьте задачу портфеля MAD

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

Валидация набора портфелей 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 объект, вы часто хотите проверить, являются ли определенные портфели допустимыми относительно набора портфелей. Это может происходить, например, с начальными портфелями и с портфелями, полученными из других процедур. 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

См. также

| |

Похожие примеры

Подробнее о