Этот пример вычисляет эффективную границу портфелей, состоящих из трех различных активов, 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];
The 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