ccxt 4.2.73 → 4.2.75

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 (309) hide show
  1. package/CHANGELOG.md +206 -10
  2. package/README.md +10 -9
  3. package/build.sh +1 -1
  4. package/dist/ccxt.browser.js +1042 -297
  5. package/dist/ccxt.browser.min.js +3 -3
  6. package/dist/cjs/ccxt.js +4 -1
  7. package/dist/cjs/src/abstract/tradeogre.js +9 -0
  8. package/dist/cjs/src/ascendex.js +3 -2
  9. package/dist/cjs/src/base/Exchange.js +1 -1
  10. package/dist/cjs/src/bitget.js +62 -50
  11. package/dist/cjs/src/bitmart.js +1 -0
  12. package/dist/cjs/src/bybit.js +90 -30
  13. package/dist/cjs/src/coinbaseinternational.js +1 -1
  14. package/dist/cjs/src/coinex.js +4 -3
  15. package/dist/cjs/src/gate.js +1 -0
  16. package/dist/cjs/src/htx.js +16 -9
  17. package/dist/cjs/src/hyperliquid.js +2 -1
  18. package/dist/cjs/src/kraken.js +3 -3
  19. package/dist/cjs/src/kucoin.js +1 -1
  20. package/dist/cjs/src/pro/krakenfutures.js +8 -7
  21. package/dist/cjs/src/tradeogre.js +632 -0
  22. package/examples/README.md +308 -0
  23. package/examples/ccxt.pro/html/watchTicker.html +51 -0
  24. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +55 -0
  25. package/examples/ccxt.pro/js/binance-https-proxy.js +48 -0
  26. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +38 -0
  27. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +64 -0
  28. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +62 -0
  29. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +68 -0
  30. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +82 -0
  31. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +59 -0
  32. package/examples/ccxt.pro/js/exchange-capabitities.js +72 -0
  33. package/examples/ccxt.pro/js/exchange-close.js +46 -0
  34. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +30 -0
  35. package/examples/ccxt.pro/js/gateio-watch-balance.js +23 -0
  36. package/examples/ccxt.pro/js/gateio-watch-order-book.js +71 -0
  37. package/examples/ccxt.pro/js/graceful-shutdown.js +43 -0
  38. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +37 -0
  39. package/examples/ccxt.pro/js/okex-create-futures-order.js +48 -0
  40. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +54 -0
  41. package/examples/ccxt.pro/js/okx-watch-tickers.js +31 -0
  42. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +46 -0
  43. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +26 -0
  44. package/examples/ccxt.pro/js/one-exchange-many-streams.js +28 -0
  45. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +30 -0
  46. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +40 -0
  47. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +38 -0
  48. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +40 -0
  49. package/examples/ccxt.pro/js/watch-many-orderbooks.js +27 -0
  50. package/examples/ccxt.pro/js/watch-new-trades-only.js +43 -0
  51. package/examples/ccxt.pro/js/watch-new-trades.js +42 -0
  52. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +29 -0
  53. package/examples/ccxt.pro/js/watch-vs-fetch.js +29 -0
  54. package/examples/cs/Examples.sln +22 -0
  55. package/examples/cs/c#.csproj +19 -0
  56. package/examples/html/basic-cors-proxy.html +46 -0
  57. package/examples/html/basic-inheritance.html +47 -0
  58. package/examples/html/basic-poller.html +52 -0
  59. package/examples/html/basic-rate-limiting.html +49 -0
  60. package/examples/html/basic.html +43 -0
  61. package/examples/html/binance-cors-proxy.html +28 -0
  62. package/examples/html/bitmex-browser-cors-proxy.js +7 -0
  63. package/examples/html/bitmex-cors.html +46 -0
  64. package/examples/html/tradingview-charts.html +61 -0
  65. package/examples/html/webworker/index.html +97 -0
  66. package/examples/html/webworker/worker.js +43 -0
  67. package/examples/js/README.md +15 -0
  68. package/examples/js/advanced-error-handling.js +39 -0
  69. package/examples/js/aggregate-orderbook.js +54 -0
  70. package/examples/js/arbitrage-pairs.js +130 -0
  71. package/examples/js/basic-chart.js +29 -0
  72. package/examples/js/basic-orderbook-polling.js +13 -0
  73. package/examples/js/bcc-vs-bch.js +115 -0
  74. package/examples/js/binance-fetch-all-deposits.js +45 -0
  75. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +34 -0
  76. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +33 -0
  77. package/examples/js/binance-fetchTicker-delivery-vs-future.js +31 -0
  78. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +41 -0
  79. package/examples/js/binance-margin-stop-order.js +39 -0
  80. package/examples/js/binance-server-time.js +34 -0
  81. package/examples/js/binance-universal-transfer.js +16 -0
  82. package/examples/js/bitfinex-fetch-trades.js +35 -0
  83. package/examples/js/bitfinex2-fetch-trades.js +35 -0
  84. package/examples/js/bitmex-browser-cors-proxy.js +7 -0
  85. package/examples/js/bitpanda-fetchMyTrades-reduce.js +36 -0
  86. package/examples/js/bitrue-fetch-balance.js +28 -0
  87. package/examples/js/bitstamp-private-api.js +115 -0
  88. package/examples/js/bitstamp-public-api.js +39 -0
  89. package/examples/js/bittrex-balance.js +50 -0
  90. package/examples/js/bittrex-fetch-closed-orders-history.js +69 -0
  91. package/examples/js/blockchaincom-withdrawal.js +59 -0
  92. package/examples/js/build-ohlcv-bars.js +48 -0
  93. package/examples/js/builtin-rate-limiting-rest-poller.js +25 -0
  94. package/examples/js/bybit-trailing.js +62 -0
  95. package/examples/js/bybit-updated.cjs +154 -0
  96. package/examples/js/cli.js +405 -0
  97. package/examples/js/coinbase-fetch-all-balances.js +36 -0
  98. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +47 -0
  99. package/examples/js/coinex-futures.js +75 -0
  100. package/examples/js/coinone-fetch-tickers.js +54 -0
  101. package/examples/js/coinone-markets.js +16 -0
  102. package/examples/js/compare-two-exchanges-capabilities.js +36 -0
  103. package/examples/js/cors-proxy.js +5 -0
  104. package/examples/js/create-order-handle-errors.js +55 -0
  105. package/examples/js/create-order-position-with-takeprofit-stoploss.js +71 -0
  106. package/examples/js/create-order-with-retry.js +65 -0
  107. package/examples/js/create-order-ws-example.js +25 -0
  108. package/examples/js/create-orders-example.js +17 -0
  109. package/examples/js/create-trailing-amount-order.js +36 -0
  110. package/examples/js/create-trailing-percent-order.js +36 -0
  111. package/examples/js/credentials.json +5 -0
  112. package/examples/js/custom-proxy-agent-for-js.js +10 -0
  113. package/examples/js/custom-proxy-url.js +23 -0
  114. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +60 -0
  115. package/examples/js/env-variables.js +26 -0
  116. package/examples/js/error-handling.js +89 -0
  117. package/examples/js/exchange-capabilities.js +135 -0
  118. package/examples/js/exchanges-by-volume.js +60 -0
  119. package/examples/js/exchanges.js +40 -0
  120. package/examples/js/fetch-all-balances.js +219 -0
  121. package/examples/js/fetch-all-tickers-to-files-2.js +53 -0
  122. package/examples/js/fetch-all-tickers-to-files.js +77 -0
  123. package/examples/js/fetch-balance.js +28 -0
  124. package/examples/js/fetch-create-deposit-address.js +101 -0
  125. package/examples/js/fetch-from-many-exchanges-simultaneously.js +21 -0
  126. package/examples/js/fetch-funding-rate-history.js +25 -0
  127. package/examples/js/fetch-futures/prettier.config.js +5 -0
  128. package/examples/js/fetch-futures/src/index.js +25 -0
  129. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +72 -0
  130. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +39 -0
  131. package/examples/js/fetch-ohlcv.js +16 -0
  132. package/examples/js/fetch-okex-futures.js +22 -0
  133. package/examples/js/fetch-orders.js +27 -0
  134. package/examples/js/fetch-ticker-from-multiple-exchanges.js +35 -0
  135. package/examples/js/fetch-ticker-where-available.js +75 -0
  136. package/examples/js/fetch-tickers/build/index.js +19 -0
  137. package/examples/js/fetch-tickers/prettier.config.js +5 -0
  138. package/examples/js/fetch-tickers/src/index.js +17 -0
  139. package/examples/js/gateio-create-batch-order.js +43 -0
  140. package/examples/js/gateio-futures.js +49 -0
  141. package/examples/js/gateio-open-close-contract.js +49 -0
  142. package/examples/js/gateio-swaps.js +74 -0
  143. package/examples/js/gdax-fetch-trades-pagination.js +29 -0
  144. package/examples/js/hitbtc2-withdraw.js +61 -0
  145. package/examples/js/how-to-import-one-exchange-esm.js +10 -0
  146. package/examples/js/huobi-futures.js +71 -0
  147. package/examples/js/huobi-open-close-contract.js +63 -0
  148. package/examples/js/huobi-swaps.js +70 -0
  149. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +98 -0
  150. package/examples/js/hybridCJSExample.cjs +19 -0
  151. package/examples/js/hybridESMExample.js +19 -0
  152. package/examples/js/idex-fetch-balance.js +13 -0
  153. package/examples/js/instantiate-all-at-once.js +46 -0
  154. package/examples/js/instantiate-all-from-json.js +31 -0
  155. package/examples/js/kraken-create-and-close-position.js +54 -0
  156. package/examples/js/kraken-fetch-order-trades.js +33 -0
  157. package/examples/js/kraken-margin-trading.js +89 -0
  158. package/examples/js/kucoin-rate-limit.js +38 -0
  159. package/examples/js/latoken-example.js +108 -0
  160. package/examples/js/live-orderbook.js +106 -0
  161. package/examples/js/live-ticker.js +80 -0
  162. package/examples/js/live-tickers.js +74 -0
  163. package/examples/js/load-all-contracts.js +41 -0
  164. package/examples/js/load-all-symbols-at-once.js +69 -0
  165. package/examples/js/load-all-tickers-at-once.js +91 -0
  166. package/examples/js/load-markets-to-files.js +57 -0
  167. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +61 -0
  168. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +91 -0
  169. package/examples/js/margin-loan-borrow-buy-sell-repay.js +70 -0
  170. package/examples/js/market-status-and-currency-status.js +29 -0
  171. package/examples/js/ohlcv-console-chart.js +29 -0
  172. package/examples/js/okex-fetch-closed-orders-archive.js +31 -0
  173. package/examples/js/okex-transfer.js +51 -0
  174. package/examples/js/okx-poll-fetch-my-trades.js +37 -0
  175. package/examples/js/okx-poll-rate-limit.js +48 -0
  176. package/examples/js/order-book-extra-level-depth-param.js +20 -0
  177. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +49 -0
  178. package/examples/js/poll-ohlcv.js +43 -0
  179. package/examples/js/poloniex-fetch-order-books.js +35 -0
  180. package/examples/js/poloniex-limits-amount-min.js +62 -0
  181. package/examples/js/proxy-round-robin.js +98 -0
  182. package/examples/js/proxy-usage.js +32 -0
  183. package/examples/js/sample-local-proxy-server-with-cors.js +12 -0
  184. package/examples/js/search-all-exchanges.js +159 -0
  185. package/examples/js/shared-load-markets.js +80 -0
  186. package/examples/js/sort-swap-markets-by-hourly-price-change.js +55 -0
  187. package/examples/js/symbols.js +110 -0
  188. package/examples/js/theocean.js +41 -0
  189. package/examples/js/tickers.js +106 -0
  190. package/examples/js/validate-paginated-data.js +61 -0
  191. package/examples/js/watch-OHLCV-For-Symbols.js +15 -0
  192. package/examples/js/watch-OHLCV.js +12 -0
  193. package/examples/js/watch-OrderBook-For-Symbols.js +11 -0
  194. package/examples/js/watch-Trades-For-Symbols.js +11 -0
  195. package/examples/js/watch-tickers.js +11 -0
  196. package/examples/js/watchOHLCVForSymbols.js +15 -0
  197. package/examples/js/watchOrderBookForSymbols.js +11 -0
  198. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +2 -0
  199. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +1 -0
  200. package/examples/js/watchPositions-many-exchanges-continuosly.js +49 -0
  201. package/examples/js/watchPositions.d.ts +2 -0
  202. package/examples/js/watchPositions.d.ts.map +1 -0
  203. package/examples/js/watchPositions.js +13 -0
  204. package/examples/js/watchPositionsForSymbols.d.ts +2 -0
  205. package/examples/js/watchPositionsForSymbols.d.ts.map +1 -0
  206. package/examples/js/watchPositionsForSymbols.js +14 -0
  207. package/examples/js/watchTradesForSymbols.js +11 -0
  208. package/examples/js/withdraw-from-one-exchange-to-another.js +50 -0
  209. package/examples/php/README.md +7 -0
  210. package/examples/py/README.md +15 -0
  211. package/examples/py/playing_with_ccxt_example.ipynb +222 -0
  212. package/examples/ts/.eslintrc +111 -0
  213. package/examples/ts/build-ohlcv-bars.ts +53 -0
  214. package/examples/ts/cli.ts +397 -0
  215. package/examples/ts/compare-two-exchanges-capabilities.ts +36 -0
  216. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +89 -0
  217. package/examples/ts/create-order-ws-example.ts +33 -0
  218. package/examples/ts/create-orders-example.ts +21 -0
  219. package/examples/ts/create-trailing-amount-order.ts +37 -0
  220. package/examples/ts/create-trailing-percent-order.ts +37 -0
  221. package/examples/ts/custom-proxy-agent-for-js.ts +14 -0
  222. package/examples/ts/fetch-futures/package-lock.json +116 -0
  223. package/examples/ts/fetch-futures/package.json +34 -0
  224. package/examples/ts/fetch-futures/prettier.config.js +4 -0
  225. package/examples/ts/fetch-futures/src/index.ts +28 -0
  226. package/examples/ts/fetch-futures/tsconfig.json +28 -0
  227. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +44 -0
  228. package/examples/ts/fetch-ohlcv.ts +17 -0
  229. package/examples/ts/fetch-tickers/package-lock.json +116 -0
  230. package/examples/ts/fetch-tickers/package.json +34 -0
  231. package/examples/ts/fetch-tickers/prettier.config.js +4 -0
  232. package/examples/ts/fetch-tickers/src/index.ts +21 -0
  233. package/examples/ts/fetch-tickers/tsconfig.json +28 -0
  234. package/examples/ts/how-to-import-one-exchange-esm.ts +11 -0
  235. package/examples/ts/kraken-create-and-close-position.ts +69 -0
  236. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +72 -0
  237. package/examples/ts/nextjs-page-router/.eslintrc.json +3 -0
  238. package/examples/ts/nextjs-page-router/README.md +43 -0
  239. package/examples/ts/nextjs-page-router/next.config.js +6 -0
  240. package/examples/ts/nextjs-page-router/package-lock.json +7425 -0
  241. package/examples/ts/nextjs-page-router/package.json +28 -0
  242. package/examples/ts/nextjs-page-router/postcss.config.js +6 -0
  243. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  244. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +6 -0
  245. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +13 -0
  246. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +46 -0
  247. package/examples/ts/nextjs-page-router/src/pages/index.tsx +8 -0
  248. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +61 -0
  249. package/examples/ts/nextjs-page-router/src/styles/globals.css +27 -0
  250. package/examples/ts/nextjs-page-router/tailwind.config.ts +20 -0
  251. package/examples/ts/nextjs-page-router/tsconfig.json +22 -0
  252. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +62 -0
  253. package/examples/ts/proxy-usage.ts +41 -0
  254. package/examples/ts/sample-local-proxy-server-with-cors.ts +15 -0
  255. package/examples/ts/watch-OHLCV-For-Symbols.ts +17 -0
  256. package/examples/ts/watch-OHLCV.ts +14 -0
  257. package/examples/ts/watch-OrderBook-For-Symbols.ts +13 -0
  258. package/examples/ts/watch-Trades-For-Symbols.ts +13 -0
  259. package/examples/ts/watch-tickers.ts +13 -0
  260. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +53 -0
  261. package/examples/ts/watchPositions.ts +15 -0
  262. package/examples/ts/watchPositionsForSymbols.ts +16 -0
  263. package/examples/tsconfig.json +27 -0
  264. package/js/ccxt.d.ts +5 -2
  265. package/js/ccxt.js +4 -2
  266. package/js/src/abstract/tradeogre.d.ts +19 -0
  267. package/js/src/abstract/tradeogre.js +11 -0
  268. package/js/src/ascendex.d.ts +2 -7
  269. package/js/src/ascendex.js +3 -2
  270. package/js/src/base/Exchange.d.ts +7 -7
  271. package/js/src/base/Exchange.js +1 -1
  272. package/js/src/base/types.d.ts +7 -1
  273. package/js/src/binance.d.ts +1 -1
  274. package/js/src/bitget.js +62 -50
  275. package/js/src/bitmart.d.ts +1 -1
  276. package/js/src/bitmart.js +2 -1
  277. package/js/src/bybit.d.ts +3 -1
  278. package/js/src/bybit.js +90 -30
  279. package/js/src/coinbase.d.ts +4 -4
  280. package/js/src/coinbaseinternational.d.ts +1 -1
  281. package/js/src/coinbaseinternational.js +1 -1
  282. package/js/src/coinbasepro.d.ts +2 -2
  283. package/js/src/coinex.js +4 -3
  284. package/js/src/coinlist.d.ts +2 -2
  285. package/js/src/cryptocom.d.ts +2 -2
  286. package/js/src/currencycom.d.ts +2 -2
  287. package/js/src/deribit.d.ts +2 -2
  288. package/js/src/gate.d.ts +1 -1
  289. package/js/src/gate.js +1 -0
  290. package/js/src/htx.d.ts +2 -2
  291. package/js/src/htx.js +16 -9
  292. package/js/src/huobijp.d.ts +2 -2
  293. package/js/src/hyperliquid.js +2 -1
  294. package/js/src/kraken.d.ts +1 -1
  295. package/js/src/kraken.js +3 -3
  296. package/js/src/kucoin.d.ts +3 -3
  297. package/js/src/kucoin.js +1 -1
  298. package/js/src/luno.d.ts +2 -2
  299. package/js/src/mexc.d.ts +3 -3
  300. package/js/src/ndax.d.ts +2 -2
  301. package/js/src/novadax.d.ts +2 -2
  302. package/js/src/okx.d.ts +2 -2
  303. package/js/src/pro/bitfinex2.d.ts +1 -1
  304. package/js/src/pro/krakenfutures.js +8 -7
  305. package/js/src/tradeogre.d.ts +32 -0
  306. package/js/src/tradeogre.js +633 -0
  307. package/js/src/woo.d.ts +2 -2
  308. package/package.json +4 -1
  309. package/skip-tests.json +219 -424
@@ -0,0 +1,108 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+ import ololog from 'ololog';
5
+ import asTable from 'as-table';
6
+
7
+
8
+ const table = asTable.configure ({ delimiter: ' | ' }),
9
+ //-----------------------------------------------------------------------------
10
+ log = ololog.unlimited.noLocate.handleNodeErrors ();(async function main () {
11
+
12
+ const symbol = 'BTC/USDT'
13
+
14
+ const exchange = new ccxt.latoken ({
15
+ 'verbose': process.argv.includes ('--verbose'),
16
+ // uncomment and change for your keys to enable private calls
17
+ // 'apiKey': 'YOUR_API_KEY',
18
+ // 'secret': 'YOUR_API_SECRET',
19
+ })
20
+
21
+ await exchange.loadMarkets ()
22
+
23
+ log ('-------------------------------------------------------------------')
24
+
25
+ log (exchange.id, 'has', exchange.has)
26
+
27
+ // public API
28
+
29
+ log ('-------------------------------------------------------------------')
30
+
31
+ const markets = Object.values (exchange.markets)
32
+ log ('Loaded', markets.length, exchange.id, 'markets:')
33
+ log (table (markets.map (x => exchange.omit (x, [ 'info', 'limits', 'precision' ]))))
34
+
35
+ log ('-------------------------------------------------------------------')
36
+
37
+ const currencies = Object.values (exchange.currencies)
38
+ log ('Loaded', currencies.length, exchange.id, 'currencies:')
39
+ log (table (currencies.map (x => exchange.omit (x, [ 'info', 'limits' ]))))
40
+
41
+ log ('-------------------------------------------------------------------')
42
+
43
+ const time = await exchange.fetchTime ()
44
+ log ('Exchange time:', exchange.iso8601 (time))
45
+
46
+ log ('-------------------------------------------------------------------')
47
+
48
+ const ticker = await exchange.fetchTicker (symbol)
49
+ log (ticker)
50
+
51
+ log ('-------------------------------------------------------------------')
52
+
53
+ const tickers = await exchange.fetchTickers ()
54
+ log (table (Object.values (tickers).map (x =>
55
+ exchange.omit (x, [ 'info', 'bid', 'ask', 'bidVolume', 'askVolume', 'timestamp' ]))))
56
+
57
+ log ('-------------------------------------------------------------------')
58
+
59
+ const orderbook = await exchange.fetchOrderBook (symbol)
60
+ log (orderbook)
61
+
62
+ log ('-------------------------------------------------------------------')
63
+
64
+ const trades = await exchange.fetchTrades (symbol)
65
+ log (table (trades.map (x => exchange.omit (x, [ 'info', 'timestamp' ]))))
66
+
67
+ log ('-------------------------------------------------------------------')
68
+
69
+ // private API
70
+
71
+ if (exchange.checkRequiredCredentials (false)) {
72
+
73
+ const balance = await exchange.fetchBalance ()
74
+ log (exchange.omit (balance, [ 'info' ]))
75
+
76
+ log ('-------------------------------------------------------------------')
77
+
78
+ const order = await exchange.createOrder (symbol, 'limit', 'buy', 0.001, 10000)
79
+ log (order)
80
+
81
+ log ('-------------------------------------------------------------------')
82
+
83
+ const openOrders = await exchange.fetchOpenOrders (symbol)
84
+ log (table (openOrders.map (x => exchange.omit (x, [ 'info', 'timestamp' ]))))
85
+
86
+ log ('-------------------------------------------------------------------')
87
+
88
+ const canceled = await exchange.cancelOrder (order['id'], order['symbol'])
89
+ log (canceled)
90
+
91
+ log ('-------------------------------------------------------------------')
92
+
93
+ const closedOrders = await exchange.fetchClosedOrders (symbol)
94
+ log (table (closedOrders.map (x => exchange.omit (x, [ 'info', 'timestamp' ]))))
95
+
96
+ log ('-------------------------------------------------------------------')
97
+
98
+ const canceledOrders = await exchange.fetchCanceledOrders (symbol)
99
+ log (table (canceledOrders.map (x => exchange.omit (x, [ 'info', 'timestamp' ]))))
100
+
101
+ log ('-------------------------------------------------------------------')
102
+
103
+ const myTrades = await exchange.fetchMyTrades (symbol)
104
+ log (table (myTrades.map (x => exchange.omit (x, [ 'info', 'timestamp' ]))))
105
+
106
+ }
107
+
108
+ }) ()
@@ -0,0 +1,106 @@
1
+
2
+
3
+ import asTable from 'as-table';
4
+ import ololog from 'ololog';
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
+ let printSupportedExchanges = function () {
14
+ log ('Supported exchanges:', ccxt.exchanges.join (', ').green)
15
+ }
16
+
17
+ let printUsage = function () {
18
+ log ('Usage: node', process.argv[1], 'exchange'.green, 'symbol'.yellow, 'depth'.cyan)
19
+ printSupportedExchanges ()
20
+ }
21
+
22
+ let printOrderBook = async (id, symbol, depth) => {
23
+
24
+ // check if the exchange is supported by ccxt
25
+ let exchangeFound = ccxt.exchanges.indexOf (id) > -1
26
+ if (exchangeFound) {
27
+
28
+ log ('Instantiating', id.green, 'exchange')
29
+
30
+ // instantiate the exchange by id
31
+ let exchange = new ccxt[id] ()
32
+
33
+ // load all markets from the exchange
34
+ let markets = await exchange.loadMarkets ()
35
+
36
+ // output a list of all market symbols
37
+ // log (id.green, 'has', exchange.symbols.length, 'symbols:', exchange.symbols.join (', ').yellow)
38
+
39
+ if (symbol in exchange.markets) {
40
+
41
+ const market = exchange.markets[symbol]
42
+ const pricePrecision = market.precision ? market.precision.price : 8
43
+ const amountPrecision = market.precision ? market.precision.amount : 8
44
+
45
+ // Object.values (markets).forEach (market => log (market))
46
+
47
+ // make a table of all markets
48
+ // const table = asTable.configure ({ delimiter: ' | ' }) (Object.values (markets))
49
+ // log (table)
50
+
51
+ const priceVolumeHelper = color => ([price, amount]) => ({
52
+ price: price.toFixed (pricePrecision)[color],
53
+ amount: amount.toFixed (amountPrecision)[color],
54
+ ' ': ' ',
55
+ })
56
+
57
+ const cursorUp = '\u001b[1A'
58
+ const tableHeight = depth * 2 + 4 // bids + asks + headers
59
+
60
+ log (' ') // empty line
61
+
62
+ while (true) {
63
+
64
+ const orderbook = await exchange.fetchOrderBook (symbol)
65
+
66
+ log (symbol.green, exchange.iso8601 (exchange.milliseconds ()))
67
+
68
+ log (asTable.configure ({ delimiter: ' | '.dim, right: true }) ([
69
+ ... orderbook.asks.slice (0, depth).reverse ().map (priceVolumeHelper ('red')),
70
+ // { price: '--------'.dim, amount: '--------'.dim },
71
+ ... orderbook.bids.slice (0, depth).map (priceVolumeHelper ('green')),
72
+ ]))
73
+
74
+ log (cursorUp.repeat (tableHeight))
75
+ }
76
+
77
+ } else {
78
+
79
+ log.error ('Symbol', symbol.bright, 'not found')
80
+ }
81
+
82
+
83
+ } else {
84
+
85
+ log ('Exchange ' + id.red + ' not found')
86
+ printSupportedExchanges ()
87
+ }
88
+ }
89
+
90
+ ;(async function main () {
91
+
92
+ if (process.argv.length > 4) {
93
+
94
+ const id = process.argv[2]
95
+ const symbol = process.argv[3].toUpperCase ()
96
+ const depth = parseInt (process.argv[4])
97
+ await printOrderBook (id, symbol, depth)
98
+
99
+ } else {
100
+
101
+ printUsage ()
102
+ }
103
+
104
+ process.exit ()
105
+
106
+ }) ()
@@ -0,0 +1,80 @@
1
+
2
+
3
+ import asTable from 'as-table';
4
+ import ololog from 'ololog';
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
+ let printSupportedExchanges = function () {
14
+ log ('Supported exchanges:', ccxt.exchanges.join (', ').green)
15
+ }
16
+
17
+ let printUsage = function () {
18
+ log ('Usage: node', process.argv[1], 'exchange'.green, 'symbol'.yellow, '[rateLimit]'.magenta)
19
+ printSupportedExchanges ()
20
+ }
21
+
22
+ let printTicker = async (id, symbol, rateLimit = undefined) => {
23
+
24
+ // check if the exchange is supported by ccxt
25
+ let exchangeFound = ccxt.exchanges.indexOf (id) > -1
26
+ if (exchangeFound) {
27
+
28
+ log ('Instantiating', id.green, 'exchange')
29
+
30
+ // instantiate the exchange by id
31
+ let exchange = new ccxt[id] ()
32
+
33
+ exchange.rateLimit = rateLimit ? rateLimit : exchange.rateLimit
34
+
35
+ log.green ('Rate limit:', exchange.rateLimit.toString ().bright)
36
+
37
+ // load all markets from the exchange
38
+ let markets = await exchange.loadMarkets ()
39
+
40
+ if (symbol in exchange.markets) {
41
+
42
+ while (true) {
43
+
44
+ const ticker = await exchange.fetchTicker (symbol)
45
+
46
+ log ('--------------------------------------------------------')
47
+ log (exchange.id.green, symbol.yellow, exchange.iso8601 (exchange.milliseconds ()))
48
+ log (ccxt.omit (ticker, 'info'))
49
+ }
50
+
51
+ } else {
52
+
53
+ log.error ('Symbol', symbol.bright, 'not found')
54
+ }
55
+
56
+
57
+ } else {
58
+
59
+ log ('Exchange ' + id.red + ' not found')
60
+ printSupportedExchanges ()
61
+ }
62
+ }
63
+
64
+ ;(async function main () {
65
+
66
+ if (process.argv.length > 3) {
67
+
68
+ const id = process.argv[2]
69
+ const symbol = process.argv[3].toUpperCase ()
70
+ const rateLimit = process.argv[4] ? parseInt (process.argv[4]) : undefined
71
+ await printTicker (id, symbol, rateLimit)
72
+
73
+ } else {
74
+
75
+ printUsage ()
76
+ }
77
+
78
+ process.exit ()
79
+
80
+ }) ()
@@ -0,0 +1,74 @@
1
+
2
+
3
+ import asTable from 'as-table';
4
+ import ololog from 'ololog';
5
+ import ansicolor from 'ansicolor';
6
+ import ccxt from '../../js/ccxt.js';
7
+
8
+ ansicolor.nice
9
+
10
+ const { noLocate } = ololog;
11
+ const log = noLocate;
12
+
13
+ let printSupportedExchanges = function () {
14
+ log ('Supported exchanges:', ccxt.exchanges.join (', ').green)
15
+ }
16
+
17
+ let printUsage = function () {
18
+ log ('Usage: node', process.argv[1], 'exchange'.green)
19
+ printSupportedExchanges ()
20
+ }
21
+
22
+ let printTickers = async (id) => {
23
+
24
+ // check if the exchange is supported by ccxt
25
+ let exchangeFound = ccxt.exchanges.indexOf (id) > -1
26
+ if (exchangeFound) {
27
+
28
+ log ('Instantiating', id.green, 'exchange')
29
+
30
+ // instantiate the exchange by id
31
+ let exchange = new ccxt[id] ()
32
+
33
+ // load all markets from the exchange
34
+ let markets = await exchange.loadMarkets ()
35
+
36
+ while (true) {
37
+
38
+ const tickers = await exchange.fetchTickers ()
39
+
40
+ log ('--------------------------------------------------------')
41
+ log (exchange.id.green, exchange.iso8601 (exchange.milliseconds ()))
42
+ log ('Fetched', Object.values (tickers).length.toString ().green, 'tickers:')
43
+ log (asTable.configure ({ delimiter: ' | '.dim, right: true }) (
44
+ ccxt.sortBy (Object.values (tickers), 'quoteVolume', true)
45
+ .slice (0,20)
46
+ .map (ticker => ({
47
+ symbol: ticker['symbol'],
48
+ price: ticker['last'].toFixed (8),
49
+ datetime: ticker['datetime'],
50
+ }))))
51
+ }
52
+
53
+ } else {
54
+
55
+ log ('Exchange ' + id.red + ' not found')
56
+ printSupportedExchanges ()
57
+ }
58
+ }
59
+
60
+ ;(async function main () {
61
+
62
+ if (process.argv.length > 2) {
63
+
64
+ const id = process.argv[2]
65
+ await printTickers (id)
66
+
67
+ } else {
68
+
69
+ printUsage ()
70
+ }
71
+
72
+ process.exit ()
73
+
74
+ }) ()
@@ -0,0 +1,41 @@
1
+ "use strict";
2
+
3
+ const ccxt = require ('../../ccxt.js')
4
+
5
+ console.log ('CCXT Version:', ccxt.version)
6
+
7
+ async function loadExchange (exchange) {
8
+ try {
9
+ await exchange.loadMarkets ()
10
+ exchange.symbols.map (symbol => {
11
+ const market = exchange.market (symbol)
12
+ if (market['contract']) {
13
+ console.log (exchange.id, 'loaded', market['type'], symbol, 'market')
14
+ }
15
+ })
16
+ } catch (e) {
17
+ console.log (e.constructor.name, e.message)
18
+ }
19
+ }
20
+
21
+ async function loadAllExchanges (exchangeId) {
22
+ try {
23
+
24
+ const exchanges = [];
25
+ [ 'swap', 'future', 'options' ].forEach (defaultType => {
26
+ const exchange = new ccxt[exchangeId]()
27
+ if (exchange.has[defaultType]) {
28
+ exchanges.push (exchange);
29
+ }
30
+ })
31
+ await Promise.all (exchanges.map (exchange => loadExchange (exchange)))
32
+ } catch (e) {
33
+ console.log (e.constructor.name, e.message)
34
+ }
35
+ }
36
+
37
+ async function main () {
38
+ await Promise.all (ccxt.exchanges.map (exchangeId => loadAllExchanges (exchangeId)))
39
+ }
40
+
41
+ main ()
@@ -0,0 +1,69 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+ import asTable from 'as-table';
5
+ import ololog from 'ololog';
6
+ import ansicolor from 'ansicolor';
7
+ const log = ololog.configure ({ locate: false })
8
+
9
+ ansicolor.nice
10
+
11
+ //-----------------------------------------------------------------------------
12
+
13
+ process.on ('uncaughtException', e => { log.bright.red.error (e); process.exit (1) })
14
+ process.on ('unhandledRejection', e => { log.bright.red.error (e); process.exit (1) })
15
+
16
+ //-----------------------------------------------------------------------------
17
+
18
+ let test = async function (exchange) {
19
+
20
+ try {
21
+
22
+ await exchange.loadMarkets ()
23
+ log (exchange.id.green, 'loaded', exchange.symbols.length.toString ().bright.green, 'symbols')
24
+
25
+ } catch (e) {
26
+
27
+ if (e instanceof ccxt.DDoSProtection) {
28
+ log.bright.yellow (exchange.id, '[DDoS Protection] ' + e.message)
29
+ } else if (e instanceof ccxt.RequestTimeout) {
30
+ log.bright.yellow (exchange.id, '[Request Timeout] ' + e.message)
31
+ } else if (e instanceof ccxt.AuthenticationError) {
32
+ log.bright.yellow (exchange.id, '[Authentication Error] ' + e.message)
33
+ } else if (e instanceof ccxt.ExchangeNotAvailable) {
34
+ log.bright.yellow (exchange.id, '[Exchange Not Available] ' + e.message)
35
+ } else if (e instanceof ccxt.ExchangeError) {
36
+ log.bright.yellow (exchange.id, '[Exchange Error] ' + e.message)
37
+ } else if (e instanceof ccxt.NetworkError) {
38
+ log.bright.yellow (exchange.id, '[Network Error] ' + e.message)
39
+ } else {
40
+ throw e
41
+ }
42
+ }
43
+ }
44
+
45
+ //-----------------------------------------------------------------------------
46
+
47
+ let exchanges = []
48
+
49
+ async function main () {
50
+
51
+ // instantiate all exchanges
52
+ await Promise.all (ccxt.exchanges.map (async id => {
53
+ let exchange = new (ccxt)[id] ()
54
+ exchanges.push (exchange)
55
+ await test (exchange)
56
+ }))
57
+
58
+ let succeeded = exchanges.filter (exchange => exchange.markets ? true : false).length.toString ().bright.green
59
+ let failed = exchanges.filter (exchange => exchange.markets ? false : true).length
60
+ let total = ccxt.exchanges.length.toString ().bright.white
61
+ let numSymbols = 0;
62
+ exchanges.map (exchange => {
63
+ numSymbols += exchange.symbols ? exchange.symbols.length : 0;
64
+ })
65
+ log (numSymbols, 'symbols from', succeeded, 'of', total, 'exchanges loaded', ('(' + failed + ' errors)').red)
66
+
67
+ }
68
+
69
+ main ()
@@ -0,0 +1,91 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+ import asTable from 'as-table';
5
+ import ololog from 'ololog';
6
+ import ansicolor from 'ansicolor';
7
+
8
+ const log = ololog.configure ({ locate: false })
9
+
10
+ ansicolor.nice
11
+
12
+ //-----------------------------------------------------------------------------
13
+
14
+ process.on ('uncaughtException', e => { log.bright.red.error (e); process.exit (1) })
15
+ process.on ('unhandledRejection', e => { log.bright.red.error (e); process.exit (1) })
16
+
17
+ //-----------------------------------------------------------------------------
18
+
19
+ let human_value = function (price) {
20
+ return price === undefined ? 'N/A' : price
21
+ }
22
+
23
+ //-----------------------------------------------------------------------------
24
+
25
+ let test = async function (exchange, symbol) {
26
+
27
+ try {
28
+
29
+ await exchange.loadMarkets ()
30
+
31
+ if (symbol in exchange.markets) {
32
+
33
+ let ticker = await exchange.fetchTicker (symbol)
34
+
35
+ log (exchange.id.green, symbol.green, 'ticker',
36
+ ticker['datetime'],
37
+ 'high: ' + human_value (ticker['high']),
38
+ 'low: ' + human_value (ticker['low']),
39
+ 'bid: ' + human_value (ticker['bid']),
40
+ 'ask: ' + human_value (ticker['ask']),
41
+ 'volume: ' + human_value (ticker['quoteVolume']))
42
+ } else {
43
+
44
+ // do nothing or throw an error
45
+ log.bright.yellow (exchange.id + ' does not have ' + symbol)
46
+ }
47
+
48
+ } catch (e) {
49
+
50
+ if (e instanceof ccxt.DDoSProtection) {
51
+ log.bright.yellow (exchange.id, '[DDoS Protection]')
52
+ } else if (e instanceof ccxt.RequestTimeout) {
53
+ log.bright.yellow (exchange.id, '[Request Timeout]')
54
+ } else if (e instanceof ccxt.AuthenticationError) {
55
+ log.bright.yellow (exchange.id, '[Authentication Error]')
56
+ } else if (e instanceof ccxt.ExchangeNotAvailable) {
57
+ log.bright.yellow (exchange.id, '[Exchange Not Available]')
58
+ } else if (e instanceof ccxt.ExchangeError) {
59
+ log.bright.yellow (exchange.id, '[Exchange Error]')
60
+ } else if (e instanceof ccxt.NetworkError) {
61
+ log.bright.yellow (exchange.id, '[Network Error]')
62
+ } else {
63
+ throw e
64
+ }
65
+ }
66
+ }
67
+
68
+ //-----------------------------------------------------------------------------
69
+
70
+ const symbol = 'BTC/USD'
71
+
72
+ //-----------------------------------------------------------------------------
73
+
74
+ async function main () {
75
+
76
+ let exchanges = []
77
+
78
+ // instantiate all exchanges
79
+ await Promise.all (ccxt.exchanges.map (async id => {
80
+ let exchange = new (ccxt)[id] ()
81
+ exchanges.push (exchange)
82
+ await test (exchange, symbol)
83
+ }))
84
+
85
+ let succeeded = exchanges.filter (exchange => exchange.markets ? true : false).length.toString ().bright.green
86
+ let failed = exchanges.filter (exchange => exchange.markets ? false : true).length
87
+ let total = ccxt.exchanges.length.toString ().bright.white
88
+ console.log (succeeded, 'of', total, 'exchanges loaded', ('(' + failed + ' errors)').red)
89
+ }
90
+
91
+ main ()
@@ -0,0 +1,57 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+ import path from 'path';
5
+ import fs from 'fs';
6
+
7
+ const enableRateLimit = true,
8
+ // exchange defaults
9
+ // ------------------------------------------------------------------------
10
+ // path to your folder, for example '/myproject/markets' or 'C:/myproject/markets'
11
+ options = { enableRateLimit },
12
+ // writes to current working directory if left empty
13
+ // ------------------------------------------------------------------------
14
+ // use a reasonable value for maxConcurrency to avoid network congestion
15
+ // a burst of requests in a short period of time will cause
16
+ // excessive competition for networking resources within the application
17
+ folder = '',
18
+ maxConcurrency = 7;
19
+
20
+ async function main () {
21
+
22
+ const allExchanges = ccxt.exchanges.map (id => {
23
+ try {
24
+ return new ccxt[id] (options)
25
+ } catch (e) {
26
+ console.log ('Failed to initialize', id, e.constructor.name)
27
+ }
28
+ }).filter (x => x)
29
+ , allExchangesByIds = ccxt.indexBy (allExchanges, 'id')
30
+ , exchangeIds = Object.keys (allExchangesByIds)
31
+
32
+ const load = async () => {
33
+ while (exchangeIds.length > 0) {
34
+ const id = exchangeIds.pop ()
35
+ const exchange = allExchangesByIds[id]
36
+ const file = path.join (folder, `saved-markets-${exchange.id}.json`)
37
+ try {
38
+ await exchange.loadMarkets ()
39
+ const { id, markets } = exchange
40
+ await writeFile (file, JSON.stringify ({ id, markets }))
41
+ console.log ('Loaded markets from', id, 'to', file)
42
+ } catch (e) {
43
+ console.log ('Failed to load markets from', id, 'to', file, e.constructor.name)
44
+ }
45
+ }
46
+ }
47
+
48
+ const started = ccxt.milliseconds ()
49
+ const loaders = Array (maxConcurrency).fill ().map (x => load ())
50
+ await Promise.all (loaders)
51
+ const stopped = ccxt.milliseconds ()
52
+ console.log ('Done loading', allExchanges.length, 'exchanges in', ((stopped - started) / 1000).toFixed (2), 'seconds')
53
+
54
+ // other code...
55
+ }
56
+
57
+ main ()
@@ -0,0 +1,61 @@
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
+ ;(async () => {
15
+
16
+ const exchanges = [ 'bittrex', 'poloniex', 'hitbtc2' ]
17
+
18
+ for (let exchangeId of exchanges) {
19
+
20
+ // create the exchange instance
21
+ const exchange = new ccxt[exchangeId] ()
22
+
23
+ // preload all markets first, as explained in the Manual:
24
+ // https://github.com/ccxt/ccxt/wiki/Manual#loading-markets
25
+
26
+ // add error/exception handling as required by the Manual:
27
+ // https://github.com/ccxt/ccxt/wiki/Manual#error-handling
28
+
29
+ try {
30
+
31
+ await exchange.loadMarkets ();
32
+
33
+ } catch (e) {
34
+
35
+ log.red ('Could not load markets from', exchange.id + ':', e.constructor.name, e.message)
36
+
37
+ continue; // skip this exchange if markets failed to load
38
+
39
+ }
40
+
41
+ for (let symbol in exchange.markets) {
42
+
43
+ console.log (exchange.id, symbol)
44
+
45
+ // add error/exception handling as required by the Manual:
46
+ // https://github.com/ccxt/ccxt/wiki/Manual#error-handling
47
+
48
+ try { // try fetching the ticker for a symbol existing with that exchange
49
+
50
+ const ticker = await exchange.fetchTicker (symbol)
51
+ log.green (ticker)
52
+
53
+ } catch (e) { // catch the error (if any) and handle it or ignore it
54
+
55
+ log.red ('Could not fetch', symbol, 'ticker from', exchange.id + ':', e.constructor.name, e.message)
56
+
57
+ }
58
+ }
59
+ }
60
+
61
+ }) ()