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,71 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ const exchange = new ccxt.huobi ({
4
+ 'apiKey': 'YOUR_API_KEY',
5
+ 'secret': 'YOUR_SECRET',
6
+ 'options': {
7
+ 'defaultType': 'future',
8
+ },
9
+ })
10
+
11
+ ;(async () => {
12
+ const markets = await exchange.loadMarkets ()
13
+
14
+ // exchange.verbose = true // uncomment for debugging purposes if necessary
15
+
16
+ // creating and canceling a linear future (limit) order
17
+ let symbol = 'ETH/USDT:USDT-220121' // the last segment is the date of expiration (can be next week, next quarter, ...) adjust it accordingly
18
+ let type = 'limit'
19
+ let side = 'buy'
20
+ let offset= 'open'
21
+ let leverage = 1
22
+ let amount = 1
23
+ let price = 1
24
+ let params = {
25
+ 'offset': offset,
26
+ 'lever_rate': leverage,
27
+ }
28
+
29
+ try {
30
+ // fetching current balance
31
+ const balance = await exchange.fetchBalance()
32
+ // console.log(balance)
33
+
34
+ // placing an order
35
+ const order = await exchange.createOrder (symbol, type, side, amount, price, params)
36
+ console.log (order)
37
+
38
+ // fetching open orders
39
+ const openOrders = await exchange.fetchOpenOrders(symbol)
40
+ console.log(openOrders)
41
+
42
+ // canceling an order
43
+ const cancel = await exchange.cancelOrder (order['id'], symbol)
44
+ console.log (cancel)
45
+ } catch (e) {
46
+ console.log (e.constructor.name, e.message)
47
+ }
48
+
49
+ // creating and canceling a inverse future (limit) order
50
+ symbol = 'ADA/USD:ADA-220121' // the last segment is the date of expiration (can be next week, next quarter, ...) adjust it accordingly
51
+ type = 'limit'
52
+ side = 'buy'
53
+ offset= 'open'
54
+ leverage = 1
55
+ amount = 1
56
+ price = 1 // 1 contract = 10 ADA = 10 usd in this case
57
+ params = {
58
+ 'offset': offset,
59
+ 'lever_rate': leverage,
60
+ }
61
+
62
+ try {
63
+ const order = await exchange.createOrder (symbol, type, side, amount, price, params)
64
+ console.log (order)
65
+ const cancel = await exchange.cancelOrder (order['id'], symbol)
66
+ console.log (cancel)
67
+ } catch (e) {
68
+ console.log (e.constructor.name, e.message)
69
+ }
70
+
71
+ }) ()
@@ -0,0 +1,63 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ const exchange = new ccxt.huobi ({
4
+ 'apiKey': 'YOUR_API_KEY',
5
+ 'secret': 'YOUR_SECRET',
6
+ 'options': {
7
+ 'defaultType': 'swap',
8
+ 'marginMode': 'cross'
9
+ },
10
+ })
11
+
12
+ ;(async () => {
13
+ const markets = await exchange.loadMarkets ()
14
+
15
+ // exchange.verbose = true // uncomment for debugging purposes if necessary
16
+
17
+ // Example: creating and closing a contract
18
+ let symbol = 'ADA/USDT:USDT' // market positions for contracts not available
19
+ let type = 'limit'
20
+ let side = 'buy'
21
+ let offset= 'open'
22
+ let leverage = 1
23
+ let amount = 1
24
+ let price = 1
25
+ let clientOrderId = 6;
26
+ let params = {
27
+ 'offset': offset,
28
+ 'lever_rate': leverage,
29
+ 'client_order_id': clientOrderId
30
+ }
31
+
32
+ try {
33
+ // fetching current balance
34
+ const balance = await exchange.fetchBalance()
35
+ console.log(balance)
36
+
37
+ // placing an order
38
+ const order = await exchange.createOrder (symbol, type, side, amount, price, params)
39
+ console.log (order)
40
+
41
+ // fetching position
42
+ const position = await exchange.fetchPosition(symbol)
43
+ console.log(position)
44
+
45
+
46
+ // closing it by issuing an oposite contract
47
+ // warning: since we can only place limit orders
48
+ // it might take a while (depending on the price we choose and market fluctuations)
49
+ // to the order be fulfilled
50
+ // and therefore close our previous position
51
+ side = 'sell'
52
+ type = 'limit'
53
+ offset = 'close'
54
+ reduce_only = 1 // 1 : yes, 0: no
55
+ clientOrderId = 9
56
+ price = 1.147 // adjust this accordingly
57
+ params = {'offset': offset, 'reduce_only': reduce_only, 'client_order_id': clientOrderId}
58
+ const opositeOrder = await exchange.createOrder (symbol, type, side, amount, price, params)
59
+ console.log (opositeOrder)
60
+ } catch (e) {
61
+ console.log (e.constructor.name, e.message)
62
+ }
63
+ }) ()
@@ -0,0 +1,70 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ const exchange = new ccxt.huobi ({
4
+ 'apiKey': 'YOUR_API_KEY',
5
+ 'secret': 'YOUR_SECRET_KEY',
6
+ 'options': {
7
+ 'defaultType': 'swap',
8
+ },
9
+ })
10
+
11
+ ;(async () => {
12
+ const markets = await exchange.loadMarkets ()
13
+
14
+ // exchange.verbose = true // uncomment for debugging purposes if necessary
15
+
16
+ // creating and canceling a linear swap (limit) order
17
+ let symbol = 'ADA/USDT:USDT'
18
+ let type = 'limit'
19
+ let side = 'buy'
20
+ let offset= 'open'
21
+ let leverage = 1
22
+ let amount = 1
23
+ let price = 1 // 1 contract = 10 ADA = 10 usd in this case
24
+ let params = {
25
+ 'offset': offset,
26
+ 'lever_rate': leverage,
27
+ }
28
+
29
+ try {
30
+ // fetching current balance
31
+ const balance = await exchange.fetchBalance()
32
+ // console.log(balance)
33
+
34
+ // placing an order
35
+ const order = await exchange.createOrder (symbol, type, side, amount, price, params)
36
+ console.log (order)
37
+
38
+ // fetching open orders
39
+ const openOrders = await exchange.fetchOpenOrders(symbol)
40
+ console.log(openOrders)
41
+
42
+ // canceling an order
43
+ const cancel = await exchange.cancelOrder (order['id'], symbol)
44
+ console.log (cancel)
45
+ } catch (e) {
46
+ console.log (e.constructor.name, e.message)
47
+ }
48
+
49
+ // creating and canceling an inverse swap (limit) order
50
+ symbol = 'ADA/USD:ADA'
51
+ type = 'limit'
52
+ side = 'buy'
53
+ offset = 'open'
54
+ leverage = 1
55
+ amount = 1
56
+ price = 1 // 1 contract = 10 ADA = 10 usd in this case
57
+ params = {
58
+ 'offset': offset,
59
+ 'lever_rate': leverage,
60
+ }
61
+
62
+ try {
63
+ const order = await exchange.createOrder (symbol, type, side, amount, price, params)
64
+ console.log (order)
65
+ const cancel = await exchange.cancelOrder (order['id'], symbol)
66
+ console.log (cancel)
67
+ } catch (e) {
68
+ console.log (e.constructor.name, e.message)
69
+ }
70
+ }) ()
@@ -0,0 +1,98 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+ import ololog from 'ololog'
3
+
4
+ const log = ololog.configure .unlimited.handleNodeErrors (),
5
+ { NotSupported } = ccxt,
6
+ enableRateLimit = true,
7
+ symbol = 'ADA/BTC',
8
+ side = 'buy',
9
+ // set createMarketBuyOrderRequiresPrice to true or false to see the difference
10
+ type = 'market',
11
+ // default is true
12
+ createMarketBuyOrderRequiresPrice = true,
13
+ amount = 191.03,
14
+ price = 0.000011,
15
+ options = { createMarketBuyOrderRequiresPrice },
16
+ exchange = new ccxt.huobipro ({ enableRateLimit, options });
17
+
18
+ // This is an example that demonstrates the issues discussed here:
19
+ // https://github.com/ccxt/ccxt/issues/564
20
+ // https://github.com/ccxt/ccxt/issues/3427
21
+ // https://github.com/ccxt/ccxt/issues/3460
22
+ // https://github.com/ccxt/ccxt/issues/4799
23
+
24
+ log.green ('CCXT', ccxt.version)
25
+
26
+ ;(async () => {
27
+
28
+ // preload them first
29
+ await exchange.loadMarkets ()
30
+
31
+ // huobipro has this
32
+ if (!exchange.has['fetchTradingLimits']) {
33
+ throw new NotSupported (exchange.id + ' does not have fetchTradingLimits() yet, make sure your version of CCXT is up to date');
34
+ }
35
+
36
+ // In this particular case it requires an array of symbols
37
+ // otherwise it will load all of them one by one.
38
+ // Loading all limits without specifying
39
+ // the array of symbols might take a lot of time.
40
+
41
+ // The array of symbols will contain just one symbol of interest.
42
+ const arrayOfSymbols = [ symbol ]
43
+
44
+ const allLimits = await exchange.fetchTradingLimits (arrayOfSymbols)
45
+
46
+ // { 'ADA/BTC': { info: { symbol: "adabtc",
47
+ // 'buy-limit-must-less-than': 1.1,
48
+ // 'sell-limit-must-greater-than': 0.9,
49
+ // 'limit-order-must-greater-than': 0.1,
50
+ // 'limit-order-must-less-than': 5000000,
51
+ // 'market-buy-order-must-greater-than': 0.0001,
52
+ // 'market-buy-order-must-less-than': 100,
53
+ // 'market-sell-order-must-greater-than': 0.1,
54
+ // 'market-sell-order-must-less-than': 500000,
55
+ // 'limit-order-before-open-greater-than': 999999999,
56
+ // 'limit-order-before-open-less-than': 0,
57
+ // 'circuit-break-when-greater-than': 10000,
58
+ // 'circuit-break-when-less-than': 10,
59
+ // 'market-sell-order-rate-must-less-than': 0.1,
60
+ // 'market-buy-order-rate-must-less-than': 0.1 },
61
+ // limits: { amount: { min: 0.1, max: 5000000 } } } }
62
+
63
+ const limits = allLimits[symbol]
64
+ log.yellow (symbol, 'limits:')
65
+ log.yellow (limits)
66
+
67
+ // To make things a bit more complicated huobipro specifies
68
+ // different minimums for market and limit orders
69
+ // and different minimums for buy/sell directions
70
+ // therefore we have to work with it in an exchange-specific way
71
+ // using the 'info' field from the response – that is
72
+ // until this aspect is completely unified in ccxt.
73
+
74
+ const info = limits['info']
75
+ const typeSide = type + '-' + side
76
+
77
+ const min = info[typeSide + '-order-must-greater-than']
78
+ const max = info[typeSide + '-order-must-less-than']
79
+
80
+ // huobipro requires the amount in quote currency for market sell orders
81
+ // huobipro requires the cost in quote currency for market buy orders
82
+ // cost = amount * price
83
+
84
+ const cost = createMarketBuyOrderRequiresPrice ? (amount * price) : amount
85
+
86
+ let color = 'red'
87
+
88
+ if ((min !== undefined) && (cost < min)) {
89
+ log[color] ('The cost is below minimum:', cost, '<', min)
90
+ } else if ((max !== undefined) && (cost > max)) {
91
+ log[color] ('The cost is above maximum:', cost, '>', max)
92
+ } else {
93
+ color = 'green'
94
+ }
95
+
96
+ log[color] ({ min, max, cost })
97
+
98
+ }) ()
@@ -0,0 +1,19 @@
1
+
2
+ const ccxt = require('ccxt');
3
+
4
+ console.log('--------------------------------------------')
5
+ console.log('Yey importing ccxt as a cjs module!!!!!')
6
+ console.log('Version:', ccxt.version)
7
+ console.log('--------------------------------------------')
8
+
9
+ const exchange = new ccxt.huobi ({
10
+ 'apiKey': 'YOUR_API_KEY',
11
+ 'secret': 'YOUR_SECRET_KEY',
12
+ 'options': {
13
+ 'defaultType': 'swap',
14
+ },
15
+ })
16
+ ;(async () => {
17
+ const result = await exchange.fetchBalance();
18
+ console.log(result)
19
+ }) ()
@@ -0,0 +1,19 @@
1
+ import {version, huobi} from 'ccxt';
2
+
3
+ console.log('--------------------------------------------')
4
+ console.log('Yey importing ccxt as an ESM module!!!!!')
5
+ console.log('Version:', version)
6
+ console.log('--------------------------------------------')
7
+
8
+ const exchange = new huobi ({
9
+ 'apiKey': 'YOUR_API_KEY',
10
+ 'secret': 'YOUR_SECRET_KEY',
11
+ 'options': {
12
+ 'defaultType': 'swap',
13
+ },
14
+ })
15
+
16
+ ;(async () => {
17
+ const result = await exchange.fetchBalance();
18
+ console.log(result)
19
+ }) ()
@@ -0,0 +1,13 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ const idex = ccxt.idex ({
4
+ 'apiKey': 'YOUR_IDEX_API_KEY',
5
+ 'secret': 'YOUR_IDEX_SECRET',
6
+ 'walletAddress': '0xYOUR_ETHEREUM_WALLET_ADDRESS',
7
+ 'privateKey': '0xYOUR_ETHEREUM_PRIVATE_KEY',
8
+ 'verbose': 0,
9
+ })
10
+
11
+ ;(async () => {
12
+ console.log (await idex.fetchBalance ())
13
+ }) ()
@@ -0,0 +1,46 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+
5
+ async function test () {
6
+
7
+ let exchanges = {
8
+ "bittrex": {
9
+ "apiKey": "YOUR_API_KEY",
10
+ "secret": "YOUR_SECRET",
11
+ },
12
+ "bitfinex": {
13
+ "apiKey": "YOUR_API_KEY",
14
+ "secret": "YOUR_SECRET"
15
+ },
16
+ }
17
+
18
+ let ids = ccxt.exchanges.filter (id => id in exchanges)
19
+
20
+ await Promise.all (ids.map (async id => {
21
+
22
+ console.log (exchanges[id])
23
+
24
+ // instantiate the exchange
25
+ let exchange = new ccxt[id] (exchanges[id])
26
+ console.log (exchange.id, exchange.apiKey)
27
+ exchanges[id] = exchange
28
+
29
+ // load markets
30
+ await exchange.loadMarkets ()
31
+ console.log (exchange.id, 'loaded')
32
+
33
+ // check the balance
34
+ if (exchange.apiKey) {
35
+ let balance = await exchange.fetchBalance ()
36
+ console.log (exchange.id, balance)
37
+ }
38
+
39
+ return exchange
40
+ }))
41
+
42
+ // when all of them are ready, do your other things
43
+ console.log ('Loaded exchanges:', ids.join (', '))
44
+ }
45
+
46
+ test ()
@@ -0,0 +1,31 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+ import settings from './credentials.json';
5
+
6
+ async function test () {
7
+
8
+ const ids = ccxt.exchanges.filter (id => id in settings)
9
+
10
+ const exchanges = ccxt.indexBy (await Promise.all (ids.map (async id => {
11
+
12
+ // instantiate the exchange
13
+ let exchange = new ccxt[id] (settings[id])
14
+
15
+ // load markets
16
+ await exchange.loadMarkets ()
17
+
18
+ // check the balance
19
+ if (exchange.apiKey) {
20
+ let balance = await exchange.fetchBalance ()
21
+ console.log (exchange.id, balance['free'])
22
+ }
23
+
24
+ return exchange
25
+ })), 'id')
26
+
27
+ // when all of them are ready, do your other things
28
+ console.log ('Loaded exchanges:', Object.keys (exchanges).join (', '))
29
+ }
30
+
31
+ test ()
@@ -0,0 +1,54 @@
1
+ // @ts-nocheck
2
+ import ccxt from '../../js/ccxt.js';
3
+ // AUTO-TRANSPILE //
4
+ console.log('CCXT Version:', ccxt.version);
5
+ // ------------------------------------------------------------------------------
6
+ async function example() {
7
+ const exchange = new ccxt.kraken({
8
+ "apiKey": "YOUR_API_KEY",
9
+ "secret": "YOUR_API_SECRET",
10
+ });
11
+ const symbol = 'UNI/USD';
12
+ let side = 'buy'; // set it to 'buy' for a long position, 'sell' for a short position
13
+ const order_type = 'market'; // set it to 'market' or 'limit'
14
+ const amount = 1;
15
+ const leverage = 2;
16
+ await exchange.loadMarkets();
17
+ const market = exchange.market(symbol);
18
+ // if order_type is 'market', then price is not needed
19
+ let price = undefined;
20
+ // if order_type is 'limit', then set a price at your desired level
21
+ // you can fetch the ticker and update price
22
+ // const ticker = await exchange.fetchTicker (symbol);
23
+ // const last_price = ticker['last'];
24
+ // const ask_price = ticker['ask'];
25
+ // const bid_price = ticker['bid'];
26
+ // if (order_type === 'limit') {
27
+ // price = (side === 'buy') ? bid_price * 0.95 : ask_price * 1.05; // i.e. 5% from current price
28
+ // }
29
+ const params = {
30
+ 'leverage': leverage,
31
+ };
32
+ // log
33
+ console.log('Going to open a position', 'for', amount, 'worth', amount, market['base'], '~', market['settle'], 'using', side, order_type, 'order (', (order_type === 'limit' ? exchange.priceToPrecision(symbol, price) : ''), '), using the following params:');
34
+ console.log(params);
35
+ console.log('-----------------------------------------------------------------------');
36
+ // exchange.verbose = True // uncomment for debugging purposes if necessary
37
+ try {
38
+ const created_order = await exchange.createOrder(symbol, order_type, side, amount, price, params);
39
+ console.log("Created an order", created_order);
40
+ // Fetch all your closed orders for this symbol (because we used market order)
41
+ // - use 'fetchClosedOrders' or 'fetchOrders' and filter with 'closed' status
42
+ const all_closed_orders = await exchange.fetchClosedOrders(symbol);
43
+ console.log("Fetched all your closed orders for this symbol", all_closed_orders);
44
+ const all_open_positions = await exchange.fetchPositions(symbol);
45
+ console.log("Fetched all your positions for this symbol", all_open_positions);
46
+ // To close a position:
47
+ // - long position (buy), you can create a sell order: exchange.createOrder (symbol, order_type, 'sell', amount, price, params);
48
+ // - short position (sell), you can create a buy order: exchange.createOrder (symbol, order_type, 'buy', amount, price, params);
49
+ }
50
+ catch (e) {
51
+ console.log(e.toString());
52
+ }
53
+ }
54
+ await example();
@@ -0,0 +1,33 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ (async () => {
4
+
5
+ const exchange = new ccxt.kraken ({
6
+ 'apiKey': 'YOUR_API_KEY',
7
+ 'secret': 'YOUR_SECRET',
8
+ // 'verbose': true,
9
+ })
10
+
11
+ const orders = await exchange.fetchClosedOrders ();
12
+
13
+ for (let i = 0; i < orders.length; i++) {
14
+ const order = await exchange.fetchOrder (orders[i]['id']);
15
+ const trades = await exchange.fetchOrderTrades (order['id'], undefined, undefined, undefined, order);
16
+ console.log (trades);
17
+ }
18
+
19
+ //
20
+ // alternatively:
21
+ //
22
+ // const params = {
23
+ // 'trades': [
24
+ // 'TT5UC3-GOIRW-6AZZ6R',
25
+ // 'TIY6G4-LKLAI-Y3GD4A',
26
+ // 'T57FVC-OB4LN-Z55WUL',
27
+ // 'TIMIRG-WUNNE-RRJ6GT',
28
+ // ]
29
+ // }
30
+ //
31
+ // const trades = await exchange.fetchOrderTrades (order['id'], undefined, undefined, undefined, params);
32
+
33
+ }) ()
@@ -0,0 +1,89 @@
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.kraken ({
10
+ "apiKey": "YOUR_API_KEY",
11
+ "secret": "YOUR_SECRET",
12
+ })
13
+
14
+ console.log ('-----------------------------------------------------------')
15
+
16
+ console.log ('Loading markets...')
17
+ const markets = await exchange.loadMarkets ()
18
+ console.log ('Markets loaded')
19
+
20
+ // exchange.verbose = true // uncomment for debugging purposes
21
+
22
+ try {
23
+
24
+ const symbol = 'ETH/USDT'
25
+ , market = exchange.market (symbol)
26
+ , { base, quote } = market
27
+ , type = 'market'
28
+ , amount = market['limits']['amount']['min']
29
+ , price = undefined
30
+ , params = {
31
+ 'leverage': 2,
32
+ }
33
+
34
+ console.log ('-----------------------------------------------------------')
35
+
36
+ // https://www.kraken.com/en-us/features/api#add-standard-order
37
+
38
+ console.log ('Placing order...')
39
+ let order = await exchange.createOrder (symbol, type, 'buy', amount, price, params)
40
+ console.log ('Order placed:')
41
+ console.log (order)
42
+
43
+ console.log ('-----------------------------------------------------------')
44
+
45
+ // https://www.kraken.com/en-us/features/api#get-open-positions
46
+
47
+ console.log ('Fetching open positions...')
48
+ const positionsParams = { 'docalcs': true }
49
+ let openPositions = await exchange.fetchPositions (positionsParams)
50
+ console.log ('Current positions:')
51
+ console.log (openPositions)
52
+
53
+ console.log ('-----------------------------------------------------------')
54
+
55
+ console.log ('Fetching balance...')
56
+ let balance = await exchange.fetchTotalBalance ()
57
+ console.log ('Fetched balance:')
58
+ console.log (base, balance[base], '(base)')
59
+ console.log (quote, balance[quote], '(quote)')
60
+
61
+ console.log ('-----------------------------------------------------------')
62
+
63
+ console.log ('Closing the position...')
64
+ order = await exchange.createOrder (symbol, type, 'sell', amount, price, params)
65
+ console.log ('Got a response:')
66
+ console.log (order)
67
+
68
+ console.log ('-----------------------------------------------------------')
69
+
70
+ console.log ('Fetching open positions again...')
71
+ openPositions = await exchange.fetchPositions (positionsParams)
72
+ console.log ('Current positions:')
73
+ console.log (openPositions)
74
+
75
+ console.log ('-----------------------------------------------------------')
76
+
77
+ console.log ('Fetching balance...')
78
+ balance = await exchange.fetchTotalBalance ()
79
+ console.log ('Fetched balance:')
80
+ console.log (base, balance[base], '(base)')
81
+ console.log (quote, balance[quote], '(quote)')
82
+
83
+ } catch (e) {
84
+
85
+ console.log (e.constructor.name, e.message)
86
+ }
87
+ }
88
+
89
+ main ()
@@ -0,0 +1,38 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+
5
+ async function main () {
6
+
7
+ const exchange = new ccxt.kucoin()
8
+ const markets = await exchange.loadMarkets ()
9
+ const timeframe = '5m'
10
+ const symbol = 'BTC/USDT'
11
+ const since = undefined
12
+ const limit = 1000
13
+
14
+ let i = 0
15
+ while (true) {
16
+ try {
17
+ const ohlcvs = await exchange.fetchOHLCV(symbol, timeframe, since, limit)
18
+ const now = exchange.milliseconds()
19
+ const datetime = exchange.iso8601(now)
20
+ console.log(datetime, i, 'fetched', ohlcvs.length, symbol, timeframe, 'candles',
21
+ 'from', exchange.iso8601(ohlcvs[0][0]),
22
+ 'to', exchange.iso8601(ohlcvs[ohlcvs.length-1][0]))
23
+ } catch (e) {
24
+ if (e instanceof ccxt.RateLimitExceeded) {
25
+ const now = exchange.milliseconds()
26
+ const datetime = exchange.iso8601(now)
27
+ console.log(datetime, i, e.constructor.name, e.message)
28
+ await exchange.sleep(10000)
29
+ } else {
30
+ console.log(e.constructor.name, e.message)
31
+ throw e
32
+ }
33
+ }
34
+ i += 1
35
+ }
36
+ }
37
+
38
+ main ()