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

Иногда можно хотеть проверить либо свои входы, либо выходы задачи оптимизации портфеля. Хотя большая часть проверки ошибок, которая происходит во время фазы настройки задачи, ловит большинство трудностей с задачей оптимизации портфеля, процессы для проверки наборов портфелей и портфелей являются длительными и лучше всего выполняются в автономном режиме. Итак, инструменты оптимизации портфеля имеют специализированные функции для валидации портфельных наборов и портфелей. Для получения информации о рабочем процессе при использовании 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
В этом случае только два из 10 эффективных портфелей из начальной задачи допустимы относительно новой задачи в объекте Portfolio q. Решение второй задачи с помощью checkFeasibility демонстрирует, что эффективный портфель для Portfolio q объекта является допустимым относительно начальной задачи:

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

     1     1     1     1     1     1     1     1     1     1

См. также

| |

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

Подробнее о

Внешние веб-сайты