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,115 @@
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
+ }) ()
@@ -0,0 +1,45 @@
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
+ }) ()
@@ -0,0 +1,34 @@
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 ()
@@ -0,0 +1,33 @@
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 ()
@@ -0,0 +1,31 @@
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
+ }) ()
@@ -0,0 +1,41 @@
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
+
@@ -0,0 +1,39 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+
5
+ console.log ('CCXT Version:', ccxt.version)
6
+
7
+ async function main () {
8
+
9
+ const exchange = new ccxt.binance({
10
+ 'apiKey': 'YOUR_API_KEY',
11
+ 'secret': 'YOUR_API_SECRET',
12
+ 'options': {
13
+ 'defaultType': 'margin',
14
+ },
15
+ })
16
+
17
+ const markets = await exchange.loadMarkets ()
18
+
19
+ exchange.verbose = true // uncomment for debugging purposes if necessary
20
+
21
+ const symbol = 'BTC/USDT'
22
+ const type = 'STOP_LOSS_LIMIT'
23
+ const side = 'buy'
24
+ const amount = YOUR_AMOUNT_HERE
25
+ const price = YOUR_PRICE_HERE
26
+ const params = {
27
+ 'stopPrice': YOUR_STOP_PRICE_HERE,
28
+ 'timeInForce': 'GTC',
29
+ }
30
+
31
+ try {
32
+ const order = await exchange.createOrder (symbol, type, side, amount, price, params)
33
+ console.log (order)
34
+ } catch (e) {
35
+ console.log (e.constructor.name, e.message)
36
+ }
37
+ }
38
+
39
+ main ()
@@ -0,0 +1,34 @@
1
+
2
+ import ccxt from '../../js/ccxt.js';
3
+ import ololog from 'ololog'
4
+
5
+ const log = ololog.configure ({ locate: false })
6
+
7
+ const binance = new ccxt['binance'] ()
8
+ const recvWindow = binance.options.recvWindow
9
+ const aheadWindow = 1000
10
+
11
+ async function test () {
12
+ const localStartTime = Date.now ()
13
+ const { serverTime } = await binance.publicGetTime ()
14
+ const localFinishTime = Date.now ()
15
+ const estimatedLandingTime = (localFinishTime + localStartTime) / 2
16
+
17
+ const diff = serverTime - estimatedLandingTime
18
+
19
+ log (`request departure time: ${binance.iso8601 (localStartTime)}`)
20
+ log (`response arrival time: ${binance.iso8601 (localFinishTime)}`)
21
+ log (`server time: ${binance.iso8601 (serverTime)}`)
22
+ log (`request landing time (est): ${binance.iso8601 (estimatedLandingTime)}, ${Math.abs (diff)} ms ${Math.sign (diff) > 0 ? 'behind' : 'ahead of'} server`)
23
+ log ('\n')
24
+
25
+ if (diff < -aheadWindow) {
26
+ log.error.red (`your request will likely be rejected if local time is ahead of the server's time for more than ${aheadWindow} ms \n`)
27
+ }
28
+
29
+ if (diff > recvWindow) {
30
+ log.error.red (`your request will likely be rejected if local time is behind server time for more than ${recvWindow} ms\n`)
31
+ }
32
+ }
33
+
34
+ test ();
@@ -0,0 +1,16 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ (async () => {
4
+
5
+ // apiKey must have universal transfer permissions
6
+ const binance = new ccxt.binance ({
7
+ "apiKey": "",
8
+ "secret": "",
9
+ })
10
+
11
+ console.log (await binance.transfer ('USDT', 1, 'spot', 'future'))
12
+ const transfers = await binance.fetchTransfers ();
13
+ console.log ('got ', transfers.length, ' transfers')
14
+ console.log (await binance.transfer ('USDT', 1, 'spot', 'cross')) // For transfer to cross margin wallet
15
+ console.log (await binance.transfer ('USDT', 1, 'spot', 'ADA/USDT')) // For transfer to an isolated margin wallet
16
+ }) ()
@@ -0,0 +1,35 @@
1
+
2
+
3
+ // ----------------------------------------------------------------------------
4
+
5
+ import ccxt from '../../js/ccxt.js';
6
+ import log from 'ololog';
7
+ import asTable from 'as-table';
8
+
9
+ // ----------------------------------------------------------------------------
10
+
11
+ const // ----------------------------------------------------------------------------
12
+ table = asTable.configure ({ delimiter: ' | ' });(async () => {
13
+
14
+ const exchange = new ccxt.bitfinex ({
15
+ 'verbose': process.argv.includes ('--verbose'),
16
+ 'timeout': 60000,
17
+ })
18
+
19
+ try {
20
+
21
+ const response = await exchange.fetchTrades ('ETH/BTC', 1518983548636 - 2 * 24 * 60 * 60 * 1000)
22
+ log (table (response))
23
+ log (response.length.toString (), 'trades')
24
+ log.green ('Succeeded.')
25
+
26
+ } catch (e) {
27
+
28
+ log.dim ('--------------------------------------------------------')
29
+ log (e.constructor.name, e.message)
30
+ log.dim ('--------------------------------------------------------')
31
+ log.dim (exchange.last_http_response)
32
+ log.error ('Failed.')
33
+ }
34
+
35
+ }) ()
@@ -0,0 +1,35 @@
1
+
2
+
3
+ // ----------------------------------------------------------------------------
4
+
5
+ import ccxt from '../../js/ccxt.js';
6
+ import asTable from 'as-table';
7
+ import log from 'ololog';
8
+
9
+ // ----------------------------------------------------------------------------
10
+
11
+ const // ----------------------------------------------------------------------------
12
+ table = asTable.configure ({ delimiter: ' | ' });(async () => {
13
+
14
+ const exchange = new ccxt.bitfinex2 ({
15
+ 'verbose': process.argv.includes ('--verbose'),
16
+ 'timeout': 60000,
17
+ })
18
+
19
+ try {
20
+
21
+ const response = await exchange.fetchTrades ('ETH/BTC', 1518983548636 - 2 * 24 * 60 * 60 * 1000)
22
+ log (table (response))
23
+ log (response.length.toString (), 'trades')
24
+ log.green ('Succeeded.')
25
+
26
+ } catch (e) {
27
+
28
+ log.dim ('--------------------------------------------------------')
29
+ log (e.constructor.name, e.message)
30
+ log.dim ('--------------------------------------------------------')
31
+ log.dim (exchange.last_http_response)
32
+ log.error ('Failed.')
33
+ }
34
+
35
+ }) ()
@@ -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
+ let 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,36 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ const bitpanda = new ccxt.bitpanda ({
4
+ "apiKey": "INSERTYOURAPIKEY"
5
+ })
6
+
7
+
8
+ // output
9
+ `
10
+ fetching USDT/EUR trades on bitpanda
11
+ ---------------------------------------------
12
+ maker volume 6621.81 USDT maker fee 5.62 USDT
13
+ taker volume 2544.82 USDT taker fee 3.27 USDT
14
+
15
+ sold 9166.63 USDT for 7802.38 EUR
16
+ bought 0.00 USDT for 0.00 EUR
17
+ `
18
+
19
+ ;(async () => {
20
+ const market = {
21
+ symbol: 'USDT/EUR',
22
+ base: 'USDT',
23
+ quote: 'EUR',
24
+ }
25
+ console.log ('fetching', market.symbol, 'trades on bitpanda')
26
+ console.log ('---------------------------------------------')
27
+ const trades = await bitpanda.fetchMyTrades ('USDT/EUR')
28
+ const makers = trades.filter (x => x.takerOrMaker === 'maker')
29
+ const takers = trades.filter (x => x.takerOrMaker === 'taker')
30
+ console.log ('maker volume', makers.reduce ((a, b) => a + b.amount, 0).toFixed (2), market.base, 'maker fee', makers.reduce ((a, b) => a + b.fee['cost'], 0).toFixed (2), market.base)
31
+ console.log ('taker volume', takers.reduce ((a, b) => a + b.amount, 0).toFixed (2), market.base, 'taker fee', takers.reduce ((a, b) => a + b.fee['cost'], 0).toFixed (2), market.base)
32
+ const sells = trades.filter (x => x.side === 'sell')
33
+ const buys = trades.filter (x => x.side === 'buy')
34
+ console.log ('\nsold', sells.reduce ((a, b) => a + b.amount, 0).toFixed (2), market.base, 'for', sells.reduce ((a, b) => a + b.cost, 0).toFixed (2), market.quote)
35
+ console.log ('bought', buys.reduce ((a, b) => a + b.amount, 0).toFixed (2), market.base, 'for', buys.reduce ((a, b) => a + b.cost, 0).toFixed (2), market.quote)
36
+ }) ()
@@ -0,0 +1,28 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+
5
+ async function main () {
6
+
7
+ console.log ('CCXT Version:', ccxt.version)
8
+
9
+ const exchange = new ccxt.bitrue ({
10
+ "apiKey": "YOUR_API_KEY",
11
+ "secret": "YOUR_SECRET",
12
+ })
13
+
14
+ await exchange.loadMarkets ()
15
+
16
+ exchange.verbose = true
17
+
18
+ try {
19
+
20
+ const balance = await exchange.fetchBalance ()
21
+ console.log (balance)
22
+
23
+ } catch (e) {
24
+ console.log (e.constructor.name, e.message);
25
+ }
26
+ }
27
+
28
+ main ()
@@ -0,0 +1,115 @@
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
+ ;(async () => {
13
+ let apiUrl = 'https://www.bitstamp.net/api';
14
+
15
+ // instantiate the exchange
16
+ let exchange = new ccxt.bitstamp({
17
+ 'apiKey': 'APIKEY',
18
+ 'secret': 'APISECRET',
19
+ 'uid': 'ACCOUNTID',
20
+ 'urls': {
21
+ 'api': {
22
+ 'public': apiUrl,
23
+ 'private': apiUrl,
24
+ 'v1': apiUrl
25
+ }
26
+ }
27
+ })
28
+
29
+ try {
30
+ // fetch account balance from the exchange
31
+ let balance = await exchange.fetchBalance()
32
+ log('balance'.green, balance.total)
33
+
34
+ // fetch fees
35
+ let singleFee = await exchange.fetchTradingFee('BTC/USD')
36
+ log('fee'.green, 'BTC/USD', singleFee)
37
+ let tradingFees = await exchange.fetchTradingFees()
38
+ log('tradingFees'.green, tradingFees)
39
+ let fundingFees = await exchange.fetchFundingFees()
40
+ log('fundingFees'.green, fundingFees)
41
+ let fees = await exchange.fetchFees()
42
+ log('fees'.green, fees)
43
+
44
+ // my trades
45
+ let myTrades = await exchange.fetchMyTrades('BTC/USD', undefined, 5)
46
+ log('myTrades'.green, asTable(myTrades))
47
+
48
+ // user transactions
49
+ let transactions = await exchange.fetchTransactions()
50
+ log('Transactions'.green, asTable(transactions))
51
+
52
+ // ledger
53
+ let ledger = await exchange.fetchLedger()
54
+ log('Ledger'.green, asTable(ledger))
55
+
56
+ // deposits
57
+ let deposits = await exchange.fetchDeposits()
58
+ log('Deposits'.green, asTable(deposits))
59
+
60
+ // create new limit order
61
+ let newOrder = await exchange.createOrder('BTC/USD', 'limit', 'buy', 0.01, 8000)
62
+ console.log('New limit order'.green, newOrder);
63
+
64
+ // open orders
65
+ let openOrders = await exchange.fetchOpenOrders()
66
+ log('Open orders'.green, asTable(openOrders))
67
+
68
+ // order data
69
+ let orderData = await exchange.fetchOrder(newOrder.id)
70
+ console.log('Order data'.green, orderData);
71
+
72
+ // cancel order
73
+ let canceledOrder = await exchange.cancelOrder(newOrder.id)
74
+ console.log('Canceled order'.green, canceledOrder);
75
+
76
+ // create market order
77
+ let marketOrder = await exchange.createOrder('BTC/USD', 'market', 'buy', 0.01)
78
+ console.log('New market order'.green, marketOrder);
79
+
80
+ // open orders
81
+ let secondOpenOrders = await exchange.fetchOpenOrders()
82
+ log('Open orders'.green, asTable(secondOpenOrders))
83
+
84
+ // deposit address
85
+ let paxDeposit = await exchange.fetchDepositAddress("XLM")
86
+ log('Pax deposit address'.green, paxDeposit)
87
+
88
+ // withdrawal
89
+ let ethWithdraw = await exchange.withdraw("ETH", 0.01, "0x6c28cb9dd2f4e3bb6f56c822bc306f3b8a3e7c08")
90
+ log('ETH withdrawal'.green, ethWithdraw)
91
+
92
+ // withdrawals
93
+ let withdrawals = await exchange.fetchWithdrawals()
94
+ log('Withdrawals'.green, asTable(withdrawals))
95
+
96
+ } catch (e) {
97
+
98
+ if (e instanceof ccxt.DDoSProtection || e.message.includes('ECONNRESET')) {
99
+ log.bright.yellow('[DDoS Protection] ' + e.message)
100
+ } else if (e instanceof ccxt.RequestTimeout) {
101
+ log.bright.yellow('[Request Timeout] ' + e.message)
102
+ } else if (e instanceof ccxt.AuthenticationError) {
103
+ log.bright.yellow('[Authentication Error] ' + e.message)
104
+ } else if (e instanceof ccxt.ExchangeNotAvailable) {
105
+ log.bright.yellow('[Exchange Not Available Error] ' + e.message)
106
+ } else if (e instanceof ccxt.ExchangeError) {
107
+ log.bright.yellow('[Exchange Error] ' + e.message)
108
+ } else if (e instanceof ccxt.NetworkError) {
109
+ log.bright.yellow('[Network Error] ' + e.message)
110
+ } else {
111
+ throw e;
112
+ }
113
+ }
114
+
115
+ })()