ccxt 4.2.99 → 4.3.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +3 -3
- package/dist/cjs/ccxt.js +1 -1
- package/dist/cjs/src/ascendex.js +1 -1
- package/dist/cjs/src/binance.js +56 -0
- package/dist/cjs/src/bingx.js +2 -2
- package/dist/cjs/src/bitget.js +64 -2
- package/dist/cjs/src/bybit.js +1 -1
- package/dist/cjs/src/coinex.js +55 -60
- package/dist/cjs/src/kraken.js +8 -3
- package/dist/cjs/src/kucoin.js +19 -17
- 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/ascendex.js +2 -2
- 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 +64 -2
- package/js/src/bybit.js +1 -1
- package/js/src/coinex.js +55 -60
- package/js/src/kraken.js +8 -3
- package/js/src/kucoin.js +19 -17
- 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/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
package/examples/ts/cli.ts
DELETED
|
@@ -1,397 +0,0 @@
|
|
|
1
|
-
import fs from 'fs'
|
|
2
|
-
import path from 'path'
|
|
3
|
-
import ansi from 'ansicolor'
|
|
4
|
-
import asTable from 'as-table'
|
|
5
|
-
import ololog from 'ololog'
|
|
6
|
-
import ccxt from '../../ts/ccxt.js'
|
|
7
|
-
import { Agent } from 'https'
|
|
8
|
-
|
|
9
|
-
const fsPromises = fs.promises;
|
|
10
|
-
ansi.nice
|
|
11
|
-
const log = ololog.configure ({ locate: false }).unlimited
|
|
12
|
-
const { ExchangeError , NetworkError} = ccxt
|
|
13
|
-
//-----------------------------------------------------------------------------
|
|
14
|
-
|
|
15
|
-
let [processPath, , exchangeId, methodName, ... params] = process.argv.filter (x => !x.startsWith ('--'))
|
|
16
|
-
, verbose = process.argv.includes ('--verbose')
|
|
17
|
-
, debug = process.argv.includes ('--debug')
|
|
18
|
-
, poll = process.argv.includes ('--poll')
|
|
19
|
-
, no_send = process.argv.includes ('--no-send')
|
|
20
|
-
, no_load_markets = process.argv.includes ('--no-load-markets')
|
|
21
|
-
, details = process.argv.includes ('--details')
|
|
22
|
-
, no_table = process.argv.includes ('--no-table')
|
|
23
|
-
, table = process.argv.includes ('--table')
|
|
24
|
-
, iso8601 = process.argv.includes ('--iso8601')
|
|
25
|
-
, cors = process.argv.includes ('--cors')
|
|
26
|
-
, cache_markets = process.argv.includes ('--cache-markets')
|
|
27
|
-
, testnet =
|
|
28
|
-
process.argv.includes ('--test') ||
|
|
29
|
-
process.argv.includes ('--testnet') ||
|
|
30
|
-
process.argv.includes ('--sandbox')
|
|
31
|
-
, signIn = process.argv.includes ('--sign-in') || process.argv.includes ('--signIn')
|
|
32
|
-
, isSpot = process.argv.includes ('--spot')
|
|
33
|
-
, isSwap = process.argv.includes ('--swap')
|
|
34
|
-
, isFuture = process.argv.includes ('--future')
|
|
35
|
-
, isOption = process.argv.includes ('--option')
|
|
36
|
-
, shouldCreateRequestReport = process.argv.includes ('--report')
|
|
37
|
-
, shouldCreateResponseReport = process.argv.includes ('--response')
|
|
38
|
-
, shouldCreateBoth = process.argv.includes ('--static')
|
|
39
|
-
|
|
40
|
-
//-----------------------------------------------------------------------------
|
|
41
|
-
|
|
42
|
-
log ((new Date ()).toISOString())
|
|
43
|
-
log ('Node.js:', process.version)
|
|
44
|
-
log ('CCXT v' + ccxt.version)
|
|
45
|
-
|
|
46
|
-
//-----------------------------------------------------------------------------
|
|
47
|
-
|
|
48
|
-
process.on ('uncaughtException', e => { log.bright.red.error (e); log.red.error (e.message); process.exit (1) })
|
|
49
|
-
process.on ('unhandledRejection', e => { log.bright.red.error (e); log.red.error ((e as any).message); process.exit (1) })
|
|
50
|
-
|
|
51
|
-
//-----------------------------------------------------------------------------
|
|
52
|
-
|
|
53
|
-
// set up keys and settings, if any
|
|
54
|
-
const keysGlobal = path.resolve ('keys.json')
|
|
55
|
-
const keysLocal = path.resolve ('keys.local.json')
|
|
56
|
-
|
|
57
|
-
const keysFile = fs.existsSync (keysLocal) ? keysLocal : keysGlobal
|
|
58
|
-
const settingsFile = fs.readFileSync(keysFile);
|
|
59
|
-
// eslint-disable-next-line import/no-dynamic-require, no-path-concat
|
|
60
|
-
let settings = JSON.parse(settingsFile.toString())
|
|
61
|
-
settings = settings[exchangeId] || {}
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
//-----------------------------------------------------------------------------
|
|
65
|
-
|
|
66
|
-
const timeout = 30000
|
|
67
|
-
let exchange = undefined as any
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
const httpsAgent = new Agent ({
|
|
72
|
-
ecdhCurve: 'auto',
|
|
73
|
-
keepAlive: true,
|
|
74
|
-
})
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
// check here if we have a arg like this: binance.fetchOrders()
|
|
78
|
-
const callRegex = /\s*(\w+)\s*\.\s*(\w+)\s*\(([^()]*)\)/
|
|
79
|
-
if (callRegex.test (exchangeId)) {
|
|
80
|
-
const res = callRegex.exec (exchangeId) as any;
|
|
81
|
-
exchangeId = res[1];
|
|
82
|
-
methodName = res[2];
|
|
83
|
-
params = res[3].split(",").map(x => x.trim());
|
|
84
|
-
}
|
|
85
|
-
|
|
86
|
-
try {
|
|
87
|
-
if ((ccxt.pro as any).exchanges.includes(exchangeId)) {
|
|
88
|
-
exchange = new (ccxt.pro)[exchangeId] ({ timeout, httpsAgent, ... settings })
|
|
89
|
-
} else {
|
|
90
|
-
exchange = new (ccxt)[exchangeId] ({ timeout, httpsAgent, ... settings })
|
|
91
|
-
}
|
|
92
|
-
|
|
93
|
-
if (exchange === undefined) {
|
|
94
|
-
process.exit ()
|
|
95
|
-
}
|
|
96
|
-
|
|
97
|
-
if (isSpot) {
|
|
98
|
-
exchange.options['defaultType'] = 'spot';
|
|
99
|
-
} else if (isSwap) {
|
|
100
|
-
exchange.options['defaultType'] = 'swap';
|
|
101
|
-
} else if (isFuture) {
|
|
102
|
-
exchange.options['defaultType'] = 'future';
|
|
103
|
-
} else if (isOption) {
|
|
104
|
-
exchange.options['defaultType'] = 'option';
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// check auth keys in env var
|
|
108
|
-
const requiredCredentials = exchange.requiredCredentials;
|
|
109
|
-
for (const [credential, isRequired] of Object.entries (requiredCredentials)) {
|
|
110
|
-
if (isRequired && exchange[credential] === undefined) {
|
|
111
|
-
const credentialEnvName = (exchangeId + '_' + credential).toUpperCase () // example: KRAKEN_APIKEY
|
|
112
|
-
let credentialValue = process.env[credentialEnvName]
|
|
113
|
-
if (credentialValue) {
|
|
114
|
-
if (credentialValue.indexOf('---BEGIN') > -1) {
|
|
115
|
-
credentialValue = (credentialValue as any).replaceAll('\\n', '\n');
|
|
116
|
-
}
|
|
117
|
-
exchange[credential] = credentialValue
|
|
118
|
-
}
|
|
119
|
-
}
|
|
120
|
-
}
|
|
121
|
-
|
|
122
|
-
if (testnet) {
|
|
123
|
-
exchange.setSandboxMode (true)
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
} catch (e) {
|
|
127
|
-
|
|
128
|
-
log.red (e)
|
|
129
|
-
printUsage ()
|
|
130
|
-
process.exit ()
|
|
131
|
-
}
|
|
132
|
-
|
|
133
|
-
//-----------------------------------------------------------------------------
|
|
134
|
-
|
|
135
|
-
function createRequestTemplate(exchange, methodName, args, result) {
|
|
136
|
-
const final = {
|
|
137
|
-
'description': 'Fill this with a description of the method call',
|
|
138
|
-
'method': methodName,
|
|
139
|
-
'url': exchange.last_request_url ?? '',
|
|
140
|
-
'input': args,
|
|
141
|
-
'output': exchange.last_request_body ?? undefined
|
|
142
|
-
}
|
|
143
|
-
log('Report: (paste inside static/request/' + exchange.id + '.json ->' + methodName + ')')
|
|
144
|
-
log.green('-------------------------------------------')
|
|
145
|
-
log (JSON.stringify (final, null, 2))
|
|
146
|
-
log.green('-------------------------------------------')
|
|
147
|
-
}
|
|
148
|
-
|
|
149
|
-
//-----------------------------------------------------------------------------
|
|
150
|
-
|
|
151
|
-
function createResponseTemplate(exchange, methodName, args, result) {
|
|
152
|
-
const final = {
|
|
153
|
-
'description': 'Fill this with a description of the method call',
|
|
154
|
-
'method': methodName,
|
|
155
|
-
'input': args,
|
|
156
|
-
'httpResponse': exchange.last_json_response ?? exchange.last_http_response,
|
|
157
|
-
'parsedResponse': result
|
|
158
|
-
}
|
|
159
|
-
log('Report: (paste inside static/response/' + exchange.id + '.json ->' + methodName + ')')
|
|
160
|
-
log.green('-------------------------------------------')
|
|
161
|
-
log (JSON.stringify (final, function(k, v) { return v === undefined ? null : v; }, 2))
|
|
162
|
-
log.green('-------------------------------------------')
|
|
163
|
-
}
|
|
164
|
-
|
|
165
|
-
//-----------------------------------------------------------------------------
|
|
166
|
-
|
|
167
|
-
function printSupportedExchanges () {
|
|
168
|
-
log ('Supported exchanges:', (ccxt.exchanges.join (', ') as any).green)
|
|
169
|
-
}
|
|
170
|
-
|
|
171
|
-
//-----------------------------------------------------------------------------
|
|
172
|
-
|
|
173
|
-
function printUsage () {
|
|
174
|
-
log ('This is an example of a basic command-line interface to all exchanges')
|
|
175
|
-
log ('Usage: node', process.argv[1], ('id' as any).green, ('method' as any).yellow, ('"param1" param2 "param3" param4 ...' as any).blue)
|
|
176
|
-
log ('Examples:')
|
|
177
|
-
log ('node', process.argv[1], 'okcoin fetchOHLCV BTC/USD 15m')
|
|
178
|
-
log ('node', process.argv[1], 'bitfinex fetchBalance')
|
|
179
|
-
log ('node', process.argv[1], 'kraken fetchOrderBook ETH/BTC')
|
|
180
|
-
printSupportedExchanges ()
|
|
181
|
-
log ('Supported options:')
|
|
182
|
-
log ('--verbose Print verbose output')
|
|
183
|
-
log ('--debug Print debugging output')
|
|
184
|
-
log ('--poll Repeat continuously in rate-limited mode')
|
|
185
|
-
log ('--no-send Print the request but do not actually send it to the exchange (sets verbose and load-markets)')
|
|
186
|
-
log ('--no-load-markets Do not pre-load markets (for debugging)')
|
|
187
|
-
log ('--details Print detailed fetch responses')
|
|
188
|
-
log ('--no-table Do not print the fetch response as a table')
|
|
189
|
-
log ('--table Print the fetch response as a table')
|
|
190
|
-
log ('--iso8601 Print timestamps as ISO8601 datetimes')
|
|
191
|
-
log ('--cors use CORS proxy for debugging')
|
|
192
|
-
log ('--sign-in Call signIn() if any')
|
|
193
|
-
log ('--sandbox Use the exchange sandbox if available, same as --testnet')
|
|
194
|
-
log ('--testnet Use the exchange testnet if available, same as --sandbox')
|
|
195
|
-
log ('--test Use the exchange testnet if available, same as --sandbox')
|
|
196
|
-
log ('--cache-markets Cache the loaded markets in the .cache folder in the current directory')
|
|
197
|
-
}
|
|
198
|
-
|
|
199
|
-
//-----------------------------------------------------------------------------
|
|
200
|
-
|
|
201
|
-
const printHumanReadable = (exchange, result) => {
|
|
202
|
-
if (!no_table && Array.isArray (result) || table) {
|
|
203
|
-
result = Object.values (result)
|
|
204
|
-
let arrayOfObjects = (typeof result[0] === 'object')
|
|
205
|
-
|
|
206
|
-
if (details)
|
|
207
|
-
result.forEach (object => {
|
|
208
|
-
if (arrayOfObjects)
|
|
209
|
-
log ('-------------------------------------------')
|
|
210
|
-
log (object)
|
|
211
|
-
})
|
|
212
|
-
|
|
213
|
-
if (arrayOfObjects || table && Array.isArray (result)) {
|
|
214
|
-
const configuredAsTable = (asTable as any).configure ({
|
|
215
|
-
delimiter: (' | ' as any).lightGray.dim,
|
|
216
|
-
right: true,
|
|
217
|
-
title: x => (String (x) as any).lightGray,
|
|
218
|
-
dash: ('-' as any).lightGray.dim,
|
|
219
|
-
print: x => {
|
|
220
|
-
if (typeof x === 'object') {
|
|
221
|
-
const j = JSON.stringify (x).trim ()
|
|
222
|
-
if (j.length < 100) return j
|
|
223
|
-
}
|
|
224
|
-
return String (x)
|
|
225
|
-
}
|
|
226
|
-
})
|
|
227
|
-
log (result.length > 0 ? configuredAsTable (result.map (element => {
|
|
228
|
-
let keys = Object.keys (element)
|
|
229
|
-
delete element['info']
|
|
230
|
-
keys.forEach (key => {
|
|
231
|
-
if (!iso8601)
|
|
232
|
-
return element[key]
|
|
233
|
-
try {
|
|
234
|
-
const iso8601 = exchange.iso8601 (element[key])
|
|
235
|
-
if (iso8601.match (/^20[0-9]{2}[-]?/))
|
|
236
|
-
element[key] = iso8601
|
|
237
|
-
else
|
|
238
|
-
throw new Error ('wrong date')
|
|
239
|
-
} catch (e) {
|
|
240
|
-
return element[key]
|
|
241
|
-
}
|
|
242
|
-
})
|
|
243
|
-
return element
|
|
244
|
-
})) : result)
|
|
245
|
-
log (result.length, 'objects');
|
|
246
|
-
} else {
|
|
247
|
-
console.dir (result, { depth: null })
|
|
248
|
-
log (result.length, 'objects');
|
|
249
|
-
}
|
|
250
|
-
} else {
|
|
251
|
-
console.dir (result, { depth: null, maxArrayLength: null })
|
|
252
|
-
}
|
|
253
|
-
}
|
|
254
|
-
|
|
255
|
-
//-----------------------------------------------------------------------------
|
|
256
|
-
|
|
257
|
-
async function run () {
|
|
258
|
-
|
|
259
|
-
if (!exchangeId) {
|
|
260
|
-
|
|
261
|
-
printUsage ()
|
|
262
|
-
|
|
263
|
-
} else {
|
|
264
|
-
|
|
265
|
-
let args = params
|
|
266
|
-
.map (s => s.match (/^[0-9]{4}[-][0-9]{2}[-][0-9]{2}[T\s]?[0-9]{2}[:][0-9]{2}[:][0-9]{2}/g) ? exchange.parse8601 (s) : s)
|
|
267
|
-
.map (s => (() => {
|
|
268
|
-
if (s.match ( /^\d+$/g)) return s < Number.MAX_SAFE_INTEGER ? Number (s) : s
|
|
269
|
-
try {return eval ('(() => (' + s + ')) ()') } catch (e) { return s }
|
|
270
|
-
}) ())
|
|
271
|
-
|
|
272
|
-
const www = Array.isArray (exchange.urls.www) ? exchange.urls.www[0] : exchange.urls.www
|
|
273
|
-
|
|
274
|
-
if (cors) {
|
|
275
|
-
exchange.proxy = 'https://cors-anywhere.herokuapp.com/';
|
|
276
|
-
exchange.origin = exchange.uuid ()
|
|
277
|
-
}
|
|
278
|
-
|
|
279
|
-
no_load_markets = no_send ? true : no_load_markets
|
|
280
|
-
|
|
281
|
-
if (debug) {
|
|
282
|
-
exchange.verbose = verbose
|
|
283
|
-
}
|
|
284
|
-
|
|
285
|
-
const path = '.cache/' + exchangeId + '-markets.json'
|
|
286
|
-
|
|
287
|
-
if (!no_load_markets) {
|
|
288
|
-
try {
|
|
289
|
-
await fsPromises.access (path, fs.constants.R_OK)
|
|
290
|
-
exchange.markets = JSON.parse ((await fsPromises.readFile (path)).toString())
|
|
291
|
-
} catch {
|
|
292
|
-
await exchange.loadMarkets ()
|
|
293
|
-
if (cache_markets) {
|
|
294
|
-
await fsPromises.writeFile (path, JSON.stringify (exchange.markets))
|
|
295
|
-
}
|
|
296
|
-
}
|
|
297
|
-
}
|
|
298
|
-
|
|
299
|
-
if (signIn && exchange.has.signIn) {
|
|
300
|
-
await exchange.signIn ()
|
|
301
|
-
}
|
|
302
|
-
|
|
303
|
-
exchange.verbose = verbose
|
|
304
|
-
|
|
305
|
-
if (no_send) {
|
|
306
|
-
|
|
307
|
-
exchange.verbose = no_send
|
|
308
|
-
exchange.fetch = function fetch (url, method = 'GET', headers = undefined, body = undefined) {
|
|
309
|
-
log.dim.noLocate ('-------------------------------------------')
|
|
310
|
-
log.dim.noLocate (exchange.iso8601 (exchange.milliseconds ()))
|
|
311
|
-
log.green.unlimited ({
|
|
312
|
-
url,
|
|
313
|
-
method,
|
|
314
|
-
headers,
|
|
315
|
-
body,
|
|
316
|
-
})
|
|
317
|
-
}
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
if (methodName) {
|
|
321
|
-
|
|
322
|
-
if (typeof exchange[methodName] === 'function') {
|
|
323
|
-
|
|
324
|
-
log (exchange.id + '.' + methodName, '(' + args.join (', ') + ')')
|
|
325
|
-
|
|
326
|
-
let start = exchange.milliseconds ()
|
|
327
|
-
let end = exchange.milliseconds ()
|
|
328
|
-
|
|
329
|
-
let i = 0;
|
|
330
|
-
|
|
331
|
-
let isWsMethod = false
|
|
332
|
-
if (methodName.startsWith("watch")) { // handle WS methods
|
|
333
|
-
isWsMethod = true;
|
|
334
|
-
}
|
|
335
|
-
|
|
336
|
-
while (true) {
|
|
337
|
-
try {
|
|
338
|
-
const result = await exchange[methodName] (... args)
|
|
339
|
-
end = exchange.milliseconds ()
|
|
340
|
-
if (!isWsMethod) {
|
|
341
|
-
log (exchange.iso8601 (end), 'iteration', i++, 'passed in', end - start, 'ms\n')
|
|
342
|
-
}
|
|
343
|
-
printHumanReadable (exchange, result)
|
|
344
|
-
if (!isWsMethod) {
|
|
345
|
-
log (exchange.iso8601 (end), 'iteration', i, 'passed in', end - start, 'ms\n')
|
|
346
|
-
}
|
|
347
|
-
if (shouldCreateRequestReport || shouldCreateBoth) {
|
|
348
|
-
createRequestTemplate(exchange, methodName, args, result)
|
|
349
|
-
}
|
|
350
|
-
if (shouldCreateResponseReport || shouldCreateBoth) {
|
|
351
|
-
createResponseTemplate(exchange, methodName, args, result)
|
|
352
|
-
}
|
|
353
|
-
start = end
|
|
354
|
-
} catch (e) {
|
|
355
|
-
if (e instanceof ExchangeError) {
|
|
356
|
-
log.red (e.constructor.name, e.message)
|
|
357
|
-
} else if (e instanceof NetworkError) {
|
|
358
|
-
log.yellow (e.constructor.name, e.message)
|
|
359
|
-
}
|
|
360
|
-
|
|
361
|
-
log.dim ('---------------------------------------------------')
|
|
362
|
-
|
|
363
|
-
// rethrow for call-stack // other errors
|
|
364
|
-
throw e
|
|
365
|
-
|
|
366
|
-
}
|
|
367
|
-
|
|
368
|
-
if (debug) {
|
|
369
|
-
const keys = Object.keys (httpsAgent.freeSockets)
|
|
370
|
-
const firstKey = keys[0]
|
|
371
|
-
let httpAgent = httpsAgent.freeSockets[firstKey] as any;
|
|
372
|
-
log (firstKey, httpAgent.length)
|
|
373
|
-
}
|
|
374
|
-
|
|
375
|
-
if (!poll && !isWsMethod){
|
|
376
|
-
break
|
|
377
|
-
}
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
} else if (exchange[methodName] === undefined) {
|
|
381
|
-
log.red (exchange.id + '.' + methodName + ': no such property')
|
|
382
|
-
} else {
|
|
383
|
-
printHumanReadable (exchange, exchange[methodName])
|
|
384
|
-
}
|
|
385
|
-
} else {
|
|
386
|
-
log (exchange)
|
|
387
|
-
}
|
|
388
|
-
}
|
|
389
|
-
|
|
390
|
-
}
|
|
391
|
-
|
|
392
|
-
//-----------------------------------------------------------------------------
|
|
393
|
-
|
|
394
|
-
run ()
|
|
395
|
-
|
|
396
|
-
export {
|
|
397
|
-
}
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
|
|
3
|
-
// AUTO-TRANSPILE //
|
|
4
|
-
|
|
5
|
-
async function example () {
|
|
6
|
-
const prefix = '-';
|
|
7
|
-
const exchange_1 = new ccxt.okx ();
|
|
8
|
-
const exchange_2 = new ccxt.htx ();
|
|
9
|
-
const keys_1 = Object.keys (exchange_1.has);
|
|
10
|
-
const keys_2 = Object.keys (exchange_2.has);
|
|
11
|
-
// check missing from exchange-1
|
|
12
|
-
console.log ('### checking missing functionalities from exchange-1:', exchange_1.id);
|
|
13
|
-
for (let i = 0; i < keys_2.length; i++) {
|
|
14
|
-
const key = keys_2[i];
|
|
15
|
-
if (exchange_2.has[key]) {
|
|
16
|
-
if (!keys_1.includes (key)) {
|
|
17
|
-
console.log (prefix, key, 'does not exist in', exchange_1.id, 'as opposed to', exchange_2.id);
|
|
18
|
-
} else if (exchange_2.has[key] !== exchange_1.has[key]) {
|
|
19
|
-
console.log (prefix, key, '> ', exchange_1.id, ':', exchange_1.has[key], ',', exchange_2.id, ':', exchange_2.has[key]);
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
}
|
|
23
|
-
// check missing from exchange-2
|
|
24
|
-
console.log ('### checking missing functionalities from exchange-2:', exchange_2.id);
|
|
25
|
-
for (let i = 0; i < keys_1.length; i++) {
|
|
26
|
-
const key = keys_1[i];
|
|
27
|
-
if (exchange_1.has[key]) {
|
|
28
|
-
if (!keys_2.includes (key)) {
|
|
29
|
-
console.log (prefix, key, 'does not exist in', exchange_2.id, 'as opposed to', exchange_1.id);
|
|
30
|
-
} else if (exchange_1.has[key] !== exchange_2.has[key]) {
|
|
31
|
-
console.log (prefix, key, '> ', exchange_2.id, ':', exchange_2.has[key], ',', exchange_1.id, ':', exchange_1.has[key]);
|
|
32
|
-
}
|
|
33
|
-
}
|
|
34
|
-
}
|
|
35
|
-
}
|
|
36
|
-
await example ();
|
|
@@ -1,89 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import ccxt from '../../js/ccxt.js';
|
|
3
|
-
|
|
4
|
-
// AUTO-TRANSPILE //
|
|
5
|
-
|
|
6
|
-
console.log ('CCXT Version:', ccxt.version);
|
|
7
|
-
|
|
8
|
-
// ------------------------------------------------------------------------------
|
|
9
|
-
|
|
10
|
-
async function example () {
|
|
11
|
-
// at this moment, only OKX support embedded stop-loss & take-profit orders in unified manner. other exchanges are being added actively and will be available soon.
|
|
12
|
-
const exchange = new ccxt.okx ({
|
|
13
|
-
"apiKey": "YOUR_API_KEY",
|
|
14
|
-
"secret": "YOUR_API_SECRET",
|
|
15
|
-
"password": "YOUR_API_PASSWORD", // if exchange does not require password, comment out this line
|
|
16
|
-
});
|
|
17
|
-
|
|
18
|
-
const symbol = 'DOGE/USDT:USDT';
|
|
19
|
-
const side = 'buy'; // 'buy' | 'sell'
|
|
20
|
-
const order_type = 'limit'; // 'market' | 'limit'
|
|
21
|
-
const amount = 1; // how many contracts (see `market(symbol).contractSize` to find out coin portion per one contract)
|
|
22
|
-
|
|
23
|
-
await exchange.loadMarkets ();
|
|
24
|
-
const market = exchange.market (symbol);
|
|
25
|
-
|
|
26
|
-
const ticker = await exchange.fetchTicker (symbol);
|
|
27
|
-
|
|
28
|
-
const last_price = ticker['last'];
|
|
29
|
-
const ask_price = ticker['ask'];
|
|
30
|
-
const bid_price = ticker['bid'];
|
|
31
|
-
|
|
32
|
-
// if order_type is 'market', then price is not needed
|
|
33
|
-
let price = undefined;
|
|
34
|
-
// if order_type is 'limit', then set a price at your desired level
|
|
35
|
-
if (order_type === 'limit') {
|
|
36
|
-
price = (side === 'buy') ? bid_price * 0.95 : ask_price * 1.05; // i.e. 5% from current price
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
// set trigger price for stop-loss/take-profit to 2% from current price
|
|
40
|
-
// (note, across different exchanges "trigger" price can be also mentioned with different synonyms, like "activation price", "stop price", "conditional price", etc. )
|
|
41
|
-
const stop_loss_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 0.98 : 1.02);
|
|
42
|
-
const take_profit_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 1.02 : 0.98);
|
|
43
|
-
|
|
44
|
-
// when symbol's price reaches your predefined "trigger price", stop-loss order would be activated as a "market order". but if you want it to be activated as a "limit order", then set a 'price' parameter for it
|
|
45
|
-
const params = {
|
|
46
|
-
'stopLoss': {
|
|
47
|
-
'triggerPrice': stop_loss_trigger_price,
|
|
48
|
-
// set a 'price' to act as limit order, otherwise remove it for a market order
|
|
49
|
-
'price': stop_loss_trigger_price * 0.98,
|
|
50
|
-
},
|
|
51
|
-
'takeProfit': {
|
|
52
|
-
'triggerPrice': take_profit_trigger_price,
|
|
53
|
-
// set a 'price' to act as limit order, otherwise remove it for a market order
|
|
54
|
-
'price': take_profit_trigger_price * 0.98,
|
|
55
|
-
},
|
|
56
|
-
// note that some exchanges might require some exchange specific parameter when opening a position, i.e.:
|
|
57
|
-
// 'posSide': 'long', // for phemex hedge-mode api
|
|
58
|
-
};
|
|
59
|
-
|
|
60
|
-
const position_amount = market['contractSize'] * amount;
|
|
61
|
-
const position_value = position_amount * last_price;
|
|
62
|
-
// log
|
|
63
|
-
console.log ('Going to open a position', 'for', amount, 'contracts worth', position_amount, market['base'], '~', position_value, market['settle'], 'using', side, order_type, 'order (', (order_type === 'limit' ? exchange.priceToPrecision (symbol, price) : ''), '), using the following params:');
|
|
64
|
-
console.log (params);
|
|
65
|
-
console.log ('-----------------------------------------------------------------------');
|
|
66
|
-
|
|
67
|
-
// exchange.verbose = True // uncomment for debugging purposes if necessary
|
|
68
|
-
|
|
69
|
-
try {
|
|
70
|
-
const created_order = await exchange.createOrder (symbol, order_type, side, amount, price, params);
|
|
71
|
-
console.log ("Created an order", created_order);
|
|
72
|
-
|
|
73
|
-
// Fetch all your open orders for this symbol
|
|
74
|
-
// - use 'fetchOpenOrders' or 'fetchOrders' and filter with 'open' status
|
|
75
|
-
// - note, that some exchanges might return one order object with embedded stoploss/takeprofit fields, while other exchanges might have separate stoploss/takeprofit order objects
|
|
76
|
-
const all_open_orders = await exchange.fetchOpenOrders (symbol);
|
|
77
|
-
console.log ("Fetched all your orders for this symbol", all_open_orders);
|
|
78
|
-
|
|
79
|
-
// To cancel a limit order, use "exchange.cancel_order(created_order['id'], symbol)""
|
|
80
|
-
} catch (e) {
|
|
81
|
-
console.log (e.toString ());
|
|
82
|
-
}
|
|
83
|
-
}
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
await example ();
|
|
87
|
-
|
|
88
|
-
// NOTES:
|
|
89
|
-
// - Sometimes you might experience, when their stop-loss/take-profit order might not become activated, even though on chart the price had crossed that "trigger-price" order was not executed . That happens because some exchange might be using mark-price (instead of last-price) as a reference-price, so that mark-price might reach your trigger-price and it would activate your SL/TP order (even though on your symbol's chart you are viewing the "last-price" by default, which could have different movements than the mark-price).
|
|
@@ -1,33 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
|
|
3
|
-
// AUTO-TRANSPILE //
|
|
4
|
-
|
|
5
|
-
async function example () {
|
|
6
|
-
const exchange = new ccxt.pro.binance ({
|
|
7
|
-
'apiKey': 'MY_API_KEY',
|
|
8
|
-
'secret': 'MY_SECRET',
|
|
9
|
-
});
|
|
10
|
-
exchange.setSandboxMode (true);
|
|
11
|
-
exchange.verbose = true; // uncomment for debugging purposes if necessary
|
|
12
|
-
// load markets
|
|
13
|
-
await exchange.loadMarkets ();
|
|
14
|
-
const symbol = 'ETH/USDT';
|
|
15
|
-
const type = 'limit';
|
|
16
|
-
const side = 'buy';
|
|
17
|
-
const amount = 0.01;
|
|
18
|
-
let price = 1000;
|
|
19
|
-
let orders = [];
|
|
20
|
-
for (let i=1; i<5; i++) {
|
|
21
|
-
const response = await exchange.createOrderWs (
|
|
22
|
-
symbol,
|
|
23
|
-
type,
|
|
24
|
-
side,
|
|
25
|
-
amount,
|
|
26
|
-
price
|
|
27
|
-
);
|
|
28
|
-
price += i;
|
|
29
|
-
orders.push (response);
|
|
30
|
-
}
|
|
31
|
-
console.log (orders);
|
|
32
|
-
}
|
|
33
|
-
await example ();
|
|
@@ -1,21 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
|
|
3
|
-
// AUTO-TRANSPILE //
|
|
4
|
-
|
|
5
|
-
async function example () {
|
|
6
|
-
const exchange = new ccxt.binance ({
|
|
7
|
-
'apiKey': 'MY_API_KEY',
|
|
8
|
-
'secret': 'MY_SECRET',
|
|
9
|
-
});
|
|
10
|
-
exchange.setSandboxMode (true);
|
|
11
|
-
await exchange.loadMarkets ();
|
|
12
|
-
exchange.verbose = true; // uncomment for debugging purposes if necessary
|
|
13
|
-
const orders = await exchange.createOrders (
|
|
14
|
-
[
|
|
15
|
-
{ 'symbol': 'LTC/USDT:USDT', 'type': 'limit', 'side': 'buy', 'amount': 10, 'price': 55 },
|
|
16
|
-
{ 'symbol': 'ETH/USDT:USDT', 'type': 'market', 'side': 'buy', 'amount': 0.5 },
|
|
17
|
-
]
|
|
18
|
-
);
|
|
19
|
-
console.log (orders);
|
|
20
|
-
}
|
|
21
|
-
await example ();
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
|
|
3
|
-
// AUTO-TRANSPILE //
|
|
4
|
-
|
|
5
|
-
async function example () {
|
|
6
|
-
const exchange = new ccxt.bingx ({
|
|
7
|
-
'apiKey': 'MY_API_KEY',
|
|
8
|
-
'secret': 'MY_SECRET',
|
|
9
|
-
});
|
|
10
|
-
// exchange.setSandboxMode (true);
|
|
11
|
-
// exchange.verbose = true; // uncomment for debugging purposes if necessary
|
|
12
|
-
await exchange.loadMarkets ();
|
|
13
|
-
const symbol = 'BTC/USDT:USDT';
|
|
14
|
-
const order_type = 'market';
|
|
15
|
-
const side = 'sell';
|
|
16
|
-
const amount = 0.0001;
|
|
17
|
-
const price = undefined;
|
|
18
|
-
const reduceOnly = true;
|
|
19
|
-
const trailingAmount = 100;
|
|
20
|
-
// const trailingTriggerPrice = undefined; // not supported on all exchanges
|
|
21
|
-
const params = {
|
|
22
|
-
'reduceOnly': reduceOnly,
|
|
23
|
-
'trailingAmount': trailingAmount,
|
|
24
|
-
// 'trailingTriggerPrice': trailingTriggerPrice,
|
|
25
|
-
};
|
|
26
|
-
try {
|
|
27
|
-
const create_order = await exchange.createOrder (symbol, order_type, side, amount, price, params);
|
|
28
|
-
// Alternatively use the createTrailingAmountOrder method:
|
|
29
|
-
// const create_order = await exchange.createTrailingAmountOrder (symbol, order_type, side, amount, price, trailingAmount, trailingTriggerPrice, {
|
|
30
|
-
// 'reduceOnly': reduceOnly,
|
|
31
|
-
// });
|
|
32
|
-
console.log (create_order);
|
|
33
|
-
} catch (e) {
|
|
34
|
-
console.log (e.toString ());
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
await example ();
|
|
@@ -1,37 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
|
|
3
|
-
// AUTO-TRANSPILE //
|
|
4
|
-
|
|
5
|
-
async function example () {
|
|
6
|
-
const exchange = new ccxt.bingx ({
|
|
7
|
-
'apiKey': 'MY_API_KEY',
|
|
8
|
-
'secret': 'MY_SECRET',
|
|
9
|
-
});
|
|
10
|
-
// exchange.setSandboxMode (true);
|
|
11
|
-
// exchange.verbose = true; // uncomment for debugging purposes if necessary
|
|
12
|
-
await exchange.loadMarkets ();
|
|
13
|
-
const symbol = 'BTC/USDT:USDT';
|
|
14
|
-
const order_type = 'market';
|
|
15
|
-
const side = 'sell';
|
|
16
|
-
const amount = 0.0001;
|
|
17
|
-
const price = undefined;
|
|
18
|
-
const reduceOnly = true;
|
|
19
|
-
const trailingPercent = 10;
|
|
20
|
-
// const trailingTriggerPrice = undefined; // not supported on all exchanges
|
|
21
|
-
const params = {
|
|
22
|
-
'reduceOnly': reduceOnly,
|
|
23
|
-
'trailingPercent': trailingPercent,
|
|
24
|
-
// 'trailingTriggerPrice': trailingTriggerPrice,
|
|
25
|
-
};
|
|
26
|
-
try {
|
|
27
|
-
const create_order = await exchange.createOrder (symbol, order_type, side, amount, price, params);
|
|
28
|
-
// Alternatively use the createTrailingAmountOrder method:
|
|
29
|
-
// const create_order = await exchange.createTrailingPercentOrder (symbol, order_type, side, amount, price, trailingPercent, trailingTriggerPrice, {
|
|
30
|
-
// 'reduceOnly': reduceOnly,
|
|
31
|
-
// });
|
|
32
|
-
console.log (create_order);
|
|
33
|
-
} catch (e) {
|
|
34
|
-
console.log (e.toString ());
|
|
35
|
-
}
|
|
36
|
-
}
|
|
37
|
-
await example ();
|
|
@@ -1,14 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
|
|
3
|
-
// to set custom "proxy-agent" for ccxt
|
|
4
|
-
|
|
5
|
-
import ccxt from 'ccxt';
|
|
6
|
-
import HttpProxyAgent from 'http-proxy-agent';
|
|
7
|
-
import HttpsProxyAgent from 'https-proxy-agent';
|
|
8
|
-
|
|
9
|
-
const proxy = 'http://1.2.3.4:5678';
|
|
10
|
-
const agent = new HttpProxyAgent (proxy); // or HttpsProxyAgent if you need http
|
|
11
|
-
// then pass it through constructor:
|
|
12
|
-
const kraken = new ccxt.kraken ({ agent });
|
|
13
|
-
// or set it later:
|
|
14
|
-
kraken.agent = agent;
|