ccxt 4.2.100 → 4.3.2
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +6 -5
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/base/Exchange.js +3 -0
- package/dist/cjs/src/binance.js +56 -0
- package/dist/cjs/src/bingx.js +2 -2
- package/dist/cjs/src/bitget.js +69 -5
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/coinbase.js +2 -1
- package/dist/cjs/src/coinbasepro.js +1 -1
- package/dist/cjs/src/coinex.js +164 -206
- package/dist/cjs/src/cryptocom.js +5 -5
- package/dist/cjs/src/hyperliquid.js +74 -0
- package/dist/cjs/src/kraken.js +8 -3
- package/dist/cjs/src/kucoin.js +13 -11
- package/dist/cjs/src/okx.js +76 -5
- package/dist/cjs/src/pro/kraken.js +2 -2
- package/dist/cjs/src/woo.js +40 -0
- package/js/ccxt.d.ts +1 -1
- package/js/ccxt.js +1 -1
- package/js/src/base/Exchange.d.ts +2 -1
- package/js/src/base/Exchange.js +3 -0
- package/js/src/base/types.d.ts +5 -0
- package/js/src/binance.d.ts +3 -1
- package/js/src/binance.js +56 -0
- package/js/src/bingx.js +3 -3
- package/js/src/bitget.d.ts +1 -0
- package/js/src/bitget.js +69 -5
- package/js/src/bybit.js +1 -1
- package/js/src/coinbase.js +2 -1
- package/js/src/coinbasepro.d.ts +1 -1
- package/js/src/coinbasepro.js +1 -1
- package/js/src/coinex.js +164 -206
- package/js/src/cryptocom.js +5 -5
- package/js/src/hyperliquid.d.ts +2 -1
- package/js/src/hyperliquid.js +75 -1
- package/js/src/kraken.js +8 -3
- package/js/src/kucoin.js +13 -11
- package/js/src/okx.d.ts +1 -0
- package/js/src/okx.js +76 -5
- package/js/src/pro/kraken.js +2 -2
- package/js/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +1 -1
- package/js/src/woo.d.ts +1 -0
- package/js/src/woo.js +40 -0
- package/package.json +2 -1
- package/.dockerignore +0 -6
- package/.eslintignore +0 -1
- package/.git-templates/hooks/pre-push +0 -55
- package/.gitattributes +0 -7
- package/CHANGELOG.md +0 -6003
- package/CODEOWNERS +0 -1
- package/CONTRIBUTING.md +0 -1099
- package/build.sh +0 -217
- package/change.sh +0 -18
- package/cleanup.sh +0 -18
- package/composer-install.sh +0 -20
- package/dist/ccxt.browser.js +0 -327256
- package/dist/ccxt.browser.min.js +0 -30
- package/dist/ccxt.browser.min.js.LICENSE.txt +0 -12
- package/doc/FAQ.rst +0 -1
- package/doc/Makefile +0 -20
- package/doc/_static/css/dark.css +0 -101
- package/doc/_static/css/index.css +0 -128
- package/doc/_static/favicon.ico +0 -0
- package/doc/_static/javascript/binance-portal.min.js +0 -2369
- package/doc/_static/javascript/index.js +0 -195
- package/doc/_static/javascript/jquery-ui.min.js +0 -6
- package/doc/ccxt.pro.install.rst +0 -1
- package/doc/ccxt.pro.manual.rst +0 -1665
- package/doc/exchange-markets-by-country.rst +0 -1423
- package/doc/exchange-markets.rst +0 -1441
- package/doc/index.rst +0 -35
- package/doc/install.rst +0 -1
- package/doc/make.bat +0 -36
- package/doc/manual.rst +0 -7471
- package/doc/readme.rst +0 -2191
- package/doc/requirements.txt +0 -6
- package/examples/ccxt.pro/html/watchTicker.html +0 -51
- package/examples/ccxt.pro/js/binance-fetch-balance-snapshot-watch-balance-updates.js +0 -55
- package/examples/ccxt.pro/js/binance-https-proxy.js +0 -48
- package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols-continuously.js +0 -38
- package/examples/ccxt.pro/js/binance-watch-ohlcv-many-symbols.js +0 -64
- package/examples/ccxt.pro/js/binance-watch-ticker-many-symbols.js +0 -62
- package/examples/ccxt.pro/js/build-ohlcv-many-symbols.js +0 -68
- package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades-warmup.js +0 -82
- package/examples/ccxt.pro/js/calculate-ohlcvs-from-trades.js +0 -59
- package/examples/ccxt.pro/js/exchange-capabitities.js +0 -72
- package/examples/ccxt.pro/js/exchange-close.js +0 -46
- package/examples/ccxt.pro/js/gateio-swap-watch-many-orderbooks.js +0 -30
- package/examples/ccxt.pro/js/gateio-watch-balance.js +0 -23
- package/examples/ccxt.pro/js/gateio-watch-order-book.js +0 -71
- package/examples/ccxt.pro/js/graceful-shutdown.js +0 -43
- package/examples/ccxt.pro/js/many-exchanges-many-streams.js +0 -37
- package/examples/ccxt.pro/js/okex-create-futures-order.js +0 -48
- package/examples/ccxt.pro/js/okex-watch-balance-and-create-order.js +0 -54
- package/examples/ccxt.pro/js/okx-watch-tickers.js +0 -31
- package/examples/ccxt.pro/js/one-exchange-many-different-streams.js +0 -46
- package/examples/ccxt.pro/js/one-exchange-many-streams-2.js +0 -26
- package/examples/ccxt.pro/js/one-exchange-many-streams.js +0 -28
- package/examples/ccxt.pro/js/socks-binance-watch-orderbook.js +0 -30
- package/examples/ccxt.pro/js/watch-fetch-many-exchanges-many-ordersbooks.js +0 -40
- package/examples/ccxt.pro/js/watch-many-exchanges-many-ordersbooks.js +0 -38
- package/examples/ccxt.pro/js/watch-many-exchanges-many-symbols.js +0 -40
- package/examples/ccxt.pro/js/watch-many-orderbooks.js +0 -27
- package/examples/ccxt.pro/js/watch-new-trades-only.js +0 -43
- package/examples/ccxt.pro/js/watch-new-trades.js +0 -42
- package/examples/ccxt.pro/js/watch-trades-many-symbols.js +0 -29
- package/examples/ccxt.pro/js/watch-vs-fetch.js +0 -29
- package/examples/cs/Examples.sln +0 -22
- package/examples/cs/c#.csproj +0 -19
- package/examples/html/basic-cors-proxy.html +0 -46
- package/examples/html/basic-inheritance.html +0 -47
- package/examples/html/basic-poller.html +0 -52
- package/examples/html/basic-rate-limiting.html +0 -49
- package/examples/html/basic.html +0 -43
- package/examples/html/binance-cors-proxy.html +0 -28
- package/examples/html/bitmex-browser-cors-proxy.js +0 -7
- package/examples/html/bitmex-cors.html +0 -46
- package/examples/html/tradingview-charts.html +0 -61
- package/examples/html/webworker/index.html +0 -97
- package/examples/html/webworker/worker.js +0 -43
- package/examples/js/advanced-error-handling.js +0 -39
- package/examples/js/aggregate-orderbook.js +0 -54
- package/examples/js/arbitrage-pairs.js +0 -130
- package/examples/js/basic-chart.js +0 -29
- package/examples/js/basic-orderbook-polling.js +0 -13
- package/examples/js/bcc-vs-bch.js +0 -115
- package/examples/js/benchmark.js +0 -104
- package/examples/js/binance-fetch-all-deposits.js +0 -45
- package/examples/js/binance-fetch-ohlcv-many-symbols-async-await.js +0 -34
- package/examples/js/binance-fetch-ohlcv-many-symbols-promise-then-callbacks.js +0 -33
- package/examples/js/binance-fetchTicker-delivery-vs-future.js +0 -31
- package/examples/js/binance-futures-transfer-from-sub-account-to-master.js +0 -41
- package/examples/js/binance-margin-stop-order.js +0 -39
- package/examples/js/binance-server-time.js +0 -34
- package/examples/js/binance-universal-transfer.js +0 -16
- package/examples/js/bitfinex-fetch-trades.js +0 -35
- package/examples/js/bitfinex2-fetch-trades.js +0 -35
- package/examples/js/bitmex-browser-cors-proxy.js +0 -7
- package/examples/js/bitpanda-fetchMyTrades-reduce.js +0 -36
- package/examples/js/bitrue-fetch-balance.js +0 -28
- package/examples/js/bitstamp-private-api.js +0 -115
- package/examples/js/bitstamp-public-api.js +0 -39
- package/examples/js/bittrex-balance.js +0 -50
- package/examples/js/bittrex-fetch-closed-orders-history.js +0 -69
- package/examples/js/blockchaincom-withdrawal.js +0 -59
- package/examples/js/build-ohlcv-bars.js +0 -48
- package/examples/js/builtin-rate-limiting-rest-poller.js +0 -25
- package/examples/js/bybit-trailing.js +0 -62
- package/examples/js/bybit-updated.cjs +0 -154
- package/examples/js/coinbase-fetch-all-balances.js +0 -36
- package/examples/js/coinex-fetch-all-deposit-addresses-using-fetchDepositAddress.js +0 -47
- package/examples/js/coinex-futures.js +0 -75
- package/examples/js/coinone-fetch-tickers.js +0 -54
- package/examples/js/coinone-markets.js +0 -16
- package/examples/js/compare-two-exchanges-capabilities.js +0 -36
- package/examples/js/cors-proxy.js +0 -5
- package/examples/js/create-order-handle-errors.js +0 -55
- package/examples/js/create-order-position-with-takeprofit-stoploss.js +0 -71
- package/examples/js/create-order-with-retry.js +0 -65
- package/examples/js/create-order-ws-example.js +0 -25
- package/examples/js/create-orders-example.js +0 -17
- package/examples/js/create-trailing-amount-order.js +0 -36
- package/examples/js/create-trailing-percent-order.js +0 -36
- package/examples/js/credentials.json +0 -5
- package/examples/js/custom-proxy-agent-for-js.js +0 -10
- package/examples/js/custom-proxy-url.js +0 -23
- package/examples/js/delta-maintenance-margin-rate-max-leverage.js +0 -60
- package/examples/js/env-variables.js +0 -26
- package/examples/js/error-handling.js +0 -89
- package/examples/js/exchange-capabilities.js +0 -135
- package/examples/js/exchanges-by-volume.js +0 -60
- package/examples/js/exchanges.js +0 -40
- package/examples/js/fetch-all-balances.js +0 -219
- package/examples/js/fetch-all-tickers-to-files-2.js +0 -53
- package/examples/js/fetch-all-tickers-to-files.js +0 -77
- package/examples/js/fetch-balance.js +0 -28
- package/examples/js/fetch-create-deposit-address.js +0 -101
- package/examples/js/fetch-from-many-exchanges-simultaneously.js +0 -21
- package/examples/js/fetch-funding-rate-history.js +0 -25
- package/examples/js/fetch-futures/prettier.config.js +0 -5
- package/examples/js/fetch-futures/src/index.js +0 -25
- package/examples/js/fetch-ohlcv-from-to-mark-index-premium.js +0 -72
- package/examples/js/fetch-ohlcv-many-exchanges-continuosly.js +0 -39
- package/examples/js/fetch-ohlcv.js +0 -16
- package/examples/js/fetch-okex-futures.js +0 -22
- package/examples/js/fetch-orders.js +0 -27
- package/examples/js/fetch-ticker-from-multiple-exchanges.js +0 -35
- package/examples/js/fetch-ticker-where-available.js +0 -75
- package/examples/js/fetch-tickers/build/index.js +0 -19
- package/examples/js/fetch-tickers/prettier.config.js +0 -5
- package/examples/js/fetch-tickers/src/index.js +0 -17
- package/examples/js/gateio-create-batch-order.js +0 -43
- package/examples/js/gateio-futures.js +0 -49
- package/examples/js/gateio-open-close-contract.js +0 -49
- package/examples/js/gateio-swaps.js +0 -74
- package/examples/js/gdax-fetch-trades-pagination.js +0 -29
- package/examples/js/hitbtc2-withdraw.js +0 -61
- package/examples/js/how-to-import-one-exchange-esm.js +0 -10
- package/examples/js/huobi-futures.js +0 -71
- package/examples/js/huobi-open-close-contract.js +0 -63
- package/examples/js/huobi-swaps.js +0 -70
- package/examples/js/huobipro-market-buy-sell-fetch-trading-limits.js +0 -98
- package/examples/js/hybridCJSExample.cjs +0 -19
- package/examples/js/hybridESMExample.js +0 -19
- package/examples/js/idex-fetch-balance.js +0 -13
- package/examples/js/instantiate-all-at-once.js +0 -46
- package/examples/js/instantiate-all-from-json.js +0 -31
- package/examples/js/kraken-create-and-close-position.js +0 -54
- package/examples/js/kraken-fetch-order-trades.js +0 -33
- package/examples/js/kraken-margin-trading.js +0 -89
- package/examples/js/kucoin-rate-limit.js +0 -38
- package/examples/js/latoken-example.js +0 -108
- package/examples/js/live-orderbook.js +0 -106
- package/examples/js/live-ticker.js +0 -80
- package/examples/js/live-tickers.js +0 -74
- package/examples/js/load-all-contracts.js +0 -41
- package/examples/js/load-all-symbols-at-once.js +0 -69
- package/examples/js/load-all-tickers-at-once.js +0 -91
- package/examples/js/load-markets-to-files.js +0 -57
- package/examples/js/looping-over-all-symbols-of-specific-exchanges.js +0 -61
- package/examples/js/looping-over-specific-symbols-of-all-exchanges.js +0 -91
- package/examples/js/margin-loan-borrow-buy-sell-repay.js +0 -70
- package/examples/js/market-status-and-currency-status.js +0 -29
- package/examples/js/ohlcv-console-chart.js +0 -29
- package/examples/js/okex-fetch-closed-orders-archive.js +0 -31
- package/examples/js/okex-transfer.js +0 -51
- package/examples/js/okx-poll-fetch-my-trades.js +0 -37
- package/examples/js/okx-poll-rate-limit.js +0 -48
- package/examples/js/order-book-extra-level-depth-param.js +0 -20
- package/examples/js/phemex-create-order-position-with-takeprofit-stoploss.js +0 -49
- package/examples/js/poll-ohlcv.js +0 -43
- package/examples/js/poloniex-fetch-order-books.js +0 -35
- package/examples/js/poloniex-limits-amount-min.js +0 -62
- package/examples/js/proxy-round-robin.js +0 -98
- package/examples/js/proxy-usage.js +0 -32
- package/examples/js/sample-local-proxy-server-with-cors.js +0 -12
- package/examples/js/search-all-exchanges.js +0 -159
- package/examples/js/shared-load-markets.js +0 -80
- package/examples/js/sort-swap-markets-by-hourly-price-change.js +0 -55
- package/examples/js/symbols.js +0 -110
- package/examples/js/theocean.js +0 -41
- package/examples/js/tickers.js +0 -106
- package/examples/js/validate-paginated-data.js +0 -61
- package/examples/js/watch-OHLCV-For-Symbols.js +0 -15
- package/examples/js/watch-OHLCV.js +0 -12
- package/examples/js/watch-OrderBook-For-Symbols.js +0 -11
- package/examples/js/watch-Trades-For-Symbols.js +0 -11
- package/examples/js/watch-tickers.js +0 -11
- package/examples/js/watchOHLCVForSymbols.js +0 -15
- package/examples/js/watchOrderBookForSymbols.js +0 -11
- package/examples/js/watchPositions-many-exchanges-continuosly.d.ts +0 -2
- package/examples/js/watchPositions-many-exchanges-continuosly.d.ts.map +0 -1
- package/examples/js/watchPositions-many-exchanges-continuosly.js +0 -49
- package/examples/js/watchPositions.d.ts +0 -2
- package/examples/js/watchPositions.d.ts.map +0 -1
- package/examples/js/watchPositions.js +0 -13
- package/examples/js/watchPositionsForSymbols.d.ts +0 -2
- package/examples/js/watchPositionsForSymbols.d.ts.map +0 -1
- package/examples/js/watchPositionsForSymbols.js +0 -14
- package/examples/js/watchTradesForSymbols.js +0 -11
- package/examples/js/withdraw-from-one-exchange-to-another.js +0 -50
- package/examples/php/README.md +0 -7
- package/examples/py/README.md +0 -15
- package/examples/py/playing_with_ccxt_example.ipynb +0 -222
- package/examples/ts/.eslintrc +0 -111
- package/examples/ts/benchmark.ts +0 -134
- package/examples/ts/build-ohlcv-bars.ts +0 -53
- package/examples/ts/cli.ts +0 -397
- package/examples/ts/compare-two-exchanges-capabilities.ts +0 -36
- package/examples/ts/create-order-position-with-takeprofit-stoploss.ts +0 -89
- package/examples/ts/create-order-ws-example.ts +0 -33
- package/examples/ts/create-orders-example.ts +0 -21
- package/examples/ts/create-trailing-amount-order.ts +0 -37
- package/examples/ts/create-trailing-percent-order.ts +0 -37
- package/examples/ts/custom-proxy-agent-for-js.ts +0 -14
- package/examples/ts/fetch-futures/package-lock.json +0 -116
- package/examples/ts/fetch-futures/package.json +0 -34
- package/examples/ts/fetch-futures/prettier.config.js +0 -4
- package/examples/ts/fetch-futures/src/index.ts +0 -28
- package/examples/ts/fetch-futures/tsconfig.json +0 -28
- package/examples/ts/fetch-ohlcv-many-exchanges-continuosly.ts +0 -44
- package/examples/ts/fetch-ohlcv.ts +0 -17
- package/examples/ts/fetch-tickers/package-lock.json +0 -116
- package/examples/ts/fetch-tickers/package.json +0 -34
- package/examples/ts/fetch-tickers/prettier.config.js +0 -4
- package/examples/ts/fetch-tickers/src/index.ts +0 -21
- package/examples/ts/fetch-tickers/tsconfig.json +0 -28
- package/examples/ts/how-to-import-one-exchange-esm.ts +0 -11
- package/examples/ts/kraken-create-and-close-position.ts +0 -69
- package/examples/ts/margin-loan-borrow-buy-sell-repay.ts +0 -72
- package/examples/ts/nextjs-page-router/.eslintrc.json +0 -3
- package/examples/ts/nextjs-page-router/README.md +0 -43
- package/examples/ts/nextjs-page-router/next.config.js +0 -6
- package/examples/ts/nextjs-page-router/package-lock.json +0 -7425
- package/examples/ts/nextjs-page-router/package.json +0 -28
- package/examples/ts/nextjs-page-router/postcss.config.js +0 -6
- package/examples/ts/nextjs-page-router/public/favicon.ico +0 -0
- package/examples/ts/nextjs-page-router/src/pages/_app.tsx +0 -6
- package/examples/ts/nextjs-page-router/src/pages/_document.tsx +0 -13
- package/examples/ts/nextjs-page-router/src/pages/balance.tsx +0 -46
- package/examples/ts/nextjs-page-router/src/pages/index.tsx +0 -8
- package/examples/ts/nextjs-page-router/src/pages/tickers.tsx +0 -61
- package/examples/ts/nextjs-page-router/src/styles/globals.css +0 -27
- package/examples/ts/nextjs-page-router/tailwind.config.ts +0 -20
- package/examples/ts/nextjs-page-router/tsconfig.json +0 -22
- package/examples/ts/phemex-create-order-position-with-takeprofit-stoploss.ts +0 -62
- package/examples/ts/proxy-usage.ts +0 -41
- package/examples/ts/sample-local-proxy-server-with-cors.ts +0 -15
- package/examples/ts/watch-OHLCV-For-Symbols.ts +0 -17
- package/examples/ts/watch-OHLCV.ts +0 -14
- package/examples/ts/watch-OrderBook-For-Symbols.ts +0 -13
- package/examples/ts/watch-Trades-For-Symbols.ts +0 -13
- package/examples/ts/watch-tickers.ts +0 -13
- package/examples/ts/watchPositions-many-exchanges-continuosly.ts +0 -53
- package/examples/ts/watchPositions.ts +0 -15
- package/examples/ts/watchPositionsForSymbols.ts +0 -16
- package/examples/tsconfig.json +0 -27
- package/examples2md.js +0 -79
- package/gource.sh +0 -3
- package/index.html +0 -7
- package/jsdoc2md.js +0 -122
- package/multilang.sh +0 -164
- package/pro-tests.json +0 -57
- package/pyproject.toml +0 -8
- package/rollup.config.js +0 -60
- package/skip-tests.json +0 -1653
- package/test-commonjs.cjs +0 -65
- package/tests-manager.sh +0 -96
- package/tsconfig.json +0 -111
- package/webpack.config.js +0 -46
|
@@ -1,70 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
// Note, this is just an example and might not yet work on other exchanges, which are being still unified.
|
|
4
|
-
async function example() {
|
|
5
|
-
// ########## user inputs ##########
|
|
6
|
-
const exchange = new ccxt['binance']({ 'apiKey': 'xxx', 'secret': 'xxx' });
|
|
7
|
-
const symbol = 'BUSD/USDT'; // set target symbol
|
|
8
|
-
const marginMode = 'isolated'; // margin mode (cross or isolated)
|
|
9
|
-
const collateral_coin = 'USDT'; // which asset you want to use for margin-borrow collateral
|
|
10
|
-
const borrow_coin = 'BUSD'; // which coin to borrow
|
|
11
|
-
const order_side = 'sell'; // which side to trade
|
|
12
|
-
const amount_to_trade = 14; // how many coins to sell
|
|
13
|
-
const order_type = 'limit'; // order type (can be market, limit or etc)
|
|
14
|
-
const limit_price = 0.99; // price to sell at (set undefined/null/None if market-order)
|
|
15
|
-
const margin_magnitude = 5; // target margin (aka 'leverage'). This might also be obtainable using other unified methods, but for example purposes, we set here manually
|
|
16
|
-
// ########## end of user-inputs ##########
|
|
17
|
-
//
|
|
18
|
-
// for example purposes, let's also check available balance at first
|
|
19
|
-
const balance_margin = await exchange.fetchBalance({ 'defaultType': 'margin', 'marginMode': marginMode }); // use `defaultType` because of temporary bug, otherwise, after several days, you can use `type` too.
|
|
20
|
-
// if we don't have enought coins, then we have to borrow at first
|
|
21
|
-
let needed_amount_to_borrow = undefined; // will be auto-set below
|
|
22
|
-
if (amount_to_trade > balance_margin[symbol][borrow_coin]['free']) {
|
|
23
|
-
needed_amount_to_borrow = amount_to_trade - balance_margin[symbol][borrow_coin]['free'];
|
|
24
|
-
console.log('hmm, I have only ', balance_margin[symbol][borrow_coin]['free'], ' ', borrow_coin, ' in margin balance, and still need additional ', needed_amount_to_borrow, ' to make an order. Lets borrow it.');
|
|
25
|
-
// To initate a borrow, at first, check if we have enough collateral (for this example, as we make a sell-short, we need '-1' to keep for collateral currency)
|
|
26
|
-
const needed_collateral_amount = needed_amount_to_borrow / (margin_magnitude - 1);
|
|
27
|
-
// Check if we have any collateral to get permission for borrow
|
|
28
|
-
if (balance_margin[symbol][collateral_coin]['free'] < needed_collateral_amount) {
|
|
29
|
-
// If we don't have enough collateral, then let's try to transfer collateral-asset from spot-balance to margin-balance
|
|
30
|
-
console.log('hmm, I have only ', balance_margin[symbol][collateral_coin]['free'], ' in balance, but ', needed_collateral_amount, ' collateral is needed. I should transfer ', needed_collateral_amount, ' from spot');
|
|
31
|
-
// let's check if we have spot balance at all
|
|
32
|
-
const balance_spot = await exchange.fetchBalance({ 'type': 'spot' });
|
|
33
|
-
if (exchange.parseNumber(balance_spot[collateral_coin]['free']) < needed_collateral_amount) {
|
|
34
|
-
console.log('hmm, I neither do have enough balance on spot - only ', balance_spot[collateral_coin]['free'], '. Script can not continue...');
|
|
35
|
-
return;
|
|
36
|
-
}
|
|
37
|
-
else {
|
|
38
|
-
console.log('Transferring ', needed_collateral_amount, ' to margin account');
|
|
39
|
-
await exchange.transfer(collateral_coin, needed_collateral_amount, 'spot', marginMode, { 'symbol': symbol });
|
|
40
|
-
}
|
|
41
|
-
}
|
|
42
|
-
// now, as we have enough margin collateral, initiate borrow
|
|
43
|
-
console.log('Initiating margin borrow of ', needed_amount_to_borrow, ' ', borrow_coin);
|
|
44
|
-
const borrowResult = await exchange.borrowMargin(borrow_coin, needed_amount_to_borrow, symbol, { 'marginMode': marginMode });
|
|
45
|
-
}
|
|
46
|
-
console.log('Submitting order.');
|
|
47
|
-
const order = await exchange.createOrder(symbol, order_type, order_side, amount_to_trade, limit_price, { 'marginMode': marginMode });
|
|
48
|
-
console.log('Order was submitted !', order['id']);
|
|
49
|
-
//
|
|
50
|
-
//
|
|
51
|
-
// ...
|
|
52
|
-
// ...
|
|
53
|
-
// some time later, if you want to repay the loan back (like 'close the position')...
|
|
54
|
-
// ...
|
|
55
|
-
// ...
|
|
56
|
-
//
|
|
57
|
-
//
|
|
58
|
-
// set the "repay-back" amount (for this example snippet, this will be same amount that we borrowed above)
|
|
59
|
-
if (needed_amount_to_borrow !== undefined) {
|
|
60
|
-
const amount_to_repay_back = needed_amount_to_borrow;
|
|
61
|
-
// At first, you need to get back the borrowed coin, by making an opposide trade
|
|
62
|
-
console.log('Making purchase back of ', amount_to_repay_back, ' ', borrow_coin, ' to repay it back.');
|
|
63
|
-
const purchase_back_price = 1.01;
|
|
64
|
-
const order_back = await exchange.createOrder(symbol, order_type, (order_side === 'buy' ? 'sell' : 'buy'), amount_to_repay_back, purchase_back_price, { 'marginMode': marginMode });
|
|
65
|
-
console.log('Now, repaying the loan.');
|
|
66
|
-
const repayResult = await exchange.repayMargin(borrow_coin, amount_to_repay_back, symbol, { 'marginMode': marginMode });
|
|
67
|
-
console.log('finished.');
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
await example();
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import log from 'ololog';
|
|
5
|
-
import asTable from 'as-table';
|
|
6
|
-
|
|
7
|
-
(async function main () {
|
|
8
|
-
|
|
9
|
-
let kraken = new ccxt.kraken ()
|
|
10
|
-
await kraken.loadMarkets ()
|
|
11
|
-
|
|
12
|
-
const markets = Object.values (kraken.markets).map (market => ({
|
|
13
|
-
symbol: market.symbol,
|
|
14
|
-
active: market.active,
|
|
15
|
-
}))
|
|
16
|
-
|
|
17
|
-
log.bright.green.noLocate ('Markets:')
|
|
18
|
-
log.green.noLocate (asTable (markets), '\n')
|
|
19
|
-
|
|
20
|
-
const currencies = Object.values (kraken.currencies).map (currency => ({
|
|
21
|
-
code: currency.code,
|
|
22
|
-
active: currency.active,
|
|
23
|
-
status: currency.status,
|
|
24
|
-
}))
|
|
25
|
-
|
|
26
|
-
log.bright.yellow.noLocate ('Currencies:')
|
|
27
|
-
log.yellow.noLocate (asTable (currencies))
|
|
28
|
-
|
|
29
|
-
}) ()
|
|
@@ -1,29 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import asciichart from 'asciichart';
|
|
5
|
-
import asTable from 'as-table';
|
|
6
|
-
import ololog from 'ololog'
|
|
7
|
-
import ansicolor from 'ansicolor';
|
|
8
|
-
|
|
9
|
-
const log = ololog.configure ({ locate: false })
|
|
10
|
-
|
|
11
|
-
ansicolor.nice
|
|
12
|
-
|
|
13
|
-
//-----------------------------------------------------------------------------
|
|
14
|
-
|
|
15
|
-
;(async function main () {
|
|
16
|
-
|
|
17
|
-
// experimental, not yet implemented for all exchanges
|
|
18
|
-
// your contributions are welcome ;)
|
|
19
|
-
|
|
20
|
-
const indexOfClose = 4 // [ timestamp, open, high, low, close, volume ]
|
|
21
|
-
const ohlcv = await new ccxt.cex ().fetchOHLCV ('BTC/USD', '1m')
|
|
22
|
-
const lastPrice = ohlcv[ohlcv.length - 1][indexOfClose] // closing price
|
|
23
|
-
const plotSeriesData = ohlcv.slice (-80).map (x => x[indexOfClose]) // closing price
|
|
24
|
-
const bitcoinRate = ('₿ = $' + lastPrice).green
|
|
25
|
-
const chart = asciichart.plot (plotSeriesData, { height: 15, padding: ' ' })
|
|
26
|
-
log.yellow ("\n" + chart, bitcoinRate, "\n")
|
|
27
|
-
process.exit ()
|
|
28
|
-
|
|
29
|
-
}) ()
|
|
@@ -1,31 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
// https://github.com/ccxt/ccxt/issues/10179
|
|
8
|
-
|
|
9
|
-
async function main () {
|
|
10
|
-
|
|
11
|
-
const exchange = new ccxt.okex ({
|
|
12
|
-
'apiKey': 'YOUR_API_KEY',
|
|
13
|
-
'secret': 'YOUR_SECRET',
|
|
14
|
-
'password': 'YOUR_PASSWORD',
|
|
15
|
-
'options': {
|
|
16
|
-
'fetchClosedOrders': {
|
|
17
|
-
'method': 'privateGetTradeOrdersHistoryArchive'
|
|
18
|
-
}
|
|
19
|
-
}
|
|
20
|
-
})
|
|
21
|
-
|
|
22
|
-
const markets = await exchange.loadMarkets ()
|
|
23
|
-
|
|
24
|
-
exchange.verbose = true
|
|
25
|
-
|
|
26
|
-
const orders = await exchange.fetchClosedOrders ()
|
|
27
|
-
console.log (orders)
|
|
28
|
-
|
|
29
|
-
}
|
|
30
|
-
|
|
31
|
-
main ()
|
|
@@ -1,51 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT version:', ccxt.version)
|
|
6
|
-
console.log ('This example requires CCXT version 1.54.92 or higher')
|
|
7
|
-
|
|
8
|
-
async function main () {
|
|
9
|
-
|
|
10
|
-
const exchange = new ccxt.okex ({
|
|
11
|
-
'apiKey': 'YOUR_API_KEY',
|
|
12
|
-
'secret': 'YOUR_SECRET',
|
|
13
|
-
'password': 'YOUR_API_KEY_PASSWORD',
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
await exchange.loadMarkets ()
|
|
17
|
-
|
|
18
|
-
const code = 'USDT'
|
|
19
|
-
let tradingBalance = await exchange.fetchFreeBalance (/* { 'type': 'trading' } */)
|
|
20
|
-
let fundingBalance = await exchange.fetchFreeBalance ({ 'type': 'funding' })
|
|
21
|
-
console.log ('Trading:', tradingBalance[code], code)
|
|
22
|
-
console.log ('Funding:', fundingBalance[code], code)
|
|
23
|
-
|
|
24
|
-
const oldVerboseMode = exchange.verbose
|
|
25
|
-
exchange.verbose = process.argv.includes ('--verbose') || process.argv.includes ('-v')
|
|
26
|
-
|
|
27
|
-
// https://www.okex.com/docs-v5/en/#rest-api-funding-funds-transfer
|
|
28
|
-
//
|
|
29
|
-
// 'spot' == '1'
|
|
30
|
-
// 'futures' == '3',
|
|
31
|
-
// 'margin' == '5',
|
|
32
|
-
// 'swap' == '9',
|
|
33
|
-
// 'option' == '12',
|
|
34
|
-
// 'trading' == '18', // unified trading account
|
|
35
|
-
// 'unified' == '18',
|
|
36
|
-
//
|
|
37
|
-
const from = 'trading'
|
|
38
|
-
const to = 'funding'
|
|
39
|
-
const amount = 1
|
|
40
|
-
const transfer = await exchange.transfer (code, amount, from, to)
|
|
41
|
-
console.log (transfer)
|
|
42
|
-
|
|
43
|
-
exchange.verbose = oldVerboseMode
|
|
44
|
-
|
|
45
|
-
tradingBalance = await exchange.fetchFreeBalance (/* { 'type': 'spot' } */)
|
|
46
|
-
fundingBalance = await exchange.fetchFreeBalance ({ 'type': 'funding' })
|
|
47
|
-
console.log ('Trading:', tradingBalance[code], code)
|
|
48
|
-
console.log ('Funding:', fundingBalance[code], code)
|
|
49
|
-
}
|
|
50
|
-
|
|
51
|
-
main ()
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js'
|
|
2
|
-
|
|
3
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
4
|
-
|
|
5
|
-
async function main () {
|
|
6
|
-
|
|
7
|
-
const exchange = new ccxt.okx ({
|
|
8
|
-
|
|
9
|
-
// edit for your credentials
|
|
10
|
-
'apiKey': 'YOUR_API_KEY',
|
|
11
|
-
'secret': 'YOUR_API_SECRET',
|
|
12
|
-
'password': 'YOUR_API_PASSWORD',
|
|
13
|
-
})
|
|
14
|
-
|
|
15
|
-
await exchange.loadMarkets ()
|
|
16
|
-
|
|
17
|
-
// if this script fails with a rate limiter error
|
|
18
|
-
// uncomment the following line for debugging purposes
|
|
19
|
-
|
|
20
|
-
// exchange.verbose = true
|
|
21
|
-
|
|
22
|
-
while (true) {
|
|
23
|
-
|
|
24
|
-
try {
|
|
25
|
-
|
|
26
|
-
const trades = await exchange.fetchMyTrades ()
|
|
27
|
-
console.log (new Date(), 'fetched', trades.length, 'trades')
|
|
28
|
-
|
|
29
|
-
} catch (e) {
|
|
30
|
-
|
|
31
|
-
console.log (e.constructor.name, e.message)
|
|
32
|
-
break;
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
main ()
|
|
@@ -1,48 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js'
|
|
2
|
-
|
|
3
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
4
|
-
|
|
5
|
-
async function main () {
|
|
6
|
-
|
|
7
|
-
const exchange = new ccxt.okx ({
|
|
8
|
-
|
|
9
|
-
// edit for your credentials
|
|
10
|
-
'apiKey': 'YOUR_API_KEY',
|
|
11
|
-
'secret': 'YOUR_API_SECRET',
|
|
12
|
-
'password': 'YOUR_API_PASSWORD',
|
|
13
|
-
|
|
14
|
-
'api': {
|
|
15
|
-
'private': {
|
|
16
|
-
'get': {
|
|
17
|
-
'trade/fills-history': 2.2,
|
|
18
|
-
},
|
|
19
|
-
},
|
|
20
|
-
},
|
|
21
|
-
|
|
22
|
-
})
|
|
23
|
-
|
|
24
|
-
await exchange.loadMarkets ()
|
|
25
|
-
|
|
26
|
-
// if this script fails with a rate limiter error
|
|
27
|
-
// uncomment the following line for debugging purposes
|
|
28
|
-
|
|
29
|
-
// exchange.verbose = true
|
|
30
|
-
|
|
31
|
-
const promises=[];
|
|
32
|
-
for(let i=0;i<100;i++){
|
|
33
|
-
promises.push(exchange.fetchMyTrades());
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
const allResponses = await Promise.allSettled(promises);
|
|
37
|
-
allResponses.forEach((result, i) => {
|
|
38
|
-
|
|
39
|
-
if(result.status == "fulfilled"){
|
|
40
|
-
console.log (new Date(), i + 6, 'fetched', result.value.length, 'trades')
|
|
41
|
-
} else {
|
|
42
|
-
console.log ("Rejected:", i + 6, result.reason);
|
|
43
|
-
}
|
|
44
|
-
});
|
|
45
|
-
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
main ()
|
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import asTable from 'as-table';
|
|
5
|
-
import log from 'ololog';
|
|
6
|
-
import ansicolor from 'ansicolor';
|
|
7
|
-
|
|
8
|
-
ansicolor.nice
|
|
9
|
-
|
|
10
|
-
;(async function test () {
|
|
11
|
-
|
|
12
|
-
const exchange = new ccxt.bitfinex ()
|
|
13
|
-
const limit = 5
|
|
14
|
-
const orders = await exchange.fetchOrderBook ('BTC/USD', limit, {
|
|
15
|
-
// this parameter is exchange-specific, all extra params have unique names per exchange
|
|
16
|
-
'group': 1, // 1 = orders are grouped by price, 0 = orders are separate
|
|
17
|
-
})
|
|
18
|
-
|
|
19
|
-
log (orders)
|
|
20
|
-
}) ()
|
|
@@ -1,49 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import ccxt from '../../js/ccxt.js';
|
|
3
|
-
// AUTO-TRANSPILE //
|
|
4
|
-
// ------------------------------------------------------------------------------
|
|
5
|
-
async function example() {
|
|
6
|
-
const exchange = new ccxt.phemex({
|
|
7
|
-
'apiKey': 'YOUR_API_KEY',
|
|
8
|
-
'secret': 'YOUR_API_SECRET',
|
|
9
|
-
});
|
|
10
|
-
const symbol = 'XRP/USDT:USDT';
|
|
11
|
-
const side = 'buy'; // set it to 'buy' for a long position, 'sell' for a short position
|
|
12
|
-
const order_type = 'limit'; // set it to 'market' or 'limit'
|
|
13
|
-
const amount = 1; // how many contracts
|
|
14
|
-
const price = 0.5; // set a price at your desired level
|
|
15
|
-
// take profit and stop loss prices and types
|
|
16
|
-
const take_profit_trigger_price = 0.6;
|
|
17
|
-
const stop_loss_trigger_price = 0.4;
|
|
18
|
-
const take_profit_limit_price = 0.7;
|
|
19
|
-
const stop_loss_limit_price = 0.3;
|
|
20
|
-
await exchange.loadMarkets();
|
|
21
|
-
// 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
|
|
22
|
-
const params = {
|
|
23
|
-
'posSide': 'Long',
|
|
24
|
-
'stopLoss': {
|
|
25
|
-
'triggerPrice': stop_loss_trigger_price,
|
|
26
|
-
'type': 'limit',
|
|
27
|
-
'price': stop_loss_limit_price,
|
|
28
|
-
},
|
|
29
|
-
'takeProfit': {
|
|
30
|
-
'triggerPrice': take_profit_trigger_price,
|
|
31
|
-
'type': 'limit',
|
|
32
|
-
'price': take_profit_limit_price,
|
|
33
|
-
},
|
|
34
|
-
};
|
|
35
|
-
console.log('-----------------------------------------------------------------------');
|
|
36
|
-
// exchange.verbose = True // uncomment for debugging purposes if necessary
|
|
37
|
-
try {
|
|
38
|
-
const created_order = await exchange.createOrder(symbol, order_type, side, amount, price, params);
|
|
39
|
-
console.log('Created an order', created_order);
|
|
40
|
-
// Fetch all your open orders for this symbol
|
|
41
|
-
const all_open_orders = await exchange.fetchOpenOrders(symbol);
|
|
42
|
-
console.log('Fetched all your orders for this symbol', all_open_orders);
|
|
43
|
-
// To cancel a limit order, use "exchange.cancel_order(created_order['id'], symbol)""
|
|
44
|
-
}
|
|
45
|
-
catch (e) {
|
|
46
|
-
console.log(e.toString());
|
|
47
|
-
}
|
|
48
|
-
}
|
|
49
|
-
await example();
|
|
@@ -1,43 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
|
|
5
|
-
const ohlcvsBySymbol = {}
|
|
6
|
-
|
|
7
|
-
function handleAllOHLCVs (exchange, ohlcvs, symbol, timeframe) {
|
|
8
|
-
console.log ('----------------------------------------------------------')
|
|
9
|
-
console.log ('Last updated:', exchange.iso8601 (exchange.milliseconds ()))
|
|
10
|
-
const symbols = Object.keys (ohlcvsBySymbol)
|
|
11
|
-
for (let i = 0; i < symbols.length; i++) {
|
|
12
|
-
const symbol = symbols[i]
|
|
13
|
-
const ohlcvs = ohlcvsBySymbol[symbol]
|
|
14
|
-
const lastCandle = exchange.safeValue (ohlcvs, ohlcvs.length - 1)
|
|
15
|
-
const lastTimestamp = lastCandle[0]
|
|
16
|
-
console.log (exchange.iso8601 (lastTimestamp), symbol, timeframe, lastCandle.slice (1))
|
|
17
|
-
}
|
|
18
|
-
}
|
|
19
|
-
|
|
20
|
-
async function pollOHLCV (exchange, symbol, timeframe) {
|
|
21
|
-
while (true) {
|
|
22
|
-
try {
|
|
23
|
-
const response = await exchange.fetchOHLCV (symbol, timeframe)
|
|
24
|
-
ohlcvsBySymbol[symbol] = response
|
|
25
|
-
handleAllOHLCVs(exchange, response, symbol, timeframe)
|
|
26
|
-
} catch (e) {
|
|
27
|
-
console.log (e.constructor.name, e.message)
|
|
28
|
-
}
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
async function main () {
|
|
33
|
-
|
|
34
|
-
const exchange = new ccxt.binance()
|
|
35
|
-
const markets = await exchange.loadMarkets ()
|
|
36
|
-
const timeframe = '5m'
|
|
37
|
-
|
|
38
|
-
const firstOneHundredSymbols = exchange.symbols.slice (0, 100)
|
|
39
|
-
|
|
40
|
-
await Promise.all (firstOneHundredSymbols.map (symbol => pollOHLCV (exchange, symbol, timeframe)))
|
|
41
|
-
}
|
|
42
|
-
|
|
43
|
-
main ()
|
|
@@ -1,35 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// ----------------------------------------------------------------------------
|
|
4
|
-
|
|
5
|
-
import ccxt from '../../js/ccxt.js';
|
|
6
|
-
|
|
7
|
-
// ----------------------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
(async () => {
|
|
10
|
-
|
|
11
|
-
const exchange = new ccxt.poloniex ({
|
|
12
|
-
'verbose': process.argv.includes ('--verbose'),
|
|
13
|
-
'timeout': 60000,
|
|
14
|
-
})
|
|
15
|
-
|
|
16
|
-
try {
|
|
17
|
-
|
|
18
|
-
const response = await exchange.fetchOrderBooks ([
|
|
19
|
-
'ETH/BTC',
|
|
20
|
-
'LTC/BTC',
|
|
21
|
-
'OMG/BTC',
|
|
22
|
-
])
|
|
23
|
-
console.log (response);
|
|
24
|
-
console.log ('Succeeded.')
|
|
25
|
-
|
|
26
|
-
} catch (e) {
|
|
27
|
-
|
|
28
|
-
console.log ('--------------------------------------------------------')
|
|
29
|
-
console.log (e.constructor.name, e.message)
|
|
30
|
-
console.log ('--------------------------------------------------------')
|
|
31
|
-
console.log (exchange.last_http_response)
|
|
32
|
-
console.log ('Failed.')
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
}) ()
|
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
import fs from 'fs';
|
|
3
|
-
import ololog from 'ololog'
|
|
4
|
-
|
|
5
|
-
const log = ololog.configure.unlimited.noLocate,
|
|
6
|
-
verbose = process.argv.includes ('--verbose'),
|
|
7
|
-
keysGlobal = 'keys.json',
|
|
8
|
-
keysLocal = 'keys.local.json',
|
|
9
|
-
keysFile = fs.existsSync (keysLocal) ? keysLocal : (fs.existsSync (keysGlobal) ? keysGlobal : false),
|
|
10
|
-
config = keysFile ? require ('../../' + keysFile) : {},
|
|
11
|
-
exchange = new ccxt.poloniex (ccxt.extend ({
|
|
12
|
-
enableRateLimit: true,
|
|
13
|
-
verbose,
|
|
14
|
-
}, config.poloniex || {}));(async () => {
|
|
15
|
-
|
|
16
|
-
const test = async function (symbol) {
|
|
17
|
-
|
|
18
|
-
try {
|
|
19
|
-
|
|
20
|
-
await exchange.createOrder (symbol, 'limit', 'buy', 0, 0)
|
|
21
|
-
|
|
22
|
-
} catch (e) {
|
|
23
|
-
|
|
24
|
-
if (e instanceof ccxt.InvalidOrder) {
|
|
25
|
-
|
|
26
|
-
const words = e.message.split (' ')
|
|
27
|
-
let minAmount = parseFloat (words[words.length - 1])
|
|
28
|
-
log.green ("'" + symbol + "': " + minAmount.toString () + ',')
|
|
29
|
-
|
|
30
|
-
} else {
|
|
31
|
-
|
|
32
|
-
throw e
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
await exchange.loadMarkets ()
|
|
38
|
-
|
|
39
|
-
for (let i = 0; i < exchange.symbols.length; i++) {
|
|
40
|
-
|
|
41
|
-
try {
|
|
42
|
-
|
|
43
|
-
await test (exchange.symbols[i])
|
|
44
|
-
|
|
45
|
-
} catch (e) {
|
|
46
|
-
|
|
47
|
-
if (e instanceof ccxt.InvalidNonce) {
|
|
48
|
-
|
|
49
|
-
log.yellow (e)
|
|
50
|
-
|
|
51
|
-
} else {
|
|
52
|
-
|
|
53
|
-
log.red (e)
|
|
54
|
-
throw e
|
|
55
|
-
}
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
await ccxt.sleep (5000) // sleep 5 seconds, no rush, safe delay
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
}) ()
|
|
@@ -1,98 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import ccxt from '../../js/ccxt.js';
|
|
4
|
-
import asTable from 'as-table';
|
|
5
|
-
import ololog from 'ololog';
|
|
6
|
-
import ansicolor from 'ansicolor';
|
|
7
|
-
|
|
8
|
-
const log = ololog.configure ({ locate: false })
|
|
9
|
-
|
|
10
|
-
ansicolor.nice
|
|
11
|
-
|
|
12
|
-
//-----------------------------------------------------------------------------
|
|
13
|
-
|
|
14
|
-
// this script loads markets from all exchanges
|
|
15
|
-
// if it cannot connect to an exchange, it falls back to an alternative route via proxy
|
|
16
|
-
// it will retry to load a exchange until it either reaches the exchange or runs out of proxies
|
|
17
|
-
|
|
18
|
-
//-----------------------------------------------------------------------------
|
|
19
|
-
|
|
20
|
-
process.on ('uncaughtException', e => { log.bright.red.error (e); process.exit (1) })
|
|
21
|
-
process.on ('unhandledRejection', e => { log.bright.red.error (e); process.exit (1) })
|
|
22
|
-
|
|
23
|
-
//-----------------------------------------------------------------------------
|
|
24
|
-
|
|
25
|
-
let loadExchange = async exchange => {
|
|
26
|
-
await exchange.loadMarkets ()
|
|
27
|
-
log (exchange.id.green, 'loaded',
|
|
28
|
-
exchange.symbols.length.toString ().bright.green, 'symbols',
|
|
29
|
-
(exchange.proxy ? exchange.proxy : '_').blue)
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
//-----------------------------------------------------------------------------
|
|
33
|
-
|
|
34
|
-
let tryAllProxies = async function (exchange, proxies) {
|
|
35
|
-
|
|
36
|
-
let currentProxy = 0
|
|
37
|
-
let maxRetries = proxies.length
|
|
38
|
-
|
|
39
|
-
// a special case for ccex
|
|
40
|
-
if (exchange.id == 'ccex')
|
|
41
|
-
currentProxy = 1
|
|
42
|
-
|
|
43
|
-
for (let numRetries = 0; numRetries < maxRetries; numRetries++) {
|
|
44
|
-
|
|
45
|
-
try {
|
|
46
|
-
|
|
47
|
-
exchange.proxy = proxies[currentProxy]
|
|
48
|
-
await loadExchange (exchange)
|
|
49
|
-
break
|
|
50
|
-
|
|
51
|
-
} catch (e) {
|
|
52
|
-
|
|
53
|
-
currentProxy = ++currentProxy % proxies.length
|
|
54
|
-
if (e instanceof ccxt.DDoSProtection) {
|
|
55
|
-
log.bright.yellow (exchange.id, '[DDoS Protection] ' + e.message)
|
|
56
|
-
} else if (e instanceof ccxt.RequestTimeout) {
|
|
57
|
-
log.bright.yellow (exchange.id, '[Request Timeout] ' + e.message)
|
|
58
|
-
} else if (e instanceof ccxt.AuthenticationError) {
|
|
59
|
-
log.bright.yellow (exchange.id, '[Authentication Error] ' + e.message)
|
|
60
|
-
} else if (e instanceof ccxt.ExchangeNotAvailable) {
|
|
61
|
-
log.bright.yellow (exchange.id, '[Exchange Not Available] ' + e.message)
|
|
62
|
-
} else if (e instanceof ccxt.ExchangeError) {
|
|
63
|
-
log.bright.yellow (exchange.id, '[Exchange Error] ' + e.message)
|
|
64
|
-
} else if (e instanceof ccxt.NetworkError) {
|
|
65
|
-
log.bright.yellow (exchange.id, '[Network Error] ' + e.message)
|
|
66
|
-
} else {
|
|
67
|
-
throw e;
|
|
68
|
-
}
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
|
|
74
|
-
//-----------------------------------------------------------------------------
|
|
75
|
-
|
|
76
|
-
let proxies = [
|
|
77
|
-
'',
|
|
78
|
-
'https://cors-anywhere.herokuapp.com/',
|
|
79
|
-
'https://crossorigin.me/',
|
|
80
|
-
]
|
|
81
|
-
|
|
82
|
-
let exchanges = []
|
|
83
|
-
|
|
84
|
-
async function main () {
|
|
85
|
-
// instantiate all exchanges
|
|
86
|
-
await Promise.all (ccxt.exchanges.map (async id => {
|
|
87
|
-
let exchange = new (ccxt)[id] ()
|
|
88
|
-
exchanges.push (exchange)
|
|
89
|
-
await tryAllProxies (exchange, proxies)
|
|
90
|
-
}))
|
|
91
|
-
|
|
92
|
-
let succeeded = exchanges.filter (exchange => exchange.markets ? true : false).length.toString ().bright.green
|
|
93
|
-
let failed = exchanges.filter (exchange => exchange.markets ? false : true).length
|
|
94
|
-
let total = ccxt.exchanges.length.toString ().bright.white
|
|
95
|
-
console.log (succeeded, 'of', total, 'exchanges loaded', ('(' + failed + ' errors)').red)
|
|
96
|
-
}
|
|
97
|
-
|
|
98
|
-
main ()
|
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
// ABOUT CCXT PROXIES, READ MORE AT: https://docs.ccxt.com/#/README?id=proxy
|
|
4
|
-
async function example_proxyUrl() {
|
|
5
|
-
const myEx = new ccxt.kucoin();
|
|
6
|
-
myEx.proxyUrl = 'http://5.75.153.75:8090/proxy_url.php?caller=https://ccxt.com&url=';
|
|
7
|
-
console.log(await myEx.fetch('https://api.ipify.org/'));
|
|
8
|
-
}
|
|
9
|
-
async function example_httpProxy() {
|
|
10
|
-
const myEx = new ccxt.kucoin();
|
|
11
|
-
myEx.httpProxy = 'http://5.75.153.75:8002'; // "httpProxy" or "httpsProxy" (depending on your proxy protocol)
|
|
12
|
-
console.log(await myEx.fetch('https://api.ipify.org/'));
|
|
13
|
-
}
|
|
14
|
-
async function example_socksProxy() {
|
|
15
|
-
const myEx = new ccxt.kucoin();
|
|
16
|
-
myEx.socksProxy = 'socks5://127.0.0.1:1080'; // from protocols: socks, socks5, socks5h
|
|
17
|
-
console.log(await myEx.fetch('https://api.ipify.org/'));
|
|
18
|
-
}
|
|
19
|
-
async function example_webSockets() {
|
|
20
|
-
const myEx = new ccxt.pro.kucoin();
|
|
21
|
-
myEx.httpProxy = 'http://5.75.153.75:8002'; // even though you are using WebSockets, you might also need to set up proxy for the exchange's REST requests
|
|
22
|
-
myEx.wsProxy = 'http://5.75.153.75:8002'; // "wsProxy" or "wssProxy" or "wsSocksProxy" (depending on your proxy protocol)
|
|
23
|
-
await myEx.loadMarkets();
|
|
24
|
-
while (true) {
|
|
25
|
-
const ticker = await myEx.watchTicker('BTC/USDT');
|
|
26
|
-
console.log(ticker);
|
|
27
|
-
}
|
|
28
|
-
}
|
|
29
|
-
await example_proxyUrl();
|
|
30
|
-
// await example_httpProxy ();
|
|
31
|
-
// await example_socksProxy ();
|
|
32
|
-
// await example_webSockets ();
|
|
@@ -1,12 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
// JavaScript sample Proxy with CORS support
|
|
3
|
-
// Save this in a file like cors.js and run with:
|
|
4
|
-
// node cors [port]
|
|
5
|
-
// It will listen for your requests on the port you pass in command line (or port 8080 by default)
|
|
6
|
-
import cors from 'cors-anywhere'; // npm install cors-anywhere
|
|
7
|
-
const port = (process.argv.length > 2) ? parseInt(process.argv[2]) : 8080; // if not provided from cli, default to 8080
|
|
8
|
-
cors.createServer({
|
|
9
|
-
// you can set origin, if needed by exchange
|
|
10
|
-
// setHeaders: { 'origin': 'https://www.bitmex.com' }
|
|
11
|
-
}).listen(port, 'localhost');
|
|
12
|
-
console.log('Running CORS Anywhere on localhost:' + port);
|