Ограничения группы являются необязательными линейными ограничениями, которые группируют активы вместе и ограничивают веса групп (см. «Ограничения группы»). Несмотря на то, что ограничения реализованы как общие ограничения, обычное соглашение состоит в том, чтобы сформировать матрицу групп, которая идентифицирует членство каждого актива в определенной группе с булевыми индикаторами (или true или false или с 1 или 0) для каждого элемента в матрице группы. Групповые ограничения имеют свойства GroupMatrix для матрицы членства в группе, LowerGroup для нижних ограничений для групп и UpperGroup для верхнего ограничения для групп.
PortfolioCVaR ФункцияСвойства групповых ограничений задаются через PortfolioCVaR объект. Предположим, что у вас есть портфель из пяти активов и вы хотите убедиться, что первые три активы составляют не более 30% вашего портфеля, тогда можно задать ограничения для групп:
G = [ 1 1 1 0 0 ]; p = PortfolioCVaR('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 = PortfolioCVaR('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% вашего портфеля. Учитывая PortfolioCVaR p объекта, использование setGroups для установки групповых ограничений:
G = [ true true true false false ]; p = PortfolioCVaR; 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 = PortfolioCVaR; 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 PortfolioCVaR объект, setGroups, и addGroups реализуйте скалярное расширение на любом из LowerGroup или UpperGroup свойства, основанные на размерности матрицы группы в свойстве GroupMatrix. Предположим, что у вас есть вселенная из 30 активов с 6 классами активов, так что активы 1-5, активы 6-12, активы 13-18, активы 19-22, активы 23-27 и активы 28-30 составляют каждый из классов активов, и вы хотите, чтобы каждый класс активов падал с 0% до 25% вашего портфеля. Предположим, что следующая матрица групп определяет ваши группы и скалярное расширение определяет общие границы каждой группы:
p = PortfolioCVaR; 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 16
1 1 1 1 1 0 0 0 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 0 0 0 1 1 1 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 0 0 0 0 0 0 0 0 0
Columns 17 through 30
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
1 1 0 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 0 1 1 1 1 1 0 0 0
0 0 0 0 0 0 0 0 0 0 0 1 1 1
0
0
0
0
0
0
0.2500
0.2500
0.2500
0.2500
0.2500
0.2500PortfolioCVaR | setBounds | setBudget | setDefaultConstraints | setEquality | setGroupRatio | setGroups | setInequality | setOneWayTurnover | setTurnover