В нашем блоге на Хабре мы много пишем об использующихся в сфере финансов технологиях. На фондовых биржах сегодня используется самое передовое программное и аппаратное обеспечение — как для построения самой торговой инфраструктуры, так и для создания систем онлайн-трейдинга.

Сегодня здесь востребованы математики, физики и программисты. Люди способные создавать алгоритмы торговли и делать на их базе качественный софт. Многие программисты, в свою очередь, хотели бы попробовать свои силы в финансовой отрасли — она может предложить привлекательное сочетание интересных задач и высоких зарплат.

Сегодня мы поговорим о том, какими навыками нужно обладать, чтобы получить работу в 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.

Комментарии (25)


  1. oYASo
    10.03.2016 10:36

    С Лондом-то все понятно, а что там с зарплатами отечественных финансовых программистов? :)

    В свете перехода .NET на Open Source, едва ли стоит хоронить эту технологию.

    Еще интересно, какие библиотеки используются программистами для всех этих стратегий. TA-Lib, QuantLib, etc? Или вообще у всех свои велосипеды?


    1. Bond_algotrade
      11.03.2016 20:09

      Мы как раз ищем такого специалиста: http://hh.ru/vacancy/16106826


  1. hazard2
    10.03.2016 10:55
    +8

    Вы тоже ?500-700 в день предлагаете? :)


  1. Secessus
    10.03.2016 11:22
    +5

    either vi

    Это еще что за зверь?
    Если все-таки переводите, то ссылку на первоисточник будьте добры.



  1. Stas911
    10.03.2016 17:53

    Имхо человек должен уметь и хотеть учиться, а остальное — вторично.


  1. MichaelBorisov
    10.03.2016 22:19
    +2

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

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


    1. webmascon
      11.03.2016 01:24

      Какие огромные инженерные ресурсы вкладываются в эту высокочастотную торговлю,
      никаких огромных инженерных ресурсов не вкладывается в эу высокочастотную торговлю. У вас просто искаженное ое ней представление


    1. Randl
      11.03.2016 10:51
      +2

      Не только в HFT, но в принципе в фондовый и валютный рынок вливаются нефиговые ресурсы. Впрочем, ИМХО, большая часть ресурсов человечества тратятся очень нерационально


      1. webmascon
        11.03.2016 11:59

        ну а где они вообще тратятся рационально? наверное только на кладбищах?


        1. Randl
          11.03.2016 12:04

          Ну не знаю. Просто мне кажется платить парню 80 миллионов долларов за пинание мячика или тратить их на разработку и производство очередной мега-удобной селфи-палки когда люди с голоду умирают это как-то странно. И то что с этим ничего не поделать очень обидно.

          И заработок с помощью HFT для меня в той же категории примерно.


          1. webmascon
            11.03.2016 15:45

            заработок с помощью HFT не так уже велик чтобы горевать о нем


          1. deniskreshikhin
            11.03.2016 19:38
            -1

            Благодаря торговле на бирже ресурсы распределяются более рационально, т.к. цена формирует по объективным критериям.

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


            1. webmascon
              12.03.2016 02:07

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


              1. deniskreshikhin
                12.03.2016 12:27

                Страх и глупости одного участника никак не могут повлиять на биржу в целом.

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


                1. webmascon
                  15.03.2016 02:22

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


  1. webmascon
    11.03.2016 01:30
    +2

    по своему опыту сужу что программист в сфере финансов должен уметь следующее:

    • знать предметную область очень хорошо — уметь как минимум отличать бид от аска и фьючерс от опциона
    • знать FIX протокол
    • уметь работать в большом коллективе программистов, когда в проект коммитят 150 человек глобально
    • быть внимательным к мелочам — каждый баг, выкаченный на продакшен, может стоить охренительных бабок убытка — а чего не любят в банказ — это терять деньги.
    • английский язык


  1. man_without_face
    11.03.2016 08:30

    Вопрос к автору (или просто к компании). А есть ли кто-то, кто мог бы проконсультировать на тему источников информации по российским дивидендам?


    1. IgorMetechko
      14.03.2016 10:38

      Данная информация всегда находится в открытом доступе. Если Вас интересуют какие-либо подробности, можете позвонить нам :)


      1. man_without_face
        14.03.2016 13:07

        Да, но не сборная, а ходить по каждому эмитенту — сложно.

        Подробности? Хмм… Ну интересно, есть ли у вас подобные данные и можно ли было бы их использовать?


  1. mird
    11.03.2016 09:49

    Процедуры хранения в бд — это что за зверь такой?


    1. edeldm
      11.03.2016 16:27

      Возможно, опечатались и имеются ввиду хранимые процедуры в СУБД, например в MSSQL, PostgreSQL .


      1. mird
        14.03.2016 14:07

        Простите, но на опечатку это не похоже. Больше похоже на то, что статью писал человек не разбирающийся.


        1. webmascon
          15.03.2016 02:25

          это переводил человек не знающий как переводитс stored procedure, как написано в оригинале


  1. BalinTomsk
    11.03.2016 17:27

    Правильная статья, не знаю насчет Лондона, но в NewYour-ском блумберге с такими скилсами можно будет сразу найти контракт на 170-200 USD/hr, а у фултаймера зарплата может достигать 400К в год (тимлид)