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.
- package/CHANGELOG.md +206 -10
- package/README.md +10 -9
- package/build.sh +1 -1
- package/dist/ccxt.browser.js +1042 -297
- package/dist/ccxt.browser.min.js +3 -3
- package/dist/cjs/ccxt.js +4 -1
- package/dist/cjs/src/abstract/tradeogre.js +9 -0
- package/dist/cjs/src/ascendex.js +3 -2
- package/dist/cjs/src/base/Exchange.js +1 -1
- package/dist/cjs/src/bitget.js +62 -50
- package/dist/cjs/src/bitmart.js +1 -0
- package/dist/cjs/src/bybit.js +90 -30
- package/dist/cjs/src/coinbaseinternational.js +1 -1
- package/dist/cjs/src/coinex.js +4 -3
- package/dist/cjs/src/gate.js +1 -0
- package/dist/cjs/src/htx.js +16 -9
- package/dist/cjs/src/hyperliquid.js +2 -1
- package/dist/cjs/src/kraken.js +3 -3
- package/dist/cjs/src/kucoin.js +1 -1
- package/dist/cjs/src/pro/krakenfutures.js +8 -7
- package/dist/cjs/src/tradeogre.js +632 -0
- package/examples/README.md +308 -0
- package/examples/ccxt.pro/html/watchTicker.html +51 -0
- package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +55 -0
- package/examples/ccxt.pro/js/binance-https-proxy.js +48 -0
- package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +38 -0
- package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +64 -0
- package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +62 -0
- package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +68 -0
- package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +82 -0
- package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +59 -0
- package/examples/ccxt.pro/js/exchange-capabitities.js +72 -0
- package/examples/ccxt.pro/js/exchange-close.js +46 -0
- package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +30 -0
- package/examples/ccxt.pro/js/gateio-watch-balance.js +23 -0
- package/examples/ccxt.pro/js/gateio-watch-order-book.js +71 -0
- package/examples/ccxt.pro/js/graceful-shutdown.js +43 -0
- package/examples/ccxt.pro/js/many-exchanges-many-streams.js +37 -0
- package/examples/ccxt.pro/js/okex-create-futures-order.js +48 -0
- package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +54 -0
- package/examples/ccxt.pro/js/okx-watch-tickers.js +31 -0
- package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +46 -0
- package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +26 -0
- package/examples/ccxt.pro/js/one-exchange-many-streams.js +28 -0
- package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +30 -0
- package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +40 -0
- package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +38 -0
- package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +40 -0
- package/examples/ccxt.pro/js/watch-many-orderbooks.js +27 -0
- package/examples/ccxt.pro/js/watch-new-trades-only.js +43 -0
- package/examples/ccxt.pro/js/watch-new-trades.js +42 -0
- package/examples/ccxt.pro/js/watch-trades-many-symbols.js +29 -0
- package/examples/ccxt.pro/js/watch-vs-fetch.js +29 -0
- package/examples/cs/Examples.sln +22 -0
- package/examples/cs/c#.csproj +19 -0
- package/examples/html/basic-cors-proxy.html +46 -0
- package/examples/html/basic-inheritance.html +47 -0
- package/examples/html/basic-poller.html +52 -0
- package/examples/html/basic-rate-limiting.html +49 -0
- package/examples/html/basic.html +43 -0
- package/examples/html/binance-cors-proxy.html +28 -0
- package/examples/html/bitmex-browser-cors-proxy.js +7 -0
- package/examples/html/bitmex-cors.html +46 -0
- package/examples/html/tradingview-charts.html +61 -0
- package/examples/html/webworker/index.html +97 -0
- package/examples/html/webworker/worker.js +43 -0
- package/examples/js/README.md +15 -0
- package/examples/js/advanced-error-handling.js +39 -0
- package/examples/js/aggregate-orderbook.js +54 -0
- package/examples/js/arbitrage-pairs.js +130 -0
- package/examples/js/basic-chart.js +29 -0
- package/examples/js/basic-orderbook-polling.js +13 -0
- package/examples/js/bcc-vs-bch.js +115 -0
- package/examples/js/binance-fetch-all-deposits.js +45 -0
- package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +34 -0
- package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +33 -0
- package/examples/js/binance-fetchTicker-delivery-vs-future.js +31 -0
- package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +41 -0
- package/examples/js/binance-margin-stop-order.js +39 -0
- package/examples/js/binance-server-time.js +34 -0
- package/examples/js/binance-universal-transfer.js +16 -0
- package/examples/js/bitfinex-fetch-trades.js +35 -0
- package/examples/js/bitfinex2-fetch-trades.js +35 -0
- package/examples/js/bitmex-browser-cors-proxy.js +7 -0
- package/examples/js/bitpanda-fetchMyTrades-reduce.js +36 -0
- package/examples/js/bitrue-fetch-balance.js +28 -0
- package/examples/js/bitstamp-private-api.js +115 -0
- package/examples/js/bitstamp-public-api.js +39 -0
- package/examples/js/bittrex-balance.js +50 -0
- package/examples/js/bittrex-fetch-closed-orders-history.js +69 -0
- package/examples/js/blockchaincom-withdrawal.js +59 -0
- package/examples/js/build-ohlcv-bars.js +48 -0
- package/examples/js/builtin-rate-limiting-rest-poller.js +25 -0
- package/examples/js/bybit-trailing.js +62 -0
- package/examples/js/bybit-updated.cjs +154 -0
- package/examples/js/cli.js +405 -0
- package/examples/js/coinbase-fetch-all-balances.js +36 -0
- package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +47 -0
- package/examples/js/coinex-futures.js +75 -0
- package/examples/js/coinone-fetch-tickers.js +54 -0
- package/examples/js/coinone-markets.js +16 -0
- package/examples/js/compare-two-exchanges-capabilities.js +36 -0
- package/examples/js/cors-proxy.js +5 -0
- package/examples/js/create-order-handle-errors.js +55 -0
- package/examples/js/create-order-position-with-takeprofit-stoploss.js +71 -0
- package/examples/js/create-order-with-retry.js +65 -0
- package/examples/js/create-order-ws-example.js +25 -0
- package/examples/js/create-orders-example.js +17 -0
- package/examples/js/create-trailing-amount-order.js +36 -0
- package/examples/js/create-trailing-percent-order.js +36 -0
- package/examples/js/credentials.json +5 -0
- package/examples/js/custom-proxy-agent-for-js.js +10 -0
- package/examples/js/custom-proxy-url.js +23 -0
- package/examples/js/delta-maintenance-margin-rate-max-leverage.js +60 -0
- package/examples/js/env-variables.js +26 -0
- package/examples/js/error-handling.js +89 -0
- package/examples/js/exchange-capabilities.js +135 -0
- package/examples/js/exchanges-by-volume.js +60 -0
- package/examples/js/exchanges.js +40 -0
- package/examples/js/fetch-all-balances.js +219 -0
- package/examples/js/fetch-all-tickers-to-files-2.js +53 -0
- package/examples/js/fetch-all-tickers-to-files.js +77 -0
- package/examples/js/fetch-balance.js +28 -0
- package/examples/js/fetch-create-deposit-address.js +101 -0
- package/examples/js/fetch-from-many-exchanges-simultaneously.js +21 -0
- package/examples/js/fetch-funding-rate-history.js +25 -0
- package/examples/js/fetch-futures/prettier.config.js +5 -0
- package/examples/js/fetch-futures/src/index.js +25 -0
- package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +72 -0
- package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +39 -0
- package/examples/js/fetch-ohlcv.js +16 -0
- package/examples/js/fetch-okex-futures.js +22 -0
- package/examples/js/fetch-orders.js +27 -0
- package/examples/js/fetch-ticker-from-multiple-exchanges.js +35 -0
- package/examples/js/fetch-ticker-where-available.js +75 -0
- package/examples/js/fetch-tickers/build/index.js +19 -0
- package/examples/js/fetch-tickers/prettier.config.js +5 -0
- package/examples/js/fetch-tickers/src/index.js +17 -0
- package/examples/js/gateio-create-batch-order.js +43 -0
- package/examples/js/gateio-futures.js +49 -0
- package/examples/js/gateio-open-close-contract.js +49 -0
- package/examples/js/gateio-swaps.js +74 -0
- package/examples/js/gdax-fetch-trades-pagination.js +29 -0
- package/examples/js/hitbtc2-withdraw.js +61 -0
- package/examples/js/how-to-import-one-exchange-esm.js +10 -0
- package/examples/js/huobi-futures.js +71 -0
- package/examples/js/huobi-open-close-contract.js +63 -0
- package/examples/js/huobi-swaps.js +70 -0
- package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +98 -0
- package/examples/js/hybridCJSExample.cjs +19 -0
- package/examples/js/hybridESMExample.js +19 -0
- package/examples/js/idex-fetch-balance.js +13 -0
- package/examples/js/instantiate-all-at-once.js +46 -0
- package/examples/js/instantiate-all-from-json.js +31 -0
- package/examples/js/kraken-create-and-close-position.js +54 -0
- package/examples/js/kraken-fetch-order-trades.js +33 -0
- package/examples/js/kraken-margin-trading.js +89 -0
- package/examples/js/kucoin-rate-limit.js +38 -0
- package/examples/js/latoken-example.js +108 -0
- package/examples/js/live-orderbook.js +106 -0
- package/examples/js/live-ticker.js +80 -0
- package/examples/js/live-tickers.js +74 -0
- package/examples/js/load-all-contracts.js +41 -0
- package/examples/js/load-all-symbols-at-once.js +69 -0
- package/examples/js/load-all-tickers-at-once.js +91 -0
- package/examples/js/load-markets-to-files.js +57 -0
- package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +61 -0
- package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +91 -0
- package/examples/js/margin-loan-borrow-buy-sell-repay.js +70 -0
- package/examples/js/market-status-and-currency-status.js +29 -0
- package/examples/js/ohlcv-console-chart.js +29 -0
- package/examples/js/okex-fetch-closed-orders-archive.js +31 -0
- package/examples/js/okex-transfer.js +51 -0
- package/examples/js/okx-poll-fetch-my-trades.js +37 -0
- package/examples/js/okx-poll-rate-limit.js +48 -0
- package/examples/js/order-book-extra-level-depth-param.js +20 -0
- package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +49 -0
- package/examples/js/poll-ohlcv.js +43 -0
- package/examples/js/poloniex-fetch-order-books.js +35 -0
- package/examples/js/poloniex-limits-amount-min.js +62 -0
- package/examples/js/proxy-round-robin.js +98 -0
- package/examples/js/proxy-usage.js +32 -0
- package/examples/js/sample-local-proxy-server-with-cors.js +12 -0
- package/examples/js/search-all-exchanges.js +159 -0
- package/examples/js/shared-load-markets.js +80 -0
- package/examples/js/sort-swap-markets-by-hourly-price-change.js +55 -0
- package/examples/js/symbols.js +110 -0
- package/examples/js/theocean.js +41 -0
- package/examples/js/tickers.js +106 -0
- package/examples/js/validate-paginated-data.js +61 -0
- package/examples/js/watch-OHLCV-For-Symbols.js +15 -0
- package/examples/js/watch-OHLCV.js +12 -0
- package/examples/js/watch-OrderBook-For-Symbols.js +11 -0
- package/examples/js/watch-Trades-For-Symbols.js +11 -0
- package/examples/js/watch-tickers.js +11 -0
- package/examples/js/watchOHLCVForSymbols.js +15 -0
- package/examples/js/watchOrderBookForSymbols.js +11 -0
- package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +2 -0
- package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +1 -0
- package/examples/js/watchPositions-many-exchanges-continuosly.js +49 -0
- package/examples/js/watchPositions.d.ts +2 -0
- package/examples/js/watchPositions.d.ts.map +1 -0
- package/examples/js/watchPositions.js +13 -0
- package/examples/js/watchPositionsForSymbols.d.ts +2 -0
- package/examples/js/watchPositionsForSymbols.d.ts.map +1 -0
- package/examples/js/watchPositionsForSymbols.js +14 -0
- package/examples/js/watchTradesForSymbols.js +11 -0
- package/examples/js/withdraw-from-one-exchange-to-another.js +50 -0
- package/examples/php/README.md +7 -0
- package/examples/py/README.md +15 -0
- package/examples/py/playing_with_ccxt_example.ipynb +222 -0
- package/examples/ts/.eslintrc +111 -0
- package/examples/ts/build-ohlcv-bars.ts +53 -0
- package/examples/ts/cli.ts +397 -0
- package/examples/ts/compare-two-exchanges-capabilities.ts +36 -0
- package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +89 -0
- package/examples/ts/create-order-ws-example.ts +33 -0
- package/examples/ts/create-orders-example.ts +21 -0
- package/examples/ts/create-trailing-amount-order.ts +37 -0
- package/examples/ts/create-trailing-percent-order.ts +37 -0
- package/examples/ts/custom-proxy-agent-for-js.ts +14 -0
- package/examples/ts/fetch-futures/package-lock.json +116 -0
- package/examples/ts/fetch-futures/package.json +34 -0
- package/examples/ts/fetch-futures/prettier.config.js +4 -0
- package/examples/ts/fetch-futures/src/index.ts +28 -0
- package/examples/ts/fetch-futures/tsconfig.json +28 -0
- package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +44 -0
- package/examples/ts/fetch-ohlcv.ts +17 -0
- package/examples/ts/fetch-tickers/package-lock.json +116 -0
- package/examples/ts/fetch-tickers/package.json +34 -0
- package/examples/ts/fetch-tickers/prettier.config.js +4 -0
- package/examples/ts/fetch-tickers/src/index.ts +21 -0
- package/examples/ts/fetch-tickers/tsconfig.json +28 -0
- package/examples/ts/how-to-import-one-exchange-esm.ts +11 -0
- package/examples/ts/kraken-create-and-close-position.ts +69 -0
- package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +72 -0
- package/examples/ts/nextjs-page-router/.eslintrc.json +3 -0
- package/examples/ts/nextjs-page-router/README.md +43 -0
- package/examples/ts/nextjs-page-router/next.config.js +6 -0
- package/examples/ts/nextjs-page-router/package-lock.json +7425 -0
- package/examples/ts/nextjs-page-router/package.json +28 -0
- package/examples/ts/nextjs-page-router/postcss.config.js +6 -0
- package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
- package/examples/ts/nextjs-page-router/src/pages/_app.tsx +6 -0
- package/examples/ts/nextjs-page-router/src/pages/_document.tsx +13 -0
- package/examples/ts/nextjs-page-router/src/pages/balance.tsx +46 -0
- package/examples/ts/nextjs-page-router/src/pages/index.tsx +8 -0
- package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +61 -0
- package/examples/ts/nextjs-page-router/src/styles/globals.css +27 -0
- package/examples/ts/nextjs-page-router/tailwind.config.ts +20 -0
- package/examples/ts/nextjs-page-router/tsconfig.json +22 -0
- package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +62 -0
- package/examples/ts/proxy-usage.ts +41 -0
- package/examples/ts/sample-local-proxy-server-with-cors.ts +15 -0
- package/examples/ts/watch-OHLCV-For-Symbols.ts +17 -0
- package/examples/ts/watch-OHLCV.ts +14 -0
- package/examples/ts/watch-OrderBook-For-Symbols.ts +13 -0
- package/examples/ts/watch-Trades-For-Symbols.ts +13 -0
- package/examples/ts/watch-tickers.ts +13 -0
- package/examples/ts/watchPositions-many-exchanges-continuosly.ts +53 -0
- package/examples/ts/watchPositions.ts +15 -0
- package/examples/ts/watchPositionsForSymbols.ts +16 -0
- package/examples/tsconfig.json +27 -0
- package/js/ccxt.d.ts +5 -2
- package/js/ccxt.js +4 -2
- package/js/src/abstract/tradeogre.d.ts +19 -0
- package/js/src/abstract/tradeogre.js +11 -0
- package/js/src/ascendex.d.ts +2 -7
- package/js/src/ascendex.js +3 -2
- package/js/src/base/Exchange.d.ts +7 -7
- package/js/src/base/Exchange.js +1 -1
- package/js/src/base/types.d.ts +7 -1
- package/js/src/binance.d.ts +1 -1
- package/js/src/bitget.js +62 -50
- package/js/src/bitmart.d.ts +1 -1
- package/js/src/bitmart.js +2 -1
- package/js/src/bybit.d.ts +3 -1
- package/js/src/bybit.js +90 -30
- package/js/src/coinbase.d.ts +4 -4
- package/js/src/coinbaseinternational.d.ts +1 -1
- package/js/src/coinbaseinternational.js +1 -1
- package/js/src/coinbasepro.d.ts +2 -2
- package/js/src/coinex.js +4 -3
- package/js/src/coinlist.d.ts +2 -2
- package/js/src/cryptocom.d.ts +2 -2
- package/js/src/currencycom.d.ts +2 -2
- package/js/src/deribit.d.ts +2 -2
- package/js/src/gate.d.ts +1 -1
- package/js/src/gate.js +1 -0
- package/js/src/htx.d.ts +2 -2
- package/js/src/htx.js +16 -9
- package/js/src/huobijp.d.ts +2 -2
- package/js/src/hyperliquid.js +2 -1
- package/js/src/kraken.d.ts +1 -1
- package/js/src/kraken.js +3 -3
- package/js/src/kucoin.d.ts +3 -3
- package/js/src/kucoin.js +1 -1
- package/js/src/luno.d.ts +2 -2
- package/js/src/mexc.d.ts +3 -3
- package/js/src/ndax.d.ts +2 -2
- package/js/src/novadax.d.ts +2 -2
- package/js/src/okx.d.ts +2 -2
- package/js/src/pro/bitfinex2.d.ts +1 -1
- package/js/src/pro/krakenfutures.js +8 -7
- package/js/src/tradeogre.d.ts +32 -0
- package/js/src/tradeogre.js +633 -0
- package/js/src/woo.d.ts +2 -2
- package/package.json +4 -1
- package/skip-tests.json +219 -424
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('ccxt')
|
|
4
|
+
|
|
5
|
+
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
+
|
|
7
|
+
async function watchOrders(exchange) {
|
|
8
|
+
while (true) {
|
|
9
|
+
try {
|
|
10
|
+
const orders = await exchange.watchOrders() // await here
|
|
11
|
+
console.log(orders)
|
|
12
|
+
} catch (e) {
|
|
13
|
+
console.log(e)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function watchBalance(exchange) {
|
|
19
|
+
while (true) {
|
|
20
|
+
try {
|
|
21
|
+
const balance = await exchange.watchBalance() // await here
|
|
22
|
+
console.log(balance)
|
|
23
|
+
} catch (e) {
|
|
24
|
+
console.log(e)
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
async function main() {
|
|
30
|
+
const exchange = new ccxt.pro.binance({
|
|
31
|
+
'apiKey': 'YOUR_API_KEY',
|
|
32
|
+
'secret': 'YOUR_SECRET',
|
|
33
|
+
'password': 'IF NECESSARY',
|
|
34
|
+
// etc...
|
|
35
|
+
})
|
|
36
|
+
await exchange.loadMarkets () // await here
|
|
37
|
+
|
|
38
|
+
// exchange.verbose = true // uncomment for debugging purposes if necessary
|
|
39
|
+
|
|
40
|
+
watchOrders(exchange) // no await
|
|
41
|
+
watchBalance(exchange) // no await
|
|
42
|
+
|
|
43
|
+
await exchange.close()
|
|
44
|
+
}
|
|
45
|
+
|
|
46
|
+
main()
|
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('ccxt');
|
|
4
|
+
|
|
5
|
+
(async () => {
|
|
6
|
+
|
|
7
|
+
const exchange = new ccxt.pro.binance ({ enableRateLimit: true })
|
|
8
|
+
const symbols = [ 'BTC/USDT', 'ETH/BTC', 'ETH/USDT' ]
|
|
9
|
+
|
|
10
|
+
const loop = async (symbol) => {
|
|
11
|
+
while (true) {
|
|
12
|
+
try {
|
|
13
|
+
const orderbook = await exchange.watchOrderBook (symbol)
|
|
14
|
+
console.log (new Date (), symbol, orderbook['asks'][0], orderbook['bids'][0])
|
|
15
|
+
} catch (e) {
|
|
16
|
+
console.log (symbol, e)
|
|
17
|
+
// do nothing and retry on next loop iteration
|
|
18
|
+
// throw e // uncomment to break all loops in case of an error in any one of them
|
|
19
|
+
// break // you can also break just this one loop if it fails
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
await Promise.all (symbols.map (symbol => loop (symbol)))
|
|
25
|
+
|
|
26
|
+
}) ()
|
|
@@ -0,0 +1,28 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('ccxt');
|
|
4
|
+
|
|
5
|
+
(async () => {
|
|
6
|
+
|
|
7
|
+
const exchange = new ccxt.pro.binance ({ enableRateLimit: true })
|
|
8
|
+
const symbols = [ 'BTC/USDT', 'ETH/BTC', 'ETH/USDT' ]
|
|
9
|
+
|
|
10
|
+
await Promise.all (symbols.map (symbol =>
|
|
11
|
+
|
|
12
|
+
(async () => {
|
|
13
|
+
|
|
14
|
+
while (true) {
|
|
15
|
+
try {
|
|
16
|
+
const orderbook = await exchange.watchOrderBook (symbol)
|
|
17
|
+
console.log (new Date (), symbol, orderbook['asks'][0], orderbook['bids'][0])
|
|
18
|
+
} catch (e) {
|
|
19
|
+
console.log (symbol, e)
|
|
20
|
+
// do nothing and retry on next loop iteration
|
|
21
|
+
// throw e // uncomment to break all loops in case of an error in any one of them
|
|
22
|
+
// break // you can also break just this one loop if it fails
|
|
23
|
+
}
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
}) ())
|
|
27
|
+
)
|
|
28
|
+
}) ()
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('ccxt')
|
|
4
|
+
, SocksProxyAgent = require ('socks-proxy-agent')
|
|
5
|
+
, socks = 'socks://127.0.0.1:7000'
|
|
6
|
+
, socksAgent = new SocksProxyAgent (socks)
|
|
7
|
+
, exchange = new ccxt.binance ({
|
|
8
|
+
enableRatLimit: true,
|
|
9
|
+
httpsAgent: socksAgent, // ←--------------------- socksAgent here
|
|
10
|
+
options: {
|
|
11
|
+
'ws': {
|
|
12
|
+
'options': { agent: socksAgent }, // ←--- socksAgent here
|
|
13
|
+
},
|
|
14
|
+
},
|
|
15
|
+
})
|
|
16
|
+
|
|
17
|
+
;(async () => {
|
|
18
|
+
console.log (socks)
|
|
19
|
+
const symbol = 'BTC/USDT'
|
|
20
|
+
await exchange.loadMarkets ()
|
|
21
|
+
console.log ('Markets loaded')
|
|
22
|
+
while (true) {
|
|
23
|
+
try {
|
|
24
|
+
const orderbook = await exchange.watchOrderBook (symbol)
|
|
25
|
+
console.log (exchange.iso8601 (exchange.milliseconds()), symbol, orderbook['asks'][0], orderbook['bids'][0])
|
|
26
|
+
} catch (e) {
|
|
27
|
+
console.log (e.constructor.name, e.message)
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
}) ()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('../../../ccxt');
|
|
4
|
+
|
|
5
|
+
async function watchOrderBook (exchange, symbol) {
|
|
6
|
+
while (true) {
|
|
7
|
+
try {
|
|
8
|
+
const method = exchange.has.watchOrderBook ? 'watchOrderBook' : 'fetchOrderBook'
|
|
9
|
+
const orderbook = await exchange[method](symbol)
|
|
10
|
+
console.log (new Date (), exchange.id, symbol, orderbook['asks'][0], orderbook['bids'][0])
|
|
11
|
+
} catch (e) {
|
|
12
|
+
console.log (symbol, e)
|
|
13
|
+
process.exit ()
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function watchExchange (exchangeId, symbols) {
|
|
19
|
+
const exchange = new ccxt.pro[exchangeId] ()
|
|
20
|
+
await exchange.loadMarkets ()
|
|
21
|
+
await Promise.all (symbols.map (symbol => watchOrderBook (exchange, symbol)))
|
|
22
|
+
}
|
|
23
|
+
|
|
24
|
+
async function main () {
|
|
25
|
+
const streams = {
|
|
26
|
+
'ftx': [
|
|
27
|
+
'BTC/USDT',
|
|
28
|
+
'ETH/BTC',
|
|
29
|
+
],
|
|
30
|
+
'coinex': [
|
|
31
|
+
'BTC/USDT',
|
|
32
|
+
'ETH/BTC',
|
|
33
|
+
],
|
|
34
|
+
};
|
|
35
|
+
|
|
36
|
+
const entries = Object.entries (streams)
|
|
37
|
+
await Promise.all (entries.map (([ exchangeId, symbols ]) => watchExchange (exchangeId, symbols)))
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
main()
|
|
@@ -0,0 +1,38 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('../../../ccxt');
|
|
4
|
+
|
|
5
|
+
async function watchOrderBook (exchange, symbol) {
|
|
6
|
+
while (true) {
|
|
7
|
+
try {
|
|
8
|
+
const orderbook = await exchange.watchOrderBook (symbol)
|
|
9
|
+
console.log (new Date (), exchange.id, symbol, orderbook['asks'][0], orderbook['bids'][0])
|
|
10
|
+
} catch (e) {
|
|
11
|
+
console.log (symbol, e)
|
|
12
|
+
}
|
|
13
|
+
}
|
|
14
|
+
}
|
|
15
|
+
|
|
16
|
+
async function watchExchange (exchangeId, symbols) {
|
|
17
|
+
const exchange = new ccxt.pro[exchangeId] ()
|
|
18
|
+
await exchange.loadMarkets ()
|
|
19
|
+
await Promise.all (symbols.map (symbol => watchOrderBook (exchange, symbol)))
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
async function main () {
|
|
23
|
+
const streams = {
|
|
24
|
+
'binance': [
|
|
25
|
+
'BTC/USDT',
|
|
26
|
+
'ETH/BTC',
|
|
27
|
+
],
|
|
28
|
+
'ftx': [
|
|
29
|
+
'BTC/USDT',
|
|
30
|
+
'ETH/BTC',
|
|
31
|
+
],
|
|
32
|
+
};
|
|
33
|
+
|
|
34
|
+
const entries = Object.entries (streams)
|
|
35
|
+
await Promise.all (entries.map (([ exchangeId, symbols ]) => watchExchange (exchangeId, symbols)))
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
main()
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('../../../ccxt');
|
|
4
|
+
|
|
5
|
+
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
+
|
|
7
|
+
|
|
8
|
+
async function watchTickerLoop (exchange, symbol) {
|
|
9
|
+
// exchange.verbose = true // uncomment for debugging purposes if necessary
|
|
10
|
+
while (true) {
|
|
11
|
+
try {
|
|
12
|
+
const ticker = await exchange.watchTicker (symbol)
|
|
13
|
+
console.log (new Date (), exchange.id, symbol, ticker['last'])
|
|
14
|
+
} catch (e) {
|
|
15
|
+
console.log (symbol, e)
|
|
16
|
+
// do nothing and retry on next loop iteration
|
|
17
|
+
// throw e // uncomment to break all loops in case of an error in any one of them
|
|
18
|
+
// break // you can also break just this one loop if it fails
|
|
19
|
+
}
|
|
20
|
+
}
|
|
21
|
+
}
|
|
22
|
+
|
|
23
|
+
async function exchangeLoop (exchangeId, symbols) {
|
|
24
|
+
const exchange = new ccxt.pro[exchangeId]()
|
|
25
|
+
await exchange.loadMarkets ()
|
|
26
|
+
const loops = symbols.map (symbol => watchTickerLoop (exchange, symbol))
|
|
27
|
+
await Promise.all (loops)
|
|
28
|
+
await exchange.close ()
|
|
29
|
+
}
|
|
30
|
+
|
|
31
|
+
async function main () {
|
|
32
|
+
const exchanges = {
|
|
33
|
+
'binance': [ 'BTC/USDT', 'ETH/USDT' ],
|
|
34
|
+
'ftx': [ 'BTC/USD', 'ETH/USD' ],
|
|
35
|
+
}
|
|
36
|
+
const loops = Object.entries (exchanges).map (([ exchangeId, symbols ]) => exchangeLoop (exchangeId, symbols))
|
|
37
|
+
await Promise.all (loops)
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
main ()
|
|
@@ -0,0 +1,27 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('ccxt');
|
|
4
|
+
|
|
5
|
+
async function watchOrderBook (exchangeId, symbol) {
|
|
6
|
+
|
|
7
|
+
const exchange = new ccxt.pro[exchangeId] ()
|
|
8
|
+
while (true) {
|
|
9
|
+
try {
|
|
10
|
+
const orderbook = await exchange.watchOrderBook (symbol)
|
|
11
|
+
console.log (new Date (), exchange.id, symbol, orderbook['asks'][0], orderbook['bids'][0])
|
|
12
|
+
} catch (e) {
|
|
13
|
+
console.log (symbol, e)
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
async function main () {
|
|
19
|
+
const streams = {
|
|
20
|
+
'binance': 'BTC/USDT',
|
|
21
|
+
'ftx': 'BTC/USDT',
|
|
22
|
+
};
|
|
23
|
+
|
|
24
|
+
await Promise.all (Object.entries (streams).map (([ exchangeId, symbol ]) => watchOrderBook (exchangeId, symbol)))
|
|
25
|
+
}
|
|
26
|
+
|
|
27
|
+
main()
|
|
@@ -0,0 +1,43 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('../../../ccxt');
|
|
4
|
+
|
|
5
|
+
console.log ('CCXT Version:', ccxt.version);
|
|
6
|
+
|
|
7
|
+
async function watchExchange (exchangeId, symbol) {
|
|
8
|
+
|
|
9
|
+
const exchange = new ccxt.pro[exchangeId] ({
|
|
10
|
+
newUpdates: true,
|
|
11
|
+
})
|
|
12
|
+
|
|
13
|
+
await exchange.loadMarkets ();
|
|
14
|
+
|
|
15
|
+
// exchange.verbose = true // uncomment for debugging purposes if necessary
|
|
16
|
+
|
|
17
|
+
while (true) {
|
|
18
|
+
try {
|
|
19
|
+
const trades = await exchange.watchTrades (symbol)
|
|
20
|
+
for (let i = 0; i < trades.length; i++) {
|
|
21
|
+
const trade = trades[i]
|
|
22
|
+
console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, trade['symbol'], trade['id'], trade['datetime'], trade['price'], trade['amount'])
|
|
23
|
+
}
|
|
24
|
+
} catch (e) {
|
|
25
|
+
console.log (symbol, e)
|
|
26
|
+
}
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
async function main () {
|
|
31
|
+
|
|
32
|
+
const streams = {
|
|
33
|
+
'binance': 'BTC/USDT',
|
|
34
|
+
'okex': 'BTC/USDT',
|
|
35
|
+
'kraken': 'BTC/USD',
|
|
36
|
+
};
|
|
37
|
+
|
|
38
|
+
const values = Object.entries (streams)
|
|
39
|
+
const promises = values.map (([ exchangeId, symbol ]) => watchExchange (exchangeId, symbol))
|
|
40
|
+
await Promise.all (promises)
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
main ()
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('../../../ccxt');
|
|
4
|
+
|
|
5
|
+
(async () => {
|
|
6
|
+
|
|
7
|
+
const streams = {
|
|
8
|
+
'binance': 'BTC/USDT',
|
|
9
|
+
'okex': 'BTC/USDT'
|
|
10
|
+
};
|
|
11
|
+
|
|
12
|
+
await Promise.all (Object.keys (streams).map (exchangeId =>
|
|
13
|
+
|
|
14
|
+
(async () => {
|
|
15
|
+
|
|
16
|
+
const exchange = new ccxt.pro[exchangeId] ({
|
|
17
|
+
enableRateLimit: true,
|
|
18
|
+
options: {
|
|
19
|
+
tradesLimit: 100, // lower = better, 1000 by default
|
|
20
|
+
},
|
|
21
|
+
})
|
|
22
|
+
const symbol = streams[exchangeId]
|
|
23
|
+
let lastId = ''
|
|
24
|
+
while (true) {
|
|
25
|
+
console.log ('---')
|
|
26
|
+
try {
|
|
27
|
+
const trades = await exchange.watchTrades (symbol)
|
|
28
|
+
for (let i = 0; i < trades.length; i++) {
|
|
29
|
+
const trade = trades[i]
|
|
30
|
+
if (trade['id'] > lastId) {
|
|
31
|
+
console.log (exchange.iso8601 (exchange.milliseconds ()), exchange.id, trade['symbol'], trade['id'], trade['datetime'], trade['price'], trade['amount'])
|
|
32
|
+
lastId = trade['id']
|
|
33
|
+
}
|
|
34
|
+
}
|
|
35
|
+
} catch (e) {
|
|
36
|
+
console.log (symbol, e)
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
|
|
40
|
+
}) ())
|
|
41
|
+
)
|
|
42
|
+
}) ()
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
'use strict';
|
|
2
|
+
|
|
3
|
+
const ccxt = require ('ccxt');
|
|
4
|
+
|
|
5
|
+
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
+
|
|
7
|
+
async function watchTrades (exchange, symbol) {
|
|
8
|
+
|
|
9
|
+
while (true) {
|
|
10
|
+
try {
|
|
11
|
+
const trades = await exchange.watchTrades (symbol)
|
|
12
|
+
console.log (new Date (), exchange.id, symbol, trades.length, 'trades')
|
|
13
|
+
} catch (e) {
|
|
14
|
+
console.log (symbol, e)
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async function main () {
|
|
20
|
+
const symbols = [ 'USDT/THB', 'BTC/THB', 'ETH/THB' ]
|
|
21
|
+
const exchange = new ccxt.pro.zipmex({
|
|
22
|
+
'newUpdates': true
|
|
23
|
+
})
|
|
24
|
+
const markets = await exchange.loadMarkets ()
|
|
25
|
+
exchange.verbose = true
|
|
26
|
+
await Promise.all (symbols.map ((symbol) => watchTrades (exchange, symbol)))
|
|
27
|
+
}
|
|
28
|
+
|
|
29
|
+
main()
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
// see this issue for details
|
|
2
|
+
// https://github.com/ccxt/ccxt/issues/6659
|
|
3
|
+
|
|
4
|
+
const ccxt = require ('ccxt')
|
|
5
|
+
|
|
6
|
+
const exchange = new ccxt.pro.kraken ()
|
|
7
|
+
|
|
8
|
+
function yellow (s) {
|
|
9
|
+
return '\x1b[33m' + s + '\x1b[0m'
|
|
10
|
+
}
|
|
11
|
+
|
|
12
|
+
async function runWs () {
|
|
13
|
+
while (1) {
|
|
14
|
+
const book = await exchange.watchOrderBook ('ETH/BTC')
|
|
15
|
+
console.log (new Date (), 'WS ', book['datetime'], book['bids'][0][0], book['asks'][0][0])
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
|
|
19
|
+
async function runRest () {
|
|
20
|
+
while (1) {
|
|
21
|
+
const book = await exchange.fetchOrderBook ('ETH/BTC')
|
|
22
|
+
const timestamp = new Date (exchange.last_response_headers['Date']).getTime ()
|
|
23
|
+
const datetime = exchange.iso8601 (timestamp)
|
|
24
|
+
console.log (new Date (), 'REST', yellow (datetime), book['bids'][0][0], book['asks'][0][0])
|
|
25
|
+
}
|
|
26
|
+
}
|
|
27
|
+
|
|
28
|
+
runWs ()
|
|
29
|
+
runRest ()
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
|
|
2
|
+
Microsoft Visual Studio Solution File, Format Version 12.00
|
|
3
|
+
# Visual Studio Version 17
|
|
4
|
+
VisualStudioVersion = 17.0.31903.59
|
|
5
|
+
MinimumVisualStudioVersion = 10.0.40219.1
|
|
6
|
+
Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "c#", "c#.csproj", "{7251951E-12D3-48C3-9CE2-C06F23F0DCD9}"
|
|
7
|
+
EndProject
|
|
8
|
+
Global
|
|
9
|
+
GlobalSection(SolutionConfigurationPlatforms) = preSolution
|
|
10
|
+
Debug|Any CPU = Debug|Any CPU
|
|
11
|
+
Release|Any CPU = Release|Any CPU
|
|
12
|
+
EndGlobalSection
|
|
13
|
+
GlobalSection(SolutionProperties) = preSolution
|
|
14
|
+
HideSolutionNode = FALSE
|
|
15
|
+
EndGlobalSection
|
|
16
|
+
GlobalSection(ProjectConfigurationPlatforms) = postSolution
|
|
17
|
+
{7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU
|
|
18
|
+
{7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Debug|Any CPU.Build.0 = Debug|Any CPU
|
|
19
|
+
{7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Release|Any CPU.ActiveCfg = Release|Any CPU
|
|
20
|
+
{7251951E-12D3-48C3-9CE2-C06F23F0DCD9}.Release|Any CPU.Build.0 = Release|Any CPU
|
|
21
|
+
EndGlobalSection
|
|
22
|
+
EndGlobal
|
|
@@ -0,0 +1,19 @@
|
|
|
1
|
+
<Project Sdk="Microsoft.NET.Sdk">
|
|
2
|
+
|
|
3
|
+
<ItemGroup>
|
|
4
|
+
<PackageReference Include="Newtonsoft.Json" Version="13.0.3" />
|
|
5
|
+
</ItemGroup>
|
|
6
|
+
|
|
7
|
+
<ItemGroup>
|
|
8
|
+
<ProjectReference Include="..\..\cs\ccxt\ccxt.csproj" />
|
|
9
|
+
</ItemGroup>
|
|
10
|
+
|
|
11
|
+
<PropertyGroup>
|
|
12
|
+
<OutputType>Exe</OutputType>
|
|
13
|
+
<TargetFramework>net7.0</TargetFramework>
|
|
14
|
+
<RootNamespace>examples</RootNamespace>
|
|
15
|
+
<ImplicitUsings>enable</ImplicitUsings>
|
|
16
|
+
<Nullable>enable</Nullable>
|
|
17
|
+
</PropertyGroup>
|
|
18
|
+
|
|
19
|
+
</Project>
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
<!DOCTYPE HTML>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>CCXT Basic example for the browser</title>
|
|
5
|
+
<script type="text/javascript" src="https://unpkg.com/ccxt"></script>
|
|
6
|
+
<script>
|
|
7
|
+
|
|
8
|
+
document.addEventListener ("DOMContentLoaded", function () {
|
|
9
|
+
|
|
10
|
+
alert ('ccxt version ' + ccxt.version);
|
|
11
|
+
|
|
12
|
+
const exchange = new ccxt.bittrex ({
|
|
13
|
+
'proxyUrl': 'https://cors-anywhere.herokuapp.com/'
|
|
14
|
+
})
|
|
15
|
+
|
|
16
|
+
const symbol = 'BTC/USDT'
|
|
17
|
+
|
|
18
|
+
exchange.fetchTicker (symbol).then (ticker => {
|
|
19
|
+
|
|
20
|
+
const text = [
|
|
21
|
+
exchange.id,
|
|
22
|
+
symbol,
|
|
23
|
+
JSON.stringify (ticker, undefined, '\n\t')
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
document.getElementById ('content').innerHTML = text.join (' ')
|
|
27
|
+
|
|
28
|
+
}).catch (e => {
|
|
29
|
+
|
|
30
|
+
const text = [
|
|
31
|
+
e.constructor.name,
|
|
32
|
+
e.message,
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
document.getElementById ('content').innerHTML = text.join (' ')
|
|
36
|
+
|
|
37
|
+
})
|
|
38
|
+
|
|
39
|
+
})
|
|
40
|
+
</script>
|
|
41
|
+
</head>
|
|
42
|
+
<body>
|
|
43
|
+
<h1>Hello, CCXT!</h1>
|
|
44
|
+
<pre id="content"></pre>
|
|
45
|
+
</body>
|
|
46
|
+
</html>
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
<!DOCTYPE HTML>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>CCXT Basic example for the browser</title>
|
|
5
|
+
<script type="text/javascript" src="https://unpkg.com/ccxt"></script>
|
|
6
|
+
<style type="text/css">
|
|
7
|
+
#contentA { background-color: #ccccff; }
|
|
8
|
+
#contentB { background-color: #ffcccc; }
|
|
9
|
+
</style>
|
|
10
|
+
<script>'use strict'
|
|
11
|
+
|
|
12
|
+
class MyExchange extends ccxt.coinbasepro {
|
|
13
|
+
|
|
14
|
+
async fetchTicker (symbol, params = {}) {
|
|
15
|
+
alert ("I'm about to call the parent method from the overrided class, woohooo!")
|
|
16
|
+
// just call the parent method and that's it
|
|
17
|
+
return super.fetchTicker (symbol, params);
|
|
18
|
+
}
|
|
19
|
+
}
|
|
20
|
+
|
|
21
|
+
document.addEventListener ("DOMContentLoaded", function () {
|
|
22
|
+
|
|
23
|
+
const exchange = new MyExchange ()
|
|
24
|
+
|
|
25
|
+
const symbol = 'ETH/BTC'
|
|
26
|
+
|
|
27
|
+
const showFetchedTicker = function (ticker, elementId) {
|
|
28
|
+
|
|
29
|
+
const text = [
|
|
30
|
+
exchange.id,
|
|
31
|
+
symbol,
|
|
32
|
+
JSON.stringify (ticker, undefined, '\n\t')
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
document.getElementById (elementId).innerHTML = text.join (' ')
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
exchange.fetchTicker (symbol).then (ticker => showFetchedTicker (ticker, 'content'))
|
|
40
|
+
})
|
|
41
|
+
</script>
|
|
42
|
+
</head>
|
|
43
|
+
<body>
|
|
44
|
+
<h1>Hello, CCXT!</h1>
|
|
45
|
+
<pre id="content"></pre>
|
|
46
|
+
</body>
|
|
47
|
+
</html>
|
|
@@ -0,0 +1,52 @@
|
|
|
1
|
+
<!DOCTYPE HTML>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>CCXT Basic example for the browser</title>
|
|
5
|
+
<script type="text/javascript" src="https://unpkg.com/ccxt"></script>
|
|
6
|
+
<script>
|
|
7
|
+
|
|
8
|
+
document.addEventListener ("DOMContentLoaded", function () {
|
|
9
|
+
|
|
10
|
+
alert ('ccxt version ' + ccxt.version + ' supporting ');
|
|
11
|
+
|
|
12
|
+
const pollTickerContinuously = async function (exchange, symbol) {
|
|
13
|
+
|
|
14
|
+
while (true) {
|
|
15
|
+
|
|
16
|
+
try {
|
|
17
|
+
|
|
18
|
+
const ticker = await exchange.fetchTicker (symbol)
|
|
19
|
+
|
|
20
|
+
const text = [
|
|
21
|
+
exchange.id,
|
|
22
|
+
symbol,
|
|
23
|
+
JSON.stringify (ticker, undefined, '\n\t')
|
|
24
|
+
]
|
|
25
|
+
|
|
26
|
+
document.getElementById ('content').innerHTML = text.join (' ');
|
|
27
|
+
|
|
28
|
+
} catch (e) {
|
|
29
|
+
|
|
30
|
+
const text = [
|
|
31
|
+
e.constructor.name,
|
|
32
|
+
e.message,
|
|
33
|
+
]
|
|
34
|
+
|
|
35
|
+
document.getElementById ('content').innerHTML = text.join (' ');
|
|
36
|
+
|
|
37
|
+
}
|
|
38
|
+
}
|
|
39
|
+
}
|
|
40
|
+
|
|
41
|
+
const exchange = new ccxt.binance ({ enableRateLimit: true })
|
|
42
|
+
const symbol = 'ETH/BTC'
|
|
43
|
+
|
|
44
|
+
pollTickerContinuously (exchange, symbol)
|
|
45
|
+
})
|
|
46
|
+
</script>
|
|
47
|
+
</head>
|
|
48
|
+
<body>
|
|
49
|
+
<h1>Hello, CCXT!</h1>
|
|
50
|
+
<pre id="content"></pre>
|
|
51
|
+
</body>
|
|
52
|
+
</html>
|
|
@@ -0,0 +1,49 @@
|
|
|
1
|
+
<!DOCTYPE HTML>
|
|
2
|
+
<html>
|
|
3
|
+
<head>
|
|
4
|
+
<title>CCXT Basic example for the browser</title>
|
|
5
|
+
<script type="text/javascript" src="https://unpkg.com/ccxt"></script>
|
|
6
|
+
<script>
|
|
7
|
+
|
|
8
|
+
document.addEventListener ("DOMContentLoaded", async function () {
|
|
9
|
+
|
|
10
|
+
alert ('ccxt version ' + ccxt.version);
|
|
11
|
+
|
|
12
|
+
const enableRateLimit = true
|
|
13
|
+
const exchange = new ccxt.poloniex ({ enableRateLimit })
|
|
14
|
+
const symbol = 'ETH/BTC'
|
|
15
|
+
|
|
16
|
+
while (true) {
|
|
17
|
+
|
|
18
|
+
let text = []
|
|
19
|
+
|
|
20
|
+
try {
|
|
21
|
+
|
|
22
|
+
const ticker = await exchange.fetchTicker (symbol)
|
|
23
|
+
|
|
24
|
+
text = [
|
|
25
|
+
exchange.id,
|
|
26
|
+
symbol,
|
|
27
|
+
JSON.stringify (exchange.omit (ticker, 'info'), undefined, '\t')
|
|
28
|
+
]
|
|
29
|
+
|
|
30
|
+
} catch (e) {
|
|
31
|
+
|
|
32
|
+
text = [
|
|
33
|
+
e.constructor.name,
|
|
34
|
+
e.message,
|
|
35
|
+
]
|
|
36
|
+
}
|
|
37
|
+
|
|
38
|
+
document.getElementById ('content').innerHTML = text.join (' ')
|
|
39
|
+
|
|
40
|
+
}
|
|
41
|
+
|
|
42
|
+
})
|
|
43
|
+
</script>
|
|
44
|
+
</head>
|
|
45
|
+
<body>
|
|
46
|
+
<h1>Hello, CCXT!</h1>
|
|
47
|
+
<pre id="content"></pre>
|
|
48
|
+
</body>
|
|
49
|
+
</html>
|