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