fastmm-engine 0.2.0__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (1108) hide show
  1. fastmm_engine-0.2.0/.clang-format +24 -0
  2. fastmm_engine-0.2.0/.clang-tidy +59 -0
  3. fastmm_engine-0.2.0/.dockerignore +16 -0
  4. fastmm_engine-0.2.0/.editorconfig +13 -0
  5. fastmm_engine-0.2.0/.env.example +12 -0
  6. fastmm_engine-0.2.0/.github/workflows/bench-nightly.yml +24 -0
  7. fastmm_engine-0.2.0/.github/workflows/ci.yml +224 -0
  8. fastmm_engine-0.2.0/.github/workflows/docs.yml +98 -0
  9. fastmm_engine-0.2.0/.github/workflows/release.yml +81 -0
  10. fastmm_engine-0.2.0/.github/workflows/wheels.yml +84 -0
  11. fastmm_engine-0.2.0/.gitignore +40 -0
  12. fastmm_engine-0.2.0/.playwright-mcp/desktop-dark.png +0 -0
  13. fastmm_engine-0.2.0/.playwright-mcp/desktop-light.png +0 -0
  14. fastmm_engine-0.2.0/.playwright-mcp/desktop-light2.png +0 -0
  15. fastmm_engine-0.2.0/.playwright-mcp/final-desktop.png +0 -0
  16. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-42-35-278Z.yml +368 -0
  17. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-45-04-401Z.yml +360 -0
  18. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-46-00-557Z.yml +356 -0
  19. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-46-51-283Z.yml +354 -0
  20. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-47-17-324Z.yml +0 -0
  21. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-47-27-984Z.yml +516 -0
  22. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-48-04-781Z.yml +186 -0
  23. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-49-04-090Z.yml +214 -0
  24. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-49-19-873Z.yml +406 -0
  25. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T12-10-16-318Z.yml +356 -0
  26. fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T12-15-17-469Z.yml +352 -0
  27. fastmm_engine-0.2.0/.playwright-mcp/phone-equity.png +0 -0
  28. fastmm_engine-0.2.0/.playwright-mcp/phone-equity2.png +0 -0
  29. fastmm_engine-0.2.0/.playwright-mcp/phone-light.png +0 -0
  30. fastmm_engine-0.2.0/.playwright-mcp/print.png +0 -0
  31. fastmm_engine-0.2.0/.playwright-mcp/session-light.png +0 -0
  32. fastmm_engine-0.2.0/.playwright-mcp/session-light2.png +0 -0
  33. fastmm_engine-0.2.0/.pre-commit-config.yaml +27 -0
  34. fastmm_engine-0.2.0/CHANGELOG.md +814 -0
  35. fastmm_engine-0.2.0/CMakeLists.txt +137 -0
  36. fastmm_engine-0.2.0/CMakePresets.json +380 -0
  37. fastmm_engine-0.2.0/CONTRIBUTING.md +12 -0
  38. fastmm_engine-0.2.0/LICENSE +21 -0
  39. fastmm_engine-0.2.0/PKG-INFO +104 -0
  40. fastmm_engine-0.2.0/README.md +82 -0
  41. fastmm_engine-0.2.0/SECURITY.md +6 -0
  42. fastmm_engine-0.2.0/apps/CMakeLists.txt +15 -0
  43. fastmm_engine-0.2.0/apps/fastmm-backtest/CMakeLists.txt +2 -0
  44. fastmm_engine-0.2.0/apps/fastmm-backtest/main.cpp +6 -0
  45. fastmm_engine-0.2.0/apps/fastmm-data/CMakeLists.txt +2 -0
  46. fastmm_engine-0.2.0/apps/fastmm-data/main.cpp +6 -0
  47. fastmm_engine-0.2.0/apps/fastmm-live/CMakeLists.txt +2 -0
  48. fastmm_engine-0.2.0/apps/fastmm-live/main.cpp +6 -0
  49. fastmm_engine-0.2.0/apps/fastmm-pnl/CMakeLists.txt +2 -0
  50. fastmm_engine-0.2.0/apps/fastmm-pnl/main.cpp +269 -0
  51. fastmm_engine-0.2.0/apps/fastmm-replay/CMakeLists.txt +2 -0
  52. fastmm_engine-0.2.0/apps/fastmm-replay/main.cpp +6 -0
  53. fastmm_engine-0.2.0/apps/fastmm-sim-exchange/CMakeLists.txt +3 -0
  54. fastmm_engine-0.2.0/apps/fastmm-sim-exchange/main.cpp +295 -0
  55. fastmm_engine-0.2.0/apps/fastmm-sim-itch/CMakeLists.txt +3 -0
  56. fastmm_engine-0.2.0/apps/fastmm-sim-itch/main.cpp +387 -0
  57. fastmm_engine-0.2.0/apps/fastmm-top/CMakeLists.txt +2 -0
  58. fastmm_engine-0.2.0/apps/fastmm-top/main.cpp +177 -0
  59. fastmm_engine-0.2.0/apps/fastmm-top/metrics_server.cpp +181 -0
  60. fastmm_engine-0.2.0/apps/fastmm-top/metrics_server.hpp +27 -0
  61. fastmm_engine-0.2.0/bench/CMakeLists.txt +46 -0
  62. fastmm_engine-0.2.0/bench/README.md +387 -0
  63. fastmm_engine-0.2.0/bench/README.tmpl.md +273 -0
  64. fastmm_engine-0.2.0/bench/bench_book.cpp +209 -0
  65. fastmm_engine-0.2.0/bench/bench_codecs_fix.cpp +124 -0
  66. fastmm_engine-0.2.0/bench/bench_codecs_mdp3.cpp +140 -0
  67. fastmm_engine-0.2.0/bench/bench_codecs_nasdaq.cpp +541 -0
  68. fastmm_engine-0.2.0/bench/bench_fixed.cpp +60 -0
  69. fastmm_engine-0.2.0/bench/bench_http.cpp +75 -0
  70. fastmm_engine-0.2.0/bench/bench_journal.cpp +36 -0
  71. fastmm_engine-0.2.0/bench/bench_json.cpp +351 -0
  72. fastmm_engine-0.2.0/bench/bench_latency.cpp +47 -0
  73. fastmm_engine-0.2.0/bench/bench_logger.cpp +58 -0
  74. fastmm_engine-0.2.0/bench/bench_main.cpp +86 -0
  75. fastmm_engine-0.2.0/bench/bench_matching.cpp +111 -0
  76. fastmm_engine-0.2.0/bench/bench_oms.cpp +58 -0
  77. fastmm_engine-0.2.0/bench/bench_order_encoders.cpp +222 -0
  78. fastmm_engine-0.2.0/bench/bench_order_tcp.cpp +257 -0
  79. fastmm_engine-0.2.0/bench/bench_pin.hpp +35 -0
  80. fastmm_engine-0.2.0/bench/bench_quote_manager.cpp +92 -0
  81. fastmm_engine-0.2.0/bench/bench_reactor.cpp +199 -0
  82. fastmm_engine-0.2.0/bench/bench_risk.cpp +77 -0
  83. fastmm_engine-0.2.0/bench/bench_smoke.cpp +9 -0
  84. fastmm_engine-0.2.0/bench/bench_spsc.cpp +103 -0
  85. fastmm_engine-0.2.0/bench/bench_strategies.cpp +56 -0
  86. fastmm_engine-0.2.0/bench/bench_tick_to_order.cpp +281 -0
  87. fastmm_engine-0.2.0/bench/bench_udp.cpp +152 -0
  88. fastmm_engine-0.2.0/bench/bench_udp_frame.cpp +74 -0
  89. fastmm_engine-0.2.0/bench/bench_ws.cpp +99 -0
  90. fastmm_engine-0.2.0/bench/ci_budget.toml +80 -0
  91. fastmm_engine-0.2.0/bench/python/bench_hot_strategy.py +166 -0
  92. fastmm_engine-0.2.0/bench/python/bench_py_strategy.py +121 -0
  93. fastmm_engine-0.2.0/bench/python/hot_bench_module.cpp +176 -0
  94. fastmm_engine-0.2.0/cmake/CPM.cmake +1379 -0
  95. fastmm_engine-0.2.0/cmake/CompilerFlags.cmake +66 -0
  96. fastmm_engine-0.2.0/cmake/Dependencies.cmake +114 -0
  97. fastmm_engine-0.2.0/cmake/Dpdk.cmake +33 -0
  98. fastmm_engine-0.2.0/cmake/Sanitizers.cmake +21 -0
  99. fastmm_engine-0.2.0/cmake/fastmmConfig.cmake.in +33 -0
  100. fastmm_engine-0.2.0/configs/backtest-binance.toml +89 -0
  101. fastmm_engine-0.2.0/configs/backtest-example.toml +100 -0
  102. fastmm_engine-0.2.0/configs/binance-demo.toml +98 -0
  103. fastmm_engine-0.2.0/configs/binance-testnet.toml +90 -0
  104. fastmm_engine-0.2.0/configs/binance-usdm-demo.toml +93 -0
  105. fastmm_engine-0.2.0/configs/bybit-testnet.toml +92 -0
  106. fastmm_engine-0.2.0/configs/deribit-testnet.toml +151 -0
  107. fastmm_engine-0.2.0/configs/nasdaq-itch-sim.toml +99 -0
  108. fastmm_engine-0.2.0/configs/profiles/production-latency.toml +105 -0
  109. fastmm_engine-0.2.0/configs/sim-docker.toml +93 -0
  110. fastmm_engine-0.2.0/configs/sim-itch.toml +92 -0
  111. fastmm_engine-0.2.0/configs/sim-local-tls.toml +94 -0
  112. fastmm_engine-0.2.0/configs/sim-local.toml +93 -0
  113. fastmm_engine-0.2.0/configs/sim.toml +92 -0
  114. fastmm_engine-0.2.0/configs/tutorial-binance-demo.toml +76 -0
  115. fastmm_engine-0.2.0/configs/tutorial-sim.toml +114 -0
  116. fastmm_engine-0.2.0/deploy/fastmm-live.service +55 -0
  117. fastmm_engine-0.2.0/docker/Dockerfile +22 -0
  118. fastmm_engine-0.2.0/docker/Dockerfile.production +50 -0
  119. fastmm_engine-0.2.0/docker/entrypoint.sh +12 -0
  120. fastmm_engine-0.2.0/docker-compose.yml +21 -0
  121. fastmm_engine-0.2.0/docs/README.md +83 -0
  122. fastmm_engine-0.2.0/docs/adr/0001-fixed-point-int64-price-qty.md +15 -0
  123. fastmm_engine-0.2.0/docs/adr/0002-exceptions-off-hot-path.md +15 -0
  124. fastmm_engine-0.2.0/docs/adr/0003-pragma-once.md +15 -0
  125. fastmm_engine-0.2.0/docs/adr/0004-doctest-over-gtest.md +15 -0
  126. fastmm_engine-0.2.0/docs/adr/0005-cpm-over-submodules-conan-vcpkg.md +15 -0
  127. fastmm_engine-0.2.0/docs/adr/0006-static-libs-lto.md +15 -0
  128. fastmm_engine-0.2.0/docs/adr/0007-hand-written-net-stack.md +15 -0
  129. fastmm_engine-0.2.0/docs/adr/0008-sim-exchange-speaks-binance.md +15 -0
  130. fastmm_engine-0.2.0/docs/adr/0009-crtp-strategies-over-virtual.md +15 -0
  131. fastmm_engine-0.2.0/docs/adr/0010-fmj-journal-format.md +62 -0
  132. fastmm_engine-0.2.0/docs/adr/0011-scikit-build-core.md +15 -0
  133. fastmm_engine-0.2.0/docs/adr/0012-strategy-developer-experience.md +254 -0
  134. fastmm_engine-0.2.0/docs/adr/0013-python-strategies-live.md +129 -0
  135. fastmm_engine-0.2.0/docs/adr/0014-us-equities.md +150 -0
  136. fastmm_engine-0.2.0/docs/adr/0015-multicast-market-data.md +197 -0
  137. fastmm_engine-0.2.0/docs/adr/0016-storage-backends.md +27 -0
  138. fastmm_engine-0.2.0/docs/adr/README.md +22 -0
  139. fastmm_engine-0.2.0/docs/api/cpp.md +177 -0
  140. fastmm_engine-0.2.0/docs/api/public-headers.txt +119 -0
  141. fastmm_engine-0.2.0/docs/api/python.md +126 -0
  142. fastmm_engine-0.2.0/docs/assets/fastmm.css +51 -0
  143. fastmm_engine-0.2.0/docs/contributing/dependencies.md +17 -0
  144. fastmm_engine-0.2.0/docs/contributing/python-packages.md +39 -0
  145. fastmm_engine-0.2.0/docs/contributing/releasing.md +50 -0
  146. fastmm_engine-0.2.0/docs/contributing/writing-docs.md +99 -0
  147. fastmm_engine-0.2.0/docs/explanation/architecture.md +152 -0
  148. fastmm_engine-0.2.0/docs/explanation/backtesting.md +139 -0
  149. fastmm_engine-0.2.0/docs/explanation/benchmarks.md +29 -0
  150. fastmm_engine-0.2.0/docs/explanation/determinism.md +60 -0
  151. fastmm_engine-0.2.0/docs/explanation/economics.md +99 -0
  152. fastmm_engine-0.2.0/docs/explanation/event-flow.md +72 -0
  153. fastmm_engine-0.2.0/docs/explanation/how-it-works.md +77 -0
  154. fastmm_engine-0.2.0/docs/explanation/risk-model.md +83 -0
  155. fastmm_engine-0.2.0/docs/getting-started/install.md +113 -0
  156. fastmm_engine-0.2.0/docs/getting-started/quickstart.md +137 -0
  157. fastmm_engine-0.2.0/docs/how-to/backtesting/binance-public-data.md +117 -0
  158. fastmm_engine-0.2.0/docs/how-to/operations/deploy.md +99 -0
  159. fastmm_engine-0.2.0/docs/how-to/operations/go-live-checklist.md +56 -0
  160. fastmm_engine-0.2.0/docs/how-to/operations/journals-replay-pnl.md +137 -0
  161. fastmm_engine-0.2.0/docs/how-to/operations/kill-switch-and-shutdown.md +136 -0
  162. fastmm_engine-0.2.0/docs/how-to/operations/monitor-with-fastmm-top.md +79 -0
  163. fastmm_engine-0.2.0/docs/how-to/operations/multicast-feeds.md +169 -0
  164. fastmm_engine-0.2.0/docs/how-to/operations/query-trading-records.md +100 -0
  165. fastmm_engine-0.2.0/docs/how-to/operations/run-on-testnet.md +132 -0
  166. fastmm_engine-0.2.0/docs/how-to/operations/runbook.md +107 -0
  167. fastmm_engine-0.2.0/docs/how-to/operations/running-in-production.md +163 -0
  168. fastmm_engine-0.2.0/docs/how-to/operations/troubleshooting.md +133 -0
  169. fastmm_engine-0.2.0/docs/how-to/operations/two-host-benchmark.md +57 -0
  170. fastmm_engine-0.2.0/docs/how-to/strategies/python-hot-hooks.md +140 -0
  171. fastmm_engine-0.2.0/docs/how-to/strategies/python-live.md +77 -0
  172. fastmm_engine-0.2.0/docs/how-to/strategies/python-slow-methods.md +113 -0
  173. fastmm_engine-0.2.0/docs/how-to/strategies/register-a-strategy.md +107 -0
  174. fastmm_engine-0.2.0/docs/how-to/venues/add-a-venue.md +241 -0
  175. fastmm_engine-0.2.0/docs/python.md +115 -0
  176. fastmm_engine-0.2.0/docs/reference/cli.md +302 -0
  177. fastmm_engine-0.2.0/docs/reference/codecs/cme-mdp3.md +167 -0
  178. fastmm_engine-0.2.0/docs/reference/codecs/fix.md +155 -0
  179. fastmm_engine-0.2.0/docs/reference/codecs/nasdaq.md +187 -0
  180. fastmm_engine-0.2.0/docs/reference/compatibility.md +25 -0
  181. fastmm_engine-0.2.0/docs/reference/configuration.md +299 -0
  182. fastmm_engine-0.2.0/docs/reference/data-sources.md +133 -0
  183. fastmm_engine-0.2.0/docs/reference/errors.md +140 -0
  184. fastmm_engine-0.2.0/docs/reference/fixed-point.md +134 -0
  185. fastmm_engine-0.2.0/docs/reference/glossary.md +59 -0
  186. fastmm_engine-0.2.0/docs/reference/journal-format.md +154 -0
  187. fastmm_engine-0.2.0/docs/reference/options.md +105 -0
  188. fastmm_engine-0.2.0/docs/reference/public-api.md +42 -0
  189. fastmm_engine-0.2.0/docs/reference/python-api.md +444 -0
  190. fastmm_engine-0.2.0/docs/reference/run-report.md +58 -0
  191. fastmm_engine-0.2.0/docs/reference/sim-exchange.md +159 -0
  192. fastmm_engine-0.2.0/docs/reference/sim-itch.md +141 -0
  193. fastmm_engine-0.2.0/docs/reference/status-file.md +116 -0
  194. fastmm_engine-0.2.0/docs/reference/storage.md +187 -0
  195. fastmm_engine-0.2.0/docs/reference/strategy-api.md +414 -0
  196. fastmm_engine-0.2.0/docs/reference/venues.md +276 -0
  197. fastmm_engine-0.2.0/docs/requirements.txt +50 -0
  198. fastmm_engine-0.2.0/docs/tutorials/first-strategy/01-set-up.md +50 -0
  199. fastmm_engine-0.2.0/docs/tutorials/first-strategy/02-the-model.md +25 -0
  200. fastmm_engine-0.2.0/docs/tutorials/first-strategy/03-write-the-strategy.md +152 -0
  201. fastmm_engine-0.2.0/docs/tutorials/first-strategy/04-unit-test.md +95 -0
  202. fastmm_engine-0.2.0/docs/tutorials/first-strategy/05-backtest-in-cpp.md +70 -0
  203. fastmm_engine-0.2.0/docs/tutorials/first-strategy/06-register.md +83 -0
  204. fastmm_engine-0.2.0/docs/tutorials/first-strategy/07-cli-backtest-and-replay.md +73 -0
  205. fastmm_engine-0.2.0/docs/tutorials/first-strategy/08-sim-exchange.md +85 -0
  206. fastmm_engine-0.2.0/docs/tutorials/first-strategy/09-binance-demo.md +79 -0
  207. fastmm_engine-0.2.0/docs/tutorials/first-strategy/README.md +17 -0
  208. fastmm_engine-0.2.0/doxygen/Doxyfile.in +102 -0
  209. fastmm_engine-0.2.0/doxygen/awesome/LICENSE +21 -0
  210. fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-darkmode-toggle.js +157 -0
  211. fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-fragment-copy-button.js +85 -0
  212. fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-interactive-toc.js +91 -0
  213. fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-sidebar-only-darkmode-toggle.css +40 -0
  214. fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-sidebar-only.css +116 -0
  215. fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome.css +2681 -0
  216. fastmm_engine-0.2.0/doxygen/custom.css +68 -0
  217. fastmm_engine-0.2.0/examples/cpp/CMakeLists.txt +13 -0
  218. fastmm_engine-0.2.0/examples/cpp/custom_strategy.cpp +70 -0
  219. fastmm_engine-0.2.0/examples/cpp/tutorial/CMakeLists.txt +52 -0
  220. fastmm_engine-0.2.0/examples/cpp/tutorial/first_mm.hpp +134 -0
  221. fastmm_engine-0.2.0/examples/cpp/tutorial/first_mm_backtest.cpp +39 -0
  222. fastmm_engine-0.2.0/examples/cpp/tutorial/first_mm_test.cpp +85 -0
  223. fastmm_engine-0.2.0/examples/cpp/tutorial/strategies.cpp +13 -0
  224. fastmm_engine-0.2.0/examples/cpp/tutorial/strategies.hpp +13 -0
  225. fastmm_engine-0.2.0/examples/cpp/tutorial/tutorial_backtest.cpp +8 -0
  226. fastmm_engine-0.2.0/examples/cpp/tutorial/tutorial_live.cpp +10 -0
  227. fastmm_engine-0.2.0/examples/cpp/tutorial/tutorial_replay.cpp +9 -0
  228. fastmm_engine-0.2.0/examples/external-project/CMakeLists.txt +45 -0
  229. fastmm_engine-0.2.0/examples/external-project/apps/backtest.cpp +9 -0
  230. fastmm_engine-0.2.0/examples/external-project/apps/live.cpp +10 -0
  231. fastmm_engine-0.2.0/examples/external-project/apps/replay.cpp +10 -0
  232. fastmm_engine-0.2.0/examples/external-project/include/mm/microprice_mm.hpp +63 -0
  233. fastmm_engine-0.2.0/examples/external-project/include/mm/strategies.hpp +13 -0
  234. fastmm_engine-0.2.0/examples/external-project/src/strategies.cpp +12 -0
  235. fastmm_engine-0.2.0/examples/external-project/tests/microprice_mm_test.cpp +66 -0
  236. fastmm_engine-0.2.0/examples/python/backtest_quickstart.py +94 -0
  237. fastmm_engine-0.2.0/examples/python/strategies/basic_mm_exact.py +216 -0
  238. fastmm_engine-0.2.0/examples/python/strategies/basic_mm_hot.py +194 -0
  239. fastmm_engine-0.2.0/examples/python/strategies/hot_slow_mm.py +99 -0
  240. fastmm_engine-0.2.0/examples/python/strategies/skew_mm.py +97 -0
  241. fastmm_engine-0.2.0/examples/python/sweep_spread.py +47 -0
  242. fastmm_engine-0.2.0/examples/quickstart/CMakeLists.txt +32 -0
  243. fastmm_engine-0.2.0/examples/quickstart/main.cpp +23 -0
  244. fastmm_engine-0.2.0/examples/quickstart/my_mm.hpp +26 -0
  245. fastmm_engine-0.2.0/include/fastmm/backtest/array_source.hpp +58 -0
  246. fastmm_engine-0.2.0/include/fastmm/backtest/backtest_config.hpp +77 -0
  247. fastmm_engine-0.2.0/include/fastmm/backtest/backtest_runner.hpp +98 -0
  248. fastmm_engine-0.2.0/include/fastmm/backtest/binance_source.hpp +167 -0
  249. fastmm_engine-0.2.0/include/fastmm/backtest/csv_source.hpp +41 -0
  250. fastmm_engine-0.2.0/include/fastmm/backtest/data_registry.hpp +139 -0
  251. fastmm_engine-0.2.0/include/fastmm/backtest/data_source.hpp +225 -0
  252. fastmm_engine-0.2.0/include/fastmm/backtest/fee_model.hpp +9 -0
  253. fastmm_engine-0.2.0/include/fastmm/backtest/fill_model.hpp +22 -0
  254. fastmm_engine-0.2.0/include/fastmm/backtest/journal_source.hpp +46 -0
  255. fastmm_engine-0.2.0/include/fastmm/backtest/markout.hpp +74 -0
  256. fastmm_engine-0.2.0/include/fastmm/backtest/metrics.hpp +139 -0
  257. fastmm_engine-0.2.0/include/fastmm/backtest/pnl.hpp +49 -0
  258. fastmm_engine-0.2.0/include/fastmm/backtest/registrations.hpp +20 -0
  259. fastmm_engine-0.2.0/include/fastmm/backtest/replay.hpp +119 -0
  260. fastmm_engine-0.2.0/include/fastmm/backtest/result.hpp +118 -0
  261. fastmm_engine-0.2.0/include/fastmm/backtest/sweep.hpp +63 -0
  262. fastmm_engine-0.2.0/include/fastmm/backtest/synthetic_source.hpp +61 -0
  263. fastmm_engine-0.2.0/include/fastmm/backtest/tardis_source.hpp +86 -0
  264. fastmm_engine-0.2.0/include/fastmm/cli/backtest.hpp +26 -0
  265. fastmm_engine-0.2.0/include/fastmm/cli/data.hpp +13 -0
  266. fastmm_engine-0.2.0/include/fastmm/cli/live.hpp +28 -0
  267. fastmm_engine-0.2.0/include/fastmm/cli/modules.hpp +21 -0
  268. fastmm_engine-0.2.0/include/fastmm/cli/replay.hpp +26 -0
  269. fastmm_engine-0.2.0/include/fastmm/codecs/codec.hpp +112 -0
  270. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix.hpp +30 -0
  271. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_builder.hpp +221 -0
  272. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_decoder.hpp +114 -0
  273. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_encoder.hpp +97 -0
  274. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_framer.hpp +43 -0
  275. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_session.hpp +284 -0
  276. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_symbols.hpp +75 -0
  277. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_tags.hpp +192 -0
  278. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_time.hpp +133 -0
  279. fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_view.hpp +328 -0
  280. fastmm_engine-0.2.0/include/fastmm/codecs/fix/message_store.hpp +66 -0
  281. fastmm_engine-0.2.0/include/fastmm/codecs/itch/glimpse.hpp +164 -0
  282. fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_decoder.hpp +171 -0
  283. fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_encoder.hpp +122 -0
  284. fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_l2_bridge.hpp +157 -0
  285. fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_messages.hpp +380 -0
  286. fastmm_engine-0.2.0/include/fastmm/codecs/itch/nasdaq_fields.hpp +217 -0
  287. fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/generated/mdp3_schema.hpp +3304 -0
  288. fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_decoder.hpp +211 -0
  289. fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_encoder.hpp +162 -0
  290. fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_feed.hpp +194 -0
  291. fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_instruments.hpp +103 -0
  292. fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_packet.hpp +106 -0
  293. fastmm_engine-0.2.0/include/fastmm/codecs/moldudp/moldudp64.hpp +729 -0
  294. fastmm_engine-0.2.0/include/fastmm/codecs/ouch/ouch42.hpp +426 -0
  295. fastmm_engine-0.2.0/include/fastmm/codecs/ouch/ouch50.hpp +609 -0
  296. fastmm_engine-0.2.0/include/fastmm/codecs/ouch/ouch_common.hpp +167 -0
  297. fastmm_engine-0.2.0/include/fastmm/codecs/sbe/sbe.hpp +349 -0
  298. fastmm_engine-0.2.0/include/fastmm/codecs/soupbin/soupbin.hpp +171 -0
  299. fastmm_engine-0.2.0/include/fastmm/codecs/soupbin/soupbin_session.hpp +475 -0
  300. fastmm_engine-0.2.0/include/fastmm/config/config.hpp +224 -0
  301. fastmm_engine-0.2.0/include/fastmm/config/env_subst.hpp +39 -0
  302. fastmm_engine-0.2.0/include/fastmm/config/schema.hpp +811 -0
  303. fastmm_engine-0.2.0/include/fastmm/core/arena.hpp +56 -0
  304. fastmm_engine-0.2.0/include/fastmm/core/book/book_features.hpp +62 -0
  305. fastmm_engine-0.2.0/include/fastmm/core/book/book_syncer.hpp +269 -0
  306. fastmm_engine-0.2.0/include/fastmm/core/book/book_view.hpp +50 -0
  307. fastmm_engine-0.2.0/include/fastmm/core/book/l2_book.hpp +249 -0
  308. fastmm_engine-0.2.0/include/fastmm/core/book/l3_book.hpp +834 -0
  309. fastmm_engine-0.2.0/include/fastmm/core/config_macros.hpp +76 -0
  310. fastmm_engine-0.2.0/include/fastmm/core/containers/counter_key_map.hpp +86 -0
  311. fastmm_engine-0.2.0/include/fastmm/core/containers/flat_map.hpp +87 -0
  312. fastmm_engine-0.2.0/include/fastmm/core/containers/open_hash_map.hpp +145 -0
  313. fastmm_engine-0.2.0/include/fastmm/core/containers/pool.hpp +134 -0
  314. fastmm_engine-0.2.0/include/fastmm/core/containers/ring_buffer.hpp +72 -0
  315. fastmm_engine-0.2.0/include/fastmm/core/containers/static_vector.hpp +107 -0
  316. fastmm_engine-0.2.0/include/fastmm/core/crc32c.hpp +18 -0
  317. fastmm_engine-0.2.0/include/fastmm/core/engine.hpp +1568 -0
  318. fastmm_engine-0.2.0/include/fastmm/core/engine_config.hpp +40 -0
  319. fastmm_engine-0.2.0/include/fastmm/core/engine_runner.hpp +102 -0
  320. fastmm_engine-0.2.0/include/fastmm/core/enums.hpp +461 -0
  321. fastmm_engine-0.2.0/include/fastmm/core/fixed_point.hpp +485 -0
  322. fastmm_engine-0.2.0/include/fastmm/core/fixed_string.hpp +94 -0
  323. fastmm_engine-0.2.0/include/fastmm/core/hex.hpp +20 -0
  324. fastmm_engine-0.2.0/include/fastmm/core/hot_array.hpp +48 -0
  325. fastmm_engine-0.2.0/include/fastmm/core/instrument.hpp +199 -0
  326. fastmm_engine-0.2.0/include/fastmm/core/journal.hpp +467 -0
  327. fastmm_engine-0.2.0/include/fastmm/core/latency.hpp +190 -0
  328. fastmm_engine-0.2.0/include/fastmm/core/log.hpp +334 -0
  329. fastmm_engine-0.2.0/include/fastmm/core/messages.hpp +476 -0
  330. fastmm_engine-0.2.0/include/fastmm/core/msg_ring.hpp +147 -0
  331. fastmm_engine-0.2.0/include/fastmm/core/oms.hpp +692 -0
  332. fastmm_engine-0.2.0/include/fastmm/core/options/black76.hpp +208 -0
  333. fastmm_engine-0.2.0/include/fastmm/core/order.hpp +119 -0
  334. fastmm_engine-0.2.0/include/fastmm/core/position.hpp +182 -0
  335. fastmm_engine-0.2.0/include/fastmm/core/quote_manager.hpp +420 -0
  336. fastmm_engine-0.2.0/include/fastmm/core/record_stream.hpp +203 -0
  337. fastmm_engine-0.2.0/include/fastmm/core/reject_counters.hpp +87 -0
  338. fastmm_engine-0.2.0/include/fastmm/core/result.hpp +192 -0
  339. fastmm_engine-0.2.0/include/fastmm/core/risk.hpp +301 -0
  340. fastmm_engine-0.2.0/include/fastmm/core/rng.hpp +70 -0
  341. fastmm_engine-0.2.0/include/fastmm/core/seqlock.hpp +99 -0
  342. fastmm_engine-0.2.0/include/fastmm/core/session_state.hpp +60 -0
  343. fastmm_engine-0.2.0/include/fastmm/core/spsc_ring.hpp +90 -0
  344. fastmm_engine-0.2.0/include/fastmm/core/status_prometheus.hpp +19 -0
  345. fastmm_engine-0.2.0/include/fastmm/core/status_segment.hpp +222 -0
  346. fastmm_engine-0.2.0/include/fastmm/core/strategy_context.hpp +138 -0
  347. fastmm_engine-0.2.0/include/fastmm/core/strong_id.hpp +120 -0
  348. fastmm_engine-0.2.0/include/fastmm/core/thread_utils.hpp +56 -0
  349. fastmm_engine-0.2.0/include/fastmm/core/time.hpp +371 -0
  350. fastmm_engine-0.2.0/include/fastmm/core/timer_wheel.hpp +186 -0
  351. fastmm_engine-0.2.0/include/fastmm/core/transport.hpp +197 -0
  352. fastmm_engine-0.2.0/include/fastmm/live/live_backend.hpp +29 -0
  353. fastmm_engine-0.2.0/include/fastmm/live/session.hpp +112 -0
  354. fastmm_engine-0.2.0/include/fastmm/live/slow_watchdog.hpp +30 -0
  355. fastmm_engine-0.2.0/include/fastmm/live/thread_affinity.hpp +24 -0
  356. fastmm_engine-0.2.0/include/fastmm/net/backoff.hpp +55 -0
  357. fastmm_engine-0.2.0/include/fastmm/net/bpf_asm.hpp +226 -0
  358. fastmm_engine-0.2.0/include/fastmm/net/byte_stream.hpp +67 -0
  359. fastmm_engine-0.2.0/include/fastmm/net/ca_locations.hpp +46 -0
  360. fastmm_engine-0.2.0/include/fastmm/net/connection.hpp +559 -0
  361. fastmm_engine-0.2.0/include/fastmm/net/crypto.hpp +152 -0
  362. fastmm_engine-0.2.0/include/fastmm/net/datagram_source.hpp +59 -0
  363. fastmm_engine-0.2.0/include/fastmm/net/dns.hpp +56 -0
  364. fastmm_engine-0.2.0/include/fastmm/net/dpdk_datagram_source.hpp +224 -0
  365. fastmm_engine-0.2.0/include/fastmm/net/http_client.hpp +381 -0
  366. fastmm_engine-0.2.0/include/fastmm/net/http_message.hpp +190 -0
  367. fastmm_engine-0.2.0/include/fastmm/net/http_server.hpp +467 -0
  368. fastmm_engine-0.2.0/include/fastmm/net/io_result.hpp +74 -0
  369. fastmm_engine-0.2.0/include/fastmm/net/kernel_datagram_source.hpp +140 -0
  370. fastmm_engine-0.2.0/include/fastmm/net/memory_transport.hpp +90 -0
  371. fastmm_engine-0.2.0/include/fastmm/net/packet_ring.hpp +104 -0
  372. fastmm_engine-0.2.0/include/fastmm/net/reactor.hpp +187 -0
  373. fastmm_engine-0.2.0/include/fastmm/net/recv_buffer.hpp +94 -0
  374. fastmm_engine-0.2.0/include/fastmm/net/tcp_socket.hpp +112 -0
  375. fastmm_engine-0.2.0/include/fastmm/net/tls_stream.hpp +295 -0
  376. fastmm_engine-0.2.0/include/fastmm/net/udp_frame.hpp +182 -0
  377. fastmm_engine-0.2.0/include/fastmm/net/udp_socket.hpp +129 -0
  378. fastmm_engine-0.2.0/include/fastmm/net/url.hpp +199 -0
  379. fastmm_engine-0.2.0/include/fastmm/net/user_tcp.hpp +279 -0
  380. fastmm_engine-0.2.0/include/fastmm/net/wire_buffer.hpp +95 -0
  381. fastmm_engine-0.2.0/include/fastmm/net/ws_client.hpp +511 -0
  382. fastmm_engine-0.2.0/include/fastmm/net/ws_frame.hpp +326 -0
  383. fastmm_engine-0.2.0/include/fastmm/net/ws_server.hpp +316 -0
  384. fastmm_engine-0.2.0/include/fastmm/net/xdp_datagram_source.hpp +442 -0
  385. fastmm_engine-0.2.0/include/fastmm/net/xdp_program.hpp +207 -0
  386. fastmm_engine-0.2.0/include/fastmm/sim/event_scheduler.hpp +107 -0
  387. fastmm_engine-0.2.0/include/fastmm/sim/fee_model.hpp +112 -0
  388. fastmm_engine-0.2.0/include/fastmm/sim/itch/itch_publisher.hpp +156 -0
  389. fastmm_engine-0.2.0/include/fastmm/sim/itch/sim_itch_config.hpp +92 -0
  390. fastmm_engine-0.2.0/include/fastmm/sim/itch/sim_itch_server.hpp +119 -0
  391. fastmm_engine-0.2.0/include/fastmm/sim/journal_feed.hpp +172 -0
  392. fastmm_engine-0.2.0/include/fastmm/sim/latency_model.hpp +70 -0
  393. fastmm_engine-0.2.0/include/fastmm/sim/market_generator.hpp +108 -0
  394. fastmm_engine-0.2.0/include/fastmm/sim/matching_engine.hpp +227 -0
  395. fastmm_engine-0.2.0/include/fastmm/sim/md_aggregator.hpp +193 -0
  396. fastmm_engine-0.2.0/include/fastmm/sim/md_source.hpp +45 -0
  397. fastmm_engine-0.2.0/include/fastmm/sim/outbound_hash.hpp +58 -0
  398. fastmm_engine-0.2.0/include/fastmm/sim/param_schedule.hpp +115 -0
  399. fastmm_engine-0.2.0/include/fastmm/sim/queue_model.hpp +169 -0
  400. fastmm_engine-0.2.0/include/fastmm/sim/replay_transport.hpp +123 -0
  401. fastmm_engine-0.2.0/include/fastmm/sim/server/binance_json.hpp +282 -0
  402. fastmm_engine-0.2.0/include/fastmm/sim/server/request.hpp +88 -0
  403. fastmm_engine-0.2.0/include/fastmm/sim/server/sim_exchange_server.hpp +133 -0
  404. fastmm_engine-0.2.0/include/fastmm/sim/server/sim_server_config.hpp +114 -0
  405. fastmm_engine-0.2.0/include/fastmm/sim/server/venue_state.hpp +141 -0
  406. fastmm_engine-0.2.0/include/fastmm/sim/sha256.hpp +29 -0
  407. fastmm_engine-0.2.0/include/fastmm/sim/sim_backend.hpp +68 -0
  408. fastmm_engine-0.2.0/include/fastmm/sim/sim_book.hpp +157 -0
  409. fastmm_engine-0.2.0/include/fastmm/sim/sim_driver.hpp +314 -0
  410. fastmm_engine-0.2.0/include/fastmm/sim/sim_transport.hpp +250 -0
  411. fastmm_engine-0.2.0/include/fastmm/store/backend.hpp +111 -0
  412. fastmm_engine-0.2.0/include/fastmm/store/reader.hpp +79 -0
  413. fastmm_engine-0.2.0/include/fastmm/store/registry.hpp +72 -0
  414. fastmm_engine-0.2.0/include/fastmm/store/sqlite_store.hpp +27 -0
  415. fastmm_engine-0.2.0/include/fastmm/store/store_thread.hpp +65 -0
  416. fastmm_engine-0.2.0/include/fastmm/strategies/avellaneda_stoikov.hpp +207 -0
  417. fastmm_engine-0.2.0/include/fastmm/strategies/basic_mm.hpp +160 -0
  418. fastmm_engine-0.2.0/include/fastmm/strategies/builtin.hpp +14 -0
  419. fastmm_engine-0.2.0/include/fastmm/strategies/engine_factory.hpp +38 -0
  420. fastmm_engine-0.2.0/include/fastmm/strategies/factories.hpp +8 -0
  421. fastmm_engine-0.2.0/include/fastmm/strategies/factory_live.hpp +20 -0
  422. fastmm_engine-0.2.0/include/fastmm/strategies/factory_replay.hpp +21 -0
  423. fastmm_engine-0.2.0/include/fastmm/strategies/factory_sim.hpp +21 -0
  424. fastmm_engine-0.2.0/include/fastmm/strategies/hooks.hpp +304 -0
  425. fastmm_engine-0.2.0/include/fastmm/strategies/hot_abi.h +141 -0
  426. fastmm_engine-0.2.0/include/fastmm/strategies/hot_params.hpp +347 -0
  427. fastmm_engine-0.2.0/include/fastmm/strategies/hot_strategy.hpp +702 -0
  428. fastmm_engine-0.2.0/include/fastmm/strategies/listing.hpp +30 -0
  429. fastmm_engine-0.2.0/include/fastmm/strategies/module.hpp +108 -0
  430. fastmm_engine-0.2.0/include/fastmm/strategies/options_mm.hpp +433 -0
  431. fastmm_engine-0.2.0/include/fastmm/strategies/param_publisher.hpp +221 -0
  432. fastmm_engine-0.2.0/include/fastmm/strategies/params.hpp +420 -0
  433. fastmm_engine-0.2.0/include/fastmm/strategies/quoting.hpp +83 -0
  434. fastmm_engine-0.2.0/include/fastmm/strategies/registry.hpp +150 -0
  435. fastmm_engine-0.2.0/include/fastmm/strategies/slow_channel.hpp +465 -0
  436. fastmm_engine-0.2.0/include/fastmm/strategies/strategy.hpp +55 -0
  437. fastmm_engine-0.2.0/include/fastmm/strategy.hpp +27 -0
  438. fastmm_engine-0.2.0/include/fastmm/testing/strategy_harness.hpp +286 -0
  439. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_auth.hpp +114 -0
  440. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_depth_sync.hpp +163 -0
  441. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_error_map.hpp +123 -0
  442. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_md_feed.hpp +243 -0
  443. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_md_parser.hpp +77 -0
  444. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_order_encoder.hpp +228 -0
  445. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_rest_decoder.hpp +59 -0
  446. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_sbe_md_parser.hpp +260 -0
  447. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_user_parser.hpp +73 -0
  448. fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_venue.hpp +306 -0
  449. fastmm_engine-0.2.0/include/fastmm/venues/binance/generated/binance_stream_sbe.hpp +835 -0
  450. fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_error_map.hpp +151 -0
  451. fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_md_feed.hpp +201 -0
  452. fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_md_parser.hpp +70 -0
  453. fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_order_encoder.hpp +140 -0
  454. fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_rest_decoder.hpp +74 -0
  455. fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_user_parser.hpp +80 -0
  456. fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_venue.hpp +308 -0
  457. fastmm_engine-0.2.0/include/fastmm/venues/blocking_http.hpp +65 -0
  458. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_auth.hpp +89 -0
  459. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_book_sync.hpp +153 -0
  460. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_error_map.hpp +97 -0
  461. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_md_feed.hpp +196 -0
  462. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_md_parser.hpp +91 -0
  463. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_order_encoder.hpp +182 -0
  464. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_private_parser.hpp +75 -0
  465. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_rest_decoder.hpp +36 -0
  466. fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_venue.hpp +241 -0
  467. fastmm_engine-0.2.0/include/fastmm/venues/connection_slot.hpp +99 -0
  468. fastmm_engine-0.2.0/include/fastmm/venues/decimal.hpp +134 -0
  469. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_book_sync.hpp +171 -0
  470. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_credits.hpp +89 -0
  471. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_error_map.hpp +111 -0
  472. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_json.hpp +109 -0
  473. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_md_feed.hpp +238 -0
  474. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_md_parser.hpp +155 -0
  475. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_order_encoder.hpp +182 -0
  476. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_private_parser.hpp +124 -0
  477. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_rest_decoder.hpp +68 -0
  478. fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_venue.hpp +249 -0
  479. fastmm_engine-0.2.0/include/fastmm/venues/error_action.hpp +71 -0
  480. fastmm_engine-0.2.0/include/fastmm/venues/event_sink.hpp +115 -0
  481. fastmm_engine-0.2.0/include/fastmm/venues/feed.hpp +107 -0
  482. fastmm_engine-0.2.0/include/fastmm/venues/json_writer.hpp +185 -0
  483. fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/nasdaq_itch_venue.hpp +381 -0
  484. fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/recovery_buffer.hpp +136 -0
  485. fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/tcp_link.hpp +100 -0
  486. fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/user_tcp_link.hpp +113 -0
  487. fastmm_engine-0.2.0/include/fastmm/venues/order_commands.hpp +105 -0
  488. fastmm_engine-0.2.0/include/fastmm/venues/order_events.hpp +113 -0
  489. fastmm_engine-0.2.0/include/fastmm/venues/padded_json.hpp +34 -0
  490. fastmm_engine-0.2.0/include/fastmm/venues/rate_limiter.hpp +160 -0
  491. fastmm_engine-0.2.0/include/fastmm/venues/raw_recorder.hpp +67 -0
  492. fastmm_engine-0.2.0/include/fastmm/venues/request_id.hpp +34 -0
  493. fastmm_engine-0.2.0/include/fastmm/venues/rest_channel.hpp +170 -0
  494. fastmm_engine-0.2.0/include/fastmm/venues/symbology.hpp +139 -0
  495. fastmm_engine-0.2.0/include/fastmm/venues/venue.hpp +204 -0
  496. fastmm_engine-0.2.0/include/fastmm/venues/venue_factory.hpp +39 -0
  497. fastmm_engine-0.2.0/include/fastmm/venues/wire_latency.hpp +198 -0
  498. fastmm_engine-0.2.0/include/fastmm/version.hpp.in +14 -0
  499. fastmm_engine-0.2.0/mkdocs.yml +231 -0
  500. fastmm_engine-0.2.0/pyproject.toml +55 -0
  501. fastmm_engine-0.2.0/python/CMakeLists.txt +23 -0
  502. fastmm_engine-0.2.0/python/fastmm/__init__.py +131 -0
  503. fastmm_engine-0.2.0/python/fastmm/__main__.py +160 -0
  504. fastmm_engine-0.2.0/python/fastmm/_core.pyi +1254 -0
  505. fastmm_engine-0.2.0/python/fastmm/_fmj.py +186 -0
  506. fastmm_engine-0.2.0/python/fastmm/_hot/__init__.py +8 -0
  507. fastmm_engine-0.2.0/python/fastmm/_hot/abi.py +119 -0
  508. fastmm_engine-0.2.0/python/fastmm/_hot/compiler.py +494 -0
  509. fastmm_engine-0.2.0/python/fastmm/_hot/decl.py +368 -0
  510. fastmm_engine-0.2.0/python/fastmm/_hot/meta.py +120 -0
  511. fastmm_engine-0.2.0/python/fastmm/_install.py +3 -0
  512. fastmm_engine-0.2.0/python/fastmm/_scaffold.py +305 -0
  513. fastmm_engine-0.2.0/python/fastmm/_slow/__init__.py +3 -0
  514. fastmm_engine-0.2.0/python/fastmm/_slow/abi.py +95 -0
  515. fastmm_engine-0.2.0/python/fastmm/_slow/context.py +236 -0
  516. fastmm_engine-0.2.0/python/fastmm/_slow/decl.py +60 -0
  517. fastmm_engine-0.2.0/python/fastmm/_slow/publish.py +98 -0
  518. fastmm_engine-0.2.0/python/fastmm/_slow/replay.py +135 -0
  519. fastmm_engine-0.2.0/python/fastmm/_slow/runner.py +198 -0
  520. fastmm_engine-0.2.0/python/fastmm/data/__init__.py +19 -0
  521. fastmm_engine-0.2.0/python/fastmm/data/__main__.py +147 -0
  522. fastmm_engine-0.2.0/python/fastmm/data/binance.py +104 -0
  523. fastmm_engine-0.2.0/python/fastmm/data/cache.py +187 -0
  524. fastmm_engine-0.2.0/python/fastmm/data/rows.py +65 -0
  525. fastmm_engine-0.2.0/python/fastmm/data/tardis.py +92 -0
  526. fastmm_engine-0.2.0/python/fastmm/fx.py +230 -0
  527. fastmm_engine-0.2.0/python/fastmm/live.py +313 -0
  528. fastmm_engine-0.2.0/python/fastmm/py.typed +0 -0
  529. fastmm_engine-0.2.0/python/fastmm/report.py +1257 -0
  530. fastmm_engine-0.2.0/python/fastmm/results.py +217 -0
  531. fastmm_engine-0.2.0/python/fastmm/store.py +265 -0
  532. fastmm_engine-0.2.0/python/fastmm/strategy.py +643 -0
  533. fastmm_engine-0.2.0/python/live/CMakeLists.txt +28 -0
  534. fastmm_engine-0.2.0/python/live/exports.map +7 -0
  535. fastmm_engine-0.2.0/python/live/fastmm_live/__init__.py +31 -0
  536. fastmm_engine-0.2.0/python/live/pyproject.toml +43 -0
  537. fastmm_engine-0.2.0/python/live/src/module.cpp +168 -0
  538. fastmm_engine-0.2.0/python/live/src/self_test_pem.hpp.in +11 -0
  539. fastmm_engine-0.2.0/python/live/src/session.cpp +358 -0
  540. fastmm_engine-0.2.0/python/live/src/session.hpp +9 -0
  541. fastmm_engine-0.2.0/python/live/tests/live_strategies.py +212 -0
  542. fastmm_engine-0.2.0/python/live/tests/test_live.py +72 -0
  543. fastmm_engine-0.2.0/python/live/tests/test_run_live.py +496 -0
  544. fastmm_engine-0.2.0/python/src/bind_backtest.cpp +721 -0
  545. fastmm_engine-0.2.0/python/src/bind_book.cpp +193 -0
  546. fastmm_engine-0.2.0/python/src/bind_common.hpp +54 -0
  547. fastmm_engine-0.2.0/python/src/bind_config.cpp +416 -0
  548. fastmm_engine-0.2.0/python/src/bind_hot.cpp +414 -0
  549. fastmm_engine-0.2.0/python/src/bind_strategies.cpp +59 -0
  550. fastmm_engine-0.2.0/python/src/bind_strategy_api.cpp +1213 -0
  551. fastmm_engine-0.2.0/python/src/hot_program.hpp +104 -0
  552. fastmm_engine-0.2.0/python/src/module.cpp +85 -0
  553. fastmm_engine-0.2.0/python/src/py_strategy.hpp +140 -0
  554. fastmm_engine-0.2.0/python/src/slow_channel_py.hpp +228 -0
  555. fastmm_engine-0.2.0/python/tests/conftest.py +45 -0
  556. fastmm_engine-0.2.0/python/tests/test_backtest.py +325 -0
  557. fastmm_engine-0.2.0/python/tests/test_book.py +43 -0
  558. fastmm_engine-0.2.0/python/tests/test_config.py +90 -0
  559. fastmm_engine-0.2.0/python/tests/test_data.py +120 -0
  560. fastmm_engine-0.2.0/python/tests/test_hot.py +523 -0
  561. fastmm_engine-0.2.0/python/tests/test_init.py +49 -0
  562. fastmm_engine-0.2.0/python/tests/test_live_api.py +61 -0
  563. fastmm_engine-0.2.0/python/tests/test_logging.py +32 -0
  564. fastmm_engine-0.2.0/python/tests/test_packaging.py +9 -0
  565. fastmm_engine-0.2.0/python/tests/test_pandas.py +43 -0
  566. fastmm_engine-0.2.0/python/tests/test_report.py +97 -0
  567. fastmm_engine-0.2.0/python/tests/test_slow.py +566 -0
  568. fastmm_engine-0.2.0/python/tests/test_smoke.py +42 -0
  569. fastmm_engine-0.2.0/python/tests/test_store.py +187 -0
  570. fastmm_engine-0.2.0/python/tests/test_strategy.py +415 -0
  571. fastmm_engine-0.2.0/python/tests/test_strategy_errors.py +252 -0
  572. fastmm_engine-0.2.0/python/tests/test_strategy_parity.py +117 -0
  573. fastmm_engine-0.2.0/scripts/bench-2host.sh +193 -0
  574. fastmm_engine-0.2.0/scripts/bench-e2e.sh +205 -0
  575. fastmm_engine-0.2.0/scripts/bench-table.py +42 -0
  576. fastmm_engine-0.2.0/scripts/bench.sh +74 -0
  577. fastmm_engine-0.2.0/scripts/bootstrap.sh +82 -0
  578. fastmm_engine-0.2.0/scripts/build-dpdk.sh +43 -0
  579. fastmm_engine-0.2.0/scripts/build-pgo.sh +155 -0
  580. fastmm_engine-0.2.0/scripts/build.sh +7 -0
  581. fastmm_engine-0.2.0/scripts/ci-external-project.sh +93 -0
  582. fastmm_engine-0.2.0/scripts/docs/tutorial.sh +175 -0
  583. fastmm_engine-0.2.0/scripts/docs-serve.sh +66 -0
  584. fastmm_engine-0.2.0/scripts/format.sh +11 -0
  585. fastmm_engine-0.2.0/scripts/host-setup.sh +193 -0
  586. fastmm_engine-0.2.0/scripts/package-release.sh +89 -0
  587. fastmm_engine-0.2.0/scripts/run-sim.sh +126 -0
  588. fastmm_engine-0.2.0/scripts/test.sh +6 -0
  589. fastmm_engine-0.2.0/scripts/tidy.sh +12 -0
  590. fastmm_engine-0.2.0/scripts/wheels/build-openssl.sh +54 -0
  591. fastmm_engine-0.2.0/scripts/wheels/check-live-wheel.sh +43 -0
  592. fastmm_engine-0.2.0/scripts/xdp-test.sh +45 -0
  593. fastmm_engine-0.2.0/src/backtest/CMakeLists.txt +7 -0
  594. fastmm_engine-0.2.0/src/backtest/array_source.cpp +71 -0
  595. fastmm_engine-0.2.0/src/backtest/backtest_config.cpp +198 -0
  596. fastmm_engine-0.2.0/src/backtest/backtest_runner.cpp +355 -0
  597. fastmm_engine-0.2.0/src/backtest/binance_source.cpp +412 -0
  598. fastmm_engine-0.2.0/src/backtest/cli_backtest.cpp +253 -0
  599. fastmm_engine-0.2.0/src/backtest/cli_data.cpp +139 -0
  600. fastmm_engine-0.2.0/src/backtest/cli_replay.cpp +342 -0
  601. fastmm_engine-0.2.0/src/backtest/csv_fields.hpp +49 -0
  602. fastmm_engine-0.2.0/src/backtest/csv_source.cpp +162 -0
  603. fastmm_engine-0.2.0/src/backtest/data_registry.cpp +377 -0
  604. fastmm_engine-0.2.0/src/backtest/journal_source.cpp +64 -0
  605. fastmm_engine-0.2.0/src/backtest/metrics.cpp +322 -0
  606. fastmm_engine-0.2.0/src/backtest/replay.cpp +278 -0
  607. fastmm_engine-0.2.0/src/backtest/result.cpp +472 -0
  608. fastmm_engine-0.2.0/src/backtest/sweep.cpp +76 -0
  609. fastmm_engine-0.2.0/src/backtest/synthetic_source.cpp +94 -0
  610. fastmm_engine-0.2.0/src/backtest/tardis_source.cpp +149 -0
  611. fastmm_engine-0.2.0/src/codecs/CMakeLists.txt +10 -0
  612. fastmm_engine-0.2.0/src/codecs/codecs.cpp +10 -0
  613. fastmm_engine-0.2.0/src/codecs/fix/fix_decoder.cpp +455 -0
  614. fastmm_engine-0.2.0/src/codecs/fix/fix_encoder.cpp +162 -0
  615. fastmm_engine-0.2.0/src/codecs/fix/fix_framer.cpp +85 -0
  616. fastmm_engine-0.2.0/src/codecs/fix/fix_session.cpp +633 -0
  617. fastmm_engine-0.2.0/src/codecs/fix/fix_view.cpp +127 -0
  618. fastmm_engine-0.2.0/src/codecs/fix/message_store.cpp +63 -0
  619. fastmm_engine-0.2.0/src/codecs/itch/glimpse.cpp +29 -0
  620. fastmm_engine-0.2.0/src/codecs/itch/itch_decoder.cpp +300 -0
  621. fastmm_engine-0.2.0/src/codecs/itch/itch_encoder.cpp +239 -0
  622. fastmm_engine-0.2.0/src/codecs/itch/itch_l2_bridge.cpp +435 -0
  623. fastmm_engine-0.2.0/src/codecs/mdp3/mdp3_decoder.cpp +750 -0
  624. fastmm_engine-0.2.0/src/codecs/mdp3/mdp3_encoder.cpp +323 -0
  625. fastmm_engine-0.2.0/src/codecs/mdp3/mdp3_feed.cpp +370 -0
  626. fastmm_engine-0.2.0/src/codecs/moldudp/moldudp64.cpp +267 -0
  627. fastmm_engine-0.2.0/src/codecs/ouch/ouch42.cpp +649 -0
  628. fastmm_engine-0.2.0/src/codecs/ouch/ouch50.cpp +888 -0
  629. fastmm_engine-0.2.0/src/codecs/ouch/ouch_common.cpp +172 -0
  630. fastmm_engine-0.2.0/src/codecs/soupbin/soupbin.cpp +138 -0
  631. fastmm_engine-0.2.0/src/core/CMakeLists.txt +19 -0
  632. fastmm_engine-0.2.0/src/core/arena.cpp +48 -0
  633. fastmm_engine-0.2.0/src/core/config.cpp +799 -0
  634. fastmm_engine-0.2.0/src/core/crc32c.cpp +69 -0
  635. fastmm_engine-0.2.0/src/core/engine_runner.cpp +60 -0
  636. fastmm_engine-0.2.0/src/core/hot_array.cpp +51 -0
  637. fastmm_engine-0.2.0/src/core/instrument_loader.cpp +104 -0
  638. fastmm_engine-0.2.0/src/core/journal_file.cpp +525 -0
  639. fastmm_engine-0.2.0/src/core/latency_export.cpp +89 -0
  640. fastmm_engine-0.2.0/src/core/log_sink.cpp +281 -0
  641. fastmm_engine-0.2.0/src/core/session_state.cpp +163 -0
  642. fastmm_engine-0.2.0/src/core/status_prometheus.cpp +320 -0
  643. fastmm_engine-0.2.0/src/core/status_segment.cpp +624 -0
  644. fastmm_engine-0.2.0/src/core/thread_utils.cpp +52 -0
  645. fastmm_engine-0.2.0/src/core/time.cpp +157 -0
  646. fastmm_engine-0.2.0/src/core/version.cpp +16 -0
  647. fastmm_engine-0.2.0/src/dpdk/CMakeLists.txt +10 -0
  648. fastmm_engine-0.2.0/src/dpdk/dpdk_datagram_source.cpp +496 -0
  649. fastmm_engine-0.2.0/src/live/CMakeLists.txt +13 -0
  650. fastmm_engine-0.2.0/src/live/cli.cpp +268 -0
  651. fastmm_engine-0.2.0/src/live/session.cpp +1334 -0
  652. fastmm_engine-0.2.0/src/live/slow_watchdog.cpp +49 -0
  653. fastmm_engine-0.2.0/src/live/thread_affinity.cpp +54 -0
  654. fastmm_engine-0.2.0/src/net/CMakeLists.txt +11 -0
  655. fastmm_engine-0.2.0/src/net/ca_locations.cpp +83 -0
  656. fastmm_engine-0.2.0/src/net/connection.cpp +49 -0
  657. fastmm_engine-0.2.0/src/net/crypto.cpp +325 -0
  658. fastmm_engine-0.2.0/src/net/dns.cpp +73 -0
  659. fastmm_engine-0.2.0/src/net/dpdk_stub.cpp +52 -0
  660. fastmm_engine-0.2.0/src/net/http_client.cpp +198 -0
  661. fastmm_engine-0.2.0/src/net/io_uring_ring.cpp +160 -0
  662. fastmm_engine-0.2.0/src/net/io_uring_ring.hpp +94 -0
  663. fastmm_engine-0.2.0/src/net/io_uring_uapi.hpp +59 -0
  664. fastmm_engine-0.2.0/src/net/kernel_datagram_source.cpp +192 -0
  665. fastmm_engine-0.2.0/src/net/packet_ring.cpp +181 -0
  666. fastmm_engine-0.2.0/src/net/reactor.cpp +580 -0
  667. fastmm_engine-0.2.0/src/net/tcp_socket.cpp +242 -0
  668. fastmm_engine-0.2.0/src/net/tls_stream.cpp +319 -0
  669. fastmm_engine-0.2.0/src/net/udp_socket.cpp +257 -0
  670. fastmm_engine-0.2.0/src/net/user_tcp.cpp +993 -0
  671. fastmm_engine-0.2.0/src/net/ws_client.cpp +80 -0
  672. fastmm_engine-0.2.0/src/net/xdp_datagram_source.cpp +869 -0
  673. fastmm_engine-0.2.0/src/net/xdp_uapi.hpp +214 -0
  674. fastmm_engine-0.2.0/src/sim/CMakeLists.txt +47 -0
  675. fastmm_engine-0.2.0/src/sim/itch/feed.cpp +280 -0
  676. fastmm_engine-0.2.0/src/sim/itch/itch_publisher.cpp +192 -0
  677. fastmm_engine-0.2.0/src/sim/itch/sessions.cpp +532 -0
  678. fastmm_engine-0.2.0/src/sim/itch/sim_itch_config.cpp +238 -0
  679. fastmm_engine-0.2.0/src/sim/itch/sim_itch_impl.hpp +298 -0
  680. fastmm_engine-0.2.0/src/sim/itch/sim_itch_server.cpp +384 -0
  681. fastmm_engine-0.2.0/src/sim/market_generator.cpp +169 -0
  682. fastmm_engine-0.2.0/src/sim/matching_engine.cpp +386 -0
  683. fastmm_engine-0.2.0/src/sim/server/api_routes.cpp +410 -0
  684. fastmm_engine-0.2.0/src/sim/server/binance_json.cpp +636 -0
  685. fastmm_engine-0.2.0/src/sim/server/order_handlers.cpp +1076 -0
  686. fastmm_engine-0.2.0/src/sim/server/request.cpp +298 -0
  687. fastmm_engine-0.2.0/src/sim/server/server_impl.hpp +381 -0
  688. fastmm_engine-0.2.0/src/sim/server/sim_exchange_server.cpp +772 -0
  689. fastmm_engine-0.2.0/src/sim/server/sim_server_config.cpp +222 -0
  690. fastmm_engine-0.2.0/src/sim/server/venue_state.cpp +91 -0
  691. fastmm_engine-0.2.0/src/sim/sha256.cpp +185 -0
  692. fastmm_engine-0.2.0/src/sim/sim_transport.cpp +730 -0
  693. fastmm_engine-0.2.0/src/store/CMakeLists.txt +10 -0
  694. fastmm_engine-0.2.0/src/store/registry.cpp +60 -0
  695. fastmm_engine-0.2.0/src/store/sqlite_backend.cpp +538 -0
  696. fastmm_engine-0.2.0/src/store/sqlite_reader.cpp +347 -0
  697. fastmm_engine-0.2.0/src/store/sqlite_schema.cpp +427 -0
  698. fastmm_engine-0.2.0/src/store/sqlite_schema.hpp +44 -0
  699. fastmm_engine-0.2.0/src/store/store_thread.cpp +121 -0
  700. fastmm_engine-0.2.0/src/strategies/CMakeLists.txt +61 -0
  701. fastmm_engine-0.2.0/src/strategies/cli_modules.cpp +33 -0
  702. fastmm_engine-0.2.0/src/strategies/listing.cpp +138 -0
  703. fastmm_engine-0.2.0/src/venues/CMakeLists.txt +7 -0
  704. fastmm_engine-0.2.0/src/venues/binance/binance_md_parser.cpp +390 -0
  705. fastmm_engine-0.2.0/src/venues/binance/binance_order_encoder.cpp +605 -0
  706. fastmm_engine-0.2.0/src/venues/binance/binance_rest_decoder.cpp +130 -0
  707. fastmm_engine-0.2.0/src/venues/binance/binance_user_parser.cpp +323 -0
  708. fastmm_engine-0.2.0/src/venues/binance/binance_venue.cpp +1557 -0
  709. fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_md_parser.cpp +360 -0
  710. fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_order_encoder.cpp +343 -0
  711. fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_rest_decoder.cpp +180 -0
  712. fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_user_parser.cpp +312 -0
  713. fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_venue.cpp +1696 -0
  714. fastmm_engine-0.2.0/src/venues/blocking_http.cpp +129 -0
  715. fastmm_engine-0.2.0/src/venues/bybit/bybit_md_parser.cpp +378 -0
  716. fastmm_engine-0.2.0/src/venues/bybit/bybit_order_encoder.cpp +375 -0
  717. fastmm_engine-0.2.0/src/venues/bybit/bybit_private_parser.cpp +402 -0
  718. fastmm_engine-0.2.0/src/venues/bybit/bybit_rest_decoder.cpp +91 -0
  719. fastmm_engine-0.2.0/src/venues/bybit/bybit_venue.cpp +1247 -0
  720. fastmm_engine-0.2.0/src/venues/deribit/deribit_md_parser.cpp +503 -0
  721. fastmm_engine-0.2.0/src/venues/deribit/deribit_order_encoder.cpp +229 -0
  722. fastmm_engine-0.2.0/src/venues/deribit/deribit_private_parser.cpp +464 -0
  723. fastmm_engine-0.2.0/src/venues/deribit/deribit_rest_decoder.cpp +135 -0
  724. fastmm_engine-0.2.0/src/venues/deribit/deribit_venue.cpp +1286 -0
  725. fastmm_engine-0.2.0/src/venues/nasdaq/nasdaq_itch_venue.cpp +1382 -0
  726. fastmm_engine-0.2.0/src/venues/nasdaq/tcp_link.cpp +197 -0
  727. fastmm_engine-0.2.0/src/venues/nasdaq/user_tcp_link.cpp +214 -0
  728. fastmm_engine-0.2.0/src/venues/venue_factory.cpp +70 -0
  729. fastmm_engine-0.2.0/tests/CMakeLists.txt +479 -0
  730. fastmm_engine-0.2.0/tests/backtest/backtest_test_util.hpp +157 -0
  731. fastmm_engine-0.2.0/tests/backtest/data_registry_test.cpp +304 -0
  732. fastmm_engine-0.2.0/tests/backtest/golden_strategies_test.cpp +231 -0
  733. fastmm_engine-0.2.0/tests/backtest/markout_test.cpp +346 -0
  734. fastmm_engine-0.2.0/tests/backtest/metrics_test.cpp +204 -0
  735. fastmm_engine-0.2.0/tests/backtest/param_update_replay_test.cpp +159 -0
  736. fastmm_engine-0.2.0/tests/backtest/replay_determinism_test.cpp +226 -0
  737. fastmm_engine-0.2.0/tests/backtest/runner_test.cpp +266 -0
  738. fastmm_engine-0.2.0/tests/backtest/sources_test.cpp +236 -0
  739. fastmm_engine-0.2.0/tests/cli/run_cli.cmake +36 -0
  740. fastmm_engine-0.2.0/tests/cmake/find_live_without_net/CMakeLists.txt +5 -0
  741. fastmm_engine-0.2.0/tests/codecs/codec_concepts_test.cpp +62 -0
  742. fastmm_engine-0.2.0/tests/codecs/fix_builder_test.cpp +88 -0
  743. fastmm_engine-0.2.0/tests/codecs/fix_codec_test.cpp +335 -0
  744. fastmm_engine-0.2.0/tests/codecs/fix_framer_test.cpp +114 -0
  745. fastmm_engine-0.2.0/tests/codecs/fix_session_test.cpp +396 -0
  746. fastmm_engine-0.2.0/tests/codecs/fix_sim_test.cpp +562 -0
  747. fastmm_engine-0.2.0/tests/codecs/fix_test_util.hpp +261 -0
  748. fastmm_engine-0.2.0/tests/codecs/fix_view_test.cpp +190 -0
  749. fastmm_engine-0.2.0/tests/codecs/glimpse_test.cpp +157 -0
  750. fastmm_engine-0.2.0/tests/codecs/itch_codec_test.cpp +457 -0
  751. fastmm_engine-0.2.0/tests/codecs/itch_l2_bridge_test.cpp +589 -0
  752. fastmm_engine-0.2.0/tests/codecs/itch_sim_property_test.cpp +217 -0
  753. fastmm_engine-0.2.0/tests/codecs/itch_sim_util.hpp +197 -0
  754. fastmm_engine-0.2.0/tests/codecs/mdp3_decoder_test.cpp +456 -0
  755. fastmm_engine-0.2.0/tests/codecs/mdp3_feed_test.cpp +370 -0
  756. fastmm_engine-0.2.0/tests/codecs/mdp3_sim_test.cpp +434 -0
  757. fastmm_engine-0.2.0/tests/codecs/mdp3_test_util.hpp +175 -0
  758. fastmm_engine-0.2.0/tests/codecs/moldudp_loss_test.cpp +228 -0
  759. fastmm_engine-0.2.0/tests/codecs/moldudp_test.cpp +648 -0
  760. fastmm_engine-0.2.0/tests/codecs/nasdaq_test_util.hpp +131 -0
  761. fastmm_engine-0.2.0/tests/codecs/ouch_42_test.cpp +303 -0
  762. fastmm_engine-0.2.0/tests/codecs/ouch_50_test.cpp +350 -0
  763. fastmm_engine-0.2.0/tests/codecs/ouch_session_sim_test.cpp +608 -0
  764. fastmm_engine-0.2.0/tests/codecs/sbe_schema_test.cpp +312 -0
  765. fastmm_engine-0.2.0/tests/codecs/soupbin_test.cpp +365 -0
  766. fastmm_engine-0.2.0/tests/compile_fail/ambiguous_bases.cpp +21 -0
  767. fastmm_engine-0.2.0/tests/compile_fail/data_member_hook_name.cpp +16 -0
  768. fastmm_engine-0.2.0/tests/compile_fail/literal_bps_five_decimals.cpp +15 -0
  769. fastmm_engine-0.2.0/tests/compile_fail/literal_qty_nine_decimals.cpp +14 -0
  770. fastmm_engine-0.2.0/tests/compile_fail/missing_factory_instantiation.cpp +26 -0
  771. fastmm_engine-0.2.0/tests/compile_fail/near_miss_name.cpp +17 -0
  772. fastmm_engine-0.2.0/tests/compile_fail/non_void_return.cpp +18 -0
  773. fastmm_engine-0.2.0/tests/compile_fail/private_hook.cpp +16 -0
  774. fastmm_engine-0.2.0/tests/compile_fail/run_case.cmake +17 -0
  775. fastmm_engine-0.2.0/tests/compile_fail/swapped_fill_arguments.cpp +16 -0
  776. fastmm_engine-0.2.0/tests/compile_fail/wrong_trade_signature.cpp +34 -0
  777. fastmm_engine-0.2.0/tests/config/shipped_configs_test.cpp +156 -0
  778. fastmm_engine-0.2.0/tests/core/arena_test.cpp +33 -0
  779. fastmm_engine-0.2.0/tests/core/black76_test.cpp +158 -0
  780. fastmm_engine-0.2.0/tests/core/book_syncer_test.cpp +215 -0
  781. fastmm_engine-0.2.0/tests/core/config_effective_test.cpp +76 -0
  782. fastmm_engine-0.2.0/tests/core/config_test.cpp +293 -0
  783. fastmm_engine-0.2.0/tests/core/containers_test.cpp +233 -0
  784. fastmm_engine-0.2.0/tests/core/crc32c_test.cpp +36 -0
  785. fastmm_engine-0.2.0/tests/core/engine_hooks_test.cpp +481 -0
  786. fastmm_engine-0.2.0/tests/core/engine_test.cpp +931 -0
  787. fastmm_engine-0.2.0/tests/core/engine_venue_kill_test.cpp +297 -0
  788. fastmm_engine-0.2.0/tests/core/fixed_point_test.cpp +182 -0
  789. fastmm_engine-0.2.0/tests/core/instrument_test.cpp +130 -0
  790. fastmm_engine-0.2.0/tests/core/journal_durability_test.cpp +241 -0
  791. fastmm_engine-0.2.0/tests/core/journal_test.cpp +210 -0
  792. fastmm_engine-0.2.0/tests/core/journal_v2_test.cpp +248 -0
  793. fastmm_engine-0.2.0/tests/core/l2_book_test.cpp +229 -0
  794. fastmm_engine-0.2.0/tests/core/l3_book_test.cpp +307 -0
  795. fastmm_engine-0.2.0/tests/core/latency_test.cpp +85 -0
  796. fastmm_engine-0.2.0/tests/core/log_test.cpp +163 -0
  797. fastmm_engine-0.2.0/tests/core/messages_test.cpp +47 -0
  798. fastmm_engine-0.2.0/tests/core/oms_test.cpp +639 -0
  799. fastmm_engine-0.2.0/tests/core/option_ticker_engine_test.cpp +119 -0
  800. fastmm_engine-0.2.0/tests/core/param_update_test.cpp +426 -0
  801. fastmm_engine-0.2.0/tests/core/position_test.cpp +164 -0
  802. fastmm_engine-0.2.0/tests/core/quote_manager_test.cpp +448 -0
  803. fastmm_engine-0.2.0/tests/core/record_stream_test.cpp +283 -0
  804. fastmm_engine-0.2.0/tests/core/reject_counters_test.cpp +55 -0
  805. fastmm_engine-0.2.0/tests/core/risk_test.cpp +207 -0
  806. fastmm_engine-0.2.0/tests/core/rng_test.cpp +42 -0
  807. fastmm_engine-0.2.0/tests/core/seqlock_test.cpp +64 -0
  808. fastmm_engine-0.2.0/tests/core/session_state_test.cpp +119 -0
  809. fastmm_engine-0.2.0/tests/core/smoke_test.cpp +9 -0
  810. fastmm_engine-0.2.0/tests/core/spsc_test.cpp +157 -0
  811. fastmm_engine-0.2.0/tests/core/status_prometheus_test.cpp +121 -0
  812. fastmm_engine-0.2.0/tests/core/status_segment_test.cpp +316 -0
  813. fastmm_engine-0.2.0/tests/core/time_test.cpp +86 -0
  814. fastmm_engine-0.2.0/tests/core/timer_wheel_test.cpp +70 -0
  815. fastmm_engine-0.2.0/tests/core/tsc_refresh_test.cpp +435 -0
  816. fastmm_engine-0.2.0/tests/core/types_test.cpp +246 -0
  817. fastmm_engine-0.2.0/tests/docs/strategy_api_doc_test.cpp +320 -0
  818. fastmm_engine-0.2.0/tests/dpdk/dpdk_source_test.cpp +276 -0
  819. fastmm_engine-0.2.0/tests/fixtures/binance/book_ticker.json +1 -0
  820. fastmm_engine-0.2.0/tests/fixtures/binance/book_ticker_malformed.json +1 -0
  821. fastmm_engine-0.2.0/tests/fixtures/binance/depth_snapshot.json +1 -0
  822. fastmm_engine-0.2.0/tests/fixtures/binance/depth_update.json +1 -0
  823. fastmm_engine-0.2.0/tests/fixtures/binance/depth_update_100.json +1 -0
  824. fastmm_engine-0.2.0/tests/fixtures/binance/depth_update_20.json +1 -0
  825. fastmm_engine-0.2.0/tests/fixtures/binance/depth_update_malformed.json +1 -0
  826. fastmm_engine-0.2.0/tests/fixtures/binance/ed25519-test-private.pem +3 -0
  827. fastmm_engine-0.2.0/tests/fixtures/binance/ed25519-test-public.pem +3 -0
  828. fastmm_engine-0.2.0/tests/fixtures/binance/error_rest.json +1 -0
  829. fastmm_engine-0.2.0/tests/fixtures/binance/exchange_info.json +1 -0
  830. fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_canceled.json +1 -0
  831. fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_expired.json +1 -0
  832. fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_malformed.json +1 -0
  833. fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_new.json +1 -0
  834. fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_rejected.json +1 -0
  835. fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_trade.json +1 -0
  836. fastmm_engine-0.2.0/tests/fixtures/binance/fixtures.meta.json +19 -0
  837. fastmm_engine-0.2.0/tests/fixtures/binance/listen_key.json +1 -0
  838. fastmm_engine-0.2.0/tests/fixtures/binance/open_orders.json +1 -0
  839. fastmm_engine-0.2.0/tests/fixtures/binance/outbound_account_position.json +1 -0
  840. fastmm_engine-0.2.0/tests/fixtures/binance/raw_md_stream.jsonl +23 -0
  841. fastmm_engine-0.2.0/tests/fixtures/binance/sbe/best_bid_ask.hex +10 -0
  842. fastmm_engine-0.2.0/tests/fixtures/binance/sbe/depth_diff.hex +14 -0
  843. fastmm_engine-0.2.0/tests/fixtures/binance/sbe/depth_snapshot20.hex +12 -0
  844. fastmm_engine-0.2.0/tests/fixtures/binance/sbe/make_fixtures.py +112 -0
  845. fastmm_engine-0.2.0/tests/fixtures/binance/sbe/trades.hex +13 -0
  846. fastmm_engine-0.2.0/tests/fixtures/binance/server_time.json +1 -0
  847. fastmm_engine-0.2.0/tests/fixtures/binance/trade.json +1 -0
  848. fastmm_engine-0.2.0/tests/fixtures/binance/trade_unknown_symbol.json +1 -0
  849. fastmm_engine-0.2.0/tests/fixtures/binance/truncated.json +1 -0
  850. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_cancel_replace_ok.json +1 -0
  851. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_error.json +1 -0
  852. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_error_rate_limit.json +1 -0
  853. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_error_timestamp.json +1 -0
  854. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_open_orders.json +1 -0
  855. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_order_cancel_ok.json +1 -0
  856. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_order_place_ok.json +1 -0
  857. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_session_logon_ok.json +1 -0
  858. fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_user_stream_subscribe_ok.json +1 -0
  859. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/account_update.json +1 -0
  860. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/agg_trade.json +1 -0
  861. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/book_ticker.json +1 -0
  862. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/depth_snapshot.json +1 -0
  863. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/depth_update.json +1 -0
  864. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/exchange_info.json +1 -0
  865. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/fixtures.meta.json +16 -0
  866. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/listen_key_expired.json +1 -0
  867. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_canceled.json +1 -0
  868. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_expired.json +1 -0
  869. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_new.json +1 -0
  870. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_trade.json +1 -0
  871. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/position_risk.json +1 -0
  872. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/raw_md_stream.jsonl +400 -0
  873. fastmm_engine-0.2.0/tests/fixtures/binance_usdm/server_time.json +1 -0
  874. fastmm_engine-0.2.0/tests/fixtures/bybit/auth_error.json +1 -0
  875. fastmm_engine-0.2.0/tests/fixtures/bybit/auth_ok.json +1 -0
  876. fastmm_engine-0.2.0/tests/fixtures/bybit/fixtures.meta.json +23 -0
  877. fastmm_engine-0.2.0/tests/fixtures/bybit/instruments_info.json +1 -0
  878. fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook1_snapshot.json +1 -0
  879. fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_delta.json +1 -0
  880. fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_delta_u1.json +1 -0
  881. fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_malformed.json +1 -0
  882. fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_snapshot.json +1 -0
  883. fastmm_engine-0.2.0/tests/fixtures/bybit/pong.json +1 -0
  884. fastmm_engine-0.2.0/tests/fixtures/bybit/private_auth_ok.json +1 -0
  885. fastmm_engine-0.2.0/tests/fixtures/bybit/private_execution.json +1 -0
  886. fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_cancelled.json +1 -0
  887. fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_filled.json +1 -0
  888. fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_new.json +1 -0
  889. fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_rejected.json +1 -0
  890. fastmm_engine-0.2.0/tests/fixtures/bybit/private_wallet.json +1 -0
  891. fastmm_engine-0.2.0/tests/fixtures/bybit/private_wallet_borrow.json +42 -0
  892. fastmm_engine-0.2.0/tests/fixtures/bybit/public_trade.json +1 -0
  893. fastmm_engine-0.2.0/tests/fixtures/bybit/public_trade_unknown_symbol.json +1 -0
  894. fastmm_engine-0.2.0/tests/fixtures/bybit/raw_md_stream.jsonl +43 -0
  895. fastmm_engine-0.2.0/tests/fixtures/bybit/rest_error.json +1 -0
  896. fastmm_engine-0.2.0/tests/fixtures/bybit/rest_open_orders.json +1 -0
  897. fastmm_engine-0.2.0/tests/fixtures/bybit/server_time.json +1 -0
  898. fastmm_engine-0.2.0/tests/fixtures/bybit/subscribe_error.json +1 -0
  899. fastmm_engine-0.2.0/tests/fixtures/bybit/subscribe_ok.json +1 -0
  900. fastmm_engine-0.2.0/tests/fixtures/bybit/trade_cancel_unknown.json +1 -0
  901. fastmm_engine-0.2.0/tests/fixtures/bybit/trade_create_ok.json +1 -0
  902. fastmm_engine-0.2.0/tests/fixtures/bybit/trade_create_reject.json +1 -0
  903. fastmm_engine-0.2.0/tests/fixtures/bybit/trade_rate_limited.json +1 -0
  904. fastmm_engine-0.2.0/tests/fixtures/cme/admin_mixed.hex +13 -0
  905. fastmm_engine-0.2.0/tests/fixtures/cme/book46_two_levels.hex +13 -0
  906. fastmm_engine-0.2.0/tests/fixtures/cme/make_fixtures.py +212 -0
  907. fastmm_engine-0.2.0/tests/fixtures/cme/sbe_decoding_example_template50.hex +18 -0
  908. fastmm_engine-0.2.0/tests/fixtures/cme/secdef54_esz6.hex +27 -0
  909. fastmm_engine-0.2.0/tests/fixtures/cme/trade48_buy_aggressor.hex +13 -0
  910. fastmm_engine-0.2.0/tests/fixtures/deribit/auth_ok.json +1 -0
  911. fastmm_engine-0.2.0/tests/fixtures/deribit/book_grouped_ignored.json +1 -0
  912. fastmm_engine-0.2.0/tests/fixtures/deribit/book_option_change.json +1 -0
  913. fastmm_engine-0.2.0/tests/fixtures/deribit/book_option_snapshot.json +1 -0
  914. fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_change_1.json +1 -0
  915. fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_change_2.json +1 -0
  916. fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_change_gap.json +1 -0
  917. fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_snapshot.json +1 -0
  918. fastmm_engine-0.2.0/tests/fixtures/deribit/buy_ok.json +1 -0
  919. fastmm_engine-0.2.0/tests/fixtures/deribit/cancel_all_by_instrument_ok.json +1 -0
  920. fastmm_engine-0.2.0/tests/fixtures/deribit/cancel_by_label_ok.json +1 -0
  921. fastmm_engine-0.2.0/tests/fixtures/deribit/cancel_ok.json +1 -0
  922. fastmm_engine-0.2.0/tests/fixtures/deribit/edit_ok.json +1 -0
  923. fastmm_engine-0.2.0/tests/fixtures/deribit/fixtures.meta.json +45 -0
  924. fastmm_engine-0.2.0/tests/fixtures/deribit/get_instruments_future.json +1 -0
  925. fastmm_engine-0.2.0/tests/fixtures/deribit/get_instruments_option.json +1 -0
  926. fastmm_engine-0.2.0/tests/fixtures/deribit/get_time.json +1 -0
  927. fastmm_engine-0.2.0/tests/fixtures/deribit/heartbeat_interval_too_small.json +1 -0
  928. fastmm_engine-0.2.0/tests/fixtures/deribit/heartbeat_test_request.json +1 -0
  929. fastmm_engine-0.2.0/tests/fixtures/deribit/open_orders.json +1 -0
  930. fastmm_engine-0.2.0/tests/fixtures/deribit/post_only_reject.json +1 -0
  931. fastmm_engine-0.2.0/tests/fixtures/deribit/private_subscribe_ok.json +1 -0
  932. fastmm_engine-0.2.0/tests/fixtures/deribit/raw_option_stream.jsonl +68 -0
  933. fastmm_engine-0.2.0/tests/fixtures/deribit/rpc_invalid_credentials.json +1 -0
  934. fastmm_engine-0.2.0/tests/fixtures/deribit/rpc_invalid_params.json +1 -0
  935. fastmm_engine-0.2.0/tests/fixtures/deribit/rpc_unauthorized.json +1 -0
  936. fastmm_engine-0.2.0/tests/fixtures/deribit/set_heartbeat_ok.json +1 -0
  937. fastmm_engine-0.2.0/tests/fixtures/deribit/string_id_echo.json +1 -0
  938. fastmm_engine-0.2.0/tests/fixtures/deribit/subscribe_ok.json +1 -0
  939. fastmm_engine-0.2.0/tests/fixtures/deribit/subscribe_partial.json +1 -0
  940. fastmm_engine-0.2.0/tests/fixtures/deribit/test_ok.json +1 -0
  941. fastmm_engine-0.2.0/tests/fixtures/deribit/ticker_option.json +1 -0
  942. fastmm_engine-0.2.0/tests/fixtures/deribit/ticker_perp.json +1 -0
  943. fastmm_engine-0.2.0/tests/fixtures/deribit/trades_perp.json +1 -0
  944. fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_cancelled.json +1 -0
  945. fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_filled.json +1 -0
  946. fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_foreign_label.json +1 -0
  947. fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_open.json +1 -0
  948. fastmm_engine-0.2.0/tests/fixtures/deribit/user_trades.json +1 -0
  949. fastmm_engine-0.2.0/tests/fixtures/fix/cancel_reject.fix +4 -0
  950. fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_canceled.fix +3 -0
  951. fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_expired.fix +2 -0
  952. fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_fill.fix +4 -0
  953. fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_new.fix +2 -0
  954. fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_pending_new.fix +2 -0
  955. fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_rejected.fix +2 -0
  956. fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_replaced.fix +2 -0
  957. fastmm_engine-0.2.0/tests/fixtures/fix/md_incremental.fix +4 -0
  958. fastmm_engine-0.2.0/tests/fixtures/fix/md_snapshot.fix +3 -0
  959. fastmm_engine-0.2.0/tests/fixtures/journals/sample_1000.fmj +0 -0
  960. fastmm_engine-0.2.0/tests/fixtures/journals/sample_1000.sha256 +1 -0
  961. fastmm_engine-0.2.0/tests/fixtures/nasdaq/generate_fixtures.py +249 -0
  962. fastmm_engine-0.2.0/tests/fixtures/nasdaq/itch50_messages.hex +25 -0
  963. fastmm_engine-0.2.0/tests/fixtures/nasdaq/moldudp64_packets.hex +6 -0
  964. fastmm_engine-0.2.0/tests/fixtures/nasdaq/ouch42_messages.hex +20 -0
  965. fastmm_engine-0.2.0/tests/fixtures/nasdaq/ouch50_messages.hex +21 -0
  966. fastmm_engine-0.2.0/tests/fixtures/nasdaq/soupbin_packets.hex +13 -0
  967. fastmm_engine-0.2.0/tests/fixtures/tls/cert.pem +11 -0
  968. fastmm_engine-0.2.0/tests/fixtures/tls/key.pem +5 -0
  969. fastmm_engine-0.2.0/tests/hotpath/codecs_fix_noalloc_test.cpp +216 -0
  970. fastmm_engine-0.2.0/tests/hotpath/codecs_mdp3_noalloc_test.cpp +121 -0
  971. fastmm_engine-0.2.0/tests/hotpath/codecs_nasdaq_noalloc_test.cpp +310 -0
  972. fastmm_engine-0.2.0/tests/hotpath/noalloc_datagram_test.cpp +67 -0
  973. fastmm_engine-0.2.0/tests/hotpath/noalloc_hot_test.cpp +235 -0
  974. fastmm_engine-0.2.0/tests/hotpath/noalloc_options_test.cpp +83 -0
  975. fastmm_engine-0.2.0/tests/hotpath/noalloc_reactor_test.cpp +111 -0
  976. fastmm_engine-0.2.0/tests/hotpath/noalloc_sim_test.cpp +68 -0
  977. fastmm_engine-0.2.0/tests/hotpath/noalloc_smoke_test.cpp +28 -0
  978. fastmm_engine-0.2.0/tests/hotpath/noalloc_store_test.cpp +159 -0
  979. fastmm_engine-0.2.0/tests/hotpath/noalloc_test.cpp +306 -0
  980. fastmm_engine-0.2.0/tests/hotpath/noalloc_wire_latency_test.cpp +71 -0
  981. fastmm_engine-0.2.0/tests/hotpath/venues_noalloc_test.cpp +340 -0
  982. fastmm_engine-0.2.0/tests/integration/conformance_test.cpp +647 -0
  983. fastmm_engine-0.2.0/tests/integration/e2e_test.cpp +172 -0
  984. fastmm_engine-0.2.0/tests/integration/integration_util.hpp +407 -0
  985. fastmm_engine-0.2.0/tests/integration/kill_switch_test.cpp +177 -0
  986. fastmm_engine-0.2.0/tests/integration/live_replay_test.cpp +119 -0
  987. fastmm_engine-0.2.0/tests/integration/live_session_test.cpp +387 -0
  988. fastmm_engine-0.2.0/tests/integration/nasdaq_itch_venue_test.cpp +536 -0
  989. fastmm_engine-0.2.0/tests/integration/sim_itch_test.cpp +634 -0
  990. fastmm_engine-0.2.0/tests/integration/single_thread_test.cpp +146 -0
  991. fastmm_engine-0.2.0/tests/integration/store_restart_test.cpp +168 -0
  992. fastmm_engine-0.2.0/tests/modules/apps/backtest_main.cpp +7 -0
  993. fastmm_engine-0.2.0/tests/modules/apps/conflict_main.cpp +9 -0
  994. fastmm_engine-0.2.0/tests/modules/apps/live_main.cpp +7 -0
  995. fastmm_engine-0.2.0/tests/modules/module/shadow_register.cpp +9 -0
  996. fastmm_engine-0.2.0/tests/modules/module/shadow_sim.cpp +5 -0
  997. fastmm_engine-0.2.0/tests/modules/module/strategies.cpp +9 -0
  998. fastmm_engine-0.2.0/tests/modules/module/strategies.hpp +16 -0
  999. fastmm_engine-0.2.0/tests/modules/module/test_module_mm.hpp +41 -0
  1000. fastmm_engine-0.2.0/tests/modules/module_test.cpp +99 -0
  1001. fastmm_engine-0.2.0/tests/net/backoff_test.cpp +62 -0
  1002. fastmm_engine-0.2.0/tests/net/buffers_test.cpp +169 -0
  1003. fastmm_engine-0.2.0/tests/net/ca_locations_test.cpp +186 -0
  1004. fastmm_engine-0.2.0/tests/net/connection_test.cpp +315 -0
  1005. fastmm_engine-0.2.0/tests/net/crypto_test.cpp +180 -0
  1006. fastmm_engine-0.2.0/tests/net/dns_test.cpp +70 -0
  1007. fastmm_engine-0.2.0/tests/net/http_test.cpp +436 -0
  1008. fastmm_engine-0.2.0/tests/net/net_test_util.hpp +72 -0
  1009. fastmm_engine-0.2.0/tests/net/netns.hpp +80 -0
  1010. fastmm_engine-0.2.0/tests/net/netns_test_util.hpp +84 -0
  1011. fastmm_engine-0.2.0/tests/net/reactor_test.cpp +707 -0
  1012. fastmm_engine-0.2.0/tests/net/smoke_test.cpp +6 -0
  1013. fastmm_engine-0.2.0/tests/net/tcp_socket_test.cpp +126 -0
  1014. fastmm_engine-0.2.0/tests/net/tls_stream_test.cpp +332 -0
  1015. fastmm_engine-0.2.0/tests/net/udp_test.cpp +434 -0
  1016. fastmm_engine-0.2.0/tests/net/url_test.cpp +108 -0
  1017. fastmm_engine-0.2.0/tests/net/user_tcp_test.cpp +512 -0
  1018. fastmm_engine-0.2.0/tests/net/user_tcp_test_util.hpp +224 -0
  1019. fastmm_engine-0.2.0/tests/net/user_tcp_veth_test.cpp +248 -0
  1020. fastmm_engine-0.2.0/tests/net/ws_client_test.cpp +360 -0
  1021. fastmm_engine-0.2.0/tests/net/ws_frame_test.cpp +371 -0
  1022. fastmm_engine-0.2.0/tests/sim/generator_test.cpp +109 -0
  1023. fastmm_engine-0.2.0/tests/sim/journal_feed_test.cpp +193 -0
  1024. fastmm_engine-0.2.0/tests/sim/matching_property_test.cpp +213 -0
  1025. fastmm_engine-0.2.0/tests/sim/matching_test.cpp +372 -0
  1026. fastmm_engine-0.2.0/tests/sim/models_test.cpp +292 -0
  1027. fastmm_engine-0.2.0/tests/sim/sim_run_test.cpp +289 -0
  1028. fastmm_engine-0.2.0/tests/sim/transport_drop_test.cpp +168 -0
  1029. fastmm_engine-0.2.0/tests/store/crash_test.cpp +156 -0
  1030. fastmm_engine-0.2.0/tests/store/migration_test.cpp +193 -0
  1031. fastmm_engine-0.2.0/tests/store/sqlite_store_test.cpp +359 -0
  1032. fastmm_engine-0.2.0/tests/store/store_test_util.hpp +169 -0
  1033. fastmm_engine-0.2.0/tests/strategies/avellaneda_stoikov_test.cpp +99 -0
  1034. fastmm_engine-0.2.0/tests/strategies/basic_mm_test.cpp +264 -0
  1035. fastmm_engine-0.2.0/tests/strategies/hooks_test.cpp +140 -0
  1036. fastmm_engine-0.2.0/tests/strategies/hot_params_test.cpp +226 -0
  1037. fastmm_engine-0.2.0/tests/strategies/hot_strategy_test.cpp +221 -0
  1038. fastmm_engine-0.2.0/tests/strategies/options_mm_test.cpp +364 -0
  1039. fastmm_engine-0.2.0/tests/strategies/param_age_test.cpp +104 -0
  1040. fastmm_engine-0.2.0/tests/strategies/params_test.cpp +228 -0
  1041. fastmm_engine-0.2.0/tests/strategies/quoting_test.cpp +178 -0
  1042. fastmm_engine-0.2.0/tests/strategies/registry_test.cpp +111 -0
  1043. fastmm_engine-0.2.0/tests/strategies/slow_channel_test.cpp +176 -0
  1044. fastmm_engine-0.2.0/tests/strategies/strategy_harness_test.cpp +88 -0
  1045. fastmm_engine-0.2.0/tests/support/alloc_counter.cpp +104 -0
  1046. fastmm_engine-0.2.0/tests/support/alloc_counter.hpp +31 -0
  1047. fastmm_engine-0.2.0/tests/support/doctest_main.cpp +8 -0
  1048. fastmm_engine-0.2.0/tests/support/exit_codes_doc.py +69 -0
  1049. fastmm_engine-0.2.0/tests/support/fastmm_top_messages.py +66 -0
  1050. fastmm_engine-0.2.0/tests/support/test_support.hpp +32 -0
  1051. fastmm_engine-0.2.0/tests/venues/binance_depth_sync_test.cpp +151 -0
  1052. fastmm_engine-0.2.0/tests/venues/binance_ed25519_test.cpp +224 -0
  1053. fastmm_engine-0.2.0/tests/venues/binance_md_parser_test.cpp +200 -0
  1054. fastmm_engine-0.2.0/tests/venues/binance_order_encoder_test.cpp +430 -0
  1055. fastmm_engine-0.2.0/tests/venues/binance_sbe_md_test.cpp +490 -0
  1056. fastmm_engine-0.2.0/tests/venues/binance_usdm_depth_sync_test.cpp +125 -0
  1057. fastmm_engine-0.2.0/tests/venues/binance_usdm_md_parser_test.cpp +223 -0
  1058. fastmm_engine-0.2.0/tests/venues/binance_usdm_order_encoder_test.cpp +296 -0
  1059. fastmm_engine-0.2.0/tests/venues/binance_usdm_user_parser_test.cpp +179 -0
  1060. fastmm_engine-0.2.0/tests/venues/binance_usdm_venue_test.cpp +604 -0
  1061. fastmm_engine-0.2.0/tests/venues/binance_user_parser_test.cpp +206 -0
  1062. fastmm_engine-0.2.0/tests/venues/binance_venue_test.cpp +436 -0
  1063. fastmm_engine-0.2.0/tests/venues/bybit_book_sync_test.cpp +107 -0
  1064. fastmm_engine-0.2.0/tests/venues/bybit_md_parser_test.cpp +198 -0
  1065. fastmm_engine-0.2.0/tests/venues/bybit_order_encoder_test.cpp +244 -0
  1066. fastmm_engine-0.2.0/tests/venues/bybit_private_parser_test.cpp +117 -0
  1067. fastmm_engine-0.2.0/tests/venues/bybit_venue_test.cpp +571 -0
  1068. fastmm_engine-0.2.0/tests/venues/decimal_test.cpp +49 -0
  1069. fastmm_engine-0.2.0/tests/venues/deribit_book_sync_test.cpp +155 -0
  1070. fastmm_engine-0.2.0/tests/venues/deribit_md_parser_test.cpp +390 -0
  1071. fastmm_engine-0.2.0/tests/venues/deribit_order_encoder_test.cpp +262 -0
  1072. fastmm_engine-0.2.0/tests/venues/deribit_private_parser_test.cpp +224 -0
  1073. fastmm_engine-0.2.0/tests/venues/deribit_venue_test.cpp +536 -0
  1074. fastmm_engine-0.2.0/tests/venues/event_sink_test.cpp +70 -0
  1075. fastmm_engine-0.2.0/tests/venues/fake_venue_util.hpp +203 -0
  1076. fastmm_engine-0.2.0/tests/venues/json_writer_test.cpp +117 -0
  1077. fastmm_engine-0.2.0/tests/venues/live_binance_test.cpp +133 -0
  1078. fastmm_engine-0.2.0/tests/venues/live_binance_usdm_test.cpp +134 -0
  1079. fastmm_engine-0.2.0/tests/venues/live_bybit_test.cpp +116 -0
  1080. fastmm_engine-0.2.0/tests/venues/live_deribit_test.cpp +189 -0
  1081. fastmm_engine-0.2.0/tests/venues/live_test_util.hpp +43 -0
  1082. fastmm_engine-0.2.0/tests/venues/nasdaq_itch_config_test.cpp +273 -0
  1083. fastmm_engine-0.2.0/tests/venues/rate_limiter_test.cpp +66 -0
  1084. fastmm_engine-0.2.0/tests/venues/smoke_test.cpp +4 -0
  1085. fastmm_engine-0.2.0/tests/venues/symbology_test.cpp +62 -0
  1086. fastmm_engine-0.2.0/tests/venues/venue_test_util.hpp +89 -0
  1087. fastmm_engine-0.2.0/tests/xdp/bpf_interp.hpp +330 -0
  1088. fastmm_engine-0.2.0/tests/xdp/xdp_privileged_test.cpp +694 -0
  1089. fastmm_engine-0.2.0/tests/xdp/xdp_test_util.hpp +281 -0
  1090. fastmm_engine-0.2.0/tests/xdp/xdp_unit_test.cpp +570 -0
  1091. fastmm_engine-0.2.0/tools/bench_compare.py +38 -0
  1092. fastmm_engine-0.2.0/tools/bench_table.py +164 -0
  1093. fastmm_engine-0.2.0/tools/check_budgets.py +97 -0
  1094. fastmm_engine-0.2.0/tools/doc_snippets.py +154 -0
  1095. fastmm_engine-0.2.0/tools/docs_cli_help.py +72 -0
  1096. fastmm_engine-0.2.0/tools/docs_config_ref.py +150 -0
  1097. fastmm_engine-0.2.0/tools/docs_links.py +138 -0
  1098. fastmm_engine-0.2.0/tools/docs_md.py +99 -0
  1099. fastmm_engine-0.2.0/tools/doxygen_filter.py +128 -0
  1100. fastmm_engine-0.2.0/tools/gen_synthetic_data.py +174 -0
  1101. fastmm_engine-0.2.0/tools/griffe_fastmm.py +30 -0
  1102. fastmm_engine-0.2.0/tools/journal_dump.py +379 -0
  1103. fastmm_engine-0.2.0/tools/mkdocs_hooks.py +239 -0
  1104. fastmm_engine-0.2.0/tools/pnl_report.py +556 -0
  1105. fastmm_engine-0.2.0/tools/report.py +38 -0
  1106. fastmm_engine-0.2.0/tools/sbe/binance_spot_stream_1_0.xml +117 -0
  1107. fastmm_engine-0.2.0/tools/sbe/mdp3_templates_subset.xml +447 -0
  1108. fastmm_engine-0.2.0/tools/sbe_gen.py +960 -0
@@ -0,0 +1,24 @@
1
+ BasedOnStyle: Google
2
+ ColumnLimit: 100
3
+ IndentWidth: 2
4
+ PointerAlignment: Left
5
+ DerivePointerAlignment: false
6
+ QualifierAlignment: Left
7
+ AllowShortFunctionsOnASingleLine: Inline
8
+ AllowShortIfStatementsOnASingleLine: WithoutElse
9
+ AllowShortLoopsOnASingleLine: true
10
+ AlignConsecutiveAssignments: false
11
+ BinPackArguments: false
12
+ BinPackParameters: false
13
+ IncludeBlocks: Regroup
14
+ IncludeCategories:
15
+ - Regex: '^"fastmm/'
16
+ Priority: 2
17
+ - Regex: '^<(doctest|benchmark|fmt|simdjson|toml\+\+|pybind11|openssl)/'
18
+ Priority: 3
19
+ - Regex: '^<.*\.h>'
20
+ Priority: 4
21
+ - Regex: '^<'
22
+ Priority: 5
23
+ - Regex: '.*'
24
+ Priority: 1
@@ -0,0 +1,59 @@
1
+ # Style checks that contradict .clang-format (braces on one-line ifs) or the hot-path design
2
+ # (deliberately uninitialised buffers, FASTMM_ macros, explicit enum widths) are disabled.
3
+ # bugprone-* and performance-* stay errors; everything else is advisory.
4
+ Checks: >
5
+ bugprone-*,
6
+ performance-*,
7
+ modernize-*,
8
+ readability-*,
9
+ cppcoreguidelines-*,
10
+ clang-analyzer-*,
11
+ misc-*,
12
+ concurrency-*,
13
+ -modernize-use-trailing-return-type,
14
+ -readability-magic-numbers,
15
+ -cppcoreguidelines-avoid-magic-numbers,
16
+ -cppcoreguidelines-pro-bounds-pointer-arithmetic,
17
+ -cppcoreguidelines-pro-bounds-constant-array-index,
18
+ -cppcoreguidelines-pro-type-reinterpret-cast,
19
+ -cppcoreguidelines-pro-type-union-access,
20
+ -cppcoreguidelines-avoid-c-arrays,
21
+ -modernize-avoid-c-arrays,
22
+ -readability-identifier-length,
23
+ -readability-function-cognitive-complexity,
24
+ -misc-non-private-member-variables-in-classes,
25
+ -cppcoreguidelines-non-private-member-variables-in-classes,
26
+ -bugprone-easily-swappable-parameters,
27
+ -cppcoreguidelines-avoid-do-while,
28
+ -misc-include-cleaner,
29
+ -readability-convert-member-functions-to-static,
30
+ -readability-braces-around-statements,
31
+ -readability-redundant-member-init,
32
+ -readability-uppercase-literal-suffix,
33
+ -readability-named-parameter,
34
+ -modernize-use-nodiscard,
35
+ -misc-const-correctness,
36
+ -cppcoreguidelines-pro-bounds-array-to-pointer-decay,
37
+ -cppcoreguidelines-pro-type-member-init,
38
+ -cppcoreguidelines-macro-usage,
39
+ -cppcoreguidelines-special-member-functions,
40
+ -cppcoreguidelines-pro-type-vararg,
41
+ -cppcoreguidelines-owning-memory,
42
+ -cppcoreguidelines-avoid-non-const-global-variables,
43
+ -performance-enum-size
44
+ WarningsAsErrors: 'bugprone-*,performance-*'
45
+ HeaderFilterRegex: '^.*/(include|src|apps)/.*'
46
+ CheckOptions:
47
+ readability-identifier-naming.ClassCase: CamelCase
48
+ readability-identifier-naming.StructCase: CamelCase
49
+ readability-identifier-naming.EnumCase: CamelCase
50
+ readability-identifier-naming.FunctionCase: lower_case
51
+ readability-identifier-naming.VariableCase: lower_case
52
+ readability-identifier-naming.PrivateMemberSuffix: _
53
+ readability-identifier-naming.ConstexprVariablePrefix: k
54
+ readability-identifier-naming.ConstexprVariableCase: CamelCase
55
+ readability-identifier-naming.EnumConstantPrefix: ''
56
+ readability-identifier-naming.EnumConstantCase: CamelCase
57
+ readability-identifier-naming.MacroDefinitionCase: UPPER_CASE
58
+ readability-identifier-naming.MacroDefinitionPrefix: FASTMM_
59
+ readability-identifier-naming.TemplateParameterCase: CamelCase
@@ -0,0 +1,16 @@
1
+ # Keep the Docker build context small and reproducible: only sources go in.
2
+ build/
3
+ .cpm-cache/
4
+ .venv/
5
+ runs/
6
+ dist/
7
+ **/__pycache__/
8
+ *.egg-info/
9
+ python/fastmm/_core*.so
10
+ bench/results/
11
+ .git/
12
+ .cache/
13
+ .idea/
14
+ .vscode/
15
+ .env
16
+ .claude/
@@ -0,0 +1,13 @@
1
+ root = true
2
+ [*]
3
+ charset = utf-8
4
+ end_of_line = lf
5
+ insert_final_newline = true
6
+ trim_trailing_whitespace = true
7
+ indent_style = space
8
+ indent_size = 2
9
+ max_line_length = 100
10
+ [*.py]
11
+ indent_size = 4
12
+ [Makefile]
13
+ indent_style = tab
@@ -0,0 +1,12 @@
1
+ # Copy to .env and `source` it, or export in your shell. Never commit real keys.
2
+ FASTMM_BINANCE_API_KEY=
3
+ FASTMM_BINANCE_API_SECRET=
4
+ FASTMM_BYBIT_API_KEY=
5
+ FASTMM_BYBIT_API_SECRET=
6
+ # Deribit testnet API key: client id and client secret.
7
+ FASTMM_DERIBIT_CLIENT_ID=
8
+ FASTMM_DERIBIT_CLIENT_SECRET=
9
+ # Opt-in Binance live test environment: testnet (default) or demo.
10
+ FASTMM_BINANCE_ENV=testnet
11
+ # Set to 1 to enable opt-in tests that talk to exchange testnets.
12
+ FASTMM_LIVE_TESTS=0
@@ -0,0 +1,24 @@
1
+ name: bench-nightly
2
+ # Manual only: hosted-runner numbers are advisory, and a daily 40-minute run would spend most of a
3
+ # private repository's Actions minutes. Add a schedule back (e.g. weekly) if the repository is public.
4
+ on:
5
+ workflow_dispatch:
6
+ jobs:
7
+ bench:
8
+ runs-on: ubuntu-24.04
9
+ timeout-minutes: 40
10
+ steps:
11
+ - uses: actions/checkout@v4
12
+ - run: sudo apt-get update && sudo apt-get install -y g++-13 ninja-build libssl-dev zlib1g-dev && cmake --version
13
+ - uses: actions/cache@v4
14
+ with:
15
+ path: ~/.cache/CPM
16
+ key: cpm-${{ hashFiles('cmake/Dependencies.cmake', 'cmake/CPM.cmake') }}
17
+ - name: bench (release, portable flags; hosted runners are noisy)
18
+ run: CPM_SOURCE_CACHE=~/.cache/CPM ./scripts/bench.sh --preset release --cpu 1 --min-time 0.2s
19
+ - name: compare to baseline (advisory)
20
+ run: python3 tools/bench_compare.py bench/results/baseline-ci bench/results/latest || true
21
+ - name: budgets (same three-times-the-budget gate as the CI subset)
22
+ run: python3 tools/check_budgets.py bench/results/latest --slack 2
23
+ - uses: actions/upload-artifact@v4
24
+ with: { name: bench-results, path: bench/results/latest }
@@ -0,0 +1,224 @@
1
+ name: CI
2
+ # Pushes and pull requests run lint, the gcc release build with tests, and the Python wheel; a push
3
+ # that only changes documentation runs lint alone. clang-tidy, the sanitizer builds, the clang build
4
+ # and the Docker smoke test run weekly and on manual dispatch ("Run workflow").
5
+ on:
6
+ push:
7
+ branches: [main]
8
+ pull_request:
9
+ schedule:
10
+ - cron: "0 3 * * 0"
11
+ workflow_dispatch:
12
+ concurrency:
13
+ group: ${{ github.workflow }}-${{ github.event_name }}-${{ github.ref }}
14
+ cancel-in-progress: true
15
+ env:
16
+ CPM_SOURCE_CACHE: ~/.cache/CPM
17
+ jobs:
18
+ plan:
19
+ runs-on: ubuntu-24.04
20
+ timeout-minutes: 5
21
+ outputs:
22
+ full: ${{ steps.plan.outputs.full }}
23
+ code: ${{ steps.plan.outputs.code }}
24
+ matrix: ${{ steps.plan.outputs.matrix }}
25
+ steps:
26
+ - id: plan
27
+ env:
28
+ GH_TOKEN: ${{ github.token }}
29
+ EVENT: ${{ github.event_name }}
30
+ BEFORE: ${{ github.event.before }}
31
+ run: |
32
+ gcc_release='{"name":"gcc-release","preset":"release","cxx":"g++-13","pkgs":"g++-13"}'
33
+ others='{"name":"gcc-asan","preset":"asan","cxx":"g++-13","pkgs":"g++-13"},{"name":"clang-release","preset":"clang-release","cxx":"clang++-18","pkgs":"clang-18 lld-18"},{"name":"clang-tsan","preset":"clang-tsan","cxx":"clang++-18","pkgs":"clang-18 lld-18"}'
34
+ full=false; code=true; matrix="[$gcc_release]"
35
+ if [ "$EVENT" = schedule ] || [ "$EVENT" = workflow_dispatch ]; then
36
+ full=true; matrix="[$gcc_release,$others]"
37
+ elif [ "$EVENT" = push ]; then
38
+ # Unknown ranges (first push, force push) count as code changes.
39
+ if files=$(gh api "repos/$GITHUB_REPOSITORY/compare/$BEFORE...$GITHUB_SHA" --jq '.files[].filename') && [ -n "$files" ]; then
40
+ echo "$files" | grep -qvE '^(docs/.*|.*\.md|LICENSE)$' || code=false
41
+ fi
42
+ fi
43
+ { echo "full=$full"; echo "code=$code"; echo "matrix=$matrix"; } >> "$GITHUB_OUTPUT"
44
+ echo "full=$full code=$code"
45
+
46
+ lint:
47
+ runs-on: ubuntu-24.04
48
+ timeout-minutes: 15
49
+ steps:
50
+ - uses: actions/checkout@v4
51
+ - name: install tools
52
+ run: sudo apt-get update && sudo apt-get install -y clang-format-18
53
+ - name: clang-format
54
+ run: CLANG_FORMAT=clang-format-18 ./scripts/format.sh --check
55
+ - name: generated SBE flyweights are up to date
56
+ run: >-
57
+ python3 tools/sbe_gen.py generate --schema tools/sbe/mdp3_templates_subset.xml
58
+ --schema-label tools/sbe/mdp3_templates_subset.xml
59
+ --out include/fastmm/codecs/mdp3/generated/mdp3_schema.hpp
60
+ --namespace fastmm::codecs::mdp3::schema --check &&
61
+ python3 tools/sbe_gen.py generate --schema tools/sbe/binance_spot_stream_1_0.xml
62
+ --schema-label tools/sbe/binance_spot_stream_1_0.xml
63
+ --out include/fastmm/venues/binance/generated/binance_stream_sbe.hpp
64
+ --namespace fastmm::venues::binance::sbe_stream --check
65
+ - name: forbidden patterns
66
+ run: |
67
+ ! grep -rnE 'dynamic_cast|std::cout' include src || (echo "forbidden pattern in hot-path code" && exit 1)
68
+ ! grep -rnE 'TEST_CASE\("[^"]*;' tests || (echo "';' in a TEST_CASE name breaks doctest_discover_tests filters" && exit 1)
69
+ - name: docs (snippets, links and anchors, configuration reference)
70
+ # docs/contributing/writing-docs.md; the command-line reference needs a build (gcc-release).
71
+ run: |
72
+ python3 tools/doc_snippets.py --check
73
+ python3 tools/docs_links.py --check
74
+ python3 tools/docs_config_ref.py --check
75
+
76
+ clang-tidy:
77
+ needs: plan
78
+ if: needs.plan.outputs.full == 'true'
79
+ runs-on: ubuntu-24.04
80
+ timeout-minutes: 45
81
+ steps:
82
+ - uses: actions/checkout@v4
83
+ - name: install tools
84
+ run: sudo apt-get update && sudo apt-get install -y clang-tidy-18 ninja-build libssl-dev zlib1g-dev && cmake --version
85
+ - uses: actions/cache@v4
86
+ with:
87
+ path: ~/.cache/CPM
88
+ key: cpm-${{ hashFiles('cmake/Dependencies.cmake', 'cmake/CPM.cmake') }}
89
+ - name: configure (compile_commands.json)
90
+ run: cmake --preset debug -DFASTMM_BUILD_BENCH=OFF
91
+ - name: clang-tidy (bugprone-* and performance-* fail the job)
92
+ run: RUN_CLANG_TIDY=run-clang-tidy-18 ./scripts/tidy.sh build/debug
93
+
94
+ build-test:
95
+ needs: plan
96
+ if: needs.plan.outputs.code == 'true'
97
+ runs-on: ubuntu-24.04
98
+ # Private-repository runners have 2 vCPUs and 7 GB: a cold sanitizer build takes well over 20 min.
99
+ timeout-minutes: 60
100
+ strategy:
101
+ fail-fast: false
102
+ matrix:
103
+ include: ${{ fromJSON(needs.plan.outputs.matrix) }}
104
+ name: ${{ matrix.name }}
105
+ steps:
106
+ - uses: actions/checkout@v4
107
+ - name: install
108
+ run: sudo apt-get update && sudo apt-get install -y ${{ matrix.pkgs }} ninja-build libssl-dev zlib1g-dev ccache && cmake --version
109
+ - uses: hendrikmuhs/ccache-action@v1.2
110
+ with:
111
+ key: ${{ matrix.name }}
112
+ - uses: actions/cache@v4
113
+ with:
114
+ path: ~/.cache/CPM
115
+ key: cpm-${{ hashFiles('cmake/Dependencies.cmake', 'cmake/CPM.cmake') }}
116
+ - name: allow TSan on high-entropy ASLR kernels
117
+ if: contains(matrix.preset, 'tsan')
118
+ run: sudo sysctl -w vm.mmap_rnd_bits=28
119
+ - name: configure
120
+ run: cmake --preset ${{ matrix.preset }} -DCMAKE_CXX_COMPILER=${{ matrix.cxx }} -DFASTMM_WERROR=ON
121
+ - name: build
122
+ # -k 0: report every compile error in one run instead of stopping at the first one
123
+ run: cmake --build --preset ${{ matrix.preset }} -j$(nproc) -- -k 0
124
+ - name: docs (command-line reference is up to date)
125
+ if: matrix.name == 'gcc-release'
126
+ run: python3 tools/docs_cli_help.py --check --bin build/release/bin
127
+ - name: test
128
+ env: { ASAN_OPTIONS: "detect_leaks=1:strict_string_checks=1", UBSAN_OPTIONS: "print_stacktrace=1:halt_on_error=1", TSAN_OPTIONS: "halt_on_error=1" }
129
+ # The test presets set no job count; run as many tests at once as the runner has cores.
130
+ # Includes the labels examples (quick start, C++ examples), tutorial (its unit test, C++
131
+ # backtest and, outside sanitizers, scripts/docs/tutorial.sh up to the simulated exchange on
132
+ # a free port) and docs (strategy API doc test, public headers compile alone).
133
+ run: ctest --preset ${{ matrix.preset }} -j$(nproc)
134
+ - name: benchmark budgets (subset)
135
+ if: matrix.name == 'gcc-release'
136
+ # bench/ci_budget.toml holds absolute times measured on the reference machine. A hosted
137
+ # runner is roughly twice as slow and its load is not ours to control, so this gate is set
138
+ # at three times the budget: it catches a benchmark that errored, that stopped doing the
139
+ # work it is named for (the [min_counters] floors), or that collapsed by an order of
140
+ # magnitude -- the class of harness bug that once published an 8 ms reactor round trip. The
141
+ # tight gate is the local one (default --slack 0.10, scripts/bench.sh + check_budgets.py).
142
+ run: |
143
+ mkdir -p bench/results/ci
144
+ for b in bench_book bench_risk bench_oms bench_quote_manager bench_logger bench_journal \
145
+ bench_codecs_fix bench_codecs_mdp3; do
146
+ ./build/release/bin/bench/$b --benchmark_min_time=0.1s --benchmark_repetitions=3 \
147
+ --benchmark_out_format=json --benchmark_out="bench/results/ci/$b.json"
148
+ done
149
+ # Each tick-to-order iteration runs an untimed settle loop that costs far more than the
150
+ # timed part, so this one gets a short min_time.
151
+ ./build/release/bin/bench/bench_tick_to_order --benchmark_min_time=0.02s \
152
+ --benchmark_repetitions=3 --benchmark_out_format=json \
153
+ --benchmark_out=bench/results/ci/bench_tick_to_order.json
154
+ python3 tools/check_budgets.py bench/results/ci --slack 2
155
+
156
+ - name: install + external project
157
+ if: matrix.name == 'gcc-release'
158
+ # examples/external-project against the install prefix: strategy lists, a synthetic backtest,
159
+ # 15 s of live trading against fastmm-sim-exchange, a verified replay of that journal.
160
+ run: |
161
+ cmake --install build/release --prefix build/install
162
+ CXX=${{ matrix.cxx }} JOBS=$(nproc) ./scripts/ci-external-project.sh build/release build/install build/external-project
163
+
164
+ docker:
165
+ needs: plan
166
+ if: needs.plan.outputs.full == 'true'
167
+ runs-on: ubuntu-24.04
168
+ timeout-minutes: 60
169
+ steps:
170
+ - uses: actions/checkout@v4
171
+ - name: build the image
172
+ run: docker compose build
173
+ - name: smoke test (simulated exchange + engine, 20 s)
174
+ run: |
175
+ docker compose up -d sim-exchange
176
+ docker compose run --rm engine --config /fastmm/configs/sim-docker.toml --duration 20s
177
+ - name: the production image builds and runs as uid 10001
178
+ run: |
179
+ docker build -f docker/Dockerfile.production -t fastmm-production:ci .
180
+ test "$(docker run --rm --entrypoint id fastmm-production:ci -u)" = 10001
181
+ docker run --rm fastmm-production:ci fastmm-live --version
182
+ - name: simulator log
183
+ if: always()
184
+ run: docker compose logs sim-exchange | tail -40
185
+ - name: stop
186
+ if: always()
187
+ run: docker compose down
188
+
189
+ python:
190
+ needs: plan
191
+ if: needs.plan.outputs.code == 'true'
192
+ runs-on: ubuntu-24.04
193
+ timeout-minutes: 20
194
+ steps:
195
+ - uses: actions/checkout@v4
196
+ - uses: actions/setup-python@v5
197
+ with: { python-version: "3.12" }
198
+ - name: install
199
+ run: sudo apt-get update && sudo apt-get install -y g++-13 ninja-build ccache && python -m pip install --upgrade pip
200
+ - uses: hendrikmuhs/ccache-action@v1.2
201
+ with:
202
+ key: python-wheel
203
+ - uses: actions/cache@v4
204
+ with:
205
+ path: ~/.cache/CPM
206
+ key: cpm-${{ hashFiles('cmake/Dependencies.cmake', 'cmake/CPM.cmake') }}
207
+ - name: wheel (scikit-build-core, FASTMM_BUILD_NET=OFF)
208
+ run: CXX=g++-13 pip wheel . -w dist --no-deps -v
209
+ - name: install wheel + test deps
210
+ # numba: python/tests/test_hot.py and the hot example (the fastmm-engine[hot] extra)
211
+ run: pip install "$(ls dist/fastmm_engine-*.whl)[hot]" pytest pandas
212
+ - name: wheel holds only the package
213
+ run: python -m zipfile -l dist/fastmm_engine-*.whl | awk 'NR>1 {print $1}' | grep -vE '^fastmm(/|_engine-[0-9.]+\.dist-info/)' && exit 1 || true
214
+ - name: pytest (against the installed wheel)
215
+ run: |
216
+ python -c "import fastmm; print(fastmm.__version__, fastmm.build_info())"
217
+ python -m pytest python/tests -q
218
+ - name: examples
219
+ run: |
220
+ python examples/python/backtest_quickstart.py
221
+ python examples/python/sweep_spread.py
222
+ python examples/python/strategies/basic_mm_exact.py
223
+ python examples/python/strategies/basic_mm_hot.py
224
+ python examples/python/strategies/skew_mm.py
@@ -0,0 +1,98 @@
1
+ name: docs
2
+
3
+ # Builds the documentation site (mkdocs.yml) and publishes it to GitHub Pages.
4
+ # A pull request builds it strictly without deploying, so a broken page or link fails before merge.
5
+
6
+ # GitHub Actions does not expand YAML anchors, so the two path lists are kept identical by hand.
7
+ on:
8
+ push:
9
+ branches: [main]
10
+ paths:
11
+ - docs/**
12
+ - include/**
13
+ - python/**
14
+ - doxygen/**
15
+ - mkdocs.yml
16
+ - tools/mkdocs_hooks.py
17
+ - tools/doxygen_filter.py
18
+ - tools/griffe_fastmm.py
19
+ - scripts/docs-serve.sh
20
+ - CMakeLists.txt
21
+ - .github/workflows/docs.yml
22
+ pull_request:
23
+ paths:
24
+ - docs/**
25
+ - include/**
26
+ - python/**
27
+ - doxygen/**
28
+ - mkdocs.yml
29
+ - tools/mkdocs_hooks.py
30
+ - tools/doxygen_filter.py
31
+ - tools/griffe_fastmm.py
32
+ - scripts/docs-serve.sh
33
+ - CMakeLists.txt
34
+ - .github/workflows/docs.yml
35
+ workflow_dispatch:
36
+
37
+ permissions:
38
+ contents: read
39
+
40
+ concurrency:
41
+ group: docs-${{ github.ref }}
42
+ cancel-in-progress: true
43
+
44
+ jobs:
45
+ build:
46
+ runs-on: ubuntu-24.04
47
+ steps:
48
+ - uses: actions/checkout@v4
49
+
50
+ - uses: actions/setup-python@v5
51
+ with:
52
+ python-version: "3.12"
53
+ cache: pip
54
+ cache-dependency-path: docs/requirements.txt
55
+
56
+ - name: doxygen (the C++ reference)
57
+ run: |
58
+ sudo apt-get update
59
+ sudo apt-get install --yes --no-install-recommends doxygen
60
+ doxygen --version
61
+
62
+ - run: pip install --requirement docs/requirements.txt
63
+
64
+ # --strict fails on a broken link, a missing anchor, a page that is not in the nav and a
65
+ # docstring that mkdocstrings cannot resolve; tools/mkdocs_hooks.py adds the C++ reference.
66
+ - name: mkdocs build --strict
67
+ run: mkdocs build --strict
68
+
69
+ - name: the generated reference is not empty
70
+ run: |
71
+ test -s site/api/cpp/index.html
72
+ test -s site/api/python/index.html
73
+ test -s site/api/cpp/classfastmm_1_1QuoteManager.html
74
+ test -s site/search/search_index.json
75
+
76
+ - uses: actions/upload-pages-artifact@v3
77
+ if: github.event_name != 'pull_request'
78
+ with:
79
+ path: site
80
+
81
+ deploy:
82
+ if: github.event_name != 'pull_request'
83
+ needs: build
84
+ runs-on: ubuntu-24.04
85
+ permissions:
86
+ pages: write
87
+ id-token: write
88
+ environment:
89
+ name: github-pages
90
+ url: ${{ steps.deployment.outputs.page_url }}
91
+ # One deployment at a time, and never cancel one halfway.
92
+ concurrency:
93
+ group: github-pages
94
+ cancel-in-progress: false
95
+ steps:
96
+ - uses: actions/configure-pages@v5
97
+ - id: deployment
98
+ uses: actions/deploy-pages@v4
@@ -0,0 +1,81 @@
1
+ name: release
2
+ # On a `v*` tag: builds the portable tarball (scripts/package-release.sh), attaches it and its
3
+ # SHA-256 to a GitHub Release with the CHANGELOG section as the notes, and pushes the production
4
+ # image to GHCR. The PyPI distributions are built and published by wheels.yml on the same tag.
5
+ # A manual run takes an existing tag and repeats both.
6
+ on:
7
+ push:
8
+ tags: ["v*"]
9
+ workflow_dispatch:
10
+ inputs:
11
+ tag:
12
+ description: "Existing tag to release, e.g. v0.2.0"
13
+ required: true
14
+ permissions:
15
+ contents: read
16
+ env:
17
+ TAG: ${{ inputs.tag || github.ref_name }}
18
+
19
+ jobs:
20
+ tarball:
21
+ runs-on: ubuntu-24.04
22
+ timeout-minutes: 90
23
+ permissions:
24
+ contents: write
25
+ steps:
26
+ - uses: actions/checkout@v4
27
+ with: { ref: "${{ inputs.tag || github.ref }}" }
28
+ - name: install
29
+ run: sudo apt-get update && sudo apt-get install -y g++-13 ninja-build libssl-dev zlib1g-dev
30
+ - uses: actions/cache@v4
31
+ with:
32
+ path: ~/.cache/CPM
33
+ key: cpm-${{ hashFiles('cmake/Dependencies.cmake', 'cmake/CPM.cmake') }}
34
+ # The `release` preset, not `release-dpdk`: a hosted runner has no NIC to bind and building
35
+ # DPDK here would triple the job. A DPDK tarball is a local `scripts/package-release.sh` run.
36
+ - name: build the tarball
37
+ run: ./scripts/package-release.sh --preset release --out dist
38
+ - name: the checksum matches and the binaries run
39
+ run: |
40
+ (cd dist && sha256sum -c ./*.sha256) # the file names one bare tarball, in dist/
41
+ tar xzf dist/*.tar.gz -C dist
42
+ dist/fastmm-*/bin/fastmm-live --version
43
+ dist/fastmm-*/bin/fastmm-top --help > /dev/null
44
+ - name: release notes from the CHANGELOG
45
+ run: |
46
+ awk -v v="${TAG#v}" '
47
+ $0 ~ "^## \\[" v "\\]" { on = 1; next }
48
+ on && /^## \[/ { exit }
49
+ on { print }' CHANGELOG.md > notes.md
50
+ printf '\n[Install](https://ziy.bio/FastMM/getting-started/install/) - [Deploy](https://ziy.bio/FastMM/how-to/operations/deploy/)\n' >> notes.md
51
+ test -s notes.md
52
+ - name: publish the release
53
+ env:
54
+ GH_TOKEN: ${{ github.token }}
55
+ run: |
56
+ gh release create "$TAG" --title "FastMM ${TAG#v}" --notes-file notes.md --verify-tag \
57
+ dist/*.tar.gz dist/*.tar.gz.sha256
58
+
59
+ image:
60
+ runs-on: ubuntu-24.04
61
+ timeout-minutes: 90
62
+ permissions:
63
+ contents: read
64
+ packages: write
65
+ steps:
66
+ - uses: actions/checkout@v4
67
+ with: { ref: "${{ inputs.tag || github.ref }}" }
68
+ # GHCR repository names are lower case; ${{ github.repository }} is not.
69
+ - name: build the production image
70
+ run: |
71
+ docker build -f docker/Dockerfile.production --build-arg "VERSION=${TAG#v}" \
72
+ -t "ghcr.io/ziyangliu-666/fastmm:${TAG#v}" -t ghcr.io/ziyangliu-666/fastmm:latest .
73
+ - name: the image runs as uid 10001 and starts
74
+ run: |
75
+ test "$(docker run --rm --entrypoint id "ghcr.io/ziyangliu-666/fastmm:${TAG#v}" -u)" = 10001
76
+ docker run --rm "ghcr.io/ziyangliu-666/fastmm:${TAG#v}" fastmm-live --version
77
+ - name: push to GHCR
78
+ run: |
79
+ echo "${{ secrets.GITHUB_TOKEN }}" | docker login ghcr.io -u "${{ github.actor }}" --password-stdin
80
+ docker push "ghcr.io/ziyangliu-666/fastmm:${TAG#v}"
81
+ docker push ghcr.io/ziyangliu-666/fastmm:latest
@@ -0,0 +1,84 @@
1
+ name: wheels
2
+ # Builds the wheels (manylinux_2_28 x86_64): fastmm-engine for CPython 3.9-3.14 and fastmm-engine-live for
3
+ # CPython 3.10-3.14, plus the fastmm-engine sdist, and uploads them as artifacts. Each build job runs
4
+ # the test suite of the wheel it built; publishing needs all three jobs green.
5
+ #
6
+ # Publishing to PyPI uses the repository secret PYPI_API_TOKEN (a project-scoped API token) in the
7
+ # environment "pypi", and happens on a `v*` tag push, or from a manual run with "publish" checked.
8
+ # The environment's deployment rules have to admit the tag ref, or the tag run stops before uploading.
9
+ on:
10
+ workflow_dispatch:
11
+ inputs:
12
+ publish:
13
+ description: "Publish the built distributions to PyPI"
14
+ type: boolean
15
+ default: false
16
+ push:
17
+ tags: ["v*"]
18
+
19
+ jobs:
20
+ sdist:
21
+ runs-on: ubuntu-24.04
22
+ steps:
23
+ - uses: actions/checkout@v4
24
+ - uses: actions/setup-python@v5
25
+ with: { python-version: "3.12" }
26
+ - name: build sdist
27
+ run: python -m pip install build twine && python -m build --sdist && python -m twine check dist/*
28
+ - uses: actions/upload-artifact@v4
29
+ with: { name: sdist, path: dist/*.tar.gz }
30
+
31
+ wheels:
32
+ runs-on: ubuntu-24.04
33
+ timeout-minutes: 120
34
+ steps:
35
+ - uses: actions/checkout@v4
36
+ - uses: pypa/cibuildwheel@v4.2.1
37
+ env:
38
+ CIBW_BUILD: "cp39-manylinux_x86_64 cp310-manylinux_x86_64 cp311-manylinux_x86_64 cp312-manylinux_x86_64 cp313-manylinux_x86_64 cp314-manylinux_x86_64"
39
+ CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
40
+ CIBW_ENVIRONMENT: "CPM_SOURCE_CACHE=/tmp/cpm"
41
+ CIBW_TEST_REQUIRES: "pytest pandas"
42
+ CIBW_TEST_COMMAND: "python -m pytest {project}/python/tests -q"
43
+ - uses: actions/upload-artifact@v4
44
+ with: { name: wheels, path: wheelhouse/*.whl }
45
+
46
+ live-wheels:
47
+ needs: wheels
48
+ runs-on: ubuntu-24.04
49
+ timeout-minutes: 150
50
+ steps:
51
+ - uses: actions/checkout@v4
52
+ # cibuildwheel copies the checkout, wheelhouse/ included, into the container: before the tests,
53
+ # fastmm-engine is installed from /project/wheelhouse only.
54
+ - uses: actions/download-artifact@v4
55
+ with: { name: wheels, path: wheelhouse }
56
+ - uses: pypa/cibuildwheel@v4.2.1
57
+ with:
58
+ package-dir: python/live
59
+ env:
60
+ CIBW_BUILD: "cp310-manylinux_x86_64 cp311-manylinux_x86_64 cp312-manylinux_x86_64 cp313-manylinux_x86_64 cp314-manylinux_x86_64"
61
+ CIBW_MANYLINUX_X86_64_IMAGE: manylinux_2_28
62
+ # OpenSSL 3, pinned and checksum-verified, static and position-independent.
63
+ CIBW_BEFORE_ALL: "bash {project}/scripts/wheels/build-openssl.sh /opt/fastmm-openssl"
64
+ CIBW_ENVIRONMENT: "CPM_SOURCE_CACHE=/tmp/cpm OPENSSL_ROOT_DIR=/opt/fastmm-openssl FASTMM_OPENSSL_STATIC=ON"
65
+ # auditwheel repair, then: no libssl or libcrypto needed or bundled, only PyInit__live exported.
66
+ CIBW_REPAIR_WHEEL_COMMAND: "auditwheel repair -w {dest_dir} {wheel} && bash {project}/scripts/wheels/check-live-wheel.sh {dest_dir}/fastmm_engine_live-*.whl"
67
+ CIBW_BEFORE_TEST: "pip install numpy && pip install --no-index --find-links {project}/wheelhouse fastmm-engine"
68
+ CIBW_TEST_REQUIRES: "pytest"
69
+ CIBW_TEST_COMMAND: "python -m pytest {project}/python/live/tests -q"
70
+ - uses: actions/upload-artifact@v4
71
+ with: { name: live-wheels, path: wheelhouse/fastmm_engine_live-*.whl }
72
+
73
+ publish:
74
+ if: startsWith(github.ref, 'refs/tags/v') || inputs.publish
75
+ needs: [sdist, wheels, live-wheels]
76
+ runs-on: ubuntu-24.04
77
+ environment: pypi
78
+ steps:
79
+ - uses: actions/download-artifact@v4
80
+ with: { path: dist, merge-multiple: true }
81
+ - uses: pypa/gh-action-pypi-publish@release/v1
82
+ with:
83
+ password: ${{ secrets.PYPI_API_TOKEN }}
84
+ print-hash: true