Categorygithub.com/whatmatrix/go-binance
modulepackage
0.0.0-20180721000741-820fa58b1c3c
Repository: https://github.com/whatmatrix/go-binance.git
Documentation: pkg.go.dev

# README

go-binance

A Golang SDK for binance API.

Build Status GoDoc Go Report Card codecov

All the REST APIs listed in binance API document are implemented, as well as the websocket APIs.

For best compatibility, please use Go >= 1.8.

Make sure you have read binance API document before continuing.

Installation

go get github.com/adshao/go-binance

Importing

import (
    "github.com/adshao/go-binance"
)

Documentation

GoDoc

REST API

Setup

Init client for API services. Get APIKey/SecretKey from your binance account.

var (
    apiKey = "your api key"
    secretKey = "your secret key"
)
client := binance.NewClient(apiKey, secretKey)

A service instance stands for a REST API endpoint and is initialized by client.NewXXXService function.

Simply call API in chain style. Call Do() in the end to send HTTP request.

Following are some simple examples, please refer to godoc for full references.

Create Order

order, err := client.NewCreateOrderService().Symbol("BNBETH").
        Side(binance.SideTypeBuy).Type(binance.OrderTypeLimit).
        TimeInForce(binance.TimeInForceGTC).Quantity("5").
        Price("0.0030000").Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(order)

// Use Test() instead of Do() for testing.

Get Order

order, err := client.NewGetOrderService().Symbol("BNBETH").
    OrderID(4432844).Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(order)

Cancel Order

_, err := client.NewCancelOrderService().Symbol("BNBETH").
    OrderID(4432844).Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}

List Open Orders

openOrders, err := client.NewListOpenOrdersService().Symbol("BNBETH").
    Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
for _, o := range openOrders {
    fmt.Println(o)
}

List Orders

orders, err := client.NewListOrdersService().Symbol("BNBETH").
    Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
for _, o := range orders {
    fmt.Println(o)
}

List Ticker Prices

prices, err := client.NewListPricesService().Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
for _, p := range prices {
    fmt.Println(p)
}

Show Depth

res, err := client.NewDepthService().Symbol("LTCBTC").
    Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(res)

List Klines

klines, err := client.NewKlinesService().Symbol("LTCBTC").
    Interval("15m").Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
for _, k := range klines {
    fmt.Println(k)
}

List Aggregate Trades

trades, err := client.NewAggTradesService().
    Symbol("LTCBTC").StartTime(1508673256594).EndTime(1508673256595).
    Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
for _, t := range trades {
    fmt.Println(t)
}

Get Account

res, err := client.NewGetAccountService().Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(res)

Start User Stream

res, err := client.NewStartUserStreamService().Do(context.Background())
if err != nil {
    fmt.Println(err)
    return
}
fmt.Println(res)

Websocket

You don't need Client in websocket API. Just call binance.WsXxxServe(args, handler, errHandler).

Depth

wsDepthHandler := func(event *binance.WsDepthEvent) {
    fmt.Println(event)
}
errHandler := func(err error) {
    fmt.Println(err)
}
doneC, stopC, err := binance.WsDepthServe("LTCBTC", wsDepthHandler, errHandler)
if err != nil {
    fmt.Println(err)
    return
}
// use stopC to exit
go func() {
    time.Sleep(5 * time.Second)
    stopC <- struct{}{}
}()
// remove this if you do not want to be blocked here
<-doneC

Kline

wsKlineHandler := func(event *binance.WsKlineEvent) {
    fmt.Println(event)
}
errHandler := func(err error) {
    fmt.Println(err)
}
doneC, _, err := binance.WsKlineServe("LTCBTC", "1m", wsKlineHandler, errHandler)
if err != nil {
    fmt.Println(err)
    return
}
<-doneC

Aggregate

wsAggTradeHandler := func(event *binance.WsAggTradeEvent) {
    fmt.Println(event)
}
errHandler := func(err error) {
    fmt.Println(err)
}
doneC, _, err := binance.WsAggTradeServe("LTCBTC", wsAggTradeHandler, errHandler)
if err != nil {
    fmt.Println(err)
    return
}
<-doneC

User Data

wsHandler := func(message []byte) {
    fmt.Println(string(message))
}
errHandler := func(err error) {
    fmt.Println(err)
}
doneC, _, err := binance.WsUserDataServe(listenKey, wsHandler, errHandler)
if err != nil {
    fmt.Println(err)
    return
}
<-doneC

# Functions

AmountToLotSize converts an amount to a lot sized amount.
IsAPIError check if e is an API error.
NewClient initialize an API client instance with API key and secret key.
NewClientWithHTTPClient initializes an API client instance with a custom http.Client.
WithRecvWindow set recvWindow param for the request.
WsAggTradeServe serve websocket aggregate handler with a symbol.
WsAllMarketsStatServe serve websocket that push 24hr statistics for all market every second.
WsAllMiniMarketsStatServe serve websocket that push mini version of 24hr statistics for all market every second.
WsDepthServe serve websocket depth handler with a symbol.
WsKlineServe serve websocket kline handler with a symbol and interval like 15m, 30s.
WsMarketStatServe serve websocket that push 24hr statistics for single market every second.
WsPartialDepthServe serve websocket partial depth handler with a symbol.
WsTradeServe serve websocket handler with a symbol.
WsUserDataServe serve user data handler with listen key.

# Constants

Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.
Global enums.

# Variables

WebsocketKeepalive enables sending ping/pong messages to check the connection stability.
WebsocketTimeout is an interval for sending ping/pong messages if WebsocketKeepalive is enabled.

# Structs

Account define account info.
AggTrade define aggregate trade info.
AggTradesService list aggregate trades.
APIError define API error when response status is 4xx or 5xx.
Ask define ask info with price and quantity.
Balance define user balance of your account.
Bid define bid info with price and quantity.
BookTicker define book ticker info.
BookTickerService list symbol's book ticker.
CancelOrderResponse define response of canceling order.
CancelOrderService cancel an order.
Client define API client.
CloseUserStreamService delete listen key.
CreateOrderResponse define create order response.
CreateOrderService create order.
CreateWithdrawService create withdraw.
Deposit define deposit info.
DepositHistoryResponse define deposit history.
DepthResponse define depth info with bids and asks.
DepthService show depth info.
ExchangeInfo exchange info.
ExchangeInfoService exchange info service.
Fill may be returned in an array of fills in a CreateOrderResponse.
GetAccountService get account info.
GetOrderService get an order.
GetWithdrawFeeService get withdraw fee.
HistoricalTradesService trades.
KeepaliveUserStreamService update listen key.
Kline define kline info.
KlinesService list klines.
ListBookTickersService list all book tickers.
ListDepositsService list deposits.
ListOpenOrdersService list opened orders.
ListOrdersService list all orders.
ListPriceChangeStatsService show stats of price change in last 24 hours for all symbols.
ListPricesService list all ticker prices.
ListTradesService list trades.
ListWithdrawsService list withdraws.
Order define order info.
PingService ping server.
PriceChangeStats define price change stats.
PriceChangeStatsService show stats of price change in last 24 hours.
RecentTradesService list recent trades.
ServerTimeService get server time.
StartUserStreamService create listen key for user stream service.
Symbol market symbol.
SymbolPrice define symbol and price pair.
Trade define trade info.
TradeV3 define v3 trade info.
Withdraw define withdraw info.
WithdrawFee withdraw fee.
WithdrawHistoryResponse define withdraw history response.
WsAggTradeEvent define websocket aggregate trade event.
WsDepthEvent define websocket depth event.
WsKline define websocket kline.
WsKlineEvent define websocket kline event.
WsMarketStatEvent define websocket market statistics event.
WsMiniMarketsStatEvent define websocket market mini-ticker statistics event.
WsPartialDepthEvent define websocket partial depth book event.
WsTradeEvent define websocket trade event.

# Type aliases

ErrHandler handles errors.
NewOrderRespType define response JSON verbosity.
OrderType define order type.
RequestOption define option type for request.
SideType define side type of order.
TimeInForce define time in force type of order.
WsAggTradeHandler handle websocket aggregate trade event.
WsAllMarketsStatEvent define array of websocket market statistics events.
WsAllMarketsStatHandler handle websocket that push all markets statistics for 24hr.
WsAllMiniMarketsStatEvent define array of websocket market mini-ticker statistics events.
WsAllMiniMarketsStatServeHandler handle websocket that push all mini-ticker market statistics for 24hr.
WsDepthHandler handle websocket depth event.
WsHandler handle raw websocket message.
WsKlineHandler handle websocket kline event.
WsMarketStatHandler handle websocket that push single market statistics for 24hr.
WsPartialDepthHandler handle websocket partial depth event.
WsTradeHandler handle websocket trade event.