ccxt 4.2.73 → 4.2.75

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (309) hide show
  1. package/CHANGELOG.md +206 -10
  2. package/README.md +10 -9
  3. package/build.sh +1 -1
  4. package/dist/ccxt.browser.js +1042 -297
  5. package/dist/ccxt.browser.min.js +3 -3
  6. package/dist/cjs/ccxt.js +4 -1
  7. package/dist/cjs/src/abstract/tradeogre.js +9 -0
  8. package/dist/cjs/src/ascendex.js +3 -2
  9. package/dist/cjs/src/base/Exchange.js +1 -1
  10. package/dist/cjs/src/bitget.js +62 -50
  11. package/dist/cjs/src/bitmart.js +1 -0
  12. package/dist/cjs/src/bybit.js +90 -30
  13. package/dist/cjs/src/coinbaseinternational.js +1 -1
  14. package/dist/cjs/src/coinex.js +4 -3
  15. package/dist/cjs/src/gate.js +1 -0
  16. package/dist/cjs/src/htx.js +16 -9
  17. package/dist/cjs/src/hyperliquid.js +2 -1
  18. package/dist/cjs/src/kraken.js +3 -3
  19. package/dist/cjs/src/kucoin.js +1 -1
  20. package/dist/cjs/src/pro/krakenfutures.js +8 -7
  21. package/dist/cjs/src/tradeogre.js +632 -0
  22. package/examples/README.md +308 -0
  23. package/examples/ccxt.pro/html/watchTicker.html +51 -0
  24. package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +55 -0
  25. package/examples/ccxt.pro/js/binance-https-proxy.js +48 -0
  26. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +38 -0
  27. package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +64 -0
  28. package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +62 -0
  29. package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +68 -0
  30. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +82 -0
  31. package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +59 -0
  32. package/examples/ccxt.pro/js/exchange-capabitities.js +72 -0
  33. package/examples/ccxt.pro/js/exchange-close.js +46 -0
  34. package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +30 -0
  35. package/examples/ccxt.pro/js/gateio-watch-balance.js +23 -0
  36. package/examples/ccxt.pro/js/gateio-watch-order-book.js +71 -0
  37. package/examples/ccxt.pro/js/graceful-shutdown.js +43 -0
  38. package/examples/ccxt.pro/js/many-exchanges-many-streams.js +37 -0
  39. package/examples/ccxt.pro/js/okex-create-futures-order.js +48 -0
  40. package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +54 -0
  41. package/examples/ccxt.pro/js/okx-watch-tickers.js +31 -0
  42. package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +46 -0
  43. package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +26 -0
  44. package/examples/ccxt.pro/js/one-exchange-many-streams.js +28 -0
  45. package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +30 -0
  46. package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +40 -0
  47. package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +38 -0
  48. package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +40 -0
  49. package/examples/ccxt.pro/js/watch-many-orderbooks.js +27 -0
  50. package/examples/ccxt.pro/js/watch-new-trades-only.js +43 -0
  51. package/examples/ccxt.pro/js/watch-new-trades.js +42 -0
  52. package/examples/ccxt.pro/js/watch-trades-many-symbols.js +29 -0
  53. package/examples/ccxt.pro/js/watch-vs-fetch.js +29 -0
  54. package/examples/cs/Examples.sln +22 -0
  55. package/examples/cs/c#.csproj +19 -0
  56. package/examples/html/basic-cors-proxy.html +46 -0
  57. package/examples/html/basic-inheritance.html +47 -0
  58. package/examples/html/basic-poller.html +52 -0
  59. package/examples/html/basic-rate-limiting.html +49 -0
  60. package/examples/html/basic.html +43 -0
  61. package/examples/html/binance-cors-proxy.html +28 -0
  62. package/examples/html/bitmex-browser-cors-proxy.js +7 -0
  63. package/examples/html/bitmex-cors.html +46 -0
  64. package/examples/html/tradingview-charts.html +61 -0
  65. package/examples/html/webworker/index.html +97 -0
  66. package/examples/html/webworker/worker.js +43 -0
  67. package/examples/js/README.md +15 -0
  68. package/examples/js/advanced-error-handling.js +39 -0
  69. package/examples/js/aggregate-orderbook.js +54 -0
  70. package/examples/js/arbitrage-pairs.js +130 -0
  71. package/examples/js/basic-chart.js +29 -0
  72. package/examples/js/basic-orderbook-polling.js +13 -0
  73. package/examples/js/bcc-vs-bch.js +115 -0
  74. package/examples/js/binance-fetch-all-deposits.js +45 -0
  75. package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +34 -0
  76. package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +33 -0
  77. package/examples/js/binance-fetchTicker-delivery-vs-future.js +31 -0
  78. package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +41 -0
  79. package/examples/js/binance-margin-stop-order.js +39 -0
  80. package/examples/js/binance-server-time.js +34 -0
  81. package/examples/js/binance-universal-transfer.js +16 -0
  82. package/examples/js/bitfinex-fetch-trades.js +35 -0
  83. package/examples/js/bitfinex2-fetch-trades.js +35 -0
  84. package/examples/js/bitmex-browser-cors-proxy.js +7 -0
  85. package/examples/js/bitpanda-fetchMyTrades-reduce.js +36 -0
  86. package/examples/js/bitrue-fetch-balance.js +28 -0
  87. package/examples/js/bitstamp-private-api.js +115 -0
  88. package/examples/js/bitstamp-public-api.js +39 -0
  89. package/examples/js/bittrex-balance.js +50 -0
  90. package/examples/js/bittrex-fetch-closed-orders-history.js +69 -0
  91. package/examples/js/blockchaincom-withdrawal.js +59 -0
  92. package/examples/js/build-ohlcv-bars.js +48 -0
  93. package/examples/js/builtin-rate-limiting-rest-poller.js +25 -0
  94. package/examples/js/bybit-trailing.js +62 -0
  95. package/examples/js/bybit-updated.cjs +154 -0
  96. package/examples/js/cli.js +405 -0
  97. package/examples/js/coinbase-fetch-all-balances.js +36 -0
  98. package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +47 -0
  99. package/examples/js/coinex-futures.js +75 -0
  100. package/examples/js/coinone-fetch-tickers.js +54 -0
  101. package/examples/js/coinone-markets.js +16 -0
  102. package/examples/js/compare-two-exchanges-capabilities.js +36 -0
  103. package/examples/js/cors-proxy.js +5 -0
  104. package/examples/js/create-order-handle-errors.js +55 -0
  105. package/examples/js/create-order-position-with-takeprofit-stoploss.js +71 -0
  106. package/examples/js/create-order-with-retry.js +65 -0
  107. package/examples/js/create-order-ws-example.js +25 -0
  108. package/examples/js/create-orders-example.js +17 -0
  109. package/examples/js/create-trailing-amount-order.js +36 -0
  110. package/examples/js/create-trailing-percent-order.js +36 -0
  111. package/examples/js/credentials.json +5 -0
  112. package/examples/js/custom-proxy-agent-for-js.js +10 -0
  113. package/examples/js/custom-proxy-url.js +23 -0
  114. package/examples/js/delta-maintenance-margin-rate-max-leverage.js +60 -0
  115. package/examples/js/env-variables.js +26 -0
  116. package/examples/js/error-handling.js +89 -0
  117. package/examples/js/exchange-capabilities.js +135 -0
  118. package/examples/js/exchanges-by-volume.js +60 -0
  119. package/examples/js/exchanges.js +40 -0
  120. package/examples/js/fetch-all-balances.js +219 -0
  121. package/examples/js/fetch-all-tickers-to-files-2.js +53 -0
  122. package/examples/js/fetch-all-tickers-to-files.js +77 -0
  123. package/examples/js/fetch-balance.js +28 -0
  124. package/examples/js/fetch-create-deposit-address.js +101 -0
  125. package/examples/js/fetch-from-many-exchanges-simultaneously.js +21 -0
  126. package/examples/js/fetch-funding-rate-history.js +25 -0
  127. package/examples/js/fetch-futures/prettier.config.js +5 -0
  128. package/examples/js/fetch-futures/src/index.js +25 -0
  129. package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +72 -0
  130. package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +39 -0
  131. package/examples/js/fetch-ohlcv.js +16 -0
  132. package/examples/js/fetch-okex-futures.js +22 -0
  133. package/examples/js/fetch-orders.js +27 -0
  134. package/examples/js/fetch-ticker-from-multiple-exchanges.js +35 -0
  135. package/examples/js/fetch-ticker-where-available.js +75 -0
  136. package/examples/js/fetch-tickers/build/index.js +19 -0
  137. package/examples/js/fetch-tickers/prettier.config.js +5 -0
  138. package/examples/js/fetch-tickers/src/index.js +17 -0
  139. package/examples/js/gateio-create-batch-order.js +43 -0
  140. package/examples/js/gateio-futures.js +49 -0
  141. package/examples/js/gateio-open-close-contract.js +49 -0
  142. package/examples/js/gateio-swaps.js +74 -0
  143. package/examples/js/gdax-fetch-trades-pagination.js +29 -0
  144. package/examples/js/hitbtc2-withdraw.js +61 -0
  145. package/examples/js/how-to-import-one-exchange-esm.js +10 -0
  146. package/examples/js/huobi-futures.js +71 -0
  147. package/examples/js/huobi-open-close-contract.js +63 -0
  148. package/examples/js/huobi-swaps.js +70 -0
  149. package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +98 -0
  150. package/examples/js/hybridCJSExample.cjs +19 -0
  151. package/examples/js/hybridESMExample.js +19 -0
  152. package/examples/js/idex-fetch-balance.js +13 -0
  153. package/examples/js/instantiate-all-at-once.js +46 -0
  154. package/examples/js/instantiate-all-from-json.js +31 -0
  155. package/examples/js/kraken-create-and-close-position.js +54 -0
  156. package/examples/js/kraken-fetch-order-trades.js +33 -0
  157. package/examples/js/kraken-margin-trading.js +89 -0
  158. package/examples/js/kucoin-rate-limit.js +38 -0
  159. package/examples/js/latoken-example.js +108 -0
  160. package/examples/js/live-orderbook.js +106 -0
  161. package/examples/js/live-ticker.js +80 -0
  162. package/examples/js/live-tickers.js +74 -0
  163. package/examples/js/load-all-contracts.js +41 -0
  164. package/examples/js/load-all-symbols-at-once.js +69 -0
  165. package/examples/js/load-all-tickers-at-once.js +91 -0
  166. package/examples/js/load-markets-to-files.js +57 -0
  167. package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +61 -0
  168. package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +91 -0
  169. package/examples/js/margin-loan-borrow-buy-sell-repay.js +70 -0
  170. package/examples/js/market-status-and-currency-status.js +29 -0
  171. package/examples/js/ohlcv-console-chart.js +29 -0
  172. package/examples/js/okex-fetch-closed-orders-archive.js +31 -0
  173. package/examples/js/okex-transfer.js +51 -0
  174. package/examples/js/okx-poll-fetch-my-trades.js +37 -0
  175. package/examples/js/okx-poll-rate-limit.js +48 -0
  176. package/examples/js/order-book-extra-level-depth-param.js +20 -0
  177. package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +49 -0
  178. package/examples/js/poll-ohlcv.js +43 -0
  179. package/examples/js/poloniex-fetch-order-books.js +35 -0
  180. package/examples/js/poloniex-limits-amount-min.js +62 -0
  181. package/examples/js/proxy-round-robin.js +98 -0
  182. package/examples/js/proxy-usage.js +32 -0
  183. package/examples/js/sample-local-proxy-server-with-cors.js +12 -0
  184. package/examples/js/search-all-exchanges.js +159 -0
  185. package/examples/js/shared-load-markets.js +80 -0
  186. package/examples/js/sort-swap-markets-by-hourly-price-change.js +55 -0
  187. package/examples/js/symbols.js +110 -0
  188. package/examples/js/theocean.js +41 -0
  189. package/examples/js/tickers.js +106 -0
  190. package/examples/js/validate-paginated-data.js +61 -0
  191. package/examples/js/watch-OHLCV-For-Symbols.js +15 -0
  192. package/examples/js/watch-OHLCV.js +12 -0
  193. package/examples/js/watch-OrderBook-For-Symbols.js +11 -0
  194. package/examples/js/watch-Trades-For-Symbols.js +11 -0
  195. package/examples/js/watch-tickers.js +11 -0
  196. package/examples/js/watchOHLCVForSymbols.js +15 -0
  197. package/examples/js/watchOrderBookForSymbols.js +11 -0
  198. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +2 -0
  199. package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +1 -0
  200. package/examples/js/watchPositions-many-exchanges-continuosly.js +49 -0
  201. package/examples/js/watchPositions.d.ts +2 -0
  202. package/examples/js/watchPositions.d.ts.map +1 -0
  203. package/examples/js/watchPositions.js +13 -0
  204. package/examples/js/watchPositionsForSymbols.d.ts +2 -0
  205. package/examples/js/watchPositionsForSymbols.d.ts.map +1 -0
  206. package/examples/js/watchPositionsForSymbols.js +14 -0
  207. package/examples/js/watchTradesForSymbols.js +11 -0
  208. package/examples/js/withdraw-from-one-exchange-to-another.js +50 -0
  209. package/examples/php/README.md +7 -0
  210. package/examples/py/README.md +15 -0
  211. package/examples/py/playing_with_ccxt_example.ipynb +222 -0
  212. package/examples/ts/.eslintrc +111 -0
  213. package/examples/ts/build-ohlcv-bars.ts +53 -0
  214. package/examples/ts/cli.ts +397 -0
  215. package/examples/ts/compare-two-exchanges-capabilities.ts +36 -0
  216. package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +89 -0
  217. package/examples/ts/create-order-ws-example.ts +33 -0
  218. package/examples/ts/create-orders-example.ts +21 -0
  219. package/examples/ts/create-trailing-amount-order.ts +37 -0
  220. package/examples/ts/create-trailing-percent-order.ts +37 -0
  221. package/examples/ts/custom-proxy-agent-for-js.ts +14 -0
  222. package/examples/ts/fetch-futures/package-lock.json +116 -0
  223. package/examples/ts/fetch-futures/package.json +34 -0
  224. package/examples/ts/fetch-futures/prettier.config.js +4 -0
  225. package/examples/ts/fetch-futures/src/index.ts +28 -0
  226. package/examples/ts/fetch-futures/tsconfig.json +28 -0
  227. package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +44 -0
  228. package/examples/ts/fetch-ohlcv.ts +17 -0
  229. package/examples/ts/fetch-tickers/package-lock.json +116 -0
  230. package/examples/ts/fetch-tickers/package.json +34 -0
  231. package/examples/ts/fetch-tickers/prettier.config.js +4 -0
  232. package/examples/ts/fetch-tickers/src/index.ts +21 -0
  233. package/examples/ts/fetch-tickers/tsconfig.json +28 -0
  234. package/examples/ts/how-to-import-one-exchange-esm.ts +11 -0
  235. package/examples/ts/kraken-create-and-close-position.ts +69 -0
  236. package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +72 -0
  237. package/examples/ts/nextjs-page-router/.eslintrc.json +3 -0
  238. package/examples/ts/nextjs-page-router/README.md +43 -0
  239. package/examples/ts/nextjs-page-router/next.config.js +6 -0
  240. package/examples/ts/nextjs-page-router/package-lock.json +7425 -0
  241. package/examples/ts/nextjs-page-router/package.json +28 -0
  242. package/examples/ts/nextjs-page-router/postcss.config.js +6 -0
  243. package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
  244. package/examples/ts/nextjs-page-router/src/pages/_app.tsx +6 -0
  245. package/examples/ts/nextjs-page-router/src/pages/_document.tsx +13 -0
  246. package/examples/ts/nextjs-page-router/src/pages/balance.tsx +46 -0
  247. package/examples/ts/nextjs-page-router/src/pages/index.tsx +8 -0
  248. package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +61 -0
  249. package/examples/ts/nextjs-page-router/src/styles/globals.css +27 -0
  250. package/examples/ts/nextjs-page-router/tailwind.config.ts +20 -0
  251. package/examples/ts/nextjs-page-router/tsconfig.json +22 -0
  252. package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +62 -0
  253. package/examples/ts/proxy-usage.ts +41 -0
  254. package/examples/ts/sample-local-proxy-server-with-cors.ts +15 -0
  255. package/examples/ts/watch-OHLCV-For-Symbols.ts +17 -0
  256. package/examples/ts/watch-OHLCV.ts +14 -0
  257. package/examples/ts/watch-OrderBook-For-Symbols.ts +13 -0
  258. package/examples/ts/watch-Trades-For-Symbols.ts +13 -0
  259. package/examples/ts/watch-tickers.ts +13 -0
  260. package/examples/ts/watchPositions-many-exchanges-continuosly.ts +53 -0
  261. package/examples/ts/watchPositions.ts +15 -0
  262. package/examples/ts/watchPositionsForSymbols.ts +16 -0
  263. package/examples/tsconfig.json +27 -0
  264. package/js/ccxt.d.ts +5 -2
  265. package/js/ccxt.js +4 -2
  266. package/js/src/abstract/tradeogre.d.ts +19 -0
  267. package/js/src/abstract/tradeogre.js +11 -0
  268. package/js/src/ascendex.d.ts +2 -7
  269. package/js/src/ascendex.js +3 -2
  270. package/js/src/base/Exchange.d.ts +7 -7
  271. package/js/src/base/Exchange.js +1 -1
  272. package/js/src/base/types.d.ts +7 -1
  273. package/js/src/binance.d.ts +1 -1
  274. package/js/src/bitget.js +62 -50
  275. package/js/src/bitmart.d.ts +1 -1
  276. package/js/src/bitmart.js +2 -1
  277. package/js/src/bybit.d.ts +3 -1
  278. package/js/src/bybit.js +90 -30
  279. package/js/src/coinbase.d.ts +4 -4
  280. package/js/src/coinbaseinternational.d.ts +1 -1
  281. package/js/src/coinbaseinternational.js +1 -1
  282. package/js/src/coinbasepro.d.ts +2 -2
  283. package/js/src/coinex.js +4 -3
  284. package/js/src/coinlist.d.ts +2 -2
  285. package/js/src/cryptocom.d.ts +2 -2
  286. package/js/src/currencycom.d.ts +2 -2
  287. package/js/src/deribit.d.ts +2 -2
  288. package/js/src/gate.d.ts +1 -1
  289. package/js/src/gate.js +1 -0
  290. package/js/src/htx.d.ts +2 -2
  291. package/js/src/htx.js +16 -9
  292. package/js/src/huobijp.d.ts +2 -2
  293. package/js/src/hyperliquid.js +2 -1
  294. package/js/src/kraken.d.ts +1 -1
  295. package/js/src/kraken.js +3 -3
  296. package/js/src/kucoin.d.ts +3 -3
  297. package/js/src/kucoin.js +1 -1
  298. package/js/src/luno.d.ts +2 -2
  299. package/js/src/mexc.d.ts +3 -3
  300. package/js/src/ndax.d.ts +2 -2
  301. package/js/src/novadax.d.ts +2 -2
  302. package/js/src/okx.d.ts +2 -2
  303. package/js/src/pro/bitfinex2.d.ts +1 -1
  304. package/js/src/pro/krakenfutures.js +8 -7
  305. package/js/src/tradeogre.d.ts +32 -0
  306. package/js/src/tradeogre.js +633 -0
  307. package/js/src/woo.d.ts +2 -2
  308. package/package.json +4 -1
  309. package/skip-tests.json +219 -424
@@ -0,0 +1,55 @@
1
+
2
+
3
+ // ----------------------------------------------------------------------------
4
+
5
+ import ccxt from '../../js/ccxt.js';
6
+
7
+ // ----------------------------------------------------------------------------
8
+
9
+ (async () => {
10
+
11
+ const exchange = new ccxt.bittrex ({
12
+ 'apiKey': 'YOUR_API_KEY',
13
+ 'secret': 'YOUR_SECRET_KEY',
14
+ 'verbose': false, // set to true to see more debugging output
15
+ 'timeout': 60000,
16
+ })
17
+
18
+ // try to load markets first, retry on request timeouts until it succeeds:
19
+
20
+ while (true) {
21
+
22
+ try {
23
+
24
+ await exchange.loadMarkets ();
25
+ break;
26
+
27
+ } catch (e) {
28
+
29
+ if (e instanceof ccxt.RequestTimeout)
30
+ console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)
31
+ }
32
+ }
33
+
34
+ const symbol = 'ETH/BTC'
35
+ const orderType = 'limit'
36
+ const side = 'sell'
37
+ const amount = 0.321;
38
+ const price = 0.123;
39
+
40
+ // try just one attempt to create an order
41
+
42
+ try {
43
+
44
+ const response = await exchange.createOrder (symbol, orderType, side, amount, price);
45
+ console.log (response);
46
+ console.log ('Succeeded');
47
+
48
+ } catch (e) {
49
+
50
+ console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)
51
+ console.log ('Failed');
52
+
53
+ }
54
+
55
+ }) ()
@@ -0,0 +1,71 @@
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
+ // 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.
8
+ const exchange = new ccxt.okx({
9
+ "apiKey": "YOUR_API_KEY",
10
+ "secret": "YOUR_API_SECRET",
11
+ "password": "YOUR_API_PASSWORD", // if exchange does not require password, comment out this line
12
+ });
13
+ const symbol = 'DOGE/USDT:USDT';
14
+ const side = 'buy'; // 'buy' | 'sell'
15
+ const order_type = 'limit'; // 'market' | 'limit'
16
+ const amount = 1; // how many contracts (see `market(symbol).contractSize` to find out coin portion per one contract)
17
+ await exchange.loadMarkets();
18
+ const market = exchange.market(symbol);
19
+ const ticker = await exchange.fetchTicker(symbol);
20
+ const last_price = ticker['last'];
21
+ const ask_price = ticker['ask'];
22
+ const bid_price = ticker['bid'];
23
+ // if order_type is 'market', then price is not needed
24
+ let price = undefined;
25
+ // if order_type is 'limit', then set a price at your desired level
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
+ // set trigger price for stop-loss/take-profit to 2% from current price
30
+ // (note, across different exchanges "trigger" price can be also mentioned with different synonyms, like "activation price", "stop price", "conditional price", etc. )
31
+ const stop_loss_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 0.98 : 1.02);
32
+ const take_profit_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 1.02 : 0.98);
33
+ // 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
34
+ const params = {
35
+ 'stopLoss': {
36
+ 'triggerPrice': stop_loss_trigger_price,
37
+ // set a 'price' to act as limit order, otherwise remove it for a market order
38
+ 'price': stop_loss_trigger_price * 0.98,
39
+ },
40
+ 'takeProfit': {
41
+ 'triggerPrice': take_profit_trigger_price,
42
+ // set a 'price' to act as limit order, otherwise remove it for a market order
43
+ 'price': take_profit_trigger_price * 0.98,
44
+ },
45
+ // note that some exchanges might require some exchange specific parameter when opening a position, i.e.:
46
+ // 'posSide': 'long', // for phemex hedge-mode api
47
+ };
48
+ const position_amount = market['contractSize'] * amount;
49
+ const position_value = position_amount * last_price;
50
+ // log
51
+ 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:');
52
+ console.log(params);
53
+ console.log('-----------------------------------------------------------------------');
54
+ // exchange.verbose = True // uncomment for debugging purposes if necessary
55
+ try {
56
+ const created_order = await exchange.createOrder(symbol, order_type, side, amount, price, params);
57
+ console.log("Created an order", created_order);
58
+ // Fetch all your open orders for this symbol
59
+ // - use 'fetchOpenOrders' or 'fetchOrders' and filter with 'open' status
60
+ // - note, that some exchanges might return one order object with embedded stoploss/takeprofit fields, while other exchanges might have separate stoploss/takeprofit order objects
61
+ const all_open_orders = await exchange.fetchOpenOrders(symbol);
62
+ console.log("Fetched all your orders for this symbol", all_open_orders);
63
+ // To cancel a limit order, use "exchange.cancel_order(created_order['id'], symbol)""
64
+ }
65
+ catch (e) {
66
+ console.log(e.toString());
67
+ }
68
+ }
69
+ await example();
70
+ // NOTES:
71
+ // - 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).
@@ -0,0 +1,65 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+
5
+ // ----------------------------------------------------------------------------
6
+
7
+ const tryToCreateOrder = async function (exchange, symbol, type, side, amount, price, params) {
8
+
9
+ try {
10
+
11
+ const order = await exchange.createOrder (symbol, type, side, amount, price, params)
12
+ return order
13
+
14
+ } catch (e) {
15
+
16
+ console.log (e.constructor.name, e.message)
17
+
18
+ if (e instanceof ccxt.NetworkError) {
19
+
20
+ // retry on networking errors
21
+ return false
22
+
23
+ } else {
24
+
25
+ throw e // break on all other exceptions
26
+ }
27
+ }
28
+ }
29
+
30
+ // ----------------------------------------------------------------------------
31
+
32
+ const exchange = new ccxt.bytetrade ({
33
+ 'apiKey': 'classic123', // edit here
34
+ 'secret': 'ebcefff7de475ffe15e864ca3e3e410edf7e94fffd1f9af34edf9434e2bfff1b', // edit here
35
+ })
36
+
37
+ //
38
+ // make a classic bytetrade account - one that is linked to an email or phone number
39
+ // then click on your username in the top right and then export
40
+ // you will get a file like this:
41
+ //
42
+ // future garage icon motion panda garage motion task science head garage notable
43
+ // ebcefff7de475ffe15e864ca3e3e410edf7e94fffd1f9af34edf9434e2bfff1b
44
+ // classic123
45
+ //
46
+ // the second line is your secret and the third line is your apiKey
47
+ //
48
+
49
+ const symbol = 'XRP/USDT' // edit here
50
+ const type = 'limit ' // edit here
51
+ const side = 'buy' // edit here
52
+ const amount = 10 // edit here
53
+ const price = 1 // edit here
54
+ const params = {} // edit here
55
+
56
+ ;(async () => {
57
+ let order = false
58
+ while (true) {
59
+ order = await tryToCreateOrder (exchange, symbol, type, side, amount, price, params)
60
+ if (order !== false) {
61
+ break
62
+ }
63
+ }
64
+ console.log (order)
65
+ }) ()
@@ -0,0 +1,25 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+ // AUTO-TRANSPILE //
3
+ async function example() {
4
+ const exchange = new ccxt.pro.binance({
5
+ 'apiKey': 'MY_API_KEY',
6
+ 'secret': 'MY_SECRET',
7
+ });
8
+ exchange.setSandboxMode(true);
9
+ exchange.verbose = true; // uncomment for debugging purposes if necessary
10
+ // load markets
11
+ await exchange.loadMarkets();
12
+ const symbol = 'ETH/USDT';
13
+ const type = 'limit';
14
+ const side = 'buy';
15
+ const amount = 0.01;
16
+ let price = 1000;
17
+ let orders = [];
18
+ for (let i = 1; i < 5; i++) {
19
+ const response = await exchange.createOrderWs(symbol, type, side, amount, price);
20
+ price += i;
21
+ orders.push(response);
22
+ }
23
+ console.log(orders);
24
+ }
25
+ await example();
@@ -0,0 +1,17 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+ // AUTO-TRANSPILE //
3
+ async function example() {
4
+ const exchange = new ccxt.binance({
5
+ 'apiKey': 'MY_API_KEY',
6
+ 'secret': 'MY_SECRET',
7
+ });
8
+ exchange.setSandboxMode(true);
9
+ await exchange.loadMarkets();
10
+ exchange.verbose = true; // uncomment for debugging purposes if necessary
11
+ const orders = await exchange.createOrders([
12
+ { 'symbol': 'LTC/USDT:USDT', 'type': 'limit', 'side': 'buy', 'amount': 10, 'price': 55 },
13
+ { 'symbol': 'ETH/USDT:USDT', 'type': 'market', 'side': 'buy', 'amount': 0.5 },
14
+ ]);
15
+ console.log(orders);
16
+ }
17
+ await example();
@@ -0,0 +1,36 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+ // AUTO-TRANSPILE //
3
+ async function example() {
4
+ const exchange = new ccxt.bingx({
5
+ 'apiKey': 'MY_API_KEY',
6
+ 'secret': 'MY_SECRET',
7
+ });
8
+ // exchange.setSandboxMode (true);
9
+ // exchange.verbose = true; // uncomment for debugging purposes if necessary
10
+ await exchange.loadMarkets();
11
+ const symbol = 'BTC/USDT:USDT';
12
+ const order_type = 'market';
13
+ const side = 'sell';
14
+ const amount = 0.0001;
15
+ const price = undefined;
16
+ const reduceOnly = true;
17
+ const trailingAmount = 100;
18
+ // const trailingTriggerPrice = undefined; // not supported on all exchanges
19
+ const params = {
20
+ 'reduceOnly': reduceOnly,
21
+ 'trailingAmount': trailingAmount,
22
+ // 'trailingTriggerPrice': trailingTriggerPrice,
23
+ };
24
+ try {
25
+ const create_order = await exchange.createOrder(symbol, order_type, side, amount, price, params);
26
+ // Alternatively use the createTrailingAmountOrder method:
27
+ // const create_order = await exchange.createTrailingAmountOrder (symbol, order_type, side, amount, price, trailingAmount, trailingTriggerPrice, {
28
+ // 'reduceOnly': reduceOnly,
29
+ // });
30
+ console.log(create_order);
31
+ }
32
+ catch (e) {
33
+ console.log(e.toString());
34
+ }
35
+ }
36
+ await example();
@@ -0,0 +1,36 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+ // AUTO-TRANSPILE //
3
+ async function example() {
4
+ const exchange = new ccxt.bingx({
5
+ 'apiKey': 'MY_API_KEY',
6
+ 'secret': 'MY_SECRET',
7
+ });
8
+ // exchange.setSandboxMode (true);
9
+ // exchange.verbose = true; // uncomment for debugging purposes if necessary
10
+ await exchange.loadMarkets();
11
+ const symbol = 'BTC/USDT:USDT';
12
+ const order_type = 'market';
13
+ const side = 'sell';
14
+ const amount = 0.0001;
15
+ const price = undefined;
16
+ const reduceOnly = true;
17
+ const trailingPercent = 10;
18
+ // const trailingTriggerPrice = undefined; // not supported on all exchanges
19
+ const params = {
20
+ 'reduceOnly': reduceOnly,
21
+ 'trailingPercent': trailingPercent,
22
+ // 'trailingTriggerPrice': trailingTriggerPrice,
23
+ };
24
+ try {
25
+ const create_order = await exchange.createOrder(symbol, order_type, side, amount, price, params);
26
+ // Alternatively use the createTrailingAmountOrder method:
27
+ // const create_order = await exchange.createTrailingPercentOrder (symbol, order_type, side, amount, price, trailingPercent, trailingTriggerPrice, {
28
+ // 'reduceOnly': reduceOnly,
29
+ // });
30
+ console.log(create_order);
31
+ }
32
+ catch (e) {
33
+ console.log(e.toString());
34
+ }
35
+ }
36
+ await example();
@@ -0,0 +1,5 @@
1
+ {
2
+ "hitbtc": { "apiKey": "b6aad581670b30fb25d1c91cdbe8ca5c", "secret": "fa394ced37a488f9b5826a2d9ce39ae3" },
3
+ "bitso": { "apiKey": "xZnHRmdlgJ", "secret": "e156bb7f7ab3a831afbc7a80f7866b9e" },
4
+ "coincheck": { "apiKey": "dCyzY2T6w0DFhaco", "secret": "JpI0eMmxfa0tEpk3X-dNwyclSASJkl-S" }
5
+ }
@@ -0,0 +1,10 @@
1
+ // @ts-nocheck
2
+ // to set custom "proxy-agent" for ccxt
3
+ import ccxt from 'ccxt';
4
+ import HttpProxyAgent from 'http-proxy-agent';
5
+ const proxy = 'http://1.2.3.4:5678';
6
+ const agent = new HttpProxyAgent(proxy); // or HttpsProxyAgent if you need http
7
+ // then pass it through constructor:
8
+ const kraken = new ccxt.kraken({ agent });
9
+ // or set it later:
10
+ kraken.agent = agent;
@@ -0,0 +1,23 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+
5
+ (async function main () {
6
+
7
+ const kraken1 = new ccxt.kraken ({
8
+ proxy: function (url) {
9
+ return 'https://example.com/?url=' + encodeURIComponent (url)
10
+ },
11
+ })
12
+
13
+ console.log (await kraken1.loadMarkets ())
14
+
15
+ const kraken2 = new ccxt.kraken ({
16
+ proxy: function (url) {
17
+ return 'https://cors-anywhere.herokuapp.com/' + url
18
+ },
19
+ })
20
+
21
+ console.log (await kraken2.loadMarkets ())
22
+
23
+ }) ()
@@ -0,0 +1,60 @@
1
+ import ccxt from '../../js/ccxt.js';
2
+
3
+ console.log ('CCXT Version:', ccxt.version);
4
+
5
+ function getMaxLeverage (market, positionSize) {
6
+ /**
7
+ * @description Equation taken from https://www.delta.exchange/contracts/
8
+ * @param {object} market CCXT market
9
+ * @param {float} positionSize The value of the position in quote currency
10
+ * @returns The maximum leverage available for the market for the given position size
11
+ */
12
+ const info = market['info'];
13
+ const maxLeverageNotional = Number (info['max_leverage_notional']);
14
+ const initialMarginScalingFactor = Number (info['initial_margin_scaling_factor']);
15
+ let initialMargin = Number (info['initial_margin']);
16
+
17
+ if (positionSize <= maxLeverageNotional) {
18
+ const initialMarginRatio = initialMargin / 100;
19
+ return 1 / initialMarginRatio;
20
+ } else {
21
+ initialMargin = initialMargin + (initialMarginScalingFactor * (positionSize - maxLeverageNotional));
22
+ const initialMarginRatio = initialMargin / 100;
23
+ return 1 / initialMarginRatio;
24
+ }
25
+ }
26
+
27
+ function getMaintenanceMarginRate (market, positionSize) {
28
+ /**
29
+ * @description Equation taken from https://www.delta.exchange/contracts/
30
+ * @param {object} market CCXT market
31
+ * @param {float} positionSize The value of the position in quote currency
32
+ * @returns The maintenance margin rate as a percentage for the market with the given position size
33
+ */
34
+ const info = market['info'];
35
+ const maxLeverageNotional = Number (info['max_leverage_notional']);
36
+ const maintenanceMarginScalingFactor = Number (info['maintenance_margin_scaling_factor']);
37
+ const maintenanceMargin = Number (info['maintenance_margin']);
38
+
39
+ if (positionSize <= maxLeverageNotional) {
40
+ return maintenanceMargin;
41
+ } else {
42
+ return maintenanceMargin + (maintenanceMarginScalingFactor * (positionSize - maxLeverageNotional));
43
+ }
44
+ }
45
+
46
+ async function main () {
47
+
48
+ const exchange = new ccxt.delta();
49
+ await exchange.loadMarkets ();
50
+
51
+ const symbol = 'ADA/USDT:USDT';
52
+ const market = exchange.market (symbol);
53
+
54
+ // Gets the maximum leverage and maintenance margin rate for a position worth 100,000 USDT on the ADA/USDT:USDT market
55
+ const maxLeverage = getMaxLeverage(market, 100000);
56
+ const maintenanceMarginRate = getMaintenanceMarginRate(market, 100000);
57
+ console.log(maxLeverage, maintenanceMarginRate);
58
+ }
59
+
60
+ main ()
@@ -0,0 +1,26 @@
1
+
2
+
3
+ // ----------------------------------------------------------------------------
4
+
5
+ import ccxt from '../../js/ccxt.js';
6
+ import ololog from 'ololog'
7
+
8
+ // ----------------------------------------------------------------------------
9
+
10
+ const log = ololog.configure.handleNodeErrors (), asTable = require("as-table").configure({ delimiter: " | " });
11
+
12
+ // ----------------------------------------------------------------------------
13
+
14
+ (async () => {
15
+
16
+ const exchange = new ccxt.coinbase ({
17
+ verbose: process.argv.includes ('--verbose'),
18
+ timeout: 60000,
19
+ apiKey: process.env.KEY,
20
+ secret: process.env.SECRET
21
+ });
22
+
23
+ const balance = await exchange.fetchBalance ()
24
+ log.green (balance)
25
+
26
+ })()
@@ -0,0 +1,89 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+
5
+ const verbose = process.argv.includes ('--verbose');
6
+
7
+ //-----------------------------------------------------------------------------
8
+
9
+ const printSupportedExchanges = () => console.log ('Supported exchanges:', ccxt.exchanges.join (', '))
10
+
11
+ const printUsage = () => {
12
+ console.log ('Usage: node', process.argv[1], 'id'.green)
13
+ printSupportedExchanges ()
14
+ }
15
+
16
+ const run = async (id) => {
17
+
18
+ // check if the exchange is supported by ccxt
19
+ const exchangeFound = ccxt.exchanges.indexOf (id) > -1
20
+
21
+ if (exchangeFound) {
22
+
23
+ console.log ('Instantiating', id, 'exchange')
24
+
25
+ // instantiate the exchange by id
26
+ const exchange = new ccxt[id] ({ verbose })
27
+
28
+ // try to load markets and catch the errors if any
29
+ try {
30
+
31
+ await exchange.loadMarkets ()
32
+
33
+ } catch (e) {
34
+
35
+ if (e instanceof ccxt.NetworkError) {
36
+ console.log (exchange.id, 'loadMarkets failed due to a network error:', e.message)
37
+ } else if (e instanceof ccxt.ExchangeError) {
38
+ console.log (exchange.id, 'loadMarkets failed due to exchange error:', e.message)
39
+ } else {
40
+ console.log (exchange.id, 'loadMarkets failed with:', e.message)
41
+ }
42
+
43
+ // rethrow the error "higher up" the call chain
44
+ throw e
45
+ }
46
+
47
+ // try to fetch a ticker and catch the errors if any
48
+ try {
49
+
50
+ const symbol = 'ETH/BTC'
51
+ const response = await exchange.fetchTicker (symbol)
52
+ console.log (response)
53
+
54
+ } catch (e) {
55
+
56
+ if (e instanceof ccxt.NetworkError) {
57
+ console.log (exchange.id, 'fetchTicker failed due to a network error:', e.message)
58
+ } else if (e instanceof ccxt.ExchangeError) {
59
+ console.log (exchange.id, 'fetchTicker failed due to exchange error:', e.message)
60
+ } else {
61
+ console.log (exchange.id, 'fetchTicker failed with:', e.message)
62
+ }
63
+
64
+ // rethrow the error "higher up" the call chain
65
+ throw e
66
+ }
67
+
68
+ } else {
69
+
70
+ console.log ('Exchange', id, 'not found')
71
+ printSupportedExchanges ()
72
+ }
73
+ }
74
+
75
+ ;(async function main () {
76
+
77
+ if (process.argv.length > 2) {
78
+
79
+ let id = process.argv[2]
80
+ await run (id)
81
+
82
+ } else {
83
+
84
+ printUsage ()
85
+ }
86
+
87
+ process.exit ()
88
+
89
+ }) ()
@@ -0,0 +1,135 @@
1
+
2
+
3
+ import ccxt from '../../js/ccxt.js';
4
+ import ololog from 'ololog';
5
+ import ansicolor from 'ansicolor';
6
+ import asTable from 'as-table';
7
+
8
+ const { noLocate } = ololog;
9
+ const log = noLocate;
10
+
11
+ ansicolor.nice
12
+
13
+
14
+
15
+ const csv = process.argv.includes ('--csv'), delimiter = csv ? ',' : '|', asTableConfig = { delimiter: ' ' + delimiter + ' ', /* print: require ('string.ify').noPretty */ }
16
+
17
+ asTable.configure (asTableConfig);
18
+
19
+ const sortCertified = process.argv.includes ('--sort-certified') || process.argv.includes ('--certified')
20
+ const exchangesArgument = process.argv.find (arg => arg.startsWith ('--exchanges='))
21
+ const exchangesArgumentParts = exchangesArgument ? exchangesArgument.split ('=') : []
22
+ const selectedExchanges = (exchangesArgumentParts.length > 1) ? exchangesArgumentParts[1].split (',') : []
23
+
24
+ console.log (ccxt.iso8601 (ccxt.milliseconds ()))
25
+ console.log ('CCXT v' + ccxt.version)
26
+
27
+ async function main () {
28
+
29
+ let total = 0
30
+ let notImplemented = 0
31
+ let inexistentApi = 0
32
+ let implemented = 0
33
+ let emulated = 0
34
+
35
+ const exchangeNames = ccxt.exchanges
36
+ let exchanges = exchangeNames.map (id => new ccxt[id] ())
37
+ exchanges = exchanges.map (exchange => exchange.pro ? new ccxt.pro[exchange.id] () : exchange)
38
+ if (sortCertified) {
39
+ exchanges.sort((a, b) => {
40
+ if (a.certified && !b.certified) {
41
+ return -1;
42
+ } else if (!a.certified && b.certified) {
43
+ return 1;
44
+ } else {
45
+ return 0;
46
+ }
47
+ });
48
+ }
49
+ const metainfo = ccxt.flatten (exchanges.map (exchange => Object.keys (exchange.has)))
50
+ const reduced = metainfo.reduce ((previous, current) => {
51
+ previous[current] = (previous[current] || 0) + 1
52
+ return previous
53
+ }, {})
54
+ const unified = Object.entries (reduced).filter (([ _, count ]) => count > 1)
55
+ const methods = unified.map (([ method, _ ]) => method).sort ()
56
+ if (selectedExchanges.length > 0) {
57
+ exchanges = exchanges.filter ((exchange) => selectedExchanges.includes(exchange.id))
58
+ }
59
+ const table = asTable (exchanges.map (exchange => {
60
+ let result = {};
61
+ const basics = [
62
+ 'CORS',
63
+ 'spot',
64
+ 'margin',
65
+ 'swap',
66
+ 'future',
67
+ 'option',
68
+ ];
69
+
70
+ ccxt.unique (basics.concat (methods)).forEach (key => {
71
+
72
+ total += 1
73
+
74
+ let coloredString = '';
75
+
76
+ const feature = exchange.has[key]
77
+ const isFunction = (typeof exchange[key] === 'function')
78
+ const isBasic = basics.includes (key)
79
+
80
+ if (feature === false) {
81
+ // if explicitly set to 'false' in exchange.has (to exclude mistake, we check if it's undefined too)
82
+ coloredString = exchange.id.red.dim
83
+ inexistentApi += 1
84
+ } else if (feature === 'emulated') {
85
+ // if explicitly set to 'emulated' in exchange.has
86
+ coloredString = exchange.id.yellow
87
+ emulated += 1
88
+ } else if (feature) {
89
+ if (isBasic) {
90
+ // if neither 'false' nor 'emulated', and if method exists
91
+ coloredString = exchange.id.green
92
+ implemented += 1
93
+ } else {
94
+ if (isFunction) {
95
+ coloredString = exchange.id.green
96
+ implemented += 1
97
+ } else {
98
+ // the feature is available in exchange.has and not implemented
99
+ // this is an error
100
+ coloredString = exchange.id.lightMagenta
101
+ }
102
+ }
103
+ } else {
104
+ coloredString = exchange.id.lightRed
105
+ notImplemented += 1
106
+ }
107
+
108
+ result[key] = coloredString
109
+ })
110
+
111
+ return result
112
+ }))
113
+
114
+ if (csv) {
115
+ let lines = table.split ("\n")
116
+ lines = lines.slice (0, 1).concat (lines.slice (2))
117
+ log (lines.join ("\n"))
118
+ } else {
119
+ log (table)
120
+ }
121
+
122
+ log ('Summary: ',
123
+ ccxt.exchanges.length.toString (), 'exchanges; ',
124
+ 'Methods [' + total.toString () + ' total]: ',
125
+ implemented.toString ().green, 'implemented,',
126
+ emulated.toString ().yellow, 'emulated,',
127
+ (inexistentApi.toString ().red.dim), 'inexistentApi,',
128
+ (notImplemented.toString ().lightRed), 'notImplemented',
129
+ )
130
+
131
+ log("\nMessy? Try piping to less (e.g. node script.js | less -S -R)\n".red)
132
+
133
+ }
134
+
135
+ main ()