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
|
@@ -1,62 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt');
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
const exchange = new ccxt.bybit({
|
|
8
|
-
'apiKey': 'YOUR_API_KEY',
|
|
9
|
-
'secret': 'YOUR_API_KEY',
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
// exchange.set_sandbox_mode(true) // enable sandbox mode
|
|
13
|
-
|
|
14
|
-
// Example 1 :: Swap : open position and set trailing stop and close it
|
|
15
|
-
async function example1 () {
|
|
16
|
-
exchange['options']['defaultType'] = 'swap'; // very important set swap as default type
|
|
17
|
-
await exchange.loadMarkets ();
|
|
18
|
-
|
|
19
|
-
const symbol = 'LTC/USDT:USDT';
|
|
20
|
-
const market = exchange.market(symbol);
|
|
21
|
-
|
|
22
|
-
// fetch swap balance
|
|
23
|
-
const balance = await exchange.fetchBalance ();
|
|
24
|
-
console.log (balance)
|
|
25
|
-
|
|
26
|
-
// create order and open position
|
|
27
|
-
const type = 'market';
|
|
28
|
-
const side = 'buy';
|
|
29
|
-
const amount = 0.1
|
|
30
|
-
const price = undefined;
|
|
31
|
-
const createOrder = await exchange.createOrder (symbol, type, side, amount, price);
|
|
32
|
-
console.log ('Created order id:', createOrder['id'])
|
|
33
|
-
|
|
34
|
-
// set trailing stop
|
|
35
|
-
const rawSide = 'Buy'; // or 'Sell'
|
|
36
|
-
const trailing_stop = 30; // YOUR TRAILING STOP HERE
|
|
37
|
-
const trailingParams = {
|
|
38
|
-
'symbol': market['id'],
|
|
39
|
-
'side': rawSide,
|
|
40
|
-
'trailing_stop': trailing_stop
|
|
41
|
-
}
|
|
42
|
-
const trailing_response = await exchange.privatePostPrivateLinearPositionTradingStop (trailingParams);
|
|
43
|
-
console.log(trailing_response)
|
|
44
|
-
|
|
45
|
-
// check opened position
|
|
46
|
-
const symbols = [ symbol ];
|
|
47
|
-
const positions = await exchange.fetchPositions (symbols);
|
|
48
|
-
console.log (positions)
|
|
49
|
-
|
|
50
|
-
// Close position by issuing a order in the opposite direction
|
|
51
|
-
const params = {
|
|
52
|
-
'reduce_only': true
|
|
53
|
-
}
|
|
54
|
-
const closePositionOrder = await exchange.createOrder (symbol, type, side, amount, price, params);
|
|
55
|
-
console.log (closePositionOrder);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
async function main () {
|
|
59
|
-
await example1 ();
|
|
60
|
-
}
|
|
61
|
-
|
|
62
|
-
main ();
|
|
@@ -1,154 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../dist/ccxt.bundle.cjs');
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
const exchange = new ccxt.bybit ({
|
|
8
|
-
'apiKey': 'YOUR_API_KEY',
|
|
9
|
-
'secret': 'YOUR_SECRET_KEY',
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
// Example 1: Spot : fetch balance, create order, cancel it and check canceled orders
|
|
13
|
-
async function example1 () {
|
|
14
|
-
exchange['options']['defaultType'] = 'spot'; // very important set spot as default type
|
|
15
|
-
|
|
16
|
-
await exchange.loadMarkets ();
|
|
17
|
-
|
|
18
|
-
// fetch spot balance
|
|
19
|
-
const balance = await exchange.fetchBalance ();
|
|
20
|
-
console.log (balance)
|
|
21
|
-
|
|
22
|
-
// create order
|
|
23
|
-
const symbol = 'LTC/USDT';
|
|
24
|
-
const createOrder = await exchange.createOrder (symbol, 'limit', 'buy', 50, 0.1);
|
|
25
|
-
console.log ('Created order id:', createOrder['id'])
|
|
26
|
-
|
|
27
|
-
// cancel order
|
|
28
|
-
const cancelOrder = await exchange.cancelOrder (createOrder['id'], symbol);
|
|
29
|
-
|
|
30
|
-
// Check canceled orders (bybit does not have a single endpoint to check orders
|
|
31
|
-
// we have to choose whether to check open or closed orders and call fetchOpenOrders
|
|
32
|
-
// or fetchClosedOrders respectively
|
|
33
|
-
const canceledOrders = await exchange.fetchClosedOrders (symbol);
|
|
34
|
-
console.log (canceledOrders);
|
|
35
|
-
}
|
|
36
|
-
|
|
37
|
-
// -----------------------------------------------------------------------------------------
|
|
38
|
-
|
|
39
|
-
// Example 2 :: Swap : fetch balance, open a position and close it
|
|
40
|
-
async function example2 () {
|
|
41
|
-
exchange['options']['defaultType'] = 'swap'; // very important set swap as default type
|
|
42
|
-
await exchange.loadMarkets ();
|
|
43
|
-
|
|
44
|
-
// fetch swap balance
|
|
45
|
-
const balance = await exchange.fetchBalance ();
|
|
46
|
-
console.log (balance)
|
|
47
|
-
|
|
48
|
-
// create order and open position
|
|
49
|
-
const symbol = 'LTC/USDT:USDT';
|
|
50
|
-
const createOrder = await exchange.createOrder (symbol, 'market', 'buy', 0.1);
|
|
51
|
-
console.log ('Created order id:', createOrder['id'])
|
|
52
|
-
|
|
53
|
-
// check opened position
|
|
54
|
-
const symbols = [ symbol ];
|
|
55
|
-
const positions = await exchange.fetchPositions (symbols);
|
|
56
|
-
console.log (positions)
|
|
57
|
-
|
|
58
|
-
// Close position by issuing a order in the opposite direction
|
|
59
|
-
const params = {
|
|
60
|
-
'reduce_only': true
|
|
61
|
-
}
|
|
62
|
-
const closePositionOrder = await exchange.createOrder (symbol, 'market', 'sell', 0.1, undefined, params);
|
|
63
|
-
console.log (closePositionOrder);
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
// -----------------------------------------------------------------------------------------
|
|
67
|
-
|
|
68
|
-
// Example 3 :: USDC Swap : fetch balance, open a position and close it
|
|
69
|
-
async function example3 () {
|
|
70
|
-
exchange['options']['defaultType'] = 'swap'; // very important set swap as default type
|
|
71
|
-
await exchange.loadMarkets ();
|
|
72
|
-
|
|
73
|
-
// fetch USDC swap balance
|
|
74
|
-
// when no symbol is available we can show our intent
|
|
75
|
-
// of using USDC endpoints by either using defaultSettle in options or
|
|
76
|
-
// settle in params
|
|
77
|
-
// Using Options: exchange['options']['defaultSettle'] = 'USDC';
|
|
78
|
-
// Using params:
|
|
79
|
-
const balanceParams = {
|
|
80
|
-
'settle': 'USDC'
|
|
81
|
-
}
|
|
82
|
-
const balance = await exchange.fetchBalance (balanceParams);
|
|
83
|
-
console.log (balance)
|
|
84
|
-
|
|
85
|
-
// create order and open position
|
|
86
|
-
// taking into consideration that USDC markets do not support
|
|
87
|
-
// market orders
|
|
88
|
-
const symbol = 'BTC/USD:USDC';
|
|
89
|
-
const amount = 0.1;
|
|
90
|
-
const price = 29940 // adjust this accordingly
|
|
91
|
-
const createOrder = await exchange.createOrder (symbol, 'limit', 'buy', amount, price);
|
|
92
|
-
console.log ('Created order id:', createOrder['id'])
|
|
93
|
-
|
|
94
|
-
// check if the order was filled and the position opened
|
|
95
|
-
const symbols = [ symbol ];
|
|
96
|
-
const positions = await exchange.fetchPositions (symbols);
|
|
97
|
-
console.log (positions)
|
|
98
|
-
|
|
99
|
-
// close position (assuming it was already opened) by issuing an order in the opposite direction
|
|
100
|
-
const params = {
|
|
101
|
-
'reduce_only': true
|
|
102
|
-
}
|
|
103
|
-
const closePositionOrder = await exchange.createOrder (symbol, 'limit', 'sell', amount, price, params);
|
|
104
|
-
console.log (closePositionOrder);
|
|
105
|
-
}
|
|
106
|
-
|
|
107
|
-
// -----------------------------------------------------------------------------------------
|
|
108
|
-
|
|
109
|
-
// Example 4 :: Future : fetch balance, create stop-order and check open stop-orders
|
|
110
|
-
async function example4 () {
|
|
111
|
-
exchange['options']['defaultType'] = 'future'; // very important set future as default type
|
|
112
|
-
await exchange.loadMarkets ();
|
|
113
|
-
|
|
114
|
-
// fetch future balance
|
|
115
|
-
const balance = await exchange.fetchBalance ();
|
|
116
|
-
console.log (balance)
|
|
117
|
-
|
|
118
|
-
// create stop-order
|
|
119
|
-
const symbol = 'ETH/USD:ETH-220930';
|
|
120
|
-
const amount = 10; // in USD for inverse futures
|
|
121
|
-
const price = 1200;
|
|
122
|
-
const side = 'buy';
|
|
123
|
-
const type = 'limit';
|
|
124
|
-
const stopOrderParams = {
|
|
125
|
-
'position_idx': 0, // 0 One-Way Mode, 1 Buy-side, 2 Sell-side, default = 0
|
|
126
|
-
'stopPrice': 1000, // mandatory for stop orders
|
|
127
|
-
'basePrice': 1100 // mandatory for stop orders
|
|
128
|
-
}
|
|
129
|
-
const stopOrder = await exchange.createOrder (symbol, type, side, amount, price, stopOrderParams);
|
|
130
|
-
console.log ('Created order id:', stopOrder['id'])
|
|
131
|
-
|
|
132
|
-
// check opened stop-order
|
|
133
|
-
const openOrderParams = {
|
|
134
|
-
'stop': true
|
|
135
|
-
}
|
|
136
|
-
const openOrders = await exchange.fetchOpenOrders (symbol, undefined, undefined, openOrderParams);
|
|
137
|
-
console.log (openOrders)
|
|
138
|
-
|
|
139
|
-
// Cancell open stop-order
|
|
140
|
-
const cancelOrder = await exchange.cancelOrder (stopOrder['id'], symbol, openOrderParams);
|
|
141
|
-
console.log (cancelOrder);
|
|
142
|
-
}
|
|
143
|
-
|
|
144
|
-
// -----------------------------------------------------------------------------------------
|
|
145
|
-
|
|
146
|
-
async function main () {
|
|
147
|
-
await example1 ();
|
|
148
|
-
await example2 ();
|
|
149
|
-
await example3 ();
|
|
150
|
-
await example4 ();
|
|
151
|
-
|
|
152
|
-
}
|
|
153
|
-
|
|
154
|
-
main ();
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt.js')
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
async function fetchAllBalances (exchange) {
|
|
8
|
-
const params = {}
|
|
9
|
-
let balance = {}
|
|
10
|
-
while (true) {
|
|
11
|
-
const response = await exchange.fetchBalance (params)
|
|
12
|
-
balance = exchange.extend (balance, response)
|
|
13
|
-
const info = exchange.safeValue (response, 'info', {})
|
|
14
|
-
const pagination = exchange.safeValue (info, 'pagination', {})
|
|
15
|
-
const startingAfter = exchange.safeString (pagination, 'next_starting_after')
|
|
16
|
-
if (startingAfter !== undefined) {
|
|
17
|
-
params['starting_after'] = startingAfter
|
|
18
|
-
} else {
|
|
19
|
-
break
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
return balance
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
async function main () {
|
|
26
|
-
const exchange = new ccxt.coinbase ({
|
|
27
|
-
apiKey: 'YOUR_API_KEY',
|
|
28
|
-
secret: 'YOUR_API_SECRET',
|
|
29
|
-
})
|
|
30
|
-
const markets = await exchange.loadMarkets ()
|
|
31
|
-
// coinbase.verbose = true // uncomment for debugging purposes if necessary
|
|
32
|
-
const balance = await fetchAllBalances (exchange)
|
|
33
|
-
console.log (balance)
|
|
34
|
-
}
|
|
35
|
-
|
|
36
|
-
main ()
|
|
@@ -1,47 +0,0 @@
|
|
|
1
|
-
"use strict";
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt')
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
// https://github.com/ccxt/ccxt/issues/15405
|
|
8
|
-
|
|
9
|
-
async function main () {
|
|
10
|
-
|
|
11
|
-
const exchange = new ccxt.coinex ({
|
|
12
|
-
'apiKey': 'YOUR_API_KEY',
|
|
13
|
-
'secret': 'YOUR_API_SECRET',
|
|
14
|
-
});
|
|
15
|
-
|
|
16
|
-
// exchange.verbose = true // uncomment for debugging purposes
|
|
17
|
-
|
|
18
|
-
await exchange.loadMarkets ();
|
|
19
|
-
const addresses = {};
|
|
20
|
-
const promises = [];
|
|
21
|
-
|
|
22
|
-
async function fetchDepositAddress (currency, network) {
|
|
23
|
-
try {
|
|
24
|
-
const response = await exchange.fetchDepositAddress(currency, { 'network': network });
|
|
25
|
-
addresses[currency][network] = response['address']
|
|
26
|
-
}
|
|
27
|
-
catch (err) {
|
|
28
|
-
console.error(err)
|
|
29
|
-
}
|
|
30
|
-
}
|
|
31
|
-
|
|
32
|
-
const currencies = Object.keys (exchange.currencies);
|
|
33
|
-
|
|
34
|
-
for (const currency of currencies) {
|
|
35
|
-
const networks = Object.keys (exchange.currencies[currency]['networks']);
|
|
36
|
-
for (const network of networks) {
|
|
37
|
-
addresses[currency] = {};
|
|
38
|
-
promises.push (fetchDepositAddress (currency, network));
|
|
39
|
-
}
|
|
40
|
-
}
|
|
41
|
-
|
|
42
|
-
await Promise.all (promises);
|
|
43
|
-
|
|
44
|
-
console.log (addresses)
|
|
45
|
-
};
|
|
46
|
-
|
|
47
|
-
main ();
|
|
@@ -1,75 +0,0 @@
|
|
|
1
|
-
'use strict';
|
|
2
|
-
|
|
3
|
-
const ccxt = require ('../../ccxt');
|
|
4
|
-
|
|
5
|
-
console.log ('CCXT Version:', ccxt.version)
|
|
6
|
-
|
|
7
|
-
let exchange = new ccxt.coinex({
|
|
8
|
-
'apiKey': 'YOUR_API_KEY',
|
|
9
|
-
'secret': 'YOUR_SECRET_KEY',
|
|
10
|
-
})
|
|
11
|
-
|
|
12
|
-
// Example 1 :: Swap : fetch balance, create a limit swap order with leverage
|
|
13
|
-
async function example1 () {
|
|
14
|
-
exchange['options']['defaultType'] = 'swap';
|
|
15
|
-
exchange.options['defaultMarginMode'] = 'cross' // or isolated
|
|
16
|
-
await exchange.loadMarkets ();
|
|
17
|
-
|
|
18
|
-
const symbol = 'ADA/USDT:USDT';
|
|
19
|
-
|
|
20
|
-
// fetchBalance
|
|
21
|
-
const balance = await exchange.fetchBalance ();
|
|
22
|
-
console.log (balance)
|
|
23
|
-
|
|
24
|
-
// set the desired leverage (has to be made before placing the order and for a specific symbol)
|
|
25
|
-
const leverage = 8;
|
|
26
|
-
const leverage_response = await exchange.setLeverage(leverage, symbol)
|
|
27
|
-
|
|
28
|
-
// create limit order
|
|
29
|
-
const amount = 50;
|
|
30
|
-
const price = 0.3 // adjust this accordingly
|
|
31
|
-
const createOrder = await exchange.createOrder (symbol, 'limit', 'buy', amount, price);
|
|
32
|
-
console.log ('Created order id:', createOrder['id'])
|
|
33
|
-
}
|
|
34
|
-
|
|
35
|
-
// Example 2 :: Swap :: open a position and close it
|
|
36
|
-
async function example2 () {
|
|
37
|
-
exchange['options']['defaultType'] = 'swap';
|
|
38
|
-
exchange.options['defaultMarginMode'] = 'cross' // or isolated
|
|
39
|
-
await exchange.loadMarkets ();
|
|
40
|
-
|
|
41
|
-
const symbol = 'ADA/USDT:USDT';
|
|
42
|
-
|
|
43
|
-
// fetchBalance
|
|
44
|
-
const balance = await exchange.fetchBalance ();
|
|
45
|
-
console.log (balance)
|
|
46
|
-
|
|
47
|
-
// set the desired leverage (has to be made before placing the order and for a specific symbol)
|
|
48
|
-
const leverage = 8;
|
|
49
|
-
const leverage_response = await exchange.setLeverage(leverage, symbol)
|
|
50
|
-
|
|
51
|
-
// create market order and open position
|
|
52
|
-
const amount = 50;
|
|
53
|
-
const createOrder = await exchange.createOrder (symbol, 'market', 'buy', amount);
|
|
54
|
-
console.log ('Created order id:', createOrder['id'])
|
|
55
|
-
|
|
56
|
-
// check if the order was filled and the position opened
|
|
57
|
-
const position = await exchange.fetchPositions (symbol);
|
|
58
|
-
console.log (position)
|
|
59
|
-
|
|
60
|
-
// close position (assuming it was already opened) by issuing an order in the opposite direction
|
|
61
|
-
const params = {
|
|
62
|
-
'reduce_only': true
|
|
63
|
-
}
|
|
64
|
-
const closePositionOrder = await exchange.createOrder (symbol, 'market', 'sell', amount, undefined, params);
|
|
65
|
-
console.log (closePositionOrder);
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
// -----------------------------------------------------------------------------------------
|
|
69
|
-
|
|
70
|
-
async function main () {
|
|
71
|
-
await example1 ();
|
|
72
|
-
await example2 ();
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
main ();
|
|
@@ -1,54 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import { nice as ansi } from 'ansicolor';
|
|
4
|
-
import ololog from 'ololog';
|
|
5
|
-
import asTable from 'as-table';
|
|
6
|
-
|
|
7
|
-
import ccxt from '../../js/ccxt.js';
|
|
8
|
-
|
|
9
|
-
const { noLocate } = ololog;
|
|
10
|
-
const log = noLocate;
|
|
11
|
-
|
|
12
|
-
const table = asTable.configure ({
|
|
13
|
-
delimiter: ' | '.dim,
|
|
14
|
-
right: true,
|
|
15
|
-
});
|
|
16
|
-
|
|
17
|
-
const exchange = new ccxt.coinone ({
|
|
18
|
-
'verbose': process.argv.includes ('--verbose'),
|
|
19
|
-
})
|
|
20
|
-
|
|
21
|
-
let printTickersAsTable = function (exchange, tickers) {
|
|
22
|
-
log (exchange.id.green, exchange.iso8601 (exchange.milliseconds ()))
|
|
23
|
-
log ('Fetched', Object.values (tickers).length.toString ().green, 'tickers:')
|
|
24
|
-
log (table (ccxt.sortBy (Object.values (tickers), 'symbol', false)))
|
|
25
|
-
}
|
|
26
|
-
|
|
27
|
-
async function fetchAllAndPrint () {
|
|
28
|
-
const tickers = await exchange.fetchTickers ()
|
|
29
|
-
log ('---------------------------------------- fetchTickers ----------------------------------------')
|
|
30
|
-
printTickersAsTable (exchange, tickers)
|
|
31
|
-
}
|
|
32
|
-
|
|
33
|
-
async function fetchOneByOneAndPrint () {
|
|
34
|
-
const markets = await exchange.loadMarkets ()
|
|
35
|
-
const symbols = Object.keys (markets)
|
|
36
|
-
const tickers = []
|
|
37
|
-
|
|
38
|
-
log ('---------------------------------------- fetchTicker (one by one) ----------------------------------------')
|
|
39
|
-
|
|
40
|
-
for (let i = 0; i < symbols.length; i++) {
|
|
41
|
-
const ticker = await exchange.fetchTicker (symbols[i])
|
|
42
|
-
tickers.push (ticker)
|
|
43
|
-
log (`${i+1} / ${symbols.length}`)
|
|
44
|
-
log ('\u001b[1A'.repeat (2)) // cursor up
|
|
45
|
-
}
|
|
46
|
-
|
|
47
|
-
printTickersAsTable (exchange, tickers)
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
(async () => {
|
|
51
|
-
await fetchAllAndPrint ()
|
|
52
|
-
log ('\n')
|
|
53
|
-
await fetchOneByOneAndPrint ()
|
|
54
|
-
}) ()
|
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
import log from 'ololog';
|
|
4
|
-
import ccxt from '../../js/ccxt.js';
|
|
5
|
-
|
|
6
|
-
const exchange = new ccxt.coinone ({
|
|
7
|
-
'verbose': process.argv.includes ('--verbose'),
|
|
8
|
-
})
|
|
9
|
-
|
|
10
|
-
;(async function main () {
|
|
11
|
-
|
|
12
|
-
const markets = await exchange.loadMarkets ()
|
|
13
|
-
log (markets)
|
|
14
|
-
log ('\n' + exchange['name'] + ' supports ' + Object.keys (markets).length + ' pairs')
|
|
15
|
-
|
|
16
|
-
}) ()
|
|
@@ -1,36 +0,0 @@
|
|
|
1
|
-
import ccxt from '../../js/ccxt.js';
|
|
2
|
-
// AUTO-TRANSPILE //
|
|
3
|
-
async function example() {
|
|
4
|
-
const prefix = '-';
|
|
5
|
-
const exchange_1 = new ccxt.okx();
|
|
6
|
-
const exchange_2 = new ccxt.htx();
|
|
7
|
-
const keys_1 = Object.keys(exchange_1.has);
|
|
8
|
-
const keys_2 = Object.keys(exchange_2.has);
|
|
9
|
-
// check missing from exchange-1
|
|
10
|
-
console.log('### checking missing functionalities from exchange-1:', exchange_1.id);
|
|
11
|
-
for (let i = 0; i < keys_2.length; i++) {
|
|
12
|
-
const key = keys_2[i];
|
|
13
|
-
if (exchange_2.has[key]) {
|
|
14
|
-
if (!keys_1.includes(key)) {
|
|
15
|
-
console.log(prefix, key, 'does not exist in', exchange_1.id, 'as opposed to', exchange_2.id);
|
|
16
|
-
}
|
|
17
|
-
else if (exchange_2.has[key] !== exchange_1.has[key]) {
|
|
18
|
-
console.log(prefix, key, '> ', exchange_1.id, ':', exchange_1.has[key], ',', exchange_2.id, ':', exchange_2.has[key]);
|
|
19
|
-
}
|
|
20
|
-
}
|
|
21
|
-
}
|
|
22
|
-
// check missing from exchange-2
|
|
23
|
-
console.log('### checking missing functionalities from exchange-2:', exchange_2.id);
|
|
24
|
-
for (let i = 0; i < keys_1.length; i++) {
|
|
25
|
-
const key = keys_1[i];
|
|
26
|
-
if (exchange_1.has[key]) {
|
|
27
|
-
if (!keys_2.includes(key)) {
|
|
28
|
-
console.log(prefix, key, 'does not exist in', exchange_2.id, 'as opposed to', exchange_1.id);
|
|
29
|
-
}
|
|
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,5 +0,0 @@
|
|
|
1
|
-
// JavaScript CORS Proxy
|
|
2
|
-
// Save this in a file like cors.js and run with `node cors [port]`
|
|
3
|
-
// It will listen for your requests on the port you pass in command line or port 8080 by default
|
|
4
|
-
let port = (process.argv.length > 2) ? parseInt (process.argv[2]) : 8080 // default
|
|
5
|
-
require ('cors-anywhere').createServer ().listen (port, '0.0.0.0')
|
|
@@ -1,55 +0,0 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
// ----------------------------------------------------------------------------
|
|
4
|
-
|
|
5
|
-
import ccxt from '../../js/ccxt.js';
|
|
6
|
-
|
|
7
|
-
// ----------------------------------------------------------------------------
|
|
8
|
-
|
|
9
|
-
(async () => {
|
|
10
|
-
|
|
11
|
-
const exchange = new ccxt.bittrex ({
|
|
12
|
-
'apiKey': 'YOUR_API_KEY',
|
|
13
|
-
'secret': 'YOUR_SECRET_KEY',
|
|
14
|
-
'verbose': false, // set to true to see more debugging output
|
|
15
|
-
'timeout': 60000,
|
|
16
|
-
})
|
|
17
|
-
|
|
18
|
-
// try to load markets first, retry on request timeouts until it succeeds:
|
|
19
|
-
|
|
20
|
-
while (true) {
|
|
21
|
-
|
|
22
|
-
try {
|
|
23
|
-
|
|
24
|
-
await exchange.loadMarkets ();
|
|
25
|
-
break;
|
|
26
|
-
|
|
27
|
-
} catch (e) {
|
|
28
|
-
|
|
29
|
-
if (e instanceof ccxt.RequestTimeout)
|
|
30
|
-
console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)
|
|
31
|
-
}
|
|
32
|
-
}
|
|
33
|
-
|
|
34
|
-
const symbol = 'ETH/BTC'
|
|
35
|
-
const orderType = 'limit'
|
|
36
|
-
const side = 'sell'
|
|
37
|
-
const amount = 0.321;
|
|
38
|
-
const price = 0.123;
|
|
39
|
-
|
|
40
|
-
// try just one attempt to create an order
|
|
41
|
-
|
|
42
|
-
try {
|
|
43
|
-
|
|
44
|
-
const response = await exchange.createOrder (symbol, orderType, side, amount, price);
|
|
45
|
-
console.log (response);
|
|
46
|
-
console.log ('Succeeded');
|
|
47
|
-
|
|
48
|
-
} catch (e) {
|
|
49
|
-
|
|
50
|
-
console.log (exchange.iso8601 (Date.now ()), e.constructor.name, e.message)
|
|
51
|
-
console.log ('Failed');
|
|
52
|
-
|
|
53
|
-
}
|
|
54
|
-
|
|
55
|
-
}) ()
|
|
@@ -1,71 +0,0 @@
|
|
|
1
|
-
// @ts-nocheck
|
|
2
|
-
import ccxt from '../../js/ccxt.js';
|
|
3
|
-
// AUTO-TRANSPILE //
|
|
4
|
-
console.log('CCXT Version:', ccxt.version);
|
|
5
|
-
// ------------------------------------------------------------------------------
|
|
6
|
-
async function example() {
|
|
7
|
-
// at this moment, only OKX support embedded stop-loss & take-profit orders in unified manner. other exchanges are being added actively and will be available soon.
|
|
8
|
-
const exchange = new ccxt.okx({
|
|
9
|
-
"apiKey": "YOUR_API_KEY",
|
|
10
|
-
"secret": "YOUR_API_SECRET",
|
|
11
|
-
"password": "YOUR_API_PASSWORD", // if exchange does not require password, comment out this line
|
|
12
|
-
});
|
|
13
|
-
const symbol = 'DOGE/USDT:USDT';
|
|
14
|
-
const side = 'buy'; // 'buy' | 'sell'
|
|
15
|
-
const order_type = 'limit'; // 'market' | 'limit'
|
|
16
|
-
const amount = 1; // how many contracts (see `market(symbol).contractSize` to find out coin portion per one contract)
|
|
17
|
-
await exchange.loadMarkets();
|
|
18
|
-
const market = exchange.market(symbol);
|
|
19
|
-
const ticker = await exchange.fetchTicker(symbol);
|
|
20
|
-
const last_price = ticker['last'];
|
|
21
|
-
const ask_price = ticker['ask'];
|
|
22
|
-
const bid_price = ticker['bid'];
|
|
23
|
-
// if order_type is 'market', then price is not needed
|
|
24
|
-
let price = undefined;
|
|
25
|
-
// if order_type is 'limit', then set a price at your desired level
|
|
26
|
-
if (order_type === 'limit') {
|
|
27
|
-
price = (side === 'buy') ? bid_price * 0.95 : ask_price * 1.05; // i.e. 5% from current price
|
|
28
|
-
}
|
|
29
|
-
// set trigger price for stop-loss/take-profit to 2% from current price
|
|
30
|
-
// (note, across different exchanges "trigger" price can be also mentioned with different synonyms, like "activation price", "stop price", "conditional price", etc. )
|
|
31
|
-
const stop_loss_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 0.98 : 1.02);
|
|
32
|
-
const take_profit_trigger_price = (order_type === 'market' ? last_price : price) * (side === 'buy' ? 1.02 : 0.98);
|
|
33
|
-
// when symbol's price reaches your predefined "trigger price", stop-loss order would be activated as a "market order". but if you want it to be activated as a "limit order", then set a 'price' parameter for it
|
|
34
|
-
const params = {
|
|
35
|
-
'stopLoss': {
|
|
36
|
-
'triggerPrice': stop_loss_trigger_price,
|
|
37
|
-
// set a 'price' to act as limit order, otherwise remove it for a market order
|
|
38
|
-
'price': stop_loss_trigger_price * 0.98,
|
|
39
|
-
},
|
|
40
|
-
'takeProfit': {
|
|
41
|
-
'triggerPrice': take_profit_trigger_price,
|
|
42
|
-
// set a 'price' to act as limit order, otherwise remove it for a market order
|
|
43
|
-
'price': take_profit_trigger_price * 0.98,
|
|
44
|
-
},
|
|
45
|
-
// note that some exchanges might require some exchange specific parameter when opening a position, i.e.:
|
|
46
|
-
// 'posSide': 'long', // for phemex hedge-mode api
|
|
47
|
-
};
|
|
48
|
-
const position_amount = market['contractSize'] * amount;
|
|
49
|
-
const position_value = position_amount * last_price;
|
|
50
|
-
// log
|
|
51
|
-
console.log('Going to open a position', 'for', amount, 'contracts worth', position_amount, market['base'], '~', position_value, market['settle'], 'using', side, order_type, 'order (', (order_type === 'limit' ? exchange.priceToPrecision(symbol, price) : ''), '), using the following params:');
|
|
52
|
-
console.log(params);
|
|
53
|
-
console.log('-----------------------------------------------------------------------');
|
|
54
|
-
// exchange.verbose = True // uncomment for debugging purposes if necessary
|
|
55
|
-
try {
|
|
56
|
-
const created_order = await exchange.createOrder(symbol, order_type, side, amount, price, params);
|
|
57
|
-
console.log("Created an order", created_order);
|
|
58
|
-
// Fetch all your open orders for this symbol
|
|
59
|
-
// - use 'fetchOpenOrders' or 'fetchOrders' and filter with 'open' status
|
|
60
|
-
// - note, that some exchanges might return one order object with embedded stoploss/takeprofit fields, while other exchanges might have separate stoploss/takeprofit order objects
|
|
61
|
-
const all_open_orders = await exchange.fetchOpenOrders(symbol);
|
|
62
|
-
console.log("Fetched all your orders for this symbol", all_open_orders);
|
|
63
|
-
// To cancel a limit order, use "exchange.cancel_order(created_order['id'], symbol)""
|
|
64
|
-
}
|
|
65
|
-
catch (e) {
|
|
66
|
-
console.log(e.toString());
|
|
67
|
-
}
|
|
68
|
-
}
|
|
69
|
-
await example();
|
|
70
|
-
// NOTES:
|
|
71
|
-
// - Sometimes you might experience, when their stop-loss/take-profit order might not become activated, even though on chart the price had crossed that "trigger-price" order was not executed . That happens because some exchange might be using mark-price (instead of last-price) as a reference-price, so that mark-price might reach your trigger-price and it would activate your SL/TP order (even though on your symbol's chart you are viewing the "last-price" by default, which could have different movements than the mark-price).
|