Заглядываем за кулисы Java-приложения с помощью pidstat и jstack

В данной статье мы посмотрим лишь на две утилиты pidtstat и jstack. Их всего две, но они многое могут рассказать о работе многопоточного Java-приложения. Например, найти, какой поток оказался в состоянии deadlock, или какой поток загружает CPU на 100%.

Читать далее

Что такое Книга лимитных ордеров? Что о ней надо знать финансовому программисту?

Данная статья одна из тех, что призвана ознакомить читателей блога с основными терминами и понятиями биржевой торговли, в частности книгой лимитных ордеров (limit order book) и тем, как она работает.

Это, так сказать, введение в предметную область, без которой другие статьи данного блога на более глубокие темы будут непонятны.

Читать далее

Утилиты Linux для замера производительности

В данной статье я даю краткий обзор утилит Linux для сбора и анализа статистики важных аспектов работы какого-то определенного Linux-процесса или всей операционной системы в целом. Это, так сказать, быстрый набор «первой помощи», знания о котором пригодится всем разработчикам. Данная статья не пытается охватить все утилиты и все параметры этих утилит. За более подробной информацией вы всегда можете обратиться к страницам man по каждой программе.

Читать далее

Что такое OMS (Order Management System)

Система управления ордерами (Order Management System, сокращенно OMS) — ключевая система участника биржевых торгов, сердце его торговой системы. У разных типов участников она играет разные роли, но общее назначение OMS — вести учёт и контроль всех транзакций, всех действий по ордерам.

OMS различаются по своему предназначению и функционалу в зависимости от того, для какого участника биржевого бизнеса она предназначена. Читать далее

Принципы написания торговых low-latency приложений на Java

Данная статья является частью серии статей о том, как пишутся low-latency торговые приложения. Вводная статья содержит начальные сведения о подходах к оптимизациям вообще, вторая статья рассказывает об подходах к оптимизации на всех уровнях торговой системы: от железа до настройки JVM. Данная же статья, рассказывает уже подробно об оптимизациях в самом Java-приложении.

Статья ориентирована на программистов, чтобы помочь им в изучении Java, понимании JVM и развитии навыков программирования.

Читать далее

Сайты о Java и финансах

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

Читать далее

Симвология: CUSIP, SEDOL, RIC, ISIN

Обязательные атрибуты любого ордера, его ключевые параметры это ответы на вопросы: «что?», «продать или купить?», «в каком количестве?» и «по чем?».

«Что» — обозначает сам предмет сделки — название ценной бумаги. Чтобы не получилось так, что устно по телефону клиент сказал купить акции «Гугла», а брокер купил акции «Мугла», ордера передаются электронно, а предмет сделки имеет некий универсальный идентификатор, который однозначно определяет ценную бумагу для обоих сторон сделки.

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

Читать далее

Алгоритмическая торговля на бирже работает, но это не то, что вы думаете. Разрешаем путаницу с термином «алгоритмическая торговля»

Биржевая торговля ценными бумагами – не область точной науки, поэтому в отношении терминов «автоматизированная» и «алгоритмическая» торговля отсутствуют общепринятые строгие определения. Для одних эти два понятия означают одно и то же, а для других – два различных процесса.

Читать далее

Пулы объектов для достижения высокой производительности в Java

В торговых приложениях создается множество объектов в реальном времени. Скажем, каждый новый ордер от клиента создает объект Order. Исполнение ордера на рынке порождает новый объект Fill или Partial Fill. И если поток ордеров очень высок во время активного торгового дня, это создание новых объектов оказывает:

  • большую нагрузку на JVM по созданию новых экземпляров объектов из классов;
  • большую нагрузку на память, для записи всех этих объектов в heap;
  • большую нагрузку на сборщик мусора, который должен постоянно отслеживать появление этих новых объектов и проверять, не стали ли они мусором.

Все эти операции имеют большие накладные расходы сами по себе, плюс могут привести к непредсказуемым задержкам, поэтому Java-программисты нашли обходное решение этой проблемы: использовать пулы заранее созданных объектов (object pools). Т.е. переиспользовать объекты, которые уже не нужны, вместо создания новых.

Читать далее

26 мая Нью-Йоркская биржа открывает торговый зал

Нью-Йоркская биржа (NYSE) откроет 26 мая торговый зал для ограниченного числа трейдеров. Торговый зал был закрыт 23 марта из-за эпидемии коронавируса, и вот спустя почти два месяца торговый зал снова откроется.

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

8 июня свой торговый зал откроет Чикагская биржа опционов (CBOE). Еще один пример верности вековым традициям торговли в стиле «open outcry» (торговля лицом к лицу, где информация между участниками торгов передается путем выкриков и сигналов руками).