Советы по написанию программного обеспечения для инвестиционного анализа своими руками

ВВЕДЕНИЕ

В статье #bridgetowallstreet я описал свою мотивацию и предпосылки для разработки Sток Pриса-Oзакрепление T набора инструментов (программное обеспечение SPOT). В этой статье я поделюсь своими советами и подборкой высококачественных бесплатных ресурсов, которые я считаю полезными и которые могут быть использованы инженерами/программистами, желающими реализовать свои собственные алгоритмы для инвестиционного анализа.

БЛОК-СХЕМА ВЫСОКОГО УРОВНЯ

Упрощенная блок-схема программного обеспечения для анализа инвестиций, сделанного своими руками, выглядит следующим образом:

КРАТКИЙ ОБЗОР

Все программные компоненты на блок-схеме могут работать на ядрах CPU (я расскажу о дополнительных компонентах, связанных с Neural Network и GPU возможно, как-нибудь в другой раз).

СКРЕБЕР ДАННЫХ

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

АНАЛИЗАТОР

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

ЭСТИМАТОР И ПРОЕКТОР

Estimator/Projector использует историю цен и необязательные дополнительные данные для изучения, оценки и прогнозирования цены в будущем. Большая часть работы в этом блоке выполняется с использованием машинного обучения.

ГЕНЕРАТОР ИСТОРИИ АНАЛИЗА

Если кто-то хочет увидеть, насколько успешным был анализ в прошлом, ему необходимо иметь возможность генерировать историю анализа. Этот программный блок делает именно это. Эта история может быть использована для корреляции и обратного тестирования.

Бэктестер и лицо, принимающее решения

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

В следующем разделе я расскажу о некоторых «HOWTO» для реализации этих программных компонентов.

ВНЕДРЕНИЕ POC (ПРОВЕРКА КОНЦЕПЦИИ)

Всякий раз, когда кто-то работает над новой идеей/продуктом/алгоритмом, становится необходимым внедрить быстрое доказательство концепции как часть детального «реализуемого» дизайна. Это не только помогает быстро выяснить, будет ли это работать или нет, но также помогает недвусмысленно донести идею до коллег-разработчиков. Я предпочитаю этот путь с тех пор, как начал руководить международными командами (десятилетия назад), потому что, я думаю, компетентные инженеры по всему миру с разной степенью владения разговорными языками гораздо лучше общаются с помощью языков программирования. Зачем тратить время на использование псевдокода, когда мы можем использовать языки программирования с простым синтаксисом…

Для такого высокоуровневого научного/математического приложения POC, как это, я предлагаю использовать язык программирования Python. Python многофункциональный, бесплатный, достаточно быстрый (для интерпретируемого языка), переносимый и поддерживается очень сильным сообществом. Если вы еще не использовали Python, то я думаю, что это хорошая идея, чтобы изучить его, так как он прост и, вероятно, поможет вам получить множество STEM-проектов (наука, технология, инженерия, математика). все самостоятельно (конечно, потому что экосистема Python очень развита).

ПОЛЕЗНЫЕ ПАКЕТЫ PYTHON ДЛЯ ПРОГРАММНЫХ КОМПОНЕНТОВ

В Python есть много хорошо протестированных высококачественных библиотек/пакетов, которые можно использовать в качестве стандартных строительных блоков для этого проекта. Это может помочь вам не изобретать велосипед. Я упомяну некоторые, которые отлично сработали для меня.

ПАНДА

Это отличный пакет для изучения и обработки табличных данных в электронных таблицах, базах данных и т. д., которые широко используются в науке и финансах. Он имеет несколько основных структур данных, а именно Series и DataFrame, которые можно использовать, поскольку они совместимы со многими другими пакетами Python. Существуют утилиты преобразования для пакетов, которым требуется другая форма структуры данных. Существуют также API для чтения/записи данных в различных форматах файлов (например, csv, xslx, hdf5 и т. д.).

URLLIB, RE, КРАСИВЫЙ СУП

Когда дело доходит до написания собственного парсера веб-данных, Urllib и RE (Regular Expression), возможно, являются первыми пакетами Python, которые я предлагаю использовать для выборки URL-страниц и извлечения интересующей информации с веб-страниц (если веб-сайт позволяет получать данные). таким образом, по крайней мере, с ограниченной пропускной способностью). Для этого не нужно быть экспертом в HTML. Я предлагаю обратиться к RFC 2616 (с веб-сайта IETF), который может пригодиться, если вы столкнетесь с ошибками. Если этого недостаточно, пакет Beautiful Soup может помочь в извлечении данных из HTML и XML.

PANDAS_DATAREADER

При извлечении информации об акциях, финансовых данных или экономических данных с удаленных сайтов я считаю очень полезным пакет pandas_datareader. Как следует из названия, он будет возвращать данные в удобных структурах данных Pandas. Он включает в себя множество считывателей данных, которые получают данные из интернет-источников, таких как Yahoo Finance, Tiingo, Quandl, FED Сент-Луиса (FRED), Всемирный банк и т. д.

YFINANCE

Это еще один пакет, который получает информацию об истории акций, финансовую информацию компании, информацию об опционах, событиях и т. д. от Yahoo Finance.

ТА-ЛИБ

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

НУМПИ, СКИПИ

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

SCIKIT-LEARN, СТАТМОДЕЛИ

Scikit-Learn — отличный пакет для машинного обучения. Это делает обучение программы на основе данных и «предсказание» очень простым, поскольку у нее есть множество моделей, из которых можно выбирать для своих целей. Statsmodels — еще один очень полезный пакет для статистических моделей.

МАТПЛОТЛИБ

Этот пакет отлично подходит для рисования и сохранения диаграмм/графиков вместе с аннотациями.

ПРОВЕРКА

Простая и понятная статистика обратного тестирования может быть сгенерирована на основе стратегии. Однако, если вам нужен готовый пакет, который может выполнять тестирование на истории, тогда пакет backtesting является хорошим ресурсом.

В следующем разделе я расскажу о некоторых советах по внедрению, установке и распространению такого POC.

ИСПОЛЬЗУЙТЕ МНОГОПРОЦЕССОР

Python — это интерпретируемый язык, поэтому из-за множества факторов могут возникнуть проблемы со скоростью. Однако при проверке концепции важно сбалансировать простоту, ясность и скорость. В результате я предлагаю организовать код так, чтобы не было необходимости использовать блокировки для взаимного исключения и чтобы его порядок работы был последовательным, чтобы можно было использовать параллельное выполнение. Многопроцессорный пакет Python для параллелизма на основе процессов довольно хорош, и можно добиться разумной производительности, используя несколько ядер ЦП. Есть гораздо больше возможностей для оптимизации, когда вы переходите к этапу производства.

ВРЕМЕННОЕ РЕШЕНИЕ ПРОБЛЕМ ПРИ УСТАНОВКЕ В PYTHON

Новички в Python часто жалуются на проблемы с установкой, особенно с научными пакетами, поскольку они имеют сложные зависимости и требуют локальной компиляции. Я думаю, что использование Conda может помочь решить большинство этих проблем. Conda/Anaconda – это кроссплатформенный пакет с открытым исходным кодом и система управления средой с большим набором стабильных пакетов для научных целей. Он работает на Mac, Linux и Windows, поэтому я предпочитаю использовать его вместе с pip Python. Многие такие пакеты, у которых возникают проблемы с установкой (при использовании pip), можно найти на основном канале Anaconda или на канале сообщества conda-forge. Некоторые пакеты можно установить с помощью pip, а другие — с помощью conda, чтобы обойти эту проблему. Вы можете просмотреть README для моего проекта, чтобы увидеть обходные пути для проблем с установкой, связанных с конкретным пакетом.

ИСПОЛЬЗУЙТЕ ВИРТУАЛИЗАЦИЯ

Безопаснее запускать такое приложение в собственном контейнере, поскольку это изолирует приложение от его среды. Для конечного пользователя можно избежать проблем с установкой, поскольку весь код и его зависимости упакованы вместе. Образ контейнера — это автономный пакет программного обеспечения, который включает в себя все необходимое для его запуска в качестве контейнера (например, системные инструменты, библиотеки, среду выполнения и код). Контейнеры также легко распространять, поскольку пользователю нужно будет просто извлечь образ контейнера и использовать его. Я считаю, что Docker очень удобен и эффективен для этой цели. Это делает развертывание на Mac, Linux и Windows очень управляемым. Вы можете обратиться к моему Dockerfile для этого проекта в качестве эталона для создания собственного образа контейнера. На следующей диаграмме показана концепция запуска контейнерных приложений на хост-системах:

БЕСПЛАТНЫЕ КНИГИ ДЛЯ СПРАВКИ

Может случиться так, что вы не помните определенные уроки STEM-образования. Когда это происходит, я нахожу бесплатные книги от openstax очень полезными для освежения памяти.

ЗАКЛЮЧИТЕЛЬНЫЕ ЗАМЕЧАНИЯ

Самодельное программное обеспечение для инвестиционного анализа сложное и имеет много движущихся частей. Как и во многих проектах STEM, для отдельного инженера может показаться «невозможным» начать с нуля. В этой статье я попытался показать, что экосистема Python сделала такие проекты «возможными» даже для отдельных людей. Представьте себе масштабы таких проектов, когда команды объединяются для решения задач!

За неукротимый дух сообщества Python!