https://github.com/kybernetwork/binance_fix_api
Implement Fix client support for Binance spot order fix endpoints.
https://github.com/kybernetwork/binance_fix_api
Last synced: about 1 year ago
JSON representation
Implement Fix client support for Binance spot order fix endpoints.
- Host: GitHub
- URL: https://github.com/kybernetwork/binance_fix_api
- Owner: KyberNetwork
- Created: 2024-08-19T06:36:35.000Z (almost 2 years ago)
- Default Branch: main
- Last Pushed: 2024-08-20T10:28:18.000Z (almost 2 years ago)
- Last Synced: 2025-03-28T16:04:21.964Z (about 1 year ago)
- Language: Go
- Size: 16.6 KB
- Stars: 3
- Watchers: 1
- Forks: 2
- Open Issues: 1
-
Metadata Files:
- Readme: READme.md
Awesome Lists containing this project
README
## Binance FIX API
Prepare those environment variables:
- configFilePath: FIX protocol config (see file path `sample/fix.conf`)
- apiKey: Binance FIX API KEY
- privateKeyFilePath: Binance Ed25519 pem file.
```go
package main
import (
"context"
"os"
fix "github.com/KyberNetwork/binance_fix_api"
"go.uber.org/zap"
"go.uber.org/zap/zapcore"
)
func SetupLogger() *zap.SugaredLogger {
pConf := zap.NewProductionEncoderConfig()
pConf.EncodeTime = zapcore.ISO8601TimeEncoder
encoder := zapcore.NewConsoleEncoder(pConf)
level := zap.NewAtomicLevelAt(zap.DebugLevel)
l := zap.New(zapcore.NewCore(encoder, zapcore.AddSync(os.Stdout), level), zap.AddCaller())
zap.ReplaceGlobals(l)
return zap.S()
}
const (
configFilePath = "./sample/fix.conf"
apiKey = "your_api_key"
privateKeyFilePath = "your_ed25519_key_pem"
)
func main() {
logger := SetupLogger()
logger.Infow("This is an fix-client example")
settings, err := fix.LoadQuickfixSettings(configFilePath)
if err != nil {
logger.Panicw("Failed to LoadQuickfixSettings", "err", err)
}
conf := fix.Config{
APIKey: apiKey,
PrivateKeyFilePath: privateKeyFilePath,
Settings: settings,
}
client, err := fix.NewClient(
context.Background(),
logger, conf, fix.WithZapLogFactory(logger),
)
if err != nil {
logger.Panicw("Failed to init client", "err", err)
}
logger.Info("Everything is ready!")
// GET LIMIT MESSAGE
limit, err := client.NewGetLimitService().Do(context.Background())
if err != nil {
logger.Panicw("Failed to get LimitMessages", "err", err)
}
logger.Infow("Get limit message", "data", limit)
// SUBSCRIBE TO EXECUTION REPORT
client.SubscribeToExecutionReport(func(o *fix.Order) {
logger.Infow("Received data from subscription", "order", o)
})
logger.Info("Subscribed to execution report!")
// TRY TO PLACE ORDER
time.Sleep(time.Second)
order, err := client.NewOrderSingleService().
Symbol("BNBUSDT").
Side(enum.Side_BUY).
Type(enum.OrdType_LIMIT).
TimeInForce(enum.TimeInForce_GOOD_TILL_CANCEL).
Quantity(0.01).
Price(502).
Do(context.Background())
logger.Infow("NewOrderSingleService resp", "order", order, "err", err)
time.Sleep(3 * time.Second)
}
```
## Order Entry Messages
1. ✅ `NewOrderSingle`
- Sent by the client to submit a new order for execution.
2. 🚫 `NewOrderList`
- Sent by the client to submit a list of orders for execution.
3. 🚫 `OrderCancelRequest`
- Sent by the client to cancel an order or an order list.
4. 🚫 `OrderCancelRequestAndNewOrderSingle`
- Sent by the client to cancel an order and submit a new one for execution.
5. 🚫 `OrderMassCancelRequest`
- Sent by the client to cancel all open orders on a symbol.
6. ✅ `ExecutionReport<8>`
- Sent by the server whenever an order state changes.
7. 🚫 `OrderCancelReject<9>`
- Sent by the server when OrderCancelRequest has failed.
8. 🚫 `OrderMassCancelReport`
- Sent by the server in response to OrderMassCancelRequest.
9. 🚫 `ListStatus`
- Sent by the server whenever an order list state changes.
## Limit message
- ✅ Sent by the client to query current limits.
- ✅ Sent by the server in response to LimitQuery.