ccxt 4.2.99 → 4.3.1
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 +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/binance.js +56 -0
- package/dist/cjs/src/bingx.js +2 -2
- package/dist/cjs/src/bitget.js +64 -2
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/coinex.js +55 -60
- package/dist/cjs/src/kraken.js +8 -3
- package/dist/cjs/src/kucoin.js +19 -17
- 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/ascendex.js +2 -2
- 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 +64 -2
- package/js/src/bybit.js +1 -1
- package/js/src/coinex.js +55 -60
- package/js/src/kraken.js +8 -3
- package/js/src/kucoin.js +19 -17
- 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/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,159 +0,0 @@
|
|
|
1
|
-
import asTable from 'as-table';
|
|
2
|
-
import ololog from 'ololog';
|
|
3
|
-
import path from 'path';
|
|
4
|
-
import fs from 'fs';
|
|
5
|
-
import ansicolor from 'ansicolor';
|
|
6
|
-
import ccxt from '../../js/ccxt.js';
|
|
7
|
-
|
|
8
|
-
const { noLocate } = ololog;
|
|
9
|
-
const log = noLocate;
|
|
10
|
-
|
|
11
|
-
ansicolor.nice
|
|
12
|
-
/* ------------------------------------------------------------------------ */
|
|
13
|
-
|
|
14
|
-
const [processPath, , argument = null] = process.argv.filter (x => !x.startsWith ('--'))
|
|
15
|
-
, verbose = process.argv.includes ('--verbose')
|
|
16
|
-
, strict = process.argv.includes ('--strict')
|
|
17
|
-
, compact = process.argv.includes ('--compact')
|
|
18
|
-
, debug = process.argv.includes ('--debug')
|
|
19
|
-
, marketsOnly = process.argv.includes ('--markets')
|
|
20
|
-
, currenciesOnly = process.argv.includes ('--currencies')
|
|
21
|
-
|
|
22
|
-
/* ------------------------------------------------------------------------ */
|
|
23
|
-
|
|
24
|
-
const warn = log.bright.yellow.error // .error → stderr
|
|
25
|
-
|
|
26
|
-
/* ------------------------------------------------------------------------ */
|
|
27
|
-
|
|
28
|
-
process.on ('uncaughtException', e => { log.bright.red.error (e); process.exit (1) })
|
|
29
|
-
process.on ('unhandledRejection', e => { log.bright.red.error (e); process.exit (1) })
|
|
30
|
-
|
|
31
|
-
/* ------------------------------------------------------------------------ */
|
|
32
|
-
|
|
33
|
-
let printUsage = function () {
|
|
34
|
-
log (' Non-strict search: node', process.argv[1], 'symbol'.green)
|
|
35
|
-
log (' Non-strict search: node', process.argv[1], 'currency'.green)
|
|
36
|
-
log (' Strict search: node', process.argv[1], '--strict', 'argument'.green)
|
|
37
|
-
log (' Search markets only: node', process.argv[1], '--markets', 'argument'.green)
|
|
38
|
-
log ('Search currencies only: node', process.argv[1], '--currencies', 'argument'.green)
|
|
39
|
-
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
if (process.argv.length < 3) {
|
|
43
|
-
printUsage ()
|
|
44
|
-
process.exit ()
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
/* ------------------------------------------------------------------------ */
|
|
48
|
-
|
|
49
|
-
const keysGlobal = path.resolve ('keys.json')
|
|
50
|
-
const keysLocal = path.resolve ('keys.local.json')
|
|
51
|
-
let globalKeysFile = fs.existsSync (keysGlobal) ? keysGlobal : false
|
|
52
|
-
let localKeysFile = fs.existsSync (keysLocal) ? keysLocal : globalKeysFile
|
|
53
|
-
|
|
54
|
-
const keys = JSON.parse (fs.readFileSync (localKeysFile))
|
|
55
|
-
|
|
56
|
-
/* ------------------------------------------------------------------------ */
|
|
57
|
-
|
|
58
|
-
log ('Looking up for:', argument.bright, strict ? '(strict search)' : '(non-strict search)')
|
|
59
|
-
|
|
60
|
-
const checkAgainst = strict ?
|
|
61
|
-
(a, b) => (a || '').toUpperCase ().includes ((b || '').toUpperCase ()) :
|
|
62
|
-
(a, b) => (a || '').toLowerCase ().includes ((b || '').toLowerCase ())
|
|
63
|
-
|
|
64
|
-
;(async function test () {
|
|
65
|
-
|
|
66
|
-
let exchanges = await Promise.all (ccxt.exchanges.map (async id => {
|
|
67
|
-
|
|
68
|
-
// instantiate the exchange
|
|
69
|
-
let exchange = new ccxt[id] (ccxt.extend (localKeysFile ? (keys[id] || {}) : {}, {
|
|
70
|
-
// agent, // set up keys and settings, if any
|
|
71
|
-
}))
|
|
72
|
-
|
|
73
|
-
if (exchange.has.fetchMarkets) {
|
|
74
|
-
|
|
75
|
-
try {
|
|
76
|
-
|
|
77
|
-
// load markets
|
|
78
|
-
await exchange.loadMarkets ()
|
|
79
|
-
return exchange
|
|
80
|
-
|
|
81
|
-
} catch (e) {
|
|
82
|
-
|
|
83
|
-
if (debug) {
|
|
84
|
-
log.red (exchange.id, e.constructor.name)
|
|
85
|
-
}
|
|
86
|
-
return undefined
|
|
87
|
-
}
|
|
88
|
-
}
|
|
89
|
-
}))
|
|
90
|
-
|
|
91
|
-
// filter out exchanges that failed to load
|
|
92
|
-
exchanges = exchanges.filter (exchange => exchange)
|
|
93
|
-
|
|
94
|
-
if (!currenciesOnly) {
|
|
95
|
-
|
|
96
|
-
log ("---------------------------------------------------------------")
|
|
97
|
-
|
|
98
|
-
log ("Markets And Symbols:")
|
|
99
|
-
|
|
100
|
-
let markets = ccxt.flatten (exchanges
|
|
101
|
-
.map (exchange =>
|
|
102
|
-
Object.values (exchange.markets).map (market =>
|
|
103
|
-
exchange.extend (market, {
|
|
104
|
-
exchange: exchange.id[(market.active !== false) ? 'green' : 'yellow'],
|
|
105
|
-
}))))
|
|
106
|
-
.filter (market => {
|
|
107
|
-
try {
|
|
108
|
-
return (
|
|
109
|
-
checkAgainst (market['base'], argument) ||
|
|
110
|
-
checkAgainst (market['quote'], argument) ||
|
|
111
|
-
(market['baseId'] ? checkAgainst (market['baseId'].toString (), argument) : false) ||
|
|
112
|
-
(market['quoteId'] ? checkAgainst (market['quoteId'].toString (), argument) : false) ||
|
|
113
|
-
checkAgainst (market['symbol'], argument) ||
|
|
114
|
-
checkAgainst (market['id'].toString (), argument) ||
|
|
115
|
-
checkAgainst (market['type'], argument)
|
|
116
|
-
)
|
|
117
|
-
} catch (e) {
|
|
118
|
-
if (debug) {
|
|
119
|
-
log.red (e.constructor.name, e.message)
|
|
120
|
-
}
|
|
121
|
-
return false
|
|
122
|
-
}
|
|
123
|
-
})
|
|
124
|
-
|
|
125
|
-
log (asTable (markets.map (market => {
|
|
126
|
-
market = ccxt.omit (market, [ 'info', 'limits', 'precision', 'tiers' ])
|
|
127
|
-
return (!compact) ? market : {
|
|
128
|
-
'symbol': market['symbol'],
|
|
129
|
-
'exchange': market['exchange'],
|
|
130
|
-
};
|
|
131
|
-
})))
|
|
132
|
-
|
|
133
|
-
log (markets.length.toString ().yellow, 'markets')
|
|
134
|
-
}
|
|
135
|
-
|
|
136
|
-
if (!marketsOnly) {
|
|
137
|
-
|
|
138
|
-
log ("---------------------------------------------------------------")
|
|
139
|
-
|
|
140
|
-
log ("Currencies:")
|
|
141
|
-
|
|
142
|
-
let currencies = ccxt.flatten (exchanges
|
|
143
|
-
.map (exchange =>
|
|
144
|
-
Object.values (exchange.currencies).map (currency =>
|
|
145
|
-
exchange.extend (currency, {
|
|
146
|
-
exchange: exchange.id[(currency.active !== false) ? 'green' : 'yellow'],
|
|
147
|
-
}))))
|
|
148
|
-
.filter (currency =>
|
|
149
|
-
checkAgainst (currency['code'], argument) ||
|
|
150
|
-
checkAgainst (currency['id'], argument))
|
|
151
|
-
|
|
152
|
-
log (asTable (currencies.map (currency => ccxt.omit (currency, [ 'info', 'limits', 'precision' ]))))
|
|
153
|
-
|
|
154
|
-
log (currencies.length.toString ().yellow, 'currencies')
|
|
155
|
-
}
|
|
156
|
-
|
|
157
|
-
process.exit ()
|
|
158
|
-
|
|
159
|
-
}) ()
|
|
@@ -1,80 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
|
|
3
|
-
// ----------------------------------------------------------------------------
|
|
4
|
-
// an example of how to load markets for each exchange just once
|
|
5
|
-
// in order to save memory and time for initializing multiple exchange instances
|
|
6
|
-
// see https://github.com/ccxt/ccxt/issues/7312 for details
|
|
7
|
-
// ----------------------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
const globalIds = [ 'binance', 'poloniex', 'bittrex', 'bitstamp' ]
|
|
10
|
-
const globalExchanges = {}
|
|
11
|
-
|
|
12
|
-
async function loadExchange (id) {
|
|
13
|
-
try {
|
|
14
|
-
const exchange = new ccxt[id] ()
|
|
15
|
-
await exchange.loadMarkets ()
|
|
16
|
-
globalExchanges[id] = exchange
|
|
17
|
-
} catch (e) {
|
|
18
|
-
// throw e // uncomment to break the entire program on any error
|
|
19
|
-
// console.log (e) // print the exception and ignore this exchange
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
async function main () {
|
|
24
|
-
|
|
25
|
-
// initialize unique global exchange instances first
|
|
26
|
-
await Promise.all (globalIds.map (async (id) => loadExchange (id)))
|
|
27
|
-
console.log ('Loaded global exchanges:', Object.keys (globalExchanges))
|
|
28
|
-
|
|
29
|
-
// load user exchanges and keys from a database or configure these via JSON
|
|
30
|
-
const users = {
|
|
31
|
-
'user1': {
|
|
32
|
-
'binance': { 'apiKey': 'USER1_BINANCE_API_KEY', 'secret': 'USER1_BINANCE_SECRET' },
|
|
33
|
-
'poloniex': { 'apiKey': 'USER1_POLONIEX_API_KEY', 'secret': 'USER1_POLONIEX_SECRET' }
|
|
34
|
-
},
|
|
35
|
-
'user2': {
|
|
36
|
-
'poloniex': { 'apiKey': 'USER2_POLONIEX_API_KEY', 'secret': 'USER2_POLONIEX_SECRET' },
|
|
37
|
-
'bittrex': { 'apiKey': 'USER2_BITTREX_API_KEY', 'secret': 'USER2_BITTREX_SECRET' }
|
|
38
|
-
},
|
|
39
|
-
'user3': {
|
|
40
|
-
'bittrex': { 'apiKey': 'USER3_BITTREX_API_KEY', 'secret': 'USER3_BITTREX_SECRET' },
|
|
41
|
-
'bitstamp': { 'apiKey': 'USER3_BITSTAMP_API_KEY', 'secret': 'USER3_BITSTAMP_SECRET' }
|
|
42
|
-
}
|
|
43
|
-
}
|
|
44
|
-
|
|
45
|
-
// initialize local exchanges per user
|
|
46
|
-
const localExchanges = {}
|
|
47
|
-
for (const userId in users) {
|
|
48
|
-
const userExchanges = {}
|
|
49
|
-
for (const exchangeId in users[userId]) {
|
|
50
|
-
if (exchangeId in globalExchanges) {
|
|
51
|
-
const globalExchange = globalExchanges[exchangeId]
|
|
52
|
-
const exchange = new ccxt[exchangeId] ({
|
|
53
|
-
// 'verbose': true, // uncomment for debug output
|
|
54
|
-
... users[userId][exchangeId],
|
|
55
|
-
});
|
|
56
|
-
[
|
|
57
|
-
'ids',
|
|
58
|
-
'markets',
|
|
59
|
-
'markets_by_id',
|
|
60
|
-
'currencies',
|
|
61
|
-
'currencies_by_id',
|
|
62
|
-
'baseCurrencies',
|
|
63
|
-
'quoteCurrencies',
|
|
64
|
-
'symbols',
|
|
65
|
-
].forEach ((propertyName) => {
|
|
66
|
-
exchange[propertyName] = globalExchange[propertyName]
|
|
67
|
-
})
|
|
68
|
-
userExchanges[exchangeId] = exchange
|
|
69
|
-
}
|
|
70
|
-
}
|
|
71
|
-
localExchanges[userId] = userExchanges
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
// print the loaded exchanges per user
|
|
75
|
-
for (const userId in localExchanges) {
|
|
76
|
-
console.log ('Loaded', userId, Object.keys (localExchanges[userId]))
|
|
77
|
-
}
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
main ()
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt.js');
|
|
4
|
-
|
|
5
|
-
const exchange = new ccxt.binanceusdm ();
|
|
6
|
-
const timeframe = '1h';
|
|
7
|
-
const type = 'swap';
|
|
8
|
-
|
|
9
|
-
async function fetchOHLCV (symbol) {
|
|
10
|
-
/**
|
|
11
|
-
* @description Wrapper around exchange.fetchOHLCV method
|
|
12
|
-
* @param {string} symbol CCXT unified symbol
|
|
13
|
-
* @returns {[float|str]} 1d array with a single ohlcv record with the market symbol appended
|
|
14
|
-
*/
|
|
15
|
-
try {
|
|
16
|
-
const ohlcv = await exchange.fetchOHLCV (symbol, timeframe, undefined, 1);
|
|
17
|
-
ohlcv[0].push (symbol);
|
|
18
|
-
return ohlcv[0];
|
|
19
|
-
} catch (err) {
|
|
20
|
-
console.log (symbol + ' failed fetchOHLCV with error ' + err)
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
|
|
24
|
-
function getPriceChangePercent (ohlcv) {
|
|
25
|
-
/**
|
|
26
|
-
* @description Gets the price change of a market as a percentage
|
|
27
|
-
* @param {[float]} ohlcv A single ohlcv record with the market symbol appended
|
|
28
|
-
* @returns {[float, str]} The price change as a percent with the symbol for the market
|
|
29
|
-
*/
|
|
30
|
-
const open = ohlcv[1];
|
|
31
|
-
const close = ohlcv[4];
|
|
32
|
-
const symbol = ohlcv[6];
|
|
33
|
-
const priceIncrease = close - open;
|
|
34
|
-
const increaseAsRatio = priceIncrease / open;
|
|
35
|
-
const increaseAsPercent = increaseAsRatio * 100;
|
|
36
|
-
return [increaseAsPercent, symbol]
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
function sort (a, b) {
|
|
40
|
-
return a[0] - b[0];
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
async function main () {
|
|
44
|
-
/**
|
|
45
|
-
* @description Gets the price change as a percent of every market matching type over the last timeframe matching timeframe and prints a sorted list. The most immediate candle is ignored because it is incomplete
|
|
46
|
-
*/
|
|
47
|
-
await exchange.loadMarkets ();
|
|
48
|
-
const allSwapSymbols = exchange.symbols.filter (symbol => exchange.market (symbol)[type] );
|
|
49
|
-
const ohlcvs = await Promise.all (allSwapSymbols.map (symbol => fetchOHLCV (symbol)));
|
|
50
|
-
const priceChanges = ohlcvs.map (ohlcv => getPriceChangePercent (ohlcv));
|
|
51
|
-
const sorted = priceChanges.sort (sort);
|
|
52
|
-
console.dir(sorted, {'maxArrayLength': null})
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
main ()
|
package/examples/js/symbols.js
DELETED
|
@@ -1,110 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import fs from 'fs';
|
|
5
|
-
import ololog from 'ololog';
|
|
6
|
-
import ansicolor from 'ansicolor';
|
|
7
|
-
import asTable from 'as-table';
|
|
8
|
-
|
|
9
|
-
const { noLocate } = ololog;
|
|
10
|
-
const log = noLocate;
|
|
11
|
-
|
|
12
|
-
ansicolor.nice
|
|
13
|
-
const table = asTable.configure ({ delimiter: ' | ' }), verbose = process.argv.includes ('--verbose'), debug = process.argv.includes ('--debug');
|
|
14
|
-
|
|
15
|
-
//-----------------------------------------------------------------------------
|
|
16
|
-
|
|
17
|
-
let printSupportedExchanges = function () {
|
|
18
|
-
log ('Supported exchanges:', ccxt.exchanges.join (', ').green)
|
|
19
|
-
}
|
|
20
|
-
|
|
21
|
-
let printUsage = function () {
|
|
22
|
-
log ('Usage: node', process.argv[1], 'id'.green)
|
|
23
|
-
printSupportedExchanges ()
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
let printSymbols = async (id) => {
|
|
27
|
-
|
|
28
|
-
// check if the exchange is supported by ccxt
|
|
29
|
-
let exchangeFound = ccxt.exchanges.indexOf (id) > -1
|
|
30
|
-
if (exchangeFound) {
|
|
31
|
-
|
|
32
|
-
log ('Instantiating', id.green, 'exchange')
|
|
33
|
-
|
|
34
|
-
// set up keys and settings, if any
|
|
35
|
-
const keysGlobal = 'keys.json'
|
|
36
|
-
const keysLocal = 'keys.local.json'
|
|
37
|
-
|
|
38
|
-
let keysFile = fs.existsSync (keysLocal) ? keysLocal : (fs.existsSync (keysGlobal) ? keysGlobal : false)
|
|
39
|
-
let settings = keysFile ? (require ('../../' + keysFile)[id] || {}) : {}
|
|
40
|
-
|
|
41
|
-
// instantiate the exchange by id
|
|
42
|
-
let exchange = new ccxt[id] (ccxt.extend ({
|
|
43
|
-
verbose,
|
|
44
|
-
// 'proxy': 'https://cors-anywhere.herokuapp.com/',
|
|
45
|
-
// 'proxy': 'https://crossorigin.me/',
|
|
46
|
-
}, settings))
|
|
47
|
-
|
|
48
|
-
// Object.assign (exchange, settings)
|
|
49
|
-
|
|
50
|
-
// load all markets from the exchange
|
|
51
|
-
let markets = await exchange.loadMarkets ()
|
|
52
|
-
|
|
53
|
-
// debug log
|
|
54
|
-
if (debug)
|
|
55
|
-
Object.values (markets).forEach (market => log (market))
|
|
56
|
-
|
|
57
|
-
log ("\nSymbols:\n")
|
|
58
|
-
|
|
59
|
-
// make a table of all markets
|
|
60
|
-
|
|
61
|
-
const marketsList =
|
|
62
|
-
ccxt.sortBy (Object.values (markets), 'symbol')
|
|
63
|
-
.map (market =>
|
|
64
|
-
ccxt.omit (market, [ 'info', 'limits', 'precision', 'fees' ]))
|
|
65
|
-
|
|
66
|
-
let table = table (marketsList)
|
|
67
|
-
log (table)
|
|
68
|
-
|
|
69
|
-
log ("\n---------------------------------------------------------------")
|
|
70
|
-
|
|
71
|
-
log ("\nCurrencies:\n")
|
|
72
|
-
|
|
73
|
-
// make a table of all currencies
|
|
74
|
-
|
|
75
|
-
const currenciesList =
|
|
76
|
-
ccxt.sortBy (Object.values (exchange.currencies), 'code')
|
|
77
|
-
.map (currency =>
|
|
78
|
-
ccxt.omit (currency, [ 'info', 'limits' ]))
|
|
79
|
-
|
|
80
|
-
const currenciesTable = table (currenciesList)
|
|
81
|
-
log (currenciesTable)
|
|
82
|
-
|
|
83
|
-
log ("\n---------------------------------------------------------------")
|
|
84
|
-
|
|
85
|
-
// output a summary
|
|
86
|
-
log (id.green, 'has', exchange.symbols.length.toString ().yellow, 'symbols and',
|
|
87
|
-
Object.keys (exchange.currencies).length.toString ().yellow, "currencies\n")
|
|
88
|
-
|
|
89
|
-
} else {
|
|
90
|
-
|
|
91
|
-
log ('Exchange ' + id.red + ' not found')
|
|
92
|
-
printSupportedExchanges ()
|
|
93
|
-
}
|
|
94
|
-
}
|
|
95
|
-
|
|
96
|
-
;(async function main () {
|
|
97
|
-
|
|
98
|
-
if (process.argv.length > 2) {
|
|
99
|
-
|
|
100
|
-
let id = process.argv[2]
|
|
101
|
-
await printSymbols (id)
|
|
102
|
-
|
|
103
|
-
} else {
|
|
104
|
-
|
|
105
|
-
printUsage ()
|
|
106
|
-
}
|
|
107
|
-
|
|
108
|
-
process.exit ()
|
|
109
|
-
|
|
110
|
-
}) ()
|
package/examples/js/theocean.js
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
(async function main () {
|
|
5
|
-
const walletAddress = process.env['WALLET_ADDRESS']
|
|
6
|
-
const privateKey = process.env['PRIVATE_KEY']
|
|
7
|
-
const apiKey = process.env['API_KEY']
|
|
8
|
-
const secret = process.env['SECRET']
|
|
9
|
-
|
|
10
|
-
const ocean = new ccxt.theocean({
|
|
11
|
-
walletAddress,
|
|
12
|
-
privateKey,
|
|
13
|
-
apiKey,
|
|
14
|
-
secret
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
// get balance
|
|
18
|
-
const balance = await ocean.fetchBalanceByCode('REP');
|
|
19
|
-
console.log('REP balance: ', balance);
|
|
20
|
-
|
|
21
|
-
// get order book
|
|
22
|
-
const orderBook = await ocean.fetchOrderBook('REP/ZRX');
|
|
23
|
-
console.log('REP/ZRX orderbook: ', orderBook);
|
|
24
|
-
|
|
25
|
-
// placing order
|
|
26
|
-
const placeResult = await ocean.createOrder('REP/ZRX', 'limit', 'sell', '0.5', '30');
|
|
27
|
-
const id = placeResult['id'];
|
|
28
|
-
console.log('result of placing order: ', placeResult);
|
|
29
|
-
|
|
30
|
-
// cancel order
|
|
31
|
-
if (placeResult['remaining'] > 0) {
|
|
32
|
-
const cancelResult = await ocean.cancelOrder(id);
|
|
33
|
-
console.log('cancel result: ', cancelResult);
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
// cancel all open user orders
|
|
37
|
-
const cancelAllOrderssResult = await ocean.cancelAllOrders();
|
|
38
|
-
console.log('cancel all orders result: ', cancelAllOrderssResult);
|
|
39
|
-
|
|
40
|
-
process.exit ();
|
|
41
|
-
}) ()
|
package/examples/js/tickers.js
DELETED
|
@@ -1,106 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import asTable from 'as-table';
|
|
5
|
-
import ansicolor from 'ansicolor';
|
|
6
|
-
import ololog from 'ololog';
|
|
7
|
-
|
|
8
|
-
const log = ololog.configure ({ locate: false }), verbose = process.argv.includes ('--verbose');
|
|
9
|
-
|
|
10
|
-
ansicolor.nice
|
|
11
|
-
|
|
12
|
-
//-----------------------------------------------------------------------------
|
|
13
|
-
|
|
14
|
-
let printSupportedExchanges = function () {
|
|
15
|
-
log ('Supported exchanges:', ccxt.exchanges.join (', ').green)
|
|
16
|
-
}
|
|
17
|
-
|
|
18
|
-
let printUsage = function () {
|
|
19
|
-
log ('Usage: node', process.argv[1], 'id'.green, '[symbol]'.yellow)
|
|
20
|
-
printSupportedExchanges ()
|
|
21
|
-
}
|
|
22
|
-
|
|
23
|
-
let printSymbols = function (exchange) {
|
|
24
|
-
log (id.green, 'has', exchange.symbols.length, 'symbols:', exchange.symbols.join (', ').yellow)
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
let sleep = (ms) => new Promise (resolve => setTimeout (resolve, ms))
|
|
28
|
-
|
|
29
|
-
let printTicker = async (exchange, symbol) => {
|
|
30
|
-
let ticker = await exchange.fetchTicker (symbol)
|
|
31
|
-
log (exchange.id.green, symbol.yellow, 'ticker',
|
|
32
|
-
ticker['datetime'],
|
|
33
|
-
'high: ' + ticker['high'],
|
|
34
|
-
'low: ' + ticker['low'],
|
|
35
|
-
'bid: ' + ticker['bid'],
|
|
36
|
-
'ask: ' + ticker['ask'],
|
|
37
|
-
'volume: ' + ticker['baseVolume'])
|
|
38
|
-
return ticker
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
//-----------------------------------------------------------------------------
|
|
42
|
-
|
|
43
|
-
let printTickers = async (id) => {
|
|
44
|
-
|
|
45
|
-
log ('Instantiating', id.green, 'exchange exchange')
|
|
46
|
-
|
|
47
|
-
// instantiate the exchange by id
|
|
48
|
-
let exchange = new ccxt[id] ({ verbose })
|
|
49
|
-
|
|
50
|
-
// load all markets from the exchange
|
|
51
|
-
let markets = await exchange.loadMarkets ()
|
|
52
|
-
|
|
53
|
-
if (process.argv.length > 3) { // if a symbol was supplied, get that symbol only
|
|
54
|
-
|
|
55
|
-
let symbol = process.argv[3]
|
|
56
|
-
|
|
57
|
-
await printTicker (exchange, symbol)
|
|
58
|
-
|
|
59
|
-
} else { // otherwise run through all symbols one by one
|
|
60
|
-
|
|
61
|
-
for (let symbol of exchange.symbols)
|
|
62
|
-
if ((symbol.indexOf ('.d') < 0)) { // skip darkpool symbols
|
|
63
|
-
|
|
64
|
-
const market = exchange.markets[symbol];
|
|
65
|
-
|
|
66
|
-
if (!market['active']) {
|
|
67
|
-
log.red (exchange.id + ' ' + symbol + ' inactive');
|
|
68
|
-
continue;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
await sleep (exchange.rateLimit)
|
|
72
|
-
await printTicker (exchange, symbol)
|
|
73
|
-
}
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
|
|
77
|
-
//-----------------------------------------------------------------------------
|
|
78
|
-
|
|
79
|
-
;(async function main () {
|
|
80
|
-
|
|
81
|
-
if (process.argv.length > 2) {
|
|
82
|
-
|
|
83
|
-
let id = process.argv[2]
|
|
84
|
-
|
|
85
|
-
// check if the exchange is supported by ccxt
|
|
86
|
-
let exchangeFound = ccxt.exchanges.indexOf (id) > -1
|
|
87
|
-
|
|
88
|
-
if (exchangeFound) {
|
|
89
|
-
|
|
90
|
-
await printTickers (id)
|
|
91
|
-
|
|
92
|
-
} else {
|
|
93
|
-
|
|
94
|
-
log ('Exchange ' + id.red + ' not found')
|
|
95
|
-
printUsage ()
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
} else {
|
|
99
|
-
|
|
100
|
-
printUsage ()
|
|
101
|
-
|
|
102
|
-
}
|
|
103
|
-
|
|
104
|
-
process.exit ()
|
|
105
|
-
|
|
106
|
-
}) ()
|
|
@@ -1,61 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import ololog from 'ololog'
|
|
5
|
-
import ansicolor from 'ansicolor';
|
|
6
|
-
|
|
7
|
-
const log = ololog.configure ({ locate: false })
|
|
8
|
-
|
|
9
|
-
ansicolor.nice
|
|
10
|
-
|
|
11
|
-
//-----------------------------------------------------------------------------
|
|
12
|
-
|
|
13
|
-
/*
|
|
14
|
-
* Warning: Sometimes the exchanges have gaps in their OHLCV data, so it does not mean
|
|
15
|
-
* that CCXT is broken if you see gaps in the chart.
|
|
16
|
-
*/
|
|
17
|
-
|
|
18
|
-
async function fetchData(exchange, symbol, timeframe) {
|
|
19
|
-
await exchange.loadMarkets()
|
|
20
|
-
// exchange.verbose = true;
|
|
21
|
-
const duration = exchange.parseTimeframe (timeframe) *1000; // in milliseconds
|
|
22
|
-
const ohlcv = await exchange.fetchOHLCV (symbol, timeframe, undefined, undefined, {'paginate': true, 'paginationCalls': 5})
|
|
23
|
-
validateTimeframes(ohlcv, duration, exchange, symbol)
|
|
24
|
-
}
|
|
25
|
-
|
|
26
|
-
function validateTimeframes(ohlcv, duration, exchange, symbol) {
|
|
27
|
-
for (let j = 0; j < ohlcv.length; j++) {
|
|
28
|
-
const [timestamp, open, high, low, close, volume] = ohlcv[j]
|
|
29
|
-
if (j > 0) {
|
|
30
|
-
const [prevTimestamp, prevOpen, prevHigh, prevLow, prevClose, prevVolume] = ohlcv[j - 1]
|
|
31
|
-
if (timestamp - prevTimestamp !== duration) {
|
|
32
|
-
log.red ('[' + j + ']',exchange.id, symbol, 'OHLCV data is not continuous, at', exchange.iso8601 (timestamp), 'diff:', ((timestamp - prevTimestamp) / 1000), 's expected:', duration/ 1000, 's')
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
log.green(exchange.id, symbol, `All the ${ohlcv.length} candles returned are continuous`)
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
async function main () {
|
|
40
|
-
|
|
41
|
-
const exchanges = {
|
|
42
|
-
'binance': 'BTC/USDT',
|
|
43
|
-
'bitget': 'BTC/USDT',
|
|
44
|
-
'kucoin': 'BTC/USDT',
|
|
45
|
-
'kucoinfutures': 'BTC/USDT:USDT',
|
|
46
|
-
'okex': 'BTC/USDT',
|
|
47
|
-
'bybit': 'BTC/USDT'
|
|
48
|
-
}
|
|
49
|
-
const timeframe = '1m';
|
|
50
|
-
const keys = Object.keys (exchanges)
|
|
51
|
-
const promises = [];
|
|
52
|
-
for (let i = 0; i < keys.length; i++) {
|
|
53
|
-
const name = keys[i]
|
|
54
|
-
const symbol = exchanges[name]
|
|
55
|
-
const exchange = new ccxt[name] ({ enableRateLimit: true })
|
|
56
|
-
promises.push(fetchData(exchange, symbol, timeframe))
|
|
57
|
-
}
|
|
58
|
-
await Promise.all(promises)
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
main()
|
|
@@ -1,15 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
async function example() {
|
|
4
|
-
const binance = new ccxt.pro.binance({});
|
|
5
|
-
const subscriptions = [
|
|
6
|
-
['BTC/USDT', '5m'],
|
|
7
|
-
['ETH/USDT', '5m'],
|
|
8
|
-
['BTC/USDT', '1h'],
|
|
9
|
-
];
|
|
10
|
-
while (true) {
|
|
11
|
-
const ohlcv = await binance.watchOHLCVForSymbols(subscriptions);
|
|
12
|
-
console.log(ohlcv);
|
|
13
|
-
}
|
|
14
|
-
}
|
|
15
|
-
await example();
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
async function example() {
|
|
4
|
-
const binance = new ccxt.pro.binance({});
|
|
5
|
-
const symbol = 'BTC/USDT';
|
|
6
|
-
const timeframe = '1m';
|
|
7
|
-
while (true) {
|
|
8
|
-
const ohlcv = await binance.watchOHLCV(symbol, timeframe);
|
|
9
|
-
console.log(ohlcv);
|
|
10
|
-
}
|
|
11
|
-
}
|
|
12
|
-
await example();
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
async function example() {
|
|
4
|
-
const binance = new ccxt.pro.binance({});
|
|
5
|
-
const symbols = ['BTC/USDT', 'ETH/USDT', 'DOGE/USDT'];
|
|
6
|
-
while (true) {
|
|
7
|
-
const orderbook = await binance.watchOrderBookForSymbols(symbols);
|
|
8
|
-
console.log(orderbook['symbol'], orderbook['asks'][0], orderbook['bids'][0]);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
await example();
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
async function example() {
|
|
4
|
-
const binance = new ccxt.pro.binance({});
|
|
5
|
-
const symbols = ['BTC/USDT', 'ETH/USDT', 'DOGE/USDT'];
|
|
6
|
-
while (true) {
|
|
7
|
-
const trades = await binance.watchTradesForSymbols(symbols);
|
|
8
|
-
console.log(trades);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
await example();
|
|
@@ -1,11 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
async function example() {
|
|
4
|
-
const binance = new ccxt.pro.binance({});
|
|
5
|
-
const symbols = ['BTC/USDT', 'ETH/USDT', 'DOGE/USDT'];
|
|
6
|
-
while (true) {
|
|
7
|
-
const tickers = await binance.watchTickers(symbols);
|
|
8
|
-
console.log(tickers['BTC/USDT'], tickers['ETH/USDT'], tickers['DOGE/USDT']);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
await example();
|