ccxt 4.2.72 → 4.2.74

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 (379) hide show
  1. package/README.md +124 -122
  2. package/build.sh +2 -2
  3. package/dist/ccxt.browser.js +3277 -460
  4. package/dist/ccxt.browser.min.js +4 -4
  5. package/dist/cjs/ccxt.js +6 -1
  6. package/dist/cjs/src/abstract/coinbaseinternational.js +9 -0
  7. package/dist/cjs/src/base/Exchange.js +31 -7
  8. package/dist/cjs/src/bitget.js +62 -50
  9. package/dist/cjs/src/btcturk.js +3 -3
  10. package/dist/cjs/src/bybit.js +90 -30
  11. package/dist/cjs/src/coinbaseinternational.js +2019 -0
  12. package/dist/cjs/src/gate.js +1 -1
  13. package/dist/cjs/src/htx.js +16 -9
  14. package/dist/cjs/src/hyperliquid.js +9 -2
  15. package/dist/cjs/src/mexc.js +1 -1
  16. package/dist/cjs/src/okx.js +1 -1
  17. package/dist/cjs/src/pro/coinbaseinternational.js +645 -0
  18. package/dist/cjs/src/pro/krakenfutures.js +8 -7
  19. package/examples/README.md +308 -0
  20. package/examples/ccxt.pro/html/watchTicker.html +51 -0
  21. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +55 -0
  22. package/examples/ccxt.pro/js/binance-https-proxy.js +48 -0
  23. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +38 -0
  24. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +64 -0
  25. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +62 -0
  26. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +68 -0
  27. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +82 -0
  28. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +59 -0
  29. package/examples/ccxt.pro/js/exchange-capabitities.js +72 -0
  30. package/examples/ccxt.pro/js/exchange-close.js +46 -0
  31. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +30 -0
  32. package/examples/ccxt.pro/js/gateio-watch-balance.js +23 -0
  33. package/examples/ccxt.pro/js/gateio-watch-order-book.js +71 -0
  34. package/examples/ccxt.pro/js/graceful-shutdown.js +43 -0
  35. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +37 -0
  36. package/examples/ccxt.pro/js/okex-create-futures-order.js +48 -0
  37. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +54 -0
  38. package/examples/ccxt.pro/js/okx-watch-tickers.js +31 -0
  39. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +46 -0
  40. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +26 -0
  41. package/examples/ccxt.pro/js/one-exchange-many-streams.js +28 -0
  42. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +30 -0
  43. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +40 -0
  44. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +38 -0
  45. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +40 -0
  46. package/examples/ccxt.pro/js/watch-many-orderbooks.js +27 -0
  47. package/examples/ccxt.pro/js/watch-new-trades-only.js +43 -0
  48. package/examples/ccxt.pro/js/watch-new-trades.js +42 -0
  49. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +29 -0
  50. package/examples/ccxt.pro/js/watch-vs-fetch.js +29 -0
  51. package/examples/cs/Examples.sln +22 -0
  52. package/examples/cs/c#.csproj +19 -0
  53. package/examples/html/basic-cors-proxy.html +46 -0
  54. package/examples/html/basic-inheritance.html +47 -0
  55. package/examples/html/basic-poller.html +52 -0
  56. package/examples/html/basic-rate-limiting.html +49 -0
  57. package/examples/html/basic.html +43 -0
  58. package/examples/html/binance-cors-proxy.html +28 -0
  59. package/examples/html/bitmex-browser-cors-proxy.js +7 -0
  60. package/examples/html/bitmex-cors.html +46 -0
  61. package/examples/html/tradingview-charts.html +61 -0
  62. package/examples/html/webworker/index.html +97 -0
  63. package/examples/html/webworker/worker.js +43 -0
  64. package/examples/js/README.md +15 -0
  65. package/examples/js/advanced-error-handling.js +39 -0
  66. package/examples/js/aggregate-orderbook.js +54 -0
  67. package/examples/js/arbitrage-pairs.js +130 -0
  68. package/examples/js/basic-chart.js +29 -0
  69. package/examples/js/basic-orderbook-polling.js +13 -0
  70. package/examples/js/bcc-vs-bch.js +115 -0
  71. package/examples/js/binance-fetch-all-deposits.js +45 -0
  72. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +34 -0
  73. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +33 -0
  74. package/examples/js/binance-fetchTicker-delivery-vs-future.js +31 -0
  75. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +41 -0
  76. package/examples/js/binance-margin-stop-order.js +39 -0
  77. package/examples/js/binance-server-time.js +34 -0
  78. package/examples/js/binance-universal-transfer.js +16 -0
  79. package/examples/js/bitfinex-fetch-trades.js +35 -0
  80. package/examples/js/bitfinex2-fetch-trades.js +35 -0
  81. package/examples/js/bitmex-browser-cors-proxy.js +7 -0
  82. package/examples/js/bitpanda-fetchMyTrades-reduce.js +36 -0
  83. package/examples/js/bitrue-fetch-balance.js +28 -0
  84. package/examples/js/bitstamp-private-api.js +115 -0
  85. package/examples/js/bitstamp-public-api.js +39 -0
  86. package/examples/js/bittrex-balance.js +50 -0
  87. package/examples/js/bittrex-fetch-closed-orders-history.js +69 -0
  88. package/examples/js/blockchaincom-withdrawal.js +59 -0
  89. package/examples/js/build-ohlcv-bars.js +48 -0
  90. package/examples/js/builtin-rate-limiting-rest-poller.js +25 -0
  91. package/examples/js/bybit-trailing.js +62 -0
  92. package/examples/js/bybit-updated.cjs +154 -0
  93. package/examples/js/cli.js +405 -0
  94. package/examples/js/coinbase-fetch-all-balances.js +36 -0
  95. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +47 -0
  96. package/examples/js/coinex-futures.js +75 -0
  97. package/examples/js/coinone-fetch-tickers.js +54 -0
  98. package/examples/js/coinone-markets.js +16 -0
  99. package/examples/js/compare-two-exchanges-capabilities.js +36 -0
  100. package/examples/js/cors-proxy.js +5 -0
  101. package/examples/js/create-order-handle-errors.js +55 -0
  102. package/examples/js/create-order-position-with-takeprofit-stoploss.js +71 -0
  103. package/examples/js/create-order-with-retry.js +65 -0
  104. package/examples/js/create-order-ws-example.js +25 -0
  105. package/examples/js/create-orders-example.js +17 -0
  106. package/examples/js/create-trailing-amount-order.js +36 -0
  107. package/examples/js/create-trailing-percent-order.js +36 -0
  108. package/examples/js/credentials.json +5 -0
  109. package/examples/js/custom-proxy-agent-for-js.js +10 -0
  110. package/examples/js/custom-proxy-url.js +23 -0
  111. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +60 -0
  112. package/examples/js/env-variables.js +26 -0
  113. package/examples/js/error-handling.js +89 -0
  114. package/examples/js/exchange-capabilities.js +135 -0
  115. package/examples/js/exchanges-by-volume.js +60 -0
  116. package/examples/js/exchanges.js +40 -0
  117. package/examples/js/fetch-all-balances.js +219 -0
  118. package/examples/js/fetch-all-tickers-to-files-2.js +53 -0
  119. package/examples/js/fetch-all-tickers-to-files.js +77 -0
  120. package/examples/js/fetch-balance.js +28 -0
  121. package/examples/js/fetch-create-deposit-address.js +101 -0
  122. package/examples/js/fetch-from-many-exchanges-simultaneously.js +21 -0
  123. package/examples/js/fetch-funding-rate-history.js +25 -0
  124. package/examples/js/fetch-futures/prettier.config.js +5 -0
  125. package/examples/js/fetch-futures/src/index.js +25 -0
  126. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +72 -0
  127. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +39 -0
  128. package/examples/js/fetch-ohlcv.js +16 -0
  129. package/examples/js/fetch-okex-futures.js +22 -0
  130. package/examples/js/fetch-orders.js +27 -0
  131. package/examples/js/fetch-ticker-from-multiple-exchanges.js +35 -0
  132. package/examples/js/fetch-ticker-where-available.js +75 -0
  133. package/examples/js/fetch-tickers/build/index.js +19 -0
  134. package/examples/js/fetch-tickers/prettier.config.js +5 -0
  135. package/examples/js/fetch-tickers/src/index.js +17 -0
  136. package/examples/js/gateio-create-batch-order.js +43 -0
  137. package/examples/js/gateio-futures.js +49 -0
  138. package/examples/js/gateio-open-close-contract.js +49 -0
  139. package/examples/js/gateio-swaps.js +74 -0
  140. package/examples/js/gdax-fetch-trades-pagination.js +29 -0
  141. package/examples/js/hitbtc2-withdraw.js +61 -0
  142. package/examples/js/how-to-import-one-exchange-esm.js +10 -0
  143. package/examples/js/huobi-futures.js +71 -0
  144. package/examples/js/huobi-open-close-contract.js +63 -0
  145. package/examples/js/huobi-swaps.js +70 -0
  146. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +98 -0
  147. package/examples/js/hybridCJSExample.cjs +19 -0
  148. package/examples/js/hybridESMExample.js +19 -0
  149. package/examples/js/idex-fetch-balance.js +13 -0
  150. package/examples/js/instantiate-all-at-once.js +46 -0
  151. package/examples/js/instantiate-all-from-json.js +31 -0
  152. package/examples/js/kraken-create-and-close-position.js +54 -0
  153. package/examples/js/kraken-fetch-order-trades.js +33 -0
  154. package/examples/js/kraken-margin-trading.js +89 -0
  155. package/examples/js/kucoin-rate-limit.js +38 -0
  156. package/examples/js/latoken-example.js +108 -0
  157. package/examples/js/live-orderbook.js +106 -0
  158. package/examples/js/live-ticker.js +80 -0
  159. package/examples/js/live-tickers.js +74 -0
  160. package/examples/js/load-all-contracts.js +41 -0
  161. package/examples/js/load-all-symbols-at-once.js +69 -0
  162. package/examples/js/load-all-tickers-at-once.js +91 -0
  163. package/examples/js/load-markets-to-files.js +57 -0
  164. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +61 -0
  165. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +91 -0
  166. package/examples/js/margin-loan-borrow-buy-sell-repay.js +70 -0
  167. package/examples/js/market-status-and-currency-status.js +29 -0
  168. package/examples/js/ohlcv-console-chart.js +29 -0
  169. package/examples/js/okex-fetch-closed-orders-archive.js +31 -0
  170. package/examples/js/okex-transfer.js +51 -0
  171. package/examples/js/okx-poll-fetch-my-trades.js +37 -0
  172. package/examples/js/okx-poll-rate-limit.js +48 -0
  173. package/examples/js/order-book-extra-level-depth-param.js +20 -0
  174. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +49 -0
  175. package/examples/js/poll-ohlcv.js +43 -0
  176. package/examples/js/poloniex-fetch-order-books.js +35 -0
  177. package/examples/js/poloniex-limits-amount-min.js +62 -0
  178. package/examples/js/proxy-round-robin.js +98 -0
  179. package/examples/js/proxy-usage.js +32 -0
  180. package/examples/js/sample-local-proxy-server-with-cors.js +12 -0
  181. package/examples/js/search-all-exchanges.js +159 -0
  182. package/examples/js/shared-load-markets.js +80 -0
  183. package/examples/js/sort-swap-markets-by-hourly-price-change.js +55 -0
  184. package/examples/js/symbols.js +110 -0
  185. package/examples/js/theocean.js +41 -0
  186. package/examples/js/tickers.js +106 -0
  187. package/examples/js/validate-paginated-data.js +61 -0
  188. package/examples/js/watch-OHLCV-For-Symbols.js +15 -0
  189. package/examples/js/watch-OHLCV.js +12 -0
  190. package/examples/js/watch-OrderBook-For-Symbols.js +11 -0
  191. package/examples/js/watch-Trades-For-Symbols.js +11 -0
  192. package/examples/js/watch-tickers.js +11 -0
  193. package/examples/js/watchOHLCVForSymbols.js +15 -0
  194. package/examples/js/watchOrderBookForSymbols.js +11 -0
  195. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +2 -0
  196. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +1 -0
  197. package/examples/js/watchPositions-many-exchanges-continuosly.js +49 -0
  198. package/examples/js/watchPositions.d.ts +2 -0
  199. package/examples/js/watchPositions.d.ts.map +1 -0
  200. package/examples/js/watchPositions.js +13 -0
  201. package/examples/js/watchPositionsForSymbols.d.ts +2 -0
  202. package/examples/js/watchPositionsForSymbols.d.ts.map +1 -0
  203. package/examples/js/watchPositionsForSymbols.js +14 -0
  204. package/examples/js/watchTradesForSymbols.js +11 -0
  205. package/examples/js/withdraw-from-one-exchange-to-another.js +50 -0
  206. package/examples/php/README.md +7 -0
  207. package/examples/py/README.md +15 -0
  208. package/examples/py/playing_with_ccxt_example.ipynb +222 -0
  209. package/examples/ts/.eslintrc +111 -0
  210. package/examples/ts/build-ohlcv-bars.ts +53 -0
  211. package/examples/ts/cli.ts +397 -0
  212. package/examples/ts/compare-two-exchanges-capabilities.ts +36 -0
  213. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +89 -0
  214. package/examples/ts/create-order-ws-example.ts +33 -0
  215. package/examples/ts/create-orders-example.ts +21 -0
  216. package/examples/ts/create-trailing-amount-order.ts +37 -0
  217. package/examples/ts/create-trailing-percent-order.ts +37 -0
  218. package/examples/ts/custom-proxy-agent-for-js.ts +14 -0
  219. package/examples/ts/fetch-futures/package-lock.json +116 -0
  220. package/examples/ts/fetch-futures/package.json +34 -0
  221. package/examples/ts/fetch-futures/prettier.config.js +4 -0
  222. package/examples/ts/fetch-futures/src/index.ts +28 -0
  223. package/examples/ts/fetch-futures/tsconfig.json +28 -0
  224. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +44 -0
  225. package/examples/ts/fetch-ohlcv.ts +17 -0
  226. package/examples/ts/fetch-tickers/package-lock.json +116 -0
  227. package/examples/ts/fetch-tickers/package.json +34 -0
  228. package/examples/ts/fetch-tickers/prettier.config.js +4 -0
  229. package/examples/ts/fetch-tickers/src/index.ts +21 -0
  230. package/examples/ts/fetch-tickers/tsconfig.json +28 -0
  231. package/examples/ts/how-to-import-one-exchange-esm.ts +11 -0
  232. package/examples/ts/kraken-create-and-close-position.ts +69 -0
  233. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +72 -0
  234. package/examples/ts/nextjs-page-router/.eslintrc.json +3 -0
  235. package/examples/ts/nextjs-page-router/README.md +43 -0
  236. package/examples/ts/nextjs-page-router/next.config.js +6 -0
  237. package/examples/ts/nextjs-page-router/package-lock.json +7425 -0
  238. package/examples/ts/nextjs-page-router/package.json +28 -0
  239. package/examples/ts/nextjs-page-router/postcss.config.js +6 -0
  240. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  241. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +6 -0
  242. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +13 -0
  243. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +46 -0
  244. package/examples/ts/nextjs-page-router/src/pages/index.tsx +8 -0
  245. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +61 -0
  246. package/examples/ts/nextjs-page-router/src/styles/globals.css +27 -0
  247. package/examples/ts/nextjs-page-router/tailwind.config.ts +20 -0
  248. package/examples/ts/nextjs-page-router/tsconfig.json +22 -0
  249. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +62 -0
  250. package/examples/ts/proxy-usage.ts +41 -0
  251. package/examples/ts/sample-local-proxy-server-with-cors.ts +15 -0
  252. package/examples/ts/watch-OHLCV-For-Symbols.ts +17 -0
  253. package/examples/ts/watch-OHLCV.ts +14 -0
  254. package/examples/ts/watch-OrderBook-For-Symbols.ts +13 -0
  255. package/examples/ts/watch-Trades-For-Symbols.ts +13 -0
  256. package/examples/ts/watch-tickers.ts +13 -0
  257. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +53 -0
  258. package/examples/ts/watchPositions.ts +15 -0
  259. package/examples/ts/watchPositionsForSymbols.ts +16 -0
  260. package/examples/tsconfig.json +27 -0
  261. package/js/ccxt.d.ts +8 -2
  262. package/js/ccxt.js +6 -2
  263. package/js/src/abstract/coinbaseinternational.d.ts +42 -0
  264. package/js/src/abstract/coinbaseinternational.js +11 -0
  265. package/js/src/ace.d.ts +2 -2
  266. package/js/src/alpaca.d.ts +2 -2
  267. package/js/src/ascendex.d.ts +3 -3
  268. package/js/src/base/Exchange.d.ts +27 -24
  269. package/js/src/base/Exchange.js +31 -7
  270. package/js/src/bigone.d.ts +2 -2
  271. package/js/src/binance.d.ts +7 -7
  272. package/js/src/bingx.d.ts +4 -4
  273. package/js/src/bit2c.d.ts +2 -2
  274. package/js/src/bitbank.d.ts +2 -2
  275. package/js/src/bitbns.d.ts +2 -2
  276. package/js/src/bitfinex.d.ts +3 -3
  277. package/js/src/bitfinex2.d.ts +4 -4
  278. package/js/src/bitflyer.d.ts +2 -2
  279. package/js/src/bitget.d.ts +4 -4
  280. package/js/src/bitget.js +62 -50
  281. package/js/src/bithumb.d.ts +2 -2
  282. package/js/src/bitmart.d.ts +4 -4
  283. package/js/src/bitmex.d.ts +3 -3
  284. package/js/src/bitopro.d.ts +2 -2
  285. package/js/src/bitrue.d.ts +2 -2
  286. package/js/src/bitso.d.ts +2 -2
  287. package/js/src/bitstamp.d.ts +2 -2
  288. package/js/src/bitteam.d.ts +2 -2
  289. package/js/src/bitvavo.d.ts +4 -4
  290. package/js/src/bl3p.d.ts +2 -2
  291. package/js/src/blockchaincom.d.ts +2 -2
  292. package/js/src/blofin.d.ts +4 -4
  293. package/js/src/btcalpha.d.ts +2 -2
  294. package/js/src/btcbox.d.ts +2 -2
  295. package/js/src/btcmarkets.d.ts +2 -2
  296. package/js/src/btcturk.d.ts +2 -2
  297. package/js/src/btcturk.js +3 -3
  298. package/js/src/bybit.d.ts +8 -6
  299. package/js/src/bybit.js +90 -30
  300. package/js/src/cex.d.ts +3 -3
  301. package/js/src/coinbase.d.ts +3 -3
  302. package/js/src/coinbaseinternational.d.ts +146 -0
  303. package/js/src/coinbaseinternational.js +2020 -0
  304. package/js/src/coinbasepro.d.ts +2 -2
  305. package/js/src/coincheck.d.ts +2 -2
  306. package/js/src/coinex.d.ts +4 -4
  307. package/js/src/coinlist.d.ts +3 -3
  308. package/js/src/coinmate.d.ts +2 -2
  309. package/js/src/coinmetro.d.ts +2 -2
  310. package/js/src/coinone.d.ts +2 -2
  311. package/js/src/coinsph.d.ts +2 -2
  312. package/js/src/coinspot.d.ts +2 -2
  313. package/js/src/cryptocom.d.ts +4 -4
  314. package/js/src/currencycom.d.ts +2 -2
  315. package/js/src/delta.d.ts +3 -3
  316. package/js/src/deribit.d.ts +3 -3
  317. package/js/src/digifinex.d.ts +3 -3
  318. package/js/src/exmo.d.ts +3 -3
  319. package/js/src/gate.d.ts +4 -4
  320. package/js/src/gate.js +1 -1
  321. package/js/src/gemini.d.ts +2 -2
  322. package/js/src/hitbtc.d.ts +4 -4
  323. package/js/src/hollaex.d.ts +2 -2
  324. package/js/src/htx.d.ts +5 -5
  325. package/js/src/htx.js +16 -9
  326. package/js/src/huobijp.d.ts +2 -2
  327. package/js/src/hyperliquid.d.ts +4 -3
  328. package/js/src/hyperliquid.js +10 -3
  329. package/js/src/idex.d.ts +2 -2
  330. package/js/src/independentreserve.d.ts +2 -2
  331. package/js/src/indodax.d.ts +2 -2
  332. package/js/src/kraken.d.ts +3 -3
  333. package/js/src/krakenfutures.d.ts +4 -4
  334. package/js/src/kucoin.d.ts +4 -4
  335. package/js/src/kucoinfutures.d.ts +3 -3
  336. package/js/src/kuna.d.ts +2 -2
  337. package/js/src/latoken.d.ts +2 -2
  338. package/js/src/lbank.d.ts +2 -2
  339. package/js/src/luno.d.ts +2 -2
  340. package/js/src/lykke.d.ts +2 -2
  341. package/js/src/mercado.d.ts +2 -2
  342. package/js/src/mexc.d.ts +2 -2
  343. package/js/src/mexc.js +1 -1
  344. package/js/src/ndax.d.ts +3 -3
  345. package/js/src/novadax.d.ts +2 -2
  346. package/js/src/oceanex.d.ts +2 -2
  347. package/js/src/okcoin.d.ts +3 -3
  348. package/js/src/okx.d.ts +4 -4
  349. package/js/src/okx.js +1 -1
  350. package/js/src/onetrading.d.ts +2 -2
  351. package/js/src/p2b.d.ts +2 -2
  352. package/js/src/paymium.d.ts +2 -2
  353. package/js/src/phemex.d.ts +3 -3
  354. package/js/src/poloniex.d.ts +3 -3
  355. package/js/src/poloniexfutures.d.ts +2 -2
  356. package/js/src/pro/binance.d.ts +3 -3
  357. package/js/src/pro/bitvavo.d.ts +3 -3
  358. package/js/src/pro/cex.d.ts +3 -3
  359. package/js/src/pro/coinbaseinternational.d.ts +28 -0
  360. package/js/src/pro/coinbaseinternational.js +646 -0
  361. package/js/src/pro/cryptocom.d.ts +2 -2
  362. package/js/src/pro/hitbtc.d.ts +2 -2
  363. package/js/src/pro/kraken.d.ts +3 -3
  364. package/js/src/pro/krakenfutures.js +8 -7
  365. package/js/src/pro/okx.d.ts +3 -3
  366. package/js/src/pro/poloniex.d.ts +2 -2
  367. package/js/src/probit.d.ts +2 -2
  368. package/js/src/timex.d.ts +3 -3
  369. package/js/src/tokocrypto.d.ts +2 -2
  370. package/js/src/upbit.d.ts +2 -2
  371. package/js/src/wavesexchange.d.ts +2 -2
  372. package/js/src/wazirx.d.ts +2 -2
  373. package/js/src/whitebit.d.ts +2 -2
  374. package/js/src/woo.d.ts +5 -5
  375. package/js/src/yobit.d.ts +2 -2
  376. package/js/src/zaif.d.ts +2 -2
  377. package/js/src/zonda.d.ts +2 -2
  378. package/package.json +4 -1
  379. package/skip-tests.json +227 -424
@@ -0,0 +1,43 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <title>CCXT Basic example for the browser</title>
5
+ <script type="text/javascript" src="https://unpkg.com/ccxt"></script>
6
+ <script>
7
+
8
+ document.addEventListener ("DOMContentLoaded", function () {
9
+
10
+ alert ('CCXT' + (ccxt.isBrowser ? ' browser' : '') + ' version ' + ccxt.version);
11
+
12
+ const exchange = new ccxt.coinbasepro ({ enableRateLimit: true })
13
+ const symbol = 'ETH/BTC'
14
+
15
+ exchange.fetchTicker (symbol).then (ticker => {
16
+
17
+ const text = [
18
+ exchange.id,
19
+ symbol,
20
+ JSON.stringify (ticker, undefined, '\n\t')
21
+ ]
22
+
23
+ document.getElementById ('content').innerHTML = text.join (' ')
24
+
25
+ }).catch (e => {
26
+
27
+ const text = [
28
+ e.constructor.name,
29
+ e.message,
30
+ ]
31
+
32
+ document.getElementById ('content').innerHTML = text.join (' ')
33
+
34
+ })
35
+
36
+ })
37
+ </script>
38
+ </head>
39
+ <body>
40
+ <h1>Hello, CCXT!</h1>
41
+ <pre id="content"></pre>
42
+ </body>
43
+ </html>
@@ -0,0 +1,28 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <title>CCXT Basic example for the browser</title>
5
+ <script type="text/javascript" src="https://unpkg.com/ccxt"></script>
6
+ <script>
7
+
8
+ document.addEventListener ("DOMContentLoaded", function () {
9
+
10
+ async function main () {
11
+ const exchange = new ccxt.binance ({
12
+ 'apiKey': 'YOUR_API_KEY',
13
+ 'secret': 'YOUR_API_SECRET',
14
+ 'proxyUrl': 'https://cors-anywhere.herokuapp.com/',
15
+ })
16
+ const response = await exchange.fetchBalance ()
17
+ console.log (response)
18
+ }
19
+
20
+ main ()
21
+ })
22
+ </script>
23
+ </head>
24
+ <body>
25
+ <h1>Hello, CCXT!</h1>
26
+ <pre id="content"></pre>
27
+ </body>
28
+ </html>
@@ -0,0 +1,7 @@
1
+ // JavaScript CORS Proxy
2
+ // Save this in a file like cors.js and run with `node cors [port]`
3
+ // It will listen for your requests on the port you pass in command line or port 8080 by default
4
+ const port = (process.argv.length > 2) ? parseInt (process.argv[2]) : 8080 // default
5
+ require ('cors-anywhere').createServer ({
6
+ setHeaders: { 'origin': 'https://www.bitmex.com' }
7
+ }).listen (port, '0.0.0.0')
@@ -0,0 +1,46 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <title>CCXT Basic example for the browser</title>
5
+ <script type="text/javascript" src="https://unpkg.com/ccxt"></script>
6
+ <script>
7
+
8
+ document.addEventListener ("DOMContentLoaded", function () {
9
+
10
+ alert ('ccxt version ' + ccxt.version);
11
+
12
+ const exchange = new ccxt.bitmex ({
13
+ 'proxyUrl': 'http://127.0.0.1:8080/',
14
+ })
15
+
16
+ const symbol = 'BTC/USDT'
17
+
18
+ exchange.fetchTicker (symbol).then (ticker => {
19
+
20
+ const text = [
21
+ exchange.id,
22
+ symbol,
23
+ JSON.stringify (ticker, undefined, '\n\t')
24
+ ]
25
+
26
+ document.getElementById ('content').innerHTML = text.join (' ')
27
+
28
+ }).catch (e => {
29
+
30
+ const text = [
31
+ e.constructor.name,
32
+ e.message,
33
+ ]
34
+
35
+ document.getElementById ('content').innerHTML = text.join (' ')
36
+
37
+ })
38
+
39
+ })
40
+ </script>
41
+ </head>
42
+ <body>
43
+ <h1>Hello, CCXT!</h1>
44
+ <pre id="content"></pre>
45
+ </body>
46
+ </html>
@@ -0,0 +1,61 @@
1
+ <!DOCTYPE HTML>
2
+ <html>
3
+ <head>
4
+ <title>CCXT Basic example for the browser</title>
5
+ <script type="text/javascript" src="https://unpkg.com/ccxt"></script>
6
+ <script type="text/javascript" src="https://unpkg.com/lightweight-charts@3.4.0/dist/lightweight-charts.standalone.production.js"></script>
7
+ <script>
8
+
9
+ document.addEventListener ("DOMContentLoaded", async function () {
10
+
11
+ try {
12
+ const exchange = new ccxt.coinbasepro ({ enableRateLimit: true });
13
+ const symbol = 'ETH/BTC';
14
+ const timeframe = '1d';
15
+ const since = undefined;
16
+ const limit = 600;
17
+ const config = {
18
+ width: 600,
19
+ height: 300,
20
+ priceScale: {
21
+ position: 'left',
22
+ mode: 1,
23
+ autoScale: true,
24
+ invertScale: false,
25
+ },
26
+ timeScale: {
27
+ fixLeftEdge: true,
28
+ lockVisibleTimeRangeOnResize: true,
29
+ rightBarStaysOnScroll: true,
30
+ visible: true,
31
+ timeVisible: true,
32
+ secondsVisible: true,
33
+ },
34
+ crosshair: {
35
+ mode: window.LightweightCharts.CrosshairMode.Normal,
36
+ },
37
+ };
38
+ const chart = window.LightweightCharts.createChart(document.body, config);
39
+ const candleSeries = chart.addCandlestickSeries();
40
+ while (true) {
41
+ try {
42
+ const response = await exchange.fetchOHLCV(symbol, timeframe, since, limit);
43
+ const last = response[response.length - 1]
44
+ const [ timestamp, open, high, low, close ] = last;
45
+ const data = response.map (([ timestamp, open, high, low, close ]) => ({ time: exchange.iso8601 (timestamp), open, high, low, close }));
46
+ candleSeries.setData(data);
47
+ } catch (e) {
48
+ console.log (e.constructor.name, e.message);
49
+ }
50
+ await exchange.sleep (1000);
51
+ }
52
+ } catch (e) {
53
+ alert (e.constructor.name + ' ' + e.message);
54
+ }
55
+
56
+ })
57
+ </script>
58
+ </head>
59
+ <body>
60
+ </body>
61
+ </html>
@@ -0,0 +1,97 @@
1
+ <!DOCTYPE html>
2
+ <html>
3
+ <body>
4
+ <h2>CCXT running on a Webworker example</h2>
5
+ <p>This example uses a web worker to continuously call <b>fetchTicker</b> on a user-defined exchange, symbol and interval. Then, the web worker reaches back with the results.</p>
6
+ <h3>Parameters</h3>
7
+ <label for="exchange">Exchange:</label>
8
+ <input type="text" id="exchange" name="exchange" ><br><br>
9
+ <label for="symbol">Symbol: </label>
10
+ <input type="text" id="symbol" name="symbol"><br><br>
11
+ <label for="interval">Interval (ms): </label>
12
+ <input type="text" id="interval" name="interval"><br><br>
13
+ <button onclick="startWorker()">Start CCXT worker</button>
14
+ <button onclick="stopWorker()">Stop CCXT worker</button>
15
+ <h3> Received Results:</h3>
16
+ <output id="result"></output>
17
+ <table id="resultsTable" style="left:300px;width:400px; border:1px solid black;" >
18
+ <thead>
19
+ <tr>
20
+ <th>Symbol</th>
21
+ <th>Last Price</th>
22
+ <th>Base Volume</th>
23
+ <th>Exchange Ts</th>
24
+ <th>Local Ts</th>
25
+ </tr>
26
+ </thead>
27
+ <tbody id="tbody">
28
+ </tbody>
29
+ </table>
30
+ </body>
31
+ <script>
32
+ // fill in default values
33
+ document.addEventListener('DOMContentLoaded', function(event) {
34
+ document.getElementById('exchange').value = 'coinbasepro';
35
+ document.getElementById('symbol').value = 'BTC/USDT';
36
+ document.getElementById('interval').value = '1000';
37
+ });
38
+
39
+ var ccxtWorker;
40
+ function startWorker() {
41
+
42
+ if (typeof(Worker) !== "undefined") {
43
+ // if the worker does not exist yet, creates it
44
+ if (typeof(ccxtWorker) == "undefined") {
45
+ ccxtWorker = new Worker("worker.js");
46
+ }
47
+
48
+ // reads user-defined parameters
49
+ var exchange = document.getElementById('exchange').value
50
+ var symbol = document.getElementById('symbol').value
51
+ var interval = document.getElementById('interval').value
52
+
53
+ // send a message with those values
54
+ ccxtWorker.postMessage([exchange,symbol, interval]);
55
+
56
+ ccxtWorker.onmessage = function(event) {
57
+ // every time the ccxtworker posts a message
58
+ // this handler will be invoked
59
+ handleReceivedData(event.data)
60
+ };
61
+ } else {
62
+ document.getElementById("result").innerHTML = "Sorry! No Web Worker support.";
63
+ }
64
+ }
65
+
66
+ function handleReceivedData(data) {
67
+ var [symbol, last, baseVolume, timestamp, ourTimestamp] = data;
68
+ var tableRef = document.getElementById('resultsTable');
69
+ var tbody = document.getElementById('tbody');
70
+ row = tbody.insertRow(0);
71
+
72
+ cellSymbol = row.insertCell();
73
+ cellSymbol.innerHTML = symbol;
74
+
75
+ cellPrice = row.insertCell();
76
+ cellPrice.innerHTML = last;
77
+
78
+ cellPrice = row.insertCell();
79
+ cellPrice.innerHTML = baseVolume;
80
+
81
+ cellTimestamp = row.insertCell();
82
+ cellTimestamp.innerHTML = timestamp;
83
+
84
+ cellOurtimestamp = row.insertCell();
85
+ cellOurtimestamp.innerHTML = ourTimestamp;
86
+
87
+ }
88
+
89
+ function stopWorker() {
90
+ if (ccxtWorker !== undefined) {
91
+ ccxtWorker.terminate();
92
+ ccxtWorker = undefined;
93
+ }
94
+ }
95
+ </script>
96
+ </body>
97
+ </html>
@@ -0,0 +1,43 @@
1
+ self.importScripts('https://unpkg.com/ccxt@1.79.2/dist/ccxt.browser.js');
2
+
3
+ console.log("Loaded ccxt version:", self.ccxt.version);
4
+
5
+ var exchangeInstance = undefined;
6
+
7
+ // handler of received messages
8
+ self.onmessage = async function handler(msg) {
9
+ await handleMessageFromMain(msg)
10
+ }
11
+
12
+ // get messages from the main script
13
+ async function handleMessageFromMain(msg) {
14
+ console.log(msg.data);
15
+ var [exchange, symbol, interval] = msg.data;
16
+ console.log('Worker received:', symbol,exchange, interval)
17
+ interval = parseInt(interval)
18
+ await processTicker(symbol, exchange)
19
+ // schedule process ticker execution
20
+ setInterval (async () => {
21
+ await processTicker(symbol, exchange)
22
+ }, interval)
23
+ }
24
+
25
+ async function processTicker(symbol, exchangeId) {
26
+ if (exchangeInstance === undefined) {
27
+ exchangeInstance = new ccxt[exchangeId]
28
+ }
29
+ var result = await fetchTicker(symbol)
30
+ var symbol = result['symbol']
31
+ var last = result['last']
32
+ var timestamp = result['timestamp']
33
+ var baseVolume = result['baseVolume']
34
+ var ourTimestamp = Date.now()
35
+ // send the data back to the main script
36
+ postMessage([symbol, last, baseVolume, timestamp, ourTimestamp]);
37
+ }
38
+
39
+ async function fetchTicker(symbol){
40
+ // use ccxt to fetch ticker info
41
+ var result = await exchangeInstance.fetchTicker(symbol)
42
+ return result;
43
+ }
@@ -0,0 +1,15 @@
1
+ # CCXT JavaScript Examples
2
+
3
+ These examples might require the following super-useful high-quality Node.js modules by [xpl](https://github.com/xpl):
4
+
5
+ - [ansicolor](https://github.com/xpl/ansicolor): A quality JavaScript library for the ANSI color/style management ([ansicolor @ npm](https://npmjs.com/package/ansicolor))
6
+ - [as-table](https://github.com/xpl/as-table): A simple function that prints objects as ASCII tables ([as-table @ npm](https://npmjs.com/package/as-table))
7
+ - [ololog](https://github.com/xpl/ololog): Platform-agnostic logging with blackjack and hookers ([ololog @ npm](https://npmjs.com/package/ololog))
8
+
9
+ All of the modules above are installed with the ccxt library devDependencies by npm automatically.
10
+
11
+ To run the ccxt JavaScript examples from any folder type in console:
12
+
13
+ ```shell
14
+ node path/to/example.js # substitute for actual filename here
15
+ ```
@@ -0,0 +1,39 @@
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);
@@ -0,0 +1,54 @@
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
+ })();
@@ -0,0 +1,130 @@
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
+ }) ()
@@ -0,0 +1,29 @@
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
+ }) ()
@@ -0,0 +1,13 @@
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
+ }) ()