ccxt 4.2.99 → 4.3.1

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 (317) hide show
  1. package/README.md +3 -3
  2. package/dist/cjs/ccxt.js +1 -1
  3. package/dist/cjs/src/ascendex.js +1 -1
  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 +64 -2
  7. package/dist/cjs/src/bybit.js +1 -1
  8. package/dist/cjs/src/coinex.js +55 -60
  9. package/dist/cjs/src/kraken.js +8 -3
  10. package/dist/cjs/src/kucoin.js +19 -17
  11. package/dist/cjs/src/okx.js +76 -5
  12. package/dist/cjs/src/pro/kraken.js +2 -2
  13. package/dist/cjs/src/woo.js +40 -0
  14. package/js/ccxt.d.ts +1 -1
  15. package/js/ccxt.js +1 -1
  16. package/js/src/ascendex.js +2 -2
  17. package/js/src/binance.d.ts +3 -1
  18. package/js/src/binance.js +56 -0
  19. package/js/src/bingx.js +3 -3
  20. package/js/src/bitget.d.ts +1 -0
  21. package/js/src/bitget.js +64 -2
  22. package/js/src/bybit.js +1 -1
  23. package/js/src/coinex.js +55 -60
  24. package/js/src/kraken.js +8 -3
  25. package/js/src/kucoin.js +19 -17
  26. package/js/src/okx.d.ts +1 -0
  27. package/js/src/okx.js +76 -5
  28. package/js/src/pro/kraken.js +2 -2
  29. package/js/src/woo.d.ts +1 -0
  30. package/js/src/woo.js +40 -0
  31. package/package.json +2 -1
  32. package/.dockerignore +0 -6
  33. package/.eslintignore +0 -1
  34. package/.git-templates/hooks/pre-push +0 -55
  35. package/.gitattributes +0 -7
  36. package/CHANGELOG.md +0 -6003
  37. package/CODEOWNERS +0 -1
  38. package/CONTRIBUTING.md +0 -1099
  39. package/build.sh +0 -217
  40. package/change.sh +0 -18
  41. package/cleanup.sh +0 -18
  42. package/composer-install.sh +0 -20
  43. package/dist/ccxt.browser.js +0 -327256
  44. package/dist/ccxt.browser.min.js +0 -30
  45. package/dist/ccxt.browser.min.js.LICENSE.txt +0 -12
  46. package/doc/FAQ.rst +0 -1
  47. package/doc/Makefile +0 -20
  48. package/doc/_static/css/dark.css +0 -101
  49. package/doc/_static/css/index.css +0 -128
  50. package/doc/_static/favicon.ico +0 -0
  51. package/doc/_static/javascript/binance-portal.min.js +0 -2369
  52. package/doc/_static/javascript/index.js +0 -195
  53. package/doc/_static/javascript/jquery-ui.min.js +0 -6
  54. package/doc/ccxt.pro.install.rst +0 -1
  55. package/doc/ccxt.pro.manual.rst +0 -1665
  56. package/doc/exchange-markets-by-country.rst +0 -1423
  57. package/doc/exchange-markets.rst +0 -1441
  58. package/doc/index.rst +0 -35
  59. package/doc/install.rst +0 -1
  60. package/doc/make.bat +0 -36
  61. package/doc/manual.rst +0 -7471
  62. package/doc/readme.rst +0 -2191
  63. package/doc/requirements.txt +0 -6
  64. package/examples/ccxt.pro/html/watchTicker.html +0 -51
  65. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +0 -55
  66. package/examples/ccxt.pro/js/binance-https-proxy.js +0 -48
  67. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +0 -38
  68. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +0 -64
  69. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +0 -62
  70. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +0 -68
  71. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +0 -82
  72. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +0 -59
  73. package/examples/ccxt.pro/js/exchange-capabitities.js +0 -72
  74. package/examples/ccxt.pro/js/exchange-close.js +0 -46
  75. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +0 -30
  76. package/examples/ccxt.pro/js/gateio-watch-balance.js +0 -23
  77. package/examples/ccxt.pro/js/gateio-watch-order-book.js +0 -71
  78. package/examples/ccxt.pro/js/graceful-shutdown.js +0 -43
  79. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +0 -37
  80. package/examples/ccxt.pro/js/okex-create-futures-order.js +0 -48
  81. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +0 -54
  82. package/examples/ccxt.pro/js/okx-watch-tickers.js +0 -31
  83. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +0 -46
  84. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +0 -26
  85. package/examples/ccxt.pro/js/one-exchange-many-streams.js +0 -28
  86. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +0 -30
  87. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +0 -40
  88. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +0 -38
  89. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +0 -40
  90. package/examples/ccxt.pro/js/watch-many-orderbooks.js +0 -27
  91. package/examples/ccxt.pro/js/watch-new-trades-only.js +0 -43
  92. package/examples/ccxt.pro/js/watch-new-trades.js +0 -42
  93. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +0 -29
  94. package/examples/ccxt.pro/js/watch-vs-fetch.js +0 -29
  95. package/examples/cs/Examples.sln +0 -22
  96. package/examples/cs/c#.csproj +0 -19
  97. package/examples/html/basic-cors-proxy.html +0 -46
  98. package/examples/html/basic-inheritance.html +0 -47
  99. package/examples/html/basic-poller.html +0 -52
  100. package/examples/html/basic-rate-limiting.html +0 -49
  101. package/examples/html/basic.html +0 -43
  102. package/examples/html/binance-cors-proxy.html +0 -28
  103. package/examples/html/bitmex-browser-cors-proxy.js +0 -7
  104. package/examples/html/bitmex-cors.html +0 -46
  105. package/examples/html/tradingview-charts.html +0 -61
  106. package/examples/html/webworker/index.html +0 -97
  107. package/examples/html/webworker/worker.js +0 -43
  108. package/examples/js/advanced-error-handling.js +0 -39
  109. package/examples/js/aggregate-orderbook.js +0 -54
  110. package/examples/js/arbitrage-pairs.js +0 -130
  111. package/examples/js/basic-chart.js +0 -29
  112. package/examples/js/basic-orderbook-polling.js +0 -13
  113. package/examples/js/bcc-vs-bch.js +0 -115
  114. package/examples/js/benchmark.js +0 -104
  115. package/examples/js/binance-fetch-all-deposits.js +0 -45
  116. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +0 -34
  117. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +0 -33
  118. package/examples/js/binance-fetchTicker-delivery-vs-future.js +0 -31
  119. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +0 -41
  120. package/examples/js/binance-margin-stop-order.js +0 -39
  121. package/examples/js/binance-server-time.js +0 -34
  122. package/examples/js/binance-universal-transfer.js +0 -16
  123. package/examples/js/bitfinex-fetch-trades.js +0 -35
  124. package/examples/js/bitfinex2-fetch-trades.js +0 -35
  125. package/examples/js/bitmex-browser-cors-proxy.js +0 -7
  126. package/examples/js/bitpanda-fetchMyTrades-reduce.js +0 -36
  127. package/examples/js/bitrue-fetch-balance.js +0 -28
  128. package/examples/js/bitstamp-private-api.js +0 -115
  129. package/examples/js/bitstamp-public-api.js +0 -39
  130. package/examples/js/bittrex-balance.js +0 -50
  131. package/examples/js/bittrex-fetch-closed-orders-history.js +0 -69
  132. package/examples/js/blockchaincom-withdrawal.js +0 -59
  133. package/examples/js/build-ohlcv-bars.js +0 -48
  134. package/examples/js/builtin-rate-limiting-rest-poller.js +0 -25
  135. package/examples/js/bybit-trailing.js +0 -62
  136. package/examples/js/bybit-updated.cjs +0 -154
  137. package/examples/js/coinbase-fetch-all-balances.js +0 -36
  138. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +0 -47
  139. package/examples/js/coinex-futures.js +0 -75
  140. package/examples/js/coinone-fetch-tickers.js +0 -54
  141. package/examples/js/coinone-markets.js +0 -16
  142. package/examples/js/compare-two-exchanges-capabilities.js +0 -36
  143. package/examples/js/cors-proxy.js +0 -5
  144. package/examples/js/create-order-handle-errors.js +0 -55
  145. package/examples/js/create-order-position-with-takeprofit-stoploss.js +0 -71
  146. package/examples/js/create-order-with-retry.js +0 -65
  147. package/examples/js/create-order-ws-example.js +0 -25
  148. package/examples/js/create-orders-example.js +0 -17
  149. package/examples/js/create-trailing-amount-order.js +0 -36
  150. package/examples/js/create-trailing-percent-order.js +0 -36
  151. package/examples/js/credentials.json +0 -5
  152. package/examples/js/custom-proxy-agent-for-js.js +0 -10
  153. package/examples/js/custom-proxy-url.js +0 -23
  154. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +0 -60
  155. package/examples/js/env-variables.js +0 -26
  156. package/examples/js/error-handling.js +0 -89
  157. package/examples/js/exchange-capabilities.js +0 -135
  158. package/examples/js/exchanges-by-volume.js +0 -60
  159. package/examples/js/exchanges.js +0 -40
  160. package/examples/js/fetch-all-balances.js +0 -219
  161. package/examples/js/fetch-all-tickers-to-files-2.js +0 -53
  162. package/examples/js/fetch-all-tickers-to-files.js +0 -77
  163. package/examples/js/fetch-balance.js +0 -28
  164. package/examples/js/fetch-create-deposit-address.js +0 -101
  165. package/examples/js/fetch-from-many-exchanges-simultaneously.js +0 -21
  166. package/examples/js/fetch-funding-rate-history.js +0 -25
  167. package/examples/js/fetch-futures/prettier.config.js +0 -5
  168. package/examples/js/fetch-futures/src/index.js +0 -25
  169. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +0 -72
  170. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +0 -39
  171. package/examples/js/fetch-ohlcv.js +0 -16
  172. package/examples/js/fetch-okex-futures.js +0 -22
  173. package/examples/js/fetch-orders.js +0 -27
  174. package/examples/js/fetch-ticker-from-multiple-exchanges.js +0 -35
  175. package/examples/js/fetch-ticker-where-available.js +0 -75
  176. package/examples/js/fetch-tickers/build/index.js +0 -19
  177. package/examples/js/fetch-tickers/prettier.config.js +0 -5
  178. package/examples/js/fetch-tickers/src/index.js +0 -17
  179. package/examples/js/gateio-create-batch-order.js +0 -43
  180. package/examples/js/gateio-futures.js +0 -49
  181. package/examples/js/gateio-open-close-contract.js +0 -49
  182. package/examples/js/gateio-swaps.js +0 -74
  183. package/examples/js/gdax-fetch-trades-pagination.js +0 -29
  184. package/examples/js/hitbtc2-withdraw.js +0 -61
  185. package/examples/js/how-to-import-one-exchange-esm.js +0 -10
  186. package/examples/js/huobi-futures.js +0 -71
  187. package/examples/js/huobi-open-close-contract.js +0 -63
  188. package/examples/js/huobi-swaps.js +0 -70
  189. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +0 -98
  190. package/examples/js/hybridCJSExample.cjs +0 -19
  191. package/examples/js/hybridESMExample.js +0 -19
  192. package/examples/js/idex-fetch-balance.js +0 -13
  193. package/examples/js/instantiate-all-at-once.js +0 -46
  194. package/examples/js/instantiate-all-from-json.js +0 -31
  195. package/examples/js/kraken-create-and-close-position.js +0 -54
  196. package/examples/js/kraken-fetch-order-trades.js +0 -33
  197. package/examples/js/kraken-margin-trading.js +0 -89
  198. package/examples/js/kucoin-rate-limit.js +0 -38
  199. package/examples/js/latoken-example.js +0 -108
  200. package/examples/js/live-orderbook.js +0 -106
  201. package/examples/js/live-ticker.js +0 -80
  202. package/examples/js/live-tickers.js +0 -74
  203. package/examples/js/load-all-contracts.js +0 -41
  204. package/examples/js/load-all-symbols-at-once.js +0 -69
  205. package/examples/js/load-all-tickers-at-once.js +0 -91
  206. package/examples/js/load-markets-to-files.js +0 -57
  207. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +0 -61
  208. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +0 -91
  209. package/examples/js/margin-loan-borrow-buy-sell-repay.js +0 -70
  210. package/examples/js/market-status-and-currency-status.js +0 -29
  211. package/examples/js/ohlcv-console-chart.js +0 -29
  212. package/examples/js/okex-fetch-closed-orders-archive.js +0 -31
  213. package/examples/js/okex-transfer.js +0 -51
  214. package/examples/js/okx-poll-fetch-my-trades.js +0 -37
  215. package/examples/js/okx-poll-rate-limit.js +0 -48
  216. package/examples/js/order-book-extra-level-depth-param.js +0 -20
  217. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +0 -49
  218. package/examples/js/poll-ohlcv.js +0 -43
  219. package/examples/js/poloniex-fetch-order-books.js +0 -35
  220. package/examples/js/poloniex-limits-amount-min.js +0 -62
  221. package/examples/js/proxy-round-robin.js +0 -98
  222. package/examples/js/proxy-usage.js +0 -32
  223. package/examples/js/sample-local-proxy-server-with-cors.js +0 -12
  224. package/examples/js/search-all-exchanges.js +0 -159
  225. package/examples/js/shared-load-markets.js +0 -80
  226. package/examples/js/sort-swap-markets-by-hourly-price-change.js +0 -55
  227. package/examples/js/symbols.js +0 -110
  228. package/examples/js/theocean.js +0 -41
  229. package/examples/js/tickers.js +0 -106
  230. package/examples/js/validate-paginated-data.js +0 -61
  231. package/examples/js/watch-OHLCV-For-Symbols.js +0 -15
  232. package/examples/js/watch-OHLCV.js +0 -12
  233. package/examples/js/watch-OrderBook-For-Symbols.js +0 -11
  234. package/examples/js/watch-Trades-For-Symbols.js +0 -11
  235. package/examples/js/watch-tickers.js +0 -11
  236. package/examples/js/watchOHLCVForSymbols.js +0 -15
  237. package/examples/js/watchOrderBookForSymbols.js +0 -11
  238. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +0 -2
  239. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +0 -1
  240. package/examples/js/watchPositions-many-exchanges-continuosly.js +0 -49
  241. package/examples/js/watchPositions.d.ts +0 -2
  242. package/examples/js/watchPositions.d.ts.map +0 -1
  243. package/examples/js/watchPositions.js +0 -13
  244. package/examples/js/watchPositionsForSymbols.d.ts +0 -2
  245. package/examples/js/watchPositionsForSymbols.d.ts.map +0 -1
  246. package/examples/js/watchPositionsForSymbols.js +0 -14
  247. package/examples/js/watchTradesForSymbols.js +0 -11
  248. package/examples/js/withdraw-from-one-exchange-to-another.js +0 -50
  249. package/examples/php/README.md +0 -7
  250. package/examples/py/README.md +0 -15
  251. package/examples/py/playing_with_ccxt_example.ipynb +0 -222
  252. package/examples/ts/.eslintrc +0 -111
  253. package/examples/ts/benchmark.ts +0 -134
  254. package/examples/ts/build-ohlcv-bars.ts +0 -53
  255. package/examples/ts/cli.ts +0 -397
  256. package/examples/ts/compare-two-exchanges-capabilities.ts +0 -36
  257. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +0 -89
  258. package/examples/ts/create-order-ws-example.ts +0 -33
  259. package/examples/ts/create-orders-example.ts +0 -21
  260. package/examples/ts/create-trailing-amount-order.ts +0 -37
  261. package/examples/ts/create-trailing-percent-order.ts +0 -37
  262. package/examples/ts/custom-proxy-agent-for-js.ts +0 -14
  263. package/examples/ts/fetch-futures/package-lock.json +0 -116
  264. package/examples/ts/fetch-futures/package.json +0 -34
  265. package/examples/ts/fetch-futures/prettier.config.js +0 -4
  266. package/examples/ts/fetch-futures/src/index.ts +0 -28
  267. package/examples/ts/fetch-futures/tsconfig.json +0 -28
  268. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +0 -44
  269. package/examples/ts/fetch-ohlcv.ts +0 -17
  270. package/examples/ts/fetch-tickers/package-lock.json +0 -116
  271. package/examples/ts/fetch-tickers/package.json +0 -34
  272. package/examples/ts/fetch-tickers/prettier.config.js +0 -4
  273. package/examples/ts/fetch-tickers/src/index.ts +0 -21
  274. package/examples/ts/fetch-tickers/tsconfig.json +0 -28
  275. package/examples/ts/how-to-import-one-exchange-esm.ts +0 -11
  276. package/examples/ts/kraken-create-and-close-position.ts +0 -69
  277. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +0 -72
  278. package/examples/ts/nextjs-page-router/.eslintrc.json +0 -3
  279. package/examples/ts/nextjs-page-router/README.md +0 -43
  280. package/examples/ts/nextjs-page-router/next.config.js +0 -6
  281. package/examples/ts/nextjs-page-router/package-lock.json +0 -7425
  282. package/examples/ts/nextjs-page-router/package.json +0 -28
  283. package/examples/ts/nextjs-page-router/postcss.config.js +0 -6
  284. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  285. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +0 -6
  286. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +0 -13
  287. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +0 -46
  288. package/examples/ts/nextjs-page-router/src/pages/index.tsx +0 -8
  289. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +0 -61
  290. package/examples/ts/nextjs-page-router/src/styles/globals.css +0 -27
  291. package/examples/ts/nextjs-page-router/tailwind.config.ts +0 -20
  292. package/examples/ts/nextjs-page-router/tsconfig.json +0 -22
  293. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +0 -62
  294. package/examples/ts/proxy-usage.ts +0 -41
  295. package/examples/ts/sample-local-proxy-server-with-cors.ts +0 -15
  296. package/examples/ts/watch-OHLCV-For-Symbols.ts +0 -17
  297. package/examples/ts/watch-OHLCV.ts +0 -14
  298. package/examples/ts/watch-OrderBook-For-Symbols.ts +0 -13
  299. package/examples/ts/watch-Trades-For-Symbols.ts +0 -13
  300. package/examples/ts/watch-tickers.ts +0 -13
  301. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +0 -53
  302. package/examples/ts/watchPositions.ts +0 -15
  303. package/examples/ts/watchPositionsForSymbols.ts +0 -16
  304. package/examples/tsconfig.json +0 -27
  305. package/examples2md.js +0 -79
  306. package/gource.sh +0 -3
  307. package/index.html +0 -7
  308. package/jsdoc2md.js +0 -122
  309. package/multilang.sh +0 -164
  310. package/pro-tests.json +0 -57
  311. package/pyproject.toml +0 -8
  312. package/rollup.config.js +0 -60
  313. package/skip-tests.json +0 -1653
  314. package/test-commonjs.cjs +0 -65
  315. package/tests-manager.sh +0 -96
  316. package/tsconfig.json +0 -111
  317. package/webpack.config.js +0 -46
@@ -1,397 +0,0 @@
1
- import fs from 'fs'
2
- import path from 'path'
3
- import ansi from 'ansicolor'
4
- import asTable from 'as-table'
5
- import ololog from 'ololog'
6
- import ccxt from '../../ts/ccxt.js'
7
- import { Agent } from 'https'
8
-
9
- const fsPromises = fs.promises;
10
- ansi.nice
11
- const log = ololog.configure ({ locate: false }).unlimited
12
- const { ExchangeError , NetworkError} = ccxt
13
- //-----------------------------------------------------------------------------
14
-
15
- let [processPath, , exchangeId, methodName, ... params] = process.argv.filter (x => !x.startsWith ('--'))
16
- , verbose = process.argv.includes ('--verbose')
17
- , debug = process.argv.includes ('--debug')
18
- , poll = process.argv.includes ('--poll')
19
- , no_send = process.argv.includes ('--no-send')
20
- , no_load_markets = process.argv.includes ('--no-load-markets')
21
- , details = process.argv.includes ('--details')
22
- , no_table = process.argv.includes ('--no-table')
23
- , table = process.argv.includes ('--table')
24
- , iso8601 = process.argv.includes ('--iso8601')
25
- , cors = process.argv.includes ('--cors')
26
- , cache_markets = process.argv.includes ('--cache-markets')
27
- , testnet =
28
- process.argv.includes ('--test') ||
29
- process.argv.includes ('--testnet') ||
30
- process.argv.includes ('--sandbox')
31
- , signIn = process.argv.includes ('--sign-in') || process.argv.includes ('--signIn')
32
- , isSpot = process.argv.includes ('--spot')
33
- , isSwap = process.argv.includes ('--swap')
34
- , isFuture = process.argv.includes ('--future')
35
- , isOption = process.argv.includes ('--option')
36
- , shouldCreateRequestReport = process.argv.includes ('--report')
37
- , shouldCreateResponseReport = process.argv.includes ('--response')
38
- , shouldCreateBoth = process.argv.includes ('--static')
39
-
40
- //-----------------------------------------------------------------------------
41
-
42
- log ((new Date ()).toISOString())
43
- log ('Node.js:', process.version)
44
- log ('CCXT v' + ccxt.version)
45
-
46
- //-----------------------------------------------------------------------------
47
-
48
- process.on ('uncaughtException', e => { log.bright.red.error (e); log.red.error (e.message); process.exit (1) })
49
- process.on ('unhandledRejection', e => { log.bright.red.error (e); log.red.error ((e as any).message); process.exit (1) })
50
-
51
- //-----------------------------------------------------------------------------
52
-
53
- // set up keys and settings, if any
54
- const keysGlobal = path.resolve ('keys.json')
55
- const keysLocal = path.resolve ('keys.local.json')
56
-
57
- const keysFile = fs.existsSync (keysLocal) ? keysLocal : keysGlobal
58
- const settingsFile = fs.readFileSync(keysFile);
59
- // eslint-disable-next-line import/no-dynamic-require, no-path-concat
60
- let settings = JSON.parse(settingsFile.toString())
61
- settings = settings[exchangeId] || {}
62
-
63
-
64
- //-----------------------------------------------------------------------------
65
-
66
- const timeout = 30000
67
- let exchange = undefined as any
68
-
69
-
70
-
71
- const httpsAgent = new Agent ({
72
- ecdhCurve: 'auto',
73
- keepAlive: true,
74
- })
75
-
76
-
77
- // check here if we have a arg like this: binance.fetchOrders()
78
- const callRegex = /\s*(\w+)\s*\.\s*(\w+)\s*\(([^()]*)\)/
79
- if (callRegex.test (exchangeId)) {
80
- const res = callRegex.exec (exchangeId) as any;
81
- exchangeId = res[1];
82
- methodName = res[2];
83
- params = res[3].split(",").map(x => x.trim());
84
- }
85
-
86
- try {
87
- if ((ccxt.pro as any).exchanges.includes(exchangeId)) {
88
- exchange = new (ccxt.pro)[exchangeId] ({ timeout, httpsAgent, ... settings })
89
- } else {
90
- exchange = new (ccxt)[exchangeId] ({ timeout, httpsAgent, ... settings })
91
- }
92
-
93
- if (exchange === undefined) {
94
- process.exit ()
95
- }
96
-
97
- if (isSpot) {
98
- exchange.options['defaultType'] = 'spot';
99
- } else if (isSwap) {
100
- exchange.options['defaultType'] = 'swap';
101
- } else if (isFuture) {
102
- exchange.options['defaultType'] = 'future';
103
- } else if (isOption) {
104
- exchange.options['defaultType'] = 'option';
105
- }
106
-
107
- // check auth keys in env var
108
- const requiredCredentials = exchange.requiredCredentials;
109
- for (const [credential, isRequired] of Object.entries (requiredCredentials)) {
110
- if (isRequired && exchange[credential] === undefined) {
111
- const credentialEnvName = (exchangeId + '_' + credential).toUpperCase () // example: KRAKEN_APIKEY
112
- let credentialValue = process.env[credentialEnvName]
113
- if (credentialValue) {
114
- if (credentialValue.indexOf('---BEGIN') > -1) {
115
- credentialValue = (credentialValue as any).replaceAll('\\n', '\n');
116
- }
117
- exchange[credential] = credentialValue
118
- }
119
- }
120
- }
121
-
122
- if (testnet) {
123
- exchange.setSandboxMode (true)
124
- }
125
-
126
- } catch (e) {
127
-
128
- log.red (e)
129
- printUsage ()
130
- process.exit ()
131
- }
132
-
133
- //-----------------------------------------------------------------------------
134
-
135
- function createRequestTemplate(exchange, methodName, args, result) {
136
- const final = {
137
- 'description': 'Fill this with a description of the method call',
138
- 'method': methodName,
139
- 'url': exchange.last_request_url ?? '',
140
- 'input': args,
141
- 'output': exchange.last_request_body ?? undefined
142
- }
143
- log('Report: (paste inside static/request/' + exchange.id + '.json ->' + methodName + ')')
144
- log.green('-------------------------------------------')
145
- log (JSON.stringify (final, null, 2))
146
- log.green('-------------------------------------------')
147
- }
148
-
149
- //-----------------------------------------------------------------------------
150
-
151
- function createResponseTemplate(exchange, methodName, args, result) {
152
- const final = {
153
- 'description': 'Fill this with a description of the method call',
154
- 'method': methodName,
155
- 'input': args,
156
- 'httpResponse': exchange.last_json_response ?? exchange.last_http_response,
157
- 'parsedResponse': result
158
- }
159
- log('Report: (paste inside static/response/' + exchange.id + '.json ->' + methodName + ')')
160
- log.green('-------------------------------------------')
161
- log (JSON.stringify (final, function(k, v) { return v === undefined ? null : v; }, 2))
162
- log.green('-------------------------------------------')
163
- }
164
-
165
- //-----------------------------------------------------------------------------
166
-
167
- function printSupportedExchanges () {
168
- log ('Supported exchanges:', (ccxt.exchanges.join (', ') as any).green)
169
- }
170
-
171
- //-----------------------------------------------------------------------------
172
-
173
- function printUsage () {
174
- log ('This is an example of a basic command-line interface to all exchanges')
175
- log ('Usage: node', process.argv[1], ('id' as any).green, ('method' as any).yellow, ('"param1" param2 "param3" param4 ...' as any).blue)
176
- log ('Examples:')
177
- log ('node', process.argv[1], 'okcoin fetchOHLCV BTC/USD 15m')
178
- log ('node', process.argv[1], 'bitfinex fetchBalance')
179
- log ('node', process.argv[1], 'kraken fetchOrderBook ETH/BTC')
180
- printSupportedExchanges ()
181
- log ('Supported options:')
182
- log ('--verbose Print verbose output')
183
- log ('--debug Print debugging output')
184
- log ('--poll Repeat continuously in rate-limited mode')
185
- log ('--no-send Print the request but do not actually send it to the exchange (sets verbose and load-markets)')
186
- log ('--no-load-markets Do not pre-load markets (for debugging)')
187
- log ('--details Print detailed fetch responses')
188
- log ('--no-table Do not print the fetch response as a table')
189
- log ('--table Print the fetch response as a table')
190
- log ('--iso8601 Print timestamps as ISO8601 datetimes')
191
- log ('--cors use CORS proxy for debugging')
192
- log ('--sign-in Call signIn() if any')
193
- log ('--sandbox Use the exchange sandbox if available, same as --testnet')
194
- log ('--testnet Use the exchange testnet if available, same as --sandbox')
195
- log ('--test Use the exchange testnet if available, same as --sandbox')
196
- log ('--cache-markets Cache the loaded markets in the .cache folder in the current directory')
197
- }
198
-
199
- //-----------------------------------------------------------------------------
200
-
201
- const printHumanReadable = (exchange, result) => {
202
- if (!no_table && Array.isArray (result) || table) {
203
- result = Object.values (result)
204
- let arrayOfObjects = (typeof result[0] === 'object')
205
-
206
- if (details)
207
- result.forEach (object => {
208
- if (arrayOfObjects)
209
- log ('-------------------------------------------')
210
- log (object)
211
- })
212
-
213
- if (arrayOfObjects || table && Array.isArray (result)) {
214
- const configuredAsTable = (asTable as any).configure ({
215
- delimiter: (' | ' as any).lightGray.dim,
216
- right: true,
217
- title: x => (String (x) as any).lightGray,
218
- dash: ('-' as any).lightGray.dim,
219
- print: x => {
220
- if (typeof x === 'object') {
221
- const j = JSON.stringify (x).trim ()
222
- if (j.length < 100) return j
223
- }
224
- return String (x)
225
- }
226
- })
227
- log (result.length > 0 ? configuredAsTable (result.map (element => {
228
- let keys = Object.keys (element)
229
- delete element['info']
230
- keys.forEach (key => {
231
- if (!iso8601)
232
- return element[key]
233
- try {
234
- const iso8601 = exchange.iso8601 (element[key])
235
- if (iso8601.match (/^20[0-9]{2}[-]?/))
236
- element[key] = iso8601
237
- else
238
- throw new Error ('wrong date')
239
- } catch (e) {
240
- return element[key]
241
- }
242
- })
243
- return element
244
- })) : result)
245
- log (result.length, 'objects');
246
- } else {
247
- console.dir (result, { depth: null })
248
- log (result.length, 'objects');
249
- }
250
- } else {
251
- console.dir (result, { depth: null, maxArrayLength: null })
252
- }
253
- }
254
-
255
- //-----------------------------------------------------------------------------
256
-
257
- async function run () {
258
-
259
- if (!exchangeId) {
260
-
261
- printUsage ()
262
-
263
- } else {
264
-
265
- let args = params
266
- .map (s => s.match (/^[0-9]{4}[-][0-9]{2}[-][0-9]{2}[T\s]?[0-9]{2}[:][0-9]{2}[:][0-9]{2}/g) ? exchange.parse8601 (s) : s)
267
- .map (s => (() => {
268
- if (s.match ( /^\d+$/g)) return s < Number.MAX_SAFE_INTEGER ? Number (s) : s
269
- try {return eval ('(() => (' + s + ')) ()') } catch (e) { return s }
270
- }) ())
271
-
272
- const www = Array.isArray (exchange.urls.www) ? exchange.urls.www[0] : exchange.urls.www
273
-
274
- if (cors) {
275
- exchange.proxy = 'https://cors-anywhere.herokuapp.com/';
276
- exchange.origin = exchange.uuid ()
277
- }
278
-
279
- no_load_markets = no_send ? true : no_load_markets
280
-
281
- if (debug) {
282
- exchange.verbose = verbose
283
- }
284
-
285
- const path = '.cache/' + exchangeId + '-markets.json'
286
-
287
- if (!no_load_markets) {
288
- try {
289
- await fsPromises.access (path, fs.constants.R_OK)
290
- exchange.markets = JSON.parse ((await fsPromises.readFile (path)).toString())
291
- } catch {
292
- await exchange.loadMarkets ()
293
- if (cache_markets) {
294
- await fsPromises.writeFile (path, JSON.stringify (exchange.markets))
295
- }
296
- }
297
- }
298
-
299
- if (signIn && exchange.has.signIn) {
300
- await exchange.signIn ()
301
- }
302
-
303
- exchange.verbose = verbose
304
-
305
- if (no_send) {
306
-
307
- exchange.verbose = no_send
308
- exchange.fetch = function fetch (url, method = 'GET', headers = undefined, body = undefined) {
309
- log.dim.noLocate ('-------------------------------------------')
310
- log.dim.noLocate (exchange.iso8601 (exchange.milliseconds ()))
311
- log.green.unlimited ({
312
- url,
313
- method,
314
- headers,
315
- body,
316
- })
317
- }
318
- }
319
-
320
- if (methodName) {
321
-
322
- if (typeof exchange[methodName] === 'function') {
323
-
324
- log (exchange.id + '.' + methodName, '(' + args.join (', ') + ')')
325
-
326
- let start = exchange.milliseconds ()
327
- let end = exchange.milliseconds ()
328
-
329
- let i = 0;
330
-
331
- let isWsMethod = false
332
- if (methodName.startsWith("watch")) { // handle WS methods
333
- isWsMethod = true;
334
- }
335
-
336
- while (true) {
337
- try {
338
- const result = await exchange[methodName] (... args)
339
- end = exchange.milliseconds ()
340
- if (!isWsMethod) {
341
- log (exchange.iso8601 (end), 'iteration', i++, 'passed in', end - start, 'ms\n')
342
- }
343
- printHumanReadable (exchange, result)
344
- if (!isWsMethod) {
345
- log (exchange.iso8601 (end), 'iteration', i, 'passed in', end - start, 'ms\n')
346
- }
347
- if (shouldCreateRequestReport || shouldCreateBoth) {
348
- createRequestTemplate(exchange, methodName, args, result)
349
- }
350
- if (shouldCreateResponseReport || shouldCreateBoth) {
351
- createResponseTemplate(exchange, methodName, args, result)
352
- }
353
- start = end
354
- } catch (e) {
355
- if (e instanceof ExchangeError) {
356
- log.red (e.constructor.name, e.message)
357
- } else if (e instanceof NetworkError) {
358
- log.yellow (e.constructor.name, e.message)
359
- }
360
-
361
- log.dim ('---------------------------------------------------')
362
-
363
- // rethrow for call-stack // other errors
364
- throw e
365
-
366
- }
367
-
368
- if (debug) {
369
- const keys = Object.keys (httpsAgent.freeSockets)
370
- const firstKey = keys[0]
371
- let httpAgent = httpsAgent.freeSockets[firstKey] as any;
372
- log (firstKey, httpAgent.length)
373
- }
374
-
375
- if (!poll && !isWsMethod){
376
- break
377
- }
378
- }
379
-
380
- } else if (exchange[methodName] === undefined) {
381
- log.red (exchange.id + '.' + methodName + ': no such property')
382
- } else {
383
- printHumanReadable (exchange, exchange[methodName])
384
- }
385
- } else {
386
- log (exchange)
387
- }
388
- }
389
-
390
- }
391
-
392
- //-----------------------------------------------------------------------------
393
-
394
- run ()
395
-
396
- export {
397
- }
@@ -1,36 +0,0 @@
1
- import ccxt from '../../js/ccxt.js';
2
-
3
- // AUTO-TRANSPILE //
4
-
5
- async function example () {
6
- const prefix = '-';
7
- const exchange_1 = new ccxt.okx ();
8
- const exchange_2 = new ccxt.htx ();
9
- const keys_1 = Object.keys (exchange_1.has);
10
- const keys_2 = Object.keys (exchange_2.has);
11
- // check missing from exchange-1
12
- console.log ('### checking missing functionalities from exchange-1:', exchange_1.id);
13
- for (let i = 0; i < keys_2.length; i++) {
14
- const key = keys_2[i];
15
- if (exchange_2.has[key]) {
16
- if (!keys_1.includes (key)) {
17
- console.log (prefix, key, 'does not exist in', exchange_1.id, 'as opposed to', exchange_2.id);
18
- } else if (exchange_2.has[key] !== exchange_1.has[key]) {
19
- console.log (prefix, key, '> ', exchange_1.id, ':', exchange_1.has[key], ',', exchange_2.id, ':', exchange_2.has[key]);
20
- }
21
- }
22
- }
23
- // check missing from exchange-2
24
- console.log ('### checking missing functionalities from exchange-2:', exchange_2.id);
25
- for (let i = 0; i < keys_1.length; i++) {
26
- const key = keys_1[i];
27
- if (exchange_1.has[key]) {
28
- if (!keys_2.includes (key)) {
29
- console.log (prefix, key, 'does not exist in', exchange_2.id, 'as opposed to', exchange_1.id);
30
- } else if (exchange_1.has[key] !== exchange_2.has[key]) {
31
- console.log (prefix, key, '> ', exchange_2.id, ':', exchange_2.has[key], ',', exchange_1.id, ':', exchange_1.has[key]);
32
- }
33
- }
34
- }
35
- }
36
- await example ();
@@ -1,89 +0,0 @@
1
- // @ts-nocheck
2
- import ccxt from '../../js/ccxt.js';
3
-
4
- // AUTO-TRANSPILE //
5
-
6
- console.log ('CCXT Version:', ccxt.version);
7
-
8
- // ------------------------------------------------------------------------------
9
-
10
- async function example () {
11
- // at this moment, only OKX support embedded stop-loss & take-profit orders in unified manner. other exchanges are being added actively and will be available soon.
12
- const exchange = new ccxt.okx ({
13
- "apiKey": "YOUR_API_KEY",
14
- "secret": "YOUR_API_SECRET",
15
- "password": "YOUR_API_PASSWORD", // if exchange does not require password, comment out this line
16
- });
17
-
18
- const symbol = 'DOGE/USDT:USDT';
19
- const side = 'buy'; // 'buy' | 'sell'
20
- const order_type = 'limit'; // 'market' | 'limit'
21
- const amount = 1; // how many contracts (see `market(symbol).contractSize` to find out coin portion per one contract)
22
-
23
- await exchange.loadMarkets ();
24
- const market = exchange.market (symbol);
25
-
26
- const ticker = await exchange.fetchTicker (symbol);
27
-
28
- const last_price = ticker['last'];
29
- const ask_price = ticker['ask'];
30
- const bid_price = ticker['bid'];
31
-
32
- // if order_type is 'market', then price is not needed
33
- let price = undefined;
34
- // if order_type is 'limit', then set a price at your desired level
35
- if (order_type === 'limit') {
36
- price = (side === 'buy') ? bid_price * 0.95 : ask_price * 1.05; // i.e. 5% from current price
37
- }
38
-
39
- // set trigger price for stop-loss/take-profit to 2% from current price
40
- // (note, across different exchanges "trigger" price can be also mentioned with different synonyms, like "activation price", "stop price", "conditional price", etc. )
41
- const stop_loss_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 0.98 : 1.02);
42
- const take_profit_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 1.02 : 0.98);
43
-
44
- // when symbol's price reaches your predefined "trigger price", stop-loss order would be activated as a "market order". but if you want it to be activated as a "limit order", then set a 'price' parameter for it
45
- const params = {
46
- 'stopLoss': {
47
- 'triggerPrice': stop_loss_trigger_price,
48
- // set a 'price' to act as limit order, otherwise remove it for a market order
49
- 'price': stop_loss_trigger_price * 0.98,
50
- },
51
- 'takeProfit': {
52
- 'triggerPrice': take_profit_trigger_price,
53
- // set a 'price' to act as limit order, otherwise remove it for a market order
54
- 'price': take_profit_trigger_price * 0.98,
55
- },
56
- // note that some exchanges might require some exchange specific parameter when opening a position, i.e.:
57
- // 'posSide': 'long', // for phemex hedge-mode api
58
- };
59
-
60
- const position_amount = market['contractSize'] * amount;
61
- const position_value = position_amount * last_price;
62
- // log
63
- console.log ('Going to open a position', 'for', amount, 'contracts worth', position_amount, market['base'], '~', position_value, market['settle'], 'using', side, order_type, 'order (', (order_type === 'limit' ? exchange.priceToPrecision (symbol, price) : ''), '), using the following params:');
64
- console.log (params);
65
- console.log ('-----------------------------------------------------------------------');
66
-
67
- // exchange.verbose = True // uncomment for debugging purposes if necessary
68
-
69
- try {
70
- const created_order = await exchange.createOrder (symbol, order_type, side, amount, price, params);
71
- console.log ("Created an order", created_order);
72
-
73
- // Fetch all your open orders for this symbol
74
- // - use 'fetchOpenOrders' or 'fetchOrders' and filter with 'open' status
75
- // - note, that some exchanges might return one order object with embedded stoploss/takeprofit fields, while other exchanges might have separate stoploss/takeprofit order objects
76
- const all_open_orders = await exchange.fetchOpenOrders (symbol);
77
- console.log ("Fetched all your orders for this symbol", all_open_orders);
78
-
79
- // To cancel a limit order, use "exchange.cancel_order(created_order['id'], symbol)""
80
- } catch (e) {
81
- console.log (e.toString ());
82
- }
83
- }
84
-
85
-
86
- await example ();
87
-
88
- // NOTES:
89
- // - Sometimes you might experience, when their stop-loss/take-profit order might not become activated, even though on chart the price had crossed that "trigger-price" order was not executed . That happens because some exchange might be using mark-price (instead of last-price) as a reference-price, so that mark-price might reach your trigger-price and it would activate your SL/TP order (even though on your symbol's chart you are viewing the "last-price" by default, which could have different movements than the mark-price).
@@ -1,33 +0,0 @@
1
- import ccxt from '../../js/ccxt.js';
2
-
3
- // AUTO-TRANSPILE //
4
-
5
- async function example () {
6
- const exchange = new ccxt.pro.binance ({
7
- 'apiKey': 'MY_API_KEY',
8
- 'secret': 'MY_SECRET',
9
- });
10
- exchange.setSandboxMode (true);
11
- exchange.verbose = true; // uncomment for debugging purposes if necessary
12
- // load markets
13
- await exchange.loadMarkets ();
14
- const symbol = 'ETH/USDT';
15
- const type = 'limit';
16
- const side = 'buy';
17
- const amount = 0.01;
18
- let price = 1000;
19
- let orders = [];
20
- for (let i=1; i<5; i++) {
21
- const response = await exchange.createOrderWs (
22
- symbol,
23
- type,
24
- side,
25
- amount,
26
- price
27
- );
28
- price += i;
29
- orders.push (response);
30
- }
31
- console.log (orders);
32
- }
33
- await example ();
@@ -1,21 +0,0 @@
1
- import ccxt from '../../js/ccxt.js';
2
-
3
- // AUTO-TRANSPILE //
4
-
5
- async function example () {
6
- const exchange = new ccxt.binance ({
7
- 'apiKey': 'MY_API_KEY',
8
- 'secret': 'MY_SECRET',
9
- });
10
- exchange.setSandboxMode (true);
11
- await exchange.loadMarkets ();
12
- exchange.verbose = true; // uncomment for debugging purposes if necessary
13
- const orders = await exchange.createOrders (
14
- [
15
- { 'symbol': 'LTC/USDT:USDT', 'type': 'limit', 'side': 'buy', 'amount': 10, 'price': 55 },
16
- { 'symbol': 'ETH/USDT:USDT', 'type': 'market', 'side': 'buy', 'amount': 0.5 },
17
- ]
18
- );
19
- console.log (orders);
20
- }
21
- await example ();
@@ -1,37 +0,0 @@
1
- import ccxt from '../../js/ccxt.js';
2
-
3
- // AUTO-TRANSPILE //
4
-
5
- async function example () {
6
- const exchange = new ccxt.bingx ({
7
- 'apiKey': 'MY_API_KEY',
8
- 'secret': 'MY_SECRET',
9
- });
10
- // exchange.setSandboxMode (true);
11
- // exchange.verbose = true; // uncomment for debugging purposes if necessary
12
- await exchange.loadMarkets ();
13
- const symbol = 'BTC/USDT:USDT';
14
- const order_type = 'market';
15
- const side = 'sell';
16
- const amount = 0.0001;
17
- const price = undefined;
18
- const reduceOnly = true;
19
- const trailingAmount = 100;
20
- // const trailingTriggerPrice = undefined; // not supported on all exchanges
21
- const params = {
22
- 'reduceOnly': reduceOnly,
23
- 'trailingAmount': trailingAmount,
24
- // 'trailingTriggerPrice': trailingTriggerPrice,
25
- };
26
- try {
27
- const create_order = await exchange.createOrder (symbol, order_type, side, amount, price, params);
28
- // Alternatively use the createTrailingAmountOrder method:
29
- // const create_order = await exchange.createTrailingAmountOrder (symbol, order_type, side, amount, price, trailingAmount, trailingTriggerPrice, {
30
- // 'reduceOnly': reduceOnly,
31
- // });
32
- console.log (create_order);
33
- } catch (e) {
34
- console.log (e.toString ());
35
- }
36
- }
37
- await example ();
@@ -1,37 +0,0 @@
1
- import ccxt from '../../js/ccxt.js';
2
-
3
- // AUTO-TRANSPILE //
4
-
5
- async function example () {
6
- const exchange = new ccxt.bingx ({
7
- 'apiKey': 'MY_API_KEY',
8
- 'secret': 'MY_SECRET',
9
- });
10
- // exchange.setSandboxMode (true);
11
- // exchange.verbose = true; // uncomment for debugging purposes if necessary
12
- await exchange.loadMarkets ();
13
- const symbol = 'BTC/USDT:USDT';
14
- const order_type = 'market';
15
- const side = 'sell';
16
- const amount = 0.0001;
17
- const price = undefined;
18
- const reduceOnly = true;
19
- const trailingPercent = 10;
20
- // const trailingTriggerPrice = undefined; // not supported on all exchanges
21
- const params = {
22
- 'reduceOnly': reduceOnly,
23
- 'trailingPercent': trailingPercent,
24
- // 'trailingTriggerPrice': trailingTriggerPrice,
25
- };
26
- try {
27
- const create_order = await exchange.createOrder (symbol, order_type, side, amount, price, params);
28
- // Alternatively use the createTrailingAmountOrder method:
29
- // const create_order = await exchange.createTrailingPercentOrder (symbol, order_type, side, amount, price, trailingPercent, trailingTriggerPrice, {
30
- // 'reduceOnly': reduceOnly,
31
- // });
32
- console.log (create_order);
33
- } catch (e) {
34
- console.log (e.toString ());
35
- }
36
- }
37
- await example ();
@@ -1,14 +0,0 @@
1
- // @ts-nocheck
2
-
3
- // to set custom "proxy-agent" for ccxt
4
-
5
- import ccxt from 'ccxt';
6
- import HttpProxyAgent from 'http-proxy-agent';
7
- import HttpsProxyAgent from 'https-proxy-agent';
8
-
9
- const proxy = 'http://1.2.3.4:5678';
10
- const agent = new HttpProxyAgent (proxy); // or HttpsProxyAgent if you need http
11
- // then pass it through constructor:
12
- const kraken = new ccxt.kraken ({ agent });
13
- // or set it later:
14
- kraken.agent = agent;