Работа с ограничениями группы с использованием объекта PortfolioMAD

Ограничения группы являются необязательными линейными ограничениями, которые группируют активы вместе и ограничивают веса групп (см. «Ограничения группы»). Несмотря на то, что ограничения реализованы как общие ограничения, обычное соглашение состоит в том, чтобы сформировать матрицу групп, которая идентифицирует членство каждого актива в определенной группе с булевыми индикаторами (или true или false или с 1 или 0) для каждого элемента в матрице группы. Групповые ограничения имеют свойства GroupMatrix для матрицы членства в группе, LowerGroup для нижних ограничений для групп и UpperGroup для верхнего ограничения для групп.

Установка групповых ограничений с помощью PortfolioMAD Функция

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

G = [ 1 1 1 0 0 ];
p = PortfolioMAD('GroupMatrix', G, 'UpperGroup', 0.3);
disp(p.NumAssets)
disp(p.GroupMatrix)
disp(p.UpperGroup)
5

1     1     1     0     0

0.3000

Матрица групп G может также быть логической матрицей, так что следующий код достигает того же результата.

G = [ true true true false false ];
p = PortfolioMAD('GroupMatrix', G, 'UpperGroup', 0.3);
disp(p.NumAssets)
disp(p.GroupMatrix)
disp(p.UpperGroup)
5

1     1     1     0     0

0.3000

Установка групповых ограничений с помощью setGroups и addGroups Функции

Можно также задать свойства для групповых ограничений, используя setGroups. Предположим, что у вас есть портфель из пяти активов, и вы хотите убедиться, что первые три активы составляют не более 30% вашего портфеля. Учитывая PortfolioMAD p объекта, использование setGroups для установки групповых ограничений:

G = [ true true true false false ];
p = PortfolioMAD;
p = setGroups(p, G, [], 0.3);
disp(p.NumAssets);
disp(p.GroupMatrix);
disp(p.UpperGroup);
5

1     1     1     0     0

0.3000

В этом примере вы бы установили LowerGroup свойство, которое будет пустым ([]).

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

p = PortfolioMAD;
G = [ true true true false false ];    % group matrix for first group constraint
p = setGroups(p, G, [], 0.3);
G = [ true false true false true ];    % group matrix for second group constraint
p = addGroups(p, G, 0.2);
disp(p.NumAssets)
disp(p.GroupMatrix)
disp(p.LowerGroup)
disp(p.UpperGroup)
 5

1     1     1     0     0
1     0     1     0     1

  -Inf
0.2000

0.3000
  Inf
addGroups определяет, какие границы являются неограниченными, поэтому вам нужно фокусироваться только на ограничениях, которые вы хотите задать.

The PortfolioMAD объект, setGroups, и addGroups реализуйте скалярное расширение на любом из LowerGroup или UpperGroup свойства, основанные на размерности матрицы группы в свойстве GroupMatrix. Предположим, что у вас есть вселенная из 30 активов с 6 классами активов, так что активы 1-5, активы 6-12, активы 13-18, активы 19-22, активы 23-27 и активы 28-30 составляют каждый из классов активов, и вы хотите, чтобы каждый класс активов падал с 0% до 25% вашего портфеля. Предположим, что следующая матрица групп определяет ваши группы и скалярное расширение определяет общие границы каждой группы:

p = PortfolioMAD;
G = blkdiag(true(1,5), true(1,7), true(1,6), true(1,4), true(1,5), true(1,3));
p = setGroups(p, G, 0, 0.25);
disp(p.NumAssets)
disp(p.GroupMatrix)
disp(p.LowerGroup)
disp(p.UpperGroup)
30

  Columns 1 through 13

     1     1     1     1     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     1     1     1     1     1     1     1     0
     0     0     0     0     0     0     0     0     0     0     0     0     1
     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 14 through 26

     0     0     0     0     0     0     0     0     0     0     0     0     0
     0     0     0     0     0     0     0     0     0     0     0     0     0
     1     1     1     1     1     0     0     0     0     0     0     0     0
     0     0     0     0     0     1     1     1     1     0     0     0     0
     0     0     0     0     0     0     0     0     0     1     1     1     1
     0     0     0     0     0     0     0     0     0     0     0     0     0

  Columns 27 through 30

     0     0     0     0
     0     0     0     0
     0     0     0     0
     0     0     0     0
     1     0     0     0
     0     1     1     1

     0
     0
     0
     0
     0
     0

    0.2500
    0.2500
    0.2500
    0.2500
    0.2500
    0.2500

См. также

| | | | | | | | |

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

Подробнее о