All notable changes to gap-mm are documented here.
Initial public release.
TradingNode(Rust/PyO3): Bybit public WebSocket streaming for spot and linear perp markets, L2 order book via OrderBook-rs, gap-probability calculation.ExecutionNode(Rust/PyO3): Bybit REST v5 OMS with dual-state order tracking, amend-preferred reconciliation, private WebSocket fill listener, position tracking with realized P&L.gap_mm.engine(Python/Numba): JIT-compiledencode_signal,calculate_quotes_fast,calculate_pnl_fast,check_signal_correct.gap_mm.live.LiveTradingEngine: full market-making bot combining both engines.python -m gap_mmCLI entrypoint.examples/minimal_stream.py: safe streaming demo (no orders).- Unit tests:
encode_signal,calculate_quotes_fast,calculate_pnl_fast,check_signal_correct. - Integration tests: reconcile with mocked Bybit REST, gap-signal pipeline.
- Rust tests:
calculate_gap_probabilitywith synthetic order books, tick-size parametrization. - GitHub Actions CI: Python 3.12/3.13, ubuntu/macos/windows, pytest + cargo test + ruff + clippy.
gap_prob_resistance_up(formerlygap_prob_up): renamed to accurately reflect contrarian semantics — high value means resistance above, not probability of upward move.- Tick size in
calculate_gap_probabilityis now parametric (tick_sizefield onOrderBookState, threaded throughstart_stream). Previously hardcoded to 0.10, breaking non-BTC symbols. - Removed misleading comment in
encode_signalthat contradicted the implemented contrarian mapping. - Removed stale copy-paste
print("✓ Engines initialized")insideon_fillcallback.