viewblock / binance-api-node Goto Github PK
View Code? Open in Web Editor NEW:chart: A complete and heavily tested wrapper with typings for the Binance API.
:chart: A complete and heavily tested wrapper with typings for the Binance API.
Today I tried to sell XLM using binance-api-node. I tried to execute it this way:
const Binance = require('binance-api-node').default;
const client = Binance({
apiKey: process.env.BINANCE_API_KEY,
apiSecret: process.env.BINANCE_API_SECRET
});
const order = {
symbol: 'XLM',
side: 'SELL',
type: 'LIMIT',
quantity: 48,
price: 0.00031337
};
client.order(order).then(response => console.log('Success'));
Unfortunately I am always receiving the following error:
Error: Invalid symbol.
at D:\dev\projects\bennyn\trading-bot-framework\node_modules\binance-api-node\dist\http.js:47:13
at
at process._tickCallback (internal/process/next_tick.js:188:7)
What am I doing wrong?
I logged error.code
(https://github.com/binance-exchange/binance-official-api-docs/blob/master/errors.md) but it's undefined
. 😢
Binance is pretty strict about the timestamp which is sent to the server on every request.
To avoid the "Request used an outdated timestamp" error, we could sync our own time with an online atomic clock service to determine our clock drift (which can then be used to adjust the timestamps).
When examining multiple markets we should have a secondary "symbol" return parameter so we can see which update this is for, at the moment we can only get depth.
Is there anyway to determine the state of the websocket (closed, connecting, connected, ..)?
How do we import this library using const variable = require('library')
syntax?
If an order is placed which is immediately rejected (for example, insufficient balance) - there doesn't appear to be a way to catch it?
The returned promise results in a permanent pending
state - even though internally something has been rejected.
I've tried to catch it every which way i could think of, but the code never makes it out that far.
For example, here's all the ways i've tried to catch the error at my level (mind the craziness, i was starting to just try everything possible)
// Wrap whole thing in TRY/CATCH
try {
var p = new Promise(async resolve => {
let result = await authedClient.order(params);
// WRAP result of .order call in TRY/CATCH
try {
result = await authedClient.order(params);
} catch(e) {
// THIS IS NEVER REACHED
console.log("Error:", e);
}
resolve(result);
})
.catch(function(reason) {
// THIS IS ALSO NEVER REACHED
console.log("Error:", e);
})
.finally(()=>{
// This is also never reached
console.log("Finally")
})
// wrap the whole promise within a Promise.all call
Promise.all([p]).then( () => console.log("NEVER REACHED"))
} catch(e) {
// THIS IS NEVER REACHED
debugger;
}
// Returned promise P is stuck in permanent `pending` state - even though internally it has failed
UnhandledPromiseRejectionWarning: Error: Timestamp for this request was 1000ms ahead of the server's time.
There is some situations that timestamp can't pass the binance server validation, I think that we can use server time to avoid that.
client.prices() return an empty object.
I wrote some method typings which were missing.
declare module 'binance-api-node' {
interface MyTrade {
id: number;
orderId: number;
price: string;
qty: string;
commission: string;
commissionAsset: string;
time: number;
isBuyer: boolean;
isMaker: boolean;
isBestMatch: boolean;
}
interface QueryOrderResult {
symbol: string;
orderId: number;
clientOrderId: string;
price: string;
origQty: string;
executedQty: string;
status: string;
timeInForce: string;
type: string;
side: string;
stopPrice: string;
icebergQty: string;
time: number;
isWorking: boolean;
}
interface CancelOrderResult {
symbol: string;
origClientOrderId: string;
orderId: number;
clientOrderId: string;
}
interface Binance {
myTrades(params: { symbol: string, limit?: number, fromId?: number }): Promise<MyTrade[]>;
getOrder(params: { symbol: string; orderId: number }): Promise<QueryOrderResult>;
cancelOrder(params: { symbol: string; orderId: number }): Promise<CancelOrderResult>;
openOrders(params: { symbol: string }): Promise<QueryOrderResult[]>;
}
}
I can make a PR if needed.
{ msg: 'The operation failed, please try again later.',
success: false,
id: 'de01da4a695745e7911789b06dac5c3e' }
Why "Kline start time" and "Kline close time" are not isset in candles ws stream responds?
docs ref: https://github.com/binance-exchange/binance-official-api-docs/blob/master/web-socket-streams.md#klinecandlestick-streams
{ msg: 'The operation failed, please try again later.',
success: false,
id: 'bb1f91a7bd1b448ca7f8143b7dcac8e2' }
Hey, I'm getting a 400 on the user info stream (https://stream.binance.com:9443/ws/.....).
code:
this.userInfoFeed = await (this.api.client as any).ws.user((user) => {
console.log(user);
});
Getting this error but not sure where from:
error: Unhandled Rejection at: Promise Promise {
<rejected> Error: An unknown error occured while processing the request.
at /home/jafri/binance-api/node_modules/binance-api-node/dist/http.js:47:13
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7) } Error: An unknown error occured while processing the request.
at /home/jafri/binance-api/node_modules/binance-api-node/dist/http.js:47:13
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7)
Hi,
Can we get support for /api/v1/exchangeInfo
endpoint that provides information about the LOT_SIZE and other exchange info on every pair.
Thanks
Is this intended? The documentation states that the output of this test call will return the same output as .order() which is not the case. Is the documentation wrong or is this an oversight? Awesome library thank you!
I am getting error "Error: Account has insufficient balance for requested action" when executing the order function, below is the implemented code example.
import Binance from 'binance-api-node'
const SIDE_OPTIONS = {
BUY: 'BUY',
SELL: 'SELL',
};
function runBinance(apiKey, apiSecret) {
return Binance({
apiKey,
apiSecret,
});
}
export async function buyOrder(
binanceApiKey,
binanceApiSecret,
symbol,
quantity,
price,
type,
) {
try {
await runBinance(binanceApiKey, binanceApiSecret)
.order({
symbol,
side: SIDE_OPTIONS.BUY,
quantity,
type,
price,
});
return;
} catch (error) {
return {
error: {
status: 400,
message: error,
}
}
}
}
Can anyone tell me if the test flag is working anyway? I do not want to use resources from my wallet for now.
Hugely appreciate the work on this module, it's a fantastic way to interface with the binance API.
Is there a way to determine at what price a market order was executed without invoking the myTrades
endpoint? It seems that getOrder
always returns 0.000
for the price
attribute in the case of a market order (which makes data-structure-wise given that it is a market order, it's just inconvenient for analytical purposes)
I gather that this question is probably more closely related to the actual workings of the API itself, rather than this specific client; but for future reference and documentation purposes it surely couldn't hurt to get a clear picture of how this would work.
I'm trying to use the websockets:
const client = Binance()
const disconnect = client.ws.ticker('ETHBTC', ticker => {
console.log(ticker)
})
and I'm running into some unexpected errors:
WebSocket connection to 'wss://stream.binance.com:9443/ws/ethbtc@ticker' failed: Error during WebSocket handshake: Sent non-empty 'Sec-WebSocket-Protocol' header but no response was received
Not sure how to go about fixing this, though I tried uninstalling binance-api-node
and installing again. Using npm
version 5.6.0
and node
version v9.4.0
.
I'm getting the following error when placing a purchase order
ERROR: TIMESTAMP FOR THIS REQUEST WAS 1000MS AHEAD OF THE SERVER'S TIME.
return new Binance({
apiKey,
apiSecret,
useServerTime: true, // It should solve the above problem.
});
Has anyone had this problem while using it in production? In tests everything is OK, but when I change orderTest to order the above error occurs.
Sending data to my server running:
{
"symbol": "LTCETH",
"quantity": 0.00190000,
"userId": "5ac9c2ad41a43a3770beb263"
}
Reproduce the issue with this code :
import Binance from 'binance-api-node';
const client = Binance({
apiKey: 'Igj71woxxxxxxxxxxxxxxxxx',
apiSecret: 'gkFWlxxxxxxxxxxxxxxxxx'
});
let clean;
setInterval(async () => {
clean && clean();
clean = await client.ws.user(() => {});
}, 5e3);
Once in a while (about 1 out of 5 times) the server responds with a 500 status code and this happens :
(node:22103) UnhandledPromiseRejectionWarning: Unhandled promise rejection (rejection id: 1): Error: An unknown error occured while processing the request.
It comes from the closeDataStream call
https://github.com/HyperCubeProject/binance-api-node/blob/47c65c1e5cb8659b6e0f16ad49e6c882413aaa75/src/websocket.js#L245
and the exact unhandled promise rejection comes from here :
https://github.com/HyperCubeProject/binance-api-node/blob/47c65c1e5cb8659b6e0f16ad49e6c882413aaa75/src/http.js#L21-L28
As a temporary workaround I just completely removed the closeDataStream() call since it seems it isn't really necessary. It turns out the server will return the same listenKey on getDataStream() call if it is still alive and you haven't deleted it.
On aggrTrades, is quantity quoted in the base currency or the quote currency?
For instance, in a trade of ETHBTC, price == 0.091077
and quantity == 0.316
- is it BTC or ETH?
any idea why do I get this error?
{ Error: Filter failure: PRICE_FILTER
at C:\Users\herve\OneDrive\Documents\GitHub\xxx\node_modules\binance-api-node\dist\http.js:47:19
at <anonymous>
at process._tickCallback (internal/process/next_tick.js:188:7) code: -1013 }
Updated from 0.5.0 to 0.5.2, trader won't start.
Error:
C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:105
var _ref4 = _asyncToGenerator( /*#__PURE__*/regeneratorRuntime.mark(function _callee(path) {
^
ReferenceError: regeneratorRuntime is not defined
at C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:105:49
at privateCall (C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:168:4)
at exports.default (C:\Trader\Logic\node_modules\binance-api-node\dist\http.js:235:15)
at new exports.default (C:\Trader\Logic\node_modules\binance-api-node\dist\index.js:21:42)
at C:\Trader\Logic\Trader_Crypto.js:74:53
at FSReqWrap.readFileAfterClose [as oncomplete] (fs.js:511:3)
Downgraded back to 0.5.0, working again.
https://github.com/binance-exchange/binance-api-node/blob/master/index.d.ts#L45
should be
depth: (pair: string|string[], callback: (depth: Depth) => void) => Function;
In next example clean() function fired error
(node:45) UnhandledPromiseRejectionWarning: TypeError: Cannot read property 'forEach' of undefined
const clean = client.ws.depth('ETHBTC', depth => {
console.log(depth)
})
// After you're done
clean()
According to official binanace documentation WebSocket depth stream recieves in payload "First update ID in event" as "U" key, but in api wrapper we have only "u" key "Final update ID in event".
So there are not any possibility to update local order book by using data from this stream.
Also I can't verify that sequence data from depth stream are consistent and there aren't any packet wich would be miss
Also I can't verify that sequence of data from depth stream are continuous and there aren't any packet which was missed. If I recieve first packet with updateId=100 and next with updateId=108 I will not rely on this sequence? because I don't know there were between these packets others that were missed.
But If I got these packets with additional field firstUpdateId and finalUpdateId (instead of updateId) I can verify this.
For example, two packets
{firstUpdateId: 95, finalUpdateId: 100}
{fistUpdateId: 101, finalUpdateId: 108}
In this case I see that sequence of changes is continuous: 95-100_101-108
I propose to modify depth method something like this:
File: binance-api-node/src/websocket.js
const depth = (payload, cb) => {
const cache = (Array.isArray(payload) ? payload : [payload]).map(symbol => {
const w = new WebSocket(`${BASE}/${symbol.toLowerCase()}@depth`)
w.on('message', msg => {
const {
e: eventType,
E: eventTime,
s: symbol,
// u: updateId, // - remove
U: firstUpdateId, // + add
u: finalUpdateId, // + add
b: bidDepth,
a: askDepth,
} = JSON.parse(msg)
cb({
eventType,
eventTime,
symbol,
// updateId, // - remove
firstUpdateId, // + add
finalUpdateId, // + add
bidDepth: bidDepth.map(b => zip(['price', 'quantity'], b)),
askDepth: askDepth.map(a => zip(['price', 'quantity'], a)),
})
})
return w
})
return () => cache.forEach(w => w.close())
}
GitHub releases and tags only show up to version v0.7.4 but we are already at v0.7.6.
Hey,
i really like that you ported the project to async.
But i cant get it running.
What is it, i have to do to compile the project correctly?
After i installed binance-api.node and running a server.js file with the following code
import Binance from 'binance-api-node'
i get the error message
>node server.js [±master ●●]
/home/mod/code/projects/traders-friend/api/app/server.js:1
(function (exports, require, module, __filename, __dirname) { import Binance from 'binance-api-node'
^^^^^^^
SyntaxError: Unexpected identifier
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:152:10)
at Module._compile (module.js:605:28)
at Object.Module._extensions..js (module.js:652:10)
at Module.load (module.js:560:32)
at tryModuleLoad (module.js:503:12)
at Function.Module._load (module.js:495:3)
at Function.Module.runMain (module.js:682:10)
at startup (bootstrap_node.js:191:16)
at bootstrap_node.js:613:3
i am running node version 9.0.0.
thx in advance!
The official doc says :
Keepalive a user data stream to prevent a time out. User data streams will close after 60 minutes. It's recommended to send a ping about every 30 minutes.
Isn't it a bit too much to do it every 42 seconds ? :/
i'm use vue-cli boilerplate (https://github.com/vuejs/vue-cli)
after vue init webpack client
a'm install the library:
yarn add binance-api-node
yarn run dev
WARNING Compiled with 2 warnings 17:
These dependencies were not found:
To install them, you can run: npm install --save bufferutil utf-8-validate
yarn add bufferutil utf-8-validate
yarn run dev
WARNING Compiled with 2 warnings 17:49
warning in ./node_modules/bindings/bindings.js
81:22-40 Critical dependency: the request of a dependency is an expression
warning in ./node_modules/bindings/bindings.js
81:43-53 Critical dependency: the request of a dependency is an expression
how fix that error?
I tested the Binance API in a real-world scenario where internet connections can get interrupted. In these cases, the "binance-api-node" library fails with a Unhandled promise rejection
which can cause Node.js application crashes.
Here is a little code demo which shows the issue:
const Binance = require('binance-api-node').default
const dotenv = require('dotenv')
if (!process.env.BINANCE_API_KEY) dotenv.load()
process.on('unhandledRejection', error => {
console.error('Catched Binance error', error)
process.exit(1)
})
const client = Binance({
apiKey: process.env.BINANCE_API_KEY,
apiSecret: process.env.BINANCE_API_SECRET,
})
async function getOrder() {
const order = await client.getOrder({symbol: 'TRXETH', orderId: 20123533})
console.log(`order (${Date.now()})`, order)
setTimeout(getOrder, 2000)
}
getOrder()
Just run the code and turn off your internet connection (airplane mode) while the code is running.
We need to come up with a concept, where this scenario is detected and where Promises will be continued once internet is back again.
When the Node.js server (for some reason) cannot reach the Binance server, and you try opening a websocket (say for example ws.depth
), the function call throws an Unhandled Promise Rejection
leading to the Node.js server to crash.
Looking at the Websocket documentation this happens when the event error is emitted by the underlying socket. Ideally, the function that tries to open a websocket should try and handle the error event by subscribing to the websocket_instance.on("error", message => {...})
callback, which is missing in every function in the websocket.js
module.
There is no way other than process.on('uncaughtException', error => {...})
to catch such errors. In an ideal case, the functions in websocket.js
should return a promise, that should be resolved only when the websocket connection is successfully established, or else should send a rejection. Something like below
const depth = (payload, cb) => {
return new Promise((fulfill, reject) => {
const cache = [];
let count = 0;
let payload = Array.isArray(payload) ? payload : [payload];
(payload).forEach(symbol => {
const w = new WebSocket(`${BASE}/${symbol.toLowerCase()}@depth`)
cache.push(w);
w.on('open', msg => {
count++;
if (count === payload.length) fulfill(() => cache.forEach(w => w.close()));
});
w.on('message', msg => {
const {
e: eventType,
E: eventTime,
s: symbol,
u: finalUpdateId,
U: firstUpdateId,
b: bidDepth,
a: askDepth,
} = JSON.parse(msg)
cb({
eventType,
eventTime,
symbol,
firstUpdateId,
finalUpdateId,
bidDepth: bidDepth.map(b => zip(['price', 'quantity'], b)),
askDepth: askDepth.map(a => zip(['price', 'quantity'], a)),
})
});
w.on('error', msg => {
reject(msg);
});
})
});
}
I have seen that the Binance API provides error codes. However, I cannot access them using error.code
. Is binance-api-node
eating up these codes from the backend response?
Currently I am checking errors like this error.message === 'Filter failure: LOT_SIZE'
& error.message === 'Account has insufficient balance for requested action.'
, but I would like to check against error codes because messages are more likely to change.
When trying this sample in node js:
import Binance from 'binance-api-node'
const client = Binance()
client.time().then(time => console.log(time))
I get this error:
import Binance from 'binance-api-node'
^^^^^^
SyntaxError: Unexpected token import
at createScript (vm.js:80:10)
at Object.runInThisContext (vm.js:139:10)
at Module._compile (module.js:599:28)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
Upon investigating on the net, I found that node js doesn't natively support ES6.
One workaround is to use require instead:
const Binance = require('binance-api-node')
const client = Binance()
client.time().then(time => console.log(time))
But this then gets me this error:
const client = Binance()
^
TypeError: Binance is not a function
at Object.<anonymous> (C:\Trader\Logic\Random\test.js:9:16)
at Module._compile (module.js:635:30)
at Object.Module._extensions..js (module.js:646:10)
at Module.load (module.js:554:32)
at tryModuleLoad (module.js:497:12)
at Function.Module._load (module.js:489:3)
at Function.Module.runMain (module.js:676:10)
at startup (bootstrap_node.js:187:16)
at bootstrap_node.js:608:3
Another workaround would be to use babel, but I don't have any knowledge regarding that.
Is there an easy fix?
Thanks,
Wannes
Currently if a connection is created, there is no way to disconnect it.
For a long running application, which may need to reconnect this will slowly eat up a large amount of memory.
// FROM websocket.js line ~103
var trades = function trades(payload, cb) {
return (Array.isArray(payload) ? payload : [payload]).forEach(function (symbol) {
var w = new _ws2.default(BASE + '/' + symbol.toLowerCase() + '@aggTrade');
w.on('message', function (msg) {
var _JSON$parse3 = JSON.parse(msg),
eventType = _JSON$parse3.e,
eventTime = _JSON$parse3.E,
symbol = _JSON$parse3.s,
price = _JSON$parse3.p,
quantity = _JSON$parse3.q,
maker = _JSON$parse3.m,
tradeId = _JSON$parse3.a;
cb({
eventType: eventType,
eventTime: eventTime,
symbol: symbol,
price: price,
quantity: quantity,
maker: maker,
tradeId: tradeId
});
});
});
};
The returned value is undefined
since forEach
does not return anything.
Is there a recommended way of closing out the connection?
I am unable to get the basic examples working. The documentation doesn't help setting up the basic environment.
Tried the @https://github.com/stefanpenner/es6-promise pollyfill but doesn't work. Are there steps to setup basic environment to run the examples?
Hi @balthazar, I am a big fan of your Binance API. It's really easy to handle and I like that it uses Promises.
The only thing which I am missing so far are type definitions for TypeScript. I would therefore like to create TypeScript definitions for this library and contribute them in various Pull Request (one for each section). But before I start with it I would like to know if you think that it is a good thing to do?
Best,
Benny
I'm getting a 400 when trying to open a websocket. I'm using
client.ws.depth('ETHBTC', depth => { console.log(depth) })
to test, but getting a 400 response. I tested the url it is creating with Simple Websocket Client. The wss:// protocol seems to be getting changed into https:// protocol somehow. In the Chrome Dev Tools I found the network request and it is "https://stream.binance.com:9443/ws/ethbtc@depth". So, in Simple Websocket Client extension I changed "https://" to "wss://" and it works. Just don't know how to fix it in this lib since it calls other dependencies that seem to be transforming the protocol and causing 400. Maybe I am doing something wrong.
Great library, I have a minor gripe.
It appears there is no way to get historical trade data.
There exist an command to access the /trades
REST API point, but not /historicalTrades
which accepts an additional fromId
parameter which acts as a cursor / page-number
Relevant API documentation:
https://github.com/binance-exchange/binance-official-api-docs/blob/master/rest-api.md#old-trade-lookup-market_data
Any idea why this issue?
PURCHASE ERROR: Error: Timestamp for this request is outside of the recvWindow.
PS: I made sure my Windows time was updated
It seems that in binance-api-node
the dailyStats
method requires a symbol to be passed in, however a symbol is optional when accessing the API directly, and works as a way to access all trading pair stats.
When opening a WebSocket connection, I get a clean
handle which then can be used to close all open WebSocket connections at once:
return () => cache.forEach(w => w.close(1000, 'Close handle was called', { keepClosed: true }))
That's a great encapsulation but it also prevents me from closing individual WebSocket connections.
In my application I am watching the candles of different trading symbols (ETHBTC, BNBBTC, BNTBTC, ...). Sometimes I want to stop watching a symbol (like BNBBTC) but I cannot stop this WebSocket connection without stopping all the others too. We should find a solution to it. WDYT, @balthazar?
I would like to discuss the idea of mapping error codes into error types.
In my TypeScript application I created an enum list for that purpose:
enum BinanceErrorCode {
UNKNOWN = -1000,
DISCONNECTED = -1001,
UNAUTHORIZED = -1002,
TOO_MANY_REQUESTS = -1003,
UNEXPECTED_RESP = -1006,
TIMEOUT = -1007,
INVALID_MESSAGE = -1013,
UNKNOWN_ORDER_COMPOSITION = -1014,
TOO_MANY_ORDERS = -1015,
SERVICE_SHUTTING_DOWN = -1016,
UNSUPPORTED_OPERATION = -1020,
INVALID_TIMESTAMP = -1021,
INVALID_SIGNATURE = -1022,
ILLEGAL_CHARS = -1100,
TOO_MANY_PARAMETERS = -1101,
MANDATORY_PARAM_EMPTY_OR_MALFORMED = -1102,
UNKNOWN_PARAM = -1103,
UNREAD_PARAMETERS = -1104,
PARAM_EMPTY = -1105,
PARAM_NOT_REQUIRED = -1106,
NO_DEPTH = -1112,
TIF_NOT_REQUIRED = -1114,
INVALID_TIF = -1115,
INVALID_ORDER_TYPE = -1116,
INVALID_SIDE = -1117,
EMPTY_NEW_CL_ORD_ID = -1118,
EMPTY_ORG_CL_ORD_ID = -1119,
BAD_INTERVAL = -1120,
BAD_SYMBOL = -1121,
INVALID_LISTEN_KEY = -1125,
MORE_THAN_XX_HOURS = -1127,
OPTIONAL_PARAMS_BAD_COMBO = -1128,
INVALID_PARAMETER = -1130,
BAD_API_ID = -2008,
DUPLICATE_API_KEY_DESC = -2009,
INSUFFICIENT_BALANCE = -2010,
CANCEL_ALL_FAIL = -2012,
NO_SUCH_ORDER = -2013,
BAD_API_KEY_FMT = -2014,
REJECTED_MBX_KEY = -2015,
}
export default BinanceErrorCode
With binance-api-node v0.7.1 it gives me the ability to do the following:
if (error.code === BinanceErrorCode.INSUFFICIENT_BALANCE) {
this.logger.warn(`Operation "SELL" for symbol "${pair.asString()}" failed. Account has insufficient balance."`)
}
Instead of maintaining my own enum list it would be great if we can expose something like this from "binance-api-node". We would need to find a smart way on how to export such list of codes.
Telling from the error documentation there should be also -9xxx
error codes which I haven't seen in production yet. The docs state that these are being used for filter errors such as LOT_SIZE
but I get error message "Filter failure: LOT_SIZE" along with error code "-1013" (INVALID_MESSAGE
). 🐺
Not sure if this is intended, but is the orderTest
function supposed to return an empty object {}
?
Using the code:
console.log(await client.orderTest({
symbol: 'ADABTC',
side: 'BUY',
quantity: 100,
price: 0.0002,
recvWindow: 5000
}))
As title.
I don't see a way to get all recent or open orders on my account. I see how to do that per symbol but is there a way to get all orders regardless of symbol?
is it possible to use http proxy with this module ? I tried to use fetch-with-proxy but that didn't seem to work either. Any pointers please ?
thanks.
Sometimes the websocket stops receiving data, or times out.
Would it be possible to give us an easy way to disconnect, and afterwards reconnect, the existing socket?
Hello, when I make a public api call (ping, time or exchangeInfo, etc..) I receive a CORS error and the logged error is 'TypeError: Failed to fetch'. Not sure what Im doing wrong. Im trying to avoid using API keys in this particular project. Thank you.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.