{"id":13508617,"url":"https://github.com/chronoxor/CppTrader","last_synced_at":"2025-03-30T11:32:43.380Z","repository":{"id":41254674,"uuid":"97720792","full_name":"chronoxor/CppTrader","owner":"chronoxor","description":"High performance components for building Trading Platform such as ultra fast matching engine, order book processor","archived":false,"fork":false,"pushed_at":"2024-03-09T11:09:29.000Z","size":27878,"stargazers_count":862,"open_issues_count":19,"forks_count":263,"subscribers_count":50,"default_branch":"master","last_synced_at":"2025-03-27T16:16:00.405Z","etag":null,"topics":["itch","low-latency","matching-engine","nasdaq","order-book","orderbook","performance","trading"],"latest_commit_sha":null,"homepage":"","language":"C++","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/chronoxor.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-07-19T13:42:08.000Z","updated_at":"2025-03-23T20:20:57.000Z","dependencies_parsed_at":"2023-02-14T11:01:57.380Z","dependency_job_id":"8bd49288-cdcd-4f32-95e3-a1176a11e498","html_url":"https://github.com/chronoxor/CppTrader","commit_stats":null,"previous_names":[],"tags_count":4,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chronoxor%2FCppTrader","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chronoxor%2FCppTrader/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chronoxor%2FCppTrader/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/chronoxor%2FCppTrader/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/chronoxor","download_url":"https://codeload.github.com/chronoxor/CppTrader/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":246314011,"owners_count":20757450,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["itch","low-latency","matching-engine","nasdaq","order-book","orderbook","performance","trading"],"created_at":"2024-08-01T02:00:55.683Z","updated_at":"2025-03-30T11:32:38.367Z","avatar_url":"https://github.com/chronoxor.png","language":"C++","funding_links":[],"categories":["C++","C/C++","trading"],"sub_categories":[],"readme":"# CppTrader\n\n[![License](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)\n[![Release](https://img.shields.io/github/release/chronoxor/CppTrader.svg?sort=semver)](https://github.com/chronoxor/CppTrader/releases)\n\u003cbr/\u003e\n[![Linux (clang)](https://github.com/chronoxor/CppTrader/actions/workflows/build-linux-clang.yml/badge.svg)](https://github.com/chronoxor/CppTrader/actions/workflows/build-linux-clang.yml)\n[![Linux (gcc)](https://github.com/chronoxor/CppTrader/actions/workflows/build-linux-gcc.yml/badge.svg)](https://github.com/chronoxor/CppTrader/actions/workflows/build-linux-gcc.yml)\n[![MacOS](https://github.com/chronoxor/CppTrader/actions/workflows/build-macos.yml/badge.svg)](https://github.com/chronoxor/CppTrader/actions/workflows/build-macos.yml)\n\u003cbr/\u003e\n[![Windows (Cygwin)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-cygwin.yml/badge.svg)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-cygwin.yml)\n[![Windows (MSYS2)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-msys2.yml/badge.svg)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-msys2.yml)\n[![Windows (MinGW)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-mingw.yml/badge.svg)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-mingw.yml)\n[![Windows (Visual Studio)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-vs.yml/badge.svg)](https://github.com/chronoxor/CppTrader/actions/workflows/build-windows-vs.yml)\n\nC++ Trader is a set of components for building high performance Trading Platform:\n* Ultra fast matching engine\n* Order book processor\n* NASDAQ ITCH handler\n\n[CppTrader API reference](https://chronoxor.github.io/CppTrader/index.html)\n\n# Contents\n  * [Features](#features)\n  * [Requirements](#requirements)\n  * [How to build?](#how-to-build)\n  * [Performance](#performance)\n    * [NASDAQ ITCH handler](#nasdaq-itch-handler)\n    * [Market manager](#market-manager)\n    * [Market manager (optimized version)](#market-manager-optimized-version)\n    * [Market manager (aggressive optimized version)](#market-manager-aggressive-optimized-version)\n\n# Features\n* Cross platform (Linux, MacOS, Windows)\n* Benchmarks\n* Examples\n* Tests\n* [Doxygen](http://www.doxygen.org) API documentation\n* Continuous integration ([Travis CI](https://travis-ci.com), [AppVeyor](https://www.appveyor.com))\n\n# Requirements\n* Linux\n* MacOS\n* Windows\n* [cmake](https://www.cmake.org)\n* [gcc](https://gcc.gnu.org)\n* [git](https://git-scm.com)\n* [gil](https://github.com/chronoxor/gil.git)\n* [python3](https://www.python.org)\n\nOptional:\n* [clang](https://clang.llvm.org)\n* [CLion](https://www.jetbrains.com/clion)\n* [Cygwin](https://cygwin.com)\n* [MSYS2](https://www.msys2.org)\n* [MinGW](https://mingw-w64.org/doku.php)\n* [Visual Studio](https://www.visualstudio.com)\n\n# How to build?\n\n### Linux: install required packages\n```shell\nsudo apt-get install -y binutils-dev uuid-dev\n```\n\n### Install [gil (git links) tool](https://github.com/chronoxor/gil)\n```shell\npip3 install gil\n```\n\n### Setup repository\n```shell\ngit clone https://github.com/chronoxor/CppTrader.git\ncd CppTrader\ngil update\n```\n\n### Linux\n```shell\ncd build\n./unix.sh\n```\n\n### MacOS\n```shell\ncd build\n./unix.sh\n```\n\n### Windows (Cygwin)\n```shell\ncd build\nunix.bat\n```\n\n### Windows (MSYS2)\n```shell\ncd build\nunix.bat\n```\n\n### Windows (MinGW)\n```shell\ncd build\nmingw.bat\n```\n\n### Windows (Visual Studio)\n```shell\ncd build\nvs.bat\n```\n\n# Performance\n\nHere comes several micro-benchmarks for trading components.\n\nBenchmark environment is the following:\n```\nCPU architecutre: Intel(R) Core(TM) i7-4790K CPU @ 4.00GHz\nCPU logical cores: 8\nCPU physical cores: 4\nCPU clock speed: 3.998 GHz\nCPU Hyper-Threading: enabled\nRAM total: 31.962 GiB\nRAM free: 21.623 GiB\n\nOS version: Microsoft Windows 8 Enterprise Edition (build 9200), 64-bit\nOS bits: 64-bit\nProcess bits: 64-bit\nProcess configuaraion: release\n```\n\n## NASDAQ ITCH handler\n\nBenchmark measures the performance of the [NASDAQ ITCH handler](https://github.com/chronoxor/CppTrader/blob/master/include/trader/providers/nasdaq/itch_handler.h).\nIt shows how fast it can parse and handle ITCH messages from the input stream.\n\nSample ITCH file could be downloaded from https://emi.nasdaq.com/ITCH\n\n* [cpptrader-performance-itch_handler](https://github.com/chronoxor/CppTrader/blob/master/performance/itch_handler.cpp) \u003c 01302017.NASDAQ_ITCH50\n```\nITCH processing...Done!\n\nErrors: 0\n\nProcessing time: 6.831 s\nTotal ITCH messages: 283238832\nITCH message latency: 24 ns\nITCH message throughput: 41460256 msg/s\n```\n\n## Market manager\n\nBenchmark measures the performance of the [Market manager](https://github.com/chronoxor/CppTrader/blob/master/include/trader/matching/market_manager.h ).\nIt shows how fast it can handle orders operations (add, reduce, modify, delete,\nexecute) and build an order book.\n\nSample ITCH file could be downloaded from https://emi.nasdaq.com/ITCH\n\n* [cpptrader-performance-market_manager](https://github.com/chronoxor/CppTrader/blob/master/performance/market_manager.cpp) \u003c 01302017.NASDAQ_ITCH50\n```\nITCH processing...Done!\n\nErrors: 0\n\nProcessing time: 1:27.616 m\nTotal ITCH messages: 283238832\nITCH message latency: 309 ns\nITCH message throughput: 3232727 msg/s\nTotal market updates: 631217516\nMarket update latency: 138 ns\nMarket update throughput: 7204359 upd/s\n\nMarket statistics:\nMax symbols: 8371\nMax order books: 8371\nMax order book levels: 2422\nMax order book orders: 2975\nMax orders: 1647972\n\nOrder statistics:\nAdd order operations: 152865456\nUpdate order operations: 7037619\nDelete order operations: 152865456\nExecute order operations: 5663712\n```\n\n## Market manager (optimized version)\n\nThis is an optimized version of the Market manager. Optimization tricks are the\nfollowing:\n\n* Symbols and order books are stored in fixed size pre-allocated arrays.\n* Orders are stored in the pre-allocated array instead of HashMap. This gives\nO(1) for all orders operations with no overhead (get, insert, update, delete).\n* Orders linked list is not maintained for price levels, just orders count.\n* Price levels are stored in sorted arrays instead of Red-Black trees. The sort\norder keeps best prices (best bid / best ask) at the end of arrays which gives\ngood CPU cache locality and near to O(1) search time for orders with close to\nmarket prices, but has a penalty for orders with far from market prices!\n* Price levels are taken from the pool, which is implemented using a\npre-allocated array with O(1) for create and delete each price level.\n\nSample ITCH file could be downloaded from https://emi.nasdaq.com/ITCH\n\n* [cpptrader-performance-market_manager_optimized](https://github.com/chronoxor/CppTrader/blob/master/performance/market_manager_optimized.cpp) \u003c 01302017.NASDAQ_ITCH50\n```\nITCH processing...Done!\n\nErrors: 0\n\nProcessing time: 34.150 s\nTotal ITCH messages: 283238832\nITCH message latency: 120 ns\nITCH message throughput: 8293747 msg/s\nTotal market updates: 631217516\nMarket update latency: 54 ns\nMarket update throughput: 18483195 upd/s\n\nMarket statistics:\nMax symbols: 8371\nMax order books: 8371\nMax order book levels: 38\nMax orders: 1647972\n\nOrder statistics:\nAdd order operations: 152865456\nUpdate order operations: 7037619\nDelete order operations: 152865456\nExecute order operations: 5663712\n```\n\n## Market manager (aggressive optimized version)\n\nThis is a very aggressive optimized version of the Market manager. It shows\nvalues of latency and throughput close to optimal with the cost of some more\noptimization tricks which might be hard to keep in real trading platforms:\n\n* Symbols are not maintained\n* Orders and price limits structures are optimized to be optimal. Most of useful\nfilds are removed.\n* Price values are stored as signed 32-bit integer values. Positive values for\nbids and negative values for asks.\n* Market handler is not used. No way to receive notifications from the Market\nmanager.\n\nSample ITCH file could be downloaded from https://emi.nasdaq.com/ITCH\n\n* [cpptrader-performance-market_manager_optimized_aggressive](https://github.com/chronoxor/CppTrader/blob/master/performance/market_manager_optimized_aggressive.cpp) \u003c 01302017.NASDAQ_ITCH50\n```\nITCH processing...Done!\n\nErrors: 0\nProcessing time: 29.047 s\nTotal ITCH messages: 283238832\nITCH messages latency: 102 ns\nITCH messages throughput: 9751044 msg/s\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchronoxor%2FCppTrader","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fchronoxor%2FCppTrader","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fchronoxor%2FCppTrader/lists"}