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.
Files changed (317) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/ccxt.js +1 -1
  3. package/dist/cjs/src/ascendex.js +1 -1
  4. package/dist/cjs/src/binance.js +56 -0
  5. package/dist/cjs/src/bingx.js +2 -2
  6. package/dist/cjs/src/bitget.js +64 -2
  7. package/dist/cjs/src/bybit.js +1 -1
  8. package/dist/cjs/src/coinex.js +55 -60
  9. package/dist/cjs/src/kraken.js +8 -3
  10. package/dist/cjs/src/kucoin.js +19 -17
  11. package/dist/cjs/src/okx.js +76 -5
  12. package/dist/cjs/src/pro/kraken.js +2 -2
  13. package/dist/cjs/src/woo.js +40 -0
  14. package/js/ccxt.d.ts +1 -1
  15. package/js/ccxt.js +1 -1
  16. package/js/src/ascendex.js +2 -2
  17. package/js/src/binance.d.ts +3 -1
  18. package/js/src/binance.js +56 -0
  19. package/js/src/bingx.js +3 -3
  20. package/js/src/bitget.d.ts +1 -0
  21. package/js/src/bitget.js +64 -2
  22. package/js/src/bybit.js +1 -1
  23. package/js/src/coinex.js +55 -60
  24. package/js/src/kraken.js +8 -3
  25. package/js/src/kucoin.js +19 -17
  26. package/js/src/okx.d.ts +1 -0
  27. package/js/src/okx.js +76 -5
  28. package/js/src/pro/kraken.js +2 -2
  29. package/js/src/woo.d.ts +1 -0
  30. package/js/src/woo.js +40 -0
  31. package/package.json +2 -1
  32. package/.dockerignore +0 -6
  33. package/.eslintignore +0 -1
  34. package/.git-templates/hooks/pre-push +0 -55
  35. package/.gitattributes +0 -7
  36. package/CHANGELOG.md +0 -6003
  37. package/CODEOWNERS +0 -1
  38. package/CONTRIBUTING.md +0 -1099
  39. package/build.sh +0 -217
  40. package/change.sh +0 -18
  41. package/cleanup.sh +0 -18
  42. package/composer-install.sh +0 -20
  43. package/dist/ccxt.browser.js +0 -327256
  44. package/dist/ccxt.browser.min.js +0 -30
  45. package/dist/ccxt.browser.min.js.LICENSE.txt +0 -12
  46. package/doc/FAQ.rst +0 -1
  47. package/doc/Makefile +0 -20
  48. package/doc/_static/css/dark.css +0 -101
  49. package/doc/_static/css/index.css +0 -128
  50. package/doc/_static/favicon.ico +0 -0
  51. package/doc/_static/javascript/binance-portal.min.js +0 -2369
  52. package/doc/_static/javascript/index.js +0 -195
  53. package/doc/_static/javascript/jquery-ui.min.js +0 -6
  54. package/doc/ccxt.pro.install.rst +0 -1
  55. package/doc/ccxt.pro.manual.rst +0 -1665
  56. package/doc/exchange-markets-by-country.rst +0 -1423
  57. package/doc/exchange-markets.rst +0 -1441
  58. package/doc/index.rst +0 -35
  59. package/doc/install.rst +0 -1
  60. package/doc/make.bat +0 -36
  61. package/doc/manual.rst +0 -7471
  62. package/doc/readme.rst +0 -2191
  63. package/doc/requirements.txt +0 -6
  64. package/examples/ccxt.pro/html/watchTicker.html +0 -51
  65. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +0 -55
  66. package/examples/ccxt.pro/js/binance-https-proxy.js +0 -48
  67. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +0 -38
  68. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +0 -64
  69. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +0 -62
  70. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +0 -68
  71. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +0 -82
  72. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +0 -59
  73. package/examples/ccxt.pro/js/exchange-capabitities.js +0 -72
  74. package/examples/ccxt.pro/js/exchange-close.js +0 -46
  75. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +0 -30
  76. package/examples/ccxt.pro/js/gateio-watch-balance.js +0 -23
  77. package/examples/ccxt.pro/js/gateio-watch-order-book.js +0 -71
  78. package/examples/ccxt.pro/js/graceful-shutdown.js +0 -43
  79. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +0 -37
  80. package/examples/ccxt.pro/js/okex-create-futures-order.js +0 -48
  81. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +0 -54
  82. package/examples/ccxt.pro/js/okx-watch-tickers.js +0 -31
  83. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +0 -46
  84. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +0 -26
  85. package/examples/ccxt.pro/js/one-exchange-many-streams.js +0 -28
  86. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +0 -30
  87. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +0 -40
  88. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +0 -38
  89. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +0 -40
  90. package/examples/ccxt.pro/js/watch-many-orderbooks.js +0 -27
  91. package/examples/ccxt.pro/js/watch-new-trades-only.js +0 -43
  92. package/examples/ccxt.pro/js/watch-new-trades.js +0 -42
  93. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +0 -29
  94. package/examples/ccxt.pro/js/watch-vs-fetch.js +0 -29
  95. package/examples/cs/Examples.sln +0 -22
  96. package/examples/cs/c#.csproj +0 -19
  97. package/examples/html/basic-cors-proxy.html +0 -46
  98. package/examples/html/basic-inheritance.html +0 -47
  99. package/examples/html/basic-poller.html +0 -52
  100. package/examples/html/basic-rate-limiting.html +0 -49
  101. package/examples/html/basic.html +0 -43
  102. package/examples/html/binance-cors-proxy.html +0 -28
  103. package/examples/html/bitmex-browser-cors-proxy.js +0 -7
  104. package/examples/html/bitmex-cors.html +0 -46
  105. package/examples/html/tradingview-charts.html +0 -61
  106. package/examples/html/webworker/index.html +0 -97
  107. package/examples/html/webworker/worker.js +0 -43
  108. package/examples/js/advanced-error-handling.js +0 -39
  109. package/examples/js/aggregate-orderbook.js +0 -54
  110. package/examples/js/arbitrage-pairs.js +0 -130
  111. package/examples/js/basic-chart.js +0 -29
  112. package/examples/js/basic-orderbook-polling.js +0 -13
  113. package/examples/js/bcc-vs-bch.js +0 -115
  114. package/examples/js/benchmark.js +0 -104
  115. package/examples/js/binance-fetch-all-deposits.js +0 -45
  116. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +0 -34
  117. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +0 -33
  118. package/examples/js/binance-fetchTicker-delivery-vs-future.js +0 -31
  119. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +0 -41
  120. package/examples/js/binance-margin-stop-order.js +0 -39
  121. package/examples/js/binance-server-time.js +0 -34
  122. package/examples/js/binance-universal-transfer.js +0 -16
  123. package/examples/js/bitfinex-fetch-trades.js +0 -35
  124. package/examples/js/bitfinex2-fetch-trades.js +0 -35
  125. package/examples/js/bitmex-browser-cors-proxy.js +0 -7
  126. package/examples/js/bitpanda-fetchMyTrades-reduce.js +0 -36
  127. package/examples/js/bitrue-fetch-balance.js +0 -28
  128. package/examples/js/bitstamp-private-api.js +0 -115
  129. package/examples/js/bitstamp-public-api.js +0 -39
  130. package/examples/js/bittrex-balance.js +0 -50
  131. package/examples/js/bittrex-fetch-closed-orders-history.js +0 -69
  132. package/examples/js/blockchaincom-withdrawal.js +0 -59
  133. package/examples/js/build-ohlcv-bars.js +0 -48
  134. package/examples/js/builtin-rate-limiting-rest-poller.js +0 -25
  135. package/examples/js/bybit-trailing.js +0 -62
  136. package/examples/js/bybit-updated.cjs +0 -154
  137. package/examples/js/coinbase-fetch-all-balances.js +0 -36
  138. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +0 -47
  139. package/examples/js/coinex-futures.js +0 -75
  140. package/examples/js/coinone-fetch-tickers.js +0 -54
  141. package/examples/js/coinone-markets.js +0 -16
  142. package/examples/js/compare-two-exchanges-capabilities.js +0 -36
  143. package/examples/js/cors-proxy.js +0 -5
  144. package/examples/js/create-order-handle-errors.js +0 -55
  145. package/examples/js/create-order-position-with-takeprofit-stoploss.js +0 -71
  146. package/examples/js/create-order-with-retry.js +0 -65
  147. package/examples/js/create-order-ws-example.js +0 -25
  148. package/examples/js/create-orders-example.js +0 -17
  149. package/examples/js/create-trailing-amount-order.js +0 -36
  150. package/examples/js/create-trailing-percent-order.js +0 -36
  151. package/examples/js/credentials.json +0 -5
  152. package/examples/js/custom-proxy-agent-for-js.js +0 -10
  153. package/examples/js/custom-proxy-url.js +0 -23
  154. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +0 -60
  155. package/examples/js/env-variables.js +0 -26
  156. package/examples/js/error-handling.js +0 -89
  157. package/examples/js/exchange-capabilities.js +0 -135
  158. package/examples/js/exchanges-by-volume.js +0 -60
  159. package/examples/js/exchanges.js +0 -40
  160. package/examples/js/fetch-all-balances.js +0 -219
  161. package/examples/js/fetch-all-tickers-to-files-2.js +0 -53
  162. package/examples/js/fetch-all-tickers-to-files.js +0 -77
  163. package/examples/js/fetch-balance.js +0 -28
  164. package/examples/js/fetch-create-deposit-address.js +0 -101
  165. package/examples/js/fetch-from-many-exchanges-simultaneously.js +0 -21
  166. package/examples/js/fetch-funding-rate-history.js +0 -25
  167. package/examples/js/fetch-futures/prettier.config.js +0 -5
  168. package/examples/js/fetch-futures/src/index.js +0 -25
  169. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +0 -72
  170. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +0 -39
  171. package/examples/js/fetch-ohlcv.js +0 -16
  172. package/examples/js/fetch-okex-futures.js +0 -22
  173. package/examples/js/fetch-orders.js +0 -27
  174. package/examples/js/fetch-ticker-from-multiple-exchanges.js +0 -35
  175. package/examples/js/fetch-ticker-where-available.js +0 -75
  176. package/examples/js/fetch-tickers/build/index.js +0 -19
  177. package/examples/js/fetch-tickers/prettier.config.js +0 -5
  178. package/examples/js/fetch-tickers/src/index.js +0 -17
  179. package/examples/js/gateio-create-batch-order.js +0 -43
  180. package/examples/js/gateio-futures.js +0 -49
  181. package/examples/js/gateio-open-close-contract.js +0 -49
  182. package/examples/js/gateio-swaps.js +0 -74
  183. package/examples/js/gdax-fetch-trades-pagination.js +0 -29
  184. package/examples/js/hitbtc2-withdraw.js +0 -61
  185. package/examples/js/how-to-import-one-exchange-esm.js +0 -10
  186. package/examples/js/huobi-futures.js +0 -71
  187. package/examples/js/huobi-open-close-contract.js +0 -63
  188. package/examples/js/huobi-swaps.js +0 -70
  189. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +0 -98
  190. package/examples/js/hybridCJSExample.cjs +0 -19
  191. package/examples/js/hybridESMExample.js +0 -19
  192. package/examples/js/idex-fetch-balance.js +0 -13
  193. package/examples/js/instantiate-all-at-once.js +0 -46
  194. package/examples/js/instantiate-all-from-json.js +0 -31
  195. package/examples/js/kraken-create-and-close-position.js +0 -54
  196. package/examples/js/kraken-fetch-order-trades.js +0 -33
  197. package/examples/js/kraken-margin-trading.js +0 -89
  198. package/examples/js/kucoin-rate-limit.js +0 -38
  199. package/examples/js/latoken-example.js +0 -108
  200. package/examples/js/live-orderbook.js +0 -106
  201. package/examples/js/live-ticker.js +0 -80
  202. package/examples/js/live-tickers.js +0 -74
  203. package/examples/js/load-all-contracts.js +0 -41
  204. package/examples/js/load-all-symbols-at-once.js +0 -69
  205. package/examples/js/load-all-tickers-at-once.js +0 -91
  206. package/examples/js/load-markets-to-files.js +0 -57
  207. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +0 -61
  208. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +0 -91
  209. package/examples/js/margin-loan-borrow-buy-sell-repay.js +0 -70
  210. package/examples/js/market-status-and-currency-status.js +0 -29
  211. package/examples/js/ohlcv-console-chart.js +0 -29
  212. package/examples/js/okex-fetch-closed-orders-archive.js +0 -31
  213. package/examples/js/okex-transfer.js +0 -51
  214. package/examples/js/okx-poll-fetch-my-trades.js +0 -37
  215. package/examples/js/okx-poll-rate-limit.js +0 -48
  216. package/examples/js/order-book-extra-level-depth-param.js +0 -20
  217. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +0 -49
  218. package/examples/js/poll-ohlcv.js +0 -43
  219. package/examples/js/poloniex-fetch-order-books.js +0 -35
  220. package/examples/js/poloniex-limits-amount-min.js +0 -62
  221. package/examples/js/proxy-round-robin.js +0 -98
  222. package/examples/js/proxy-usage.js +0 -32
  223. package/examples/js/sample-local-proxy-server-with-cors.js +0 -12
  224. package/examples/js/search-all-exchanges.js +0 -159
  225. package/examples/js/shared-load-markets.js +0 -80
  226. package/examples/js/sort-swap-markets-by-hourly-price-change.js +0 -55
  227. package/examples/js/symbols.js +0 -110
  228. package/examples/js/theocean.js +0 -41
  229. package/examples/js/tickers.js +0 -106
  230. package/examples/js/validate-paginated-data.js +0 -61
  231. package/examples/js/watch-OHLCV-For-Symbols.js +0 -15
  232. package/examples/js/watch-OHLCV.js +0 -12
  233. package/examples/js/watch-OrderBook-For-Symbols.js +0 -11
  234. package/examples/js/watch-Trades-For-Symbols.js +0 -11
  235. package/examples/js/watch-tickers.js +0 -11
  236. package/examples/js/watchOHLCVForSymbols.js +0 -15
  237. package/examples/js/watchOrderBookForSymbols.js +0 -11
  238. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +0 -2
  239. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +0 -1
  240. package/examples/js/watchPositions-many-exchanges-continuosly.js +0 -49
  241. package/examples/js/watchPositions.d.ts +0 -2
  242. package/examples/js/watchPositions.d.ts.map +0 -1
  243. package/examples/js/watchPositions.js +0 -13
  244. package/examples/js/watchPositionsForSymbols.d.ts +0 -2
  245. package/examples/js/watchPositionsForSymbols.d.ts.map +0 -1
  246. package/examples/js/watchPositionsForSymbols.js +0 -14
  247. package/examples/js/watchTradesForSymbols.js +0 -11
  248. package/examples/js/withdraw-from-one-exchange-to-another.js +0 -50
  249. package/examples/php/README.md +0 -7
  250. package/examples/py/README.md +0 -15
  251. package/examples/py/playing_with_ccxt_example.ipynb +0 -222
  252. package/examples/ts/.eslintrc +0 -111
  253. package/examples/ts/benchmark.ts +0 -134
  254. package/examples/ts/build-ohlcv-bars.ts +0 -53
  255. package/examples/ts/cli.ts +0 -397
  256. package/examples/ts/compare-two-exchanges-capabilities.ts +0 -36
  257. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +0 -89
  258. package/examples/ts/create-order-ws-example.ts +0 -33
  259. package/examples/ts/create-orders-example.ts +0 -21
  260. package/examples/ts/create-trailing-amount-order.ts +0 -37
  261. package/examples/ts/create-trailing-percent-order.ts +0 -37
  262. package/examples/ts/custom-proxy-agent-for-js.ts +0 -14
  263. package/examples/ts/fetch-futures/package-lock.json +0 -116
  264. package/examples/ts/fetch-futures/package.json +0 -34
  265. package/examples/ts/fetch-futures/prettier.config.js +0 -4
  266. package/examples/ts/fetch-futures/src/index.ts +0 -28
  267. package/examples/ts/fetch-futures/tsconfig.json +0 -28
  268. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +0 -44
  269. package/examples/ts/fetch-ohlcv.ts +0 -17
  270. package/examples/ts/fetch-tickers/package-lock.json +0 -116
  271. package/examples/ts/fetch-tickers/package.json +0 -34
  272. package/examples/ts/fetch-tickers/prettier.config.js +0 -4
  273. package/examples/ts/fetch-tickers/src/index.ts +0 -21
  274. package/examples/ts/fetch-tickers/tsconfig.json +0 -28
  275. package/examples/ts/how-to-import-one-exchange-esm.ts +0 -11
  276. package/examples/ts/kraken-create-and-close-position.ts +0 -69
  277. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +0 -72
  278. package/examples/ts/nextjs-page-router/.eslintrc.json +0 -3
  279. package/examples/ts/nextjs-page-router/README.md +0 -43
  280. package/examples/ts/nextjs-page-router/next.config.js +0 -6
  281. package/examples/ts/nextjs-page-router/package-lock.json +0 -7425
  282. package/examples/ts/nextjs-page-router/package.json +0 -28
  283. package/examples/ts/nextjs-page-router/postcss.config.js +0 -6
  284. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  285. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +0 -6
  286. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +0 -13
  287. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +0 -46
  288. package/examples/ts/nextjs-page-router/src/pages/index.tsx +0 -8
  289. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +0 -61
  290. package/examples/ts/nextjs-page-router/src/styles/globals.css +0 -27
  291. package/examples/ts/nextjs-page-router/tailwind.config.ts +0 -20
  292. package/examples/ts/nextjs-page-router/tsconfig.json +0 -22
  293. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +0 -62
  294. package/examples/ts/proxy-usage.ts +0 -41
  295. package/examples/ts/sample-local-proxy-server-with-cors.ts +0 -15
  296. package/examples/ts/watch-OHLCV-For-Symbols.ts +0 -17
  297. package/examples/ts/watch-OHLCV.ts +0 -14
  298. package/examples/ts/watch-OrderBook-For-Symbols.ts +0 -13
  299. package/examples/ts/watch-Trades-For-Symbols.ts +0 -13
  300. package/examples/ts/watch-tickers.ts +0 -13
  301. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +0 -53
  302. package/examples/ts/watchPositions.ts +0 -15
  303. package/examples/ts/watchPositionsForSymbols.ts +0 -16
  304. package/examples/tsconfig.json +0 -27
  305. package/examples2md.js +0 -79
  306. package/gource.sh +0 -3
  307. package/index.html +0 -7
  308. package/jsdoc2md.js +0 -122
  309. package/multilang.sh +0 -164
  310. package/pro-tests.json +0 -57
  311. package/pyproject.toml +0 -8
  312. package/rollup.config.js +0 -60
  313. package/skip-tests.json +0 -1653
  314. package/test-commonjs.cjs +0 -65
  315. package/tests-manager.sh +0 -96
  316. package/tsconfig.json +0 -111
  317. 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
- }) ()
@@ -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
-