Release 0.9.9

2024-01-28

This release has breaking API changes primarily driven by adding a margin mode to various order execution messages. Some fields were renamed at the same time (mostly to clean up a long standing readability issue).

Furthermore, order management will now verify the precision of all prices and quantities. This may also break existing use cases.

Other changes mostly focused on

  • roq-journal was added to support a low latency persistence solution for order attributes. The design document can be found here.

  • roq-position-manager was added to support zero-latency gateway portfolio updates. The design document can be found here.

    Note

    The position manager is currently WORK IN PROGRESS.

  • roq-fix-client-template was added to demonstrate

    • FIX client session management

    • FIX message encoding

    • Request latency

    • Prometheus metrics

API Changes

OrderAck

Warning

BREAKING CHANGE

Some struct members have been renamed

  • OrderAck.request_type (from OrderAck.type)

  • OrderAck.request_status (from OrderAck.status)

OrderUpdate

Warning

BREAKING CHANGE

Some struct members have been renamed

  • OrderUpdate.order_status (from OrderUpdate.status)

OMS

Warning

BREAKING CHANGE

The user is now required to

  • round quantity and max_show_quantity to match min_trade_vol from ReferenceData, and

  • round price and stop_price to match tick_size from ReferenceData.

Important

Gateways will not allow OMS requests to be forwarded to exchange if

  • reference data has not yet been received, or

  • any quantities or prices can not be validated against precision indicated by reference data.

MarginMode

Several structs have been extended with MarginMode, in particular

  • CreateOrder.margin_mode

  • OrderAck.margin_mode

  • OrderUpdate.margin_mode

  • TradeUpdate.margin_mode

  • PositionUpdate.margin_mode

  • FundsUpdate.margin_mode

Warning

BREAKING CHANGE

Important

The FundsUpdate and PositionUpdate structs events now includes an extra key (the margin mode) which means that you can potentially receive multiple updates for the same currency or symbol.

clang 17

Please refer to the knowledge base if you’re building for macOS. The short version is that you will now have to add -D_LIBCPP_DISABLE_AVAILABILITY to CPPFLAGS.

You can use roq-scripts to configure your development environment.

CHANGELOG

Milestone on GitHub.

Fixed

  • Errors on make, mac os basic_format_parse_context<char> is unavailable (API) (#436).

  • OrderUpdate.client_order_id was not populated during download (Binance Futures) (#435).

  • WS API did not correctly encode the wider order_id into the request id (Binance) (#427).

  • Invalid OrdStatus <39> for OrderCancelReject <9> (FIX Bridge) (#426).

  • Shared memory object failed to create on macOS (Server) (#424).

Changed

  • Support TradeSummary.side (FIX Bridge) (#434).

  • OMS validate quantity and price against reference data (Server) (#432).

  • Added MarginMode to FundsUpdate and PositionUpdate (API) (#430).

  • Download trades should use different lookback after restart vs reconnect (Server) (#428).

  • Client’s Logon password now being validated (FIX Bridge) (#425).

  • Support ModifyOrder (Binance Futures) (#423).

  • Validate ClOrdID (FIX Bridge) (#422).

Added

Removed

Other