binance

package
v1.0.1 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Sep 28, 2019 License: MIT Imports: 14 Imported by: 0

Documentation

Index

Constants

View Source
const API_ROOT = "https://api.binance.com"
View Source
const WS_STREAM_URL = "wss://stream.binance.com:9443"

Variables

This section is empty.

Functions

func BinanceApiProxy

func BinanceApiProxy(w http.ResponseWriter, r *http.Request)

BinanceApiProxy is a standard web handler function that will proxy requests to the Binance API.

func NewBinanceApiProxyHandler

func NewBinanceApiProxyHandler() http.Handler

NewBinanceApiProxyHandler return the Binance API proxy as a http.Handler.

Useful if you need to strip the prefix, for example:

router.PathPrefix("/proxy/binance").Handler(
    http.StripPrefix("/proxy/binance", NewBinanceApiProxyHandler()))

Types

type AccountInfoBalance

type AccountInfoBalance struct {
	Asset  string  `json:"asset"`
	Free   float64 `json:"free,string"`
	Locked float64 `json:"locked,string"`
}

type AccountInfoResponse

type AccountInfoResponse struct {
	MakerCommission  int64                `json:"makerCommission"`
	TakerCommission  int64                `json:"takerCommission"`
	BuyerCommission  int64                `json:"buyerCommission"`
	SellCommission   int64                `json:"sellCommission"`
	CanTrade         bool                 `json:"canTrade"`
	CanWithdraw      bool                 `json:"canWithdraw"`
	CanDeposit       bool                 `json:"canDeposit"`
	UpdateTimeMillis int64                `json:"updateTime"`
	Balances         []AccountInfoBalance `json:"balances"`
}

type AggTradeStream

type AggTradeStream struct {
	// contains filtered or unexported fields
}

func OpenAggTradeStream

func OpenAggTradeStream(symbol string) (*AggTradeStream, error)

func (*AggTradeStream) Close

func (c *AggTradeStream) Close()

Close closes the AggTradeStream. If there is a subscribed channel it will no longer be sent any data. So it is up to the subscriber to stop attempting to read from the channel.

func (*AggTradeStream) Next

func (c *AggTradeStream) Next() (trade *StreamAggTrade, err error)

func (*AggTradeStream) Subscribe

func (c *AggTradeStream) Subscribe(channel chan AggTradeStreamEvent)

type AggTradeStreamEvent

type AggTradeStreamEvent struct {
	Err   error
	Trade *StreamAggTrade
}

type CancelOrderResponse

type CancelOrderResponse struct {
	Symbol            string `json:"symbol"`
	OrigClientOrderID string `json:"origClientOrderId"`
	OrderID           int64  `json:"orderId"`
	ClientOrderID     string `json:"clientOrderId"`
}

type CombinedStream24TickerAll

type CombinedStream24TickerAll struct {
	Stream  string            `json:"stream"`
	Tickers Stream24TickerAll `json:"data"`
}

type CombinedStreamAggTrade

type CombinedStreamAggTrade struct {
	Stream   string         `json:"stream"`
	AggTrade StreamAggTrade `json:"data"`
}

type CombinedStreamMessage

type CombinedStreamMessage struct {
	Stream string

	// Data for !ticker@arr messages.
	Tickers []Stream24Ticker

	// Data for <symbol>@aggTrade messages.
	AggTrade *StreamAggTrade

	// For a stream that is unknown, decode the data into an interface{}.
	UnknownData interface{}

	Bytes []byte
}

func DecodeRawStreamMessage

func DecodeRawStreamMessage(b []byte) (CombinedStreamMessage, error)

func (*CombinedStreamMessage) UnmarshalJSON

func (r *CombinedStreamMessage) UnmarshalJSON(b []byte) error

type CombinedStreamUnknown

type CombinedStreamUnknown struct {
	Stream string      `json:"stream"`
	Data   interface{} `json:"data"`
}

Generic data type for a combined stream when it is not known how to decode the stream.

type ExchangeInfoResponse

type ExchangeInfoResponse struct {
	Timezone         string `json:"timezone"`
	ServerTimeMillis int64  `json:"serverTime"`
	RateLimits       []struct {
		RateLimitType     string `json:"rateLimitType"`
		RateLimitInterval string `json"rateLimitInterval"`
		Limit             int64  `json"limit"`
	}
	Symbols []SymbolInfoResponse `json:"symbols"`

	RawResponse []byte `json:"-"`
}

func GetExchangeInfo

func GetExchangeInfo() (*ExchangeInfoResponse, error)

type ExchangeInfoService

type ExchangeInfoService struct {
	Symbols map[string]SymbolInfo
}

func NewExchangeInfoService

func NewExchangeInfoService() *ExchangeInfoService

func (*ExchangeInfoService) GetMinNotional

func (s *ExchangeInfoService) GetMinNotional(symbol string) (float64, error)

GetMinNotional returns the minimum notional value for the requested symbol.

func (*ExchangeInfoService) GetStepSize

func (s *ExchangeInfoService) GetStepSize(symbol string) (float64, error)

GetStepSize returns the step size for the requested symbol.

func (*ExchangeInfoService) GetSymbol

func (s *ExchangeInfoService) GetSymbol(symbol string) (info SymbolInfo, err error)

GetSymbol returns the symbol info object for the requested symbol.

func (*ExchangeInfoService) GetTickSize

func (s *ExchangeInfoService) GetTickSize(symbol string) (float64, error)

GetTickSize returns the tick size for the requested symbol.

func (*ExchangeInfoService) Update

func (s *ExchangeInfoService) Update() error

type OrderBookTickerResponse

type OrderBookTickerResponse struct {
	Symbol   string  `json:"symbol"`
	BidPrice float64 `json:"bidPrice,string"`
	BidQty   float64 `json:"bidQty,string"`
	AskPrice float64 `json:"askPrice,string"`
	AskQty   float64 `json:"askQty,string"`
}

type OrderParameters

type OrderParameters struct {
	Symbol           string
	Side             OrderSide
	Type             OrderType
	TimeInForce      TimeInForce
	Quantity         float64
	Price            float64
	NewClientOrderId string
}

type OrderSide

type OrderSide string
const (
	OrderSideBuy  OrderSide = "BUY"
	OrderSideSell OrderSide = "SELL"
)

type OrderStatus

type OrderStatus string

Order status / execution type.

const (
	OrderStatusNew             OrderStatus = "NEW"
	OrderStatusCanceled        OrderStatus = "CANCELED"
	OrderStatusFilled          OrderStatus = "FILLED"
	OrderStatusPartiallyFilled OrderStatus = "PARTIALLY_FILLED"
)

type OrderType

type OrderType string
const (
	OrderTypeLimit  OrderType = "LIMIT"
	OrderTypeMarket OrderType = "MARKET"
)

type PostOrderResponse

type PostOrderResponse struct {
	Symbol                string `json:"symbol"`
	OrderId               int64  `json:"orderId"`
	ClientOrderId         string `json:"clientOrderId"`
	TransactionTimeMillis int64  `json:"transactTime"`
}

TODO: Implement RESULT and FULL response types. Currently only ACK implemented.

type PriceTickerResponse

type PriceTickerResponse struct {
	Symbol string  `json:"symbol"`
	Price  float64 `json:"price,string"`
}

type QueryOrderResponse

type QueryOrderResponse struct {
	Symbol        string      `json:"symbol"`
	OrderId       int64       `json:"orderId"`
	ClientOrderId string      `json:"clientOrderId"`
	Price         float64     `json:"price,string"`
	OrigQty       float64     `json:"origQty,string"`
	ExecutedQty   float64     `json:"executeQty,string"`
	Status        OrderStatus `json:"status"`
	TimeInForce   TimeInForce `json:"timeInForce"`
	Type          OrderType   `json:"type"`
	Side          OrderSide   `json:"side"`
	StopPrice     float64     `json:"stopPrice,string"`
	IcebergQty    float64     `json:"icebergQty,string"`
	TimeMillis    int64       `json:"time"`
	IsWorking     bool        `json:"isWorking"`
}

type RestApiError

type RestApiError struct {
	StatusCode int
	Body       []byte
}

func NewRestApiErrorFromResponse

func NewRestApiErrorFromResponse(r *http.Response) *RestApiError

func (*RestApiError) Error

func (e *RestApiError) Error() string

type RestClient

type RestClient struct {
	// contains filtered or unexported fields
}

func NewAnonymousClient

func NewAnonymousClient() *RestClient

func NewAuthenticatedClient

func NewAuthenticatedClient(key string, secret string) *RestClient

func (*RestClient) BuildQueryString

func (c *RestClient) BuildQueryString(params map[string]interface{}) string

func (*RestClient) CancelOrder

func (c *RestClient) CancelOrder(symbol string, orderId int64) (*CancelOrderResponse, error)

func (*RestClient) Delete

func (c *RestClient) Delete(endpoint string, params map[string]interface{}) (*http.Response, error)

func (*RestClient) DoPut

func (c *RestClient) DoPut(path string) (*http.Response, error)

func (*RestClient) Get

func (c *RestClient) Get(endpoint string, params map[string]interface{}) (*http.Response, error)

Perform an unauthenticated GET request.

func (*RestClient) GetAccount

func (c *RestClient) GetAccount() (*AccountInfoResponse, error)

func (*RestClient) GetAllPriceTicker

func (c *RestClient) GetAllPriceTicker() ([]PriceTickerResponse, error)

Return the latest prices for all symbols.

func (*RestClient) GetAllSymbols

func (c *RestClient) GetAllSymbols() ([]string, error)

func (*RestClient) GetMytrades

func (c *RestClient) GetMytrades(symbol string, limit int64, fromId int64) ([]TradeResponse, error)

func (*RestClient) GetOrderBookTicker

func (c *RestClient) GetOrderBookTicker(symbol string) (OrderBookTickerResponse, error)

func (*RestClient) GetOrderByClientId

func (c *RestClient) GetOrderByClientId(symbol string, clientId string) (QueryOrderResponse, error)

func (*RestClient) GetOrderByOrderId

func (c *RestClient) GetOrderByOrderId(symbol string, orderId int64) (QueryOrderResponse, error)

func (*RestClient) GetPriceTicker

func (c *RestClient) GetPriceTicker(symbol string) (PriceTickerResponse, error)

func (*RestClient) GetUserDataStream

func (c *RestClient) GetUserDataStream() (string, error)

GetUserDataStream makes the get request for a user data stream listen key.

func (*RestClient) GetWithAuth

func (c *RestClient) GetWithAuth(endpoint string, params map[string]interface{}) (*http.Response, error)

Perform a fully authenticated GET request.

func (*RestClient) Post

func (c *RestClient) Post(endpoint string, params map[string]interface{}) (*http.Response, error)

func (*RestClient) PostOrder

func (c *RestClient) PostOrder(order OrderParameters) (*http.Response, error)

func (*RestClient) PostWithApiKey

func (c *RestClient) PostWithApiKey(endpoint string, params map[string]interface{}) (*http.Response, error)

Send a POST request with only the API key and no other authentication.

func (*RestClient) PutUserStreamKeepAlive

func (c *RestClient) PutUserStreamKeepAlive(listenKey string) error

type Stream24Ticker

type Stream24Ticker struct {
	EventType            string  `json:"e"`
	EventTime            int64   `json:"E"`
	Symbol               string  `json:"s"`
	PriceChange          float64 `json:"p,string"`
	PriceChangePercent   float64 `json:"P,string"`
	WeightedAveragePrice float64 `json:"w,string"`
	PreviousDayClose     float64 `json:"x,string"`
	CurrentDayClose      float64 `json:"c,string"`
	CloseTradeQuantity   float64 `json:"Q,string"`
	Bid                  float64 `json:"b,string"`
	BidQuantity          float64 `json:"B,string"`
	Ask                  float64 `json:"a,string"`
	AskQuantity          float64 `json:"A,string"`
	OpenPrice            float64 `json:"o,string"`
	HighPrice            float64 `json:"h,string"`
	LowPrice             float64 `json:"l,string"`
	TotalBaseVolume      float64 `json:"v,string"`
	TotalQuoteVolume     float64 `json:"q,string"`
	StatsOpenTime        int64   `json:"O"`
	StatsCloseTime       int64   `json:"C"`
	FirstTradeID         int64   `json:"F"`
	LastTradeID          int64   `json:"L"`
	TotalNumberTrades    int64   `json:"n"`
}

Stream name: <symbol>@ticker.

func (*Stream24Ticker) Timestamp

func (t *Stream24Ticker) Timestamp() time.Time

type Stream24TickerAll

type Stream24TickerAll []Stream24Ticker

Stream name: !ticker@arr.

type StreamAccountInfoBalance

type StreamAccountInfoBalance struct {
	Asset  string  `json:"a"`
	Free   float64 `json:"f,string"`
	Locked float64 `json:"l,string"`
}

type StreamAggTrade

type StreamAggTrade struct {
	EventType       string  `json:"e"`
	EventTimeMillis int64   `json:"E"`
	Symbol          string  `json:"s"`
	TradeID         int64   `json:"a"`
	Price           float64 `json:"p,string"`
	Quantity        float64 `json:"q,string"`
	FirstTradeID    int64   `json:"f"`
	LastTradeID     int64   `json:"l"`
	TradeTimeMillis int64   `json:"T"`
	BuyerMaker      bool    `json:"m"`
	Ignored         bool    `json:"M"`
}

Stream name: <symbol>@aggTrade.

func (*StreamAggTrade) QuoteQuantity

func (t *StreamAggTrade) QuoteQuantity() float64

func (*StreamAggTrade) Timestamp

func (t *StreamAggTrade) Timestamp() time.Time

type StreamClient

type StreamClient struct {
	Conn *websocket.Conn
}

func NewStreamClient

func NewStreamClient() *StreamClient

func OpenSingleStream

func OpenSingleStream(stream string) (*StreamClient, error)

func OpenUserStream

func OpenUserStream(restClient *RestClient) (*StreamClient, error)

func (*StreamClient) Close

func (c *StreamClient) Close()

func (*StreamClient) Connect

func (c *StreamClient) Connect(streams ...string) (err error)

func (*StreamClient) ConnectSingle

func (c *StreamClient) ConnectSingle(stream string) (err error)

func (*StreamClient) Next

func (c *StreamClient) Next() (messageType int, body []byte, err error)

func (*StreamClient) NextJSON

func (c *StreamClient) NextJSON() (interface{}, error)

Next reads the next message into a generic map.

type StreamExecutionReport

type StreamExecutionReport struct {
	EventType                string      `json:"e"`
	EventTimeMillis          int64       `json:"E"`
	Symbol                   string      `json:"s"`
	ClientOrderID            string      `json:"c"`
	Side                     OrderSide   `json:"S"`
	OrderType                string      `json:"o"`
	TimeInForce              string      `json:"f"`
	Quantity                 float64     `json:"q,string"`
	Price                    float64     `json:"p,string"`
	StopPrice                float64     `json:"P,string"`
	IcebergQuantity          float64     `json:"F,string"`
	OriginalClientOrderID    string      `json:"C"`
	CurrentExecutionType     OrderStatus `json:"x"`
	CurrentOrderStatus       OrderStatus `json:"X"`
	OrderRejectReason        string      `json:"r"`
	OrderID                  int64       `json:"i"`
	LastExecutedQuantity     float64     `json:"l,string"`
	CumulativeFilledQuantity float64     `json:"z,string"`
	LastExecutedPrice        float64     `json:"L,string"`
	CommissionAmount         float64     `json:"n,string"`
	CommissionAsset          string      `json:"N"`
	TransactionTimeMillis    int64       `json:"T"`
	TradeID                  int64       `json:"t"`
	IsWorking                bool        `json:"w"`
	IsMaker                  bool        `json:"m"`

	// Ignore values that we have to include here due to the case insensitivity
	// of the Go JSON unmarshaller.
	Ignore0 int64       `json:"O,-"`
	Ignore1 interface{} `json:"I,-"`
}

type StreamOutboundAccountInfo

type StreamOutboundAccountInfo struct {
	EventType             string                     `json:"e"`
	EventTimeMillis       int64                      `json:"E"`
	MakerCommissionRate   int64                      `json:"m"`
	TakerCommissionRate   int64                      `json:"t"`
	BuyerCommissionRate   int64                      `json:"b"`
	SellerCommissionRate  int64                      `json:"s"`
	CanTrade              bool                       `json:"T"`
	CanWithdraw           bool                       `json:"W"`
	CanDeposit            bool                       `json:"D"`
	LastAccountUpdateTime int64                      `json:"u"`
	Balances              []StreamAccountInfoBalance `json:"B"`
}

type SymbolFilterResponse

type SymbolFilterResponse struct {
	FilterType  string  `json:"filterType"`
	MinPrice    float64 `json:"minPrice,string"`
	MaxPrice    float64 `json:"maxPrice,string"`
	TickSize    float64 `json:"tickSize,string"`
	MinQty      float64 `json:"minQty,string"`
	MaxQty      float64 `json:"maxQty,string"`
	StepSize    float64 `json:"stepSize,string"`
	MinNotional float64 `json:"minNotional,string"`
}

type SymbolInfo

type SymbolInfo struct {
	TickSize    float64
	StepSize    float64
	MinNotional float64
}

type SymbolInfoResponse

type SymbolInfoResponse struct {
	Symbol              string                 `json:"symbol"`
	Status              string                 `json:"status"`
	BaseAsset           string                 `json:"baseAsset"`
	BaseAssetPrecision  int64                  `json:"baseAssetPrecision`
	QuoteAsset          string                 `json:"quoteAsset"`
	QuoteAssetPrecision int64                  `json:"quoteAssetPrecision"`
	OrderTypes          []string               `json:"orderTypes"`
	IcebergAllowed      bool                   `json:"icebergAllowed"`
	Filters             []SymbolFilterResponse `json:"filters"`
}

type TimeInForce

type TimeInForce string
const (
	TimeInForceGTC TimeInForce = "GTC"
	TimeInForceIOC TimeInForce = "IOC"
	TimeInForceFOK TimeInForce = "FOK"
)

type TradeResponse

type TradeResponse struct {
	ID              int64   `json:"id"`
	OrderID         int64   `json:"orderId"`
	Price           float64 `json:"price,string"`
	Quantity        float64 `json:"qty,string"`
	Commission      float64 `json:"commission,string"`
	CommissionAsset string  `json:"commissionAsset"`
	TimeMillis      int64   `json:"time"`
	IsBuyer         bool    `json:"isBuyer"`
	IsMaker         bool    `json:"isMaker"`
	IsBestMatch     bool    `json:"isBestMatch"`
}

GET /api/v3/myTrades

type UserDataStreamResponse

type UserDataStreamResponse struct {
	ListenKey string `json:"listenKey"`
}

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL