roq-binance-futures#

$ mamba install \
      --channel https://roq-trading.com/conda/stable \
      roq-binance-futures
$ mamba install \
      --channel https://roq-trading.com/conda/unstable \
      roq-binance-futures

roq-binance-futures#

$ roq-binance-futures [FLAGS]

Description#

roq-binance-futures is a gateway

Supports#

Products

Spot

Futures

Options

Combos

Market Data

Reference Data

Market Status

Top of Book

Market by Price

Market by Order

Trade Summary

Statistics

Order Management

Create

Modify

(✓)

Cancel

Cancel All

Auto-Cancel

(✓)

Account Management

Positions

Funds

Note

  • Modify and Auto-Cancel not possible with PAPI.

Flags#

$ roq-binance-futures --help
--exchange (binance-futures)

Exchange identifier

--api (fapi)

API (fapi or dapi)

--ws_api (false)

Use WebSocket API?

--rest_uri (https://testnet.binancefuture.com)

Exchange end-point

--rest_host

Host (when URI is an IP address)

--rest_pm_uri

Exchange end-point (portfolio margin)

--rest_pm_host

Host (when URI is an IP address)

--rest_proxy

Proxy end-point

--rest_ping_freq (5s)

Ping frequency

--rest_ping_path (/v1/time)

Ping path

--rest_request_timeout (30s)

Request timeout

--rest_listen_key_refresh (1800s)

Listen key refresh period

--rest_order_recv_window (5000ms)

Receive window (please refer to exchange documentation)

--rest_cancel_on_disconnect (false)

Auto-cancel orders on disconnect?

--rest_order_countdown (30s)

Auto-cancel countdown period

--rest_terminate_on_403 (false)

(TEST) Trigger program termination after receiving a 403 response code?

--rest_back_off_delay (300s)

(TEST) Time to wait before retrying a rejected request

--ws_uri (wss://stream.binancefuture.com)

Exchange end-point

--ws_host

Host (when URI is an IP address)

--ws_pm_uri

Exchange end-point (portfolio margin)

--ws_pm_host

Host (when URI is an IP address)

--ws_ping_freq (5s)

Ping frequency

--ws_max_subscriptions_per_stream (40)

Maximum number of symbols per connection

--ws_subscribe_depth_levels (1000)

Depth levels to subscribe

--ws_subscribe_depth_freq (100ms)

Depth update frequency

--ws_mbp_request_delay (10s)

Delay before requesting depth snapshot

--ws_mbp_request_max_retries (0)

Maximum number of retries before giving up

--ws_enable_secondary (false)

Create secondary market data connection?

--ws_api_network_interfaces

Network interfaces

--ws_api_uri (wss://ws-api.binance.com/ws-api/v3)

Exchange end-point

--ws_api_host

Host (when URI is an IP address)

--ws_api_ping_freq (5s)

Ping frequency

--download_trades_lookback (300s)

Lookback period when downloading trades (following a disconnect)

--download_trades_lookback_on_restart

Lookback period when downloading trades (initial download)

--download_trades_limit (1000)

Maximum number of trades per response (exchange limit)

--download_symbols

Comma-separated list of symbols

--mbp_max_depth

Maximum depth

--mbp_sequencer_timeout (120s)

Sequencer timeout

--mbp_allow_price_inversion (false)

Allow price inversion?

--request_limit (8)

Maximum number of requests per interval

--request_limit_interval (5s)

Monitor interval

--encode_buffer_size (1048576)

Encode buffer size

--decode_buffer_size (10485760)

Decode buffer size

--continue_with_unknown_event_type (false)

Continue when receiving updates for unexpected event-types?

Environments#

$ $CONDA_PREFIX/share/roq-binance-futures/flags/prod/flags-fapi.cfg
# flagfile for the roq-binance-futures gateway
# exchange servers are located in AWS, Tokyo, Japan

--api=fapi
--rest_uri=https://fapi.binance.com
--ws_uri=wss://fstream.binance.com/ws
--rest_pm_uri=https://papi.binance.com
--ws_pm_uri=wss://fstream.binance.com/pm/ws
--ws_api_uri=wss://ws-fapi.binance.com/ws-fapi/v1
$ $CONDA_PREFIX/share/roq-binance-futures/flags/prod/flags-dapi.cfg
# flagfile for the roq-binance-futures gateway
# exchange servers are located in AWS, Tokyo, Japan

--api=dapi
--rest_uri=https://dapi.binance.com
--ws_uri=wss://dstream.binance.com/ws
--rest_pm_uri=https://papi.binance.com
--ws_pm_uri=wss://fstream.binance.com/pm/ws
$ $CONDA_PREFIX/share/roq-binance-futures/flags/test/flags-fapi.cfg
# flagfile for the roq-binance-futures gateway
# exchange servers are located in AWS, Tokyo, Japan

--api=fapi
--rest_uri=https://testnet.binancefuture.com
--ws_uri=wss://fstream.binancefuture.com
--ws_api_uri=wss://testnet.binancefuture.com/ws-fapi/v1
$ $CONDA_PREFIX/share/roq-binance-futures/flags/test/flags-dapi.cfg
# flagfile for the roq-binance-futures gateway
# exchange servers are located in AWS, Tokyo, Japan

--api=dapi
--rest_uri=https://testnet.binancefuture.com
--ws_uri=wss://dstream.binancefuture.com/ws

Configuration#

$ $CONDA_PREFIX/share/roq-binance-futures/config.toml

Important

The template will be replaced when the software is upgraded. Make a copy and modify to your needs.

symbols = [
  "^BTCUSD[A-Z]?(_[0-9]{6})?$",
  "^ETHUSD[A-Z]?(_[0-9]{6})?$"
]

[accounts]

  [accounts.A1]
  master = true
  login = "YOUR_BINANCE_FUTURES_API_KEY_GOES_HERE"
  secret = "YOUR_BINANCE_FUTURES_SECRET_GOES_HERE"
  symbols = [ ".*" ]

[users]

  [users.test]
  password = "1234"
  symbols = ".*"

  [users.trader]
  password = "secret"
  accounts = [ "A1" ]
  symbols = [ ".*BTC.*", ".*ETH.*" ]

[rate_limits]

  [rate_limits.global]
    type = "ORDER_ACTION"
    aggregate = true
    request_limit = 100
    monitor_period = "10s"
    ban_period = "5m"

Market Data#

Event

Stream

Messages

Comments

roq::ReferenceData

Unavailable

roq::MarketStatus

Unavailable

roq::TopOfBook

MarketData

<symbol>@bookTicker

roq::MarketByPriceUpdate

MarketData

<symbol>@depth@<freq>

roq::MarketByOrderUpdate

Unavailable

roq::TradeSummary

MarketData

<symbol>@aggTrade

roq::StatisticsUpdate

MarketData

<symbol>@miniTicker, <symbol>@markPrice

Event

Stream

Messages

Comments

roq::ReferenceData

OrderEntry

GET /fapi/v1/exchangeInfo

There is no live feed

roq::MarketStatus

OrderEntry

GET /fapi/v1/exchangeInfo

There is no live feed

roq::TopOfBook

roq::MarketByPriceUpdate

OrderEntry

GET /fapi/v1/depth

See Flags

roq::MarketByOrderUpdate

roq::TradeSummary

roq::StatisticsUpdate

Statistics#

Type

Comments

HIGHEST_TRADED_PRICE

(miniTicker) highPrice

LOWEST_TRADED_PRICE

(miniTicker) lowPrice

OPEN_PRICE

(miniTicker) openPrice

CLOSE_PRICE

(miniTicker) closePrice

SETTLEMENT_PRICE

(markPrice) markPrice

PRE_SETTLEMENT_PRICE

(markPrice) estSettlePrice

INDEX_VALUE

(markPrice) indexPrice

FUNDING_RATE

(markPrice) fundingRate

Order Management#

Event

Stream

Messages

Comments

roq::OrderUpdate

DropCopy

ORDER_TRADE_UPDATE

roq::TradeUpdate

DropCopy

ORDER_TRADE_UPDATE

Event

Stream

Messages

Comments

roq::OrderUpdate

OrderEntry

GET /fapi/v1/openOrders

It is only possible to download open orders

roq::TradeUpdate

OrderEntry

GET /fapi/v1/userTrades

There is a limit of 1000 trades

Event

Stream

Messages

Comments

roq::CreateOrder

OrderEntry

POST /fapi/v1/order

roq::ModifyOrder

Unavailable

roq::CancelOrder

OrderEntry

DELETE /fapi/v1/order

roq::CancelAllOrders

OrderEntry

DELETE /fapi/v1/allOpenOrders

This request is per-symbol! Only executed for those symbols where the gateway has seen order actions or download.

Event

Stream

Messages

Comments

roq::OrderAck

OrderEntry

/fapi/v1/order

Order Types#

Type

Comments

MARKET

Mapped to 'MARKET' (JSON)

LIMIT

Mapped to 'LIMIT' (JSON)

Time in Force#

Type

Comments

GTC

Mapped to 'GTC' (JSON)

IOC

Mapped to 'IOC' (JSON)

FOK

Mapped to 'FOK' (JSON)

GTX

Mapped to 'GTX' (JSON)

Position Effect#

Note

Not supported

Execution Instructions#

TBD

Account Management#

Event

Stream

Messages

Comments

roq::PositionUpdate

DropCopy

ACCOUNT_UPDATE

roq::FundsUpdate

DropCopy

ACCOUNT_UPDATE

Event

Stream

Messages

Comments

roq::PositionUpdate

OrderEntry

GET /fapi/v2/account

roq::FundsUpdate

OrderEntry

GET /fapi/v2/balance

Streams#

Type

Comments

REST

Primary purpose

  • support order management

Each connection

  • supports a single account

  • maintains a listen key (used by the DropCopy stream)

Type

Comments

WebSocket

Primary purpose

  • live account updates, including orders and fills

Each connection

  • supports a single account

Type

Comments

WebSocket

Primary purpose

  • live market data

Each connection

  • supports a slice of the symbols

Type

Comments

REST

Primary purpose

  • download reference data

One connection

Constraints#

  • It is only possible to download current order status for open orders. The implication is that backup procedures must be implemented to reoncile positions in the scenario where orders are completely filled during a disconnect.

  • The newClientOrderId field (used by CreateOrder) must conform to the ^[.A-Z:/a-z0-9_-]{1,36}$ regular expression (ECMAScript). This restricts length and character used when supplying the routing_id field.

  • The exchange will monitor rate-limit usage per IP address.

  • Rate-limit usage is quite strict when downloading full order books. Due to this constraint, it may take a very long time to initialize all symbols. It is therefore STRONGLY recommended to reduce the configured number of symbols, e.g. symbols=".*BTC.*", or even more specific by using lists.

Comments#

  • External trades can optionally be captured into the event log.

    Note

    These messages will not be routed to any client.

  • Trades can optionally be downloaded. This is a very expensive operation and the list of symbols to download must therefore be explicitly controlled by the --download_symbols flag.

  • There are different end-points depending on the margin-mode.

    • If nothing is specified, the classic margin-mode is selected. The end-points are then taken from --rest_uri and --ws_uri.

    • The new end-points are selected if the toml config has margin_mode = "portfolio". The end-points are then taken from --rest_pm_uri and --ws_pm_uri.

  • WSAPI is WORK-IN-PROGRESS

    • Some exchange features are missing (they are available from spot WSAPI):

      • Download working orders

      • Download trade history

      • Cancel all working orders

References#

Common#

Binance#