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

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

Проверка набора портфелей CVaR

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

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

Если набор портфеля CVaR пуст, estimateBounds возвращает NaN ограничивает и устанавливает isbounded флаг в []:

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

   NaN
   NaN
   NaN

ub =

   NaN
   NaN
   NaN

isbounded =

     []

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

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

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

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

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

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

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

Во-первых, настройте задачу в PortfolioCVaR 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 = PortfolioCVaR;
p = setScenarios(p, AssetScenarios);
p = setDefaultConstraints(p);
p = setProbabilityLevel(p, 0.95);

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

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

     1     1     1     1     1     1     1     1     1     1

См. также

| |

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

Подробнее о

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

Для просмотра документации необходимо авторизоваться на сайте