Этот пример вычисляет границу эффективности портфелей, состоящих из трех различных активов, INTC, XON и RD, учитывая список ограничений. Ожидаемые доходы для INTC, XON и RD соответственно следующие:
ExpReturn = [0.1 0.2 0.15];
Ковариационная матрица
ExpCovariance = [ 0.005 -0.010 0.004; -0.010 0.040 -0.002; 0.004 -0.002 0.023];
Ограничение 1
Позвольте короткой продаже до 10% стоимости портфеля в любом активе, но ограничьте инвестиции в любой актив к 110% стоимости портфеля.
Ограничение 2
Рассмотрите два различных сектора, технологию и энергию, со следующей таблицей, указывающей на сектор, которому принадлежит каждый актив.
Актив | INTC | XON | RD |
Сектор | Технология | Энергия | Энергия |
Ограничьте инвестиции в Энергетический сектор к 80% стоимости портфеля и инвестиции в Технологический сектор к 70%.
Чтобы решить эту проблему, используйте Portfolio
, передающий в списке ограничений актива. Рассмотрите восемь различных портфелей вдоль границы эффективности:
NumPorts = 8;
Вводить актив ограничивает ограничения, заданные в Ограничении 1, создайте матричный AssetBounds
, где каждый столбец представляет актив. Верхняя строка представляет нижние границы, и более низкая строка представляет верхние границы. Поскольку границы являются тем же самым для каждого актива, только одна пара границ необходима из-за скалярного расширения.
AssetBounds = [-0.1, 1.1];
Ограничение 2 должно быть введено в две части, первая часть, задающая группы и вторую часть, задающую ограничения для каждой группы. Учитывая информацию выше, можно создать матрицу 1
s и 0
s указание, принадлежит ли определенный актив группе. Каждый столбец представляет актив, и каждая строка представляет группу. Этот пример имеет две группы: технологическая группа и энергетическая группа. Создайте матричный Groups
можно следующим образом.
Groups = [0 1 1; 1 0 0];
Матрица GroupBounds
позволяет вам задавать верхнюю и нижнюю границу для каждой группы. Каждая строка в этой матрице представляет группу. Первый столбец представляет минимальное выделение, и второй столбец представляет максимальное выделение каждой группе. Поскольку инвестиции в Энергетический сектор ограничиваются по 80% стоимости портфеля, и инвестиции в Технологический сектор ограничиваются в 70%, создайте матрицу GroupBounds
, использующую эту информацию.
GroupBounds = [0 0.80; 0 0.70];
Теперь используйте Portfolio
, чтобы получить векторы и массивы, представляющие риск, возвратиться, и веса для каждого из этих восьми портфелей, вычисленных вдоль границы эффективности. Ограничение бюджета добавляется, чтобы гарантировать, что веса портфеля суммируют к 1.
p = Portfolio('AssetMean', ExpReturn, 'AssetCovar', ExpCovariance); p = setBounds(p, AssetBounds(1), AssetBounds(2)); p = setBudget(p, 1, 1); p = setGroups(p, Groups, GroupBounds(:,1), GroupBounds(:,2)); PortWts = estimateFrontier(p, NumPorts); [PortRisk, PortReturn] = estimatePortMoments(p, PortWts); PortRisk PortReturn PortWts
PortRisk = 0.0416 0.0499 0.0624 0.0767 0.0920 0.1100 0.1378 0.1716 PortReturn = 0.1279 0.1361 0.1442 0.1524 0.1605 0.1687 0.1768 0.1850 PortWts = 0.7000 0.6031 0.4864 0.3696 0.2529 0.2000 0.2000 0.2000 0.2582 0.3244 0.3708 0.4172 0.4636 0.5738 0.7369 0.9000 0.0418 0.0725 0.1428 0.2132 0.2835 0.2262 0.0631 -0.1000
Выходные параметры представлены как столбцы для риска портфеля и возвращаются. Веса портфеля идентифицированы как соответствующие вектор-столбцы в матрице.
В то время как объект Portfolio
позволяет вам вводить фиксированный набор ограничений, связанных с минимальными и максимальными значениями для групп и отдельных активов, часто необходимо задавать больший и более общий набор ограничений при нахождении оптимального опасного портфеля. Portfolio
также обращается к этой потребности путем принятия произвольного набора ограничений.
Этот пример требует определения минимальных и максимальных инвестиций в различные группы.
Максимальная и минимальная подверженность группы
Группа | Минимальное воздействие | Максимальное воздействие |
---|---|---|
Северная Америка | 0.30 | 0.75 |
Европа | 0.10 | 0.55 |
Латинская Америка | 0.20 | 0.50 |
Азия | 0.50 | 0.50 |
Минимальное и максимальное воздействие в Азии является тем же самым. Это означает, что вы требуете фиксированного воздействия для этой группы.
Также примите, что портфель состоит из трех различных фондов. Соответствие между фондами и группами показывают в приведенной ниже таблице.
Состав группы
Группа | Фонд 1 | Фонд 2 | Фонд 3 |
---|---|---|---|
Северная Америка | X | X | |
Европа | X | ||
Латинская Америка | X | ||
Азия | X | X |
Используя информацию в этих двух таблицах, создайте математическое представление из представленных ограничений. Примите, что вектор весов, представляющих воздействие каждого актива в портфеле, называется Wts = [W1 W2 W3]
.
В частности
1. | W1 + W2 | ≥ | 0.30 |
2. | W1 + W2 | ≤ | 0.75 |
3. | W3 | ≥ | 0.10 |
4. | W3 | ≤ | 0.55 |
5. | W1 | ≥ | 0.20 |
6. | W1 | ≤ | 0.50 |
7. | W2 + W3 | = | 0.50 |
Поскольку необходимо представлять информацию в форме A*Wts <= b
, умножить уравнения 1, 3 и 5 на –1. Также поверните уравнение 7 в набор двух неравенств: W2 + W3 ≥ 0.50 и W2 + W3 ≤ 0.50. (Пересечение этих двух неравенств является самим равенством.) Таким образом
1. | - W1 - W2 | ≤ | -0.30 |
2. | W1 + W2 | ≤ | 0.75 |
3. | - W3 | ≤ | -0.10 |
4. | W3 | ≤ | 0.55 |
5. | - W1 | ≤ | -0.20 |
6. | W1 | ≤ | 0.50 |
7. | - W2 - W3 | ≤ | -0.50 |
8. | W2 + W3 | ≤ | 0.50 |
Обеспечение этих уравнений в матричное обозначение дает
A = [-1 -1 0; 1 1 0; 0 0 -1; 0 0 1; -1 0 0; 1 0 0; 0 -1 -1; 0 1 1] b = [-0.30; 0.75; -0.10; 0.55; -0.20; 0.50; -0.50; 0.50]
Один подход к решению этой проблемы портфеля должен явным образом использовать функцию setInequality
:
p = Portfolio('AssetMean', ExpReturn, 'AssetCovar', ExpCovariance); p = setBounds(p, AssetBounds(1), AssetBounds(2)); p = setBudget(p, 1, 1); p = setInequality(p, A, b); PortWts = estimateFrontier(p, NumPorts); [PortRisk, PortReturn] = estimatePortMoments(p, PortWts); PortRisk PortReturn PortWts
PortRisk = 0.0586 0.0586 0.0586 0.0586 0.0586 0.0586 0.0586 0.0586 PortReturn = 0.1375 0.1375 0.1375 0.1375 0.1375 0.1375 0.1375 0.1375 PortWts = 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500
setInequality
совпадает с использованием функции setGroups
в следующем примере (Задающий Ограничения Группы).Пример выше (Линейные Уравнения ограничений) задает матрицу ограничений, которая задает набор типичных сценариев. Это задает группы активов, задает верхние и нижние границы для общего выделения в каждой из этих групп, и это устанавливает общее выделение одной группы к фиксированному значению. Ограничения как они являются обычными явлениями. объект Portfolio
позволяет вам упростить создание матрицы ограничений для этих и других общих требований портфеля.
Альтернативный подход для решения проблемы портфеля должен использовать объект Portfolio
задать:
Матрица Group
, указывая на активы, которые принадлежат каждой группе.
Вектор GroupMin
, указывая на минимум ограничивает для каждой группы.
Вектор GroupMax
, указывая на максимум ограничивает для каждой группы.
На основе таблицы Group Membership создайте матрицу Group
с каждой строкой, представляющей группу и каждый столбец, представляющий актив.
Group = [1 1 0; 0 0 1; 1 0 0; 0 1 1];
Таблица Maximum and Minimum Group Exposure имеет информацию, чтобы создать GroupMin
и GroupMax
.
GroupMin = [0.30 0.10 0.20 0.50]; GroupMax = [0.75 0.55 0.50 0.50];
Теперь используйте Portfolio
и функцию setInequality
, чтобы получить векторы и массивы, представляющие риск, возвратиться, и веса для портфелей, вычисленных вдоль границы эффективности.
p = Portfolio('AssetMean', ExpReturn, 'AssetCovar', ExpCovariance); p = setBounds(p, AssetBounds(1), AssetBounds(2)); p = setBudget(p, 1, 1); p = setGroups(p, Group, GroupMin, GroupMax); PortWts = estimateFrontier(p, NumPorts); [PortRisk, PortReturn] = estimatePortMoments(p, PortWts); PortRisk PortReturn PortWts
PortRisk = 0.0586 0.0586 0.0586 0.0586 0.0586 0.0586 0.0586 0.0586 PortReturn = 0.1375 0.1375 0.1375 0.1375 0.1375 0.1375 0.1375 0.1375 PortWts = 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.5000 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500 0.2500
В этом случае ограничения позволяют только один оптимальный портфель. Поскольку восемь портфелей требовали, все восемь портфелей являются тем же самым. Обратите внимание на то, что решение этой проблемы портфеля с помощью функции setGroups
совпадает с использованием функции setInequality
в предыдущем примере (Линейные Уравнения ограничений).
Portfolio
| estimateFrontier
| estimatePortMoments
| setGroups
| setInequality