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