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