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.
- fastmm_engine-0.2.0/.clang-format +24 -0
- fastmm_engine-0.2.0/.clang-tidy +59 -0
- fastmm_engine-0.2.0/.dockerignore +16 -0
- fastmm_engine-0.2.0/.editorconfig +13 -0
- fastmm_engine-0.2.0/.env.example +12 -0
- fastmm_engine-0.2.0/.github/workflows/bench-nightly.yml +24 -0
- fastmm_engine-0.2.0/.github/workflows/ci.yml +224 -0
- fastmm_engine-0.2.0/.github/workflows/docs.yml +98 -0
- fastmm_engine-0.2.0/.github/workflows/release.yml +81 -0
- fastmm_engine-0.2.0/.github/workflows/wheels.yml +84 -0
- fastmm_engine-0.2.0/.gitignore +40 -0
- fastmm_engine-0.2.0/.playwright-mcp/desktop-dark.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/desktop-light.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/desktop-light2.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/final-desktop.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-42-35-278Z.yml +368 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-45-04-401Z.yml +360 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-46-00-557Z.yml +356 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-46-51-283Z.yml +354 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-47-17-324Z.yml +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-47-27-984Z.yml +516 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-48-04-781Z.yml +186 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-49-04-090Z.yml +214 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T11-49-19-873Z.yml +406 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T12-10-16-318Z.yml +356 -0
- fastmm_engine-0.2.0/.playwright-mcp/page-2026-09-23T12-15-17-469Z.yml +352 -0
- fastmm_engine-0.2.0/.playwright-mcp/phone-equity.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/phone-equity2.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/phone-light.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/print.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/session-light.png +0 -0
- fastmm_engine-0.2.0/.playwright-mcp/session-light2.png +0 -0
- fastmm_engine-0.2.0/.pre-commit-config.yaml +27 -0
- fastmm_engine-0.2.0/CHANGELOG.md +814 -0
- fastmm_engine-0.2.0/CMakeLists.txt +137 -0
- fastmm_engine-0.2.0/CMakePresets.json +380 -0
- fastmm_engine-0.2.0/CONTRIBUTING.md +12 -0
- fastmm_engine-0.2.0/LICENSE +21 -0
- fastmm_engine-0.2.0/PKG-INFO +104 -0
- fastmm_engine-0.2.0/README.md +82 -0
- fastmm_engine-0.2.0/SECURITY.md +6 -0
- fastmm_engine-0.2.0/apps/CMakeLists.txt +15 -0
- fastmm_engine-0.2.0/apps/fastmm-backtest/CMakeLists.txt +2 -0
- fastmm_engine-0.2.0/apps/fastmm-backtest/main.cpp +6 -0
- fastmm_engine-0.2.0/apps/fastmm-data/CMakeLists.txt +2 -0
- fastmm_engine-0.2.0/apps/fastmm-data/main.cpp +6 -0
- fastmm_engine-0.2.0/apps/fastmm-live/CMakeLists.txt +2 -0
- fastmm_engine-0.2.0/apps/fastmm-live/main.cpp +6 -0
- fastmm_engine-0.2.0/apps/fastmm-pnl/CMakeLists.txt +2 -0
- fastmm_engine-0.2.0/apps/fastmm-pnl/main.cpp +269 -0
- fastmm_engine-0.2.0/apps/fastmm-replay/CMakeLists.txt +2 -0
- fastmm_engine-0.2.0/apps/fastmm-replay/main.cpp +6 -0
- fastmm_engine-0.2.0/apps/fastmm-sim-exchange/CMakeLists.txt +3 -0
- fastmm_engine-0.2.0/apps/fastmm-sim-exchange/main.cpp +295 -0
- fastmm_engine-0.2.0/apps/fastmm-sim-itch/CMakeLists.txt +3 -0
- fastmm_engine-0.2.0/apps/fastmm-sim-itch/main.cpp +387 -0
- fastmm_engine-0.2.0/apps/fastmm-top/CMakeLists.txt +2 -0
- fastmm_engine-0.2.0/apps/fastmm-top/main.cpp +177 -0
- fastmm_engine-0.2.0/apps/fastmm-top/metrics_server.cpp +181 -0
- fastmm_engine-0.2.0/apps/fastmm-top/metrics_server.hpp +27 -0
- fastmm_engine-0.2.0/bench/CMakeLists.txt +46 -0
- fastmm_engine-0.2.0/bench/README.md +387 -0
- fastmm_engine-0.2.0/bench/README.tmpl.md +273 -0
- fastmm_engine-0.2.0/bench/bench_book.cpp +209 -0
- fastmm_engine-0.2.0/bench/bench_codecs_fix.cpp +124 -0
- fastmm_engine-0.2.0/bench/bench_codecs_mdp3.cpp +140 -0
- fastmm_engine-0.2.0/bench/bench_codecs_nasdaq.cpp +541 -0
- fastmm_engine-0.2.0/bench/bench_fixed.cpp +60 -0
- fastmm_engine-0.2.0/bench/bench_http.cpp +75 -0
- fastmm_engine-0.2.0/bench/bench_journal.cpp +36 -0
- fastmm_engine-0.2.0/bench/bench_json.cpp +351 -0
- fastmm_engine-0.2.0/bench/bench_latency.cpp +47 -0
- fastmm_engine-0.2.0/bench/bench_logger.cpp +58 -0
- fastmm_engine-0.2.0/bench/bench_main.cpp +86 -0
- fastmm_engine-0.2.0/bench/bench_matching.cpp +111 -0
- fastmm_engine-0.2.0/bench/bench_oms.cpp +58 -0
- fastmm_engine-0.2.0/bench/bench_order_encoders.cpp +222 -0
- fastmm_engine-0.2.0/bench/bench_order_tcp.cpp +257 -0
- fastmm_engine-0.2.0/bench/bench_pin.hpp +35 -0
- fastmm_engine-0.2.0/bench/bench_quote_manager.cpp +92 -0
- fastmm_engine-0.2.0/bench/bench_reactor.cpp +199 -0
- fastmm_engine-0.2.0/bench/bench_risk.cpp +77 -0
- fastmm_engine-0.2.0/bench/bench_smoke.cpp +9 -0
- fastmm_engine-0.2.0/bench/bench_spsc.cpp +103 -0
- fastmm_engine-0.2.0/bench/bench_strategies.cpp +56 -0
- fastmm_engine-0.2.0/bench/bench_tick_to_order.cpp +281 -0
- fastmm_engine-0.2.0/bench/bench_udp.cpp +152 -0
- fastmm_engine-0.2.0/bench/bench_udp_frame.cpp +74 -0
- fastmm_engine-0.2.0/bench/bench_ws.cpp +99 -0
- fastmm_engine-0.2.0/bench/ci_budget.toml +80 -0
- fastmm_engine-0.2.0/bench/python/bench_hot_strategy.py +166 -0
- fastmm_engine-0.2.0/bench/python/bench_py_strategy.py +121 -0
- fastmm_engine-0.2.0/bench/python/hot_bench_module.cpp +176 -0
- fastmm_engine-0.2.0/cmake/CPM.cmake +1379 -0
- fastmm_engine-0.2.0/cmake/CompilerFlags.cmake +66 -0
- fastmm_engine-0.2.0/cmake/Dependencies.cmake +114 -0
- fastmm_engine-0.2.0/cmake/Dpdk.cmake +33 -0
- fastmm_engine-0.2.0/cmake/Sanitizers.cmake +21 -0
- fastmm_engine-0.2.0/cmake/fastmmConfig.cmake.in +33 -0
- fastmm_engine-0.2.0/configs/backtest-binance.toml +89 -0
- fastmm_engine-0.2.0/configs/backtest-example.toml +100 -0
- fastmm_engine-0.2.0/configs/binance-demo.toml +98 -0
- fastmm_engine-0.2.0/configs/binance-testnet.toml +90 -0
- fastmm_engine-0.2.0/configs/binance-usdm-demo.toml +93 -0
- fastmm_engine-0.2.0/configs/bybit-testnet.toml +92 -0
- fastmm_engine-0.2.0/configs/deribit-testnet.toml +151 -0
- fastmm_engine-0.2.0/configs/nasdaq-itch-sim.toml +99 -0
- fastmm_engine-0.2.0/configs/profiles/production-latency.toml +105 -0
- fastmm_engine-0.2.0/configs/sim-docker.toml +93 -0
- fastmm_engine-0.2.0/configs/sim-itch.toml +92 -0
- fastmm_engine-0.2.0/configs/sim-local-tls.toml +94 -0
- fastmm_engine-0.2.0/configs/sim-local.toml +93 -0
- fastmm_engine-0.2.0/configs/sim.toml +92 -0
- fastmm_engine-0.2.0/configs/tutorial-binance-demo.toml +76 -0
- fastmm_engine-0.2.0/configs/tutorial-sim.toml +114 -0
- fastmm_engine-0.2.0/deploy/fastmm-live.service +55 -0
- fastmm_engine-0.2.0/docker/Dockerfile +22 -0
- fastmm_engine-0.2.0/docker/Dockerfile.production +50 -0
- fastmm_engine-0.2.0/docker/entrypoint.sh +12 -0
- fastmm_engine-0.2.0/docker-compose.yml +21 -0
- fastmm_engine-0.2.0/docs/README.md +83 -0
- fastmm_engine-0.2.0/docs/adr/0001-fixed-point-int64-price-qty.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0002-exceptions-off-hot-path.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0003-pragma-once.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0004-doctest-over-gtest.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0005-cpm-over-submodules-conan-vcpkg.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0006-static-libs-lto.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0007-hand-written-net-stack.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0008-sim-exchange-speaks-binance.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0009-crtp-strategies-over-virtual.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0010-fmj-journal-format.md +62 -0
- fastmm_engine-0.2.0/docs/adr/0011-scikit-build-core.md +15 -0
- fastmm_engine-0.2.0/docs/adr/0012-strategy-developer-experience.md +254 -0
- fastmm_engine-0.2.0/docs/adr/0013-python-strategies-live.md +129 -0
- fastmm_engine-0.2.0/docs/adr/0014-us-equities.md +150 -0
- fastmm_engine-0.2.0/docs/adr/0015-multicast-market-data.md +197 -0
- fastmm_engine-0.2.0/docs/adr/0016-storage-backends.md +27 -0
- fastmm_engine-0.2.0/docs/adr/README.md +22 -0
- fastmm_engine-0.2.0/docs/api/cpp.md +177 -0
- fastmm_engine-0.2.0/docs/api/public-headers.txt +119 -0
- fastmm_engine-0.2.0/docs/api/python.md +126 -0
- fastmm_engine-0.2.0/docs/assets/fastmm.css +51 -0
- fastmm_engine-0.2.0/docs/contributing/dependencies.md +17 -0
- fastmm_engine-0.2.0/docs/contributing/python-packages.md +39 -0
- fastmm_engine-0.2.0/docs/contributing/releasing.md +50 -0
- fastmm_engine-0.2.0/docs/contributing/writing-docs.md +99 -0
- fastmm_engine-0.2.0/docs/explanation/architecture.md +152 -0
- fastmm_engine-0.2.0/docs/explanation/backtesting.md +139 -0
- fastmm_engine-0.2.0/docs/explanation/benchmarks.md +29 -0
- fastmm_engine-0.2.0/docs/explanation/determinism.md +60 -0
- fastmm_engine-0.2.0/docs/explanation/economics.md +99 -0
- fastmm_engine-0.2.0/docs/explanation/event-flow.md +72 -0
- fastmm_engine-0.2.0/docs/explanation/how-it-works.md +77 -0
- fastmm_engine-0.2.0/docs/explanation/risk-model.md +83 -0
- fastmm_engine-0.2.0/docs/getting-started/install.md +113 -0
- fastmm_engine-0.2.0/docs/getting-started/quickstart.md +137 -0
- fastmm_engine-0.2.0/docs/how-to/backtesting/binance-public-data.md +117 -0
- fastmm_engine-0.2.0/docs/how-to/operations/deploy.md +99 -0
- fastmm_engine-0.2.0/docs/how-to/operations/go-live-checklist.md +56 -0
- fastmm_engine-0.2.0/docs/how-to/operations/journals-replay-pnl.md +137 -0
- fastmm_engine-0.2.0/docs/how-to/operations/kill-switch-and-shutdown.md +136 -0
- fastmm_engine-0.2.0/docs/how-to/operations/monitor-with-fastmm-top.md +79 -0
- fastmm_engine-0.2.0/docs/how-to/operations/multicast-feeds.md +169 -0
- fastmm_engine-0.2.0/docs/how-to/operations/query-trading-records.md +100 -0
- fastmm_engine-0.2.0/docs/how-to/operations/run-on-testnet.md +132 -0
- fastmm_engine-0.2.0/docs/how-to/operations/runbook.md +107 -0
- fastmm_engine-0.2.0/docs/how-to/operations/running-in-production.md +163 -0
- fastmm_engine-0.2.0/docs/how-to/operations/troubleshooting.md +133 -0
- fastmm_engine-0.2.0/docs/how-to/operations/two-host-benchmark.md +57 -0
- fastmm_engine-0.2.0/docs/how-to/strategies/python-hot-hooks.md +140 -0
- fastmm_engine-0.2.0/docs/how-to/strategies/python-live.md +77 -0
- fastmm_engine-0.2.0/docs/how-to/strategies/python-slow-methods.md +113 -0
- fastmm_engine-0.2.0/docs/how-to/strategies/register-a-strategy.md +107 -0
- fastmm_engine-0.2.0/docs/how-to/venues/add-a-venue.md +241 -0
- fastmm_engine-0.2.0/docs/python.md +115 -0
- fastmm_engine-0.2.0/docs/reference/cli.md +302 -0
- fastmm_engine-0.2.0/docs/reference/codecs/cme-mdp3.md +167 -0
- fastmm_engine-0.2.0/docs/reference/codecs/fix.md +155 -0
- fastmm_engine-0.2.0/docs/reference/codecs/nasdaq.md +187 -0
- fastmm_engine-0.2.0/docs/reference/compatibility.md +25 -0
- fastmm_engine-0.2.0/docs/reference/configuration.md +299 -0
- fastmm_engine-0.2.0/docs/reference/data-sources.md +133 -0
- fastmm_engine-0.2.0/docs/reference/errors.md +140 -0
- fastmm_engine-0.2.0/docs/reference/fixed-point.md +134 -0
- fastmm_engine-0.2.0/docs/reference/glossary.md +59 -0
- fastmm_engine-0.2.0/docs/reference/journal-format.md +154 -0
- fastmm_engine-0.2.0/docs/reference/options.md +105 -0
- fastmm_engine-0.2.0/docs/reference/public-api.md +42 -0
- fastmm_engine-0.2.0/docs/reference/python-api.md +444 -0
- fastmm_engine-0.2.0/docs/reference/run-report.md +58 -0
- fastmm_engine-0.2.0/docs/reference/sim-exchange.md +159 -0
- fastmm_engine-0.2.0/docs/reference/sim-itch.md +141 -0
- fastmm_engine-0.2.0/docs/reference/status-file.md +116 -0
- fastmm_engine-0.2.0/docs/reference/storage.md +187 -0
- fastmm_engine-0.2.0/docs/reference/strategy-api.md +414 -0
- fastmm_engine-0.2.0/docs/reference/venues.md +276 -0
- fastmm_engine-0.2.0/docs/requirements.txt +50 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/01-set-up.md +50 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/02-the-model.md +25 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/03-write-the-strategy.md +152 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/04-unit-test.md +95 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/05-backtest-in-cpp.md +70 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/06-register.md +83 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/07-cli-backtest-and-replay.md +73 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/08-sim-exchange.md +85 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/09-binance-demo.md +79 -0
- fastmm_engine-0.2.0/docs/tutorials/first-strategy/README.md +17 -0
- fastmm_engine-0.2.0/doxygen/Doxyfile.in +102 -0
- fastmm_engine-0.2.0/doxygen/awesome/LICENSE +21 -0
- fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-darkmode-toggle.js +157 -0
- fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-fragment-copy-button.js +85 -0
- fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-interactive-toc.js +91 -0
- fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-sidebar-only-darkmode-toggle.css +40 -0
- fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome-sidebar-only.css +116 -0
- fastmm_engine-0.2.0/doxygen/awesome/doxygen-awesome.css +2681 -0
- fastmm_engine-0.2.0/doxygen/custom.css +68 -0
- fastmm_engine-0.2.0/examples/cpp/CMakeLists.txt +13 -0
- fastmm_engine-0.2.0/examples/cpp/custom_strategy.cpp +70 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/CMakeLists.txt +52 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/first_mm.hpp +134 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/first_mm_backtest.cpp +39 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/first_mm_test.cpp +85 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/strategies.cpp +13 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/strategies.hpp +13 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/tutorial_backtest.cpp +8 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/tutorial_live.cpp +10 -0
- fastmm_engine-0.2.0/examples/cpp/tutorial/tutorial_replay.cpp +9 -0
- fastmm_engine-0.2.0/examples/external-project/CMakeLists.txt +45 -0
- fastmm_engine-0.2.0/examples/external-project/apps/backtest.cpp +9 -0
- fastmm_engine-0.2.0/examples/external-project/apps/live.cpp +10 -0
- fastmm_engine-0.2.0/examples/external-project/apps/replay.cpp +10 -0
- fastmm_engine-0.2.0/examples/external-project/include/mm/microprice_mm.hpp +63 -0
- fastmm_engine-0.2.0/examples/external-project/include/mm/strategies.hpp +13 -0
- fastmm_engine-0.2.0/examples/external-project/src/strategies.cpp +12 -0
- fastmm_engine-0.2.0/examples/external-project/tests/microprice_mm_test.cpp +66 -0
- fastmm_engine-0.2.0/examples/python/backtest_quickstart.py +94 -0
- fastmm_engine-0.2.0/examples/python/strategies/basic_mm_exact.py +216 -0
- fastmm_engine-0.2.0/examples/python/strategies/basic_mm_hot.py +194 -0
- fastmm_engine-0.2.0/examples/python/strategies/hot_slow_mm.py +99 -0
- fastmm_engine-0.2.0/examples/python/strategies/skew_mm.py +97 -0
- fastmm_engine-0.2.0/examples/python/sweep_spread.py +47 -0
- fastmm_engine-0.2.0/examples/quickstart/CMakeLists.txt +32 -0
- fastmm_engine-0.2.0/examples/quickstart/main.cpp +23 -0
- fastmm_engine-0.2.0/examples/quickstart/my_mm.hpp +26 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/array_source.hpp +58 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/backtest_config.hpp +77 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/backtest_runner.hpp +98 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/binance_source.hpp +167 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/csv_source.hpp +41 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/data_registry.hpp +139 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/data_source.hpp +225 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/fee_model.hpp +9 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/fill_model.hpp +22 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/journal_source.hpp +46 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/markout.hpp +74 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/metrics.hpp +139 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/pnl.hpp +49 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/registrations.hpp +20 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/replay.hpp +119 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/result.hpp +118 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/sweep.hpp +63 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/synthetic_source.hpp +61 -0
- fastmm_engine-0.2.0/include/fastmm/backtest/tardis_source.hpp +86 -0
- fastmm_engine-0.2.0/include/fastmm/cli/backtest.hpp +26 -0
- fastmm_engine-0.2.0/include/fastmm/cli/data.hpp +13 -0
- fastmm_engine-0.2.0/include/fastmm/cli/live.hpp +28 -0
- fastmm_engine-0.2.0/include/fastmm/cli/modules.hpp +21 -0
- fastmm_engine-0.2.0/include/fastmm/cli/replay.hpp +26 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/codec.hpp +112 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix.hpp +30 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_builder.hpp +221 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_decoder.hpp +114 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_encoder.hpp +97 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_framer.hpp +43 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_session.hpp +284 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_symbols.hpp +75 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_tags.hpp +192 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_time.hpp +133 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/fix_view.hpp +328 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/fix/message_store.hpp +66 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/itch/glimpse.hpp +164 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_decoder.hpp +171 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_encoder.hpp +122 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_l2_bridge.hpp +157 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/itch/itch_messages.hpp +380 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/itch/nasdaq_fields.hpp +217 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/generated/mdp3_schema.hpp +3304 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_decoder.hpp +211 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_encoder.hpp +162 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_feed.hpp +194 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_instruments.hpp +103 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/mdp3/mdp3_packet.hpp +106 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/moldudp/moldudp64.hpp +729 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/ouch/ouch42.hpp +426 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/ouch/ouch50.hpp +609 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/ouch/ouch_common.hpp +167 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/sbe/sbe.hpp +349 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/soupbin/soupbin.hpp +171 -0
- fastmm_engine-0.2.0/include/fastmm/codecs/soupbin/soupbin_session.hpp +475 -0
- fastmm_engine-0.2.0/include/fastmm/config/config.hpp +224 -0
- fastmm_engine-0.2.0/include/fastmm/config/env_subst.hpp +39 -0
- fastmm_engine-0.2.0/include/fastmm/config/schema.hpp +811 -0
- fastmm_engine-0.2.0/include/fastmm/core/arena.hpp +56 -0
- fastmm_engine-0.2.0/include/fastmm/core/book/book_features.hpp +62 -0
- fastmm_engine-0.2.0/include/fastmm/core/book/book_syncer.hpp +269 -0
- fastmm_engine-0.2.0/include/fastmm/core/book/book_view.hpp +50 -0
- fastmm_engine-0.2.0/include/fastmm/core/book/l2_book.hpp +249 -0
- fastmm_engine-0.2.0/include/fastmm/core/book/l3_book.hpp +834 -0
- fastmm_engine-0.2.0/include/fastmm/core/config_macros.hpp +76 -0
- fastmm_engine-0.2.0/include/fastmm/core/containers/counter_key_map.hpp +86 -0
- fastmm_engine-0.2.0/include/fastmm/core/containers/flat_map.hpp +87 -0
- fastmm_engine-0.2.0/include/fastmm/core/containers/open_hash_map.hpp +145 -0
- fastmm_engine-0.2.0/include/fastmm/core/containers/pool.hpp +134 -0
- fastmm_engine-0.2.0/include/fastmm/core/containers/ring_buffer.hpp +72 -0
- fastmm_engine-0.2.0/include/fastmm/core/containers/static_vector.hpp +107 -0
- fastmm_engine-0.2.0/include/fastmm/core/crc32c.hpp +18 -0
- fastmm_engine-0.2.0/include/fastmm/core/engine.hpp +1568 -0
- fastmm_engine-0.2.0/include/fastmm/core/engine_config.hpp +40 -0
- fastmm_engine-0.2.0/include/fastmm/core/engine_runner.hpp +102 -0
- fastmm_engine-0.2.0/include/fastmm/core/enums.hpp +461 -0
- fastmm_engine-0.2.0/include/fastmm/core/fixed_point.hpp +485 -0
- fastmm_engine-0.2.0/include/fastmm/core/fixed_string.hpp +94 -0
- fastmm_engine-0.2.0/include/fastmm/core/hex.hpp +20 -0
- fastmm_engine-0.2.0/include/fastmm/core/hot_array.hpp +48 -0
- fastmm_engine-0.2.0/include/fastmm/core/instrument.hpp +199 -0
- fastmm_engine-0.2.0/include/fastmm/core/journal.hpp +467 -0
- fastmm_engine-0.2.0/include/fastmm/core/latency.hpp +190 -0
- fastmm_engine-0.2.0/include/fastmm/core/log.hpp +334 -0
- fastmm_engine-0.2.0/include/fastmm/core/messages.hpp +476 -0
- fastmm_engine-0.2.0/include/fastmm/core/msg_ring.hpp +147 -0
- fastmm_engine-0.2.0/include/fastmm/core/oms.hpp +692 -0
- fastmm_engine-0.2.0/include/fastmm/core/options/black76.hpp +208 -0
- fastmm_engine-0.2.0/include/fastmm/core/order.hpp +119 -0
- fastmm_engine-0.2.0/include/fastmm/core/position.hpp +182 -0
- fastmm_engine-0.2.0/include/fastmm/core/quote_manager.hpp +420 -0
- fastmm_engine-0.2.0/include/fastmm/core/record_stream.hpp +203 -0
- fastmm_engine-0.2.0/include/fastmm/core/reject_counters.hpp +87 -0
- fastmm_engine-0.2.0/include/fastmm/core/result.hpp +192 -0
- fastmm_engine-0.2.0/include/fastmm/core/risk.hpp +301 -0
- fastmm_engine-0.2.0/include/fastmm/core/rng.hpp +70 -0
- fastmm_engine-0.2.0/include/fastmm/core/seqlock.hpp +99 -0
- fastmm_engine-0.2.0/include/fastmm/core/session_state.hpp +60 -0
- fastmm_engine-0.2.0/include/fastmm/core/spsc_ring.hpp +90 -0
- fastmm_engine-0.2.0/include/fastmm/core/status_prometheus.hpp +19 -0
- fastmm_engine-0.2.0/include/fastmm/core/status_segment.hpp +222 -0
- fastmm_engine-0.2.0/include/fastmm/core/strategy_context.hpp +138 -0
- fastmm_engine-0.2.0/include/fastmm/core/strong_id.hpp +120 -0
- fastmm_engine-0.2.0/include/fastmm/core/thread_utils.hpp +56 -0
- fastmm_engine-0.2.0/include/fastmm/core/time.hpp +371 -0
- fastmm_engine-0.2.0/include/fastmm/core/timer_wheel.hpp +186 -0
- fastmm_engine-0.2.0/include/fastmm/core/transport.hpp +197 -0
- fastmm_engine-0.2.0/include/fastmm/live/live_backend.hpp +29 -0
- fastmm_engine-0.2.0/include/fastmm/live/session.hpp +112 -0
- fastmm_engine-0.2.0/include/fastmm/live/slow_watchdog.hpp +30 -0
- fastmm_engine-0.2.0/include/fastmm/live/thread_affinity.hpp +24 -0
- fastmm_engine-0.2.0/include/fastmm/net/backoff.hpp +55 -0
- fastmm_engine-0.2.0/include/fastmm/net/bpf_asm.hpp +226 -0
- fastmm_engine-0.2.0/include/fastmm/net/byte_stream.hpp +67 -0
- fastmm_engine-0.2.0/include/fastmm/net/ca_locations.hpp +46 -0
- fastmm_engine-0.2.0/include/fastmm/net/connection.hpp +559 -0
- fastmm_engine-0.2.0/include/fastmm/net/crypto.hpp +152 -0
- fastmm_engine-0.2.0/include/fastmm/net/datagram_source.hpp +59 -0
- fastmm_engine-0.2.0/include/fastmm/net/dns.hpp +56 -0
- fastmm_engine-0.2.0/include/fastmm/net/dpdk_datagram_source.hpp +224 -0
- fastmm_engine-0.2.0/include/fastmm/net/http_client.hpp +381 -0
- fastmm_engine-0.2.0/include/fastmm/net/http_message.hpp +190 -0
- fastmm_engine-0.2.0/include/fastmm/net/http_server.hpp +467 -0
- fastmm_engine-0.2.0/include/fastmm/net/io_result.hpp +74 -0
- fastmm_engine-0.2.0/include/fastmm/net/kernel_datagram_source.hpp +140 -0
- fastmm_engine-0.2.0/include/fastmm/net/memory_transport.hpp +90 -0
- fastmm_engine-0.2.0/include/fastmm/net/packet_ring.hpp +104 -0
- fastmm_engine-0.2.0/include/fastmm/net/reactor.hpp +187 -0
- fastmm_engine-0.2.0/include/fastmm/net/recv_buffer.hpp +94 -0
- fastmm_engine-0.2.0/include/fastmm/net/tcp_socket.hpp +112 -0
- fastmm_engine-0.2.0/include/fastmm/net/tls_stream.hpp +295 -0
- fastmm_engine-0.2.0/include/fastmm/net/udp_frame.hpp +182 -0
- fastmm_engine-0.2.0/include/fastmm/net/udp_socket.hpp +129 -0
- fastmm_engine-0.2.0/include/fastmm/net/url.hpp +199 -0
- fastmm_engine-0.2.0/include/fastmm/net/user_tcp.hpp +279 -0
- fastmm_engine-0.2.0/include/fastmm/net/wire_buffer.hpp +95 -0
- fastmm_engine-0.2.0/include/fastmm/net/ws_client.hpp +511 -0
- fastmm_engine-0.2.0/include/fastmm/net/ws_frame.hpp +326 -0
- fastmm_engine-0.2.0/include/fastmm/net/ws_server.hpp +316 -0
- fastmm_engine-0.2.0/include/fastmm/net/xdp_datagram_source.hpp +442 -0
- fastmm_engine-0.2.0/include/fastmm/net/xdp_program.hpp +207 -0
- fastmm_engine-0.2.0/include/fastmm/sim/event_scheduler.hpp +107 -0
- fastmm_engine-0.2.0/include/fastmm/sim/fee_model.hpp +112 -0
- fastmm_engine-0.2.0/include/fastmm/sim/itch/itch_publisher.hpp +156 -0
- fastmm_engine-0.2.0/include/fastmm/sim/itch/sim_itch_config.hpp +92 -0
- fastmm_engine-0.2.0/include/fastmm/sim/itch/sim_itch_server.hpp +119 -0
- fastmm_engine-0.2.0/include/fastmm/sim/journal_feed.hpp +172 -0
- fastmm_engine-0.2.0/include/fastmm/sim/latency_model.hpp +70 -0
- fastmm_engine-0.2.0/include/fastmm/sim/market_generator.hpp +108 -0
- fastmm_engine-0.2.0/include/fastmm/sim/matching_engine.hpp +227 -0
- fastmm_engine-0.2.0/include/fastmm/sim/md_aggregator.hpp +193 -0
- fastmm_engine-0.2.0/include/fastmm/sim/md_source.hpp +45 -0
- fastmm_engine-0.2.0/include/fastmm/sim/outbound_hash.hpp +58 -0
- fastmm_engine-0.2.0/include/fastmm/sim/param_schedule.hpp +115 -0
- fastmm_engine-0.2.0/include/fastmm/sim/queue_model.hpp +169 -0
- fastmm_engine-0.2.0/include/fastmm/sim/replay_transport.hpp +123 -0
- fastmm_engine-0.2.0/include/fastmm/sim/server/binance_json.hpp +282 -0
- fastmm_engine-0.2.0/include/fastmm/sim/server/request.hpp +88 -0
- fastmm_engine-0.2.0/include/fastmm/sim/server/sim_exchange_server.hpp +133 -0
- fastmm_engine-0.2.0/include/fastmm/sim/server/sim_server_config.hpp +114 -0
- fastmm_engine-0.2.0/include/fastmm/sim/server/venue_state.hpp +141 -0
- fastmm_engine-0.2.0/include/fastmm/sim/sha256.hpp +29 -0
- fastmm_engine-0.2.0/include/fastmm/sim/sim_backend.hpp +68 -0
- fastmm_engine-0.2.0/include/fastmm/sim/sim_book.hpp +157 -0
- fastmm_engine-0.2.0/include/fastmm/sim/sim_driver.hpp +314 -0
- fastmm_engine-0.2.0/include/fastmm/sim/sim_transport.hpp +250 -0
- fastmm_engine-0.2.0/include/fastmm/store/backend.hpp +111 -0
- fastmm_engine-0.2.0/include/fastmm/store/reader.hpp +79 -0
- fastmm_engine-0.2.0/include/fastmm/store/registry.hpp +72 -0
- fastmm_engine-0.2.0/include/fastmm/store/sqlite_store.hpp +27 -0
- fastmm_engine-0.2.0/include/fastmm/store/store_thread.hpp +65 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/avellaneda_stoikov.hpp +207 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/basic_mm.hpp +160 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/builtin.hpp +14 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/engine_factory.hpp +38 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/factories.hpp +8 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/factory_live.hpp +20 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/factory_replay.hpp +21 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/factory_sim.hpp +21 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/hooks.hpp +304 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/hot_abi.h +141 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/hot_params.hpp +347 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/hot_strategy.hpp +702 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/listing.hpp +30 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/module.hpp +108 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/options_mm.hpp +433 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/param_publisher.hpp +221 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/params.hpp +420 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/quoting.hpp +83 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/registry.hpp +150 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/slow_channel.hpp +465 -0
- fastmm_engine-0.2.0/include/fastmm/strategies/strategy.hpp +55 -0
- fastmm_engine-0.2.0/include/fastmm/strategy.hpp +27 -0
- fastmm_engine-0.2.0/include/fastmm/testing/strategy_harness.hpp +286 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_auth.hpp +114 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_depth_sync.hpp +163 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_error_map.hpp +123 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_md_feed.hpp +243 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_md_parser.hpp +77 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_order_encoder.hpp +228 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_rest_decoder.hpp +59 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_sbe_md_parser.hpp +260 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_user_parser.hpp +73 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/binance_venue.hpp +306 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance/generated/binance_stream_sbe.hpp +835 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_error_map.hpp +151 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_md_feed.hpp +201 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_md_parser.hpp +70 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_order_encoder.hpp +140 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_rest_decoder.hpp +74 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_user_parser.hpp +80 -0
- fastmm_engine-0.2.0/include/fastmm/venues/binance_usdm/binance_usdm_venue.hpp +308 -0
- fastmm_engine-0.2.0/include/fastmm/venues/blocking_http.hpp +65 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_auth.hpp +89 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_book_sync.hpp +153 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_error_map.hpp +97 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_md_feed.hpp +196 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_md_parser.hpp +91 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_order_encoder.hpp +182 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_private_parser.hpp +75 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_rest_decoder.hpp +36 -0
- fastmm_engine-0.2.0/include/fastmm/venues/bybit/bybit_venue.hpp +241 -0
- fastmm_engine-0.2.0/include/fastmm/venues/connection_slot.hpp +99 -0
- fastmm_engine-0.2.0/include/fastmm/venues/decimal.hpp +134 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_book_sync.hpp +171 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_credits.hpp +89 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_error_map.hpp +111 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_json.hpp +109 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_md_feed.hpp +238 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_md_parser.hpp +155 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_order_encoder.hpp +182 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_private_parser.hpp +124 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_rest_decoder.hpp +68 -0
- fastmm_engine-0.2.0/include/fastmm/venues/deribit/deribit_venue.hpp +249 -0
- fastmm_engine-0.2.0/include/fastmm/venues/error_action.hpp +71 -0
- fastmm_engine-0.2.0/include/fastmm/venues/event_sink.hpp +115 -0
- fastmm_engine-0.2.0/include/fastmm/venues/feed.hpp +107 -0
- fastmm_engine-0.2.0/include/fastmm/venues/json_writer.hpp +185 -0
- fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/nasdaq_itch_venue.hpp +381 -0
- fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/recovery_buffer.hpp +136 -0
- fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/tcp_link.hpp +100 -0
- fastmm_engine-0.2.0/include/fastmm/venues/nasdaq/user_tcp_link.hpp +113 -0
- fastmm_engine-0.2.0/include/fastmm/venues/order_commands.hpp +105 -0
- fastmm_engine-0.2.0/include/fastmm/venues/order_events.hpp +113 -0
- fastmm_engine-0.2.0/include/fastmm/venues/padded_json.hpp +34 -0
- fastmm_engine-0.2.0/include/fastmm/venues/rate_limiter.hpp +160 -0
- fastmm_engine-0.2.0/include/fastmm/venues/raw_recorder.hpp +67 -0
- fastmm_engine-0.2.0/include/fastmm/venues/request_id.hpp +34 -0
- fastmm_engine-0.2.0/include/fastmm/venues/rest_channel.hpp +170 -0
- fastmm_engine-0.2.0/include/fastmm/venues/symbology.hpp +139 -0
- fastmm_engine-0.2.0/include/fastmm/venues/venue.hpp +204 -0
- fastmm_engine-0.2.0/include/fastmm/venues/venue_factory.hpp +39 -0
- fastmm_engine-0.2.0/include/fastmm/venues/wire_latency.hpp +198 -0
- fastmm_engine-0.2.0/include/fastmm/version.hpp.in +14 -0
- fastmm_engine-0.2.0/mkdocs.yml +231 -0
- fastmm_engine-0.2.0/pyproject.toml +55 -0
- fastmm_engine-0.2.0/python/CMakeLists.txt +23 -0
- fastmm_engine-0.2.0/python/fastmm/__init__.py +131 -0
- fastmm_engine-0.2.0/python/fastmm/__main__.py +160 -0
- fastmm_engine-0.2.0/python/fastmm/_core.pyi +1254 -0
- fastmm_engine-0.2.0/python/fastmm/_fmj.py +186 -0
- fastmm_engine-0.2.0/python/fastmm/_hot/__init__.py +8 -0
- fastmm_engine-0.2.0/python/fastmm/_hot/abi.py +119 -0
- fastmm_engine-0.2.0/python/fastmm/_hot/compiler.py +494 -0
- fastmm_engine-0.2.0/python/fastmm/_hot/decl.py +368 -0
- fastmm_engine-0.2.0/python/fastmm/_hot/meta.py +120 -0
- fastmm_engine-0.2.0/python/fastmm/_install.py +3 -0
- fastmm_engine-0.2.0/python/fastmm/_scaffold.py +305 -0
- fastmm_engine-0.2.0/python/fastmm/_slow/__init__.py +3 -0
- fastmm_engine-0.2.0/python/fastmm/_slow/abi.py +95 -0
- fastmm_engine-0.2.0/python/fastmm/_slow/context.py +236 -0
- fastmm_engine-0.2.0/python/fastmm/_slow/decl.py +60 -0
- fastmm_engine-0.2.0/python/fastmm/_slow/publish.py +98 -0
- fastmm_engine-0.2.0/python/fastmm/_slow/replay.py +135 -0
- fastmm_engine-0.2.0/python/fastmm/_slow/runner.py +198 -0
- fastmm_engine-0.2.0/python/fastmm/data/__init__.py +19 -0
- fastmm_engine-0.2.0/python/fastmm/data/__main__.py +147 -0
- fastmm_engine-0.2.0/python/fastmm/data/binance.py +104 -0
- fastmm_engine-0.2.0/python/fastmm/data/cache.py +187 -0
- fastmm_engine-0.2.0/python/fastmm/data/rows.py +65 -0
- fastmm_engine-0.2.0/python/fastmm/data/tardis.py +92 -0
- fastmm_engine-0.2.0/python/fastmm/fx.py +230 -0
- fastmm_engine-0.2.0/python/fastmm/live.py +313 -0
- fastmm_engine-0.2.0/python/fastmm/py.typed +0 -0
- fastmm_engine-0.2.0/python/fastmm/report.py +1257 -0
- fastmm_engine-0.2.0/python/fastmm/results.py +217 -0
- fastmm_engine-0.2.0/python/fastmm/store.py +265 -0
- fastmm_engine-0.2.0/python/fastmm/strategy.py +643 -0
- fastmm_engine-0.2.0/python/live/CMakeLists.txt +28 -0
- fastmm_engine-0.2.0/python/live/exports.map +7 -0
- fastmm_engine-0.2.0/python/live/fastmm_live/__init__.py +31 -0
- fastmm_engine-0.2.0/python/live/pyproject.toml +43 -0
- fastmm_engine-0.2.0/python/live/src/module.cpp +168 -0
- fastmm_engine-0.2.0/python/live/src/self_test_pem.hpp.in +11 -0
- fastmm_engine-0.2.0/python/live/src/session.cpp +358 -0
- fastmm_engine-0.2.0/python/live/src/session.hpp +9 -0
- fastmm_engine-0.2.0/python/live/tests/live_strategies.py +212 -0
- fastmm_engine-0.2.0/python/live/tests/test_live.py +72 -0
- fastmm_engine-0.2.0/python/live/tests/test_run_live.py +496 -0
- fastmm_engine-0.2.0/python/src/bind_backtest.cpp +721 -0
- fastmm_engine-0.2.0/python/src/bind_book.cpp +193 -0
- fastmm_engine-0.2.0/python/src/bind_common.hpp +54 -0
- fastmm_engine-0.2.0/python/src/bind_config.cpp +416 -0
- fastmm_engine-0.2.0/python/src/bind_hot.cpp +414 -0
- fastmm_engine-0.2.0/python/src/bind_strategies.cpp +59 -0
- fastmm_engine-0.2.0/python/src/bind_strategy_api.cpp +1213 -0
- fastmm_engine-0.2.0/python/src/hot_program.hpp +104 -0
- fastmm_engine-0.2.0/python/src/module.cpp +85 -0
- fastmm_engine-0.2.0/python/src/py_strategy.hpp +140 -0
- fastmm_engine-0.2.0/python/src/slow_channel_py.hpp +228 -0
- fastmm_engine-0.2.0/python/tests/conftest.py +45 -0
- fastmm_engine-0.2.0/python/tests/test_backtest.py +325 -0
- fastmm_engine-0.2.0/python/tests/test_book.py +43 -0
- fastmm_engine-0.2.0/python/tests/test_config.py +90 -0
- fastmm_engine-0.2.0/python/tests/test_data.py +120 -0
- fastmm_engine-0.2.0/python/tests/test_hot.py +523 -0
- fastmm_engine-0.2.0/python/tests/test_init.py +49 -0
- fastmm_engine-0.2.0/python/tests/test_live_api.py +61 -0
- fastmm_engine-0.2.0/python/tests/test_logging.py +32 -0
- fastmm_engine-0.2.0/python/tests/test_packaging.py +9 -0
- fastmm_engine-0.2.0/python/tests/test_pandas.py +43 -0
- fastmm_engine-0.2.0/python/tests/test_report.py +97 -0
- fastmm_engine-0.2.0/python/tests/test_slow.py +566 -0
- fastmm_engine-0.2.0/python/tests/test_smoke.py +42 -0
- fastmm_engine-0.2.0/python/tests/test_store.py +187 -0
- fastmm_engine-0.2.0/python/tests/test_strategy.py +415 -0
- fastmm_engine-0.2.0/python/tests/test_strategy_errors.py +252 -0
- fastmm_engine-0.2.0/python/tests/test_strategy_parity.py +117 -0
- fastmm_engine-0.2.0/scripts/bench-2host.sh +193 -0
- fastmm_engine-0.2.0/scripts/bench-e2e.sh +205 -0
- fastmm_engine-0.2.0/scripts/bench-table.py +42 -0
- fastmm_engine-0.2.0/scripts/bench.sh +74 -0
- fastmm_engine-0.2.0/scripts/bootstrap.sh +82 -0
- fastmm_engine-0.2.0/scripts/build-dpdk.sh +43 -0
- fastmm_engine-0.2.0/scripts/build-pgo.sh +155 -0
- fastmm_engine-0.2.0/scripts/build.sh +7 -0
- fastmm_engine-0.2.0/scripts/ci-external-project.sh +93 -0
- fastmm_engine-0.2.0/scripts/docs/tutorial.sh +175 -0
- fastmm_engine-0.2.0/scripts/docs-serve.sh +66 -0
- fastmm_engine-0.2.0/scripts/format.sh +11 -0
- fastmm_engine-0.2.0/scripts/host-setup.sh +193 -0
- fastmm_engine-0.2.0/scripts/package-release.sh +89 -0
- fastmm_engine-0.2.0/scripts/run-sim.sh +126 -0
- fastmm_engine-0.2.0/scripts/test.sh +6 -0
- fastmm_engine-0.2.0/scripts/tidy.sh +12 -0
- fastmm_engine-0.2.0/scripts/wheels/build-openssl.sh +54 -0
- fastmm_engine-0.2.0/scripts/wheels/check-live-wheel.sh +43 -0
- fastmm_engine-0.2.0/scripts/xdp-test.sh +45 -0
- fastmm_engine-0.2.0/src/backtest/CMakeLists.txt +7 -0
- fastmm_engine-0.2.0/src/backtest/array_source.cpp +71 -0
- fastmm_engine-0.2.0/src/backtest/backtest_config.cpp +198 -0
- fastmm_engine-0.2.0/src/backtest/backtest_runner.cpp +355 -0
- fastmm_engine-0.2.0/src/backtest/binance_source.cpp +412 -0
- fastmm_engine-0.2.0/src/backtest/cli_backtest.cpp +253 -0
- fastmm_engine-0.2.0/src/backtest/cli_data.cpp +139 -0
- fastmm_engine-0.2.0/src/backtest/cli_replay.cpp +342 -0
- fastmm_engine-0.2.0/src/backtest/csv_fields.hpp +49 -0
- fastmm_engine-0.2.0/src/backtest/csv_source.cpp +162 -0
- fastmm_engine-0.2.0/src/backtest/data_registry.cpp +377 -0
- fastmm_engine-0.2.0/src/backtest/journal_source.cpp +64 -0
- fastmm_engine-0.2.0/src/backtest/metrics.cpp +322 -0
- fastmm_engine-0.2.0/src/backtest/replay.cpp +278 -0
- fastmm_engine-0.2.0/src/backtest/result.cpp +472 -0
- fastmm_engine-0.2.0/src/backtest/sweep.cpp +76 -0
- fastmm_engine-0.2.0/src/backtest/synthetic_source.cpp +94 -0
- fastmm_engine-0.2.0/src/backtest/tardis_source.cpp +149 -0
- fastmm_engine-0.2.0/src/codecs/CMakeLists.txt +10 -0
- fastmm_engine-0.2.0/src/codecs/codecs.cpp +10 -0
- fastmm_engine-0.2.0/src/codecs/fix/fix_decoder.cpp +455 -0
- fastmm_engine-0.2.0/src/codecs/fix/fix_encoder.cpp +162 -0
- fastmm_engine-0.2.0/src/codecs/fix/fix_framer.cpp +85 -0
- fastmm_engine-0.2.0/src/codecs/fix/fix_session.cpp +633 -0
- fastmm_engine-0.2.0/src/codecs/fix/fix_view.cpp +127 -0
- fastmm_engine-0.2.0/src/codecs/fix/message_store.cpp +63 -0
- fastmm_engine-0.2.0/src/codecs/itch/glimpse.cpp +29 -0
- fastmm_engine-0.2.0/src/codecs/itch/itch_decoder.cpp +300 -0
- fastmm_engine-0.2.0/src/codecs/itch/itch_encoder.cpp +239 -0
- fastmm_engine-0.2.0/src/codecs/itch/itch_l2_bridge.cpp +435 -0
- fastmm_engine-0.2.0/src/codecs/mdp3/mdp3_decoder.cpp +750 -0
- fastmm_engine-0.2.0/src/codecs/mdp3/mdp3_encoder.cpp +323 -0
- fastmm_engine-0.2.0/src/codecs/mdp3/mdp3_feed.cpp +370 -0
- fastmm_engine-0.2.0/src/codecs/moldudp/moldudp64.cpp +267 -0
- fastmm_engine-0.2.0/src/codecs/ouch/ouch42.cpp +649 -0
- fastmm_engine-0.2.0/src/codecs/ouch/ouch50.cpp +888 -0
- fastmm_engine-0.2.0/src/codecs/ouch/ouch_common.cpp +172 -0
- fastmm_engine-0.2.0/src/codecs/soupbin/soupbin.cpp +138 -0
- fastmm_engine-0.2.0/src/core/CMakeLists.txt +19 -0
- fastmm_engine-0.2.0/src/core/arena.cpp +48 -0
- fastmm_engine-0.2.0/src/core/config.cpp +799 -0
- fastmm_engine-0.2.0/src/core/crc32c.cpp +69 -0
- fastmm_engine-0.2.0/src/core/engine_runner.cpp +60 -0
- fastmm_engine-0.2.0/src/core/hot_array.cpp +51 -0
- fastmm_engine-0.2.0/src/core/instrument_loader.cpp +104 -0
- fastmm_engine-0.2.0/src/core/journal_file.cpp +525 -0
- fastmm_engine-0.2.0/src/core/latency_export.cpp +89 -0
- fastmm_engine-0.2.0/src/core/log_sink.cpp +281 -0
- fastmm_engine-0.2.0/src/core/session_state.cpp +163 -0
- fastmm_engine-0.2.0/src/core/status_prometheus.cpp +320 -0
- fastmm_engine-0.2.0/src/core/status_segment.cpp +624 -0
- fastmm_engine-0.2.0/src/core/thread_utils.cpp +52 -0
- fastmm_engine-0.2.0/src/core/time.cpp +157 -0
- fastmm_engine-0.2.0/src/core/version.cpp +16 -0
- fastmm_engine-0.2.0/src/dpdk/CMakeLists.txt +10 -0
- fastmm_engine-0.2.0/src/dpdk/dpdk_datagram_source.cpp +496 -0
- fastmm_engine-0.2.0/src/live/CMakeLists.txt +13 -0
- fastmm_engine-0.2.0/src/live/cli.cpp +268 -0
- fastmm_engine-0.2.0/src/live/session.cpp +1334 -0
- fastmm_engine-0.2.0/src/live/slow_watchdog.cpp +49 -0
- fastmm_engine-0.2.0/src/live/thread_affinity.cpp +54 -0
- fastmm_engine-0.2.0/src/net/CMakeLists.txt +11 -0
- fastmm_engine-0.2.0/src/net/ca_locations.cpp +83 -0
- fastmm_engine-0.2.0/src/net/connection.cpp +49 -0
- fastmm_engine-0.2.0/src/net/crypto.cpp +325 -0
- fastmm_engine-0.2.0/src/net/dns.cpp +73 -0
- fastmm_engine-0.2.0/src/net/dpdk_stub.cpp +52 -0
- fastmm_engine-0.2.0/src/net/http_client.cpp +198 -0
- fastmm_engine-0.2.0/src/net/io_uring_ring.cpp +160 -0
- fastmm_engine-0.2.0/src/net/io_uring_ring.hpp +94 -0
- fastmm_engine-0.2.0/src/net/io_uring_uapi.hpp +59 -0
- fastmm_engine-0.2.0/src/net/kernel_datagram_source.cpp +192 -0
- fastmm_engine-0.2.0/src/net/packet_ring.cpp +181 -0
- fastmm_engine-0.2.0/src/net/reactor.cpp +580 -0
- fastmm_engine-0.2.0/src/net/tcp_socket.cpp +242 -0
- fastmm_engine-0.2.0/src/net/tls_stream.cpp +319 -0
- fastmm_engine-0.2.0/src/net/udp_socket.cpp +257 -0
- fastmm_engine-0.2.0/src/net/user_tcp.cpp +993 -0
- fastmm_engine-0.2.0/src/net/ws_client.cpp +80 -0
- fastmm_engine-0.2.0/src/net/xdp_datagram_source.cpp +869 -0
- fastmm_engine-0.2.0/src/net/xdp_uapi.hpp +214 -0
- fastmm_engine-0.2.0/src/sim/CMakeLists.txt +47 -0
- fastmm_engine-0.2.0/src/sim/itch/feed.cpp +280 -0
- fastmm_engine-0.2.0/src/sim/itch/itch_publisher.cpp +192 -0
- fastmm_engine-0.2.0/src/sim/itch/sessions.cpp +532 -0
- fastmm_engine-0.2.0/src/sim/itch/sim_itch_config.cpp +238 -0
- fastmm_engine-0.2.0/src/sim/itch/sim_itch_impl.hpp +298 -0
- fastmm_engine-0.2.0/src/sim/itch/sim_itch_server.cpp +384 -0
- fastmm_engine-0.2.0/src/sim/market_generator.cpp +169 -0
- fastmm_engine-0.2.0/src/sim/matching_engine.cpp +386 -0
- fastmm_engine-0.2.0/src/sim/server/api_routes.cpp +410 -0
- fastmm_engine-0.2.0/src/sim/server/binance_json.cpp +636 -0
- fastmm_engine-0.2.0/src/sim/server/order_handlers.cpp +1076 -0
- fastmm_engine-0.2.0/src/sim/server/request.cpp +298 -0
- fastmm_engine-0.2.0/src/sim/server/server_impl.hpp +381 -0
- fastmm_engine-0.2.0/src/sim/server/sim_exchange_server.cpp +772 -0
- fastmm_engine-0.2.0/src/sim/server/sim_server_config.cpp +222 -0
- fastmm_engine-0.2.0/src/sim/server/venue_state.cpp +91 -0
- fastmm_engine-0.2.0/src/sim/sha256.cpp +185 -0
- fastmm_engine-0.2.0/src/sim/sim_transport.cpp +730 -0
- fastmm_engine-0.2.0/src/store/CMakeLists.txt +10 -0
- fastmm_engine-0.2.0/src/store/registry.cpp +60 -0
- fastmm_engine-0.2.0/src/store/sqlite_backend.cpp +538 -0
- fastmm_engine-0.2.0/src/store/sqlite_reader.cpp +347 -0
- fastmm_engine-0.2.0/src/store/sqlite_schema.cpp +427 -0
- fastmm_engine-0.2.0/src/store/sqlite_schema.hpp +44 -0
- fastmm_engine-0.2.0/src/store/store_thread.cpp +121 -0
- fastmm_engine-0.2.0/src/strategies/CMakeLists.txt +61 -0
- fastmm_engine-0.2.0/src/strategies/cli_modules.cpp +33 -0
- fastmm_engine-0.2.0/src/strategies/listing.cpp +138 -0
- fastmm_engine-0.2.0/src/venues/CMakeLists.txt +7 -0
- fastmm_engine-0.2.0/src/venues/binance/binance_md_parser.cpp +390 -0
- fastmm_engine-0.2.0/src/venues/binance/binance_order_encoder.cpp +605 -0
- fastmm_engine-0.2.0/src/venues/binance/binance_rest_decoder.cpp +130 -0
- fastmm_engine-0.2.0/src/venues/binance/binance_user_parser.cpp +323 -0
- fastmm_engine-0.2.0/src/venues/binance/binance_venue.cpp +1557 -0
- fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_md_parser.cpp +360 -0
- fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_order_encoder.cpp +343 -0
- fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_rest_decoder.cpp +180 -0
- fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_user_parser.cpp +312 -0
- fastmm_engine-0.2.0/src/venues/binance_usdm/binance_usdm_venue.cpp +1696 -0
- fastmm_engine-0.2.0/src/venues/blocking_http.cpp +129 -0
- fastmm_engine-0.2.0/src/venues/bybit/bybit_md_parser.cpp +378 -0
- fastmm_engine-0.2.0/src/venues/bybit/bybit_order_encoder.cpp +375 -0
- fastmm_engine-0.2.0/src/venues/bybit/bybit_private_parser.cpp +402 -0
- fastmm_engine-0.2.0/src/venues/bybit/bybit_rest_decoder.cpp +91 -0
- fastmm_engine-0.2.0/src/venues/bybit/bybit_venue.cpp +1247 -0
- fastmm_engine-0.2.0/src/venues/deribit/deribit_md_parser.cpp +503 -0
- fastmm_engine-0.2.0/src/venues/deribit/deribit_order_encoder.cpp +229 -0
- fastmm_engine-0.2.0/src/venues/deribit/deribit_private_parser.cpp +464 -0
- fastmm_engine-0.2.0/src/venues/deribit/deribit_rest_decoder.cpp +135 -0
- fastmm_engine-0.2.0/src/venues/deribit/deribit_venue.cpp +1286 -0
- fastmm_engine-0.2.0/src/venues/nasdaq/nasdaq_itch_venue.cpp +1382 -0
- fastmm_engine-0.2.0/src/venues/nasdaq/tcp_link.cpp +197 -0
- fastmm_engine-0.2.0/src/venues/nasdaq/user_tcp_link.cpp +214 -0
- fastmm_engine-0.2.0/src/venues/venue_factory.cpp +70 -0
- fastmm_engine-0.2.0/tests/CMakeLists.txt +479 -0
- fastmm_engine-0.2.0/tests/backtest/backtest_test_util.hpp +157 -0
- fastmm_engine-0.2.0/tests/backtest/data_registry_test.cpp +304 -0
- fastmm_engine-0.2.0/tests/backtest/golden_strategies_test.cpp +231 -0
- fastmm_engine-0.2.0/tests/backtest/markout_test.cpp +346 -0
- fastmm_engine-0.2.0/tests/backtest/metrics_test.cpp +204 -0
- fastmm_engine-0.2.0/tests/backtest/param_update_replay_test.cpp +159 -0
- fastmm_engine-0.2.0/tests/backtest/replay_determinism_test.cpp +226 -0
- fastmm_engine-0.2.0/tests/backtest/runner_test.cpp +266 -0
- fastmm_engine-0.2.0/tests/backtest/sources_test.cpp +236 -0
- fastmm_engine-0.2.0/tests/cli/run_cli.cmake +36 -0
- fastmm_engine-0.2.0/tests/cmake/find_live_without_net/CMakeLists.txt +5 -0
- fastmm_engine-0.2.0/tests/codecs/codec_concepts_test.cpp +62 -0
- fastmm_engine-0.2.0/tests/codecs/fix_builder_test.cpp +88 -0
- fastmm_engine-0.2.0/tests/codecs/fix_codec_test.cpp +335 -0
- fastmm_engine-0.2.0/tests/codecs/fix_framer_test.cpp +114 -0
- fastmm_engine-0.2.0/tests/codecs/fix_session_test.cpp +396 -0
- fastmm_engine-0.2.0/tests/codecs/fix_sim_test.cpp +562 -0
- fastmm_engine-0.2.0/tests/codecs/fix_test_util.hpp +261 -0
- fastmm_engine-0.2.0/tests/codecs/fix_view_test.cpp +190 -0
- fastmm_engine-0.2.0/tests/codecs/glimpse_test.cpp +157 -0
- fastmm_engine-0.2.0/tests/codecs/itch_codec_test.cpp +457 -0
- fastmm_engine-0.2.0/tests/codecs/itch_l2_bridge_test.cpp +589 -0
- fastmm_engine-0.2.0/tests/codecs/itch_sim_property_test.cpp +217 -0
- fastmm_engine-0.2.0/tests/codecs/itch_sim_util.hpp +197 -0
- fastmm_engine-0.2.0/tests/codecs/mdp3_decoder_test.cpp +456 -0
- fastmm_engine-0.2.0/tests/codecs/mdp3_feed_test.cpp +370 -0
- fastmm_engine-0.2.0/tests/codecs/mdp3_sim_test.cpp +434 -0
- fastmm_engine-0.2.0/tests/codecs/mdp3_test_util.hpp +175 -0
- fastmm_engine-0.2.0/tests/codecs/moldudp_loss_test.cpp +228 -0
- fastmm_engine-0.2.0/tests/codecs/moldudp_test.cpp +648 -0
- fastmm_engine-0.2.0/tests/codecs/nasdaq_test_util.hpp +131 -0
- fastmm_engine-0.2.0/tests/codecs/ouch_42_test.cpp +303 -0
- fastmm_engine-0.2.0/tests/codecs/ouch_50_test.cpp +350 -0
- fastmm_engine-0.2.0/tests/codecs/ouch_session_sim_test.cpp +608 -0
- fastmm_engine-0.2.0/tests/codecs/sbe_schema_test.cpp +312 -0
- fastmm_engine-0.2.0/tests/codecs/soupbin_test.cpp +365 -0
- fastmm_engine-0.2.0/tests/compile_fail/ambiguous_bases.cpp +21 -0
- fastmm_engine-0.2.0/tests/compile_fail/data_member_hook_name.cpp +16 -0
- fastmm_engine-0.2.0/tests/compile_fail/literal_bps_five_decimals.cpp +15 -0
- fastmm_engine-0.2.0/tests/compile_fail/literal_qty_nine_decimals.cpp +14 -0
- fastmm_engine-0.2.0/tests/compile_fail/missing_factory_instantiation.cpp +26 -0
- fastmm_engine-0.2.0/tests/compile_fail/near_miss_name.cpp +17 -0
- fastmm_engine-0.2.0/tests/compile_fail/non_void_return.cpp +18 -0
- fastmm_engine-0.2.0/tests/compile_fail/private_hook.cpp +16 -0
- fastmm_engine-0.2.0/tests/compile_fail/run_case.cmake +17 -0
- fastmm_engine-0.2.0/tests/compile_fail/swapped_fill_arguments.cpp +16 -0
- fastmm_engine-0.2.0/tests/compile_fail/wrong_trade_signature.cpp +34 -0
- fastmm_engine-0.2.0/tests/config/shipped_configs_test.cpp +156 -0
- fastmm_engine-0.2.0/tests/core/arena_test.cpp +33 -0
- fastmm_engine-0.2.0/tests/core/black76_test.cpp +158 -0
- fastmm_engine-0.2.0/tests/core/book_syncer_test.cpp +215 -0
- fastmm_engine-0.2.0/tests/core/config_effective_test.cpp +76 -0
- fastmm_engine-0.2.0/tests/core/config_test.cpp +293 -0
- fastmm_engine-0.2.0/tests/core/containers_test.cpp +233 -0
- fastmm_engine-0.2.0/tests/core/crc32c_test.cpp +36 -0
- fastmm_engine-0.2.0/tests/core/engine_hooks_test.cpp +481 -0
- fastmm_engine-0.2.0/tests/core/engine_test.cpp +931 -0
- fastmm_engine-0.2.0/tests/core/engine_venue_kill_test.cpp +297 -0
- fastmm_engine-0.2.0/tests/core/fixed_point_test.cpp +182 -0
- fastmm_engine-0.2.0/tests/core/instrument_test.cpp +130 -0
- fastmm_engine-0.2.0/tests/core/journal_durability_test.cpp +241 -0
- fastmm_engine-0.2.0/tests/core/journal_test.cpp +210 -0
- fastmm_engine-0.2.0/tests/core/journal_v2_test.cpp +248 -0
- fastmm_engine-0.2.0/tests/core/l2_book_test.cpp +229 -0
- fastmm_engine-0.2.0/tests/core/l3_book_test.cpp +307 -0
- fastmm_engine-0.2.0/tests/core/latency_test.cpp +85 -0
- fastmm_engine-0.2.0/tests/core/log_test.cpp +163 -0
- fastmm_engine-0.2.0/tests/core/messages_test.cpp +47 -0
- fastmm_engine-0.2.0/tests/core/oms_test.cpp +639 -0
- fastmm_engine-0.2.0/tests/core/option_ticker_engine_test.cpp +119 -0
- fastmm_engine-0.2.0/tests/core/param_update_test.cpp +426 -0
- fastmm_engine-0.2.0/tests/core/position_test.cpp +164 -0
- fastmm_engine-0.2.0/tests/core/quote_manager_test.cpp +448 -0
- fastmm_engine-0.2.0/tests/core/record_stream_test.cpp +283 -0
- fastmm_engine-0.2.0/tests/core/reject_counters_test.cpp +55 -0
- fastmm_engine-0.2.0/tests/core/risk_test.cpp +207 -0
- fastmm_engine-0.2.0/tests/core/rng_test.cpp +42 -0
- fastmm_engine-0.2.0/tests/core/seqlock_test.cpp +64 -0
- fastmm_engine-0.2.0/tests/core/session_state_test.cpp +119 -0
- fastmm_engine-0.2.0/tests/core/smoke_test.cpp +9 -0
- fastmm_engine-0.2.0/tests/core/spsc_test.cpp +157 -0
- fastmm_engine-0.2.0/tests/core/status_prometheus_test.cpp +121 -0
- fastmm_engine-0.2.0/tests/core/status_segment_test.cpp +316 -0
- fastmm_engine-0.2.0/tests/core/time_test.cpp +86 -0
- fastmm_engine-0.2.0/tests/core/timer_wheel_test.cpp +70 -0
- fastmm_engine-0.2.0/tests/core/tsc_refresh_test.cpp +435 -0
- fastmm_engine-0.2.0/tests/core/types_test.cpp +246 -0
- fastmm_engine-0.2.0/tests/docs/strategy_api_doc_test.cpp +320 -0
- fastmm_engine-0.2.0/tests/dpdk/dpdk_source_test.cpp +276 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/book_ticker.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/book_ticker_malformed.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/depth_snapshot.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/depth_update.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/depth_update_100.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/depth_update_20.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/depth_update_malformed.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ed25519-test-private.pem +3 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ed25519-test-public.pem +3 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/error_rest.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/exchange_info.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_canceled.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_expired.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_malformed.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_new.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_rejected.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/exec_report_trade.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/fixtures.meta.json +19 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/listen_key.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/open_orders.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/outbound_account_position.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/raw_md_stream.jsonl +23 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/sbe/best_bid_ask.hex +10 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/sbe/depth_diff.hex +14 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/sbe/depth_snapshot20.hex +12 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/sbe/make_fixtures.py +112 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/sbe/trades.hex +13 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/server_time.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/trade.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/trade_unknown_symbol.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/truncated.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_cancel_replace_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_error.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_error_rate_limit.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_error_timestamp.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_open_orders.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_order_cancel_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_order_place_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_session_logon_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance/ws_api_user_stream_subscribe_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/account_update.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/agg_trade.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/book_ticker.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/depth_snapshot.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/depth_update.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/exchange_info.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/fixtures.meta.json +16 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/listen_key_expired.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_canceled.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_expired.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_new.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/order_update_trade.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/position_risk.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/raw_md_stream.jsonl +400 -0
- fastmm_engine-0.2.0/tests/fixtures/binance_usdm/server_time.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/auth_error.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/auth_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/fixtures.meta.json +23 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/instruments_info.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook1_snapshot.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_delta.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_delta_u1.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_malformed.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/orderbook50_snapshot.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/pong.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_auth_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_execution.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_cancelled.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_filled.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_new.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_order_rejected.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_wallet.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/private_wallet_borrow.json +42 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/public_trade.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/public_trade_unknown_symbol.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/raw_md_stream.jsonl +43 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/rest_error.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/rest_open_orders.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/server_time.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/subscribe_error.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/subscribe_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/trade_cancel_unknown.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/trade_create_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/trade_create_reject.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/bybit/trade_rate_limited.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/cme/admin_mixed.hex +13 -0
- fastmm_engine-0.2.0/tests/fixtures/cme/book46_two_levels.hex +13 -0
- fastmm_engine-0.2.0/tests/fixtures/cme/make_fixtures.py +212 -0
- fastmm_engine-0.2.0/tests/fixtures/cme/sbe_decoding_example_template50.hex +18 -0
- fastmm_engine-0.2.0/tests/fixtures/cme/secdef54_esz6.hex +27 -0
- fastmm_engine-0.2.0/tests/fixtures/cme/trade48_buy_aggressor.hex +13 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/auth_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/book_grouped_ignored.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/book_option_change.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/book_option_snapshot.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_change_1.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_change_2.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_change_gap.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/book_perp_snapshot.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/buy_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/cancel_all_by_instrument_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/cancel_by_label_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/cancel_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/edit_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/fixtures.meta.json +45 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/get_instruments_future.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/get_instruments_option.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/get_time.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/heartbeat_interval_too_small.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/heartbeat_test_request.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/open_orders.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/post_only_reject.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/private_subscribe_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/raw_option_stream.jsonl +68 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/rpc_invalid_credentials.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/rpc_invalid_params.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/rpc_unauthorized.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/set_heartbeat_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/string_id_echo.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/subscribe_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/subscribe_partial.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/test_ok.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/ticker_option.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/ticker_perp.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/trades_perp.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_cancelled.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_filled.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_foreign_label.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/user_orders_open.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/deribit/user_trades.json +1 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/cancel_reject.fix +4 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_canceled.fix +3 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_expired.fix +2 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_fill.fix +4 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_new.fix +2 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_pending_new.fix +2 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_rejected.fix +2 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/exec_report_replaced.fix +2 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/md_incremental.fix +4 -0
- fastmm_engine-0.2.0/tests/fixtures/fix/md_snapshot.fix +3 -0
- fastmm_engine-0.2.0/tests/fixtures/journals/sample_1000.fmj +0 -0
- fastmm_engine-0.2.0/tests/fixtures/journals/sample_1000.sha256 +1 -0
- fastmm_engine-0.2.0/tests/fixtures/nasdaq/generate_fixtures.py +249 -0
- fastmm_engine-0.2.0/tests/fixtures/nasdaq/itch50_messages.hex +25 -0
- fastmm_engine-0.2.0/tests/fixtures/nasdaq/moldudp64_packets.hex +6 -0
- fastmm_engine-0.2.0/tests/fixtures/nasdaq/ouch42_messages.hex +20 -0
- fastmm_engine-0.2.0/tests/fixtures/nasdaq/ouch50_messages.hex +21 -0
- fastmm_engine-0.2.0/tests/fixtures/nasdaq/soupbin_packets.hex +13 -0
- fastmm_engine-0.2.0/tests/fixtures/tls/cert.pem +11 -0
- fastmm_engine-0.2.0/tests/fixtures/tls/key.pem +5 -0
- fastmm_engine-0.2.0/tests/hotpath/codecs_fix_noalloc_test.cpp +216 -0
- fastmm_engine-0.2.0/tests/hotpath/codecs_mdp3_noalloc_test.cpp +121 -0
- fastmm_engine-0.2.0/tests/hotpath/codecs_nasdaq_noalloc_test.cpp +310 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_datagram_test.cpp +67 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_hot_test.cpp +235 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_options_test.cpp +83 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_reactor_test.cpp +111 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_sim_test.cpp +68 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_smoke_test.cpp +28 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_store_test.cpp +159 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_test.cpp +306 -0
- fastmm_engine-0.2.0/tests/hotpath/noalloc_wire_latency_test.cpp +71 -0
- fastmm_engine-0.2.0/tests/hotpath/venues_noalloc_test.cpp +340 -0
- fastmm_engine-0.2.0/tests/integration/conformance_test.cpp +647 -0
- fastmm_engine-0.2.0/tests/integration/e2e_test.cpp +172 -0
- fastmm_engine-0.2.0/tests/integration/integration_util.hpp +407 -0
- fastmm_engine-0.2.0/tests/integration/kill_switch_test.cpp +177 -0
- fastmm_engine-0.2.0/tests/integration/live_replay_test.cpp +119 -0
- fastmm_engine-0.2.0/tests/integration/live_session_test.cpp +387 -0
- fastmm_engine-0.2.0/tests/integration/nasdaq_itch_venue_test.cpp +536 -0
- fastmm_engine-0.2.0/tests/integration/sim_itch_test.cpp +634 -0
- fastmm_engine-0.2.0/tests/integration/single_thread_test.cpp +146 -0
- fastmm_engine-0.2.0/tests/integration/store_restart_test.cpp +168 -0
- fastmm_engine-0.2.0/tests/modules/apps/backtest_main.cpp +7 -0
- fastmm_engine-0.2.0/tests/modules/apps/conflict_main.cpp +9 -0
- fastmm_engine-0.2.0/tests/modules/apps/live_main.cpp +7 -0
- fastmm_engine-0.2.0/tests/modules/module/shadow_register.cpp +9 -0
- fastmm_engine-0.2.0/tests/modules/module/shadow_sim.cpp +5 -0
- fastmm_engine-0.2.0/tests/modules/module/strategies.cpp +9 -0
- fastmm_engine-0.2.0/tests/modules/module/strategies.hpp +16 -0
- fastmm_engine-0.2.0/tests/modules/module/test_module_mm.hpp +41 -0
- fastmm_engine-0.2.0/tests/modules/module_test.cpp +99 -0
- fastmm_engine-0.2.0/tests/net/backoff_test.cpp +62 -0
- fastmm_engine-0.2.0/tests/net/buffers_test.cpp +169 -0
- fastmm_engine-0.2.0/tests/net/ca_locations_test.cpp +186 -0
- fastmm_engine-0.2.0/tests/net/connection_test.cpp +315 -0
- fastmm_engine-0.2.0/tests/net/crypto_test.cpp +180 -0
- fastmm_engine-0.2.0/tests/net/dns_test.cpp +70 -0
- fastmm_engine-0.2.0/tests/net/http_test.cpp +436 -0
- fastmm_engine-0.2.0/tests/net/net_test_util.hpp +72 -0
- fastmm_engine-0.2.0/tests/net/netns.hpp +80 -0
- fastmm_engine-0.2.0/tests/net/netns_test_util.hpp +84 -0
- fastmm_engine-0.2.0/tests/net/reactor_test.cpp +707 -0
- fastmm_engine-0.2.0/tests/net/smoke_test.cpp +6 -0
- fastmm_engine-0.2.0/tests/net/tcp_socket_test.cpp +126 -0
- fastmm_engine-0.2.0/tests/net/tls_stream_test.cpp +332 -0
- fastmm_engine-0.2.0/tests/net/udp_test.cpp +434 -0
- fastmm_engine-0.2.0/tests/net/url_test.cpp +108 -0
- fastmm_engine-0.2.0/tests/net/user_tcp_test.cpp +512 -0
- fastmm_engine-0.2.0/tests/net/user_tcp_test_util.hpp +224 -0
- fastmm_engine-0.2.0/tests/net/user_tcp_veth_test.cpp +248 -0
- fastmm_engine-0.2.0/tests/net/ws_client_test.cpp +360 -0
- fastmm_engine-0.2.0/tests/net/ws_frame_test.cpp +371 -0
- fastmm_engine-0.2.0/tests/sim/generator_test.cpp +109 -0
- fastmm_engine-0.2.0/tests/sim/journal_feed_test.cpp +193 -0
- fastmm_engine-0.2.0/tests/sim/matching_property_test.cpp +213 -0
- fastmm_engine-0.2.0/tests/sim/matching_test.cpp +372 -0
- fastmm_engine-0.2.0/tests/sim/models_test.cpp +292 -0
- fastmm_engine-0.2.0/tests/sim/sim_run_test.cpp +289 -0
- fastmm_engine-0.2.0/tests/sim/transport_drop_test.cpp +168 -0
- fastmm_engine-0.2.0/tests/store/crash_test.cpp +156 -0
- fastmm_engine-0.2.0/tests/store/migration_test.cpp +193 -0
- fastmm_engine-0.2.0/tests/store/sqlite_store_test.cpp +359 -0
- fastmm_engine-0.2.0/tests/store/store_test_util.hpp +169 -0
- fastmm_engine-0.2.0/tests/strategies/avellaneda_stoikov_test.cpp +99 -0
- fastmm_engine-0.2.0/tests/strategies/basic_mm_test.cpp +264 -0
- fastmm_engine-0.2.0/tests/strategies/hooks_test.cpp +140 -0
- fastmm_engine-0.2.0/tests/strategies/hot_params_test.cpp +226 -0
- fastmm_engine-0.2.0/tests/strategies/hot_strategy_test.cpp +221 -0
- fastmm_engine-0.2.0/tests/strategies/options_mm_test.cpp +364 -0
- fastmm_engine-0.2.0/tests/strategies/param_age_test.cpp +104 -0
- fastmm_engine-0.2.0/tests/strategies/params_test.cpp +228 -0
- fastmm_engine-0.2.0/tests/strategies/quoting_test.cpp +178 -0
- fastmm_engine-0.2.0/tests/strategies/registry_test.cpp +111 -0
- fastmm_engine-0.2.0/tests/strategies/slow_channel_test.cpp +176 -0
- fastmm_engine-0.2.0/tests/strategies/strategy_harness_test.cpp +88 -0
- fastmm_engine-0.2.0/tests/support/alloc_counter.cpp +104 -0
- fastmm_engine-0.2.0/tests/support/alloc_counter.hpp +31 -0
- fastmm_engine-0.2.0/tests/support/doctest_main.cpp +8 -0
- fastmm_engine-0.2.0/tests/support/exit_codes_doc.py +69 -0
- fastmm_engine-0.2.0/tests/support/fastmm_top_messages.py +66 -0
- fastmm_engine-0.2.0/tests/support/test_support.hpp +32 -0
- fastmm_engine-0.2.0/tests/venues/binance_depth_sync_test.cpp +151 -0
- fastmm_engine-0.2.0/tests/venues/binance_ed25519_test.cpp +224 -0
- fastmm_engine-0.2.0/tests/venues/binance_md_parser_test.cpp +200 -0
- fastmm_engine-0.2.0/tests/venues/binance_order_encoder_test.cpp +430 -0
- fastmm_engine-0.2.0/tests/venues/binance_sbe_md_test.cpp +490 -0
- fastmm_engine-0.2.0/tests/venues/binance_usdm_depth_sync_test.cpp +125 -0
- fastmm_engine-0.2.0/tests/venues/binance_usdm_md_parser_test.cpp +223 -0
- fastmm_engine-0.2.0/tests/venues/binance_usdm_order_encoder_test.cpp +296 -0
- fastmm_engine-0.2.0/tests/venues/binance_usdm_user_parser_test.cpp +179 -0
- fastmm_engine-0.2.0/tests/venues/binance_usdm_venue_test.cpp +604 -0
- fastmm_engine-0.2.0/tests/venues/binance_user_parser_test.cpp +206 -0
- fastmm_engine-0.2.0/tests/venues/binance_venue_test.cpp +436 -0
- fastmm_engine-0.2.0/tests/venues/bybit_book_sync_test.cpp +107 -0
- fastmm_engine-0.2.0/tests/venues/bybit_md_parser_test.cpp +198 -0
- fastmm_engine-0.2.0/tests/venues/bybit_order_encoder_test.cpp +244 -0
- fastmm_engine-0.2.0/tests/venues/bybit_private_parser_test.cpp +117 -0
- fastmm_engine-0.2.0/tests/venues/bybit_venue_test.cpp +571 -0
- fastmm_engine-0.2.0/tests/venues/decimal_test.cpp +49 -0
- fastmm_engine-0.2.0/tests/venues/deribit_book_sync_test.cpp +155 -0
- fastmm_engine-0.2.0/tests/venues/deribit_md_parser_test.cpp +390 -0
- fastmm_engine-0.2.0/tests/venues/deribit_order_encoder_test.cpp +262 -0
- fastmm_engine-0.2.0/tests/venues/deribit_private_parser_test.cpp +224 -0
- fastmm_engine-0.2.0/tests/venues/deribit_venue_test.cpp +536 -0
- fastmm_engine-0.2.0/tests/venues/event_sink_test.cpp +70 -0
- fastmm_engine-0.2.0/tests/venues/fake_venue_util.hpp +203 -0
- fastmm_engine-0.2.0/tests/venues/json_writer_test.cpp +117 -0
- fastmm_engine-0.2.0/tests/venues/live_binance_test.cpp +133 -0
- fastmm_engine-0.2.0/tests/venues/live_binance_usdm_test.cpp +134 -0
- fastmm_engine-0.2.0/tests/venues/live_bybit_test.cpp +116 -0
- fastmm_engine-0.2.0/tests/venues/live_deribit_test.cpp +189 -0
- fastmm_engine-0.2.0/tests/venues/live_test_util.hpp +43 -0
- fastmm_engine-0.2.0/tests/venues/nasdaq_itch_config_test.cpp +273 -0
- fastmm_engine-0.2.0/tests/venues/rate_limiter_test.cpp +66 -0
- fastmm_engine-0.2.0/tests/venues/smoke_test.cpp +4 -0
- fastmm_engine-0.2.0/tests/venues/symbology_test.cpp +62 -0
- fastmm_engine-0.2.0/tests/venues/venue_test_util.hpp +89 -0
- fastmm_engine-0.2.0/tests/xdp/bpf_interp.hpp +330 -0
- fastmm_engine-0.2.0/tests/xdp/xdp_privileged_test.cpp +694 -0
- fastmm_engine-0.2.0/tests/xdp/xdp_test_util.hpp +281 -0
- fastmm_engine-0.2.0/tests/xdp/xdp_unit_test.cpp +570 -0
- fastmm_engine-0.2.0/tools/bench_compare.py +38 -0
- fastmm_engine-0.2.0/tools/bench_table.py +164 -0
- fastmm_engine-0.2.0/tools/check_budgets.py +97 -0
- fastmm_engine-0.2.0/tools/doc_snippets.py +154 -0
- fastmm_engine-0.2.0/tools/docs_cli_help.py +72 -0
- fastmm_engine-0.2.0/tools/docs_config_ref.py +150 -0
- fastmm_engine-0.2.0/tools/docs_links.py +138 -0
- fastmm_engine-0.2.0/tools/docs_md.py +99 -0
- fastmm_engine-0.2.0/tools/doxygen_filter.py +128 -0
- fastmm_engine-0.2.0/tools/gen_synthetic_data.py +174 -0
- fastmm_engine-0.2.0/tools/griffe_fastmm.py +30 -0
- fastmm_engine-0.2.0/tools/journal_dump.py +379 -0
- fastmm_engine-0.2.0/tools/mkdocs_hooks.py +239 -0
- fastmm_engine-0.2.0/tools/pnl_report.py +556 -0
- fastmm_engine-0.2.0/tools/report.py +38 -0
- fastmm_engine-0.2.0/tools/sbe/binance_spot_stream_1_0.xml +117 -0
- fastmm_engine-0.2.0/tools/sbe/mdp3_templates_subset.xml +447 -0
- 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,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
|