Этот пример вычисляет границу эффективности портфелей, состоящих из трех различных активов, 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
функция в предыдущем примере (Линейные Уравнения ограничений).
estimateFrontier
| estimatePortMoments
| Portfolio
| setGroups
| setInequality