Как портфельное программное обеспечение генерирует свои портфельные предложения так быстро, когда возможности огромны? [закрытый]


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

После 6 месяцев попыток я признаю, что мой подход невозможен. Я пытался использовать алгоритмы комбинаций, как из книги кнута, а также делать комбинации bit, чтобы попытаться найти все возможные портфели(я ограничил их 30 акциями) на NYSE(5000+ акций). Но по словам всех, с кем я говорил, это займет у меня миллиарды миллиардов лет. чтобы просто получить один день результатов(для меня на GPU я остановил его после 2 дней прямой обработки).

Так что же я упускаю? Мы бы ввели нашу толерантность к риску и взгляд на рынок(ожидания роста фондового рынка, инфляционные ожидания, ожидания ФРС и т. д..) и это дало бы нам идеальный портфель (в теории..) в течение нескольких секунд / минут. С тысячами возможностей и квадриллионами возможных комбинаций Весов акций, как они могут рассчитывать результаты так быстро (или вообще)? Как администратор системы, я знаю, что мы загружали файл каждый день(менее 100 МБ и загружены в базу данных mssql, вероятно, просто рынок data..so не то чтобы у нас были все возможности. Используя мой подход выше, я получал файл 5 гигов за минуту выполнения моей версии комбинации кнута algo), и приложения работали в автономном режиме(поэтому он должен был делать это локально на рабочем столе/ноутбуке, а не на массивном суперкомпьютере где-то и требовал минуты или двух для запуска..15 минут был самым длинным для Глобального фонда, который включает в себя все акции в мире). Это так запутанно, потому что их работа требовала корреляции всего фонда(Я не думаю, что они просто посылали Лучшие акции, которые они предварительно рассчитали, потому что все получили разные результаты). Итак, если я хотел 30-процентный фонд, который давал мне 2% прибыли и имел отрицательную корреляцию с рынком, и был хеджирован на 60%, как программное обеспечение могло так быстро генерировать этот портфель из миллиардов возможностей? заметьте, это не так. спрашивая о математической или финансовой части, я спрашиваю, как он смог генерировать 30 акций со всего рынка, которые давали 2% прибыли, когда для этого ему нужно было бы знать доходность всего 30 портфелей акций (только это заставило бы его работать в течение миллиардов лет, верно? другие ограничения делают его более сложным).

Так как же это делается программно? Я начинаю верить, что они не используют комбинационный алгоритм кнута, чтобы генерировать каждую возможность, пока их результаты не кажутся случайно выбранными, и индивидуальный выбор акций, похоже, упускает корреляционную часть. Как может так много инвестиционных программ делать такие вещи?

2 5

2 ответа:

Такие алгоритмы почти наверняка не генерируют все возможные варианты-как вы справедливо заметили, это было бы непрактично.

Выбор портфолио, однако, очень легко сделать с другими методами, которые дадут вам очень хороший ответ. Два наиболее вероятных варианта:

    Если вы сделаете упрощающие допущения относительно соотношения риск / доходность, вы можете решить для оптимального портфеля математически (см. http://en.wikipedia.org/wiki/Capital_asset_pricing_model для некоторых из математика) Генетический алгоритм, который выполняет операции мутации / кроссовера на рандомизированных выборочных портфелях, довольно быстро найдет очень хорошее решение. Вы можете объединить это с моделированием в стиле Монте-Карло, чтобы понять диапазон возможных результатов.

Лично я, вероятно, предложил бы подход генетического алгоритма - хотя он не так математически чист, он даст вам хорошие ответы и должен быть в состоянии справиться с любыми ограничениями, которые вы хотите бросить на него. легко (например, максимальное количество акций в портфеле)

Современная теория портфеля является самостоятельным предметом, с такими книгами, как "современная теория портфеля и инвестиционный анализ" и введение в http://en.wikipedia.org/wiki/Modern_portfolio_theory .

Один из способов получить задачи, которые вы действительно можете решить, - это рассматривать их как математическую оптимизационную задачу. Если у вас есть вектор, который дает вам сумму каждой акции, которую вы покупаете, то - при различных предположениях-доходность является линейной функцией этого вектора, а риск является квадратичной функцией этого вектора. Максимизация доходности для данного риска или минимизация риска для данного дохода - это хорошо понятная математическая задача, даже для очень большого количества акций - http://en.wikipedia.org/wiki/Quadratic_programming . Одна практическая проблема с этим заключается в том, что ответ, который вы получите, вероятно, скажет вам купить некоторую долю почти всех акций на рынке. Я предполагаю, что программы реальной жизни используют некоторую эвристику "секретного соуса", которая не гарантируйте идеальный ответ, при условии ограничения на количество акций, которые вы действительно готовы купить, но работает довольно хорошо на практике. Возвращение идеального ответа представляется трудной задачей-см., например, http://arxiv.org/ftp/arxiv/papers/1105/1105.3594.pdf