Подтвердите проблему портфеля 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

Смотрите также

| |

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

Больше о

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

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