Ограничения группы являются необязательными линейными ограничениями, которые группируют активы вместе и ограничивают веса групп (см. «Ограничения группы»). Несмотря на то, что ограничения реализованы как общие ограничения, обычное соглашение состоит в том, чтобы сформировать матрицу групп, которая идентифицирует членство каждого актива в определенной группе с булевыми индикаторами (или 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
PortfolioMAD
| setBounds
| setBudget
| setDefaultConstraints
| setEquality
| setGroupRatio
| setGroups
| setInequality
| setOneWayTurnover
| setTurnover