Feat/support binance (#22)

* add docs

* Add Binance exchange support

- Updated the environment configuration to include Binance as a selectable exchange option.
- Enhanced the README documentation to reflect the addition of Binance.
- Implemented the Binance exchange adapter and integrated it into the existing exchange framework.
- Modified the basis arbitrage strategy to support Binance alongside existing exchanges.
- Added tests to ensure proper functionality and integration of Binance within the trading system.

* Enhance README with detailed Binance exchange configuration

- Added comprehensive instructions for setting up Binance as an exchange option.
- Included environment variable specifications for API keys, market types, and trading symbols.
- Provided examples for both perpetual and spot trading strategies.
- Clarified the use of WebSocket and REST for the Binance adapter.

* Enhance exchange support and testing framework

- Added a new test suite for exchange contracts to ensure consistency and functionality across supported exchanges.
- Refactored exchange ID handling to utilize a centralized list of supported exchanges, improving maintainability.
- Updated CLI argument parsing and help documentation to reflect the new exchange structure.
- Introduced utility functions for validating supported exchanges and their display names.
- Enhanced the BasisApp and strategy runner to leverage the new exchange validation logic.
- Added a new test command for running exchange-related tests.

* Refactor exchange contract tests and update CLI commands

- Removed the trailing supported exchanges set and simplified the logic for trailing stop support in the exchange contract tests.
- Updated the test command for exchange contracts to exclude unnecessary tests, streamlining the testing process.
- Enhanced test descriptions for clarity and improved understanding of the functionality being tested.
This commit is contained in:
Disney
2026-02-27 11:37:44 +08:00
committed by GitHub
parent 422ee6f465
commit d6399b92aa
588 changed files with 96879 additions and 106 deletions
@@ -0,0 +1,276 @@
---
title: "General Info | Binance Open Platform"
source: "https://developers.binance.com/docs/derivatives/options-trading/general-info"
fetched_at: "2026-01-27T05:28:09.628Z"
---
# General Info
## General API Information[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- Some endpoints will require an API Key. Please refer to [this page](https://www.binance.com/en/support/articles/360002502072)
- The base endpoint is: \*\*[https://eapi.binance.com](https://eapi.binance.com/)
- All endpoints return either a JSON object or array.
- Data is returned in ascending order. Oldest first, newest last.
- All time and timestamp related fields are in milliseconds.
### Testnet API Information[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- Most of the endpoints can be used in the testnet platform.
- The REST base url for **testnet** is "[https://testnet.binancefuture.com](https://testnet.binancefuture.com/)"
- The Websocket base url for **testnet** is:
- High Performance Market Data url path:"wss://fstream.binancefuture.com/public/"
- Market Data url path: "wss://fstream.binancefuture.com/market/"
- Private Data url path: "wss://fstream.binancefuture.com/private/"
- After generating an API key on the testnet, users can use this API key directly for testnet options trading.
### HTTP Return Codes[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- HTTP `4XX` return codes are used for for malformed requests; the issue is on the sender's side.
- HTTP `403` return code is used when the WAF Limit (Web Application Firewall) has been violated.
- HTTP `429` return code is used when breaking a request rate limit.
- HTTP `418` return code is used when an IP has been auto-banned for continuing to send requests after receiving `429` codes.
- HTTP `5XX` return codes are used for internal errors; the issue is on Binance's side.
- HTTP `503` return code is used when:
1. If there is an error message **"Unknown error, please check your request or try again later."** returned in the response, the API successfully sent the request but not get a response within the timeout period.
It is important to **NOT** treat this as a failure operation; the execution status is **UNKNOWN** and could have been a success;
2. If there is an error message **"Service Unavailable."** returned in the response, it means this is a failure API operation and the service might be unavailable at the moment, you need to retry later.
3. If there is an error message **"Internal error; unable to process your request. Please try again."** returned in the response, it means this is a failure API operation and you can resend your request if you need.
### Error Codes and Messages[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- Any endpoint can return an ERROR
> **_The error payload is as follows:_**
```
{ "code": -1121, "msg": "Invalid symbol."}
```
- Specific error codes and messages defined in [Error Codes](https://developers.binance.com/docs/derivatives/options-trading/general-info).
### General Information on Endpoints[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- For `GET` endpoints, parameters must be sent as a `query string` without setting content type in the http headers.
- For `POST`, `PUT`, and `DELETE` endpoints, the parameters may be sent as a `query string` or in the `request body` with content type `application/x-www-form-urlencoded`. You may mix parameters between both the `query string` and `request body` if you wish to do so.
- Parameters may be sent in any order.
- If a parameter sent in both the `query string` and `request body`, the `query string` parameter will be used.
## LIMITS[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- The `/eapi/v1/exchangeInfo` `rateLimits` array contains objects related to the exchange's `RAW_REQUEST`, `REQUEST_WEIGHT`, and `ORDER` rate limits. These are further defined in the `ENUM definitions` section under `Rate limiters (rateLimitType)`.
- A `429` will be returned when either rate limit is violated.
### IP Limits[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- Every request will contain `X-MBX-USED-WEIGHT-(intervalNum)(intervalLetter)` in the response headers which has the current used weight for the IP for all request rate limiters defined.
- Each route has a `weight` which determines for the number of requests each endpoint counts for. Heavier endpoints and endpoints that do operations on multiple symbols will have a heavier `weight`.
- When a 429 is received, it's your obligation as an API to back off and not spam the API.
- **Repeatedly violating rate limits and/or failing to back off after receiving 429s will result in an automated IP ban (HTTP status 418).**
- IP bans are tracked and **scale in duration** for repeat offenders, **from 2 minutes to 3 days**.
- **The limits on the API are based on the IPs, not the API keys.**
### Order Rate Limits[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- Every order response will contain a `X-MBX-ORDER-COUNT-(intervalNum)(intervalLetter)` header which has the current order count for the account for all order rate limiters defined.
- Rejected/unsuccessful orders are not guaranteed to have `X-MBX-ORDER-COUNT-**` headers in the response.
- **The order rate limit is counted against each account**.
## Endpoint Security Type[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- Each endpoint has a security type that determines the how you will interact with it.
- API-keys are passed into the Rest API via the `X-MBX-APIKEY` header.
- API-keys and secret-keys **are case sensitive**.
- API-keys can be configured to only access certain types of secure endpoints. For example, one API-key could be used for TRADE only, while another API-key can access everything except for TRADE routes.
- By default, API-keys can access all secure routes.
Security Type
Description
NONE
Endpoint can be accessed freely.
TRADE
Endpoint requires sending a valid API-Key and signature.
USER\_DATA
Endpoint requires sending a valid API-Key and signature.
USER\_STREAM
Endpoint requires sending a valid API-Key.
MARKET\_DATA
Endpoint requires sending a valid API-Key.
- `TRADE` and `USER_DATA` endpoints are `SIGNED` endpoints.
## SIGNED (TRADE and USER\_DATA) Endpoint Security[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- `SIGNED` endpoints require an additional parameter, `signature`, to be sent in the `query string` or `request body`.
- Endpoints use `HMAC SHA256` signatures. The `HMAC SHA256 signature` is a keyed `HMAC SHA256` operation. Use your `secretKey` as the key and `totalParams` as the value for the HMAC operation.
- The `signature` is **not case sensitive**.
- Please make sure the `signature` is the end part of your `query string` or `request body`.
- `totalParams` is defined as the `query string` concatenated with the `request body`.
### Timing Security[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- A `SIGNED` endpoint also requires a parameter, `timestamp`, to be sent which should be the millisecond timestamp of when the request was created and sent.
- An additional parameter, `recvWindow`, may be sent to specify the number of milliseconds after `timestamp` the request is valid for. If `recvWindow` is not sent, **it defaults to 5000**.
> The logic is as follows:
```
if (timestamp < serverTime + 1000 && serverTime - timestamp <= recvWindow) { // process request} else { // reject request}
```
**Serious trading is about timing.** Networks can be unstable and unreliable, which can lead to requests taking varying amounts of time to reach the servers. With `recvWindow`, you can specify that the request must be processed within a certain number of milliseconds or be rejected by the server.
### SIGNED Endpoint Examples for POST /eapi/v1/order[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
Here is a step-by-step example of how to send a vaild signed payload from the Linux command line using `echo`, `openssl`, and `curl`.
Key
Value
apiKey
dbefbc809e3e83c283a984c3a1459732ea7db1360ca80c5c2c8867408d28cc83
secretKey
2b5eb11e18796d12d88f13dc27dbbd02c2cc51ff7059765ed9821957d82bb4d9
Parameter
Value
symbol
BTCUSDT
side
BUY
type
LIMIT
timeInForce
GTC
quantity
1
price
9000
recvWindow
5000
timestamp
1591702613943
#### Example 1: As a query string[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
> **Example 1**
> **HMAC SHA256 signature:**
```
$ echo -n "symbol=BTC-210129-40000-C&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=2000&recvWindow=5000&timestamp=1611825601400" | openssl dgst -sha256 -hmac "YtP1BudNOWZE1ag5uzCkh4hIC7qSmQOu797r5EJBFGhxBYivjj8HIX0iiiPof5yG" (stdin)= 7c12045972f6140e765e0f2b67d28099718df805732676494238f50be830a7d7
```
> **curl command:**
```
(HMAC SHA256) $ curl -H "X-MBX-APIKEY: 22BjeOROKiXJ3NxbR3zjh3uoGcaflPu3VMyBXAg8Jj2J1xVSnY0eB4dzacdE9IWn" -X POST 'https://eapi.binance.com/eapi/v1/order' -d 'symbol=BTC-210129-40000-C&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=2000&recvWindow=5000&timestamp=1611825601400&signature=7c12045972f6140e765e0f2b67d28099718df805732676494238f50be830a7d7'
```
- **requestBody:**
symbol=BTC-210129-40000-C
&side=BUY
&type=LIMIT
&timeInForce=GTC
&quantity=1
&price=2000
&recvWindow=5000
&timestamp=1611825601400
#### Example 2: As a request body[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
> **Example 2**
> **HMAC SHA256 signature:**
```
$ echo -n "symbol=BTC-210129-40000-C&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=2000&recvWindow=5000&timestamp=1611825601400" | openssl dgst -sha256 -hmac "YtP1BudNOWZE1ag5uzCkh4hIC7qSmQOu797r5EJBFGhxBYivjj8HIX0iiiPof5yG" (stdin)= 7c12045972f6140e765e0f2b67d28099718df805732676494238f50be830a7d7
```
> **curl command:**
```
(HMAC SHA256) $ curl -H "X-MBX-APIKEY: 22BjeOROKiXJ3NxbR3zjh3uoGcaflPu3VMyBXAg8Jj2J1xVSnY0eB4dzacdE9IWn" -X POST 'https://eapi.binance.com/eapi/v1/order?symbol=BTC-210129-40000-C&side=BUY&type=LIMIT&timeInForce=GTC&quantity=1&price=2000&recvWindow=5000&timestamp=1611825601400&signature=7c12045972f6140e765e0f2b67d28099718df805732676494238f50be830a7d7'
```
- **queryString:**
symbol=BTC-210129-40000-C
&side=BUY
&type=LIMIT
&timeInForce=GTC
&quantity=1
&price=2000
&recvWindow=5000
&timestamp=1611825601400
#### Example 3: Mixed query string and request body[](https://developers.binance.com/docs/derivatives/options-trading/general-info)
> **Example 3**
> **HMAC SHA256 signature:**
```
$ echo -n "symbol=BTC-210129-40000-C&side=BUY&type=LIMIT&timeInForce=GTCquantity=0.01&price=2000&recvWindow=5000&timestamp=1611825601400" | openssl dgst -sha256 -hmac "YtP1BudNOWZE1ag5uzCkh4hIC7qSmQOu797r5EJBFGhxBYivjj8HIX0iiiPof5yG" (stdin)= fa6045c54fb02912b766442be1f66fab619217e551a4fb4f8a1ee000df914d8e
```
> **curl command:**
```
(HMAC SHA256) $ curl -H "X-MBX-APIKEY: 22BjeOROKiXJ3NxbR3zjh3uoGcaflPu3VMyBXAg8Jj2J1xVSnY0eB4dzacdE9IWn" -X POST 'https://eapi.binance.com/eapi/v1/order?symbol=BTC-210129-40000-C&side=BUY&type=LIMIT&timeInForce=GTC' -d 'quantity=0.01&price=2000&recvWindow=5000&timestamp=1611825601400&signature=fa6045c54fb02912b766442be1f66fab619217e551a4fb4f8a1ee000df914d8e'
```
- **queryString:**
symbol=BTC-210129-40000-C&side=BUY&type=LIMIT&timeInForce=GTC
- **requestBody:**
quantity=1&price=2000&recvWindow=5000&timestamp=1611825601400
Note that the signature is different in example 3. There is no & between "GTC" and "quantity=1".
- [General API Information](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [Testnet API Information](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [HTTP Return Codes](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [Error Codes and Messages](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [General Information on Endpoints](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [LIMITS](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [IP Limits](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [Order Rate Limits](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [Endpoint Security Type](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [SIGNED (TRADE and USER\_DATA) Endpoint Security](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [Timing Security](https://developers.binance.com/docs/derivatives/options-trading/general-info)
- [SIGNED Endpoint Examples for POST /eapi/v1/order](https://developers.binance.com/docs/derivatives/options-trading/general-info)