Используя Excel VBA, учитывая ежедневную цену 50 акций, выберите 10 акций таким образом, чтобы они имели минимальное соотношение - PullRequest
0 голосов
/ 15 апреля 2010

Цель высокого уровня состоит в том, чтобы выбрать 10 акций, которые имеют наименьшую корреляцию между собой, из пула из 50, чтобы у меня был хорошо диверсифицированный портфель.

Мне удалось написать некоторый макрос VBA для загрузки данных о дневных ценах за последние 3 года из финансов Yahoo, а затем вычислить матрицу корреляции 50x50 (используя функцию Корреля), используя в качестве данных дневное закрытие.

То, что я до сих пор пробовал, это просто локально-максимальная эвристика:

  • Для двух акций, которые имеют самую высокую корреляцию друг с другом, удалите одну из них. Между двумя, удалите тот, который имеет более высокую среднюю корреляцию со всеми другими акциями.
  • Когда я удаляю акцию из пула, я просто удаляю соответствующую строку и столбец, чтобы получить меньшую матрицу.
  • Повторяйте, пока у меня не останется только 10 акций (матрица 10х10).

Мне было интересно, есть ли какой-нибудь алгоритм, который уже решает такую ​​проблему и дает оптимальное решение?

Ответы [ 2 ]

0 голосов
/ 17 августа 2010

В пакете MATRIX есть несколько полезных функций, которые позволят вам выполнить анализ основных компонентов (PCA) или даже анализ независимых компонентов (ICA), чтобы сделать более общий и принципиальный подход.

0 голосов
/ 15 апреля 2010

Я не совсем уверен из вашего описания, но я думаю, что вы хотите проверить справку для функции STDEV. Более подробная информация также здесь .

Большинство людей используют это для экранирования аберраций, тогда как вы будете экранировать неаберрации (и это также довольно распространенное использование, например, для выявления «проблемных случаев» в пакете).

...