Многих людей, интересующихся темой финансов, занимает вопрос о том, какой язык программирования лучше всего подходит для работы, скажем, на фондовом рынке. На него невозможно ответить однозначно, поскольку разные языки подходят для разных задач.
В нашем сегодняшнем материале мы поговорим как раз о том, как понять, какую из существующих технологий следует использовать в конкретной ситуации на фондовом рынке.
Принятие решений об инвестициях
Прежде всего следует определиться, для чего нам понадобилось что-то программировать. Частые применения — разработка ПО для торговли на бирже или анализа больших массивов данных. От того, какой стиль работы на рынке предполагается, и будет во многом зависеть выбор языка программирования. Говоря точнее, он будет зависеть от требований к скорости работы приложений.
Вот, что говорит об этом разработчик сервиса YCharts Джеффри Шек в соответствующем треде на Quora:
Если речь идет не о высокочастотной торговле, то очевидно, что решения об инвестициях будут приниматься не на основе секунд времени обработки. Скорее здесь главными задачами будет поиск и сбор информации. К примеру, многие хедж-фонды инвестируют только в четко определенных нишах (уникальные индустрии, неликвидные долговые рынки, проблемные компании и т.п.). Собрать нужную информацию в таком случае будет нелегко, даже если работать с различными API — рассчитывать на то, что информацию удастся просто выкачать из разных источников без «танцев с бубном».
Таким образом, если вам нужно агрегировать данные для анализа, то скорее всего вы захотите использовать что-то с большим количеством библиотек, довольно быстродействующим, с большим количеством уже написанного кода для решения разных задач (чтобы каждый раз не изобретать колесо). Чаще всего это будет что-то типа C#, Java или Python.
Если нужен быстрый торговый робот
Существуют и ситуации, когда скорость работы является приоритетом. В таком случае разработчики прибегают к использованию эффективных низкоуровневых языков.
Руководитель направления алгоритмического трейдинга в АО «Финам» Алексей Афанасьевский в одной из наших публикаций называл следующие технологии, подходящие в подобной ситуации:
Для этих задач очень хорошо подходит C++ и чистый C. Бывает и так, что быстрые роботы создаются и чуть ли не на ассемблере — здесь стоит упомянуть механизмы прямого чтения-записи данных в память сетевой карты, минуя стандартные механизмы работы через драйверы, а также работу с «супербыстрым программируемым железом» вроде FPGA.
Под капотом бизнеса
Программирование торговых алгоритмов — это «визитная карточка» биржевых технологий, однако настоящего успеха на рынке не добиться, если не уделять внимание и программным компонентам, которые отвечают не за саму торговлю, а за «бухгалтерию» этого процесса.
Один из таких аспектов, по мнению Джеффри Шека — это хранение данных.
Языки для работы с базами данных крайне важны. Хотите сохранить каждую заявку по акциям Microsoft за день? Попробуйте сделать это с помощью SQL-базы данных (MySQL, SQLite и т.п.). Весьма вероятно в таком случае вам придется потратить много часов на оптимизацию, прежде чем на основе этих данных удастся совершить сделку.
Я бы рекомендовал обратить внимание на языки, которые позволяют хранить данные в колоночном формате (а не в строковом) — это хорошо подходит для тиковых данных. Среди подобных технологий можно назвать KDB, OneTick, SECDB (созданная в Goldman Sachs). Если же нужно просто хранить цены акций, то отлично подойдут и MySQL с PosgreSQL.
Все в том же треде на Quora PhD-профессор Принстонского университета и руководитель департамента разработки компании Flexport Эндрю Ледвин остановился на языках программирования, которые можно использовать для работы «на уровне стратегии».
Здесь нам нужно генерировать приносящие прибыль правила работы, основываясь на различных сигналах. […] На данном уровне ключевым моментом является выразительность языка. Часто на нем используются языки вроде Python или даже C++ с Java, но я считаю идеальным вариантом Haskell или Ruby в качестве «обертки» с последующей разработкой ключевых модулей на более низкоуровневых языках.
Еще один важный этап — поиск сигналов. Чаще всего это офлайн-активность, в ходе которой анализируется большое количество статистики с учетом ограничений систем реального времени. Здесь используют инструменты вроде R или Matlab (как тот же Goldman). Важна возможность машинного обучения и работы с большими объёмами данных с минимальными усилиями. Но вообще, здесь главное результат — если вам удается добиваться его с помощью Excel, то кому какое дело?
Если хочется просто работать программистом
Выше мы говорили о выборе языка программирования в разрезе написания собственных торговых систем. Однако не следует забывать и о том, что инфраструктура биржи и брокеров также кем-то написана на каких-то языках, и всю эту экосистему должны поддерживать сотрудники соответствующих компаний.
В финансовой отрасли всегда ценятся специалисты, которые хорошо знают C++, поскольку значительная часть систем брокеров и бирж написана с его применением. На нем пишут что угодно: от библиотек для расчета ценовых моделей деривативов до инфраструктурных решений, обработки разнообразных потоков и хранения данных. Поэтому специалистам, которые хорошо знают С++, всегда найдется работа (например, на той же Московской бирже).
Также в инвестиционных компаниях довольно часто используются C# и все чаще Java, говорит известный квант и основатель блога Quantstart Майкл Халлс-Мур. Эксперт отмечает популярность этих технологий в инфраструктурных проектах — различные фронтенд-интерфейсы, дата-фиды и иногда даже модули для расчета цен деривативов пишут именно на них.
С этим согласен разработчик торгового терминала SmartX Андрей Горьковенко. В интервью он посоветовал разработчикам, которые хотели бы попробовать себя на фондовом рынке, начинать изучения этих языков:
Я бы посоветовал обратить свое внимание на высокоуровневые платформы и языки, такие как .NET и Java. Последняя очень популярна на западных фондовых рынках, у нас пока меньше, но есть хорошие перспективы более широкого распространения этого языка. Это значит, что Java-программисты, будут востребованы в финансовых компаниях, фондах и брокерах.
Заключение: Все взаимосвязано
Черту под обсуждением языков программирования в сфере финансов можно подвести, процитировав кванта из крупного инвестфонда в Гонконге Джозефа Ванга. По мнению этого эксперта, используемые для решения тех или иных задач языки программирования дополняют друг друга.
Для реализации вещей, которые требуют большой работы с процессором, используется C++ или CUDA. Для процессов, связанных с обменом данными, применяют Java. Для проведения исследований и прототипирования торговых приложений прибегают к скриптовым языкам Python, R, TradeScript (используется в терминале SmartX) или даже Matlab. В свою очередь для создания отчетов многие трейдеры применяют Excel/VBA.
Все эти языки взаимосвязаны. Вы можете написать модуль анализа цен на C++, затем скормить полученные данные торговому движку на Java, проанализировать данные с помощью Python или R, а затем выгрузить все это в отчет через Excel.
Ссылки по теме:
- Какие языки программирования наиболее востребованы в сфере финансов
- How-to: Что нужно учитывать при разработке первого торгового робота
- Книги и образовательные ресурсы по алгоритмической торговле
- Какие языки программирования популярны у HFT-фирм и хедж-фондов [обсуждение на Quora]
- Технические статьи по автоматическому и алгоритмическому трейдингу в блоге QuantStart [en]
Комментарии (8)
Renius
19.06.2015 19:50Роботы на работе у спекулянтов. Окей, даешь развитие мыльных пузырей!
itinvest Автор
19.06.2015 20:10+1При чем тут мыльные пузыри было бы интересно узнать? В тексте прямо указано, что различный софт используют в работе и долгосрочные инвесторы (для анализа больших объёмов даных, например). Сфера финансов не ограничивается спекуляциями на самом деле.
Renius
20.06.2015 14:24Неоднократно говорится, что низкоуровневые узлы пишутся на быстрых языках.
Все обертки на языках высокого уровня, для представления результатов. Но данные для результатов носят микро-харрактер
> Хотите сохранить каждую заявку по акциям Microsoft за день?
> Чаще всего это офлайн-активность, в ходе которой анализируется большое количество статистики с учетом ограничений систем реального времени.
> Программирование торговых алгоритмов — это «визитная карточка» биржевых технологий
> Говоря точнее, он будет зависеть от требований к скорости работы приложений.
> Для этих задач очень хорошо подходит C++ и чистый C. Бывает и так, что быстрые роботы создаются и чуть ли не на ассемблере
Все направлено на принятия мнгновенного решения, для обеспечения микротранзакций. А что происходит если делать деньги из воздуха?
Вуаля!itinvest Автор
20.06.2015 23:51Ну вы тут просто понадергали фраз. Спекуляции имеют место быть (и кстати в них самих по себе нет ничего плохого, если на рынке соблюдается баланс между спеулянтами и другими игроками), как и то, что существует огромное количество софта, используемого инвесторами (не спекулянтами), например, для анализа данных. Это уже не деньги из воздуха, думать так — сильное упрощение.
VolCh
21.06.2015 15:10При спекуляциях деньги из воздуха не берутся. Для игроков на бирже — это игра с отрицательной суммой.
sashagil
Любопытно, аналитики экзотикой типа J / K уже не пользуются?
inv2004
Пользуются, так как оно на уровне бд. ну т.е. связка аналогичная, например, pl/sql + java сверху.
alexeiz
k/kdb испльзуется и ещё как. К сожалению, потому что K — это write-only язык, особенно, если на нём пишут кванты, у которых обычно нет никакой культуры программирования.