ccxt 4.2.73 → 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 (267) hide show
  1. package/README.md +5 -5
  2. package/build.sh +1 -1
  3. package/dist/ccxt.browser.js +181 -100
  4. package/dist/ccxt.browser.min.js +2 -2
  5. package/dist/cjs/ccxt.js +1 -1
  6. package/dist/cjs/src/base/Exchange.js +1 -1
  7. package/dist/cjs/src/bitget.js +62 -50
  8. package/dist/cjs/src/bybit.js +90 -30
  9. package/dist/cjs/src/coinbaseinternational.js +1 -1
  10. package/dist/cjs/src/htx.js +16 -9
  11. package/dist/cjs/src/hyperliquid.js +2 -1
  12. package/dist/cjs/src/pro/krakenfutures.js +8 -7
  13. package/examples/README.md +308 -0
  14. package/examples/ccxt.pro/html/watchTicker.html +51 -0
  15. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +55 -0
  16. package/examples/ccxt.pro/js/binance-https-proxy.js +48 -0
  17. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +38 -0
  18. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +64 -0
  19. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +62 -0
  20. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +68 -0
  21. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +82 -0
  22. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +59 -0
  23. package/examples/ccxt.pro/js/exchange-capabitities.js +72 -0
  24. package/examples/ccxt.pro/js/exchange-close.js +46 -0
  25. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +30 -0
  26. package/examples/ccxt.pro/js/gateio-watch-balance.js +23 -0
  27. package/examples/ccxt.pro/js/gateio-watch-order-book.js +71 -0
  28. package/examples/ccxt.pro/js/graceful-shutdown.js +43 -0
  29. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +37 -0
  30. package/examples/ccxt.pro/js/okex-create-futures-order.js +48 -0
  31. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +54 -0
  32. package/examples/ccxt.pro/js/okx-watch-tickers.js +31 -0
  33. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +46 -0
  34. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +26 -0
  35. package/examples/ccxt.pro/js/one-exchange-many-streams.js +28 -0
  36. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +30 -0
  37. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +40 -0
  38. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +38 -0
  39. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +40 -0
  40. package/examples/ccxt.pro/js/watch-many-orderbooks.js +27 -0
  41. package/examples/ccxt.pro/js/watch-new-trades-only.js +43 -0
  42. package/examples/ccxt.pro/js/watch-new-trades.js +42 -0
  43. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +29 -0
  44. package/examples/ccxt.pro/js/watch-vs-fetch.js +29 -0
  45. package/examples/cs/Examples.sln +22 -0
  46. package/examples/cs/c#.csproj +19 -0
  47. package/examples/html/basic-cors-proxy.html +46 -0
  48. package/examples/html/basic-inheritance.html +47 -0
  49. package/examples/html/basic-poller.html +52 -0
  50. package/examples/html/basic-rate-limiting.html +49 -0
  51. package/examples/html/basic.html +43 -0
  52. package/examples/html/binance-cors-proxy.html +28 -0
  53. package/examples/html/bitmex-browser-cors-proxy.js +7 -0
  54. package/examples/html/bitmex-cors.html +46 -0
  55. package/examples/html/tradingview-charts.html +61 -0
  56. package/examples/html/webworker/index.html +97 -0
  57. package/examples/html/webworker/worker.js +43 -0
  58. package/examples/js/README.md +15 -0
  59. package/examples/js/advanced-error-handling.js +39 -0
  60. package/examples/js/aggregate-orderbook.js +54 -0
  61. package/examples/js/arbitrage-pairs.js +130 -0
  62. package/examples/js/basic-chart.js +29 -0
  63. package/examples/js/basic-orderbook-polling.js +13 -0
  64. package/examples/js/bcc-vs-bch.js +115 -0
  65. package/examples/js/binance-fetch-all-deposits.js +45 -0
  66. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +34 -0
  67. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +33 -0
  68. package/examples/js/binance-fetchTicker-delivery-vs-future.js +31 -0
  69. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +41 -0
  70. package/examples/js/binance-margin-stop-order.js +39 -0
  71. package/examples/js/binance-server-time.js +34 -0
  72. package/examples/js/binance-universal-transfer.js +16 -0
  73. package/examples/js/bitfinex-fetch-trades.js +35 -0
  74. package/examples/js/bitfinex2-fetch-trades.js +35 -0
  75. package/examples/js/bitmex-browser-cors-proxy.js +7 -0
  76. package/examples/js/bitpanda-fetchMyTrades-reduce.js +36 -0
  77. package/examples/js/bitrue-fetch-balance.js +28 -0
  78. package/examples/js/bitstamp-private-api.js +115 -0
  79. package/examples/js/bitstamp-public-api.js +39 -0
  80. package/examples/js/bittrex-balance.js +50 -0
  81. package/examples/js/bittrex-fetch-closed-orders-history.js +69 -0
  82. package/examples/js/blockchaincom-withdrawal.js +59 -0
  83. package/examples/js/build-ohlcv-bars.js +48 -0
  84. package/examples/js/builtin-rate-limiting-rest-poller.js +25 -0
  85. package/examples/js/bybit-trailing.js +62 -0
  86. package/examples/js/bybit-updated.cjs +154 -0
  87. package/examples/js/cli.js +405 -0
  88. package/examples/js/coinbase-fetch-all-balances.js +36 -0
  89. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +47 -0
  90. package/examples/js/coinex-futures.js +75 -0
  91. package/examples/js/coinone-fetch-tickers.js +54 -0
  92. package/examples/js/coinone-markets.js +16 -0
  93. package/examples/js/compare-two-exchanges-capabilities.js +36 -0
  94. package/examples/js/cors-proxy.js +5 -0
  95. package/examples/js/create-order-handle-errors.js +55 -0
  96. package/examples/js/create-order-position-with-takeprofit-stoploss.js +71 -0
  97. package/examples/js/create-order-with-retry.js +65 -0
  98. package/examples/js/create-order-ws-example.js +25 -0
  99. package/examples/js/create-orders-example.js +17 -0
  100. package/examples/js/create-trailing-amount-order.js +36 -0
  101. package/examples/js/create-trailing-percent-order.js +36 -0
  102. package/examples/js/credentials.json +5 -0
  103. package/examples/js/custom-proxy-agent-for-js.js +10 -0
  104. package/examples/js/custom-proxy-url.js +23 -0
  105. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +60 -0
  106. package/examples/js/env-variables.js +26 -0
  107. package/examples/js/error-handling.js +89 -0
  108. package/examples/js/exchange-capabilities.js +135 -0
  109. package/examples/js/exchanges-by-volume.js +60 -0
  110. package/examples/js/exchanges.js +40 -0
  111. package/examples/js/fetch-all-balances.js +219 -0
  112. package/examples/js/fetch-all-tickers-to-files-2.js +53 -0
  113. package/examples/js/fetch-all-tickers-to-files.js +77 -0
  114. package/examples/js/fetch-balance.js +28 -0
  115. package/examples/js/fetch-create-deposit-address.js +101 -0
  116. package/examples/js/fetch-from-many-exchanges-simultaneously.js +21 -0
  117. package/examples/js/fetch-funding-rate-history.js +25 -0
  118. package/examples/js/fetch-futures/prettier.config.js +5 -0
  119. package/examples/js/fetch-futures/src/index.js +25 -0
  120. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +72 -0
  121. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +39 -0
  122. package/examples/js/fetch-ohlcv.js +16 -0
  123. package/examples/js/fetch-okex-futures.js +22 -0
  124. package/examples/js/fetch-orders.js +27 -0
  125. package/examples/js/fetch-ticker-from-multiple-exchanges.js +35 -0
  126. package/examples/js/fetch-ticker-where-available.js +75 -0
  127. package/examples/js/fetch-tickers/build/index.js +19 -0
  128. package/examples/js/fetch-tickers/prettier.config.js +5 -0
  129. package/examples/js/fetch-tickers/src/index.js +17 -0
  130. package/examples/js/gateio-create-batch-order.js +43 -0
  131. package/examples/js/gateio-futures.js +49 -0
  132. package/examples/js/gateio-open-close-contract.js +49 -0
  133. package/examples/js/gateio-swaps.js +74 -0
  134. package/examples/js/gdax-fetch-trades-pagination.js +29 -0
  135. package/examples/js/hitbtc2-withdraw.js +61 -0
  136. package/examples/js/how-to-import-one-exchange-esm.js +10 -0
  137. package/examples/js/huobi-futures.js +71 -0
  138. package/examples/js/huobi-open-close-contract.js +63 -0
  139. package/examples/js/huobi-swaps.js +70 -0
  140. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +98 -0
  141. package/examples/js/hybridCJSExample.cjs +19 -0
  142. package/examples/js/hybridESMExample.js +19 -0
  143. package/examples/js/idex-fetch-balance.js +13 -0
  144. package/examples/js/instantiate-all-at-once.js +46 -0
  145. package/examples/js/instantiate-all-from-json.js +31 -0
  146. package/examples/js/kraken-create-and-close-position.js +54 -0
  147. package/examples/js/kraken-fetch-order-trades.js +33 -0
  148. package/examples/js/kraken-margin-trading.js +89 -0
  149. package/examples/js/kucoin-rate-limit.js +38 -0
  150. package/examples/js/latoken-example.js +108 -0
  151. package/examples/js/live-orderbook.js +106 -0
  152. package/examples/js/live-ticker.js +80 -0
  153. package/examples/js/live-tickers.js +74 -0
  154. package/examples/js/load-all-contracts.js +41 -0
  155. package/examples/js/load-all-symbols-at-once.js +69 -0
  156. package/examples/js/load-all-tickers-at-once.js +91 -0
  157. package/examples/js/load-markets-to-files.js +57 -0
  158. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +61 -0
  159. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +91 -0
  160. package/examples/js/margin-loan-borrow-buy-sell-repay.js +70 -0
  161. package/examples/js/market-status-and-currency-status.js +29 -0
  162. package/examples/js/ohlcv-console-chart.js +29 -0
  163. package/examples/js/okex-fetch-closed-orders-archive.js +31 -0
  164. package/examples/js/okex-transfer.js +51 -0
  165. package/examples/js/okx-poll-fetch-my-trades.js +37 -0
  166. package/examples/js/okx-poll-rate-limit.js +48 -0
  167. package/examples/js/order-book-extra-level-depth-param.js +20 -0
  168. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +49 -0
  169. package/examples/js/poll-ohlcv.js +43 -0
  170. package/examples/js/poloniex-fetch-order-books.js +35 -0
  171. package/examples/js/poloniex-limits-amount-min.js +62 -0
  172. package/examples/js/proxy-round-robin.js +98 -0
  173. package/examples/js/proxy-usage.js +32 -0
  174. package/examples/js/sample-local-proxy-server-with-cors.js +12 -0
  175. package/examples/js/search-all-exchanges.js +159 -0
  176. package/examples/js/shared-load-markets.js +80 -0
  177. package/examples/js/sort-swap-markets-by-hourly-price-change.js +55 -0
  178. package/examples/js/symbols.js +110 -0
  179. package/examples/js/theocean.js +41 -0
  180. package/examples/js/tickers.js +106 -0
  181. package/examples/js/validate-paginated-data.js +61 -0
  182. package/examples/js/watch-OHLCV-For-Symbols.js +15 -0
  183. package/examples/js/watch-OHLCV.js +12 -0
  184. package/examples/js/watch-OrderBook-For-Symbols.js +11 -0
  185. package/examples/js/watch-Trades-For-Symbols.js +11 -0
  186. package/examples/js/watch-tickers.js +11 -0
  187. package/examples/js/watchOHLCVForSymbols.js +15 -0
  188. package/examples/js/watchOrderBookForSymbols.js +11 -0
  189. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +2 -0
  190. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +1 -0
  191. package/examples/js/watchPositions-many-exchanges-continuosly.js +49 -0
  192. package/examples/js/watchPositions.d.ts +2 -0
  193. package/examples/js/watchPositions.d.ts.map +1 -0
  194. package/examples/js/watchPositions.js +13 -0
  195. package/examples/js/watchPositionsForSymbols.d.ts +2 -0
  196. package/examples/js/watchPositionsForSymbols.d.ts.map +1 -0
  197. package/examples/js/watchPositionsForSymbols.js +14 -0
  198. package/examples/js/watchTradesForSymbols.js +11 -0
  199. package/examples/js/withdraw-from-one-exchange-to-another.js +50 -0
  200. package/examples/php/README.md +7 -0
  201. package/examples/py/README.md +15 -0
  202. package/examples/py/playing_with_ccxt_example.ipynb +222 -0
  203. package/examples/ts/.eslintrc +111 -0
  204. package/examples/ts/build-ohlcv-bars.ts +53 -0
  205. package/examples/ts/cli.ts +397 -0
  206. package/examples/ts/compare-two-exchanges-capabilities.ts +36 -0
  207. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +89 -0
  208. package/examples/ts/create-order-ws-example.ts +33 -0
  209. package/examples/ts/create-orders-example.ts +21 -0
  210. package/examples/ts/create-trailing-amount-order.ts +37 -0
  211. package/examples/ts/create-trailing-percent-order.ts +37 -0
  212. package/examples/ts/custom-proxy-agent-for-js.ts +14 -0
  213. package/examples/ts/fetch-futures/package-lock.json +116 -0
  214. package/examples/ts/fetch-futures/package.json +34 -0
  215. package/examples/ts/fetch-futures/prettier.config.js +4 -0
  216. package/examples/ts/fetch-futures/src/index.ts +28 -0
  217. package/examples/ts/fetch-futures/tsconfig.json +28 -0
  218. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +44 -0
  219. package/examples/ts/fetch-ohlcv.ts +17 -0
  220. package/examples/ts/fetch-tickers/package-lock.json +116 -0
  221. package/examples/ts/fetch-tickers/package.json +34 -0
  222. package/examples/ts/fetch-tickers/prettier.config.js +4 -0
  223. package/examples/ts/fetch-tickers/src/index.ts +21 -0
  224. package/examples/ts/fetch-tickers/tsconfig.json +28 -0
  225. package/examples/ts/how-to-import-one-exchange-esm.ts +11 -0
  226. package/examples/ts/kraken-create-and-close-position.ts +69 -0
  227. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +72 -0
  228. package/examples/ts/nextjs-page-router/.eslintrc.json +3 -0
  229. package/examples/ts/nextjs-page-router/README.md +43 -0
  230. package/examples/ts/nextjs-page-router/next.config.js +6 -0
  231. package/examples/ts/nextjs-page-router/package-lock.json +7425 -0
  232. package/examples/ts/nextjs-page-router/package.json +28 -0
  233. package/examples/ts/nextjs-page-router/postcss.config.js +6 -0
  234. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  235. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +6 -0
  236. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +13 -0
  237. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +46 -0
  238. package/examples/ts/nextjs-page-router/src/pages/index.tsx +8 -0
  239. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +61 -0
  240. package/examples/ts/nextjs-page-router/src/styles/globals.css +27 -0
  241. package/examples/ts/nextjs-page-router/tailwind.config.ts +20 -0
  242. package/examples/ts/nextjs-page-router/tsconfig.json +22 -0
  243. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +62 -0
  244. package/examples/ts/proxy-usage.ts +41 -0
  245. package/examples/ts/sample-local-proxy-server-with-cors.ts +15 -0
  246. package/examples/ts/watch-OHLCV-For-Symbols.ts +17 -0
  247. package/examples/ts/watch-OHLCV.ts +14 -0
  248. package/examples/ts/watch-OrderBook-For-Symbols.ts +13 -0
  249. package/examples/ts/watch-Trades-For-Symbols.ts +13 -0
  250. package/examples/ts/watch-tickers.ts +13 -0
  251. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +53 -0
  252. package/examples/ts/watchPositions.ts +15 -0
  253. package/examples/ts/watchPositionsForSymbols.ts +16 -0
  254. package/examples/tsconfig.json +27 -0
  255. package/js/ccxt.d.ts +1 -1
  256. package/js/ccxt.js +1 -1
  257. package/js/src/base/Exchange.d.ts +2 -2
  258. package/js/src/base/Exchange.js +1 -1
  259. package/js/src/bitget.js +62 -50
  260. package/js/src/bybit.d.ts +3 -1
  261. package/js/src/bybit.js +90 -30
  262. package/js/src/coinbaseinternational.js +1 -1
  263. package/js/src/htx.js +16 -9
  264. package/js/src/hyperliquid.js +2 -1
  265. package/js/src/pro/krakenfutures.js +8 -7
  266. package/package.json +4 -1
  267. package/skip-tests.json +214 -424
@@ -0,0 +1,46 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('ccxt')
4
+
5
+ console.log ('CCXT Version:', ccxt.version)
6
+
7
+ async function watchOrders(exchange) {
8
+ while (true) {
9
+ try {
10
+ const orders = await exchange.watchOrders() // await here
11
+ console.log(orders)
12
+ } catch (e) {
13
+ console.log(e)
14
+ }
15
+ }
16
+ }
17
+
18
+ async function watchBalance(exchange) {
19
+ while (true) {
20
+ try {
21
+ const balance = await exchange.watchBalance() // await here
22
+ console.log(balance)
23
+ } catch (e) {
24
+ console.log(e)
25
+ }
26
+ }
27
+ }
28
+
29
+ async function main() {
30
+ const exchange = new ccxt.pro.binance({
31
+ 'apiKey': 'YOUR_API_KEY',
32
+ 'secret': 'YOUR_SECRET',
33
+ 'password': 'IF NECESSARY',
34
+ // etc...
35
+ })
36
+ await exchange.loadMarkets () // await here
37
+
38
+ // exchange.verbose = true // uncomment for debugging purposes if necessary
39
+
40
+ watchOrders(exchange) // no await
41
+ watchBalance(exchange) // no await
42
+
43
+ await exchange.close()
44
+ }
45
+
46
+ main()
@@ -0,0 +1,26 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('ccxt');
4
+
5
+ (async () => {
6
+
7
+ const exchange = new ccxt.pro.binance ({ enableRateLimit: true })
8
+ const symbols = [ 'BTC/USDT', 'ETH/BTC', 'ETH/USDT' ]
9
+
10
+ const loop = async (symbol) => {
11
+ while (true) {
12
+ try {
13
+ const orderbook = await exchange.watchOrderBook (symbol)
14
+ console.log (new Date (), symbol, orderbook['asks'][0], orderbook['bids'][0])
15
+ } catch (e) {
16
+ console.log (symbol, e)
17
+ // do nothing and retry on next loop iteration
18
+ // throw e // uncomment to break all loops in case of an error in any one of them
19
+ // break // you can also break just this one loop if it fails
20
+ }
21
+ }
22
+ }
23
+
24
+ await Promise.all (symbols.map (symbol => loop (symbol)))
25
+
26
+ }) ()
@@ -0,0 +1,28 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('ccxt');
4
+
5
+ (async () => {
6
+
7
+ const exchange = new ccxt.pro.binance ({ enableRateLimit: true })
8
+ const symbols = [ 'BTC/USDT', 'ETH/BTC', 'ETH/USDT' ]
9
+
10
+ await Promise.all (symbols.map (symbol =>
11
+
12
+ (async () => {
13
+
14
+ while (true) {
15
+ try {
16
+ const orderbook = await exchange.watchOrderBook (symbol)
17
+ console.log (new Date (), symbol, orderbook['asks'][0], orderbook['bids'][0])
18
+ } catch (e) {
19
+ console.log (symbol, e)
20
+ // do nothing and retry on next loop iteration
21
+ // throw e // uncomment to break all loops in case of an error in any one of them
22
+ // break // you can also break just this one loop if it fails
23
+ }
24
+ }
25
+
26
+ }) ())
27
+ )
28
+ }) ()
@@ -0,0 +1,30 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('ccxt')
4
+ , SocksProxyAgent = require ('socks-proxy-agent')
5
+ , socks = 'socks://127.0.0.1:7000'
6
+ , socksAgent = new SocksProxyAgent (socks)
7
+ , exchange = new ccxt.binance ({
8
+ enableRatLimit: true,
9
+ httpsAgent: socksAgent, // ←--------------------- socksAgent here
10
+ options: {
11
+ 'ws': {
12
+ 'options': { agent: socksAgent }, // ←--- socksAgent here
13
+ },
14
+ },
15
+ })
16
+
17
+ ;(async () => {
18
+ console.log (socks)
19
+ const symbol = 'BTC/USDT'
20
+ await exchange.loadMarkets ()
21
+ console.log ('Markets loaded')
22
+ while (true) {
23
+ try {
24
+ const orderbook = await exchange.watchOrderBook (symbol)
25
+ console.log (exchange.iso8601 (exchange.milliseconds()), symbol, orderbook['asks'][0], orderbook['bids'][0])
26
+ } catch (e) {
27
+ console.log (e.constructor.name, e.message)
28
+ }
29
+ }
30
+ }) ()
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('../../../ccxt');
4
+
5
+ async function watchOrderBook (exchange, symbol) {
6
+ while (true) {
7
+ try {
8
+ const method = exchange.has.watchOrderBook ? 'watchOrderBook' : 'fetchOrderBook'
9
+ const orderbook = await exchange[method](symbol)
10
+ console.log (new Date (), exchange.id, symbol, orderbook['asks'][0], orderbook['bids'][0])
11
+ } catch (e) {
12
+ console.log (symbol, e)
13
+ process.exit ()
14
+ }
15
+ }
16
+ }
17
+
18
+ async function watchExchange (exchangeId, symbols) {
19
+ const exchange = new ccxt.pro[exchangeId] ()
20
+ await exchange.loadMarkets ()
21
+ await Promise.all (symbols.map (symbol => watchOrderBook (exchange, symbol)))
22
+ }
23
+
24
+ async function main () {
25
+ const streams = {
26
+ 'ftx': [
27
+ 'BTC/USDT',
28
+ 'ETH/BTC',
29
+ ],
30
+ 'coinex': [
31
+ 'BTC/USDT',
32
+ 'ETH/BTC',
33
+ ],
34
+ };
35
+
36
+ const entries = Object.entries (streams)
37
+ await Promise.all (entries.map (([ exchangeId, symbols ]) => watchExchange (exchangeId, symbols)))
38
+ }
39
+
40
+ main()
@@ -0,0 +1,38 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('../../../ccxt');
4
+
5
+ async function watchOrderBook (exchange, symbol) {
6
+ while (true) {
7
+ try {
8
+ const orderbook = await exchange.watchOrderBook (symbol)
9
+ console.log (new Date (), exchange.id, symbol, orderbook['asks'][0], orderbook['bids'][0])
10
+ } catch (e) {
11
+ console.log (symbol, e)
12
+ }
13
+ }
14
+ }
15
+
16
+ async function watchExchange (exchangeId, symbols) {
17
+ const exchange = new ccxt.pro[exchangeId] ()
18
+ await exchange.loadMarkets ()
19
+ await Promise.all (symbols.map (symbol => watchOrderBook (exchange, symbol)))
20
+ }
21
+
22
+ async function main () {
23
+ const streams = {
24
+ 'binance': [
25
+ 'BTC/USDT',
26
+ 'ETH/BTC',
27
+ ],
28
+ 'ftx': [
29
+ 'BTC/USDT',
30
+ 'ETH/BTC',
31
+ ],
32
+ };
33
+
34
+ const entries = Object.entries (streams)
35
+ await Promise.all (entries.map (([ exchangeId, symbols ]) => watchExchange (exchangeId, symbols)))
36
+ }
37
+
38
+ main()
@@ -0,0 +1,40 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('../../../ccxt');
4
+
5
+ console.log ('CCXT Version:', ccxt.version)
6
+
7
+
8
+ async function watchTickerLoop (exchange, symbol) {
9
+ // exchange.verbose = true // uncomment for debugging purposes if necessary
10
+ while (true) {
11
+ try {
12
+ const ticker = await exchange.watchTicker (symbol)
13
+ console.log (new Date (), exchange.id, symbol, ticker['last'])
14
+ } catch (e) {
15
+ console.log (symbol, e)
16
+ // do nothing and retry on next loop iteration
17
+ // throw e // uncomment to break all loops in case of an error in any one of them
18
+ // break // you can also break just this one loop if it fails
19
+ }
20
+ }
21
+ }
22
+
23
+ async function exchangeLoop (exchangeId, symbols) {
24
+ const exchange = new ccxt.pro[exchangeId]()
25
+ await exchange.loadMarkets ()
26
+ const loops = symbols.map (symbol => watchTickerLoop (exchange, symbol))
27
+ await Promise.all (loops)
28
+ await exchange.close ()
29
+ }
30
+
31
+ async function main () {
32
+ const exchanges = {
33
+ 'binance': [ 'BTC/USDT', 'ETH/USDT' ],
34
+ 'ftx': [ 'BTC/USD', 'ETH/USD' ],
35
+ }
36
+ const loops = Object.entries (exchanges).map (([ exchangeId, symbols ]) => exchangeLoop (exchangeId, symbols))
37
+ await Promise.all (loops)
38
+ }
39
+
40
+ main ()
@@ -0,0 +1,27 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('ccxt');
4
+
5
+ async function watchOrderBook (exchangeId, symbol) {
6
+
7
+ const exchange = new ccxt.pro[exchangeId] ()
8
+ while (true) {
9
+ try {
10
+ const orderbook = await exchange.watchOrderBook (symbol)
11
+ console.log (new Date (), exchange.id, symbol, orderbook['asks'][0], orderbook['bids'][0])
12
+ } catch (e) {
13
+ console.log (symbol, e)
14
+ }
15
+ }
16
+ }
17
+
18
+ async function main () {
19
+ const streams = {
20
+ 'binance': 'BTC/USDT',
21
+ 'ftx': 'BTC/USDT',
22
+ };
23
+
24
+ await Promise.all (Object.entries (streams).map (([ exchangeId, symbol ]) => watchOrderBook (exchangeId, symbol)))
25
+ }
26
+
27
+ main()
@@ -0,0 +1,43 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('../../../ccxt');
4
+
5
+ console.log ('CCXT Version:', ccxt.version);
6
+
7
+ async function watchExchange (exchangeId, symbol) {
8
+
9
+ const exchange = new ccxt.pro[exchangeId] ({
10
+ newUpdates: true,
11
+ })
12
+
13
+ await exchange.loadMarkets ();
14
+
15
+ // exchange.verbose = true // uncomment for debugging purposes if necessary
16
+
17
+ while (true) {
18
+ try {
19
+ const trades = await exchange.watchTrades (symbol)
20
+ for (let i = 0; i < trades.length; i++) {
21
+ const trade = trades[i]
22
+ console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, trade['symbol'], trade['id'], trade['datetime'], trade['price'], trade['amount'])
23
+ }
24
+ } catch (e) {
25
+ console.log (symbol, e)
26
+ }
27
+ }
28
+ }
29
+
30
+ async function main () {
31
+
32
+ const streams = {
33
+ 'binance': 'BTC/USDT',
34
+ 'okex': 'BTC/USDT',
35
+ 'kraken': 'BTC/USD',
36
+ };
37
+
38
+ const values = Object.entries (streams)
39
+ const promises = values.map (([ exchangeId, symbol ]) => watchExchange (exchangeId, symbol))
40
+ await Promise.all (promises)
41
+ }
42
+
43
+ main ()
@@ -0,0 +1,42 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('../../../ccxt');
4
+
5
+ (async () => {
6
+
7
+ const streams = {
8
+ 'binance': 'BTC/USDT',
9
+ 'okex': 'BTC/USDT'
10
+ };
11
+
12
+ await Promise.all (Object.keys (streams).map (exchangeId =>
13
+
14
+ (async () => {
15
+
16
+ const exchange = new ccxt.pro[exchangeId] ({
17
+ enableRateLimit: true,
18
+ options: {
19
+ tradesLimit: 100, // lower = better, 1000 by default
20
+ },
21
+ })
22
+ const symbol = streams[exchangeId]
23
+ let lastId = ''
24
+ while (true) {
25
+ console.log ('---')
26
+ try {
27
+ const trades = await exchange.watchTrades (symbol)
28
+ for (let i = 0; i < trades.length; i++) {
29
+ const trade = trades[i]
30
+ if (trade['id'] > lastId) {
31
+ console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, trade['symbol'], trade['id'], trade['datetime'], trade['price'], trade['amount'])
32
+ lastId = trade['id']
33
+ }
34
+ }
35
+ } catch (e) {
36
+ console.log (symbol, e)
37
+ }
38
+ }
39
+
40
+ }) ())
41
+ )
42
+ }) ()
@@ -0,0 +1,29 @@
1
+ 'use strict';
2
+
3
+ const ccxt = require ('ccxt');
4
+
5
+ console.log ('CCXT Version:', ccxt.version)
6
+
7
+ async function watchTrades (exchange, symbol) {
8
+
9
+ while (true) {
10
+ try {
11
+ const trades = await exchange.watchTrades (symbol)
12
+ console.log (new Date (), exchange.id, symbol, trades.length, 'trades')
13
+ } catch (e) {
14
+ console.log (symbol, e)
15
+ }
16
+ }
17
+ }
18
+
19
+ async function main () {
20
+ const symbols = [ 'USDT/THB', 'BTC/THB', 'ETH/THB' ]
21
+ const exchange = new ccxt.pro.zipmex({
22
+ 'newUpdates': true
23
+ })
24
+ const markets = await exchange.loadMarkets ()
25
+ exchange.verbose = true
26
+ await Promise.all (symbols.map ((symbol) => watchTrades (exchange, symbol)))
27
+ }
28
+
29
+ main()
@@ -0,0 +1,29 @@
1
+ // see this issue for details
2
+ // https://github.com/ccxt/ccxt/issues/6659
3
+
4
+ const ccxt = require ('ccxt')
5
+
6
+ const exchange = new ccxt.pro.kraken ()
7
+
8
+ function yellow (s) {
9
+ return '\x1b[33m' + s + '\x1b[0m'
10
+ }
11
+
12
+ async function runWs () {
13
+ while (1) {
14
+ const book = await exchange.watchOrderBook ('ETH/BTC')
15
+ console.log (new Date (), 'WS ', book['datetime'], book['bids'][0][0], book['asks'][0][0])
16
+ }
17
+ }
18
+
19
+ async function runRest () {
20
+ while (1) {
21
+ const book = await exchange.fetchOrderBook ('ETH/BTC')
22
+ const timestamp = new Date (exchange.last_response_headers['Date']).getTime ()
23
+ const datetime = exchange.iso8601 (timestamp)
24
+ console.log (new Date (), 'REST', yellow (datetime), book['bids'][0][0], book['asks'][0][0])
25
+ }
26
+ }
27
+
28
+ runWs ()
29
+ runRest ()
@@ -0,0 +1,22 @@
1
+ 
2
+ Microsoft Visual Studio Solution File, Format Version 12.00
3
+ # Visual Studio Version 17
4
+ VisualStudioVersion = 17.0.31903.59
5
+ MinimumVisualStudioVersion = 10.0.40219.1
6
+ Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "c#", "c#.csproj", "{7251951E-12D3-48C3-9CE2-C06F23F0DCD9}"
7
+ EndProject
8
+ Global
9
+ GlobalSection(SolutionConfigurationPlatforms) = preSolution
10
+ Debug|Any CPU = Debug|Any CPU
11
+ Release|Any CPU = Release|Any CPU
12
+ EndGlobalSection
13
+ GlobalSection(SolutionProperties) = preSolution
14
+ HideSolutionNode = FALSE
15
+ EndGlobalSection
16
+ GlobalSection(ProjectConfigurationPlatforms) = postSolution
17
+ {7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
18
+ {7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
19
+ {7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
20
+ {7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Release|Any CPU.Build.0 = Release|Any CPU
21
+ EndGlobalSection
22
+ EndGlobal
@@ -0,0 +1,19 @@
1
+ <Project Sdk="Microsoft.NET.Sdk">
2
+
3
+ <ItemGroup>
4
+ <PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
5
+ </ItemGroup>
6
+
7
+ <ItemGroup>
8
+ <ProjectReference Include="..\..\cs\ccxt\ccxt.csproj" />
9
+ </ItemGroup>
10
+
11
+ <PropertyGroup>
12
+ <OutputType>Exe</OutputType>
13
+ <TargetFramework>net7.0</TargetFramework>
14
+ <RootNamespace>examples</RootNamespace>
15
+ <ImplicitUsings>enable</ImplicitUsings>
16
+ <Nullable>enable</Nullable>
17
+ </PropertyGroup>
18
+
19
+ </Project>
@@ -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.bittrex ({
13
+ 'proxyUrl': 'https://cors-anywhere.herokuapp.com/'
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,47 @@
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
+ <style type="text/css">
7
+ #contentA { background-color: #ccccff; }
8
+ #contentB { background-color: #ffcccc; }
9
+ </style>
10
+ <script>'use strict'
11
+
12
+ class MyExchange extends ccxt.coinbasepro {
13
+
14
+ async fetchTicker (symbol, params = {}) {
15
+ alert ("I'm about to call the parent method from the overrided class, woohooo!")
16
+ // just call the parent method and that's it
17
+ return super.fetchTicker (symbol, params);
18
+ }
19
+ }
20
+
21
+ document.addEventListener ("DOMContentLoaded", function () {
22
+
23
+ const exchange = new MyExchange ()
24
+
25
+ const symbol = 'ETH/BTC'
26
+
27
+ const showFetchedTicker = function (ticker, elementId) {
28
+
29
+ const text = [
30
+ exchange.id,
31
+ symbol,
32
+ JSON.stringify (ticker, undefined, '\n\t')
33
+ ]
34
+
35
+ document.getElementById (elementId).innerHTML = text.join (' ')
36
+
37
+ }
38
+
39
+ exchange.fetchTicker (symbol).then (ticker => showFetchedTicker (ticker, 'content'))
40
+ })
41
+ </script>
42
+ </head>
43
+ <body>
44
+ <h1>Hello, CCXT!</h1>
45
+ <pre id="content"></pre>
46
+ </body>
47
+ </html>
@@ -0,0 +1,52 @@
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 + ' supporting ');
11
+
12
+ const pollTickerContinuously = async function (exchange, symbol) {
13
+
14
+ while (true) {
15
+
16
+ try {
17
+
18
+ const ticker = await exchange.fetchTicker (symbol)
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
+
41
+ const exchange = new ccxt.binance ({ enableRateLimit: true })
42
+ const symbol = 'ETH/BTC'
43
+
44
+ pollTickerContinuously (exchange, symbol)
45
+ })
46
+ </script>
47
+ </head>
48
+ <body>
49
+ <h1>Hello, CCXT!</h1>
50
+ <pre id="content"></pre>
51
+ </body>
52
+ </html>
@@ -0,0 +1,49 @@
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", async function () {
9
+
10
+ alert ('ccxt version ' + ccxt.version);
11
+
12
+ const enableRateLimit = true
13
+ const exchange = new ccxt.poloniex ({ enableRateLimit })
14
+ const symbol = 'ETH/BTC'
15
+
16
+ while (true) {
17
+
18
+ let text = []
19
+
20
+ try {
21
+
22
+ const ticker = await exchange.fetchTicker (symbol)
23
+
24
+ text = [
25
+ exchange.id,
26
+ symbol,
27
+ JSON.stringify (exchange.omit (ticker, 'info'), undefined, '\t')
28
+ ]
29
+
30
+ } catch (e) {
31
+
32
+ text = [
33
+ e.constructor.name,
34
+ e.message,
35
+ ]
36
+ }
37
+
38
+ document.getElementById ('content').innerHTML = text.join (' ')
39
+
40
+ }
41
+
42
+ })
43
+ </script>
44
+ </head>
45
+ <body>
46
+ <h1>Hello, CCXT!</h1>
47
+ <pre id="content"></pre>
48
+ </body>
49
+ </html>