ccxt 4.2.100 → 4.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +3 -0
- package/dist/cjs/src/binance.js +56 -0
- package/dist/cjs/src/bingx.js +2 -2
- package/dist/cjs/src/bitget.js +69 -5
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/coinbase.js +2 -1
- package/dist/cjs/src/coinbasepro.js +1 -1
- package/dist/cjs/src/coinex.js +164 -206
- package/dist/cjs/src/cryptocom.js +5 -5
- package/dist/cjs/src/hyperliquid.js +74 -0
- package/dist/cjs/src/kraken.js +8 -3
- package/dist/cjs/src/kucoin.js +13 -11
- package/dist/cjs/src/okx.js +76 -5
- package/dist/cjs/src/pro/kraken.js +2 -2
- package/dist/cjs/src/woo.js +40 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/base/Exchange.d.ts +2 -1
- package/js/src/base/Exchange.js +3 -0
- package/js/src/base/types.d.ts +5 -0
- package/js/src/binance.d.ts +3 -1
- package/js/src/binance.js +56 -0
- package/js/src/bingx.js +3 -3
- package/js/src/bitget.d.ts +1 -0
- package/js/src/bitget.js +69 -5
- package/js/src/bybit.js +1 -1
- package/js/src/coinbase.js +2 -1
- package/js/src/coinbasepro.d.ts +1 -1
- package/js/src/coinbasepro.js +1 -1
- package/js/src/coinex.js +164 -206
- package/js/src/cryptocom.js +5 -5
- package/js/src/hyperliquid.d.ts +2 -1
- package/js/src/hyperliquid.js +75 -1
- package/js/src/kraken.js +8 -3
- package/js/src/kucoin.js +13 -11
- package/js/src/okx.d.ts +1 -0
- package/js/src/okx.js +76 -5
- package/js/src/pro/kraken.js +2 -2
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/woo.d.ts +1 -0
- package/js/src/woo.js +40 -0
- package/package.json +2 -1
- package/.dockerignore +0 -6
- package/.eslintignore +0 -1
- package/.git-templates/hooks/pre-push +0 -55
- package/.gitattributes +0 -7
- package/CHANGELOG.md +0 -6003
- package/CODEOWNERS +0 -1
- package/CONTRIBUTING.md +0 -1099
- package/build.sh +0 -217
- package/change.sh +0 -18
- package/cleanup.sh +0 -18
- package/composer-install.sh +0 -20
- package/dist/ccxt.browser.js +0 -327256
- package/dist/ccxt.browser.min.js +0 -30
- package/dist/ccxt.browser.min.js.LICENSE.txt +0 -12
- package/doc/FAQ.rst +0 -1
- package/doc/Makefile +0 -20
- package/doc/_static/css/dark.css +0 -101
- package/doc/_static/css/index.css +0 -128
- package/doc/_static/favicon.ico +0 -0
- package/doc/_static/javascript/binance-portal.min.js +0 -2369
- package/doc/_static/javascript/index.js +0 -195
- package/doc/_static/javascript/jquery-ui.min.js +0 -6
- package/doc/ccxt.pro.install.rst +0 -1
- package/doc/ccxt.pro.manual.rst +0 -1665
- package/doc/exchange-markets-by-country.rst +0 -1423
- package/doc/exchange-markets.rst +0 -1441
- package/doc/index.rst +0 -35
- package/doc/install.rst +0 -1
- package/doc/make.bat +0 -36
- package/doc/manual.rst +0 -7471
- package/doc/readme.rst +0 -2191
- package/doc/requirements.txt +0 -6
- package/examples/ccxt.pro/html/watchTicker.html +0 -51
- package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +0 -55
- package/examples/ccxt.pro/js/binance-https-proxy.js +0 -48
- package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +0 -38
- package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +0 -64
- package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +0 -62
- package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +0 -68
- package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +0 -82
- package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +0 -59
- package/examples/ccxt.pro/js/exchange-capabitities.js +0 -72
- package/examples/ccxt.pro/js/exchange-close.js +0 -46
- package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +0 -30
- package/examples/ccxt.pro/js/gateio-watch-balance.js +0 -23
- package/examples/ccxt.pro/js/gateio-watch-order-book.js +0 -71
- package/examples/ccxt.pro/js/graceful-shutdown.js +0 -43
- package/examples/ccxt.pro/js/many-exchanges-many-streams.js +0 -37
- package/examples/ccxt.pro/js/okex-create-futures-order.js +0 -48
- package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +0 -54
- package/examples/ccxt.pro/js/okx-watch-tickers.js +0 -31
- package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +0 -46
- package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +0 -26
- package/examples/ccxt.pro/js/one-exchange-many-streams.js +0 -28
- package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +0 -30
- package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +0 -40
- package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +0 -38
- package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +0 -40
- package/examples/ccxt.pro/js/watch-many-orderbooks.js +0 -27
- package/examples/ccxt.pro/js/watch-new-trades-only.js +0 -43
- package/examples/ccxt.pro/js/watch-new-trades.js +0 -42
- package/examples/ccxt.pro/js/watch-trades-many-symbols.js +0 -29
- package/examples/ccxt.pro/js/watch-vs-fetch.js +0 -29
- package/examples/cs/Examples.sln +0 -22
- package/examples/cs/c#.csproj +0 -19
- package/examples/html/basic-cors-proxy.html +0 -46
- package/examples/html/basic-inheritance.html +0 -47
- package/examples/html/basic-poller.html +0 -52
- package/examples/html/basic-rate-limiting.html +0 -49
- package/examples/html/basic.html +0 -43
- package/examples/html/binance-cors-proxy.html +0 -28
- package/examples/html/bitmex-browser-cors-proxy.js +0 -7
- package/examples/html/bitmex-cors.html +0 -46
- package/examples/html/tradingview-charts.html +0 -61
- package/examples/html/webworker/index.html +0 -97
- package/examples/html/webworker/worker.js +0 -43
- package/examples/js/advanced-error-handling.js +0 -39
- package/examples/js/aggregate-orderbook.js +0 -54
- package/examples/js/arbitrage-pairs.js +0 -130
- package/examples/js/basic-chart.js +0 -29
- package/examples/js/basic-orderbook-polling.js +0 -13
- package/examples/js/bcc-vs-bch.js +0 -115
- package/examples/js/benchmark.js +0 -104
- package/examples/js/binance-fetch-all-deposits.js +0 -45
- package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +0 -34
- package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +0 -33
- package/examples/js/binance-fetchTicker-delivery-vs-future.js +0 -31
- package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +0 -41
- package/examples/js/binance-margin-stop-order.js +0 -39
- package/examples/js/binance-server-time.js +0 -34
- package/examples/js/binance-universal-transfer.js +0 -16
- package/examples/js/bitfinex-fetch-trades.js +0 -35
- package/examples/js/bitfinex2-fetch-trades.js +0 -35
- package/examples/js/bitmex-browser-cors-proxy.js +0 -7
- package/examples/js/bitpanda-fetchMyTrades-reduce.js +0 -36
- package/examples/js/bitrue-fetch-balance.js +0 -28
- package/examples/js/bitstamp-private-api.js +0 -115
- package/examples/js/bitstamp-public-api.js +0 -39
- package/examples/js/bittrex-balance.js +0 -50
- package/examples/js/bittrex-fetch-closed-orders-history.js +0 -69
- package/examples/js/blockchaincom-withdrawal.js +0 -59
- package/examples/js/build-ohlcv-bars.js +0 -48
- package/examples/js/builtin-rate-limiting-rest-poller.js +0 -25
- package/examples/js/bybit-trailing.js +0 -62
- package/examples/js/bybit-updated.cjs +0 -154
- package/examples/js/coinbase-fetch-all-balances.js +0 -36
- package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +0 -47
- package/examples/js/coinex-futures.js +0 -75
- package/examples/js/coinone-fetch-tickers.js +0 -54
- package/examples/js/coinone-markets.js +0 -16
- package/examples/js/compare-two-exchanges-capabilities.js +0 -36
- package/examples/js/cors-proxy.js +0 -5
- package/examples/js/create-order-handle-errors.js +0 -55
- package/examples/js/create-order-position-with-takeprofit-stoploss.js +0 -71
- package/examples/js/create-order-with-retry.js +0 -65
- package/examples/js/create-order-ws-example.js +0 -25
- package/examples/js/create-orders-example.js +0 -17
- package/examples/js/create-trailing-amount-order.js +0 -36
- package/examples/js/create-trailing-percent-order.js +0 -36
- package/examples/js/credentials.json +0 -5
- package/examples/js/custom-proxy-agent-for-js.js +0 -10
- package/examples/js/custom-proxy-url.js +0 -23
- package/examples/js/delta-maintenance-margin-rate-max-leverage.js +0 -60
- package/examples/js/env-variables.js +0 -26
- package/examples/js/error-handling.js +0 -89
- package/examples/js/exchange-capabilities.js +0 -135
- package/examples/js/exchanges-by-volume.js +0 -60
- package/examples/js/exchanges.js +0 -40
- package/examples/js/fetch-all-balances.js +0 -219
- package/examples/js/fetch-all-tickers-to-files-2.js +0 -53
- package/examples/js/fetch-all-tickers-to-files.js +0 -77
- package/examples/js/fetch-balance.js +0 -28
- package/examples/js/fetch-create-deposit-address.js +0 -101
- package/examples/js/fetch-from-many-exchanges-simultaneously.js +0 -21
- package/examples/js/fetch-funding-rate-history.js +0 -25
- package/examples/js/fetch-futures/prettier.config.js +0 -5
- package/examples/js/fetch-futures/src/index.js +0 -25
- package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +0 -72
- package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +0 -39
- package/examples/js/fetch-ohlcv.js +0 -16
- package/examples/js/fetch-okex-futures.js +0 -22
- package/examples/js/fetch-orders.js +0 -27
- package/examples/js/fetch-ticker-from-multiple-exchanges.js +0 -35
- package/examples/js/fetch-ticker-where-available.js +0 -75
- package/examples/js/fetch-tickers/build/index.js +0 -19
- package/examples/js/fetch-tickers/prettier.config.js +0 -5
- package/examples/js/fetch-tickers/src/index.js +0 -17
- package/examples/js/gateio-create-batch-order.js +0 -43
- package/examples/js/gateio-futures.js +0 -49
- package/examples/js/gateio-open-close-contract.js +0 -49
- package/examples/js/gateio-swaps.js +0 -74
- package/examples/js/gdax-fetch-trades-pagination.js +0 -29
- package/examples/js/hitbtc2-withdraw.js +0 -61
- package/examples/js/how-to-import-one-exchange-esm.js +0 -10
- package/examples/js/huobi-futures.js +0 -71
- package/examples/js/huobi-open-close-contract.js +0 -63
- package/examples/js/huobi-swaps.js +0 -70
- package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +0 -98
- package/examples/js/hybridCJSExample.cjs +0 -19
- package/examples/js/hybridESMExample.js +0 -19
- package/examples/js/idex-fetch-balance.js +0 -13
- package/examples/js/instantiate-all-at-once.js +0 -46
- package/examples/js/instantiate-all-from-json.js +0 -31
- package/examples/js/kraken-create-and-close-position.js +0 -54
- package/examples/js/kraken-fetch-order-trades.js +0 -33
- package/examples/js/kraken-margin-trading.js +0 -89
- package/examples/js/kucoin-rate-limit.js +0 -38
- package/examples/js/latoken-example.js +0 -108
- package/examples/js/live-orderbook.js +0 -106
- package/examples/js/live-ticker.js +0 -80
- package/examples/js/live-tickers.js +0 -74
- package/examples/js/load-all-contracts.js +0 -41
- package/examples/js/load-all-symbols-at-once.js +0 -69
- package/examples/js/load-all-tickers-at-once.js +0 -91
- package/examples/js/load-markets-to-files.js +0 -57
- package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +0 -61
- package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +0 -91
- package/examples/js/margin-loan-borrow-buy-sell-repay.js +0 -70
- package/examples/js/market-status-and-currency-status.js +0 -29
- package/examples/js/ohlcv-console-chart.js +0 -29
- package/examples/js/okex-fetch-closed-orders-archive.js +0 -31
- package/examples/js/okex-transfer.js +0 -51
- package/examples/js/okx-poll-fetch-my-trades.js +0 -37
- package/examples/js/okx-poll-rate-limit.js +0 -48
- package/examples/js/order-book-extra-level-depth-param.js +0 -20
- package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +0 -49
- package/examples/js/poll-ohlcv.js +0 -43
- package/examples/js/poloniex-fetch-order-books.js +0 -35
- package/examples/js/poloniex-limits-amount-min.js +0 -62
- package/examples/js/proxy-round-robin.js +0 -98
- package/examples/js/proxy-usage.js +0 -32
- package/examples/js/sample-local-proxy-server-with-cors.js +0 -12
- package/examples/js/search-all-exchanges.js +0 -159
- package/examples/js/shared-load-markets.js +0 -80
- package/examples/js/sort-swap-markets-by-hourly-price-change.js +0 -55
- package/examples/js/symbols.js +0 -110
- package/examples/js/theocean.js +0 -41
- package/examples/js/tickers.js +0 -106
- package/examples/js/validate-paginated-data.js +0 -61
- package/examples/js/watch-OHLCV-For-Symbols.js +0 -15
- package/examples/js/watch-OHLCV.js +0 -12
- package/examples/js/watch-OrderBook-For-Symbols.js +0 -11
- package/examples/js/watch-Trades-For-Symbols.js +0 -11
- package/examples/js/watch-tickers.js +0 -11
- package/examples/js/watchOHLCVForSymbols.js +0 -15
- package/examples/js/watchOrderBookForSymbols.js +0 -11
- package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +0 -2
- package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +0 -1
- package/examples/js/watchPositions-many-exchanges-continuosly.js +0 -49
- package/examples/js/watchPositions.d.ts +0 -2
- package/examples/js/watchPositions.d.ts.map +0 -1
- package/examples/js/watchPositions.js +0 -13
- package/examples/js/watchPositionsForSymbols.d.ts +0 -2
- package/examples/js/watchPositionsForSymbols.d.ts.map +0 -1
- package/examples/js/watchPositionsForSymbols.js +0 -14
- package/examples/js/watchTradesForSymbols.js +0 -11
- package/examples/js/withdraw-from-one-exchange-to-another.js +0 -50
- package/examples/php/README.md +0 -7
- package/examples/py/README.md +0 -15
- package/examples/py/playing_with_ccxt_example.ipynb +0 -222
- package/examples/ts/.eslintrc +0 -111
- package/examples/ts/benchmark.ts +0 -134
- package/examples/ts/build-ohlcv-bars.ts +0 -53
- package/examples/ts/cli.ts +0 -397
- package/examples/ts/compare-two-exchanges-capabilities.ts +0 -36
- package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +0 -89
- package/examples/ts/create-order-ws-example.ts +0 -33
- package/examples/ts/create-orders-example.ts +0 -21
- package/examples/ts/create-trailing-amount-order.ts +0 -37
- package/examples/ts/create-trailing-percent-order.ts +0 -37
- package/examples/ts/custom-proxy-agent-for-js.ts +0 -14
- package/examples/ts/fetch-futures/package-lock.json +0 -116
- package/examples/ts/fetch-futures/package.json +0 -34
- package/examples/ts/fetch-futures/prettier.config.js +0 -4
- package/examples/ts/fetch-futures/src/index.ts +0 -28
- package/examples/ts/fetch-futures/tsconfig.json +0 -28
- package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +0 -44
- package/examples/ts/fetch-ohlcv.ts +0 -17
- package/examples/ts/fetch-tickers/package-lock.json +0 -116
- package/examples/ts/fetch-tickers/package.json +0 -34
- package/examples/ts/fetch-tickers/prettier.config.js +0 -4
- package/examples/ts/fetch-tickers/src/index.ts +0 -21
- package/examples/ts/fetch-tickers/tsconfig.json +0 -28
- package/examples/ts/how-to-import-one-exchange-esm.ts +0 -11
- package/examples/ts/kraken-create-and-close-position.ts +0 -69
- package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +0 -72
- package/examples/ts/nextjs-page-router/.eslintrc.json +0 -3
- package/examples/ts/nextjs-page-router/README.md +0 -43
- package/examples/ts/nextjs-page-router/next.config.js +0 -6
- package/examples/ts/nextjs-page-router/package-lock.json +0 -7425
- package/examples/ts/nextjs-page-router/package.json +0 -28
- package/examples/ts/nextjs-page-router/postcss.config.js +0 -6
- package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
- package/examples/ts/nextjs-page-router/src/pages/_app.tsx +0 -6
- package/examples/ts/nextjs-page-router/src/pages/_document.tsx +0 -13
- package/examples/ts/nextjs-page-router/src/pages/balance.tsx +0 -46
- package/examples/ts/nextjs-page-router/src/pages/index.tsx +0 -8
- package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +0 -61
- package/examples/ts/nextjs-page-router/src/styles/globals.css +0 -27
- package/examples/ts/nextjs-page-router/tailwind.config.ts +0 -20
- package/examples/ts/nextjs-page-router/tsconfig.json +0 -22
- package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +0 -62
- package/examples/ts/proxy-usage.ts +0 -41
- package/examples/ts/sample-local-proxy-server-with-cors.ts +0 -15
- package/examples/ts/watch-OHLCV-For-Symbols.ts +0 -17
- package/examples/ts/watch-OHLCV.ts +0 -14
- package/examples/ts/watch-OrderBook-For-Symbols.ts +0 -13
- package/examples/ts/watch-Trades-For-Symbols.ts +0 -13
- package/examples/ts/watch-tickers.ts +0 -13
- package/examples/ts/watchPositions-many-exchanges-continuosly.ts +0 -53
- package/examples/ts/watchPositions.ts +0 -15
- package/examples/ts/watchPositionsForSymbols.ts +0 -16
- package/examples/tsconfig.json +0 -27
- package/examples2md.js +0 -79
- package/gource.sh +0 -3
- package/index.html +0 -7
- package/jsdoc2md.js +0 -122
- package/multilang.sh +0 -164
- package/pro-tests.json +0 -57
- package/pyproject.toml +0 -8
- package/rollup.config.js +0 -60
- package/skip-tests.json +0 -1653
- package/test-commonjs.cjs +0 -65
- package/tests-manager.sh +0 -96
- package/tsconfig.json +0 -111
- package/webpack.config.js +0 -46
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt.js');
|
|
4
|
-
|
|
5
|
-
// instantiate the exchange
|
|
6
|
-
let exchange = new ccxt.coinbasepro ({
|
|
7
|
-
'apiKey': 'XXXXXXXXXXXXXX',
|
|
8
|
-
'secret': 'YYYYYYYYYYYYYY',
|
|
9
|
-
});
|
|
10
|
-
|
|
11
|
-
async function checkOrders(){
|
|
12
|
-
try {
|
|
13
|
-
// fetch orders
|
|
14
|
-
let orders = await exchange.fetchOrders ('BTC/USDT');
|
|
15
|
-
// output the result
|
|
16
|
-
console.log (exchange.id, 'fetched orders', orders);
|
|
17
|
-
} catch (e) {
|
|
18
|
-
if (e instanceof ccxt.DDoSProtection || e.message.includes ('ECONNRESET')) {
|
|
19
|
-
console.log ('[DDoS Protection] ' + e.message);
|
|
20
|
-
} else if (e instanceof ccxt.RequestTimeout) {
|
|
21
|
-
console.log ('[Request Timeout] ' + e.message);
|
|
22
|
-
} else if (e instanceof ccxt.AuthenticationError) {
|
|
23
|
-
console.log ('[Authentication Error] ' + e.message);
|
|
24
|
-
} else if (e instanceof ccxt.ExchangeNotAvailable) {
|
|
25
|
-
console.log ('[Exchange Not Available Error] ' + e.message);
|
|
26
|
-
} else if (e instanceof ccxt.ExchangeError) {
|
|
27
|
-
console.log ('[Exchange Error] ' + e.message);
|
|
28
|
-
} else if (e instanceof ccxt.NetworkError) {
|
|
29
|
-
console.log ('[Network Error] ' + e.message);
|
|
30
|
-
} else {
|
|
31
|
-
// you can throw it if you want to stop the execution
|
|
32
|
-
// console.log ('[Exception ' + e.constructor.name + '] ' + e.message);
|
|
33
|
-
throw e;
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
|
|
38
|
-
// for demonstrational purposes, we use 1000 ms interval
|
|
39
|
-
setInterval(checkOrders, 1000);
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
|
|
5
|
-
const aggregateOrderBookSide = function (orderbookSide, precision = undefined) {
|
|
6
|
-
const result = []
|
|
7
|
-
const amounts = {}
|
|
8
|
-
for (let i = 0; i < orderbookSide.length; i++) {
|
|
9
|
-
const ask = orderbookSide[i]
|
|
10
|
-
let price = ask[0]
|
|
11
|
-
if (precision !== undefined) {
|
|
12
|
-
price = ccxt.decimalToPrecision (price, ccxt.ROUND, precision, ccxt.TICK_SIZE)
|
|
13
|
-
}
|
|
14
|
-
amounts[price] = (amounts[price] || 0) + ask[1]
|
|
15
|
-
}
|
|
16
|
-
Object.keys (amounts).forEach (price => {
|
|
17
|
-
result.push ([
|
|
18
|
-
parseFloat (price),
|
|
19
|
-
amounts[price]
|
|
20
|
-
])
|
|
21
|
-
})
|
|
22
|
-
return result
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
const aggregateOrderBook = function (orderbook, precision = undefined) {
|
|
26
|
-
let asks = aggregateOrderBookSide(orderbook['asks'], precision)
|
|
27
|
-
let bids = aggregateOrderBookSide(orderbook['bids'], precision)
|
|
28
|
-
return {
|
|
29
|
-
'asks': ccxt.sortBy (asks, 0),
|
|
30
|
-
'bids': ccxt.sortBy (bids, 0, true),
|
|
31
|
-
'timestamp': orderbook['timestamp'],
|
|
32
|
-
'datetime': orderbook['datetime'],
|
|
33
|
-
'nonce': orderbook['nonce'],
|
|
34
|
-
};
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
;(async () => {
|
|
38
|
-
|
|
39
|
-
const exchange = new ccxt.coinbasepro()
|
|
40
|
-
|
|
41
|
-
await exchange.loadMarkets ()
|
|
42
|
-
|
|
43
|
-
// exchange.verbose = true // uncomment for verbose debug output
|
|
44
|
-
|
|
45
|
-
// level 2 (default)
|
|
46
|
-
const orderbook = await exchange.fetchOrderBook('BTC/USD')
|
|
47
|
-
|
|
48
|
-
// or level 3
|
|
49
|
-
// const orderbook = await exchange.fetchOrderBook('BTC/USD', undefined, { 'level': 3 })
|
|
50
|
-
|
|
51
|
-
const step = 0.5 // 0.01, 0.1, 0.5, 1.0, 2.5, 5.0, 10.0
|
|
52
|
-
console.log (aggregateOrderBook (orderbook, step))
|
|
53
|
-
|
|
54
|
-
})();
|
|
@@ -1,130 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import asTable from 'as-table';
|
|
5
|
-
import fs from 'fs';
|
|
6
|
-
import ansicolor from 'ansicolor';
|
|
7
|
-
import ololog from 'ololog';
|
|
8
|
-
|
|
9
|
-
const log = ololog.configure ({ locate: false }), verbose = process.argv.includes ('--verbose'), keysGlobal = 'keys.json', keysLocal = 'keys.local.json', keysFile = fs.existsSync (keysLocal) ? keysLocal : (fs.existsSync (keysGlobal) ? keysGlobal : false), config = keysFile ? require ('../../' + keysFile) : {};
|
|
10
|
-
|
|
11
|
-
let printSupportedExchanges = function () {
|
|
12
|
-
log ('Supported exchanges:', ccxt.exchanges.join (', ').green)
|
|
13
|
-
}
|
|
14
|
-
|
|
15
|
-
let printUsage = function () {
|
|
16
|
-
log ('Usage: node', process.argv[1], 'id1'.green, 'id2'.yellow, 'id3'.blue, '...')
|
|
17
|
-
printSupportedExchanges ()
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
let printExchangeSymbolsAndMarkets = function (exchange) {
|
|
21
|
-
log (getExchangeSymbols (exchange))
|
|
22
|
-
log (getExchangeMarketsTable (exchange))
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
let getExchangeMarketsTable = (exchange) => {
|
|
26
|
-
return asTable.configure ({ delimiter: ' | ' }) (Object.values (markets))
|
|
27
|
-
}
|
|
28
|
-
|
|
29
|
-
let sleep = (ms) => new Promise (resolve => setTimeout (resolve, ms));
|
|
30
|
-
|
|
31
|
-
let proxies = [
|
|
32
|
-
'', // no proxy by default
|
|
33
|
-
'https://crossorigin.me/',
|
|
34
|
-
'https://cors-anywhere.herokuapp.com/',
|
|
35
|
-
]
|
|
36
|
-
|
|
37
|
-
;(async function main () {
|
|
38
|
-
|
|
39
|
-
if (process.argv.length > 3) {
|
|
40
|
-
|
|
41
|
-
let ids = process.argv.slice (2)
|
|
42
|
-
let exchanges = {}
|
|
43
|
-
|
|
44
|
-
log (ids.join (', ').yellow)
|
|
45
|
-
|
|
46
|
-
// load all markets from all exchanges
|
|
47
|
-
for (let id of ids) {
|
|
48
|
-
|
|
49
|
-
let settings = config[id] || {}
|
|
50
|
-
|
|
51
|
-
// instantiate the exchange by id
|
|
52
|
-
let exchange = new ccxt[id] (ccxt.extend ({
|
|
53
|
-
// verbose,
|
|
54
|
-
// 'proxy': 'https://cors-anywhere.herokuapp.com/',
|
|
55
|
-
}, settings))
|
|
56
|
-
|
|
57
|
-
// save it in a dictionary under its id for future use
|
|
58
|
-
exchanges[id] = exchange
|
|
59
|
-
|
|
60
|
-
// load all markets from the exchange
|
|
61
|
-
let markets = await exchange.loadMarkets ()
|
|
62
|
-
|
|
63
|
-
// basic round-robin proxy scheduler
|
|
64
|
-
let currentProxy = 0
|
|
65
|
-
let maxRetries = proxies.length
|
|
66
|
-
|
|
67
|
-
for (let numRetries = 0; numRetries < maxRetries; numRetries++) {
|
|
68
|
-
|
|
69
|
-
try { // try to load exchange markets using current proxy
|
|
70
|
-
|
|
71
|
-
exchange.proxy = proxies[currentProxy]
|
|
72
|
-
await exchange.loadMarkets ()
|
|
73
|
-
|
|
74
|
-
} catch (e) { // rotate proxies in case of connectivity errors, catch all other exceptions
|
|
75
|
-
|
|
76
|
-
// swallow connectivity exceptions only
|
|
77
|
-
if (e instanceof ccxt.DDoSProtection || e.message.includes ('ECONNRESET')) {
|
|
78
|
-
log.bright.yellow ('[DDoS Protection Error] ' + e.message)
|
|
79
|
-
} else if (e instanceof ccxt.RequestTimeout) {
|
|
80
|
-
log.bright.yellow ('[Timeout Error] ' + e.message)
|
|
81
|
-
} else if (e instanceof ccxt.AuthenticationError) {
|
|
82
|
-
log.bright.yellow ('[Authentication Error] ' + e.message)
|
|
83
|
-
} else if (e instanceof ccxt.ExchangeNotAvailable) {
|
|
84
|
-
log.bright.yellow ('[Exchange Not Available Error] ' + e.message)
|
|
85
|
-
} else if (e instanceof ccxt.ExchangeError) {
|
|
86
|
-
log.bright.yellow ('[Exchange Error] ' + e.message)
|
|
87
|
-
} else {
|
|
88
|
-
throw e; // rethrow all other exceptions
|
|
89
|
-
}
|
|
90
|
-
|
|
91
|
-
// retry next proxy in round-robin fashion in case of error
|
|
92
|
-
currentProxy = ++currentProxy % proxies.length
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
log (id.green, 'loaded', exchange.symbols.length.toString ().green, 'markets')
|
|
97
|
-
}
|
|
98
|
-
|
|
99
|
-
log ('Loaded all markets'.green)
|
|
100
|
-
|
|
101
|
-
// get all unique symbols
|
|
102
|
-
let uniqueSymbols = ccxt.unique (ccxt.flatten (ids.map (id => exchanges[id].symbols)))
|
|
103
|
-
|
|
104
|
-
// filter out symbols that are not present on at least two exchanges
|
|
105
|
-
let arbitrableSymbols = uniqueSymbols
|
|
106
|
-
.filter (symbol =>
|
|
107
|
-
ids.filter (id =>
|
|
108
|
-
(exchanges[id].symbols.indexOf (symbol) >= 0)).length > 1)
|
|
109
|
-
.sort ((id1, id2) => (id1 > id2) ? 1 : ((id2 > id1) ? -1 : 0))
|
|
110
|
-
|
|
111
|
-
// print a table of arbitrable symbols
|
|
112
|
-
let table = arbitrableSymbols.map (symbol => {
|
|
113
|
-
let row = { symbol }
|
|
114
|
-
for (let id of ids)
|
|
115
|
-
if (exchanges[id].symbols.indexOf (symbol) >= 0)
|
|
116
|
-
row[id] = id
|
|
117
|
-
return row
|
|
118
|
-
})
|
|
119
|
-
|
|
120
|
-
log (asTable.configure ({ delimiter: ' | ' }) (table))
|
|
121
|
-
|
|
122
|
-
} else {
|
|
123
|
-
|
|
124
|
-
printUsage ()
|
|
125
|
-
|
|
126
|
-
}
|
|
127
|
-
|
|
128
|
-
process.exit ()
|
|
129
|
-
|
|
130
|
-
}) ()
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import asciichart from 'asciichart';
|
|
5
|
-
import asTable from 'as-table';
|
|
6
|
-
import ololog from 'ololog'
|
|
7
|
-
import ansicolor from 'ansicolor';
|
|
8
|
-
|
|
9
|
-
const log = ololog.configure ({ locate: false })
|
|
10
|
-
|
|
11
|
-
ansicolor.nice
|
|
12
|
-
|
|
13
|
-
//-----------------------------------------------------------------------------
|
|
14
|
-
|
|
15
|
-
;(async function main () {
|
|
16
|
-
|
|
17
|
-
// experimental, not yet implemented for all exchanges
|
|
18
|
-
// your contributions are welcome ;)
|
|
19
|
-
|
|
20
|
-
const index = 4 // [ timestamp, open, high, low, close, volume ]
|
|
21
|
-
const ohlcv = await new ccxt.okcoin ().fetchOHLCV ('BTC/USD', '15m')
|
|
22
|
-
const lastPrice = ohlcv[ohlcv.length - 1][index] // closing price
|
|
23
|
-
const series = ohlcv.map (x => x[index]) // closing price
|
|
24
|
-
const bitcoinRate = ('₿ = $' + lastPrice).green
|
|
25
|
-
const chart = asciichart.plot (series, { height: 15, padding: ' ' })
|
|
26
|
-
log.yellow ("\n" + chart, bitcoinRate, "\n")
|
|
27
|
-
process.exit ()
|
|
28
|
-
|
|
29
|
-
}) ()
|
|
@@ -1,13 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
|
|
3
|
-
const id = 'huobipro', exchange = new ccxt[id] ({ enableRateLimit: true }), symbol = 'ETH/BTC';(async function main () {
|
|
4
|
-
|
|
5
|
-
await exchange.loadMarkets ()
|
|
6
|
-
|
|
7
|
-
for (let i = 0; i < 2000; i++) {
|
|
8
|
-
|
|
9
|
-
const orderbook = await exchange.fetchOrderBook (symbol)
|
|
10
|
-
console.log (new Date (), i, symbol, orderbook.asks[0], orderbook.bids[0])
|
|
11
|
-
}
|
|
12
|
-
|
|
13
|
-
}) ()
|
|
@@ -1,115 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import asTable from 'as-table';
|
|
5
|
-
import ololog from 'ololog'
|
|
6
|
-
import config from '../../keys.json';
|
|
7
|
-
import ansicolor from 'ansicolor';
|
|
8
|
-
|
|
9
|
-
const log = ololog.configure ({ locate: false })
|
|
10
|
-
|
|
11
|
-
ansicolor.nice
|
|
12
|
-
|
|
13
|
-
let sleep = (ms) => new Promise (resolve => setTimeout (resolve, ms))
|
|
14
|
-
|
|
15
|
-
let proxies = [
|
|
16
|
-
'', // no proxy by default
|
|
17
|
-
'https://crossorigin.me/',
|
|
18
|
-
'https://cors-anywhere.herokuapp.com/',
|
|
19
|
-
]
|
|
20
|
-
|
|
21
|
-
;(async function main () {
|
|
22
|
-
|
|
23
|
-
let ids = ccxt.exchanges
|
|
24
|
-
let exchanges = {}
|
|
25
|
-
|
|
26
|
-
// instantiate all exchanges
|
|
27
|
-
ccxt.exchanges.forEach (id => {
|
|
28
|
-
if (id in ccxt)
|
|
29
|
-
exchanges[id] = new (ccxt)[id] ({
|
|
30
|
-
verbose: false,
|
|
31
|
-
substituteCommonCurrencyCodes: true,
|
|
32
|
-
})
|
|
33
|
-
})
|
|
34
|
-
|
|
35
|
-
// set up api keys appropriately
|
|
36
|
-
for (let id in config) {
|
|
37
|
-
if (id in exchanges)
|
|
38
|
-
for (let key in config[id])
|
|
39
|
-
exchanges[id][key] = config[id][key]
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
log (ids.join (', ').yellow)
|
|
43
|
-
|
|
44
|
-
// load all markets from all exchanges
|
|
45
|
-
|
|
46
|
-
await Promise.all (ids.map (async id => {
|
|
47
|
-
|
|
48
|
-
let exchange = exchanges[id]
|
|
49
|
-
|
|
50
|
-
// basic round-robin proxy scheduler
|
|
51
|
-
let currentProxy = 0
|
|
52
|
-
let maxRetries = proxies.length
|
|
53
|
-
|
|
54
|
-
for (let numRetries = 0; numRetries < maxRetries; numRetries++) {
|
|
55
|
-
|
|
56
|
-
try { // try to load exchange markets using current proxy
|
|
57
|
-
|
|
58
|
-
exchange.proxy = proxies[currentProxy]
|
|
59
|
-
await exchange.loadMarkets ()
|
|
60
|
-
|
|
61
|
-
} catch (e) { // rotate proxies in case of connectivity errors, catch all other exceptions
|
|
62
|
-
|
|
63
|
-
// swallow connectivity exceptions only
|
|
64
|
-
if ((e instanceof ccxt.DDoSProtection) || e.message.includes ('ECONNRESET')) {
|
|
65
|
-
log.bright.yellow (exchange.id + ' [DDoS Protection]')
|
|
66
|
-
} else if (e instanceof ccxt.RequestTimeout) {
|
|
67
|
-
log.bright.yellow (exchange.id + ' [Request Timeout] ' + e.message)
|
|
68
|
-
} else if (e instanceof ccxt.AuthenticationError) {
|
|
69
|
-
log.bright.yellow (exchange.id + ' [Authentication Error] ' + e.message)
|
|
70
|
-
} else if (e instanceof ccxt.ExchangeNotAvailable) {
|
|
71
|
-
log.bright.yellow (exchange.id + ' [Exchange Not Available] ' + e.message)
|
|
72
|
-
} else if (e instanceof ccxt.ExchangeError) {
|
|
73
|
-
log.bright.yellow (exchange.id + ' [Exchange Error] ' + e.message)
|
|
74
|
-
} else {
|
|
75
|
-
throw e; // rethrow all other exceptions
|
|
76
|
-
}
|
|
77
|
-
|
|
78
|
-
// retry next proxy in round-robin fashion in case of error
|
|
79
|
-
currentProxy = ++currentProxy % proxies.length
|
|
80
|
-
}
|
|
81
|
-
}
|
|
82
|
-
|
|
83
|
-
if (exchange.symbols)
|
|
84
|
-
log (id.green, 'loaded', exchange.symbols.length.toString ().green, 'markets')
|
|
85
|
-
|
|
86
|
-
}))
|
|
87
|
-
|
|
88
|
-
log ('Loaded all markets'.green)
|
|
89
|
-
|
|
90
|
-
let table = ccxt.exchanges.map (id => {
|
|
91
|
-
console.log (id)
|
|
92
|
-
let exchange = exchanges[id]
|
|
93
|
-
if (exchange.currencies) {
|
|
94
|
-
let hasBCC = exchange.currencies.includes ('BCC')
|
|
95
|
-
let hasBCH = exchange.currencies.includes ('BCH')
|
|
96
|
-
let hasBoth = (hasBCC && hasBCH)
|
|
97
|
-
return {
|
|
98
|
-
id,
|
|
99
|
-
'BCC': hasBoth ? id.green : (hasBCC ? id.yellow : ''),
|
|
100
|
-
'BCH': hasBCH ? id.green : '',
|
|
101
|
-
}
|
|
102
|
-
} else {
|
|
103
|
-
return {
|
|
104
|
-
'id': id.red,
|
|
105
|
-
'BCC': '',
|
|
106
|
-
'BCH': '',
|
|
107
|
-
}
|
|
108
|
-
}
|
|
109
|
-
})
|
|
110
|
-
|
|
111
|
-
log (asTable.configure ({ delimiter: ' | ' }) (table))
|
|
112
|
-
|
|
113
|
-
process.exit ()
|
|
114
|
-
|
|
115
|
-
}) ()
|
package/examples/js/benchmark.js
DELETED
|
@@ -1,104 +0,0 @@
|
|
|
1
|
-
import { spawn } from 'child_process';
|
|
2
|
-
import asTable from 'as-table';
|
|
3
|
-
import ccxt, { version } from '../../js/ccxt.js';
|
|
4
|
-
const stats = (times) => {
|
|
5
|
-
// calculate statistics
|
|
6
|
-
const sum = times.reduce((a, b) => a + b, 0);
|
|
7
|
-
const avg = Math.round(sum / times.length);
|
|
8
|
-
const min = Math.min(...times);
|
|
9
|
-
const max = Math.max(...times);
|
|
10
|
-
times.sort((a, b) => a - b);
|
|
11
|
-
const median = times.length % 2 === 0 ? (times[times.length / 2 - 1] + times[times.length / 2]) / 2 : times[Math.floor(times.length / 2)];
|
|
12
|
-
return { min, 'average': avg, max, median, 'iterations': times.length };
|
|
13
|
-
};
|
|
14
|
-
async function benchmark(exchangeId, method, args, verbose = false, minIterations = 10, argsv = '') {
|
|
15
|
-
const exchange = new ccxt.pro[exchangeId]({});
|
|
16
|
-
const languages = ['js', 'py', 'php', 'cs'];
|
|
17
|
-
const commands = languages.map((language) => ({
|
|
18
|
-
'language': language,
|
|
19
|
-
'method': method,
|
|
20
|
-
'command': `npm run cli.${language} ${exchangeId} ${method} ${args.join(' ')} -- ${argsv} --poll`,
|
|
21
|
-
}));
|
|
22
|
-
const wsMethod = method + 'Ws';
|
|
23
|
-
if (exchange.has[wsMethod]) {
|
|
24
|
-
const wsCommands = languages.map((language) => ({
|
|
25
|
-
'language': language,
|
|
26
|
-
'method': wsMethod,
|
|
27
|
-
'command': `npm run cli.${language} ${exchangeId} ${wsMethod} ${args.join(' ')} -- ${argsv} --poll`,
|
|
28
|
-
}));
|
|
29
|
-
commands.push(...wsCommands);
|
|
30
|
-
}
|
|
31
|
-
const regex = /iteration (\d+) passed in (\d+) ms/g;
|
|
32
|
-
async function runCommand(command) {
|
|
33
|
-
if (verbose) {
|
|
34
|
-
console.log(exchange.iso8601(new Date().getTime()), ' running command:', command);
|
|
35
|
-
}
|
|
36
|
-
return new Promise((resolve, reject) => {
|
|
37
|
-
const [cmd, ...args] = command.split(' ');
|
|
38
|
-
const child = spawn(cmd, args);
|
|
39
|
-
const matches = [];
|
|
40
|
-
const language = command.slice(8, 15);
|
|
41
|
-
child.stdout.on('data', (data) => {
|
|
42
|
-
const message = data.toString();
|
|
43
|
-
matches.push(...Array.from(message.matchAll(regex)));
|
|
44
|
-
const match = matches[matches.length - 1];
|
|
45
|
-
if (match && match[1] && match[2]) {
|
|
46
|
-
const iteration = parseInt(match[1]);
|
|
47
|
-
const time = parseInt(match[2]);
|
|
48
|
-
if (iteration <= minIterations) {
|
|
49
|
-
if (verbose) {
|
|
50
|
-
console.log(exchange.iso8601(new Date().getTime()), `${language} iteration ${iteration} passed in ${time} ms`);
|
|
51
|
-
}
|
|
52
|
-
}
|
|
53
|
-
else {
|
|
54
|
-
const times = matches.map((m) => parseInt(m[2]));
|
|
55
|
-
child.kill();
|
|
56
|
-
if (verbose) {
|
|
57
|
-
console.log(exchange.iso8601(new Date().getTime()), `killed process - ${language} iteration ${iteration} passed in ${time} ms`);
|
|
58
|
-
}
|
|
59
|
-
resolve({ times });
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
});
|
|
63
|
-
child.stderr.on('data', (data) => {
|
|
64
|
-
const message = data.toString();
|
|
65
|
-
console.error(exchange.iso8601(new Date().getTime()), `command ${command} failed. stderr: ${message}`);
|
|
66
|
-
const times = matches.map((m) => parseInt(m[2]));
|
|
67
|
-
resolve({ times });
|
|
68
|
-
});
|
|
69
|
-
child.on('close', (code) => {
|
|
70
|
-
const times = matches.map((m) => parseInt(m[2]));
|
|
71
|
-
resolve({ times });
|
|
72
|
-
console.log(exchange.iso8601(new Date().getTime()), `${language} child process exited with code ${code}`);
|
|
73
|
-
});
|
|
74
|
-
child.on('error', (err) => {
|
|
75
|
-
console.error(exchange.iso8601(new Date().getTime()), `command ${command} failed. error: ${err}`);
|
|
76
|
-
reject(err);
|
|
77
|
-
});
|
|
78
|
-
});
|
|
79
|
-
}
|
|
80
|
-
const benchmarks = [];
|
|
81
|
-
const results = await Promise.all(commands.map((c) => runCommand(c.command)));
|
|
82
|
-
for (let i = 0; i < results.length; i++) {
|
|
83
|
-
const result = results[i];
|
|
84
|
-
benchmarks.push({ 'language': commands[i].language, 'method': commands[i].method, ...stats(result.times) });
|
|
85
|
-
}
|
|
86
|
-
if (verbose) {
|
|
87
|
-
const rawResults = results.map((r, i) => ({ 'language': commands[i].language, 'method': commands[i].method, ...stats(r.times), 'times': r.times }));
|
|
88
|
-
console.log(rawResults);
|
|
89
|
-
}
|
|
90
|
-
console.log(asTable(benchmarks));
|
|
91
|
-
}
|
|
92
|
-
const [_, , exchangeId, methodName, ...params] = process.argv.filter((x) => !x.startsWith('--'));
|
|
93
|
-
const verbose = process.argv.includes('--verbose');
|
|
94
|
-
const minIterationsString = process.argv.find((x) => x.startsWith('--min-iterations='))?.slice(18);
|
|
95
|
-
const minIterations = minIterationsString ? parseInt(minIterationsString) : 10;
|
|
96
|
-
const argsv = process.argv.filter((x) => x.startsWith('--') && !x.startsWith('--min-iterations')).join(' ');
|
|
97
|
-
console.log((new Date()).toISOString());
|
|
98
|
-
console.log('Node.js:', process.version);
|
|
99
|
-
console.log('CCXT v' + version);
|
|
100
|
-
const start = new Date().getTime();
|
|
101
|
-
await benchmark(exchangeId, methodName, params, verbose, minIterations, argsv);
|
|
102
|
-
const end = new Date().getTime();
|
|
103
|
-
console.log((new Date().toISOString()), 'Total time:', end - start, 'ms');
|
|
104
|
-
process.exit(0);
|
|
@@ -1,45 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
|
|
5
|
-
(async function main () {
|
|
6
|
-
|
|
7
|
-
const exchange = new ccxt.binance ({
|
|
8
|
-
'apiKey': 'YOUR_API_KEY',
|
|
9
|
-
'secret': 'YOUR_SECRET',
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
await exchange.loadMarkets ()
|
|
13
|
-
|
|
14
|
-
// exchange.verbose = true // uncomment for debugging
|
|
15
|
-
|
|
16
|
-
const ninetyDays = 90 * 24 * 60 * 60 * 1000;
|
|
17
|
-
let startTime = exchange.parse8601 ('2018-01-01T00:00:00')
|
|
18
|
-
const now = exchange.milliseconds ()
|
|
19
|
-
const currencyCode = undefined // any currency
|
|
20
|
-
|
|
21
|
-
let allTransactions = []
|
|
22
|
-
|
|
23
|
-
while (startTime < now) {
|
|
24
|
-
|
|
25
|
-
const endTime = startTime + ninetyDays
|
|
26
|
-
|
|
27
|
-
const transactions = await exchange.fetchDeposits (currencyCode, startTime, undefined, {
|
|
28
|
-
'endTime': endTime,
|
|
29
|
-
})
|
|
30
|
-
if (transactions.length) {
|
|
31
|
-
const lastTransaction = transactions[transactions.length - 1]
|
|
32
|
-
startTime = lastTransaction['timestamp'] + 1
|
|
33
|
-
allTransactions = allTransactions.concat (transactions)
|
|
34
|
-
} else {
|
|
35
|
-
startTime = endTime;
|
|
36
|
-
}
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
console.log ('Fetched', allTransactions.length, 'transactions')
|
|
40
|
-
for (let i = 0; i < allTransactions.length; i++) {
|
|
41
|
-
const transaction = allTransactions[i]
|
|
42
|
-
console.log (i, transaction['datetime'], transaction['txid'], transaction['currency'], transaction['amount'])
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
}) ()
|
|
@@ -1,34 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt.js')
|
|
4
|
-
|
|
5
|
-
console.log('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
async function symbolLoop (exchange, symbol, timeframe) {
|
|
8
|
-
while (true) {
|
|
9
|
-
try {
|
|
10
|
-
const ohlcvs = await exchange.fetchOHLCV (symbol, timeframe)
|
|
11
|
-
console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, symbol, ohlcvs.length, 'OHLCV candles received')
|
|
12
|
-
// await exchange.sleep (60 * 1000) // sleep if necessary, though not required
|
|
13
|
-
} catch (e) {
|
|
14
|
-
console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, symbol, e.constructor.name, e.message)
|
|
15
|
-
}
|
|
16
|
-
}
|
|
17
|
-
}
|
|
18
|
-
|
|
19
|
-
async function main () {
|
|
20
|
-
const exchange = new ccxt.binance ()
|
|
21
|
-
await exchange.loadMarkets ()
|
|
22
|
-
// exchange.verbose = true // uncomment for debugging purposes if necessary
|
|
23
|
-
const symbols = [
|
|
24
|
-
'BTC/USDT', // unified symbols used here as opposed to exchange-specific market ids
|
|
25
|
-
'ETH/USDT', // more about unified symbols vs exchange-specific ids here:
|
|
26
|
-
'ADA/USDT', // https://github.com/ccxt/ccxt/wiki/Manual#markets
|
|
27
|
-
]
|
|
28
|
-
const timeframe = '1m'
|
|
29
|
-
const loops = symbols.map (symbol => symbolLoop (exchange, symbol, timeframe))
|
|
30
|
-
await Promise.all (loops)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
main ()
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt.js')
|
|
4
|
-
|
|
5
|
-
console.log('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
function symbolLoop (exchange, symbol, timeframe) {
|
|
8
|
-
exchange.fetchOHLCV (symbol, timeframe).then (ohlcvs => {
|
|
9
|
-
console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, symbol, ohlcvs.length, 'OHLCV candles received')
|
|
10
|
-
setTimeout (() => symbolLoop (exchange, symbol, timeframe), 0)
|
|
11
|
-
}).catch (e => {
|
|
12
|
-
console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, symbol, e.constructor.name, e.message)
|
|
13
|
-
setTimeout (() => symbolLoop (exchange, symbol, timeframe), 0)
|
|
14
|
-
})
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
function main () {
|
|
18
|
-
const exchange = new ccxt.binance ()
|
|
19
|
-
// exchange.verbose = true // uncomment for debugging purposes if necessary
|
|
20
|
-
const symbols = [
|
|
21
|
-
'BTC/USDT', // unified symbols used here as opposed to exchange-specific market ids
|
|
22
|
-
'ETH/USDT', // more about unified symbols vs exchange-specific ids here:
|
|
23
|
-
'ADA/USDT', // https://github.com/ccxt/ccxt/wiki/Manual#markets
|
|
24
|
-
]
|
|
25
|
-
const timeframe = '1m'
|
|
26
|
-
exchange.loadMarkets ().then (markets => {
|
|
27
|
-
for (const symbol of symbols) {
|
|
28
|
-
setTimeout (() => symbolLoop (exchange, symbol, timeframe), 0)
|
|
29
|
-
}
|
|
30
|
-
})
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
main ()
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
|
|
5
|
-
async function fetchTickers (exchange) {
|
|
6
|
-
let tickers = undefined
|
|
7
|
-
try {
|
|
8
|
-
// await exchange.loadMarkets () // optional
|
|
9
|
-
tickers = await exchange.fetchTickers ()
|
|
10
|
-
} catch (e) {
|
|
11
|
-
console.error (e.constructor.name, e.message)
|
|
12
|
-
}
|
|
13
|
-
return tickers
|
|
14
|
-
}
|
|
15
|
-
|
|
16
|
-
(async () => {
|
|
17
|
-
|
|
18
|
-
const future = new ccxt.binance ({ options: { defaultType: 'future' }})
|
|
19
|
-
const delivery = new ccxt.binance ({ options: { defaultType: 'delivery' }})
|
|
20
|
-
|
|
21
|
-
// ...
|
|
22
|
-
|
|
23
|
-
const futureTickers = await fetchTickers (future);
|
|
24
|
-
console.log (futureTickers)
|
|
25
|
-
|
|
26
|
-
console.log ('-------------------------------------------')
|
|
27
|
-
|
|
28
|
-
const deliveryTickers = await fetchTickers (delivery);
|
|
29
|
-
console.log (deliveryTickers)
|
|
30
|
-
|
|
31
|
-
}) ()
|
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
// https://github.com/ccxt/ccxt/issues/10181
|
|
8
|
-
|
|
9
|
-
async function main () {
|
|
10
|
-
|
|
11
|
-
const exchange = new ccxt.binance ({
|
|
12
|
-
'apiKey': 'YOUR_API_KEY',
|
|
13
|
-
'secret': 'YOUR_SECRET',
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
const markets = await exchange.loadMarkets ()
|
|
17
|
-
|
|
18
|
-
// exchange.verbose = true // uncomment for debugging purposes
|
|
19
|
-
|
|
20
|
-
const fromEmail = 'sender@example.com' // edit for your values
|
|
21
|
-
, toEmail = 'receiver@example.com' // edit for your values
|
|
22
|
-
, code = 'USDT' // edit for your values
|
|
23
|
-
, amount = 100 // edit for your values
|
|
24
|
-
, futuresType = 1 // 1 for USDT-margined futures,2 for coin-margined futures
|
|
25
|
-
|
|
26
|
-
const currency = exchange.currency (code);
|
|
27
|
-
|
|
28
|
-
const response = await exchange.sapiPostSubAccountFuturesInternalTransfer ({
|
|
29
|
-
'fromEmail': fromEmail, // sender email
|
|
30
|
-
'toEmail': toEmail, // recipient email
|
|
31
|
-
'futuresType': futuresType, // 1 for USDT-margined futures,2 for coin-margined futures
|
|
32
|
-
'asset': currency['id'],
|
|
33
|
-
'amount': exchange.currencyToPrecision (code, amount),
|
|
34
|
-
})
|
|
35
|
-
|
|
36
|
-
console.log (response)
|
|
37
|
-
|
|
38
|
-
}
|
|
39
|
-
|
|
40
|
-
main ()
|
|
41
|
-
|