В этом примере вычисляется эффективная граница портфелей, состоящих из трех различных активов, 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 должно быть введено в двух частях: первая часть определяет группы, а вторая часть определяет ограничения для каждой группы. Учитывая приведенную выше информацию, можно построить матрицу из 1s и 0s указывает, принадлежит ли определенный актив группе. Каждый столбец представляет актив, а каждая строка - группу. В этом примере две группы: технологическая группа и энергетическая группа. Создание матрицы 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 объект для определения:
A Group матрица, указывающая активы, которые принадлежат каждой группе.
A GroupMin вектор, указывающий минимальные границы для каждой группы.
A GroupMax вектор, указывающий максимальные границы для каждой группы.
На основе таблицы Членство в группах создайте 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