Что должен уметь программист, чтобы получить работу в сфере финансов
В нашем блоге на Хабре мы много пишем об использующихся в сфере финансов технологиях. На фондовых биржах сегодня используется самое передовое программное и аппаратное обеспечение — как для построения самой торговой инфраструктуры, так и для создания систем онлайн-трейдинга.
Сегодня здесь востребованы математики, физики и программисты. Люди способные создавать алгоритмы торговли и делать на их базе качественный софт. Многие программисты, в свою очередь, хотели бы попробовать свои силы в финансовой отрасли — она может предложить привлекательное сочетание интересных задач и высоких зарплат.
Сегодня мы поговорим о том, какими навыками нужно обладать, чтобы получить работу в HFT-фирме, инвестиционном банке, хедж-фонде или брокерской компании. При подготовке топика использовались материалы сайтов experience.com и quantstart.com.
Языки
Одним из самых популярных в сфере финансов языков программирования на протяжение многих лет является C. Его нужно знать не только для поддержки устаревшего кода, но также для организации работы с API в системах электронных торгов и обмена данными с провайдерами.
«Основным языком Уолл-Стрит» называют C++, поскольку самое главное для трейдинговых систем — это скорость. Какой бы хорошо продуманной и отлаженной ни была торговая программа, если в какой-то момент она потратить лишние миллисекунды на «сбор мусора», то это может привести к серьезным убыткам. Тоже самое касается и биржевой инфраструктуры — всевозможных шлюзов передачи данных и «коннекторов» к различным системам.
Как результат, программисты C++ крайне востребованы в компаниях финансового сектора — в том числе и на самих биржах. И такая ситуация сохранится еще на долгие годы вперед — кому-то нужно поддерживать текущую инфраструктуру.
Для одного из наших прошлых материалов мы общались с российским экспертом по созданию торговых систем, который рекомендовал в ситуациях, когда необходима максимальная скорость, использовать следующие технологии:
Для этих задач очень хорошо подходит C++ и чистый C. Бывает и так, что быстрые роботы создаются и чуть ли не на ассемблере — здесь стоит упомянуть механизмы прямого чтения-записи данных в память сетевой карты, минуя стандартные механизмы работы через драйверы, а также работу с «супербыстрым программируемым железом» вроде FPGA.
По данным создателя ресурса QuantStart и профессионального трейдера Майкла Халлс-Мура, сегодня senior-программист с 5–7-летним опытом работы на C++ может зарабатывать в Лондоне £500–700 в день. В российских компаниях специалисты по C++ также очень востребованы. Кроме того, таких разработчиков часто привлекают профессиональные трейдеры, которые могут создать успешную торговую стратегию, но нуждаются в помощи того, кто мог бы ее запрограммировать.
C# и Java также довольно давно используются различными финансовыми институтами. В основном, крупными банками для их трейдинговой инфраструктуры. Эти языки используются для создания фронтенд-интерфейсов и обработки данных.
На российском финансовом рынке очень ценятся специалисты, знающие C++ и C# — в нашем блоге ранее мы рассказывали историю разработчика, который благодаря этим инструментам смог найти работу в финансовых компаниях, а затем занялся созданием собственных торговых систем. Вот, что герой материала советовал изучить программистам, которые хотели бы в будущем получить работу в сфере финансов:
Тем, кто начинает свой путь в трейдинге или как-то заинтересован в этой области, я бы посоветовал обратить свое внимание на высокоуровневые платформы и языки, такие как .NET и Java. Последняя очень популярна на западных фондовых рынках, у нас пока меньше, но есть хорошие перспективы более широкого распространения этого языка. Это значит, что Java-программисты, будут востребованы в финансовых компаниях, фондах и брокерах. Все-таки .NET — довольно закрытая платформа, которая к тому же имеет целый ряд ограничений. Для low-latency и HFT-торговли она подходит не очень хорошо.
Но и на .NET и на Java можно довольно быстро создавать законченные программные продукты. Главный минус — они бывают не самыми быстрыми (если счет идет на микросекунды).
Для прототипирования квантовых моделей в хедж-фондах и «квантовых» трейдерских подразделений в банках часто применяют скриптовые языки, вроде Python, MATLAB и R.
Кванты-трейдеры и разработчики финансовых приложений часто пишут код своих прототипов именно на скриптовых языков. Затем эти прототипы уже описываются с помощью более «быстрых» языков, вроде С++ разработчиками, специализирующимися на этом.
Клиент-серверные системы
Трейдинговые системы по определению являются распределенными. Практически все компании, от небольших фирм до крупных инвестиционных банков, строят свои системы с применением протоколов TCP и UDP — иногда в деле трейдинга скорость важнее гарантии доставки данных.
Поэтому разработчикам торговых приложений необходимо хорошо разбираться в классах сокетов для C: socket (), bind (), poll () и select (). Работать с ними напрямую практически никогда не нужно, поскольку для этого уже есть множество готовых библиотек, однако понимать, как устроено взаимодействие с ними просто необходимо.
Кроме того, для разработчиков финансового софта плюсом является знание использующихся в этой сфере протоколов передачи данных, таких как FIX, FAST, ASTS Bridge.
Потоки
Создание клиент-серверных систем и многопоточное программирование в финансовой сфере идут рука об руку. Все это подразумевает, к примеру, написание стандартного TCP-сервера, сервера балансировки нагрузки, сервера высокой производительности — разработчик, который хочет заниматься созданием софта в финансовой компании должен уметь это делать. Неплохо также понимать, что такое классы pthreads (), fork (), mutexes и идея семафора в целом. В случае применения Java также нужно разбираться в существующих для этого языка методов синхронизации.
Базы данных
В основе систем для финансовой сферы лежат базы данных, поэтому разработчикам необходимы глубокие знания SQL. Знания простых операторов выбора будет недостаточно — довольно часто в ходе работы придется возиться с созданием процедур хранения, разбираться с индексами, и т.д. Кроме того, необходимо понимать разницу между table-level, page-level и row-level блокировками.
UNIX
Трейдинговые системы обычно используют платформу UNIX (часто это Solaris и Linux). Для Windows, как правило, создаются торговые терминалы с графическими интерфейсами, для разработки же «движка» трейдингового софта используют UNIX.
Это означат, что разработчикам просто необходимо понимать, что такое команды tail, sed, grep, awk, tr и top. Еще лучше, если специалист умеет работать с either vi, vim или emacs и не пугается проблем, вызванных неверной конфигурацией $LD_LIBRARY_PATH.
Навыки отладки
В карьере программиста в финансовых организациях пригодится умение анализировать core-файлы с помощью dbx или gdb. Подобная необходимость возникает нечасто, но если это все же случится, лучше уметь сделать все самостоятельно.
Заключение
Фондовый рынок — крайне высокотехнологичная отрасль, которая активно развивается, что делает работу в этой сфере очень привлекательной для ИТ-специалистов, желающих развивать свои навыки. При этом, для того, чтобы поучаствовать в интересных проектах инженеру вовсе не обязательно ехать за границу — новые технологии активно внедряются и на российском фондовом рынке. В одном из наших прошлых материалов мы рассказывали о собственных ИТ-проектах по созданию терминала SmartX и брокерской торговой системы Matrix, в развитии которых можно поучаствовать.
В заключение, еще один совет: не стоит слишком беспокоиться по поводу знания внутренней «кухни» трейдинговых процессов и понятий из сферы финансов. Разумеется, это может стать дополнительным преимуществом, однако отсутствие экономических и знаний вряд ли помешает хорошему программисту найти работу в финансовой компании.
P.S. В команду разработчиков ITinvest для проектной работы над торговыми приложениями требуется сильный разработчик. Наши требования и пожелания к кандидатам:
- Хорошее знание ООП и опыт разработки высоконагруженных приложений на C++, опыт разработки на C#;
- Знание стандартных алгоритмов;
- Опыт разработки многопоточных приложений;
- Умение пользоваться системами контроля версий;
- Представление о работе финансовых протоколов (FIX, FAST, ASTS Bridge).
О том, что ждет разработчиков торговых приложений ITinvest мы писали в этом материале.
Рассказ о себе и проектах, в которых удалось поучаствовать, присылайте в текстовом формате в теле письма на адрес электронной почты ivan.igoshev@itinvest.ru.