Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/qct/bitmex-go
golang restful SDK for BITMEX
https://github.com/qct/bitmex-go
bitmex cryptocoins cryptocurrency exchange golang rest-api restful
Last synced: 17 days ago
JSON representation
golang restful SDK for BITMEX
- Host: GitHub
- URL: https://github.com/qct/bitmex-go
- Owner: qct
- License: apache-2.0
- Created: 2017-08-20T02:45:36.000Z (about 7 years ago)
- Default Branch: master
- Last Pushed: 2023-10-11T23:29:50.000Z (about 1 year ago)
- Last Synced: 2024-10-14T23:45:22.397Z (about 1 month ago)
- Topics: bitmex, cryptocoins, cryptocurrency, exchange, golang, rest-api, restful
- Language: Go
- Homepage:
- Size: 14.8 MB
- Stars: 37
- Watchers: 9
- Forks: 14
- Open Issues: 2
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# Golang SDK for [bitmex](https://www.bitmex.com)
inspired by [https://github.com/BitMEX/api-connectors](https://github.com/BitMEX/api-connectors), [https://www.bitmex.com/api/explorer](https://www.bitmex.com/api/explorer) and [https://github.com/jxc6698/bitcoin-exchange-api](https://github.com/jxc6698/bitcoin-exchange-api)
all structs and APIs are from the bitmex official api connectors, based on that, add authentication and fix bugs.
## Why
the generated connectors by bitmex have too many mistakes to use, this SDK fix these bugs to ensure bitmex API can get right results.## Installation
`go get github.com/qct/bitmex-go`## Examples
1. Get order book
```
apiClient = swagger.NewAPIClient(swagger.NewConfiguration())
orderBookApi := restful.NewOrderBookApi(apiClient.OrderBookApi)
orderBooks, err := orderBookApi.OrderBookGetL2("XBTUSD", 5)
if err != nil {
log.Println("error wihle get orderbook: ", err)
}
for _, v := range orderBooks.AskList {
log.Printf("%+v\n", v)
}
for _, v := range orderBooks.BidList {
log.Printf("%+v\n", v)
}
```2. Get your position
```
apiClient = swagger.NewAPIClient(swagger.NewConfiguration())
auth = context.WithValue(context.TODO(), swagger.ContextAPIKey, swagger.APIKey{
Key: apiKey,
Secret: secretKey,
})positionApi := apiClient.PositionApi
params := map[string]interface{}{
"filter": "{\"symbol\": \"XBTUSD\"}",
"columns": "",
"count": float32(10),
}
positions, response, err := positionApi.PositionGet(auth, params)
if err != nil {
log.Println("error: ", err)
}
log.Println(response.Status)
log.Printf("%+v\n", positions)
```3. Get your wallet
```
apiClient = swagger.NewAPIClient(swagger.NewConfiguration())
auth = context.WithValue(context.TODO(), swagger.ContextAPIKey, swagger.APIKey{
Key: apiKey,
Secret: secretKey,
})userApi := apiClient.UserApi
params := map[string]interface{}{
"currency": "",
}
wallet, response, err := userApi.UserGetWallet(auth, params)
if err != nil {
log.Println("error: ", err)
}
log.Println(response.Status)
log.Printf("wallet: %+v\n", wallet)
```4. Get margin info
```
apiClient = swagger.NewAPIClient(swagger.NewConfiguration())
auth = context.WithValue(context.TODO(), swagger.ContextAPIKey, swagger.APIKey{
Key: apiKey,
Secret: secretKey,
})userApi := apiClient.UserApi
margin, response, err := userApi.UserGetMargin(auth, nil)
if err != nil {
log.Println("error: ", err)
}
log.Println(response.Status)
log.Printf("margin: %+v\n", margin)
```5. Buy & Sell
```
apiClient = swagger.NewAPIClient(swagger.NewConfiguration())
auth = context.WithValue(context.TODO(), swagger.ContextAPIKey, swagger.APIKey{
Key: apiKey,
Secret: secretKey,
})// buy
orderApi := restful.NewOrderApi(apiClient.OrderApi, auth)
resp, orderId, err := orderApi.LimitBuy("XBTUSD", 1.0, 13000, "qct_f_f_")
if err != nil {
log.Println("error: ", err)
}
log.Printf("response: %s, orderId: %s\n", resp.Status, orderId)// sell
resp, orderId, err := orderApi.LimitSell("XBTUSD", 1.0, 20000, "qct_f_f_")
if err != nil {
log.Println("error: ", err)
}
log.Printf("result: %s, orderId: %s\n", resp.Status, orderId)
```6. Get your order
```
apiClient = swagger.NewAPIClient(swagger.NewConfiguration())
auth = context.WithValue(context.TODO(), swagger.ContextAPIKey, swagger.APIKey{
Key: apiKey,
Secret: secretKey,
})orderApi := apiClient.OrderApi
params := map[string]interface{}{
"symbol": "XBTUSD",
"filter": "",
"columns": "",
"count": float32(5),
"start": nil,
"reverse": true,
"startTime": nil,
"endTime": nil,
}
orders, response, err := orderApi.OrderGetOrders(auth, params)
if err != nil {
log.Println("error: ", err)
}
log.Println(response.Status)
log.Printf("orders: %+v\n", orders)
```7. Even chat through RESTFul api
```
apiClient = swagger.NewAPIClient(swagger.NewConfiguration())
auth = context.WithValue(context.TODO(), swagger.ContextAPIKey, swagger.APIKey{
Key: apiKey,
Secret: secretKey,
})chatApi := apiClient.ChatApi
params := map[string]interface{}{
"channelID": 2.0,
}
chat, response, err := chatApi.ChatNew(auth, "hello", params)
if err != nil {
log.Println("error: ", err)
}
log.Println(response.Status)
log.Printf("%+v\n", chat)
```## Roadmap
* I only tested some API I will use, in the near future, I will keep adding and fixing to make more API available.
* make a PR to bitmex api collectors to generate a ready to use golang client.## Changelog
1.swagger.json, in definitions:
```
"OrderBookL2": {
"properties": {
"id": { "type": "number", "format": "int64" },
"symbol": { "type": "string" },
"side": { "type": "string" },
"size": { "type": "number", "format": "int64" },
"price": { "format": "double", "type": "number" }
},
"required": ["id", "symbol", "side"],
"type": "object"
},
```2.api_order.go, cancel multi orders
```go
if localVarOptionals != nil && localVarOptionals.OrderID.IsSet() {
//localVarFormParams.Add("orderID", parameterToString(localVarOptionals.OrderID.Value(), ""))
ids := strings.Split(localVarOptionals.OrderID.Value(), ",")
for _, id := range ids {
localVarFormParams.Add("orderID", id)
}
}
if localVarOptionals != nil && localVarOptionals.ClOrdID.IsSet() {
//localVarFormParams.Add("clOrdID", parameterToString(localVarOptionals.ClOrdID.Value(), ""))
ids := strings.Split(localVarOptionals.ClOrdID.Value(), ",")
for _, id := range ids {
localVarFormParams.Add("clOrdID", id)
}
}
```