roq-binance-futures¶
$ conda install \
--channel https://roq-trading.com/conda/unstable \
roq-binance-futures
$ conda install \
--channel https://roq-trading.com/conda/stable \
roq-binance-futures
Supports¶
✅ |
❶ |
|
✅ |
❶ |
|
✅ |
||
✅ |
||
❌ |
||
✅ |
||
✅ |
||
✅ |
✅ |
||
✅ |
❷ |
|
✅ |
||
✅ |
||
❌ |
||
❌ |
Note
✅ = Available.
❎ = Not implemented.
❌ = Unavailable.
❶ The exchange protocol does not support streaming updates for reference data and market status.
❷ The PAPI protocol does not support order modifications.
Using¶
$ roq-binance-futures [FLAGS]
Flags¶
$ roq-binance-futures --help
--exchange(binance-futures)Exchange identifier
--api(fapi)API (
fapiordapi)--ws_api(false)Use WebSocket API?
--rest_uri(https://testnet.binancefuture.com)Exchange end-point
--rest_hostHost (when URI is an IP address)
--rest_pm_uriExchange end-point (portfolio margin)
--rest_pm_hostHost (when URI is an IP address)
--rest_proxyProxy 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_hostHost (when URI is an IP address)
--ws_pm_uriExchange end-point (portfolio margin)
--ws_pm_hostHost (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_interfacesNetwork interfaces
--ws_api_uri(wss://ws-api.binance.com/ws-api/v3)Exchange end-point
--ws_api_hostHost (when URI is an IP address)
--ws_api_ping_freq(5s)Ping frequency
--mbp_max_depthMaximum 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
--ws_api_uri=wss://ws-dapi.binance.com/ws-dapi/v1
$ $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
--rest_pm_uri=TESTNET_DOES_NOT_EXIST
--ws_pm_uri=TESTNET_DOES_NOT_EXIST
--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
--rest_pm_uri=TESTNET_DOES_NOT_EXIST
--ws_pm_uri=TESTNET_DOES_NOT_EXIST
--ws_api_uri=wss://testnet.binancefuture.com/ws-dapi/v1
Configuration¶
$ $CONDA_PREFIX/share/roq-binance-futures/config.toml
Important
This template will be replaced when the software is upgraded. Make a copy and modify to your own needs.
# config template for the roq-binance-futures gateway
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¶
Inbound¶
Enum |
||
|---|---|---|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
|
|
⇒ |
Event |
Field |
Comment |
||
|---|---|---|---|---|
|
|
Mark price |
⇒ |
|
|
|
Est. mark price |
⇒ |
|
|
|
Index price |
⇒ |
|
|
|
Funding rate |
⇒ |
|
|
|
Open price |
⇒ |
|
|
|
High price |
⇒ |
|
|
|
Low price |
⇒ |
|
|
|
Close price |
⇒ |
|
|
|
Total volume (base) |
⇒ |
Order Management¶
Inbound¶
Outbound¶
|
|
|
|
|||||
|---|---|---|---|---|---|---|---|---|
|
|
⇒ |
|
❌ |
❌ |
|||
|
✅ |
⇒ |
|
❌ |
✅ |
|||
✅ |
|
⇒ |
|
✅ |
❌ |
|||
✅ |
✅ |
⇒ |
|
✅ |
✅ |
TBD
TBD
TBD
Comments¶
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
newClientOrderIdfield (used byCreateOrder) must conform to the^[.A-Z:/a-z0-9_-]{1,36}$regular expression (ECMAScript). This restricts length and character used when supplying therouting_idfield.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.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_symbolsflag.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_uriand--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_uriand--ws_pm_uri.PAPI has a race between order matching an trade reporting
A modify or cancel request may be rejected with the
Order does not exist.text message if the order has already been matched but the completion has not yet been reported.This is indicative that Binance’s implementation has matching engine logic separated from PAPI / trade reporting. The matching engine will not report fills directly, rather it will hand the update off to centralized logic that will udpate and validate portfolio margin.
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