Skip to content

Commit a05599f

Browse files
hveirasbalthazar
authored andcommitted
Support for aggregate trades and raw trades in websocket interface. (#95)
1 parent bd703a1 commit a05599f

File tree

4 files changed

+47
-4
lines changed

4 files changed

+47
-4
lines changed

README.md

Lines changed: 30 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,7 +71,8 @@ Following examples will use the `await` form, which requires some configuration
7171
- [ticker](#ticker)
7272
- [allTickers](#alltickers)
7373
- [candles](#candles-1)
74-
- [trades](#trades)
74+
- [aggTrades](#aggtrades-1)
75+
- [trades](#trades-1)
7576
- [user](#user)
7677
- [ErrorCodes](#errorcodes)
7778

@@ -1031,7 +1032,7 @@ client.ws.candles('ETHBTC', '1m', candle => {
10311032

10321033
#### trades
10331034

1034-
Live trade data feed. Pass either a single symbol string or an array of symbols.
1035+
Live trade data feed. Pass either a single symbol string or an array of symbols. The trade streams push raw trade information; each trade has a unique buyer and seller.
10351036

10361037
```js
10371038
client.ws.trades(['ETHBTC', 'BNBBTC'], trade => {
@@ -1042,6 +1043,33 @@ client.ws.trades(['ETHBTC', 'BNBBTC'], trade => {
10421043
<details>
10431044
<summary>Output</summary>
10441045

1046+
```js
1047+
{
1048+
eventType: 'trade',
1049+
eventTime: 1508614495052,
1050+
symbol: 'ETHBTC',
1051+
price: '0.04923600',
1052+
quantity: '3.43500000',
1053+
maker: false,
1054+
tradeId: 2148226
1055+
}
1056+
```
1057+
1058+
</details>
1059+
1060+
#### aggTrades
1061+
1062+
Live trade data feed. Pass either a single symbol string or an array of symbols. The aggregate trade streams push trade information that is aggregated for a single taker order.
1063+
1064+
```js
1065+
client.ws.aggTrades(['ETHBTC', 'BNBBTC'], trade => {
1066+
console.log(trade)
1067+
})
1068+
```
1069+
1070+
<details>
1071+
<summary>Output</summary>
1072+
10451073
```js
10461074
{
10471075
eventType: 'aggTrade',

index.d.ts

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,7 @@ declare module 'binance-api-node' {
6262
allTickers: (callback: (tickers: Ticker[]) => void) => Function;
6363
candles: (pair: string, period: string, callback: (ticker: Candle) => void) => Function;
6464
trades: (pairs: string[], callback: (trade: Trade) => void) => Function;
65+
aggTrades: (pairs: string[], callback: (trade: Trade) => void) => Function;
6566
user: ( callback: (msg: OutboundAccountInfo|ExecutionReport) => void) => Function;
6667
}
6768

src/websocket.js

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -162,9 +162,9 @@ const allTickers = cb => {
162162
return (options) => w.close(1000, 'Close handle was called', { keepClosed: true, ...options })
163163
}
164164

165-
const trades = (payload, cb) => {
165+
const tradesInternal = (payload, streamName, cb) => {
166166
const cache = (Array.isArray(payload) ? payload : [payload]).map(symbol => {
167-
const w = openWebSocket(`${BASE}/${symbol.toLowerCase()}@aggTrade`)
167+
const w = openWebSocket(`${BASE}/${symbol.toLowerCase()}@${streamName}`)
168168
w.onmessage = msg => {
169169
const {
170170
e: eventType,
@@ -195,6 +195,10 @@ const trades = (payload, cb) => {
195195
return (options) => cache.forEach(w => w.close(1000, 'Close handle was called', { keepClosed: true, ...options }))
196196
}
197197

198+
const aggTrades = (payload, cb) => tradesInternal(payload, 'aggTrade', cb)
199+
200+
const trades = (payload, cb) => tradesInternal(payload, 'trade', cb)
201+
198202
const userTransforms = {
199203
outboundAccountInfo: m => ({
200204
eventType: 'account',
@@ -271,6 +275,7 @@ export default opts => ({
271275
partialDepth,
272276
candles,
273277
trades,
278+
aggTrades,
274279
ticker,
275280
allTickers,
276281
user: user(opts),

test/index.js

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -183,6 +183,15 @@ test('[WS] trades', t => {
183183
})
184184
})
185185

186+
test('[WS] aggregate trades', t => {
187+
return new Promise(resolve => {
188+
client.ws.aggTrades(['BNBBTC', 'ETHBTC', 'BNTBTC'], trade => {
189+
checkFields(t, trade, ['eventType', 'tradeId', 'quantity', 'price', 'symbol'])
190+
resolve()
191+
})
192+
})
193+
})
194+
186195
test('[WS] userEvents', t => {
187196
const accountPayload = {
188197
e: 'outboundAccountInfo',

0 commit comments

Comments
 (0)