ccxt 4.2.100 → 4.3.2

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 (330) hide show
  1. package/README.md +6 -5
  2. package/dist/cjs/ccxt.js +1 -1
  3. package/dist/cjs/src/base/Exchange.js +3 -0
  4. package/dist/cjs/src/binance.js +56 -0
  5. package/dist/cjs/src/bingx.js +2 -2
  6. package/dist/cjs/src/bitget.js +69 -5
  7. package/dist/cjs/src/bybit.js +1 -1
  8. package/dist/cjs/src/coinbase.js +2 -1
  9. package/dist/cjs/src/coinbasepro.js +1 -1
  10. package/dist/cjs/src/coinex.js +164 -206
  11. package/dist/cjs/src/cryptocom.js +5 -5
  12. package/dist/cjs/src/hyperliquid.js +74 -0
  13. package/dist/cjs/src/kraken.js +8 -3
  14. package/dist/cjs/src/kucoin.js +13 -11
  15. package/dist/cjs/src/okx.js +76 -5
  16. package/dist/cjs/src/pro/kraken.js +2 -2
  17. package/dist/cjs/src/woo.js +40 -0
  18. package/js/ccxt.d.ts +1 -1
  19. package/js/ccxt.js +1 -1
  20. package/js/src/base/Exchange.d.ts +2 -1
  21. package/js/src/base/Exchange.js +3 -0
  22. package/js/src/base/types.d.ts +5 -0
  23. package/js/src/binance.d.ts +3 -1
  24. package/js/src/binance.js +56 -0
  25. package/js/src/bingx.js +3 -3
  26. package/js/src/bitget.d.ts +1 -0
  27. package/js/src/bitget.js +69 -5
  28. package/js/src/bybit.js +1 -1
  29. package/js/src/coinbase.js +2 -1
  30. package/js/src/coinbasepro.d.ts +1 -1
  31. package/js/src/coinbasepro.js +1 -1
  32. package/js/src/coinex.js +164 -206
  33. package/js/src/cryptocom.js +5 -5
  34. package/js/src/hyperliquid.d.ts +2 -1
  35. package/js/src/hyperliquid.js +75 -1
  36. package/js/src/kraken.js +8 -3
  37. package/js/src/kucoin.js +13 -11
  38. package/js/src/okx.d.ts +1 -0
  39. package/js/src/okx.js +76 -5
  40. package/js/src/pro/kraken.js +2 -2
  41. package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
  42. package/js/src/woo.d.ts +1 -0
  43. package/js/src/woo.js +40 -0
  44. package/package.json +2 -1
  45. package/.dockerignore +0 -6
  46. package/.eslintignore +0 -1
  47. package/.git-templates/hooks/pre-push +0 -55
  48. package/.gitattributes +0 -7
  49. package/CHANGELOG.md +0 -6003
  50. package/CODEOWNERS +0 -1
  51. package/CONTRIBUTING.md +0 -1099
  52. package/build.sh +0 -217
  53. package/change.sh +0 -18
  54. package/cleanup.sh +0 -18
  55. package/composer-install.sh +0 -20
  56. package/dist/ccxt.browser.js +0 -327256
  57. package/dist/ccxt.browser.min.js +0 -30
  58. package/dist/ccxt.browser.min.js.LICENSE.txt +0 -12
  59. package/doc/FAQ.rst +0 -1
  60. package/doc/Makefile +0 -20
  61. package/doc/_static/css/dark.css +0 -101
  62. package/doc/_static/css/index.css +0 -128
  63. package/doc/_static/favicon.ico +0 -0
  64. package/doc/_static/javascript/binance-portal.min.js +0 -2369
  65. package/doc/_static/javascript/index.js +0 -195
  66. package/doc/_static/javascript/jquery-ui.min.js +0 -6
  67. package/doc/ccxt.pro.install.rst +0 -1
  68. package/doc/ccxt.pro.manual.rst +0 -1665
  69. package/doc/exchange-markets-by-country.rst +0 -1423
  70. package/doc/exchange-markets.rst +0 -1441
  71. package/doc/index.rst +0 -35
  72. package/doc/install.rst +0 -1
  73. package/doc/make.bat +0 -36
  74. package/doc/manual.rst +0 -7471
  75. package/doc/readme.rst +0 -2191
  76. package/doc/requirements.txt +0 -6
  77. package/examples/ccxt.pro/html/watchTicker.html +0 -51
  78. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +0 -55
  79. package/examples/ccxt.pro/js/binance-https-proxy.js +0 -48
  80. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +0 -38
  81. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +0 -64
  82. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +0 -62
  83. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +0 -68
  84. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +0 -82
  85. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +0 -59
  86. package/examples/ccxt.pro/js/exchange-capabitities.js +0 -72
  87. package/examples/ccxt.pro/js/exchange-close.js +0 -46
  88. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +0 -30
  89. package/examples/ccxt.pro/js/gateio-watch-balance.js +0 -23
  90. package/examples/ccxt.pro/js/gateio-watch-order-book.js +0 -71
  91. package/examples/ccxt.pro/js/graceful-shutdown.js +0 -43
  92. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +0 -37
  93. package/examples/ccxt.pro/js/okex-create-futures-order.js +0 -48
  94. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +0 -54
  95. package/examples/ccxt.pro/js/okx-watch-tickers.js +0 -31
  96. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +0 -46
  97. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +0 -26
  98. package/examples/ccxt.pro/js/one-exchange-many-streams.js +0 -28
  99. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +0 -30
  100. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +0 -40
  101. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +0 -38
  102. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +0 -40
  103. package/examples/ccxt.pro/js/watch-many-orderbooks.js +0 -27
  104. package/examples/ccxt.pro/js/watch-new-trades-only.js +0 -43
  105. package/examples/ccxt.pro/js/watch-new-trades.js +0 -42
  106. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +0 -29
  107. package/examples/ccxt.pro/js/watch-vs-fetch.js +0 -29
  108. package/examples/cs/Examples.sln +0 -22
  109. package/examples/cs/c#.csproj +0 -19
  110. package/examples/html/basic-cors-proxy.html +0 -46
  111. package/examples/html/basic-inheritance.html +0 -47
  112. package/examples/html/basic-poller.html +0 -52
  113. package/examples/html/basic-rate-limiting.html +0 -49
  114. package/examples/html/basic.html +0 -43
  115. package/examples/html/binance-cors-proxy.html +0 -28
  116. package/examples/html/bitmex-browser-cors-proxy.js +0 -7
  117. package/examples/html/bitmex-cors.html +0 -46
  118. package/examples/html/tradingview-charts.html +0 -61
  119. package/examples/html/webworker/index.html +0 -97
  120. package/examples/html/webworker/worker.js +0 -43
  121. package/examples/js/advanced-error-handling.js +0 -39
  122. package/examples/js/aggregate-orderbook.js +0 -54
  123. package/examples/js/arbitrage-pairs.js +0 -130
  124. package/examples/js/basic-chart.js +0 -29
  125. package/examples/js/basic-orderbook-polling.js +0 -13
  126. package/examples/js/bcc-vs-bch.js +0 -115
  127. package/examples/js/benchmark.js +0 -104
  128. package/examples/js/binance-fetch-all-deposits.js +0 -45
  129. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +0 -34
  130. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +0 -33
  131. package/examples/js/binance-fetchTicker-delivery-vs-future.js +0 -31
  132. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +0 -41
  133. package/examples/js/binance-margin-stop-order.js +0 -39
  134. package/examples/js/binance-server-time.js +0 -34
  135. package/examples/js/binance-universal-transfer.js +0 -16
  136. package/examples/js/bitfinex-fetch-trades.js +0 -35
  137. package/examples/js/bitfinex2-fetch-trades.js +0 -35
  138. package/examples/js/bitmex-browser-cors-proxy.js +0 -7
  139. package/examples/js/bitpanda-fetchMyTrades-reduce.js +0 -36
  140. package/examples/js/bitrue-fetch-balance.js +0 -28
  141. package/examples/js/bitstamp-private-api.js +0 -115
  142. package/examples/js/bitstamp-public-api.js +0 -39
  143. package/examples/js/bittrex-balance.js +0 -50
  144. package/examples/js/bittrex-fetch-closed-orders-history.js +0 -69
  145. package/examples/js/blockchaincom-withdrawal.js +0 -59
  146. package/examples/js/build-ohlcv-bars.js +0 -48
  147. package/examples/js/builtin-rate-limiting-rest-poller.js +0 -25
  148. package/examples/js/bybit-trailing.js +0 -62
  149. package/examples/js/bybit-updated.cjs +0 -154
  150. package/examples/js/coinbase-fetch-all-balances.js +0 -36
  151. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +0 -47
  152. package/examples/js/coinex-futures.js +0 -75
  153. package/examples/js/coinone-fetch-tickers.js +0 -54
  154. package/examples/js/coinone-markets.js +0 -16
  155. package/examples/js/compare-two-exchanges-capabilities.js +0 -36
  156. package/examples/js/cors-proxy.js +0 -5
  157. package/examples/js/create-order-handle-errors.js +0 -55
  158. package/examples/js/create-order-position-with-takeprofit-stoploss.js +0 -71
  159. package/examples/js/create-order-with-retry.js +0 -65
  160. package/examples/js/create-order-ws-example.js +0 -25
  161. package/examples/js/create-orders-example.js +0 -17
  162. package/examples/js/create-trailing-amount-order.js +0 -36
  163. package/examples/js/create-trailing-percent-order.js +0 -36
  164. package/examples/js/credentials.json +0 -5
  165. package/examples/js/custom-proxy-agent-for-js.js +0 -10
  166. package/examples/js/custom-proxy-url.js +0 -23
  167. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +0 -60
  168. package/examples/js/env-variables.js +0 -26
  169. package/examples/js/error-handling.js +0 -89
  170. package/examples/js/exchange-capabilities.js +0 -135
  171. package/examples/js/exchanges-by-volume.js +0 -60
  172. package/examples/js/exchanges.js +0 -40
  173. package/examples/js/fetch-all-balances.js +0 -219
  174. package/examples/js/fetch-all-tickers-to-files-2.js +0 -53
  175. package/examples/js/fetch-all-tickers-to-files.js +0 -77
  176. package/examples/js/fetch-balance.js +0 -28
  177. package/examples/js/fetch-create-deposit-address.js +0 -101
  178. package/examples/js/fetch-from-many-exchanges-simultaneously.js +0 -21
  179. package/examples/js/fetch-funding-rate-history.js +0 -25
  180. package/examples/js/fetch-futures/prettier.config.js +0 -5
  181. package/examples/js/fetch-futures/src/index.js +0 -25
  182. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +0 -72
  183. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +0 -39
  184. package/examples/js/fetch-ohlcv.js +0 -16
  185. package/examples/js/fetch-okex-futures.js +0 -22
  186. package/examples/js/fetch-orders.js +0 -27
  187. package/examples/js/fetch-ticker-from-multiple-exchanges.js +0 -35
  188. package/examples/js/fetch-ticker-where-available.js +0 -75
  189. package/examples/js/fetch-tickers/build/index.js +0 -19
  190. package/examples/js/fetch-tickers/prettier.config.js +0 -5
  191. package/examples/js/fetch-tickers/src/index.js +0 -17
  192. package/examples/js/gateio-create-batch-order.js +0 -43
  193. package/examples/js/gateio-futures.js +0 -49
  194. package/examples/js/gateio-open-close-contract.js +0 -49
  195. package/examples/js/gateio-swaps.js +0 -74
  196. package/examples/js/gdax-fetch-trades-pagination.js +0 -29
  197. package/examples/js/hitbtc2-withdraw.js +0 -61
  198. package/examples/js/how-to-import-one-exchange-esm.js +0 -10
  199. package/examples/js/huobi-futures.js +0 -71
  200. package/examples/js/huobi-open-close-contract.js +0 -63
  201. package/examples/js/huobi-swaps.js +0 -70
  202. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +0 -98
  203. package/examples/js/hybridCJSExample.cjs +0 -19
  204. package/examples/js/hybridESMExample.js +0 -19
  205. package/examples/js/idex-fetch-balance.js +0 -13
  206. package/examples/js/instantiate-all-at-once.js +0 -46
  207. package/examples/js/instantiate-all-from-json.js +0 -31
  208. package/examples/js/kraken-create-and-close-position.js +0 -54
  209. package/examples/js/kraken-fetch-order-trades.js +0 -33
  210. package/examples/js/kraken-margin-trading.js +0 -89
  211. package/examples/js/kucoin-rate-limit.js +0 -38
  212. package/examples/js/latoken-example.js +0 -108
  213. package/examples/js/live-orderbook.js +0 -106
  214. package/examples/js/live-ticker.js +0 -80
  215. package/examples/js/live-tickers.js +0 -74
  216. package/examples/js/load-all-contracts.js +0 -41
  217. package/examples/js/load-all-symbols-at-once.js +0 -69
  218. package/examples/js/load-all-tickers-at-once.js +0 -91
  219. package/examples/js/load-markets-to-files.js +0 -57
  220. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +0 -61
  221. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +0 -91
  222. package/examples/js/margin-loan-borrow-buy-sell-repay.js +0 -70
  223. package/examples/js/market-status-and-currency-status.js +0 -29
  224. package/examples/js/ohlcv-console-chart.js +0 -29
  225. package/examples/js/okex-fetch-closed-orders-archive.js +0 -31
  226. package/examples/js/okex-transfer.js +0 -51
  227. package/examples/js/okx-poll-fetch-my-trades.js +0 -37
  228. package/examples/js/okx-poll-rate-limit.js +0 -48
  229. package/examples/js/order-book-extra-level-depth-param.js +0 -20
  230. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +0 -49
  231. package/examples/js/poll-ohlcv.js +0 -43
  232. package/examples/js/poloniex-fetch-order-books.js +0 -35
  233. package/examples/js/poloniex-limits-amount-min.js +0 -62
  234. package/examples/js/proxy-round-robin.js +0 -98
  235. package/examples/js/proxy-usage.js +0 -32
  236. package/examples/js/sample-local-proxy-server-with-cors.js +0 -12
  237. package/examples/js/search-all-exchanges.js +0 -159
  238. package/examples/js/shared-load-markets.js +0 -80
  239. package/examples/js/sort-swap-markets-by-hourly-price-change.js +0 -55
  240. package/examples/js/symbols.js +0 -110
  241. package/examples/js/theocean.js +0 -41
  242. package/examples/js/tickers.js +0 -106
  243. package/examples/js/validate-paginated-data.js +0 -61
  244. package/examples/js/watch-OHLCV-For-Symbols.js +0 -15
  245. package/examples/js/watch-OHLCV.js +0 -12
  246. package/examples/js/watch-OrderBook-For-Symbols.js +0 -11
  247. package/examples/js/watch-Trades-For-Symbols.js +0 -11
  248. package/examples/js/watch-tickers.js +0 -11
  249. package/examples/js/watchOHLCVForSymbols.js +0 -15
  250. package/examples/js/watchOrderBookForSymbols.js +0 -11
  251. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +0 -2
  252. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +0 -1
  253. package/examples/js/watchPositions-many-exchanges-continuosly.js +0 -49
  254. package/examples/js/watchPositions.d.ts +0 -2
  255. package/examples/js/watchPositions.d.ts.map +0 -1
  256. package/examples/js/watchPositions.js +0 -13
  257. package/examples/js/watchPositionsForSymbols.d.ts +0 -2
  258. package/examples/js/watchPositionsForSymbols.d.ts.map +0 -1
  259. package/examples/js/watchPositionsForSymbols.js +0 -14
  260. package/examples/js/watchTradesForSymbols.js +0 -11
  261. package/examples/js/withdraw-from-one-exchange-to-another.js +0 -50
  262. package/examples/php/README.md +0 -7
  263. package/examples/py/README.md +0 -15
  264. package/examples/py/playing_with_ccxt_example.ipynb +0 -222
  265. package/examples/ts/.eslintrc +0 -111
  266. package/examples/ts/benchmark.ts +0 -134
  267. package/examples/ts/build-ohlcv-bars.ts +0 -53
  268. package/examples/ts/cli.ts +0 -397
  269. package/examples/ts/compare-two-exchanges-capabilities.ts +0 -36
  270. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +0 -89
  271. package/examples/ts/create-order-ws-example.ts +0 -33
  272. package/examples/ts/create-orders-example.ts +0 -21
  273. package/examples/ts/create-trailing-amount-order.ts +0 -37
  274. package/examples/ts/create-trailing-percent-order.ts +0 -37
  275. package/examples/ts/custom-proxy-agent-for-js.ts +0 -14
  276. package/examples/ts/fetch-futures/package-lock.json +0 -116
  277. package/examples/ts/fetch-futures/package.json +0 -34
  278. package/examples/ts/fetch-futures/prettier.config.js +0 -4
  279. package/examples/ts/fetch-futures/src/index.ts +0 -28
  280. package/examples/ts/fetch-futures/tsconfig.json +0 -28
  281. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +0 -44
  282. package/examples/ts/fetch-ohlcv.ts +0 -17
  283. package/examples/ts/fetch-tickers/package-lock.json +0 -116
  284. package/examples/ts/fetch-tickers/package.json +0 -34
  285. package/examples/ts/fetch-tickers/prettier.config.js +0 -4
  286. package/examples/ts/fetch-tickers/src/index.ts +0 -21
  287. package/examples/ts/fetch-tickers/tsconfig.json +0 -28
  288. package/examples/ts/how-to-import-one-exchange-esm.ts +0 -11
  289. package/examples/ts/kraken-create-and-close-position.ts +0 -69
  290. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +0 -72
  291. package/examples/ts/nextjs-page-router/.eslintrc.json +0 -3
  292. package/examples/ts/nextjs-page-router/README.md +0 -43
  293. package/examples/ts/nextjs-page-router/next.config.js +0 -6
  294. package/examples/ts/nextjs-page-router/package-lock.json +0 -7425
  295. package/examples/ts/nextjs-page-router/package.json +0 -28
  296. package/examples/ts/nextjs-page-router/postcss.config.js +0 -6
  297. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  298. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +0 -6
  299. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +0 -13
  300. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +0 -46
  301. package/examples/ts/nextjs-page-router/src/pages/index.tsx +0 -8
  302. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +0 -61
  303. package/examples/ts/nextjs-page-router/src/styles/globals.css +0 -27
  304. package/examples/ts/nextjs-page-router/tailwind.config.ts +0 -20
  305. package/examples/ts/nextjs-page-router/tsconfig.json +0 -22
  306. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +0 -62
  307. package/examples/ts/proxy-usage.ts +0 -41
  308. package/examples/ts/sample-local-proxy-server-with-cors.ts +0 -15
  309. package/examples/ts/watch-OHLCV-For-Symbols.ts +0 -17
  310. package/examples/ts/watch-OHLCV.ts +0 -14
  311. package/examples/ts/watch-OrderBook-For-Symbols.ts +0 -13
  312. package/examples/ts/watch-Trades-For-Symbols.ts +0 -13
  313. package/examples/ts/watch-tickers.ts +0 -13
  314. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +0 -53
  315. package/examples/ts/watchPositions.ts +0 -15
  316. package/examples/ts/watchPositionsForSymbols.ts +0 -16
  317. package/examples/tsconfig.json +0 -27
  318. package/examples2md.js +0 -79
  319. package/gource.sh +0 -3
  320. package/index.html +0 -7
  321. package/jsdoc2md.js +0 -122
  322. package/multilang.sh +0 -164
  323. package/pro-tests.json +0 -57
  324. package/pyproject.toml +0 -8
  325. package/rollup.config.js +0 -60
  326. package/skip-tests.json +0 -1653
  327. package/test-commonjs.cjs +0 -65
  328. package/tests-manager.sh +0 -96
  329. package/tsconfig.json +0 -111
  330. package/webpack.config.js +0 -46
@@ -1,111 +0,0 @@
1
- {
2
- "env": {
3
- "es2021": true,
4
- "node": true
5
- },
6
- "parserOptions": {
7
- "ecmaVersion": 2020,
8
- "sourceType": "module"
9
- },
10
- "parser": "@typescript-eslint/parser",
11
- "plugins": ["@typescript-eslint"],
12
- "extends": ["eslint:recommended", "airbnb-base", "plugin:import/typescript"],
13
- "ignorePatterns": ["*/*", "cli.ts"],
14
- "rules": {
15
- "no-console": "off",
16
- "import/no-unresolved":"off", // tmp until typescript decides to properly resolve names
17
- "import/named": "off",
18
- "strict": "off",
19
- "semi": "error",
20
- "indent": ["error", 4],
21
- "init-declarations": "error",
22
- "no-undef-init": "off",
23
- "comma-dangle": ["error", {
24
- "arrays": "always-multiline",
25
- "objects": "always-multiline",
26
- "imports": "always-multiline",
27
- "exports": "always-multiline",
28
- "functions": "never"
29
- }],
30
- "import/extensions": "off",
31
- "brace-style": ["error", "1tbs"],
32
- "multiline-comment-style": ["error", "separate-lines"],
33
- "dot-notation": "off",
34
- "quote-props": ["error", "always"],
35
- "no-multi-spaces": ["error", { "ignoreEOLComments": true }],
36
- "no-whitespace-before-property": "error",
37
- "space-before-blocks": ["error", "always"],
38
- "space-before-function-paren": ["error", "always"],
39
- "no-spaced-func": "off",
40
- "func-call-spacing": ["error", "always"],
41
- "block-spacing": ["error", "always"],
42
- "keyword-spacing": ["error", { "before": true, "after": true }],
43
- "object-curly-spacing": ["error", "always", { "objectsInObjects": false }],
44
- "object-curly-newline": ["error", { "consistent": true }],
45
- "space-infix-ops": "error",
46
- "space-unary-ops": "error",
47
- "space-in-parens": "error",
48
- "no-nested-ternary": "error",
49
- "eqeqeq": "error",
50
- "quotes": ["error", "single", { "avoidEscape": true }],
51
- "no-unused-vars": ["warn", { "argsIgnorePattern": "^(headers|body|account|info|symbol|price|tag|side|since|limit|params|market|timeframe|api|path|code|currency|statusCode|statusText|url|method|response|requestHeaders|requestBody|bidsKey|asksKey|context|config|type|priceKey|amountKey|networkCode|marginMode|subscription|message|client)" }],
52
- "new-parens": "error",
53
- "new-cap": "off",
54
- "no-var": "error",
55
- "prefer-const": ["error", {
56
- "destructuring": "any",
57
- "ignoreReadBeforeAssign": false
58
- }],
59
- "no-warning-comments": ["warn", { "terms": ["fixme"] }],
60
- "padded-blocks": ["error", "never"],
61
- "lines-between-class-members": "error",
62
- "no-multiple-empty-lines": ["error", { "max": 2 }],
63
- "padding-line-between-statements": ["warn",
64
- // { "blankLine": "never", "prev":"*", "next": "*" }, // comment this to allow blank-lines
65
- { "blankLine": "always", "prev":"directive", "next": "*" },
66
- { "blankLine": "always", "prev":"*", "next": "cjs-export" },
67
- { "blankLine": "always", "prev":"*", "next": "export" },
68
- { "blankLine": "always", "prev":"*", "next": "function" }
69
- ],
70
- "prefer-template": "off",
71
- "curly": "error",
72
- "no-plusplus": "off",
73
- "no-restricted-properties": "off",
74
- "prefer-destructuring": "off",
75
- "class-methods-use-this": "off",
76
- "no-param-reassign": "off",
77
- "max-len": "off",
78
- "no-return-await": "off",
79
- "array-bracket-spacing": ["error", "always"],
80
- "radix": "off",
81
- "camelcase": "off",
82
- "no-lonely-if": "off",
83
- "no-mixed-operators": "off",
84
- "no-shadow": "off",
85
- "no-useless-concat": "off",
86
- "no-continue": "off",
87
- "no-else-return": "off",
88
- "no-unneeded-ternary": "off",
89
- "operator-assignment": "off",
90
- "no-underscore-dangle": "off",
91
- "consistent-return": "off",
92
- "no-await-in-loop": "off",
93
- "prefer-exponentiation-operator": "off",
94
- "no-use-before-define": ["error", {
95
- "functions": false,
96
- "classes": true,
97
- "variables": true,
98
- "allowNamedExports": false
99
- }]
100
- },
101
- "settings": {
102
- "import/resolver": {
103
- "node": {
104
- "extensions": [".js", ".ts"]
105
- }
106
- },
107
- "import/parsers": {
108
- "@typescript-eslint/parser": [".ts", ".js"]
109
- }
110
- }
111
- }
@@ -1,134 +0,0 @@
1
- import { spawn } from 'child_process';
2
- import asTable from 'as-table';
3
- import ccxt, { version } from '../../js/ccxt.js';
4
-
5
- interface Stats {
6
- min: number;
7
- average: number;
8
- max: number;
9
- median: number;
10
- iterations: number;
11
- }
12
-
13
- interface Test {
14
- language: string;
15
- method: string;
16
- command: string;
17
- }
18
-
19
- interface Benchmark extends Omit<Test, 'command'>, Stats { }
20
-
21
- const stats = (times: number[]): Stats => {
22
- // calculate statistics
23
- const sum = times.reduce ((a, b) => a + b, 0);
24
- const avg = Math.round (sum / times.length);
25
- const min = Math.min (...times);
26
- const max = Math.max (...times);
27
- times.sort ((a, b) => a - b);
28
- const median = times.length % 2 === 0 ? (times[times.length / 2 - 1] + times[times.length / 2]) / 2 : times[Math.floor (times.length / 2)];
29
- return { min, 'average': avg, max, median, 'iterations': times.length };
30
- };
31
-
32
- async function benchmark (exchangeId, method, args, verbose = false, minIterations = 10, argsv = '') {
33
- const exchange = new ccxt.pro[exchangeId] ({});
34
- const languages = [ 'js', 'py', 'php', 'cs' ];
35
- const commands: Test[] = languages.map ((language) => ({
36
- 'language': language,
37
- 'method': method,
38
- 'command': `npm run cli.${language} ${exchangeId} ${method} ${args.join (' ')} -- ${argsv} --poll`,
39
- }));
40
- const wsMethod = method + 'Ws';
41
- if (exchange.has[wsMethod]) {
42
- const wsCommands: Test[] = languages.map ((language) => ({
43
- 'language': language,
44
- 'method': wsMethod,
45
- 'command': `npm run cli.${language} ${exchangeId} ${wsMethod} ${args.join (' ')} -- ${argsv} --poll`,
46
- }));
47
- commands.push (...wsCommands);
48
- }
49
- const regex = /iteration (\d+) passed in (\d+) ms/g;
50
-
51
- async function runCommand (command: string) {
52
- if (verbose) {
53
- console.log (exchange.iso8601 (new Date ().getTime ()), ' running command:', command);
54
- }
55
- return new Promise<{ times: number[] }> ((resolve, reject) => {
56
- const [ cmd, ...args ] = command.split (' ');
57
-
58
- const child = spawn (cmd, args);
59
- const matches = [];
60
- const language = command.slice (8, 15);
61
- child.stdout.on ('data', (data: Buffer) => {
62
- const message = data.toString ();
63
- matches.push (...Array.from (message.matchAll (regex)));
64
- const match = matches[matches.length - 1];
65
-
66
- if (match && match[1] && match[2]) {
67
- const iteration = parseInt (match[1]);
68
- const time = parseInt (match[2]);
69
-
70
- if (iteration <= minIterations) {
71
- if (verbose) {
72
- console.log (exchange.iso8601 (new Date ().getTime ()), `${language} iteration ${iteration} passed in ${time} ms`);
73
- }
74
- } else {
75
- const times = matches.map ((m) => parseInt (m[2]));
76
- child.kill ();
77
- if (verbose) {
78
- console.log (exchange.iso8601 (new Date ().getTime ()), `killed process - ${language} iteration ${iteration} passed in ${time} ms`);
79
- }
80
- resolve ({ times });
81
- }
82
- }
83
- });
84
-
85
- child.stderr.on ('data', (data: Buffer) => {
86
- const message = data.toString ();
87
- console.error (exchange.iso8601 (new Date ().getTime ()), `command ${command} failed. stderr: ${message}`);
88
- const times = matches.map ((m) => parseInt (m[2]));
89
- resolve ({ times });
90
- });
91
-
92
- child.on ('close', (code: number) => {
93
- const times = matches.map ((m) => parseInt (m[2]));
94
- resolve ({ times });
95
- console.log (exchange.iso8601 (new Date ().getTime ()), `${language} child process exited with code ${code}`);
96
- });
97
-
98
- child.on ('error', (err) => {
99
- console.error (exchange.iso8601 (new Date ().getTime ()), `command ${command} failed. error: ${err}`);
100
- reject (err);
101
- });
102
- });
103
- }
104
-
105
- const benchmarks: Benchmark[] = [];
106
- const results = await Promise.all (commands.map ((c) => runCommand (c.command)));
107
- for (let i = 0; i < results.length; i++) {
108
- const result = results[i];
109
- benchmarks.push ({ 'language': commands[i].language, 'method': commands[i].method, ...stats (result.times) });
110
- }
111
- if (verbose) {
112
- const rawResults = results.map ((r, i) => ({ 'language': commands[i].language, 'method': commands[i].method, ...stats (r.times), 'times': r.times }));
113
- console.log (rawResults);
114
- }
115
- console.log (asTable (benchmarks));
116
- }
117
-
118
- const [ _, , exchangeId, methodName, ...params ] = process.argv.filter ((x) => !x.startsWith ('--'));
119
- const verbose = process.argv.includes ('--verbose');
120
- const minIterationsString = process.argv.find ((x) => x.startsWith ('--min-iterations='))?.slice (18);
121
- const minIterations = minIterationsString ? parseInt (minIterationsString) : 10;
122
- const argsv = process.argv.filter ((x) => x.startsWith ('--') && !x.startsWith ('--min-iterations')).join (' ');
123
-
124
-
125
- console.log ((new Date ()).toISOString ());
126
- console.log ('Node.js:', process.version);
127
- console.log ('CCXT v' + version);
128
-
129
- const start = new Date ().getTime ();
130
- await benchmark (exchangeId, methodName, params, verbose, minIterations, argsv);
131
- const end = new Date ().getTime ();
132
-
133
- console.log ((new Date ().toISOString ()), 'Total time:', end - start, 'ms');
134
- process.exit (0);
@@ -1,53 +0,0 @@
1
- import ccxt from '../../js/ccxt.js';
2
-
3
- // AUTO-TRANSPILE //
4
-
5
- // Bulding OHLCV array from trades (executions) data is a bit tricky. For example, if you want to build 100 ohlcv bars of 1-minute timeframe, then you have to fetch the 100 minutes of trading data. So, higher timeframe bars require more trading data (i.e. building 100 bars of 1-day timeframe OHLCV would require massive amount of trading data, which might not be desirable for user, because of data-usage rate limits)
6
-
7
- async function example_with_fetch_trades () {
8
- const exch = new ccxt.binance ({});
9
- const timeframe = '1m';
10
- const symbol = 'OGN/USDT';
11
- const since = exch.milliseconds () - 1000 * 60 * 30; // last 30 mins
12
- const limit = 1000;
13
- const trades = await exch.fetchTrades (symbol, since, limit);
14
- const generatedBars = exch.buildOHLCVC (trades, timeframe, since, limit);
15
- // you can ignore 6th index ("count" field) from ohlcv entries, which is not part of OHLCV standard structure and is just added internally by `buildOHLCVC` method
16
- console.log ('[REST] Constructed', generatedBars.length, 'bars from trades: ', generatedBars);
17
- }
18
-
19
- async function example_with_watch_trades () {
20
- const exch = new ccxt.pro.binance ({});
21
- const timeframe = '1m';
22
- const symbol = 'DOGE/USDT';
23
- const limit = 1000;
24
- const since = exch.milliseconds () - 10 * 60 * 1000 * 1000; // last 10 hrs
25
- let collectedTrades = [];
26
- const collectedBars = [];
27
- while (true) {
28
- const wsTrades = await exch.watchTrades (symbol, since, limit, {});
29
- collectedTrades = collectedTrades.concat (wsTrades);
30
- const generatedBars = exch.buildOHLCVC (collectedTrades, timeframe, since, limit);
31
- // Note: first bar would be partially constructed bar and its 'open' & 'high' & 'low' prices (except 'close' price) would probably have different values compared to real bar on chart, because the first obtained trade timestamp might be somewhere in the middle of timeframe period, so the pre-period would be missing because we would not have trades data. To fix that, you can get older data with `fetchTrades` to fill up bars till start bar.
32
- for (let i = 0; i < generatedBars.length; i++) {
33
- const bar = generatedBars[i];
34
- const barTimestamp = bar[0];
35
- const collectedBarsLength = collectedBars.length;
36
- const lastCollectedBarTimestamp = collectedBarsLength > 0 ? collectedBars[collectedBarsLength - 1][0] : 0;
37
- if (barTimestamp === lastCollectedBarTimestamp) {
38
- // if timestamps are same, just updarte the last bar
39
- collectedBars[collectedBarsLength - 1] = bar;
40
- } else if (barTimestamp > lastCollectedBarTimestamp) {
41
- collectedBars.push (bar);
42
- // remove the trades from saved array, which were till last collected bar's open timestamp
43
- collectedTrades = exch.filterBySinceLimit (collectedTrades, barTimestamp);
44
- }
45
- }
46
- // Note: first bar would carry incomplete values, please read comment in "buildOHLCVCFromWatchTrades" method definition for further explanation
47
- console.log ('[WS] Constructed', collectedBars.length, 'bars from', symbol, 'trades: ', collectedBars);
48
- }
49
- }
50
-
51
-
52
- await example_with_fetch_trades ();
53
- await example_with_watch_trades ();