Основная цель состоит в том, чтобы выбрать 10 акций с наименьшей корреляцией между собой из пула из 50, чтобы у меня был хорошо диверсифицированный портфель.
Мне удалось написать некоторый макрос VBA, чтобы загрузить ежедневные данные о ценах за последние 3 года из Yahoo Finance, а затем вычислить матрицу корреляции 50x50 (используя функцию Correl), используя дневное закрытие в качестве данных.
То, что я пробовал до сих пор, - это просто эвристика локального максимума:
- Для двух акций, имеющих наибольшую корреляцию друг с другом, удалите одну из них. Из этих двух удалите ту, которая имеет более высокую среднюю корреляцию со всеми остальными акциями.
- Когда я удаляю запас из пула, я просто удаляю соответствующую строку и столбец, чтобы получить меньшую матрицу.
- Повторяйте, пока у меня не останется всего 10 акций (матрица 10x10).
Мне было интересно, есть ли какой-то алгоритм, который уже решает такую задачу и дает оптимальное решение?