ccxt-ir 4.9.32 → 4.11.0
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 +4 -4
- package/dist/ccxt.browser.min.js +2 -2
- package/dist/cjs/ccxt.js +7 -1
- package/dist/cjs/package.json +1 -1
- package/dist/cjs/src/abstract/asretether.js +11 -0
- package/dist/cjs/src/abstract/bidarz.js +11 -0
- package/dist/cjs/src/asretether.js +325 -0
- package/dist/cjs/src/bidarz.js +337 -0
- package/dist/cjs/src/bit24.js +4 -3
- package/dist/cjs/src/raastin.js +144 -16
- package/js/ccxt.d.ts +8 -2
- package/js/ccxt.js +6 -2
- package/js/src/abstract/asretether.d.ts +8 -0
- package/js/src/abstract/asretether.js +11 -0
- package/js/src/abstract/bidarz.d.ts +9 -0
- package/js/src/abstract/bidarz.js +11 -0
- package/js/src/abstract/raastin.d.ts +1 -0
- package/js/src/asretether.d.ts +21 -0
- package/js/src/asretether.js +324 -0
- package/js/src/bidarz.d.ts +22 -0
- package/js/src/bidarz.js +336 -0
- package/js/src/bit24.js +4 -3
- package/js/src/raastin.d.ts +2 -0
- package/js/src/raastin.js +144 -16
- package/js/src/src/abantether.d.ts +21 -0
- package/js/src/src/abantether.js +353 -0
- package/js/src/src/abstract/abantether.d.ts +8 -0
- package/js/src/src/abstract/abantether.js +11 -0
- package/js/src/src/abstract/afratether.d.ts +9 -0
- package/js/src/src/abstract/afratether.js +11 -0
- package/js/src/src/abstract/alpaca.d.ts +77 -0
- package/js/src/src/abstract/alpaca.js +11 -0
- package/js/src/src/abstract/apex.d.ts +34 -0
- package/js/src/src/abstract/apex.js +11 -0
- package/js/src/src/abstract/arzinja.d.ts +8 -0
- package/js/src/src/abstract/arzinja.js +11 -0
- package/js/src/src/abstract/arzplus.d.ts +11 -0
- package/js/src/src/abstract/arzplus.js +11 -0
- package/js/src/src/abstract/ascendex.d.ts +80 -0
- package/js/src/src/abstract/ascendex.js +11 -0
- package/js/src/src/abstract/asretether.d.ts +8 -0
- package/js/src/src/abstract/asretether.js +11 -0
- package/js/src/src/abstract/bidarz.d.ts +9 -0
- package/js/src/src/abstract/bidarz.js +11 -0
- package/js/src/src/abstract/bigone.d.ts +48 -0
- package/js/src/src/abstract/bigone.js +11 -0
- package/js/src/src/abstract/binance.d.ts +773 -0
- package/js/src/src/abstract/binance.js +11 -0
- package/js/src/src/abstract/bingx.d.ts +165 -0
- package/js/src/src/abstract/bingx.js +11 -0
- package/js/src/src/abstract/bit24.d.ts +9 -0
- package/js/src/src/abstract/bit24.js +11 -0
- package/js/src/src/abstract/bit2c.d.ts +30 -0
- package/js/src/src/abstract/bit2c.js +11 -0
- package/js/src/src/abstract/bitbank.d.ts +35 -0
- package/js/src/src/abstract/bitbank.js +11 -0
- package/js/src/src/abstract/bitbarg.d.ts +8 -0
- package/js/src/src/abstract/bitbarg.js +11 -0
- package/js/src/src/abstract/bitbns.d.ts +43 -0
- package/js/src/src/abstract/bitbns.js +11 -0
- package/js/src/src/abstract/bitfinex.d.ts +143 -0
- package/js/src/src/abstract/bitfinex.js +11 -0
- package/js/src/src/abstract/bitflyer.d.ts +42 -0
- package/js/src/src/abstract/bitflyer.js +11 -0
- package/js/src/src/abstract/bitget.d.ts +578 -0
- package/js/src/src/abstract/bitget.js +11 -0
- package/js/src/src/abstract/bithumb.d.ts +35 -0
- package/js/src/src/abstract/bithumb.js +11 -0
- package/js/src/src/abstract/bitimen.d.ts +10 -0
- package/js/src/src/abstract/bitimen.js +11 -0
- package/js/src/src/abstract/bitir.d.ts +10 -0
- package/js/src/src/abstract/bitir.js +11 -0
- package/js/src/src/abstract/bitmart.d.ts +120 -0
- package/js/src/src/abstract/bitmart.js +11 -0
- package/js/src/src/abstract/bitmex.d.ts +100 -0
- package/js/src/src/abstract/bitmex.js +11 -0
- package/js/src/src/abstract/bitopro.d.ts +33 -0
- package/js/src/src/abstract/bitopro.js +11 -0
- package/js/src/src/abstract/bitpin.d.ts +11 -0
- package/js/src/src/abstract/bitpin.js +11 -0
- package/js/src/src/abstract/bitrue.d.ts +75 -0
- package/js/src/src/abstract/bitrue.js +11 -0
- package/js/src/src/abstract/bitso.d.ts +46 -0
- package/js/src/src/abstract/bitso.js +11 -0
- package/js/src/src/abstract/bitstamp.d.ts +262 -0
- package/js/src/src/abstract/bitstamp.js +11 -0
- package/js/src/src/abstract/bitteam.d.ts +32 -0
- package/js/src/src/abstract/bitteam.js +11 -0
- package/js/src/src/abstract/bittrade.d.ts +117 -0
- package/js/src/src/abstract/bittrade.js +11 -0
- package/js/src/src/abstract/bitunix.d.ts +9 -0
- package/js/src/src/abstract/bitunix.js +11 -0
- package/js/src/src/abstract/bitvavo.d.ts +30 -0
- package/js/src/src/abstract/bitvavo.js +11 -0
- package/js/src/src/abstract/blockchaincom.d.ts +31 -0
- package/js/src/src/abstract/blockchaincom.js +11 -0
- package/js/src/src/abstract/blofin.d.ts +70 -0
- package/js/src/src/abstract/blofin.js +11 -0
- package/js/src/src/abstract/btcalpha.d.ts +21 -0
- package/js/src/src/abstract/btcalpha.js +11 -0
- package/js/src/src/abstract/btcbox.d.ts +18 -0
- package/js/src/src/abstract/btcbox.js +11 -0
- package/js/src/src/abstract/btcmarkets.d.ts +42 -0
- package/js/src/src/abstract/btcmarkets.js +11 -0
- package/js/src/src/abstract/btcturk.d.ts +23 -0
- package/js/src/src/abstract/btcturk.js +11 -0
- package/js/src/src/abstract/bybit.d.ts +316 -0
- package/js/src/src/abstract/bybit.js +11 -0
- package/js/src/src/abstract/bydfi.d.ts +11 -0
- package/js/src/src/abstract/bydfi.js +11 -0
- package/js/src/src/abstract/cafearz.d.ts +8 -0
- package/js/src/src/abstract/cafearz.js +11 -0
- package/js/src/src/abstract/cex.d.ts +35 -0
- package/js/src/src/abstract/cex.js +11 -0
- package/js/src/src/abstract/coinbase.d.ts +97 -0
- package/js/src/src/abstract/coinbase.js +11 -0
- package/js/src/src/abstract/coinbaseexchange.d.ts +71 -0
- package/js/src/src/abstract/coinbaseexchange.js +11 -0
- package/js/src/src/abstract/coinbaseinternational.d.ts +42 -0
- package/js/src/src/abstract/coinbaseinternational.js +11 -0
- package/js/src/src/abstract/coincatch.d.ts +97 -0
- package/js/src/src/abstract/coincatch.js +11 -0
- package/js/src/src/abstract/coincheck.d.ts +36 -0
- package/js/src/src/abstract/coincheck.js +11 -0
- package/js/src/src/abstract/coinex.d.ts +240 -0
- package/js/src/src/abstract/coinex.js +11 -0
- package/js/src/src/abstract/coinmate.d.ts +65 -0
- package/js/src/src/abstract/coinmate.js +11 -0
- package/js/src/src/abstract/coinmetro.d.ts +37 -0
- package/js/src/src/abstract/coinmetro.js +11 -0
- package/js/src/src/abstract/coinone.d.ts +70 -0
- package/js/src/src/abstract/coinone.js +11 -0
- package/js/src/src/abstract/coinsph.d.ts +57 -0
- package/js/src/src/abstract/coinsph.js +11 -0
- package/js/src/src/abstract/coinspot.d.ts +31 -0
- package/js/src/src/abstract/coinspot.js +11 -0
- package/js/src/src/abstract/cryptocom.d.ts +126 -0
- package/js/src/src/abstract/cryptocom.js +11 -0
- package/js/src/src/abstract/cryptomus.d.ts +23 -0
- package/js/src/src/abstract/cryptomus.js +11 -0
- package/js/src/src/abstract/defx.d.ts +72 -0
- package/js/src/src/abstract/defx.js +11 -0
- package/js/src/src/abstract/delta.d.ts +53 -0
- package/js/src/src/abstract/delta.js +11 -0
- package/js/src/src/abstract/deribit.d.ts +129 -0
- package/js/src/src/abstract/deribit.js +11 -0
- package/js/src/src/abstract/derive.d.ts +120 -0
- package/js/src/src/abstract/derive.js +11 -0
- package/js/src/src/abstract/digifinex.d.ts +95 -0
- package/js/src/src/abstract/digifinex.js +11 -0
- package/js/src/src/abstract/ellipx.d.ts +28 -0
- package/js/src/src/abstract/ellipx.js +11 -0
- package/js/src/src/abstract/eterex.d.ts +8 -0
- package/js/src/src/abstract/eterex.js +11 -0
- package/js/src/src/abstract/excoino.d.ts +10 -0
- package/js/src/src/abstract/excoino.js +11 -0
- package/js/src/src/abstract/exir.d.ts +11 -0
- package/js/src/src/abstract/exir.js +11 -0
- package/js/src/src/abstract/exmo.d.ts +58 -0
- package/js/src/src/abstract/exmo.js +11 -0
- package/js/src/src/abstract/exnovin.d.ts +9 -0
- package/js/src/src/abstract/exnovin.js +11 -0
- package/js/src/src/abstract/farhadexchange.d.ts +8 -0
- package/js/src/src/abstract/farhadexchange.js +11 -0
- package/js/src/src/abstract/foxbit.d.ts +29 -0
- package/js/src/src/abstract/foxbit.js +11 -0
- package/js/src/src/abstract/gate.d.ts +287 -0
- package/js/src/src/abstract/gate.js +11 -0
- package/js/src/src/abstract/gemini.d.ts +62 -0
- package/js/src/src/abstract/gemini.js +11 -0
- package/js/src/src/abstract/hamtapay.d.ts +9 -0
- package/js/src/src/abstract/hamtapay.js +11 -0
- package/js/src/src/abstract/hashkey.d.ts +70 -0
- package/js/src/src/abstract/hashkey.js +11 -0
- package/js/src/src/abstract/hibachi.d.ts +29 -0
- package/js/src/src/abstract/hibachi.js +11 -0
- package/js/src/src/abstract/hitbtc.d.ts +118 -0
- package/js/src/src/abstract/hitbtc.js +11 -0
- package/js/src/src/abstract/hitobit.d.ts +11 -0
- package/js/src/src/abstract/hitobit.js +11 -0
- package/js/src/src/abstract/hollaex.d.ts +36 -0
- package/js/src/src/abstract/hollaex.js +11 -0
- package/js/src/src/abstract/htx.d.ts +551 -0
- package/js/src/src/abstract/htx.js +11 -0
- package/js/src/src/abstract/hyperliquid.d.ts +9 -0
- package/js/src/src/abstract/hyperliquid.js +11 -0
- package/js/src/src/abstract/independentreserve.d.ts +46 -0
- package/js/src/src/abstract/independentreserve.js +11 -0
- package/js/src/src/abstract/indodax.d.ts +29 -0
- package/js/src/src/abstract/indodax.js +11 -0
- package/js/src/src/abstract/iranexchange.d.ts +9 -0
- package/js/src/src/abstract/iranexchange.js +11 -0
- package/js/src/src/abstract/jibitex.d.ts +10 -0
- package/js/src/src/abstract/jibitex.js +11 -0
- package/js/src/src/abstract/kcex.d.ts +10 -0
- package/js/src/src/abstract/kcex.js +11 -0
- package/js/src/src/abstract/kifpoolme.d.ts +9 -0
- package/js/src/src/abstract/kifpoolme.js +11 -0
- package/js/src/src/abstract/kraken.d.ts +61 -0
- package/js/src/src/abstract/kraken.js +11 -0
- package/js/src/src/abstract/krakenfutures.d.ts +45 -0
- package/js/src/src/abstract/krakenfutures.js +11 -0
- package/js/src/src/abstract/kucoin.d.ts +227 -0
- package/js/src/src/abstract/kucoin.js +11 -0
- package/js/src/src/abstract/kucoinfutures.d.ts +254 -0
- package/js/src/src/abstract/kucoinfutures.js +11 -0
- package/js/src/src/abstract/latoken.d.ts +59 -0
- package/js/src/src/abstract/latoken.js +11 -0
- package/js/src/src/abstract/lbank.d.ts +65 -0
- package/js/src/src/abstract/lbank.js +11 -0
- package/js/src/src/abstract/luno.d.ts +41 -0
- package/js/src/src/abstract/luno.js +11 -0
- package/js/src/src/abstract/mazdax.d.ts +11 -0
- package/js/src/src/abstract/mazdax.js +11 -0
- package/js/src/src/abstract/mercado.d.ts +28 -0
- package/js/src/src/abstract/mercado.js +11 -0
- package/js/src/src/abstract/mexc.d.ts +183 -0
- package/js/src/src/abstract/mexc.js +11 -0
- package/js/src/src/abstract/modetrade.d.ts +122 -0
- package/js/src/src/abstract/modetrade.js +11 -0
- package/js/src/src/abstract/ndax.d.ts +100 -0
- package/js/src/src/abstract/ndax.js +11 -0
- package/js/src/src/abstract/nobitex.d.ts +10 -0
- package/js/src/src/abstract/nobitex.js +11 -0
- package/js/src/src/abstract/novadax.d.ts +32 -0
- package/js/src/src/abstract/novadax.js +11 -0
- package/js/src/src/abstract/oceanex.d.ts +30 -0
- package/js/src/src/abstract/oceanex.js +11 -0
- package/js/src/src/abstract/okcoin.d.ts +77 -0
- package/js/src/src/abstract/okcoin.js +11 -0
- package/js/src/src/abstract/okexchange.d.ts +11 -0
- package/js/src/src/abstract/okexchange.js +11 -0
- package/js/src/src/abstract/okx.d.ts +352 -0
- package/js/src/src/abstract/okx.js +11 -0
- package/js/src/src/abstract/ompfinex.d.ts +10 -0
- package/js/src/src/abstract/ompfinex.js +11 -0
- package/js/src/src/abstract/onetrading.d.ts +26 -0
- package/js/src/src/abstract/onetrading.js +11 -0
- package/js/src/src/abstract/oxfun.d.ts +37 -0
- package/js/src/src/abstract/oxfun.js +11 -0
- package/js/src/src/abstract/p2b.d.ts +25 -0
- package/js/src/src/abstract/p2b.js +11 -0
- package/js/src/src/abstract/paradex.d.ts +66 -0
- package/js/src/src/abstract/paradex.js +11 -0
- package/js/src/src/abstract/paymium.d.ts +31 -0
- package/js/src/src/abstract/paymium.js +11 -0
- package/js/src/src/abstract/phemex.d.ts +120 -0
- package/js/src/src/abstract/phemex.js +11 -0
- package/js/src/src/abstract/pingi.d.ts +9 -0
- package/js/src/src/abstract/pingi.js +11 -0
- package/js/src/src/abstract/poloniex.d.ts +108 -0
- package/js/src/src/abstract/poloniex.js +11 -0
- package/js/src/src/abstract/pooleno.d.ts +8 -0
- package/js/src/src/abstract/pooleno.js +11 -0
- package/js/src/src/abstract/probit.d.ts +26 -0
- package/js/src/src/abstract/probit.js +11 -0
- package/js/src/src/abstract/raastin.d.ts +11 -0
- package/js/src/src/abstract/raastin.js +11 -0
- package/js/src/src/abstract/ramzinex.d.ts +10 -0
- package/js/src/src/abstract/ramzinex.js +11 -0
- package/js/src/src/abstract/sarmayex.d.ts +8 -0
- package/js/src/src/abstract/sarmayex.js +11 -0
- package/js/src/src/abstract/sarrafex.d.ts +10 -0
- package/js/src/src/abstract/sarrafex.js +11 -0
- package/js/src/src/abstract/tabdeal.d.ts +10 -0
- package/js/src/src/abstract/tabdeal.js +11 -0
- package/js/src/src/abstract/tehran_exchange.d.ts +9 -0
- package/js/src/src/abstract/tehran_exchange.js +11 -0
- package/js/src/src/abstract/tetherland.d.ts +8 -0
- package/js/src/src/abstract/tetherland.js +11 -0
- package/js/src/src/abstract/timex.d.ts +65 -0
- package/js/src/src/abstract/timex.js +11 -0
- package/js/src/src/abstract/tokocrypto.d.ts +40 -0
- package/js/src/src/abstract/tokocrypto.js +11 -0
- package/js/src/src/abstract/toobit.d.ts +10 -0
- package/js/src/src/abstract/toobit.js +11 -0
- package/js/src/src/abstract/tradeogre.d.ts +21 -0
- package/js/src/src/abstract/tradeogre.js +11 -0
- package/js/src/src/abstract/twox.d.ts +8 -0
- package/js/src/src/abstract/twox.js +11 -0
- package/js/src/src/abstract/ubitex.d.ts +10 -0
- package/js/src/src/abstract/ubitex.js +11 -0
- package/js/src/src/abstract/upbit.d.ts +58 -0
- package/js/src/src/abstract/upbit.js +11 -0
- package/js/src/src/abstract/vertex.d.ts +22 -0
- package/js/src/src/abstract/vertex.js +11 -0
- package/js/src/src/abstract/wallex.d.ts +11 -0
- package/js/src/src/abstract/wallex.js +11 -0
- package/js/src/src/abstract/wavesexchange.d.ts +157 -0
- package/js/src/src/abstract/wavesexchange.js +11 -0
- package/js/src/src/abstract/whitebit.d.ts +117 -0
- package/js/src/src/abstract/whitebit.js +11 -0
- package/js/src/src/abstract/woo.d.ts +144 -0
- package/js/src/src/abstract/woo.js +11 -0
- package/js/src/src/abstract/woofipro.d.ts +122 -0
- package/js/src/src/abstract/woofipro.js +11 -0
- package/js/src/src/abstract/xt.d.ts +160 -0
- package/js/src/src/abstract/xt.js +11 -0
- package/js/src/src/abstract/yobit.d.ts +19 -0
- package/js/src/src/abstract/yobit.js +11 -0
- package/js/src/src/abstract/zaif.d.ts +41 -0
- package/js/src/src/abstract/zaif.js +11 -0
- package/js/src/src/abstract/zonda.d.ts +56 -0
- package/js/src/src/abstract/zonda.js +11 -0
- package/js/src/src/afratether.d.ts +21 -0
- package/js/src/src/afratether.js +356 -0
- package/js/src/src/alpaca.d.ts +332 -0
- package/js/src/src/alpaca.js +1908 -0
- package/js/src/src/apex.d.ts +333 -0
- package/js/src/src/apex.js +1942 -0
- package/js/src/src/arzinja.d.ts +21 -0
- package/js/src/src/arzinja.js +298 -0
- package/js/src/src/arzplus.d.ts +26 -0
- package/js/src/src/arzplus.js +581 -0
- package/js/src/src/ascendex.d.ts +424 -0
- package/js/src/src/ascendex.js +3699 -0
- package/js/src/src/asretether.d.ts +21 -0
- package/js/src/src/asretether.js +324 -0
- package/js/src/src/base/Exchange.d.ts +926 -0
- package/js/src/src/base/Exchange.js +7399 -0
- package/js/src/src/base/Precise.d.ts +42 -0
- package/js/src/src/base/Precise.js +275 -0
- package/js/src/src/base/errors.d.ts +168 -0
- package/js/src/src/base/errors.js +255 -0
- package/js/src/src/base/functions/crypto.d.ts +16 -0
- package/js/src/src/base/functions/crypto.js +131 -0
- package/js/src/src/base/functions/encode.d.ts +4 -0
- package/js/src/src/base/functions/encode.js +32 -0
- package/js/src/src/base/functions/generic.d.ts +29 -0
- package/js/src/src/base/functions/generic.js +203 -0
- package/js/src/src/base/functions/misc.d.ts +9 -0
- package/js/src/src/base/functions/misc.js +101 -0
- package/js/src/src/base/functions/number.d.ts +27 -0
- package/js/src/src/base/functions/number.js +313 -0
- package/js/src/src/base/functions/platform.d.ts +7 -0
- package/js/src/src/base/functions/platform.js +27 -0
- package/js/src/src/base/functions/rsa.d.ts +5 -0
- package/js/src/src/base/functions/rsa.js +49 -0
- package/js/src/src/base/functions/string.d.ts +7 -0
- package/js/src/src/base/functions/string.js +44 -0
- package/js/src/src/base/functions/throttle.d.ts +6 -0
- package/js/src/src/base/functions/throttle.js +67 -0
- package/js/src/src/base/functions/time.d.ts +21 -0
- package/js/src/src/base/functions/time.js +171 -0
- package/js/src/src/base/functions/totp.d.ts +3 -0
- package/js/src/src/base/functions/totp.js +25 -0
- package/js/src/src/base/functions/type.d.ts +37 -0
- package/js/src/src/base/functions/type.js +179 -0
- package/js/src/src/base/functions.d.ts +10 -0
- package/js/src/src/base/functions.js +18 -0
- package/js/src/src/base/types.d.ts +586 -0
- package/js/src/src/base/types.js +7 -0
- package/js/src/src/base/ws/Cache.d.ts +27 -0
- package/js/src/src/base/ws/Cache.js +260 -0
- package/js/src/src/base/ws/Client.d.ts +53 -0
- package/js/src/src/base/ws/Client.js +307 -0
- package/js/src/src/base/ws/Future.d.ts +8 -0
- package/js/src/src/base/ws/Future.js +35 -0
- package/js/src/src/base/ws/OrderBook.d.ts +25 -0
- package/js/src/src/base/ws/OrderBook.js +130 -0
- package/js/src/src/base/ws/OrderBookSide.d.ts +40 -0
- package/js/src/src/base/ws/OrderBookSide.js +286 -0
- package/js/src/src/base/ws/WsClient.d.ts +11 -0
- package/js/src/src/base/ws/WsClient.js +69 -0
- package/js/src/src/bequant.d.ts +4 -0
- package/js/src/src/bequant.js +35 -0
- package/js/src/src/bidarz.d.ts +16 -0
- package/js/src/src/bidarz.js +327 -0
- package/js/src/src/bigone.d.ts +296 -0
- package/js/src/src/bigone.js +2340 -0
- package/js/src/src/binance.d.ts +1667 -0
- package/js/src/src/binance.js +14400 -0
- package/js/src/src/binancecoinm.d.ts +6 -0
- package/js/src/src/binancecoinm.js +51 -0
- package/js/src/src/binanceus.d.ts +4 -0
- package/js/src/src/binanceus.js +225 -0
- package/js/src/src/binanceusdm.d.ts +6 -0
- package/js/src/src/binanceusdm.js +63 -0
- package/js/src/src/bingx.d.ts +778 -0
- package/js/src/src/bingx.js +6705 -0
- package/js/src/src/bit24.d.ts +24 -0
- package/js/src/src/bit24.js +520 -0
- package/js/src/src/bit2c.d.ts +146 -0
- package/js/src/src/bit2c.js +1029 -0
- package/js/src/src/bitbank.d.ts +181 -0
- package/js/src/src/bitbank.js +1146 -0
- package/js/src/src/bitbarg.d.ts +21 -0
- package/js/src/src/bitbarg.js +312 -0
- package/js/src/src/bitbns.d.ts +184 -0
- package/js/src/src/bitbns.js +1288 -0
- package/js/src/src/bitfinex.d.ts +516 -0
- package/js/src/src/bitfinex.js +3951 -0
- package/js/src/src/bitflyer.d.ts +229 -0
- package/js/src/src/bitflyer.js +1209 -0
- package/js/src/src/bitget.d.ts +1109 -0
- package/js/src/src/bitget.js +11033 -0
- package/js/src/src/bithumb.d.ts +165 -0
- package/js/src/src/bithumb.js +1257 -0
- package/js/src/src/bitimen.d.ts +23 -0
- package/js/src/src/bitimen.js +424 -0
- package/js/src/src/bitir.d.ts +23 -0
- package/js/src/src/bitir.js +521 -0
- package/js/src/src/bitmart.d.ts +736 -0
- package/js/src/src/bitmart.js +5639 -0
- package/js/src/src/bitmex.d.ts +395 -0
- package/js/src/src/bitmex.js +3088 -0
- package/js/src/src/bitopro.d.ts +295 -0
- package/js/src/src/bitopro.js +1892 -0
- package/js/src/src/bitpin.d.ts +23 -0
- package/js/src/src/bitpin.js +487 -0
- package/js/src/src/bitrue.d.ts +384 -0
- package/js/src/src/bitrue.js +3382 -0
- package/js/src/src/bitso.d.ts +270 -0
- package/js/src/src/bitso.js +1881 -0
- package/js/src/src/bitstamp.d.ts +355 -0
- package/js/src/src/bitstamp.js +2445 -0
- package/js/src/src/bitteam.d.ts +229 -0
- package/js/src/src/bitteam.js +2420 -0
- package/js/src/src/bittrade.d.ts +298 -0
- package/js/src/src/bittrade.js +2050 -0
- package/js/src/src/bitunix.d.ts +21 -0
- package/js/src/src/bitunix.js +326 -0
- package/js/src/src/bitvavo.d.ts +311 -0
- package/js/src/src/bitvavo.js +2204 -0
- package/js/src/src/blockchaincom.d.ts +256 -0
- package/js/src/src/blockchaincom.js +1259 -0
- package/js/src/src/blofin.d.ts +439 -0
- package/js/src/src/blofin.js +2576 -0
- package/js/src/src/btcalpha.d.ts +209 -0
- package/js/src/src/btcalpha.js +1056 -0
- package/js/src/src/btcbox.d.ts +144 -0
- package/js/src/src/btcbox.js +834 -0
- package/js/src/src/btcmarkets.d.ts +253 -0
- package/js/src/src/btcmarkets.js +1418 -0
- package/js/src/src/btcturk.d.ts +161 -0
- package/js/src/src/btcturk.js +1058 -0
- package/js/src/src/bybit.d.ts +1097 -0
- package/js/src/src/bybit.js +9382 -0
- package/js/src/src/bydfi.d.ts +23 -0
- package/js/src/src/bydfi.js +434 -0
- package/js/src/src/cafearz.d.ts +21 -0
- package/js/src/src/cafearz.js +346 -0
- package/js/src/src/cex.d.ts +286 -0
- package/js/src/src/cex.js +1799 -0
- package/js/src/src/coinbase.d.ts +623 -0
- package/js/src/src/coinbase.js +5220 -0
- package/js/src/src/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/coinbaseadvanced.js +18 -0
- package/js/src/src/coinbaseexchange.d.ts +334 -0
- package/js/src/src/coinbaseexchange.js +2127 -0
- package/js/src/src/coinbaseinternational.d.ts +443 -0
- package/js/src/src/coinbaseinternational.js +2336 -0
- package/js/src/src/coincatch.d.ts +786 -0
- package/js/src/src/coincatch.js +5492 -0
- package/js/src/src/coincheck.d.ts +147 -0
- package/js/src/src/coincheck.js +962 -0
- package/js/src/src/coinex.d.ts +719 -0
- package/js/src/src/coinex.js +6166 -0
- package/js/src/src/coinmate.d.ts +202 -0
- package/js/src/src/coinmate.js +1215 -0
- package/js/src/src/coinmetro.d.ts +244 -0
- package/js/src/src/coinmetro.js +2024 -0
- package/js/src/src/coinone.d.ts +158 -0
- package/js/src/src/coinone.js +1278 -0
- package/js/src/src/coinsph.d.ts +310 -0
- package/js/src/src/coinsph.js +2203 -0
- package/js/src/src/coinspot.d.ts +108 -0
- package/js/src/src/coinspot.js +653 -0
- package/js/src/src/cryptocom.d.ts +463 -0
- package/js/src/src/cryptocom.js +3549 -0
- package/js/src/src/cryptomus.d.ts +158 -0
- package/js/src/src/cryptomus.js +1169 -0
- package/js/src/src/defx.d.ts +348 -0
- package/js/src/src/defx.js +2139 -0
- package/js/src/src/delta.d.ts +407 -0
- package/js/src/src/delta.js +3654 -0
- package/js/src/src/deribit.d.ts +516 -0
- package/js/src/src/deribit.js +3790 -0
- package/js/src/src/derive.d.ts +324 -0
- package/js/src/src/derive.js +2655 -0
- package/js/src/src/digifinex.d.ts +544 -0
- package/js/src/src/digifinex.js +4453 -0
- package/js/src/src/ellipx.d.ts +237 -0
- package/js/src/src/ellipx.js +2071 -0
- package/js/src/src/eterex.d.ts +21 -0
- package/js/src/src/eterex.js +299 -0
- package/js/src/src/excoino.d.ts +23 -0
- package/js/src/src/excoino.js +426 -0
- package/js/src/src/exir.d.ts +23 -0
- package/js/src/src/exir.js +403 -0
- package/js/src/src/exmo.d.ts +426 -0
- package/js/src/src/exmo.js +2825 -0
- package/js/src/src/exnovin.d.ts +22 -0
- package/js/src/src/exnovin.js +378 -0
- package/js/src/src/farhadexchange.d.ts +21 -0
- package/js/src/src/farhadexchange.js +280 -0
- package/js/src/src/fmfwio.d.ts +4 -0
- package/js/src/src/fmfwio.js +35 -0
- package/js/src/src/foxbit.d.ts +352 -0
- package/js/src/src/foxbit.js +2016 -0
- package/js/src/src/gate.d.ts +1071 -0
- package/js/src/src/gate.js +8282 -0
- package/js/src/src/gateio.d.ts +4 -0
- package/js/src/src/gateio.js +17 -0
- package/js/src/src/gemini.d.ts +257 -0
- package/js/src/src/gemini.js +2006 -0
- package/js/src/src/hamtapay.d.ts +21 -0
- package/js/src/src/hamtapay.js +303 -0
- package/js/src/src/hashkey.d.ts +628 -0
- package/js/src/src/hashkey.js +4363 -0
- package/js/src/src/hibachi.d.ts +346 -0
- package/js/src/src/hibachi.js +2137 -0
- package/js/src/src/hitbtc.d.ts +558 -0
- package/js/src/src/hitbtc.js +3847 -0
- package/js/src/src/hitobit.d.ts +23 -0
- package/js/src/src/hitobit.js +412 -0
- package/js/src/src/hollaex.d.ts +305 -0
- package/js/src/src/hollaex.js +2046 -0
- package/js/src/src/htx.d.ts +961 -0
- package/js/src/src/htx.js +9668 -0
- package/js/src/src/huobi.d.ts +4 -0
- package/js/src/src/huobi.js +17 -0
- package/js/src/src/hyperliquid.d.ts +651 -0
- package/js/src/src/hyperliquid.js +3937 -0
- package/js/src/src/independentreserve.d.ts +169 -0
- package/js/src/src/independentreserve.js +1115 -0
- package/js/src/src/indodax.d.ts +217 -0
- package/js/src/src/indodax.js +1454 -0
- package/js/src/src/iranexchange.d.ts +21 -0
- package/js/src/src/iranexchange.js +399 -0
- package/js/src/src/jibitex.d.ts +23 -0
- package/js/src/src/jibitex.js +416 -0
- package/js/src/src/kcex.d.ts +21 -0
- package/js/src/src/kcex.js +335 -0
- package/js/src/src/kifpoolme.d.ts +23 -0
- package/js/src/src/kifpoolme.js +410 -0
- package/js/src/src/kraken.d.ts +484 -0
- package/js/src/src/kraken.js +3518 -0
- package/js/src/src/krakenfutures.d.ts +362 -0
- package/js/src/src/krakenfutures.js +2885 -0
- package/js/src/src/kucoin.d.ts +759 -0
- package/js/src/src/kucoin.js +5153 -0
- package/js/src/src/kucoinfutures.d.ts +521 -0
- package/js/src/src/kucoinfutures.js +3381 -0
- package/js/src/src/latoken.d.ts +274 -0
- package/js/src/src/latoken.js +1824 -0
- package/js/src/src/lbank.d.ts +350 -0
- package/js/src/src/lbank.js +3146 -0
- package/js/src/src/luno.d.ts +252 -0
- package/js/src/src/luno.js +1479 -0
- package/js/src/src/mazdax.d.ts +23 -0
- package/js/src/src/mazdax.js +534 -0
- package/js/src/src/mercado.d.ts +160 -0
- package/js/src/src/mercado.js +1011 -0
- package/js/src/src/mexc.d.ts +768 -0
- package/js/src/src/mexc.js +6102 -0
- package/js/src/src/modetrade.d.ts +496 -0
- package/js/src/src/modetrade.js +2936 -0
- package/js/src/src/myokx.d.ts +4 -0
- package/js/src/src/myokx.js +54 -0
- package/js/src/src/ndax.d.ts +285 -0
- package/js/src/src/ndax.js +2598 -0
- package/js/src/src/nobitex.d.ts +23 -0
- package/js/src/src/nobitex.js +454 -0
- package/js/src/src/novadax.d.ts +279 -0
- package/js/src/src/novadax.js +1676 -0
- package/js/src/src/oceanex.d.ts +231 -0
- package/js/src/src/oceanex.js +1123 -0
- package/js/src/src/okcoin.d.ts +346 -0
- package/js/src/src/okcoin.js +3211 -0
- package/js/src/src/okexchange.d.ts +23 -0
- package/js/src/src/okexchange.js +373 -0
- package/js/src/src/okx.d.ts +1125 -0
- package/js/src/src/okx.js +9009 -0
- package/js/src/src/okxus.d.ts +4 -0
- package/js/src/src/okxus.js +54 -0
- package/js/src/src/ompfinex.d.ts +23 -0
- package/js/src/src/ompfinex.js +510 -0
- package/js/src/src/onetrading.d.ts +228 -0
- package/js/src/src/onetrading.js +1769 -0
- package/js/src/src/oxfun.d.ts +442 -0
- package/js/src/src/oxfun.js +2920 -0
- package/js/src/src/p2b.d.ts +189 -0
- package/js/src/src/p2b.js +1344 -0
- package/js/src/src/paradex.d.ts +389 -0
- package/js/src/src/paradex.js +2607 -0
- package/js/src/src/paymium.d.ts +133 -0
- package/js/src/src/paymium.js +644 -0
- package/js/src/src/phemex.d.ts +497 -0
- package/js/src/src/phemex.js +5333 -0
- package/js/src/src/pingi.d.ts +22 -0
- package/js/src/src/pingi.js +446 -0
- package/js/src/src/poloniex.d.ts +441 -0
- package/js/src/src/poloniex.js +3681 -0
- package/js/src/src/pooleno.d.ts +21 -0
- package/js/src/src/pooleno.js +347 -0
- package/js/src/src/pro/alpaca.d.ts +95 -0
- package/js/src/src/pro/alpaca.js +724 -0
- package/js/src/src/pro/apex.d.ts +160 -0
- package/js/src/src/pro/apex.js +1044 -0
- package/js/src/src/pro/ascendex.d.ts +99 -0
- package/js/src/src/pro/ascendex.js +1012 -0
- package/js/src/src/pro/bequant.d.ts +4 -0
- package/js/src/src/pro/bequant.js +42 -0
- package/js/src/src/pro/binance.d.ts +796 -0
- package/js/src/src/pro/binance.js +4373 -0
- package/js/src/src/pro/binancecoinm.d.ts +4 -0
- package/js/src/src/pro/binancecoinm.js +32 -0
- package/js/src/src/pro/binanceus.d.ts +4 -0
- package/js/src/src/pro/binanceus.js +52 -0
- package/js/src/src/pro/binanceusdm.d.ts +4 -0
- package/js/src/src/pro/binanceusdm.js +37 -0
- package/js/src/src/pro/bingx.d.ts +151 -0
- package/js/src/src/pro/bingx.js +1568 -0
- package/js/src/src/pro/bitfinex.d.ts +99 -0
- package/js/src/src/pro/bitfinex.js +1165 -0
- package/js/src/src/pro/bitget.d.ts +257 -0
- package/js/src/src/pro/bitget.js +2327 -0
- package/js/src/src/pro/bithumb.d.ts +59 -0
- package/js/src/src/pro/bithumb.js +395 -0
- package/js/src/src/pro/bitmart.d.ts +168 -0
- package/js/src/src/pro/bitmart.js +1686 -0
- package/js/src/src/pro/bitmex.d.ts +170 -0
- package/js/src/src/pro/bitmex.js +1760 -0
- package/js/src/src/pro/bitopro.d.ts +69 -0
- package/js/src/src/pro/bitopro.js +477 -0
- package/js/src/src/pro/bitrue.d.ts +40 -0
- package/js/src/src/pro/bitrue.js +461 -0
- package/js/src/src/pro/bitstamp.d.ts +53 -0
- package/js/src/src/pro/bitstamp.js +587 -0
- package/js/src/src/pro/bittrade.d.ts +66 -0
- package/js/src/src/pro/bittrade.js +606 -0
- package/js/src/src/pro/bitvavo.d.ts +321 -0
- package/js/src/src/pro/bitvavo.js +1451 -0
- package/js/src/src/pro/blockchaincom.d.ts +89 -0
- package/js/src/src/pro/blockchaincom.js +777 -0
- package/js/src/src/pro/blofin.d.ts +174 -0
- package/js/src/src/pro/blofin.js +743 -0
- package/js/src/src/pro/bybit.d.ts +397 -0
- package/js/src/src/pro/bybit.js +2519 -0
- package/js/src/src/pro/cex.d.ts +220 -0
- package/js/src/src/pro/cex.js +1535 -0
- package/js/src/src/pro/coinbase.d.ts +119 -0
- package/js/src/src/pro/coinbase.js +736 -0
- package/js/src/src/pro/coinbaseadvanced.d.ts +4 -0
- package/js/src/src/pro/coinbaseadvanced.js +18 -0
- package/js/src/src/pro/coinbaseexchange.d.ts +133 -0
- package/js/src/src/pro/coinbaseexchange.js +969 -0
- package/js/src/src/pro/coinbaseinternational.d.ts +143 -0
- package/js/src/src/pro/coinbaseinternational.js +804 -0
- package/js/src/src/pro/coincatch.d.ts +207 -0
- package/js/src/src/pro/coincatch.js +1562 -0
- package/js/src/src/pro/coincheck.d.ts +33 -0
- package/js/src/src/pro/coincheck.js +210 -0
- package/js/src/src/pro/coinex.d.ts +147 -0
- package/js/src/src/pro/coinex.js +1426 -0
- package/js/src/src/pro/coinone.d.ts +51 -0
- package/js/src/src/pro/coinone.js +413 -0
- package/js/src/src/pro/cryptocom.d.ts +300 -0
- package/js/src/src/pro/cryptocom.js +1414 -0
- package/js/src/src/pro/defx.d.ts +236 -0
- package/js/src/src/pro/defx.js +865 -0
- package/js/src/src/pro/deribit.d.ts +163 -0
- package/js/src/src/pro/deribit.js +1066 -0
- package/js/src/src/pro/derive.d.ts +100 -0
- package/js/src/src/pro/derive.js +753 -0
- package/js/src/src/pro/exmo.d.ts +97 -0
- package/js/src/src/pro/exmo.js +903 -0
- package/js/src/src/pro/gate.d.ts +360 -0
- package/js/src/src/pro/gate.js +2119 -0
- package/js/src/src/pro/gateio.d.ts +4 -0
- package/js/src/src/pro/gateio.js +17 -0
- package/js/src/src/pro/gemini.d.ts +106 -0
- package/js/src/src/pro/gemini.js +932 -0
- package/js/src/src/pro/hashkey.d.ts +121 -0
- package/js/src/src/pro/hashkey.js +843 -0
- package/js/src/src/pro/hitbtc.d.ts +235 -0
- package/js/src/src/pro/hitbtc.js +1400 -0
- package/js/src/src/pro/hollaex.d.ts +77 -0
- package/js/src/src/pro/hollaex.js +604 -0
- package/js/src/src/pro/htx.d.ts +141 -0
- package/js/src/src/pro/htx.js +2415 -0
- package/js/src/src/pro/huobi.d.ts +4 -0
- package/js/src/src/pro/huobi.js +17 -0
- package/js/src/src/pro/hyperliquid.d.ts +218 -0
- package/js/src/src/pro/hyperliquid.js +1126 -0
- package/js/src/src/pro/independentreserve.d.ts +36 -0
- package/js/src/src/pro/independentreserve.js +287 -0
- package/js/src/src/pro/kraken.d.ts +233 -0
- package/js/src/src/pro/kraken.js +1785 -0
- package/js/src/src/pro/krakenfutures.d.ts +178 -0
- package/js/src/src/pro/krakenfutures.js +1592 -0
- package/js/src/src/pro/kucoin.d.ts +221 -0
- package/js/src/src/pro/kucoin.js +1430 -0
- package/js/src/src/pro/kucoinfutures.d.ts +205 -0
- package/js/src/src/pro/kucoinfutures.js +1295 -0
- package/js/src/src/pro/lbank.d.ts +134 -0
- package/js/src/src/pro/lbank.js +950 -0
- package/js/src/src/pro/luno.d.ts +44 -0
- package/js/src/src/pro/luno.js +322 -0
- package/js/src/src/pro/mexc.d.ts +210 -0
- package/js/src/src/pro/mexc.js +2009 -0
- package/js/src/src/pro/modetrade.d.ts +155 -0
- package/js/src/src/pro/modetrade.js +1335 -0
- package/js/src/src/pro/myokx.d.ts +4 -0
- package/js/src/src/pro/myokx.js +39 -0
- package/js/src/src/pro/ndax.d.ts +60 -0
- package/js/src/src/pro/ndax.js +545 -0
- package/js/src/src/pro/okcoin.d.ts +91 -0
- package/js/src/src/pro/okcoin.js +763 -0
- package/js/src/src/pro/okx.d.ts +408 -0
- package/js/src/src/pro/okx.js +2479 -0
- package/js/src/src/pro/okxus.d.ts +4 -0
- package/js/src/src/pro/okxus.js +39 -0
- package/js/src/src/pro/onetrading.d.ts +107 -0
- package/js/src/src/pro/onetrading.js +1343 -0
- package/js/src/src/pro/oxfun.d.ts +234 -0
- package/js/src/src/pro/oxfun.js +1112 -0
- package/js/src/src/pro/p2b.d.ts +104 -0
- package/js/src/src/pro/p2b.js +506 -0
- package/js/src/src/pro/paradex.d.ts +54 -0
- package/js/src/src/pro/paradex.js +370 -0
- package/js/src/src/pro/phemex.d.ts +129 -0
- package/js/src/src/pro/phemex.js +1569 -0
- package/js/src/src/pro/poloniex.d.ts +214 -0
- package/js/src/src/pro/poloniex.js +1318 -0
- package/js/src/src/pro/probit.d.ts +91 -0
- package/js/src/src/pro/probit.js +593 -0
- package/js/src/src/pro/tradeogre.d.ts +49 -0
- package/js/src/src/pro/tradeogre.js +284 -0
- package/js/src/src/pro/upbit.d.ts +124 -0
- package/js/src/src/pro/upbit.js +689 -0
- package/js/src/src/pro/vertex.d.ts +104 -0
- package/js/src/src/pro/vertex.js +999 -0
- package/js/src/src/pro/whitebit.d.ts +123 -0
- package/js/src/src/pro/whitebit.js +971 -0
- package/js/src/src/pro/woo.d.ts +161 -0
- package/js/src/src/pro/woo.js +1351 -0
- package/js/src/src/pro/woofipro.d.ts +155 -0
- package/js/src/src/pro/woofipro.js +1335 -0
- package/js/src/src/pro/xt.d.ts +165 -0
- package/js/src/src/pro/xt.js +1230 -0
- package/js/src/src/probit.d.ts +283 -0
- package/js/src/src/probit.js +1935 -0
- package/js/src/src/protobuf/mexc/compiled.cjs +7186 -0
- package/js/src/src/protobuf/mexc/compiled.d.cts +8 -0
- package/js/src/src/raastin.d.ts +24 -0
- package/js/src/src/raastin.js +494 -0
- package/js/src/src/ramzinex.d.ts +23 -0
- package/js/src/src/ramzinex.js +510 -0
- package/js/src/src/sarmayex.d.ts +21 -0
- package/js/src/src/sarmayex.js +376 -0
- package/js/src/src/sarrafex.d.ts +23 -0
- package/js/src/src/sarrafex.js +501 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.d.ts +50 -0
- package/js/src/src/static_dependencies/ethers/abi-coder.js +148 -0
- package/js/src/src/static_dependencies/ethers/address/address.d.ts +55 -0
- package/js/src/src/static_dependencies/ethers/address/address.js +162 -0
- package/js/src/src/static_dependencies/ethers/address/checks.d.ts +80 -0
- package/js/src/src/static_dependencies/ethers/address/checks.js +119 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.d.ts +47 -0
- package/js/src/src/static_dependencies/ethers/address/contract-address.js +73 -0
- package/js/src/src/static_dependencies/ethers/address/index.d.ts +48 -0
- package/js/src/src/static_dependencies/ethers/address/index.js +24 -0
- package/js/src/src/static_dependencies/ethers/bytes32.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/bytes32.js +45 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.d.ts +120 -0
- package/js/src/src/static_dependencies/ethers/coders/abstract-coder.js +424 -0
- package/js/src/src/static_dependencies/ethers/coders/address.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/address.js +34 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/anonymous.js +27 -0
- package/js/src/src/static_dependencies/ethers/coders/array.d.ts +24 -0
- package/js/src/src/static_dependencies/ethers/coders/array.js +162 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/boolean.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.d.ts +18 -0
- package/js/src/src/static_dependencies/ethers/coders/bytes.js +39 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.d.ts +14 -0
- package/js/src/src/static_dependencies/ethers/coders/fixed-bytes.js +32 -0
- package/js/src/src/static_dependencies/ethers/coders/null.d.ts +11 -0
- package/js/src/src/static_dependencies/ethers/coders/null.js +29 -0
- package/js/src/src/static_dependencies/ethers/coders/number.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/number.js +48 -0
- package/js/src/src/static_dependencies/ethers/coders/string.d.ts +12 -0
- package/js/src/src/static_dependencies/ethers/coders/string.js +26 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.d.ts +15 -0
- package/js/src/src/static_dependencies/ethers/coders/tuple.js +67 -0
- package/js/src/src/static_dependencies/ethers/fragments.d.ts +458 -0
- package/js/src/src/static_dependencies/ethers/fragments.js +1252 -0
- package/js/src/src/static_dependencies/ethers/hash/index.d.ts +10 -0
- package/js/src/src/static_dependencies/ethers/hash/index.js +15 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/hash/solidity.js +107 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.d.ts +144 -0
- package/js/src/src/static_dependencies/ethers/hash/typed-data.js +490 -0
- package/js/src/src/static_dependencies/ethers/index.d.ts +19 -0
- package/js/src/src/static_dependencies/ethers/index.js +22 -0
- package/js/src/src/static_dependencies/ethers/interface.d.ts +380 -0
- package/js/src/src/static_dependencies/ethers/interface.js +990 -0
- package/js/src/src/static_dependencies/ethers/typed.d.ts +569 -0
- package/js/src/src/static_dependencies/ethers/typed.js +608 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/base58.js +68 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.d.ts +39 -0
- package/js/src/src/static_dependencies/ethers/utils/base64.js +58 -0
- package/js/src/src/static_dependencies/ethers/utils/data.d.ts +92 -0
- package/js/src/src/static_dependencies/ethers/utils/data.js +175 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.d.ts +509 -0
- package/js/src/src/static_dependencies/ethers/utils/errors.js +227 -0
- package/js/src/src/static_dependencies/ethers/utils/events.d.ts +76 -0
- package/js/src/src/static_dependencies/ethers/utils/events.js +52 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.d.ts +251 -0
- package/js/src/src/static_dependencies/ethers/utils/fixednumber.js +529 -0
- package/js/src/src/static_dependencies/ethers/utils/index.d.ts +30 -0
- package/js/src/src/static_dependencies/ethers/utils/index.js +38 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.d.ts +65 -0
- package/js/src/src/static_dependencies/ethers/utils/maths.js +220 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.d.ts +22 -0
- package/js/src/src/static_dependencies/ethers/utils/properties.js +59 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-decode.js +84 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.d.ts +5 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp-encode.js +54 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.d.ts +16 -0
- package/js/src/src/static_dependencies/ethers/utils/rlp.js +14 -0
- package/js/src/src/static_dependencies/ethers/utils/units.d.ts +23 -0
- package/js/src/src/static_dependencies/ethers/utils/units.js +88 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.d.ts +95 -0
- package/js/src/src/static_dependencies/ethers/utils/utf8.js +225 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.d.ts +7 -0
- package/js/src/src/static_dependencies/ethers/utils/uuid.js +35 -0
- package/js/src/src/static_dependencies/fflake/browser.d.ts +222 -0
- package/js/src/src/static_dependencies/fflake/browser.js +2578 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.d.ts +116 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncrypt.js +194 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.d.ts +142 -0
- package/js/src/src/static_dependencies/jsencrypt/JSEncryptRSAKey.js +307 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.d.ts +51 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/asn1.js +565 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.d.ts +5 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/base64.js +94 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/hex.js +70 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.d.ts +9 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/asn1js/int10.js +91 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/base64.js +25 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.d.ts +101 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/jsbn.js +1757 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.d.ts +10 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/prng4.js +50 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.d.ts +3 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rng.js +80 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.d.ts +23 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/rsa.js +377 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.d.ts +7 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsbn/util.js +64 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/jsencrypt/lib/jsrsasign/asn1-1.0.js +1627 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.d.ts +60 -0
- package/js/src/src/static_dependencies/noble-curves/_shortw_utils.js +22 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.d.ts +67 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/curve.js +157 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.d.ts +79 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/edwards.js +432 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.d.ts +56 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/hash-to-curve.js +171 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.d.ts +68 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/modular.js +351 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.d.ts +25 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/montgomery.js +162 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.d.ts +29 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/poseidon.js +115 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/utils.js +227 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.d.ts +204 -0
- package/js/src/src/static_dependencies/noble-curves/abstract/weierstrass.js +1016 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.d.ts +53 -0
- package/js/src/src/static_dependencies/noble-curves/ed25519.js +402 -0
- package/js/src/src/static_dependencies/noble-curves/p256.d.ts +103 -0
- package/js/src/src/static_dependencies/noble-curves/p256.js +47 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.d.ts +91 -0
- package/js/src/src/static_dependencies/noble-curves/secp256k1.js +257 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/_assert.js +48 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.d.ts +23 -0
- package/js/src/src/static_dependencies/noble-hashes/_sha2.js +119 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.d.ts +35 -0
- package/js/src/src/static_dependencies/noble-hashes/_u64.js +66 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.d.ts +1 -0
- package/js/src/src/static_dependencies/noble-hashes/crypto.js +7 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.d.ts +26 -0
- package/js/src/src/static_dependencies/noble-hashes/hmac.js +82 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.d.ts +18 -0
- package/js/src/src/static_dependencies/noble-hashes/md5.js +242 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.d.ts +21 -0
- package/js/src/src/static_dependencies/noble-hashes/sha1.js +90 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.d.ts +34 -0
- package/js/src/src/static_dependencies/noble-hashes/sha256.js +129 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.d.ts +97 -0
- package/js/src/src/static_dependencies/noble-hashes/sha3.js +211 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.d.ts +66 -0
- package/js/src/src/static_dependencies/noble-hashes/sha512.js +236 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.d.ts +77 -0
- package/js/src/src/static_dependencies/noble-hashes/utils.js +147 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.d.ts +14 -0
- package/js/src/src/static_dependencies/proxies/agent-base/helpers.js +42 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.d.ts +33 -0
- package/js/src/src/static_dependencies/proxies/agent-base/index.js +82 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.d.ts +40 -0
- package/js/src/src/static_dependencies/proxies/http-proxy-agent/index.js +119 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.d.ts +45 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/index.js +150 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.d.ts +15 -0
- package/js/src/src/static_dependencies/proxies/https-proxy-agent/parse-proxy-response.js +95 -0
- package/js/src/src/static_dependencies/qs/formats.cjs +22 -0
- package/js/src/src/static_dependencies/qs/formats.d.cts +14 -0
- package/js/src/src/static_dependencies/qs/index.cjs +15 -0
- package/js/src/src/static_dependencies/qs/index.d.cts +10 -0
- package/js/src/src/static_dependencies/qs/parse.cjs +208 -0
- package/js/src/src/static_dependencies/qs/parse.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/stringify.cjs +192 -0
- package/js/src/src/static_dependencies/qs/stringify.d.cts +8 -0
- package/js/src/src/static_dependencies/qs/utils.cjs +202 -0
- package/js/src/src/static_dependencies/qs/utils.d.cts +15 -0
- package/js/src/src/static_dependencies/scure-base/index.d.ts +92 -0
- package/js/src/src/static_dependencies/scure-base/index.js +420 -0
- package/js/src/src/static_dependencies/scure-starknet/index.d.ts +79 -0
- package/js/src/src/static_dependencies/scure-starknet/index.js +323 -0
- package/js/src/src/static_dependencies/starknet/constants.d.ts +61 -0
- package/js/src/src/static_dependencies/starknet/constants.js +67 -0
- package/js/src/src/static_dependencies/starknet/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/types/cairoEnum.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.d.ts +19 -0
- package/js/src/src/static_dependencies/starknet/types/calldata.js +28 -0
- package/js/src/src/static_dependencies/starknet/types/index.d.ts +13 -0
- package/js/src/src/static_dependencies/starknet/types/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.d.ts +71 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/abi.js +13 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/index.js +16 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.d.ts +33 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/legacy.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.d.ts +52 -0
- package/js/src/src/static_dependencies/starknet/types/lib/contract/sierra.js +7 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.d.ts +248 -0
- package/js/src/src/static_dependencies/starknet/types/lib/index.js +52 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.d.ts +44 -0
- package/js/src/src/static_dependencies/starknet/types/typedData.js +19 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.d.ts +7 -0
- package/js/src/src/static_dependencies/starknet/utils/assert.js +17 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/felt.js +43 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.d.ts +72 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint256.js +117 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.d.ts +76 -0
- package/js/src/src/static_dependencies/starknet/utils/cairoDataTypes/uint512.js +136 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.d.ts +32 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/byteArray.js +59 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.d.ts +183 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/cairo.js +229 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.d.ts +38 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoCustomEnum.js +57 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoOption.js +64 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.d.ts +34 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/CairoResult.js +63 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.d.ts +3 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/enum/index.js +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.d.ts +9 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/formatter.js +67 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.d.ts +89 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/index.js +280 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.d.ts +5 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/index.js +30 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.d.ts +20 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/interface.js +8 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.d.ts +24 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-0-1.1.0.js +36 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.d.ts +23 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/parser/parser-2.0.0.js +40 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.d.ts +2 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/propertyOrder.js +155 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/requestParser.js +248 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.d.ts +11 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/responseParser.js +214 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/tuple.js +113 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/calldata/validate.js +208 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.d.ts +207 -0
- package/js/src/src/static_dependencies/starknet/utils/encode.js +282 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/classHash.js +223 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.d.ts +6 -0
- package/js/src/src/static_dependencies/starknet/utils/hash/index.js +13 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.d.ts +35 -0
- package/js/src/src/static_dependencies/starknet/utils/merkle.js +84 -0
- package/js/src/src/static_dependencies/starknet/utils/num.d.ts +182 -0
- package/js/src/src/static_dependencies/starknet/utils/num.js +244 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.d.ts +48 -0
- package/js/src/src/static_dependencies/starknet/utils/selector.js +85 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.d.ts +57 -0
- package/js/src/src/static_dependencies/starknet/utils/shortString.js +96 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.d.ts +54 -0
- package/js/src/src/static_dependencies/starknet/utils/typedData.js +321 -0
- package/js/src/src/static_dependencies/watchable/src/types.d.ts +28 -0
- package/js/src/src/static_dependencies/watchable/src/types.js +8 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.d.ts +120 -0
- package/js/src/src/static_dependencies/watchable/src/unpromise.js +297 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.d.ts +1279 -0
- package/js/src/src/static_dependencies/zklink/zklink-sdk-web.js +4282 -0
- package/js/src/src/tabdeal.d.ts +23 -0
- package/js/src/src/tabdeal.js +387 -0
- package/js/src/src/tehran_exchange.d.ts +21 -0
- package/js/src/src/tehran_exchange.js +333 -0
- package/js/src/src/tetherland.d.ts +21 -0
- package/js/src/src/tetherland.js +367 -0
- package/js/src/src/timex.d.ts +247 -0
- package/js/src/src/timex.js +1792 -0
- package/js/src/src/tokocrypto.d.ts +261 -0
- package/js/src/src/tokocrypto.js +2641 -0
- package/js/src/src/toobit.d.ts +22 -0
- package/js/src/src/toobit.js +445 -0
- package/js/src/src/tradeogre.d.ts +149 -0
- package/js/src/src/tradeogre.js +878 -0
- package/js/src/src/twox.d.ts +21 -0
- package/js/src/src/twox.js +371 -0
- package/js/src/src/ubitex.d.ts +23 -0
- package/js/src/src/ubitex.js +433 -0
- package/js/src/src/upbit.d.ts +377 -0
- package/js/src/src/upbit.js +2340 -0
- package/js/src/src/vertex.d.ts +346 -0
- package/js/src/src/vertex.js +3146 -0
- package/js/src/src/wallex.d.ts +23 -0
- package/js/src/src/wallex.js +467 -0
- package/js/src/src/wavesexchange.d.ts +244 -0
- package/js/src/src/wavesexchange.js +2747 -0
- package/js/src/src/whitebit.d.ts +571 -0
- package/js/src/src/whitebit.js +3437 -0
- package/js/src/src/woo.d.ts +727 -0
- package/js/src/src/woo.js +4183 -0
- package/js/src/src/woofipro.d.ts +497 -0
- package/js/src/src/woofipro.js +2941 -0
- package/js/src/src/xt.d.ts +568 -0
- package/js/src/src/xt.js +5184 -0
- package/js/src/src/yobit.d.ts +197 -0
- package/js/src/src/yobit.js +1453 -0
- package/js/src/src/zaif.d.ts +136 -0
- package/js/src/src/zaif.js +821 -0
- package/js/src/src/zonda.d.ts +214 -0
- package/js/src/src/zonda.js +1984 -0
- package/js/test.d.ts +1 -1
- package/js/test.js +33 -33
- package/package.json +1 -1
|
@@ -0,0 +1,3681 @@
|
|
|
1
|
+
// ----------------------------------------------------------------------------
|
|
2
|
+
|
|
3
|
+
// PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
+
// https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
+
// EDIT THE CORRESPONDENT .ts FILE INSTEAD
|
|
6
|
+
|
|
7
|
+
// ---------------------------------------------------------------------------
|
|
8
|
+
import Exchange from './abstract/poloniex.js';
|
|
9
|
+
import { ArgumentsRequired, ExchangeError, ExchangeNotAvailable, NotSupported, RequestTimeout, AuthenticationError, PermissionDenied, InsufficientFunds, OrderNotFound, InvalidOrder, AccountSuspended, OnMaintenance, BadSymbol, BadRequest } from './base/errors.js';
|
|
10
|
+
import { Precise } from './base/Precise.js';
|
|
11
|
+
import { TICK_SIZE } from './base/functions/number.js';
|
|
12
|
+
import { sha256 } from './static_dependencies/noble-hashes/sha256.js';
|
|
13
|
+
// ---------------------------------------------------------------------------
|
|
14
|
+
/**
|
|
15
|
+
* @class poloniex
|
|
16
|
+
* @augments Exchange
|
|
17
|
+
*/
|
|
18
|
+
export default class poloniex extends Exchange {
|
|
19
|
+
describe() {
|
|
20
|
+
return this.deepExtend(super.describe(), {
|
|
21
|
+
'id': 'poloniex',
|
|
22
|
+
'name': 'Poloniex',
|
|
23
|
+
'countries': ['US'],
|
|
24
|
+
// 200 requests per second for some unauthenticated market endpoints => 1000ms / 200 = 5ms between requests
|
|
25
|
+
'rateLimit': 5,
|
|
26
|
+
'certified': false,
|
|
27
|
+
'pro': true,
|
|
28
|
+
'has': {
|
|
29
|
+
'CORS': undefined,
|
|
30
|
+
'spot': true,
|
|
31
|
+
'margin': undefined,
|
|
32
|
+
'swap': true,
|
|
33
|
+
'future': true,
|
|
34
|
+
'option': false,
|
|
35
|
+
'addMargin': true,
|
|
36
|
+
'cancelAllOrders': true,
|
|
37
|
+
'cancelOrder': true,
|
|
38
|
+
'cancelOrders': undefined,
|
|
39
|
+
'createDepositAddress': true,
|
|
40
|
+
'createMarketBuyOrderWithCost': true,
|
|
41
|
+
'createMarketOrderWithCost': false,
|
|
42
|
+
'createMarketSellOrderWithCost': false,
|
|
43
|
+
'createOrder': true,
|
|
44
|
+
'createOrders': undefined,
|
|
45
|
+
'createStopOrder': true,
|
|
46
|
+
'createTriggerOrder': true,
|
|
47
|
+
'editOrder': true,
|
|
48
|
+
'fetchBalance': true,
|
|
49
|
+
'fetchClosedOrder': false,
|
|
50
|
+
'fetchClosedOrders': true,
|
|
51
|
+
'fetchCurrencies': true,
|
|
52
|
+
'fetchDepositAddress': true,
|
|
53
|
+
'fetchDepositAddresses': false,
|
|
54
|
+
'fetchDepositAddressesByNetwork': false,
|
|
55
|
+
'fetchDeposits': true,
|
|
56
|
+
'fetchDepositsWithdrawals': true,
|
|
57
|
+
'fetchDepositWithdrawFee': 'emulated',
|
|
58
|
+
'fetchDepositWithdrawFees': true,
|
|
59
|
+
'fetchFundingHistory': false,
|
|
60
|
+
'fetchFundingInterval': false,
|
|
61
|
+
'fetchFundingIntervals': false,
|
|
62
|
+
'fetchFundingRate': false,
|
|
63
|
+
'fetchFundingRateHistory': false,
|
|
64
|
+
'fetchFundingRates': undefined,
|
|
65
|
+
'fetchLedger': undefined,
|
|
66
|
+
'fetchLeverage': true,
|
|
67
|
+
'fetchLiquidations': undefined,
|
|
68
|
+
'fetchMarginMode': false,
|
|
69
|
+
'fetchMarkets': true,
|
|
70
|
+
'fetchMyTrades': true,
|
|
71
|
+
'fetchOHLCV': true,
|
|
72
|
+
'fetchOpenInterestHistory': false,
|
|
73
|
+
'fetchOpenOrder': false,
|
|
74
|
+
'fetchOpenOrders': true,
|
|
75
|
+
'fetchOrder': true,
|
|
76
|
+
'fetchOrderBook': true,
|
|
77
|
+
'fetchOrderBooks': false,
|
|
78
|
+
'fetchOrderTrades': true,
|
|
79
|
+
'fetchPosition': false,
|
|
80
|
+
'fetchPositionMode': true,
|
|
81
|
+
'fetchPositions': true,
|
|
82
|
+
'fetchTicker': true,
|
|
83
|
+
'fetchTickers': true,
|
|
84
|
+
'fetchTime': true,
|
|
85
|
+
'fetchTrades': true,
|
|
86
|
+
'fetchTradingFee': false,
|
|
87
|
+
'fetchTradingFees': true,
|
|
88
|
+
'fetchTransactions': 'emulated',
|
|
89
|
+
'fetchTransfer': false,
|
|
90
|
+
'fetchTransfers': false,
|
|
91
|
+
'fetchWithdrawals': true,
|
|
92
|
+
'reduceMargin': true,
|
|
93
|
+
'sandbox': true,
|
|
94
|
+
'setLeverage': true,
|
|
95
|
+
'setPositionMode': true,
|
|
96
|
+
'transfer': true,
|
|
97
|
+
'withdraw': true,
|
|
98
|
+
},
|
|
99
|
+
'timeframes': {
|
|
100
|
+
'1m': 'MINUTE_1',
|
|
101
|
+
'5m': 'MINUTE_5',
|
|
102
|
+
'10m': 'MINUTE_10',
|
|
103
|
+
'15m': 'MINUTE_15',
|
|
104
|
+
'30m': 'MINUTE_30',
|
|
105
|
+
'1h': 'HOUR_1',
|
|
106
|
+
'2h': 'HOUR_2',
|
|
107
|
+
'4h': 'HOUR_4',
|
|
108
|
+
'6h': 'HOUR_6',
|
|
109
|
+
'12h': 'HOUR_12',
|
|
110
|
+
'1d': 'DAY_1',
|
|
111
|
+
'3d': 'DAY_3',
|
|
112
|
+
'1w': 'WEEK_1',
|
|
113
|
+
'1M': 'MONTH_1', // not in swap
|
|
114
|
+
},
|
|
115
|
+
'urls': {
|
|
116
|
+
'logo': 'https://user-images.githubusercontent.com/1294454/27766817-e9456312-5ee6-11e7-9b3c-b628ca5626a5.jpg',
|
|
117
|
+
'api': {
|
|
118
|
+
'spot': 'https://api.poloniex.com',
|
|
119
|
+
'swap': 'https://api.poloniex.com',
|
|
120
|
+
},
|
|
121
|
+
'test': {
|
|
122
|
+
'spot': 'https://sand-spot-api-gateway.poloniex.com',
|
|
123
|
+
},
|
|
124
|
+
'www': 'https://www.poloniex.com',
|
|
125
|
+
'doc': 'https://api-docs.poloniex.com/spot/',
|
|
126
|
+
'fees': 'https://poloniex.com/fees',
|
|
127
|
+
'referral': 'https://poloniex.com/signup?c=UBFZJRPJ',
|
|
128
|
+
},
|
|
129
|
+
'api': {
|
|
130
|
+
'public': {
|
|
131
|
+
'get': {
|
|
132
|
+
'markets': 20,
|
|
133
|
+
'markets/{symbol}': 1,
|
|
134
|
+
'currencies': 20,
|
|
135
|
+
'currencies/{currency}': 20,
|
|
136
|
+
'v2/currencies': 20,
|
|
137
|
+
'v2/currencies/{currency}': 20,
|
|
138
|
+
'timestamp': 1,
|
|
139
|
+
'markets/price': 1,
|
|
140
|
+
'markets/{symbol}/price': 1,
|
|
141
|
+
'markets/markPrice': 1,
|
|
142
|
+
'markets/{symbol}/markPrice': 1,
|
|
143
|
+
'markets/{symbol}/markPriceComponents': 1,
|
|
144
|
+
'markets/{symbol}/orderBook': 1,
|
|
145
|
+
'markets/{symbol}/candles': 1,
|
|
146
|
+
'markets/{symbol}/trades': 20,
|
|
147
|
+
'markets/ticker24h': 20,
|
|
148
|
+
'markets/{symbol}/ticker24h': 20,
|
|
149
|
+
'markets/collateralInfo': 1,
|
|
150
|
+
'markets/{currency}/collateralInfo': 1,
|
|
151
|
+
'markets/borrowRatesInfo': 1,
|
|
152
|
+
},
|
|
153
|
+
},
|
|
154
|
+
'private': {
|
|
155
|
+
'get': {
|
|
156
|
+
'accounts': 4,
|
|
157
|
+
'accounts/balances': 4,
|
|
158
|
+
'accounts/{id}/balances': 4,
|
|
159
|
+
'accounts/activity': 20,
|
|
160
|
+
'accounts/transfer': 20,
|
|
161
|
+
'accounts/transfer/{id}': 4,
|
|
162
|
+
'feeinfo': 20,
|
|
163
|
+
'accounts/interest/history': 1,
|
|
164
|
+
'subaccounts': 4,
|
|
165
|
+
'subaccounts/balances': 20,
|
|
166
|
+
'subaccounts/{id}/balances': 4,
|
|
167
|
+
'subaccounts/transfer': 20,
|
|
168
|
+
'subaccounts/transfer/{id}': 4,
|
|
169
|
+
'wallets/addresses': 20,
|
|
170
|
+
'wallets/addresses/{currency}': 20,
|
|
171
|
+
'wallets/activity': 20,
|
|
172
|
+
'margin/accountMargin': 4,
|
|
173
|
+
'margin/borrowStatus': 4,
|
|
174
|
+
'margin/maxSize': 4,
|
|
175
|
+
'orders': 20,
|
|
176
|
+
'orders/{id}': 4,
|
|
177
|
+
'orders/killSwitchStatus': 4,
|
|
178
|
+
'smartorders': 20,
|
|
179
|
+
'smartorders/{id}': 4,
|
|
180
|
+
'orders/history': 20,
|
|
181
|
+
'smartorders/history': 20,
|
|
182
|
+
'trades': 20,
|
|
183
|
+
'orders/{id}/trades': 4,
|
|
184
|
+
},
|
|
185
|
+
'post': {
|
|
186
|
+
'accounts/transfer': 4,
|
|
187
|
+
'subaccounts/transfer': 20,
|
|
188
|
+
'wallets/address': 20,
|
|
189
|
+
'wallets/withdraw': 20,
|
|
190
|
+
'v2/wallets/withdraw': 20,
|
|
191
|
+
'orders': 4,
|
|
192
|
+
'orders/batch': 20,
|
|
193
|
+
'orders/killSwitch': 4,
|
|
194
|
+
'smartorders': 4,
|
|
195
|
+
},
|
|
196
|
+
'delete': {
|
|
197
|
+
'orders/{id}': 4,
|
|
198
|
+
'orders/cancelByIds': 20,
|
|
199
|
+
'orders': 20,
|
|
200
|
+
'smartorders/{id}': 4,
|
|
201
|
+
'smartorders/cancelByIds': 20,
|
|
202
|
+
'smartorders': 20,
|
|
203
|
+
},
|
|
204
|
+
'put': {
|
|
205
|
+
'orders/{id}': 20,
|
|
206
|
+
'smartorders/{id}': 20,
|
|
207
|
+
},
|
|
208
|
+
},
|
|
209
|
+
'swapPublic': {
|
|
210
|
+
'get': {
|
|
211
|
+
// 300 calls / second
|
|
212
|
+
'v3/market/allInstruments': 2 / 3,
|
|
213
|
+
'v3/market/instruments': 2 / 3,
|
|
214
|
+
'v3/market/orderBook': 2 / 3,
|
|
215
|
+
'v3/market/candles': 10,
|
|
216
|
+
'v3/market/indexPriceCandlesticks': 10,
|
|
217
|
+
'v3/market/premiumIndexCandlesticks': 10,
|
|
218
|
+
'v3/market/markPriceCandlesticks': 10,
|
|
219
|
+
'v3/market/trades': 2 / 3,
|
|
220
|
+
'v3/market/liquidationOrder': 2 / 3,
|
|
221
|
+
'v3/market/tickers': 2 / 3,
|
|
222
|
+
'v3/market/markPrice': 2 / 3,
|
|
223
|
+
'v3/market/indexPrice': 2 / 3,
|
|
224
|
+
'v3/market/indexPriceComponents': 2 / 3,
|
|
225
|
+
'v3/market/fundingRate': 2 / 3,
|
|
226
|
+
'v3/market/openInterest': 2 / 3,
|
|
227
|
+
'v3/market/insurance': 2 / 3,
|
|
228
|
+
'v3/market/riskLimit': 2 / 3,
|
|
229
|
+
},
|
|
230
|
+
},
|
|
231
|
+
'swapPrivate': {
|
|
232
|
+
'get': {
|
|
233
|
+
'v3/account/balance': 4,
|
|
234
|
+
'v3/account/bills': 20,
|
|
235
|
+
'v3/trade/order/opens': 20,
|
|
236
|
+
'v3/trade/order/trades': 20,
|
|
237
|
+
'v3/trade/order/history': 20,
|
|
238
|
+
'v3/trade/position/opens': 20,
|
|
239
|
+
'v3/trade/position/history': 20,
|
|
240
|
+
'v3/position/leverages': 20,
|
|
241
|
+
'v3/position/mode': 20,
|
|
242
|
+
},
|
|
243
|
+
'post': {
|
|
244
|
+
'v3/trade/order': 4,
|
|
245
|
+
'v3/trade/orders': 40,
|
|
246
|
+
'v3/trade/position': 20,
|
|
247
|
+
'v3/trade/positionAll': 100,
|
|
248
|
+
'v3/position/leverage': 20,
|
|
249
|
+
'v3/position/mode': 20,
|
|
250
|
+
'v3/trade/position/margin': 20,
|
|
251
|
+
},
|
|
252
|
+
'delete': {
|
|
253
|
+
'v3/trade/order': 2,
|
|
254
|
+
'v3/trade/batchOrders': 20,
|
|
255
|
+
'v3/trade/allOrders': 20,
|
|
256
|
+
},
|
|
257
|
+
},
|
|
258
|
+
},
|
|
259
|
+
'fees': {
|
|
260
|
+
'trading': {
|
|
261
|
+
'feeSide': 'get',
|
|
262
|
+
// starting from Jan 8 2020
|
|
263
|
+
'maker': this.parseNumber('0.0009'),
|
|
264
|
+
'taker': this.parseNumber('0.0009'),
|
|
265
|
+
},
|
|
266
|
+
'funding': {},
|
|
267
|
+
},
|
|
268
|
+
'commonCurrencies': {
|
|
269
|
+
'AIR': 'AirCoin',
|
|
270
|
+
'APH': 'AphroditeCoin',
|
|
271
|
+
'BCC': 'BTCtalkcoin',
|
|
272
|
+
'BCHABC': 'BCHABC',
|
|
273
|
+
'BDG': 'Badgercoin',
|
|
274
|
+
'BTM': 'Bitmark',
|
|
275
|
+
'CON': 'Coino',
|
|
276
|
+
'ETHTRON': 'ETH',
|
|
277
|
+
'GOLD': 'GoldEagles',
|
|
278
|
+
'GPUC': 'GPU',
|
|
279
|
+
'HOT': 'Hotcoin',
|
|
280
|
+
'ITC': 'Information Coin',
|
|
281
|
+
'KEY': 'KEYCoin',
|
|
282
|
+
'MASK': 'NFTX Hashmasks Index',
|
|
283
|
+
'MEME': 'Degenerator Meme',
|
|
284
|
+
'PLX': 'ParallaxCoin',
|
|
285
|
+
'REPV2': 'REP',
|
|
286
|
+
'STR': 'XLM',
|
|
287
|
+
'SOC': 'SOCC',
|
|
288
|
+
'TRADE': 'Unitrade',
|
|
289
|
+
'TRXETH': 'TRX',
|
|
290
|
+
'XAP': 'API Coin',
|
|
291
|
+
// this is not documented in the API docs for Poloniex
|
|
292
|
+
// https://github.com/ccxt/ccxt/issues/7084
|
|
293
|
+
// when the user calls withdraw ('USDT', amount, address, tag, params)
|
|
294
|
+
// with params = { 'currencyToWithdrawAs': 'USDTTRON' }
|
|
295
|
+
// or params = { 'currencyToWithdrawAs': 'USDTETH' }
|
|
296
|
+
// fetchWithdrawals ('USDT') returns the corresponding withdrawals
|
|
297
|
+
// with a USDTTRON or a USDTETH currency id, respectfully
|
|
298
|
+
// therefore we have map them back to the original code USDT
|
|
299
|
+
// otherwise the returned withdrawals are filtered out
|
|
300
|
+
'USDTBSC': 'USDT',
|
|
301
|
+
'USDTTRON': 'USDT',
|
|
302
|
+
'USDTETH': 'USDT',
|
|
303
|
+
'UST': 'USTC',
|
|
304
|
+
},
|
|
305
|
+
'options': {
|
|
306
|
+
'defaultType': 'spot',
|
|
307
|
+
'createMarketBuyOrderRequiresPrice': true,
|
|
308
|
+
'networks': {
|
|
309
|
+
'BEP20': 'BSC',
|
|
310
|
+
'ERC20': 'ETH',
|
|
311
|
+
'TRC20': 'TRON',
|
|
312
|
+
'TRX': 'TRON',
|
|
313
|
+
},
|
|
314
|
+
'networksById': {
|
|
315
|
+
'TRX': 'TRC20',
|
|
316
|
+
'TRON': 'TRC20',
|
|
317
|
+
},
|
|
318
|
+
'limits': {
|
|
319
|
+
'cost': {
|
|
320
|
+
'min': {
|
|
321
|
+
'BTC': 0.0001,
|
|
322
|
+
'ETH': 0.0001,
|
|
323
|
+
'USDT': 1.0,
|
|
324
|
+
'TRX': 100,
|
|
325
|
+
'BNB': 0.06,
|
|
326
|
+
'USDC': 1.0,
|
|
327
|
+
'USDJ': 1.0,
|
|
328
|
+
'TUSD': 0.0001,
|
|
329
|
+
'DAI': 1.0,
|
|
330
|
+
'PAX': 1.0,
|
|
331
|
+
'BUSD': 1.0,
|
|
332
|
+
},
|
|
333
|
+
},
|
|
334
|
+
},
|
|
335
|
+
'accountsByType': {
|
|
336
|
+
'spot': 'spot',
|
|
337
|
+
'future': 'futures',
|
|
338
|
+
},
|
|
339
|
+
'accountsById': {
|
|
340
|
+
'exchange': 'spot',
|
|
341
|
+
'futures': 'future',
|
|
342
|
+
},
|
|
343
|
+
},
|
|
344
|
+
'features': {
|
|
345
|
+
'default': {
|
|
346
|
+
'sandbox': true,
|
|
347
|
+
'createOrder': {
|
|
348
|
+
'marginMode': true,
|
|
349
|
+
'triggerPrice': true,
|
|
350
|
+
'triggerPriceType': undefined,
|
|
351
|
+
'triggerDirection': false,
|
|
352
|
+
'stopLossPrice': false,
|
|
353
|
+
'takeProfitPrice': false,
|
|
354
|
+
'attachedStopLossTakeProfit': undefined,
|
|
355
|
+
'timeInForce': {
|
|
356
|
+
'IOC': true,
|
|
357
|
+
'FOK': true,
|
|
358
|
+
'PO': true,
|
|
359
|
+
'GTD': false,
|
|
360
|
+
},
|
|
361
|
+
'hedged': false,
|
|
362
|
+
'leverage': false,
|
|
363
|
+
'marketBuyByCost': true,
|
|
364
|
+
'marketBuyRequiresPrice': false,
|
|
365
|
+
'selfTradePrevention': true,
|
|
366
|
+
'trailing': false,
|
|
367
|
+
'iceberg': false,
|
|
368
|
+
},
|
|
369
|
+
'createOrders': {
|
|
370
|
+
'max': 20,
|
|
371
|
+
},
|
|
372
|
+
'fetchMyTrades': {
|
|
373
|
+
'marginMode': false,
|
|
374
|
+
'limit': 1000,
|
|
375
|
+
'daysBack': 100000,
|
|
376
|
+
'untilDays': 100000,
|
|
377
|
+
'symbolRequired': false,
|
|
378
|
+
},
|
|
379
|
+
'fetchOrder': {
|
|
380
|
+
'marginMode': false,
|
|
381
|
+
'trigger': false,
|
|
382
|
+
'trailing': false,
|
|
383
|
+
'symbolRequired': false,
|
|
384
|
+
},
|
|
385
|
+
'fetchOpenOrders': {
|
|
386
|
+
'marginMode': false,
|
|
387
|
+
'limit': 2000,
|
|
388
|
+
'trigger': false,
|
|
389
|
+
'trailing': false,
|
|
390
|
+
'symbolRequired': false,
|
|
391
|
+
},
|
|
392
|
+
'fetchOrders': undefined,
|
|
393
|
+
'fetchClosedOrders': undefined,
|
|
394
|
+
'fetchOHLCV': {
|
|
395
|
+
'limit': 500,
|
|
396
|
+
},
|
|
397
|
+
},
|
|
398
|
+
'spot': {
|
|
399
|
+
'extends': 'default',
|
|
400
|
+
},
|
|
401
|
+
'forContracts': {
|
|
402
|
+
'extends': 'default',
|
|
403
|
+
'createOrder': {
|
|
404
|
+
'marginMode': true,
|
|
405
|
+
'triggerPrice': false,
|
|
406
|
+
'hedged': true,
|
|
407
|
+
'stpMode': true,
|
|
408
|
+
'marketBuyByCost': false,
|
|
409
|
+
},
|
|
410
|
+
'createOrders': {
|
|
411
|
+
'max': 10,
|
|
412
|
+
},
|
|
413
|
+
'fetchOpenOrders': {
|
|
414
|
+
'limit': 100,
|
|
415
|
+
},
|
|
416
|
+
'fetchClosedOrders': {
|
|
417
|
+
'marginMode': false,
|
|
418
|
+
'limit': 100,
|
|
419
|
+
'daysBack': undefined,
|
|
420
|
+
'daysBackCanceled': 1 / 6,
|
|
421
|
+
'untilDays': undefined,
|
|
422
|
+
'trigger': false,
|
|
423
|
+
'trailing': false,
|
|
424
|
+
'symbolRequired': false,
|
|
425
|
+
},
|
|
426
|
+
'fetchMyTrades': {
|
|
427
|
+
'limit': 100,
|
|
428
|
+
'untilDays': 90,
|
|
429
|
+
},
|
|
430
|
+
},
|
|
431
|
+
'swap': {
|
|
432
|
+
'linear': {
|
|
433
|
+
'extends': 'forContracts',
|
|
434
|
+
},
|
|
435
|
+
'inverse': {
|
|
436
|
+
'extends': 'forContracts',
|
|
437
|
+
},
|
|
438
|
+
},
|
|
439
|
+
'future': {
|
|
440
|
+
'linear': {
|
|
441
|
+
'extends': 'forContracts',
|
|
442
|
+
},
|
|
443
|
+
'inverse': {
|
|
444
|
+
'extends': 'forContracts',
|
|
445
|
+
},
|
|
446
|
+
},
|
|
447
|
+
},
|
|
448
|
+
'precisionMode': TICK_SIZE,
|
|
449
|
+
'exceptions': {
|
|
450
|
+
'exact': {
|
|
451
|
+
// General
|
|
452
|
+
'500': ExchangeNotAvailable,
|
|
453
|
+
'603': RequestTimeout,
|
|
454
|
+
'601': BadRequest,
|
|
455
|
+
'415': ExchangeError,
|
|
456
|
+
'602': ArgumentsRequired,
|
|
457
|
+
// Accounts
|
|
458
|
+
'21604': BadRequest,
|
|
459
|
+
'21600': AuthenticationError,
|
|
460
|
+
'21605': AuthenticationError,
|
|
461
|
+
'21102': ExchangeError,
|
|
462
|
+
'21100': AuthenticationError,
|
|
463
|
+
'21704': AuthenticationError,
|
|
464
|
+
'21700': BadRequest,
|
|
465
|
+
'21705': BadRequest,
|
|
466
|
+
'21707': ExchangeError,
|
|
467
|
+
'21708': BadRequest,
|
|
468
|
+
'21601': AccountSuspended,
|
|
469
|
+
'21711': ExchangeError,
|
|
470
|
+
'21709': InsufficientFunds,
|
|
471
|
+
'250000': ExchangeError,
|
|
472
|
+
'250001': BadRequest,
|
|
473
|
+
'250002': BadRequest,
|
|
474
|
+
'250003': BadRequest,
|
|
475
|
+
'250004': BadRequest,
|
|
476
|
+
'250005': InsufficientFunds,
|
|
477
|
+
'250008': BadRequest,
|
|
478
|
+
'250012': ExchangeError,
|
|
479
|
+
// Trading
|
|
480
|
+
'21110': BadRequest,
|
|
481
|
+
'10040': BadSymbol,
|
|
482
|
+
'10060': ExchangeError,
|
|
483
|
+
'10020': BadSymbol,
|
|
484
|
+
'10041': BadSymbol,
|
|
485
|
+
'21340': OnMaintenance,
|
|
486
|
+
'21341': InvalidOrder,
|
|
487
|
+
'21342': InvalidOrder,
|
|
488
|
+
'21343': InvalidOrder,
|
|
489
|
+
'21351': AccountSuspended,
|
|
490
|
+
'21352': BadSymbol,
|
|
491
|
+
'21353': PermissionDenied,
|
|
492
|
+
'21354': PermissionDenied,
|
|
493
|
+
'21359': OrderNotFound,
|
|
494
|
+
'21360': InvalidOrder,
|
|
495
|
+
'24106': BadRequest,
|
|
496
|
+
'24201': ExchangeNotAvailable,
|
|
497
|
+
// Orders
|
|
498
|
+
'21301': OrderNotFound,
|
|
499
|
+
'21302': ExchangeError,
|
|
500
|
+
'21304': ExchangeError,
|
|
501
|
+
'21305': OrderNotFound,
|
|
502
|
+
'21307': ExchangeError,
|
|
503
|
+
'21309': InvalidOrder,
|
|
504
|
+
'21310': InvalidOrder,
|
|
505
|
+
'21311': InvalidOrder,
|
|
506
|
+
'21312': InvalidOrder,
|
|
507
|
+
'21314': InvalidOrder,
|
|
508
|
+
'21315': InvalidOrder,
|
|
509
|
+
'21317': InvalidOrder,
|
|
510
|
+
'21319': InvalidOrder,
|
|
511
|
+
'21320': InvalidOrder,
|
|
512
|
+
'21321': InvalidOrder,
|
|
513
|
+
'21322': InvalidOrder,
|
|
514
|
+
'21324': BadRequest,
|
|
515
|
+
'21327': InvalidOrder,
|
|
516
|
+
'21328': InvalidOrder,
|
|
517
|
+
'21330': InvalidOrder,
|
|
518
|
+
'21335': InvalidOrder,
|
|
519
|
+
'21336': InvalidOrder,
|
|
520
|
+
'21337': InvalidOrder,
|
|
521
|
+
'21344': InvalidOrder,
|
|
522
|
+
'21345': InvalidOrder,
|
|
523
|
+
'21346': InvalidOrder,
|
|
524
|
+
'21348': InvalidOrder,
|
|
525
|
+
'21347': InvalidOrder,
|
|
526
|
+
'21349': InvalidOrder,
|
|
527
|
+
'21350': InvalidOrder,
|
|
528
|
+
'21355': ExchangeError,
|
|
529
|
+
'21356': BadRequest,
|
|
530
|
+
'21721': InsufficientFunds,
|
|
531
|
+
'24101': BadSymbol,
|
|
532
|
+
'24102': InvalidOrder,
|
|
533
|
+
'24103': InvalidOrder,
|
|
534
|
+
'24104': InvalidOrder,
|
|
535
|
+
'24105': InvalidOrder,
|
|
536
|
+
'25020': InvalidOrder,
|
|
537
|
+
// Smartorders
|
|
538
|
+
'25000': InvalidOrder,
|
|
539
|
+
'25001': InvalidOrder,
|
|
540
|
+
'25002': InvalidOrder,
|
|
541
|
+
'25003': ExchangeError,
|
|
542
|
+
'25004': InvalidOrder,
|
|
543
|
+
'25005': ExchangeError,
|
|
544
|
+
'25006': InvalidOrder,
|
|
545
|
+
'25007': InvalidOrder,
|
|
546
|
+
'25008': InvalidOrder,
|
|
547
|
+
'25009': ExchangeError,
|
|
548
|
+
'25010': PermissionDenied,
|
|
549
|
+
'25011': InvalidOrder,
|
|
550
|
+
'25012': ExchangeError,
|
|
551
|
+
'25013': OrderNotFound,
|
|
552
|
+
'25014': OrderNotFound,
|
|
553
|
+
'25015': OrderNotFound,
|
|
554
|
+
'25016': ExchangeError,
|
|
555
|
+
'25017': ExchangeError,
|
|
556
|
+
'25018': BadRequest,
|
|
557
|
+
'25019': BadSymbol, // Invalid symbol
|
|
558
|
+
},
|
|
559
|
+
'broad': {},
|
|
560
|
+
},
|
|
561
|
+
});
|
|
562
|
+
}
|
|
563
|
+
parseOHLCV(ohlcv, market = undefined) {
|
|
564
|
+
//
|
|
565
|
+
// spot:
|
|
566
|
+
//
|
|
567
|
+
// [
|
|
568
|
+
// [
|
|
569
|
+
// "22814.01",
|
|
570
|
+
// "22937.42",
|
|
571
|
+
// "22832.57",
|
|
572
|
+
// "22937.42",
|
|
573
|
+
// "3916.58764051",
|
|
574
|
+
// "0.171199",
|
|
575
|
+
// "2982.64647063",
|
|
576
|
+
// "0.130295",
|
|
577
|
+
// 33,
|
|
578
|
+
// 0,
|
|
579
|
+
// "22877.449915304470460711",
|
|
580
|
+
// "MINUTE_5",
|
|
581
|
+
// 1659664800000,
|
|
582
|
+
// 1659665099999
|
|
583
|
+
// ]
|
|
584
|
+
// ]
|
|
585
|
+
//
|
|
586
|
+
// contract:
|
|
587
|
+
//
|
|
588
|
+
// [
|
|
589
|
+
// "84207.02",
|
|
590
|
+
// "84320.85",
|
|
591
|
+
// "84207.02",
|
|
592
|
+
// "84253.83",
|
|
593
|
+
// "3707.5395",
|
|
594
|
+
// "44",
|
|
595
|
+
// "14",
|
|
596
|
+
// "1740770040000",
|
|
597
|
+
// "1740770099999",
|
|
598
|
+
// ],
|
|
599
|
+
//
|
|
600
|
+
const ohlcvLength = ohlcv.length;
|
|
601
|
+
const isContract = ohlcvLength === 9;
|
|
602
|
+
if (isContract) {
|
|
603
|
+
return [
|
|
604
|
+
this.safeInteger(ohlcv, 7),
|
|
605
|
+
this.safeNumber(ohlcv, 2),
|
|
606
|
+
this.safeNumber(ohlcv, 1),
|
|
607
|
+
this.safeNumber(ohlcv, 0),
|
|
608
|
+
this.safeNumber(ohlcv, 3),
|
|
609
|
+
this.safeNumber(ohlcv, 5),
|
|
610
|
+
];
|
|
611
|
+
}
|
|
612
|
+
return [
|
|
613
|
+
this.safeInteger(ohlcv, 12),
|
|
614
|
+
this.safeNumber(ohlcv, 2),
|
|
615
|
+
this.safeNumber(ohlcv, 1),
|
|
616
|
+
this.safeNumber(ohlcv, 0),
|
|
617
|
+
this.safeNumber(ohlcv, 3),
|
|
618
|
+
this.safeNumber(ohlcv, 5),
|
|
619
|
+
];
|
|
620
|
+
}
|
|
621
|
+
/**
|
|
622
|
+
* @method
|
|
623
|
+
* @name poloniex#fetchOHLCV
|
|
624
|
+
* @description fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
625
|
+
* @see https://api-docs.poloniex.com/spot/api/public/market-data#candles
|
|
626
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/market/get-kline-data
|
|
627
|
+
* @param {string} symbol unified symbol of the market to fetch OHLCV data for
|
|
628
|
+
* @param {string} timeframe the length of time each candle represents
|
|
629
|
+
* @param {int} [since] timestamp in ms of the earliest candle to fetch
|
|
630
|
+
* @param {int} [limit] the maximum amount of candles to fetch
|
|
631
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
632
|
+
* @param {int} [params.until] timestamp in ms
|
|
633
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
634
|
+
* @returns {int[][]} A list of candles ordered as timestamp, open, high, low, close, volume
|
|
635
|
+
*/
|
|
636
|
+
async fetchOHLCV(symbol, timeframe = '1m', since = undefined, limit = undefined, params = {}) {
|
|
637
|
+
await this.loadMarkets();
|
|
638
|
+
let paginate = false;
|
|
639
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchOHLCV', 'paginate', false);
|
|
640
|
+
if (paginate) {
|
|
641
|
+
return await this.fetchPaginatedCallDeterministic('fetchOHLCV', symbol, since, limit, timeframe, params, 500);
|
|
642
|
+
}
|
|
643
|
+
const market = this.market(symbol);
|
|
644
|
+
let request = {
|
|
645
|
+
'symbol': market['id'],
|
|
646
|
+
'interval': this.safeString(this.timeframes, timeframe, timeframe),
|
|
647
|
+
};
|
|
648
|
+
const keyStart = market['spot'] ? 'startTime' : 'sTime';
|
|
649
|
+
const keyEnd = market['spot'] ? 'endTime' : 'eTime';
|
|
650
|
+
if (since !== undefined) {
|
|
651
|
+
request[keyStart] = since;
|
|
652
|
+
}
|
|
653
|
+
if (limit !== undefined) {
|
|
654
|
+
// limit should in between 100 and 500
|
|
655
|
+
request['limit'] = limit;
|
|
656
|
+
}
|
|
657
|
+
[request, params] = this.handleUntilOption(keyEnd, request, params);
|
|
658
|
+
if (market['contract']) {
|
|
659
|
+
if (this.inArray(timeframe, ['10m', '1M'])) {
|
|
660
|
+
throw new NotSupported(this.id + ' ' + timeframe + ' ' + market['type'] + ' fetchOHLCV is not supported');
|
|
661
|
+
}
|
|
662
|
+
const responseRaw = await this.swapPublicGetV3MarketCandles(this.extend(request, params));
|
|
663
|
+
//
|
|
664
|
+
// {
|
|
665
|
+
// code: "200",
|
|
666
|
+
// msg: "Success",
|
|
667
|
+
// data: [
|
|
668
|
+
// [
|
|
669
|
+
// "84207.02",
|
|
670
|
+
// "84320.85",
|
|
671
|
+
// "84207.02",
|
|
672
|
+
// "84253.83",
|
|
673
|
+
// "3707.5395",
|
|
674
|
+
// "44",
|
|
675
|
+
// "14",
|
|
676
|
+
// "1740770040000",
|
|
677
|
+
// "1740770099999",
|
|
678
|
+
// ],
|
|
679
|
+
//
|
|
680
|
+
const data = this.safeList(responseRaw, 'data');
|
|
681
|
+
return this.parseOHLCVs(data, market, timeframe, since, limit);
|
|
682
|
+
}
|
|
683
|
+
const response = await this.publicGetMarketsSymbolCandles(this.extend(request, params));
|
|
684
|
+
//
|
|
685
|
+
// [
|
|
686
|
+
// [
|
|
687
|
+
// "22814.01",
|
|
688
|
+
// "22937.42",
|
|
689
|
+
// "22832.57",
|
|
690
|
+
// "22937.42",
|
|
691
|
+
// "3916.58764051",
|
|
692
|
+
// "0.171199",
|
|
693
|
+
// "2982.64647063",
|
|
694
|
+
// "0.130295",
|
|
695
|
+
// 33,
|
|
696
|
+
// 0,
|
|
697
|
+
// "22877.449915304470460711",
|
|
698
|
+
// "MINUTE_5",
|
|
699
|
+
// 1659664800000,
|
|
700
|
+
// 1659665099999
|
|
701
|
+
// ]
|
|
702
|
+
// ]
|
|
703
|
+
//
|
|
704
|
+
return this.parseOHLCVs(response, market, timeframe, since, limit);
|
|
705
|
+
}
|
|
706
|
+
async loadMarkets(reload = false, params = {}) {
|
|
707
|
+
const markets = await super.loadMarkets(reload, params);
|
|
708
|
+
const currenciesByNumericId = this.safeValue(this.options, 'currenciesByNumericId');
|
|
709
|
+
if ((currenciesByNumericId === undefined) || reload) {
|
|
710
|
+
this.options['currenciesByNumericId'] = this.indexBy(this.currencies, 'numericId');
|
|
711
|
+
}
|
|
712
|
+
return markets;
|
|
713
|
+
}
|
|
714
|
+
/**
|
|
715
|
+
* @method
|
|
716
|
+
* @name poloniex#fetchMarkets
|
|
717
|
+
* @description retrieves data on all markets for poloniex
|
|
718
|
+
* @see https://api-docs.poloniex.com/spot/api/public/reference-data#symbol-information
|
|
719
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/market/get-all-product-info
|
|
720
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
721
|
+
* @returns {object[]} an array of objects representing market data
|
|
722
|
+
*/
|
|
723
|
+
async fetchMarkets(params = {}) {
|
|
724
|
+
const promises = [this.fetchSpotMarkets(params), this.fetchSwapMarkets(params)];
|
|
725
|
+
const results = await Promise.all(promises);
|
|
726
|
+
return this.arrayConcat(results[0], results[1]);
|
|
727
|
+
}
|
|
728
|
+
async fetchSpotMarkets(params = {}) {
|
|
729
|
+
const markets = await this.publicGetMarkets(params);
|
|
730
|
+
//
|
|
731
|
+
// [
|
|
732
|
+
// {
|
|
733
|
+
// "symbol" : "BTS_BTC",
|
|
734
|
+
// "baseCurrencyName" : "BTS",
|
|
735
|
+
// "quoteCurrencyName" : "BTC",
|
|
736
|
+
// "displayName" : "BTS/BTC",
|
|
737
|
+
// "state" : "NORMAL",
|
|
738
|
+
// "visibleStartTime" : 1659018816626,
|
|
739
|
+
// "tradableStartTime" : 1659018816626,
|
|
740
|
+
// "symbolTradeLimit" : {
|
|
741
|
+
// "symbol" : "BTS_BTC",
|
|
742
|
+
// "priceScale" : 10,
|
|
743
|
+
// "quantityScale" : 0,
|
|
744
|
+
// "amountScale" : 8,
|
|
745
|
+
// "minQuantity" : "100",
|
|
746
|
+
// "minAmount" : "0.00001",
|
|
747
|
+
// "highestBid" : "0",
|
|
748
|
+
// "lowestAsk" : "0"
|
|
749
|
+
// }
|
|
750
|
+
// }
|
|
751
|
+
// ]
|
|
752
|
+
//
|
|
753
|
+
return this.parseMarkets(markets);
|
|
754
|
+
}
|
|
755
|
+
async fetchSwapMarkets(params = {}) {
|
|
756
|
+
// do similar as spot per https://api-docs.poloniex.com/v3/futures/api/market/get-product-info
|
|
757
|
+
const response = await this.swapPublicGetV3MarketAllInstruments(params);
|
|
758
|
+
//
|
|
759
|
+
// {
|
|
760
|
+
// "code": "200",
|
|
761
|
+
// "msg": "Success",
|
|
762
|
+
// "data": [
|
|
763
|
+
// {
|
|
764
|
+
// "symbol": "BNB_USDT_PERP",
|
|
765
|
+
// "bAsset": ".PBNBUSDT",
|
|
766
|
+
// "bCcy": "BNB",
|
|
767
|
+
// "qCcy": "USDT",
|
|
768
|
+
// "visibleStartTime": "1620390600000",
|
|
769
|
+
// "tradableStartTime": "1620390600000",
|
|
770
|
+
// "sCcy": "USDT",
|
|
771
|
+
// "tSz": "0.001",
|
|
772
|
+
// "pxScale": "0.001,0.01,0.1,1,10",
|
|
773
|
+
// "lotSz": "1",
|
|
774
|
+
// "minSz": "1",
|
|
775
|
+
// "ctVal": "0.1",
|
|
776
|
+
// "status": "OPEN",
|
|
777
|
+
// "oDate": "1620287590000",
|
|
778
|
+
// "maxPx": "1000000",
|
|
779
|
+
// "minPx": "0.001",
|
|
780
|
+
// "maxQty": "1000000",
|
|
781
|
+
// "minQty": "1",
|
|
782
|
+
// "maxLever": "50",
|
|
783
|
+
// "lever": "10",
|
|
784
|
+
// "ctType": "LINEAR",
|
|
785
|
+
// "alias": "",
|
|
786
|
+
// "iM": "0.02",
|
|
787
|
+
// "mM": "0.0115",
|
|
788
|
+
// "mR": "2000",
|
|
789
|
+
// "buyLmt": "",
|
|
790
|
+
// "sellLmt": "",
|
|
791
|
+
// "ordPxRange": "0.05",
|
|
792
|
+
// "marketMaxQty": "2800",
|
|
793
|
+
// "limitMaxQty": "1000000"
|
|
794
|
+
// },
|
|
795
|
+
//
|
|
796
|
+
const markets = this.safeList(response, 'data');
|
|
797
|
+
return this.parseMarkets(markets);
|
|
798
|
+
}
|
|
799
|
+
parseMarket(market) {
|
|
800
|
+
if ('ctType' in market) {
|
|
801
|
+
return this.parseSwapMarket(market);
|
|
802
|
+
}
|
|
803
|
+
else {
|
|
804
|
+
return this.parseSpotMarket(market);
|
|
805
|
+
}
|
|
806
|
+
}
|
|
807
|
+
parseSpotMarket(market) {
|
|
808
|
+
const id = this.safeString(market, 'symbol');
|
|
809
|
+
const baseId = this.safeString(market, 'baseCurrencyName');
|
|
810
|
+
const quoteId = this.safeString(market, 'quoteCurrencyName');
|
|
811
|
+
const base = this.safeCurrencyCode(baseId);
|
|
812
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
813
|
+
const state = this.safeString(market, 'state');
|
|
814
|
+
const active = state === 'NORMAL';
|
|
815
|
+
const symbolTradeLimit = this.safeValue(market, 'symbolTradeLimit');
|
|
816
|
+
// these are known defaults
|
|
817
|
+
return {
|
|
818
|
+
'id': id,
|
|
819
|
+
'symbol': base + '/' + quote,
|
|
820
|
+
'base': base,
|
|
821
|
+
'quote': quote,
|
|
822
|
+
'settle': undefined,
|
|
823
|
+
'baseId': baseId,
|
|
824
|
+
'quoteId': quoteId,
|
|
825
|
+
'settleId': undefined,
|
|
826
|
+
'type': 'spot',
|
|
827
|
+
'spot': true,
|
|
828
|
+
'margin': false,
|
|
829
|
+
'swap': false,
|
|
830
|
+
'future': false,
|
|
831
|
+
'option': false,
|
|
832
|
+
'active': active,
|
|
833
|
+
'contract': false,
|
|
834
|
+
'linear': undefined,
|
|
835
|
+
'inverse': undefined,
|
|
836
|
+
'contractSize': undefined,
|
|
837
|
+
'expiry': undefined,
|
|
838
|
+
'expiryDatetime': undefined,
|
|
839
|
+
'strike': undefined,
|
|
840
|
+
'optionType': undefined,
|
|
841
|
+
'precision': {
|
|
842
|
+
'amount': this.parseNumber(this.parsePrecision(this.safeString(symbolTradeLimit, 'quantityScale'))),
|
|
843
|
+
'price': this.parseNumber(this.parsePrecision(this.safeString(symbolTradeLimit, 'priceScale'))),
|
|
844
|
+
},
|
|
845
|
+
'limits': {
|
|
846
|
+
'amount': {
|
|
847
|
+
'min': this.safeNumber(symbolTradeLimit, 'minQuantity'),
|
|
848
|
+
'max': undefined,
|
|
849
|
+
},
|
|
850
|
+
'price': {
|
|
851
|
+
'min': undefined,
|
|
852
|
+
'max': undefined,
|
|
853
|
+
},
|
|
854
|
+
'cost': {
|
|
855
|
+
'min': this.safeNumber(symbolTradeLimit, 'minAmount'),
|
|
856
|
+
'max': undefined,
|
|
857
|
+
},
|
|
858
|
+
},
|
|
859
|
+
'created': this.safeInteger(market, 'tradableStartTime'),
|
|
860
|
+
'info': market,
|
|
861
|
+
};
|
|
862
|
+
}
|
|
863
|
+
parseSwapMarket(market) {
|
|
864
|
+
//
|
|
865
|
+
// {
|
|
866
|
+
// "symbol": "BNB_USDT_PERP",
|
|
867
|
+
// "bAsset": ".PBNBUSDT",
|
|
868
|
+
// "bCcy": "BNB",
|
|
869
|
+
// "qCcy": "USDT",
|
|
870
|
+
// "visibleStartTime": "1620390600000",
|
|
871
|
+
// "tradableStartTime": "1620390600000",
|
|
872
|
+
// "sCcy": "USDT",
|
|
873
|
+
// "tSz": "0.001",
|
|
874
|
+
// "pxScale": "0.001,0.01,0.1,1,10",
|
|
875
|
+
// "lotSz": "1",
|
|
876
|
+
// "minSz": "1",
|
|
877
|
+
// "ctVal": "0.1",
|
|
878
|
+
// "status": "OPEN",
|
|
879
|
+
// "oDate": "1620287590000",
|
|
880
|
+
// "maxPx": "1000000",
|
|
881
|
+
// "minPx": "0.001",
|
|
882
|
+
// "maxQty": "1000000",
|
|
883
|
+
// "minQty": "1",
|
|
884
|
+
// "maxLever": "50",
|
|
885
|
+
// "lever": "10",
|
|
886
|
+
// "ctType": "LINEAR",
|
|
887
|
+
// "alias": "",
|
|
888
|
+
// "iM": "0.02",
|
|
889
|
+
// "mM": "0.0115",
|
|
890
|
+
// "mR": "2000",
|
|
891
|
+
// "buyLmt": "",
|
|
892
|
+
// "sellLmt": "",
|
|
893
|
+
// "ordPxRange": "0.05",
|
|
894
|
+
// "marketMaxQty": "2800",
|
|
895
|
+
// "limitMaxQty": "1000000"
|
|
896
|
+
// },
|
|
897
|
+
//
|
|
898
|
+
const id = this.safeString(market, 'symbol');
|
|
899
|
+
const baseId = this.safeString(market, 'bCcy');
|
|
900
|
+
const quoteId = this.safeString(market, 'qCcy');
|
|
901
|
+
const settleId = this.safeString(market, 'sCcy');
|
|
902
|
+
const base = this.safeCurrencyCode(baseId);
|
|
903
|
+
const quote = this.safeCurrencyCode(quoteId);
|
|
904
|
+
const settle = this.safeCurrencyCode(settleId);
|
|
905
|
+
const status = this.safeString(market, 'status');
|
|
906
|
+
const active = status === 'OPEN';
|
|
907
|
+
const linear = market['ctType'] === 'LINEAR';
|
|
908
|
+
let symbol = base + '/' + quote;
|
|
909
|
+
if (linear) {
|
|
910
|
+
symbol += ':' + settle;
|
|
911
|
+
}
|
|
912
|
+
else {
|
|
913
|
+
// actually, exchange does not have any inverse future now
|
|
914
|
+
symbol += ':' + base;
|
|
915
|
+
}
|
|
916
|
+
const alias = this.safeString(market, 'alias');
|
|
917
|
+
let type = 'swap';
|
|
918
|
+
if (alias !== undefined) {
|
|
919
|
+
type = 'future';
|
|
920
|
+
}
|
|
921
|
+
return {
|
|
922
|
+
'id': id,
|
|
923
|
+
'symbol': symbol,
|
|
924
|
+
'base': base,
|
|
925
|
+
'quote': quote,
|
|
926
|
+
'settle': settle,
|
|
927
|
+
'baseId': baseId,
|
|
928
|
+
'quoteId': quoteId,
|
|
929
|
+
'settleId': settleId,
|
|
930
|
+
'type': (type === 'future') ? 'future' : 'swap',
|
|
931
|
+
'spot': false,
|
|
932
|
+
'margin': false,
|
|
933
|
+
'swap': type === 'swap',
|
|
934
|
+
'future': type === 'future',
|
|
935
|
+
'option': false,
|
|
936
|
+
'active': active,
|
|
937
|
+
'contract': true,
|
|
938
|
+
'linear': linear,
|
|
939
|
+
'inverse': !linear,
|
|
940
|
+
'contractSize': this.safeNumber(market, 'ctVal'),
|
|
941
|
+
'expiry': undefined,
|
|
942
|
+
'expiryDatetime': undefined,
|
|
943
|
+
'strike': undefined,
|
|
944
|
+
'optionType': undefined,
|
|
945
|
+
'taker': this.safeNumber(market, 'tFee'),
|
|
946
|
+
'maker': this.safeNumber(market, 'mFee'),
|
|
947
|
+
'precision': {
|
|
948
|
+
'amount': this.safeNumber(market, 'lotSz'),
|
|
949
|
+
'price': this.safeNumber(market, 'tSz'),
|
|
950
|
+
},
|
|
951
|
+
'limits': {
|
|
952
|
+
'amount': {
|
|
953
|
+
'min': this.safeNumber(market, 'minSz'),
|
|
954
|
+
'max': this.safeNumber(market, 'limitMaxQty'),
|
|
955
|
+
},
|
|
956
|
+
'price': {
|
|
957
|
+
'min': this.safeNumber(market, 'minPx'),
|
|
958
|
+
'max': this.safeNumber(market, 'maxPx'),
|
|
959
|
+
},
|
|
960
|
+
'cost': {
|
|
961
|
+
'min': undefined,
|
|
962
|
+
'max': undefined,
|
|
963
|
+
},
|
|
964
|
+
'leverage': {
|
|
965
|
+
'max': this.safeNumber(market, 'maxLever'),
|
|
966
|
+
'min': undefined,
|
|
967
|
+
},
|
|
968
|
+
},
|
|
969
|
+
'created': this.safeInteger(market, 'oDate'),
|
|
970
|
+
'info': market,
|
|
971
|
+
};
|
|
972
|
+
}
|
|
973
|
+
/**
|
|
974
|
+
* @method
|
|
975
|
+
* @name poloniex#fetchTime
|
|
976
|
+
* @description fetches the current integer timestamp in milliseconds from the exchange server
|
|
977
|
+
* @see https://api-docs.poloniex.com/spot/api/public/reference-data#system-timestamp
|
|
978
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
979
|
+
* @returns {int} the current integer timestamp in milliseconds from the exchange server
|
|
980
|
+
*/
|
|
981
|
+
async fetchTime(params = {}) {
|
|
982
|
+
const response = await this.publicGetTimestamp(params);
|
|
983
|
+
return this.safeInteger(response, 'serverTime');
|
|
984
|
+
}
|
|
985
|
+
parseTicker(ticker, market = undefined) {
|
|
986
|
+
//
|
|
987
|
+
// spot:
|
|
988
|
+
//
|
|
989
|
+
// {
|
|
990
|
+
// "symbol" : "BTC_USDT",
|
|
991
|
+
// "open" : "26053.33",
|
|
992
|
+
// "low" : "26053.33",
|
|
993
|
+
// "high" : "26798.02",
|
|
994
|
+
// "close" : "26447.58",
|
|
995
|
+
// "quantity" : "6116.210188",
|
|
996
|
+
// "amount" : "161082122.88450926",
|
|
997
|
+
// "tradeCount" : "134709",
|
|
998
|
+
// "startTime" : "1692784440000",
|
|
999
|
+
// "closeTime" : "1692870839630",
|
|
1000
|
+
// "displayName" : "BTC/USDT",
|
|
1001
|
+
// "dailyChange" : "0.0151",
|
|
1002
|
+
// "bid" : "26447.57",
|
|
1003
|
+
// "bidQuantity" : "0.016313",
|
|
1004
|
+
// "ask" : "26447.58",
|
|
1005
|
+
// "askQuantity" : "0.068307",
|
|
1006
|
+
// "ts" : "1692870845446",
|
|
1007
|
+
// "markPrice" : "26444.11"
|
|
1008
|
+
// }
|
|
1009
|
+
//
|
|
1010
|
+
// swap:
|
|
1011
|
+
//
|
|
1012
|
+
// {
|
|
1013
|
+
// "s": "XRP_USDT_PERP",
|
|
1014
|
+
// "o": "2.0503",
|
|
1015
|
+
// "l": "2.0066",
|
|
1016
|
+
// "h": "2.216",
|
|
1017
|
+
// "c": "2.1798",
|
|
1018
|
+
// "qty": "21090",
|
|
1019
|
+
// "amt": "451339.65",
|
|
1020
|
+
// "tC": "3267",
|
|
1021
|
+
// "sT": "1740736380000",
|
|
1022
|
+
// "cT": "1740822777559",
|
|
1023
|
+
// "dN": "XRP/USDT/PERP",
|
|
1024
|
+
// "dC": "0.0632",
|
|
1025
|
+
// "bPx": "2.175",
|
|
1026
|
+
// "bSz": "3",
|
|
1027
|
+
// "aPx": "2.1831",
|
|
1028
|
+
// "aSz": "111",
|
|
1029
|
+
// "mPx": "2.1798",
|
|
1030
|
+
// "iPx": "2.1834"
|
|
1031
|
+
// },
|
|
1032
|
+
//
|
|
1033
|
+
const timestamp = this.safeInteger2(ticker, 'ts', 'cT');
|
|
1034
|
+
const marketId = this.safeString2(ticker, 'symbol', 's');
|
|
1035
|
+
market = this.safeMarket(marketId);
|
|
1036
|
+
const relativeChange = this.safeString2(ticker, 'dailyChange', 'dc');
|
|
1037
|
+
const percentage = Precise.stringMul(relativeChange, '100');
|
|
1038
|
+
return this.safeTicker({
|
|
1039
|
+
'id': marketId,
|
|
1040
|
+
'symbol': market['symbol'],
|
|
1041
|
+
'timestamp': timestamp,
|
|
1042
|
+
'datetime': this.iso8601(timestamp),
|
|
1043
|
+
'high': this.safeString2(ticker, 'high', 'h'),
|
|
1044
|
+
'low': this.safeString2(ticker, 'low', 'l'),
|
|
1045
|
+
'bid': this.safeString2(ticker, 'bid', 'bPx'),
|
|
1046
|
+
'bidVolume': this.safeString2(ticker, 'bidQuantity', 'bSz'),
|
|
1047
|
+
'ask': this.safeString2(ticker, 'ask', 'aPx'),
|
|
1048
|
+
'askVolume': this.safeString2(ticker, 'askQuantity', 'aSz'),
|
|
1049
|
+
'vwap': undefined,
|
|
1050
|
+
'open': this.safeString2(ticker, 'open', 'o'),
|
|
1051
|
+
'close': this.safeString2(ticker, 'close', 'c'),
|
|
1052
|
+
'previousClose': undefined,
|
|
1053
|
+
'change': undefined,
|
|
1054
|
+
'percentage': percentage,
|
|
1055
|
+
'average': undefined,
|
|
1056
|
+
'baseVolume': this.safeString2(ticker, 'quantity', 'qty'),
|
|
1057
|
+
'quoteVolume': this.safeString2(ticker, 'amount', 'amt'),
|
|
1058
|
+
'markPrice': this.safeString2(ticker, 'markPrice', 'mPx'),
|
|
1059
|
+
'indexPrice': this.safeString(ticker, 'iPx'),
|
|
1060
|
+
'info': ticker,
|
|
1061
|
+
}, market);
|
|
1062
|
+
}
|
|
1063
|
+
/**
|
|
1064
|
+
* @method
|
|
1065
|
+
* @name poloniex#fetchTickers
|
|
1066
|
+
* @description fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
1067
|
+
* @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
|
|
1068
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
|
|
1069
|
+
* @param {string[]|undefined} symbols unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
1070
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1071
|
+
* @returns {object} a dictionary of [ticker structures]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
1072
|
+
*/
|
|
1073
|
+
async fetchTickers(symbols = undefined, params = {}) {
|
|
1074
|
+
await this.loadMarkets();
|
|
1075
|
+
let market = undefined;
|
|
1076
|
+
const request = {};
|
|
1077
|
+
if (symbols !== undefined) {
|
|
1078
|
+
symbols = this.marketSymbols(symbols, undefined, true, true, false);
|
|
1079
|
+
const symbolsLength = symbols.length;
|
|
1080
|
+
if (symbolsLength > 0) {
|
|
1081
|
+
market = this.market(symbols[0]);
|
|
1082
|
+
if (symbolsLength === 1) {
|
|
1083
|
+
request['symbol'] = market['id'];
|
|
1084
|
+
}
|
|
1085
|
+
}
|
|
1086
|
+
}
|
|
1087
|
+
let marketType = undefined;
|
|
1088
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchTickers', market, params);
|
|
1089
|
+
if (marketType === 'swap') {
|
|
1090
|
+
const responseRaw = await this.swapPublicGetV3MarketTickers(this.extend(request, params));
|
|
1091
|
+
//
|
|
1092
|
+
// {
|
|
1093
|
+
// "code": "200",
|
|
1094
|
+
// "msg": "Success",
|
|
1095
|
+
// "data": [
|
|
1096
|
+
// {
|
|
1097
|
+
// "s": "XRP_USDT_PERP",
|
|
1098
|
+
// "o": "2.0503",
|
|
1099
|
+
// "l": "2.0066",
|
|
1100
|
+
// "h": "2.216",
|
|
1101
|
+
// "c": "2.1798",
|
|
1102
|
+
// "qty": "21090",
|
|
1103
|
+
// "amt": "451339.65",
|
|
1104
|
+
// "tC": "3267",
|
|
1105
|
+
// "sT": "1740736380000",
|
|
1106
|
+
// "cT": "1740822777559",
|
|
1107
|
+
// "dN": "XRP/USDT/PERP",
|
|
1108
|
+
// "dC": "0.0632",
|
|
1109
|
+
// "bPx": "2.175",
|
|
1110
|
+
// "bSz": "3",
|
|
1111
|
+
// "aPx": "2.1831",
|
|
1112
|
+
// "aSz": "111",
|
|
1113
|
+
// "mPx": "2.1798",
|
|
1114
|
+
// "iPx": "2.1834"
|
|
1115
|
+
// },
|
|
1116
|
+
//
|
|
1117
|
+
const data = this.safeList(responseRaw, 'data');
|
|
1118
|
+
return this.parseTickers(data, symbols);
|
|
1119
|
+
}
|
|
1120
|
+
const response = await this.publicGetMarketsTicker24h(params);
|
|
1121
|
+
//
|
|
1122
|
+
// [
|
|
1123
|
+
// {
|
|
1124
|
+
// "symbol" : "BTC_USDT",
|
|
1125
|
+
// "open" : "26053.33",
|
|
1126
|
+
// "low" : "26053.33",
|
|
1127
|
+
// "high" : "26798.02",
|
|
1128
|
+
// "close" : "26447.58",
|
|
1129
|
+
// "quantity" : "6116.210188",
|
|
1130
|
+
// "amount" : "161082122.88450926",
|
|
1131
|
+
// "tradeCount" : "134709",
|
|
1132
|
+
// "startTime" : "1692784440000",
|
|
1133
|
+
// "closeTime" : "1692870839630",
|
|
1134
|
+
// "displayName" : "BTC/USDT",
|
|
1135
|
+
// "dailyChange" : "0.0151",
|
|
1136
|
+
// "bid" : "26447.57",
|
|
1137
|
+
// "bidQuantity" : "0.016313",
|
|
1138
|
+
// "ask" : "26447.58",
|
|
1139
|
+
// "askQuantity" : "0.068307",
|
|
1140
|
+
// "ts" : "1692870845446",
|
|
1141
|
+
// "markPrice" : "26444.11"
|
|
1142
|
+
// }
|
|
1143
|
+
// ]
|
|
1144
|
+
//
|
|
1145
|
+
return this.parseTickers(response, symbols);
|
|
1146
|
+
}
|
|
1147
|
+
/**
|
|
1148
|
+
* @method
|
|
1149
|
+
* @name poloniex#fetchCurrencies
|
|
1150
|
+
* @description fetches all available currencies on an exchange
|
|
1151
|
+
* @see https://api-docs.poloniex.com/spot/api/public/reference-data#currency-information
|
|
1152
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1153
|
+
* @returns {object} an associative dictionary of currencies
|
|
1154
|
+
*/
|
|
1155
|
+
async fetchCurrencies(params = {}) {
|
|
1156
|
+
const response = await this.publicGetCurrencies(this.extend(params, { 'includeMultiChainCurrencies': true }));
|
|
1157
|
+
//
|
|
1158
|
+
// [
|
|
1159
|
+
// {
|
|
1160
|
+
// "USDT": {
|
|
1161
|
+
// "id": 214,
|
|
1162
|
+
// "name": "Tether USD",
|
|
1163
|
+
// "description": "Sweep to Main Account",
|
|
1164
|
+
// "type": "address",
|
|
1165
|
+
// "withdrawalFee": "0.00000000",
|
|
1166
|
+
// "minConf": 2,
|
|
1167
|
+
// "depositAddress": null,
|
|
1168
|
+
// "blockchain": "OMNI",
|
|
1169
|
+
// "delisted": false,
|
|
1170
|
+
// "tradingState": "NORMAL",
|
|
1171
|
+
// "walletState": "DISABLED",
|
|
1172
|
+
// "walletDepositState": "DISABLED",
|
|
1173
|
+
// "walletWithdrawalState": "DISABLED",
|
|
1174
|
+
// "supportCollateral": true,
|
|
1175
|
+
// "supportBorrow": true,
|
|
1176
|
+
// "parentChain": null,
|
|
1177
|
+
// "isMultiChain": true,
|
|
1178
|
+
// "isChildChain": false,
|
|
1179
|
+
// "childChains": [
|
|
1180
|
+
// "USDTBSC",
|
|
1181
|
+
// "USDTETH",
|
|
1182
|
+
// "USDTSOL",
|
|
1183
|
+
// "USDTTRON"
|
|
1184
|
+
// ]
|
|
1185
|
+
// }
|
|
1186
|
+
// },
|
|
1187
|
+
// ...
|
|
1188
|
+
// {
|
|
1189
|
+
// "USDTBSC": {
|
|
1190
|
+
// "id": 582,
|
|
1191
|
+
// "name": "Binance-Peg BSC-USD",
|
|
1192
|
+
// "description": "Sweep to Main Account",
|
|
1193
|
+
// "type": "address",
|
|
1194
|
+
// "withdrawalFee": "0.00000000",
|
|
1195
|
+
// "minConf": 15,
|
|
1196
|
+
// "depositAddress": null,
|
|
1197
|
+
// "blockchain": "BSC",
|
|
1198
|
+
// "delisted": false,
|
|
1199
|
+
// "tradingState": "OFFLINE",
|
|
1200
|
+
// "walletState": "ENABLED",
|
|
1201
|
+
// "walletDepositState": "ENABLED",
|
|
1202
|
+
// "walletWithdrawalState": "DISABLED",
|
|
1203
|
+
// "supportCollateral": false,
|
|
1204
|
+
// "supportBorrow": false,
|
|
1205
|
+
// "parentChain": "USDT",
|
|
1206
|
+
// "isMultiChain": true,
|
|
1207
|
+
// "isChildChain": true,
|
|
1208
|
+
// "childChains": []
|
|
1209
|
+
// }
|
|
1210
|
+
// },
|
|
1211
|
+
// ...
|
|
1212
|
+
// ]
|
|
1213
|
+
//
|
|
1214
|
+
const result = {};
|
|
1215
|
+
// poloniex has a complicated structure of currencies, so we handle them differently
|
|
1216
|
+
// at first, turn the response into a normal dictionary
|
|
1217
|
+
const currenciesDict = {};
|
|
1218
|
+
for (let i = 0; i < response.length; i++) {
|
|
1219
|
+
const item = this.safeDict(response, i);
|
|
1220
|
+
const ids = Object.keys(item);
|
|
1221
|
+
const id = this.safeString(ids, 0);
|
|
1222
|
+
currenciesDict[id] = item[id];
|
|
1223
|
+
}
|
|
1224
|
+
const keys = Object.keys(currenciesDict);
|
|
1225
|
+
for (let i = 0; i < keys.length; i++) {
|
|
1226
|
+
const id = keys[i];
|
|
1227
|
+
const entry = currenciesDict[id];
|
|
1228
|
+
const code = this.safeCurrencyCode(id);
|
|
1229
|
+
// skip childChains, as they are collected in parentChain loop
|
|
1230
|
+
if (this.safeBool(entry, 'isChildChain')) {
|
|
1231
|
+
continue;
|
|
1232
|
+
}
|
|
1233
|
+
const allChainEntries = [];
|
|
1234
|
+
const childChains = this.safeList(entry, 'childChains', []);
|
|
1235
|
+
if (childChains !== undefined) {
|
|
1236
|
+
for (let j = 0; j < childChains.length; j++) {
|
|
1237
|
+
const childChainId = childChains[j];
|
|
1238
|
+
const childNetworkEntry = this.safeDict(currenciesDict, childChainId);
|
|
1239
|
+
allChainEntries.push(childNetworkEntry);
|
|
1240
|
+
}
|
|
1241
|
+
}
|
|
1242
|
+
allChainEntries.push(entry);
|
|
1243
|
+
const networks = {};
|
|
1244
|
+
for (let j = 0; j < allChainEntries.length; j++) {
|
|
1245
|
+
const chainEntry = allChainEntries[j];
|
|
1246
|
+
const networkName = this.safeString(chainEntry, 'blockchain');
|
|
1247
|
+
const networkCode = this.networkIdToCode(networkName, code);
|
|
1248
|
+
const specialNetworkId = this.safeString(childChains, j, id); // in case it's primary chain, defeault to ID
|
|
1249
|
+
networks[networkCode] = {
|
|
1250
|
+
'info': chainEntry,
|
|
1251
|
+
'id': specialNetworkId,
|
|
1252
|
+
'numericId': this.safeInteger(chainEntry, 'id'),
|
|
1253
|
+
'network': networkCode,
|
|
1254
|
+
'active': this.safeBool(chainEntry, 'walletState'),
|
|
1255
|
+
'deposit': this.safeString(chainEntry, 'walletDepositState') === 'ENABLED',
|
|
1256
|
+
'withdraw': this.safeString(chainEntry, 'walletWithdrawalState') === 'ENABLED',
|
|
1257
|
+
'fee': this.safeNumber(chainEntry, 'withdrawalFee'),
|
|
1258
|
+
'precision': undefined,
|
|
1259
|
+
'limits': {
|
|
1260
|
+
'withdraw': {
|
|
1261
|
+
'min': undefined,
|
|
1262
|
+
'max': undefined,
|
|
1263
|
+
},
|
|
1264
|
+
'deposit': {
|
|
1265
|
+
'min': undefined,
|
|
1266
|
+
'max': undefined,
|
|
1267
|
+
},
|
|
1268
|
+
},
|
|
1269
|
+
};
|
|
1270
|
+
}
|
|
1271
|
+
result[code] = this.safeCurrencyStructure({
|
|
1272
|
+
'info': entry,
|
|
1273
|
+
'code': code,
|
|
1274
|
+
'id': id,
|
|
1275
|
+
'numericId': this.safeInteger(entry, 'id'),
|
|
1276
|
+
'type': 'crypto',
|
|
1277
|
+
'name': this.safeString(entry, 'name'),
|
|
1278
|
+
'active': undefined,
|
|
1279
|
+
'deposit': undefined,
|
|
1280
|
+
'withdraw': undefined,
|
|
1281
|
+
'fee': undefined,
|
|
1282
|
+
'precision': undefined,
|
|
1283
|
+
'limits': {
|
|
1284
|
+
'amount': {
|
|
1285
|
+
'min': undefined,
|
|
1286
|
+
'max': undefined,
|
|
1287
|
+
},
|
|
1288
|
+
'withdraw': {
|
|
1289
|
+
'min': undefined,
|
|
1290
|
+
'max': undefined,
|
|
1291
|
+
},
|
|
1292
|
+
'deposit': {
|
|
1293
|
+
'min': undefined,
|
|
1294
|
+
'max': undefined,
|
|
1295
|
+
},
|
|
1296
|
+
},
|
|
1297
|
+
'networks': networks,
|
|
1298
|
+
});
|
|
1299
|
+
}
|
|
1300
|
+
return result;
|
|
1301
|
+
}
|
|
1302
|
+
/**
|
|
1303
|
+
* @method
|
|
1304
|
+
* @name poloniex#fetchTicker
|
|
1305
|
+
* @description fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
1306
|
+
* @see https://api-docs.poloniex.com/spot/api/public/market-data#ticker
|
|
1307
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/market/get-market-info
|
|
1308
|
+
* @param {string} symbol unified symbol of the market to fetch the ticker for
|
|
1309
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1310
|
+
* @returns {object} a [ticker structure]{@link https://docs.ccxt.com/#/?id=ticker-structure}
|
|
1311
|
+
*/
|
|
1312
|
+
async fetchTicker(symbol, params = {}) {
|
|
1313
|
+
await this.loadMarkets();
|
|
1314
|
+
const market = this.market(symbol);
|
|
1315
|
+
const request = {
|
|
1316
|
+
'symbol': market['id'],
|
|
1317
|
+
};
|
|
1318
|
+
if (market['contract']) {
|
|
1319
|
+
const tickers = await this.fetchTickers([market['symbol']], params);
|
|
1320
|
+
return this.safeDict(tickers, symbol);
|
|
1321
|
+
}
|
|
1322
|
+
const response = await this.publicGetMarketsSymbolTicker24h(this.extend(request, params));
|
|
1323
|
+
//
|
|
1324
|
+
// {
|
|
1325
|
+
// "symbol" : "BTC_USDT",
|
|
1326
|
+
// "open" : "26053.33",
|
|
1327
|
+
// "low" : "26053.33",
|
|
1328
|
+
// "high" : "26798.02",
|
|
1329
|
+
// "close" : "26447.58",
|
|
1330
|
+
// "quantity" : "6116.210188",
|
|
1331
|
+
// "amount" : "161082122.88450926",
|
|
1332
|
+
// "tradeCount" : "134709",
|
|
1333
|
+
// "startTime" : "1692784440000",
|
|
1334
|
+
// "closeTime" : "1692870839630",
|
|
1335
|
+
// "displayName" : "BTC/USDT",
|
|
1336
|
+
// "dailyChange" : "0.0151",
|
|
1337
|
+
// "bid" : "26447.57",
|
|
1338
|
+
// "bidQuantity" : "0.016313",
|
|
1339
|
+
// "ask" : "26447.58",
|
|
1340
|
+
// "askQuantity" : "0.068307",
|
|
1341
|
+
// "ts" : "1692870845446",
|
|
1342
|
+
// "markPrice" : "26444.11"
|
|
1343
|
+
// }
|
|
1344
|
+
//
|
|
1345
|
+
return this.parseTicker(response, market);
|
|
1346
|
+
}
|
|
1347
|
+
parseTrade(trade, market = undefined) {
|
|
1348
|
+
//
|
|
1349
|
+
// fetchTrades
|
|
1350
|
+
//
|
|
1351
|
+
// spot:
|
|
1352
|
+
//
|
|
1353
|
+
// {
|
|
1354
|
+
// "id" : "60014521",
|
|
1355
|
+
// "price" : "23162.94",
|
|
1356
|
+
// "quantity" : "0.00009",
|
|
1357
|
+
// "amount" : "2.0846646",
|
|
1358
|
+
// "takerSide" : "SELL",
|
|
1359
|
+
// "ts" : 1659684602042,
|
|
1360
|
+
// "createTime" : 1659684602036
|
|
1361
|
+
// }
|
|
1362
|
+
//
|
|
1363
|
+
// swap:
|
|
1364
|
+
//
|
|
1365
|
+
// {
|
|
1366
|
+
// "id": "105807376",
|
|
1367
|
+
// "side": "buy",
|
|
1368
|
+
// "px": "84410.57",
|
|
1369
|
+
// "qty": "1",
|
|
1370
|
+
// "amt": "84.41057",
|
|
1371
|
+
// "cT": "1740777563557",
|
|
1372
|
+
// }
|
|
1373
|
+
//
|
|
1374
|
+
// fetchMyTrades
|
|
1375
|
+
//
|
|
1376
|
+
// spot:
|
|
1377
|
+
//
|
|
1378
|
+
// {
|
|
1379
|
+
// "id": "32164924331503616",
|
|
1380
|
+
// "symbol": "LINK_USDT",
|
|
1381
|
+
// "accountType": "SPOT",
|
|
1382
|
+
// "orderId": "32164923987566592",
|
|
1383
|
+
// "side": "SELL",
|
|
1384
|
+
// "type": "MARKET",
|
|
1385
|
+
// "matchRole": "TAKER",
|
|
1386
|
+
// "createTime": 1648635115525,
|
|
1387
|
+
// "price": "11",
|
|
1388
|
+
// "quantity": "0.5",
|
|
1389
|
+
// "amount": "5.5",
|
|
1390
|
+
// "feeCurrency": "USDT",
|
|
1391
|
+
// "feeAmount": "0.007975",
|
|
1392
|
+
// "pageId": "32164924331503616",
|
|
1393
|
+
// "clientOrderId": "myOwnId-321"
|
|
1394
|
+
// }
|
|
1395
|
+
//
|
|
1396
|
+
// swap:
|
|
1397
|
+
//
|
|
1398
|
+
// {
|
|
1399
|
+
// "symbol": "BTC_USDT_PERP",
|
|
1400
|
+
// "trdId": "105813553",
|
|
1401
|
+
// "side": "SELL",
|
|
1402
|
+
// "type": "TRADE",
|
|
1403
|
+
// "mgnMode": "CROSS",
|
|
1404
|
+
// "ordType": "MARKET",
|
|
1405
|
+
// "clOrdId": "polo418912106147315112",
|
|
1406
|
+
// "role": "TAKER",
|
|
1407
|
+
// "px": "84704.9",
|
|
1408
|
+
// "qty": "1",
|
|
1409
|
+
// "cTime": "1740842829430",
|
|
1410
|
+
// "uTime": "1740842829450",
|
|
1411
|
+
// "feeCcy": "USDT",
|
|
1412
|
+
// "feeAmt": "0.04235245",
|
|
1413
|
+
// "deductCcy": "",
|
|
1414
|
+
// "deductAmt": "0",
|
|
1415
|
+
// "feeRate": "0.0005",
|
|
1416
|
+
// "id": "418912106342654592",
|
|
1417
|
+
// "posSide": "BOTH",
|
|
1418
|
+
// "ordId": "418912106147315112",
|
|
1419
|
+
// "qCcy": "USDT",
|
|
1420
|
+
// "value": "84.7049",
|
|
1421
|
+
// "actType": "TRADING"
|
|
1422
|
+
// },
|
|
1423
|
+
//
|
|
1424
|
+
// fetchOrderTrades (taker trades)
|
|
1425
|
+
//
|
|
1426
|
+
// {
|
|
1427
|
+
// "id": "30341456333942784",
|
|
1428
|
+
// "symbol": "LINK_USDT",
|
|
1429
|
+
// "accountType": "SPOT",
|
|
1430
|
+
// "orderId": "30249408733945856",
|
|
1431
|
+
// "side": "BUY",
|
|
1432
|
+
// "type": "LIMIT",
|
|
1433
|
+
// "matchRole": "MAKER",
|
|
1434
|
+
// "createTime": 1648200366864,
|
|
1435
|
+
// "price": "3.1",
|
|
1436
|
+
// "quantity": "1",
|
|
1437
|
+
// "amount": "3.1",
|
|
1438
|
+
// "feeCurrency": "LINK",
|
|
1439
|
+
// "feeAmount": "0.00145",
|
|
1440
|
+
// "pageId": "30341456333942784",
|
|
1441
|
+
// "clientOrderId": ""
|
|
1442
|
+
// }
|
|
1443
|
+
//
|
|
1444
|
+
const id = this.safeStringN(trade, ['id', 'tradeID', 'trdId']);
|
|
1445
|
+
const orderId = this.safeString2(trade, 'orderId', 'ordId');
|
|
1446
|
+
const timestamp = this.safeIntegerN(trade, ['ts', 'createTime', 'cT', 'cTime']);
|
|
1447
|
+
const marketId = this.safeString(trade, 'symbol');
|
|
1448
|
+
market = this.safeMarket(marketId, market, '_');
|
|
1449
|
+
const symbol = market['symbol'];
|
|
1450
|
+
const side = this.safeStringLower2(trade, 'side', 'takerSide');
|
|
1451
|
+
let fee = undefined;
|
|
1452
|
+
const priceString = this.safeString2(trade, 'price', 'px');
|
|
1453
|
+
const amountString = this.safeString2(trade, 'quantity', 'qty');
|
|
1454
|
+
const costString = this.safeString2(trade, 'amount', 'amt');
|
|
1455
|
+
const feeCurrencyId = this.safeString2(trade, 'feeCurrency', 'feeCcy');
|
|
1456
|
+
const feeCostString = this.safeString2(trade, 'feeAmount', 'feeAmt');
|
|
1457
|
+
if (feeCostString !== undefined) {
|
|
1458
|
+
const feeCurrencyCode = this.safeCurrencyCode(feeCurrencyId);
|
|
1459
|
+
fee = {
|
|
1460
|
+
'cost': feeCostString,
|
|
1461
|
+
'currency': feeCurrencyCode,
|
|
1462
|
+
};
|
|
1463
|
+
}
|
|
1464
|
+
return this.safeTrade({
|
|
1465
|
+
'id': id,
|
|
1466
|
+
'info': trade,
|
|
1467
|
+
'timestamp': timestamp,
|
|
1468
|
+
'datetime': this.iso8601(timestamp),
|
|
1469
|
+
'symbol': symbol,
|
|
1470
|
+
'order': orderId,
|
|
1471
|
+
'type': this.safeStringLower2(trade, 'ordType', 'type'),
|
|
1472
|
+
'side': side,
|
|
1473
|
+
'takerOrMaker': this.safeStringLower2(trade, 'matchRole', 'role'),
|
|
1474
|
+
'price': priceString,
|
|
1475
|
+
'amount': amountString,
|
|
1476
|
+
'cost': costString,
|
|
1477
|
+
'fee': fee,
|
|
1478
|
+
}, market);
|
|
1479
|
+
}
|
|
1480
|
+
/**
|
|
1481
|
+
* @method
|
|
1482
|
+
* @name poloniex#fetchTrades
|
|
1483
|
+
* @description get the list of most recent trades for a particular symbol
|
|
1484
|
+
* @see https://api-docs.poloniex.com/spot/api/public/market-data#trades
|
|
1485
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/market/get-execution-info
|
|
1486
|
+
* @param {string} symbol unified symbol of the market to fetch trades for
|
|
1487
|
+
* @param {int} [since] timestamp in ms of the earliest trade to fetch
|
|
1488
|
+
* @param {int} [limit] the maximum amount of trades to fetch
|
|
1489
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1490
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=public-trades}
|
|
1491
|
+
*/
|
|
1492
|
+
async fetchTrades(symbol, since = undefined, limit = undefined, params = {}) {
|
|
1493
|
+
await this.loadMarkets();
|
|
1494
|
+
const market = this.market(symbol);
|
|
1495
|
+
const request = {
|
|
1496
|
+
'symbol': market['id'],
|
|
1497
|
+
};
|
|
1498
|
+
if (limit !== undefined) {
|
|
1499
|
+
request['limit'] = limit; // max 1000, for spot & swap
|
|
1500
|
+
}
|
|
1501
|
+
if (market['contract']) {
|
|
1502
|
+
const response = await this.swapPublicGetV3MarketTrades(this.extend(request, params));
|
|
1503
|
+
//
|
|
1504
|
+
// {
|
|
1505
|
+
// code: "200",
|
|
1506
|
+
// msg: "Success",
|
|
1507
|
+
// data: [
|
|
1508
|
+
// {
|
|
1509
|
+
// id: "105807320", // descending order
|
|
1510
|
+
// side: "sell",
|
|
1511
|
+
// px: "84383.93",
|
|
1512
|
+
// qty: "1",
|
|
1513
|
+
// amt: "84.38393",
|
|
1514
|
+
// cT: "1740777074704",
|
|
1515
|
+
// },
|
|
1516
|
+
//
|
|
1517
|
+
const tradesList = this.safeList(response, 'data');
|
|
1518
|
+
return this.parseTrades(tradesList, market, since, limit);
|
|
1519
|
+
}
|
|
1520
|
+
const trades = await this.publicGetMarketsSymbolTrades(this.extend(request, params));
|
|
1521
|
+
//
|
|
1522
|
+
// [
|
|
1523
|
+
// {
|
|
1524
|
+
// "id" : "60014521",
|
|
1525
|
+
// "price" : "23162.94",
|
|
1526
|
+
// "quantity" : "0.00009",
|
|
1527
|
+
// "amount" : "2.0846646",
|
|
1528
|
+
// "takerSide" : "SELL",
|
|
1529
|
+
// "ts" : 1659684602042,
|
|
1530
|
+
// "createTime" : 1659684602036
|
|
1531
|
+
// }
|
|
1532
|
+
// ]
|
|
1533
|
+
//
|
|
1534
|
+
return this.parseTrades(trades, market, since, limit);
|
|
1535
|
+
}
|
|
1536
|
+
/**
|
|
1537
|
+
* @method
|
|
1538
|
+
* @name poloniex#fetchMyTrades
|
|
1539
|
+
* @description fetch all trades made by the user
|
|
1540
|
+
* @see https://api-docs.poloniex.com/spot/api/private/trade#trade-history
|
|
1541
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/trade/get-execution-details
|
|
1542
|
+
* @param {string} symbol unified market symbol
|
|
1543
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
1544
|
+
* @param {int} [limit] the maximum number of trades structures to retrieve
|
|
1545
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1546
|
+
* @param {int} [params.until] the latest time in ms to fetch entries for
|
|
1547
|
+
* @param {boolean} [params.paginate] default false, when true will automatically paginate by calling this endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
|
|
1548
|
+
* @returns {Trade[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
1549
|
+
*/
|
|
1550
|
+
async fetchMyTrades(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1551
|
+
await this.loadMarkets();
|
|
1552
|
+
let paginate = false;
|
|
1553
|
+
[paginate, params] = this.handleOptionAndParams(params, 'fetchMyTrades', 'paginate');
|
|
1554
|
+
if (paginate) {
|
|
1555
|
+
return await this.fetchPaginatedCallDynamic('fetchMyTrades', symbol, since, limit, params);
|
|
1556
|
+
}
|
|
1557
|
+
let market = undefined;
|
|
1558
|
+
if (symbol !== undefined) {
|
|
1559
|
+
market = this.market(symbol);
|
|
1560
|
+
}
|
|
1561
|
+
let marketType = undefined;
|
|
1562
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchMyTrades', market, params);
|
|
1563
|
+
const isContract = this.inArray(marketType, ['swap', 'future']);
|
|
1564
|
+
let request = {
|
|
1565
|
+
// 'from': 12345678, // A 'trade Id'. The query begins at ‘from'.
|
|
1566
|
+
// 'direction': 'PRE', // PRE, NEXT The direction before or after ‘from'.
|
|
1567
|
+
};
|
|
1568
|
+
const startKey = isContract ? 'sTime' : 'startTime';
|
|
1569
|
+
const endKey = isContract ? 'eTime' : 'endTime';
|
|
1570
|
+
if (since !== undefined) {
|
|
1571
|
+
request[startKey] = since;
|
|
1572
|
+
}
|
|
1573
|
+
if (limit !== undefined) {
|
|
1574
|
+
request['limit'] = limit;
|
|
1575
|
+
}
|
|
1576
|
+
if (isContract && symbol !== undefined) {
|
|
1577
|
+
request['symbol'] = market['id'];
|
|
1578
|
+
}
|
|
1579
|
+
[request, params] = this.handleUntilOption(endKey, request, params);
|
|
1580
|
+
if (isContract) {
|
|
1581
|
+
const raw = await this.swapPrivateGetV3TradeOrderTrades(this.extend(request, params));
|
|
1582
|
+
//
|
|
1583
|
+
// {
|
|
1584
|
+
// "code": "200",
|
|
1585
|
+
// "msg": "",
|
|
1586
|
+
// "data": [
|
|
1587
|
+
// {
|
|
1588
|
+
// "symbol": "BTC_USDT_PERP",
|
|
1589
|
+
// "trdId": "105813553",
|
|
1590
|
+
// "side": "SELL",
|
|
1591
|
+
// "type": "TRADE",
|
|
1592
|
+
// "mgnMode": "CROSS",
|
|
1593
|
+
// "ordType": "MARKET",
|
|
1594
|
+
// "clOrdId": "polo418912106147315112",
|
|
1595
|
+
// "role": "TAKER",
|
|
1596
|
+
// "px": "84704.9",
|
|
1597
|
+
// "qty": "1",
|
|
1598
|
+
// "cTime": "1740842829430",
|
|
1599
|
+
// "uTime": "1740842829450",
|
|
1600
|
+
// "feeCcy": "USDT",
|
|
1601
|
+
// "feeAmt": "0.04235245",
|
|
1602
|
+
// "deductCcy": "",
|
|
1603
|
+
// "deductAmt": "0",
|
|
1604
|
+
// "feeRate": "0.0005",
|
|
1605
|
+
// "id": "418912106342654592",
|
|
1606
|
+
// "posSide": "BOTH",
|
|
1607
|
+
// "ordId": "418912106147315112",
|
|
1608
|
+
// "qCcy": "USDT",
|
|
1609
|
+
// "value": "84.7049",
|
|
1610
|
+
// "actType": "TRADING"
|
|
1611
|
+
// },
|
|
1612
|
+
//
|
|
1613
|
+
const data = this.safeList(raw, 'data');
|
|
1614
|
+
return this.parseTrades(data, market, since, limit);
|
|
1615
|
+
}
|
|
1616
|
+
const response = await this.privateGetTrades(this.extend(request, params));
|
|
1617
|
+
//
|
|
1618
|
+
// [
|
|
1619
|
+
// {
|
|
1620
|
+
// "id": "32164924331503616",
|
|
1621
|
+
// "symbol": "LINK_USDT",
|
|
1622
|
+
// "accountType": "SPOT",
|
|
1623
|
+
// "orderId": "32164923987566592",
|
|
1624
|
+
// "side": "SELL",
|
|
1625
|
+
// "type": "MARKET",
|
|
1626
|
+
// "matchRole": "TAKER",
|
|
1627
|
+
// "createTime": 1648635115525,
|
|
1628
|
+
// "price": "11",
|
|
1629
|
+
// "quantity": "0.5",
|
|
1630
|
+
// "amount": "5.5",
|
|
1631
|
+
// "feeCurrency": "USDT",
|
|
1632
|
+
// "feeAmount": "0.007975",
|
|
1633
|
+
// "pageId": "32164924331503616",
|
|
1634
|
+
// "clientOrderId": "myOwnId-321"
|
|
1635
|
+
// }
|
|
1636
|
+
// ]
|
|
1637
|
+
//
|
|
1638
|
+
const result = this.parseTrades(response, market, since, limit);
|
|
1639
|
+
return result;
|
|
1640
|
+
}
|
|
1641
|
+
parseOrderStatus(status) {
|
|
1642
|
+
const statuses = {
|
|
1643
|
+
'NEW': 'open',
|
|
1644
|
+
'PARTIALLY_FILLED': 'open',
|
|
1645
|
+
'FILLED': 'closed',
|
|
1646
|
+
'PENDING_CANCEL': 'canceled',
|
|
1647
|
+
'PARTIALLY_CANCELED': 'canceled',
|
|
1648
|
+
'CANCELED': 'canceled',
|
|
1649
|
+
'FAILED': 'canceled',
|
|
1650
|
+
};
|
|
1651
|
+
return this.safeString(statuses, status, status);
|
|
1652
|
+
}
|
|
1653
|
+
parseOrder(order, market = undefined) {
|
|
1654
|
+
//
|
|
1655
|
+
// fetchOpenOrder
|
|
1656
|
+
//
|
|
1657
|
+
// {
|
|
1658
|
+
// "id" : "7xxxxxxxxxxxxxxx6",
|
|
1659
|
+
// "clientOrderId" : "",
|
|
1660
|
+
// "symbol" : "ETH_USDT",
|
|
1661
|
+
// "state" : "NEW",
|
|
1662
|
+
// "accountType" : "SPOT",
|
|
1663
|
+
// "side" : "BUY",
|
|
1664
|
+
// "type" : "LIMIT",
|
|
1665
|
+
// "timeInForce" : "GTC",
|
|
1666
|
+
// "quantity" : "0.001",
|
|
1667
|
+
// "price" : "1600",
|
|
1668
|
+
// "avgPrice" : "0",
|
|
1669
|
+
// "amount" : "0",
|
|
1670
|
+
// "filledQuantity" : "0",
|
|
1671
|
+
// "filledAmount" : "0",
|
|
1672
|
+
// "createTime" : 16xxxxxxxxx26,
|
|
1673
|
+
// "updateTime" : 16xxxxxxxxx36
|
|
1674
|
+
// }
|
|
1675
|
+
//
|
|
1676
|
+
// fetchOpenOrders (and fetchClosedOrders same for contracts)
|
|
1677
|
+
//
|
|
1678
|
+
// spot:
|
|
1679
|
+
//
|
|
1680
|
+
// {
|
|
1681
|
+
// "id": "24993088082542592",
|
|
1682
|
+
// "clientOrderId": "",
|
|
1683
|
+
// "symbol": "ELON_USDC",
|
|
1684
|
+
// "state": "NEW",
|
|
1685
|
+
// "accountType": "SPOT",
|
|
1686
|
+
// "side": "SELL",
|
|
1687
|
+
// "type": "MARKET",
|
|
1688
|
+
// "timeInForce": "GTC",
|
|
1689
|
+
// "quantity": "1.00",
|
|
1690
|
+
// "price": "0.00",
|
|
1691
|
+
// "avgPrice": "0.00",
|
|
1692
|
+
// "amount": "0.00",
|
|
1693
|
+
// "filledQuantity": "0.00",
|
|
1694
|
+
// "filledAmount": "0.00",
|
|
1695
|
+
// "createTime": 1646925216548,
|
|
1696
|
+
// "updateTime": 1646925216548
|
|
1697
|
+
// }
|
|
1698
|
+
//
|
|
1699
|
+
// contract:
|
|
1700
|
+
//
|
|
1701
|
+
// {
|
|
1702
|
+
// "symbol": "BTC_USDT_PERP",
|
|
1703
|
+
// "side": "BUY",
|
|
1704
|
+
// "type": "LIMIT",
|
|
1705
|
+
// "ordId": "418890767248232148",
|
|
1706
|
+
// "clOrdId": "polo418890767248232148",
|
|
1707
|
+
// "mgnMode": "CROSS",
|
|
1708
|
+
// "px": "81130.13",
|
|
1709
|
+
// "reduceOnly": false,
|
|
1710
|
+
// "lever": "20",
|
|
1711
|
+
// "state": "NEW",
|
|
1712
|
+
// "source": "WEB",
|
|
1713
|
+
// "timeInForce": "GTC",
|
|
1714
|
+
// "tpTrgPx": "",
|
|
1715
|
+
// "tpPx": "",
|
|
1716
|
+
// "tpTrgPxType": "",
|
|
1717
|
+
// "slTrgPx": "",
|
|
1718
|
+
// "slPx": "",
|
|
1719
|
+
// "slTrgPxType": "",
|
|
1720
|
+
// "avgPx": "0",
|
|
1721
|
+
// "execQty": "0",
|
|
1722
|
+
// "execAmt": "0",
|
|
1723
|
+
// "feeCcy": "",
|
|
1724
|
+
// "feeAmt": "0",
|
|
1725
|
+
// "deductCcy": "0",
|
|
1726
|
+
// "deductAmt": "0",
|
|
1727
|
+
// "stpMode": "NONE", // todo: selfTradePrevention
|
|
1728
|
+
// "cTime": "1740837741523",
|
|
1729
|
+
// "uTime": "1740840846882",
|
|
1730
|
+
// "sz": "1",
|
|
1731
|
+
// "posSide": "BOTH",
|
|
1732
|
+
// "qCcy": "USDT"
|
|
1733
|
+
// "cancelReason": "", // this field can only be in closed orders
|
|
1734
|
+
// },
|
|
1735
|
+
//
|
|
1736
|
+
// createOrder, editOrder
|
|
1737
|
+
//
|
|
1738
|
+
// spot:
|
|
1739
|
+
//
|
|
1740
|
+
// {
|
|
1741
|
+
// "id": "29772698821328896",
|
|
1742
|
+
// "clientOrderId": "1234Abc"
|
|
1743
|
+
// }
|
|
1744
|
+
//
|
|
1745
|
+
// contract:
|
|
1746
|
+
//
|
|
1747
|
+
// {
|
|
1748
|
+
// "ordId":"418876147745775616",
|
|
1749
|
+
// "clOrdId":"polo418876147745775616"
|
|
1750
|
+
// }
|
|
1751
|
+
//
|
|
1752
|
+
let timestamp = this.safeIntegerN(order, ['timestamp', 'createTime', 'cTime']);
|
|
1753
|
+
if (timestamp === undefined) {
|
|
1754
|
+
timestamp = this.parse8601(this.safeString(order, 'date'));
|
|
1755
|
+
}
|
|
1756
|
+
const marketId = this.safeString(order, 'symbol');
|
|
1757
|
+
market = this.safeMarket(marketId, market, '_');
|
|
1758
|
+
const symbol = market['symbol'];
|
|
1759
|
+
let resultingTrades = this.safeValue(order, 'resultingTrades');
|
|
1760
|
+
if (resultingTrades !== undefined) {
|
|
1761
|
+
if (!Array.isArray(resultingTrades)) {
|
|
1762
|
+
resultingTrades = this.safeValue(resultingTrades, this.safeString(market, 'id', marketId));
|
|
1763
|
+
}
|
|
1764
|
+
}
|
|
1765
|
+
const price = this.safeStringN(order, ['price', 'rate', 'px']);
|
|
1766
|
+
const amount = this.safeString2(order, 'quantity', 'sz');
|
|
1767
|
+
const filled = this.safeString2(order, 'filledQuantity', 'execQty');
|
|
1768
|
+
const status = this.parseOrderStatus(this.safeString(order, 'state'));
|
|
1769
|
+
const side = this.safeStringLower(order, 'side');
|
|
1770
|
+
const rawType = this.safeString(order, 'type');
|
|
1771
|
+
const type = this.parseOrderType(rawType);
|
|
1772
|
+
const id = this.safeStringN(order, ['orderNumber', 'id', 'orderId', 'ordId']);
|
|
1773
|
+
let fee = undefined;
|
|
1774
|
+
const feeCurrency = this.safeString2(order, 'tokenFeeCurrency', 'feeCcy');
|
|
1775
|
+
let feeCost = undefined;
|
|
1776
|
+
let feeCurrencyCode = undefined;
|
|
1777
|
+
const rate = this.safeString(order, 'fee');
|
|
1778
|
+
if (feeCurrency === undefined) {
|
|
1779
|
+
feeCurrencyCode = (side === 'buy') ? market['base'] : market['quote'];
|
|
1780
|
+
}
|
|
1781
|
+
else {
|
|
1782
|
+
// poloniex accepts a 30% discount to pay fees in TRX
|
|
1783
|
+
feeCurrencyCode = this.safeCurrencyCode(feeCurrency);
|
|
1784
|
+
feeCost = this.safeString2(order, 'tokenFee', 'feeAmt');
|
|
1785
|
+
}
|
|
1786
|
+
if (feeCost !== undefined) {
|
|
1787
|
+
fee = {
|
|
1788
|
+
'rate': rate,
|
|
1789
|
+
'cost': feeCost,
|
|
1790
|
+
'currency': feeCurrencyCode,
|
|
1791
|
+
};
|
|
1792
|
+
}
|
|
1793
|
+
const clientOrderId = this.safeString2(order, 'clientOrderId', 'clOrdId');
|
|
1794
|
+
const marginMode = this.safeStringLower(order, 'mgnMode');
|
|
1795
|
+
const reduceOnly = this.safeBool(order, 'reduceOnly');
|
|
1796
|
+
const leverage = this.safeInteger(order, 'lever');
|
|
1797
|
+
const hedged = this.safeString(order, 'posSide') !== 'BOTH';
|
|
1798
|
+
return this.safeOrder({
|
|
1799
|
+
'info': order,
|
|
1800
|
+
'id': id,
|
|
1801
|
+
'clientOrderId': clientOrderId,
|
|
1802
|
+
'timestamp': timestamp,
|
|
1803
|
+
'datetime': this.iso8601(timestamp),
|
|
1804
|
+
'lastTradeTimestamp': this.safeInteger(order, 'updateTime'),
|
|
1805
|
+
'status': status,
|
|
1806
|
+
'symbol': symbol,
|
|
1807
|
+
'type': type,
|
|
1808
|
+
'timeInForce': this.safeString(order, 'timeInForce'),
|
|
1809
|
+
'postOnly': rawType === 'LIMIT_MAKER',
|
|
1810
|
+
'side': side,
|
|
1811
|
+
'price': price,
|
|
1812
|
+
'triggerPrice': this.safeString2(order, 'triggerPrice', 'stopPrice'),
|
|
1813
|
+
'cost': this.safeString(order, 'execAmt'),
|
|
1814
|
+
'average': this.safeString2(order, 'avgPrice', 'avgPx'),
|
|
1815
|
+
'amount': amount,
|
|
1816
|
+
'filled': filled,
|
|
1817
|
+
'remaining': undefined,
|
|
1818
|
+
'trades': resultingTrades,
|
|
1819
|
+
'fee': fee,
|
|
1820
|
+
'marginMode': marginMode,
|
|
1821
|
+
'reduceOnly': reduceOnly,
|
|
1822
|
+
'leverage': leverage,
|
|
1823
|
+
'hedged': hedged,
|
|
1824
|
+
}, market);
|
|
1825
|
+
}
|
|
1826
|
+
parseOrderType(status) {
|
|
1827
|
+
const statuses = {
|
|
1828
|
+
'MARKET': 'market',
|
|
1829
|
+
'LIMIT': 'limit',
|
|
1830
|
+
'LIMIT_MAKER': 'limit',
|
|
1831
|
+
'STOP-LIMIT': 'limit',
|
|
1832
|
+
'STOP-MARKET': 'market',
|
|
1833
|
+
};
|
|
1834
|
+
return this.safeString(statuses, status, status);
|
|
1835
|
+
}
|
|
1836
|
+
parseOpenOrders(orders, market, result) {
|
|
1837
|
+
for (let i = 0; i < orders.length; i++) {
|
|
1838
|
+
const order = orders[i];
|
|
1839
|
+
const extended = this.extend(order, {
|
|
1840
|
+
'status': 'open',
|
|
1841
|
+
'type': 'limit',
|
|
1842
|
+
'side': order['type'],
|
|
1843
|
+
'price': order['rate'],
|
|
1844
|
+
});
|
|
1845
|
+
result.push(this.parseOrder(extended, market));
|
|
1846
|
+
}
|
|
1847
|
+
return result;
|
|
1848
|
+
}
|
|
1849
|
+
/**
|
|
1850
|
+
* @method
|
|
1851
|
+
* @name poloniex#fetchOpenOrders
|
|
1852
|
+
* @description fetch all unfilled currently open orders
|
|
1853
|
+
* @see https://api-docs.poloniex.com/spot/api/private/order#open-orders
|
|
1854
|
+
* @see https://api-docs.poloniex.com/spot/api/private/smart-order#open-orders // trigger orders
|
|
1855
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/trade/get-current-orders
|
|
1856
|
+
* @param {string} symbol unified market symbol
|
|
1857
|
+
* @param {int} [since] the earliest time in ms to fetch open orders for
|
|
1858
|
+
* @param {int} [limit] the maximum number of open orders structures to retrieve
|
|
1859
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1860
|
+
* @param {boolean} [params.trigger] set true to fetch trigger orders instead of regular orders
|
|
1861
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1862
|
+
*/
|
|
1863
|
+
async fetchOpenOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1864
|
+
await this.loadMarkets();
|
|
1865
|
+
let market = undefined;
|
|
1866
|
+
const request = {};
|
|
1867
|
+
if (symbol !== undefined) {
|
|
1868
|
+
market = this.market(symbol);
|
|
1869
|
+
request['symbol'] = market['id'];
|
|
1870
|
+
}
|
|
1871
|
+
let marketType = undefined;
|
|
1872
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchOpenOrders', market, params);
|
|
1873
|
+
if (limit !== undefined) {
|
|
1874
|
+
const max = (marketType === 'spot') ? 2000 : 100;
|
|
1875
|
+
request['limit'] = Math.max(limit, max);
|
|
1876
|
+
}
|
|
1877
|
+
const isTrigger = this.safeValue2(params, 'trigger', 'stop');
|
|
1878
|
+
params = this.omit(params, ['trigger', 'stop']);
|
|
1879
|
+
let response = undefined;
|
|
1880
|
+
if (marketType !== 'spot') {
|
|
1881
|
+
const raw = await this.swapPrivateGetV3TradeOrderOpens(this.extend(request, params));
|
|
1882
|
+
//
|
|
1883
|
+
// {
|
|
1884
|
+
// "code": "200",
|
|
1885
|
+
// "msg": "",
|
|
1886
|
+
// "data": [
|
|
1887
|
+
// {
|
|
1888
|
+
// "symbol": "BTC_USDT_PERP",
|
|
1889
|
+
// "side": "BUY",
|
|
1890
|
+
// "type": "LIMIT",
|
|
1891
|
+
// "ordId": "418890767248232148",
|
|
1892
|
+
// "clOrdId": "polo418890767248232148",
|
|
1893
|
+
// "mgnMode": "CROSS",
|
|
1894
|
+
// "px": "81130.13",
|
|
1895
|
+
// "reduceOnly": false,
|
|
1896
|
+
// "lever": "20",
|
|
1897
|
+
// "state": "NEW",
|
|
1898
|
+
// "source": "WEB",
|
|
1899
|
+
// "timeInForce": "GTC",
|
|
1900
|
+
// "tpTrgPx": "",
|
|
1901
|
+
// "tpPx": "",
|
|
1902
|
+
// "tpTrgPxType": "",
|
|
1903
|
+
// "slTrgPx": "",
|
|
1904
|
+
// "slPx": "",
|
|
1905
|
+
// "slTrgPxType": "",
|
|
1906
|
+
// "avgPx": "0",
|
|
1907
|
+
// "execQty": "0",
|
|
1908
|
+
// "execAmt": "0",
|
|
1909
|
+
// "feeCcy": "",
|
|
1910
|
+
// "feeAmt": "0",
|
|
1911
|
+
// "deductCcy": "0",
|
|
1912
|
+
// "deductAmt": "0",
|
|
1913
|
+
// "stpMode": "NONE",
|
|
1914
|
+
// "cTime": "1740837741523",
|
|
1915
|
+
// "uTime": "1740840846882",
|
|
1916
|
+
// "sz": "1",
|
|
1917
|
+
// "posSide": "BOTH",
|
|
1918
|
+
// "qCcy": "USDT"
|
|
1919
|
+
// },
|
|
1920
|
+
//
|
|
1921
|
+
response = this.safeList(raw, 'data');
|
|
1922
|
+
}
|
|
1923
|
+
else if (isTrigger) {
|
|
1924
|
+
response = await this.privateGetSmartorders(this.extend(request, params));
|
|
1925
|
+
}
|
|
1926
|
+
else {
|
|
1927
|
+
response = await this.privateGetOrders(this.extend(request, params));
|
|
1928
|
+
}
|
|
1929
|
+
//
|
|
1930
|
+
// [
|
|
1931
|
+
// {
|
|
1932
|
+
// "id" : "7xxxxxxxxxxxxxxx6",
|
|
1933
|
+
// "clientOrderId" : "",
|
|
1934
|
+
// "symbol" : "ETH_USDT",
|
|
1935
|
+
// "state" : "NEW",
|
|
1936
|
+
// "accountType" : "SPOT",
|
|
1937
|
+
// "side" : "BUY",
|
|
1938
|
+
// "type" : "LIMIT",
|
|
1939
|
+
// "timeInForce" : "GTC",
|
|
1940
|
+
// "quantity" : "0.001",
|
|
1941
|
+
// "price" : "1600",
|
|
1942
|
+
// "avgPrice" : "0",
|
|
1943
|
+
// "amount" : "0",
|
|
1944
|
+
// "filledQuantity" : "0",
|
|
1945
|
+
// "filledAmount" : "0",
|
|
1946
|
+
// "stopPrice": "3750.00", // for trigger orders
|
|
1947
|
+
// "createTime" : 16xxxxxxxxx26,
|
|
1948
|
+
// "updateTime" : 16xxxxxxxxx36
|
|
1949
|
+
// }
|
|
1950
|
+
// ]
|
|
1951
|
+
//
|
|
1952
|
+
const extension = { 'status': 'open' };
|
|
1953
|
+
return this.parseOrders(response, market, since, limit, extension);
|
|
1954
|
+
}
|
|
1955
|
+
/**
|
|
1956
|
+
* @method
|
|
1957
|
+
* @name poloniex#fetchClosedOrders
|
|
1958
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/trade/get-order-history
|
|
1959
|
+
* @description fetches information on multiple closed orders made by the user
|
|
1960
|
+
* @param {string} symbol unified market symbol of the market orders were made in
|
|
1961
|
+
* @param {int} [since] the earliest time in ms to fetch orders for
|
|
1962
|
+
* @param {int} [limit] the maximum number of order structures to retrieve
|
|
1963
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
1964
|
+
* @param {int} [params.until] timestamp in ms of the latest entry
|
|
1965
|
+
* @returns {Order[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
1966
|
+
*/
|
|
1967
|
+
async fetchClosedOrders(symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
1968
|
+
await this.loadMarkets();
|
|
1969
|
+
let market = undefined;
|
|
1970
|
+
let request = {};
|
|
1971
|
+
if (symbol !== undefined) {
|
|
1972
|
+
market = this.market(symbol);
|
|
1973
|
+
request['symbol'] = market['id'];
|
|
1974
|
+
}
|
|
1975
|
+
let marketType = undefined;
|
|
1976
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchClosedOrders', market, params, 'swap');
|
|
1977
|
+
if (marketType === 'spot') {
|
|
1978
|
+
throw new NotSupported(this.id + ' fetchClosedOrders() is not supported for spot markets yet');
|
|
1979
|
+
}
|
|
1980
|
+
if (limit !== undefined) {
|
|
1981
|
+
request['limit'] = Math.min(200, limit);
|
|
1982
|
+
}
|
|
1983
|
+
if (since !== undefined) {
|
|
1984
|
+
request['sTime'] = since;
|
|
1985
|
+
}
|
|
1986
|
+
[request, params] = this.handleUntilOption('eTime', request, params);
|
|
1987
|
+
const response = await this.swapPrivateGetV3TradeOrderHistory(this.extend(request, params));
|
|
1988
|
+
//
|
|
1989
|
+
// {
|
|
1990
|
+
// "code": "200",
|
|
1991
|
+
// "msg": "",
|
|
1992
|
+
// "data": [
|
|
1993
|
+
// {
|
|
1994
|
+
// "symbol": "BTC_USDT_PERP",
|
|
1995
|
+
// "side": "SELL",
|
|
1996
|
+
// "type": "MARKET",
|
|
1997
|
+
// "ordId": "418912106147315712",
|
|
1998
|
+
// "clOrdId": "polo418912106147315712",
|
|
1999
|
+
// "mgnMode": "CROSS",
|
|
2000
|
+
// "px": "0",
|
|
2001
|
+
// "sz": "2",
|
|
2002
|
+
// "lever": "20",
|
|
2003
|
+
// "state": "FILLED",
|
|
2004
|
+
// "cancelReason": "",
|
|
2005
|
+
// "source": "WEB",
|
|
2006
|
+
// "reduceOnly": "true",
|
|
2007
|
+
// "timeInForce": "GTC",
|
|
2008
|
+
// "tpTrgPx": "",
|
|
2009
|
+
// "tpPx": "",
|
|
2010
|
+
// "tpTrgPxType": "",
|
|
2011
|
+
// "slTrgPx": "",
|
|
2012
|
+
// "slPx": "",
|
|
2013
|
+
// "slTrgPxType": "",
|
|
2014
|
+
// "avgPx": "84705.56",
|
|
2015
|
+
// "execQty": "2",
|
|
2016
|
+
// "execAmt": "169.41112",
|
|
2017
|
+
// "feeCcy": "USDT",
|
|
2018
|
+
// "feeAmt": "0.08470556",
|
|
2019
|
+
// "deductCcy": "0",
|
|
2020
|
+
// "deductAmt": "0",
|
|
2021
|
+
// "stpMode": "NONE",
|
|
2022
|
+
// "cTime": "1740842829116",
|
|
2023
|
+
// "uTime": "1740842829130",
|
|
2024
|
+
// "posSide": "BOTH",
|
|
2025
|
+
// "qCcy": "USDT"
|
|
2026
|
+
// },
|
|
2027
|
+
//
|
|
2028
|
+
const data = this.safeList(response, 'data', []);
|
|
2029
|
+
return this.parseOrders(data, market, since, limit);
|
|
2030
|
+
}
|
|
2031
|
+
/**
|
|
2032
|
+
* @method
|
|
2033
|
+
* @name poloniex#createOrder
|
|
2034
|
+
* @description create a trade order
|
|
2035
|
+
* @see https://api-docs.poloniex.com/spot/api/private/order#create-order
|
|
2036
|
+
* @see https://api-docs.poloniex.com/spot/api/private/smart-order#create-order // trigger orders
|
|
2037
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
2038
|
+
* @param {string} type 'market' or 'limit'
|
|
2039
|
+
* @param {string} side 'buy' or 'sell'
|
|
2040
|
+
* @param {float} amount how much of currency you want to trade in units of base currency
|
|
2041
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
2042
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2043
|
+
* @param {float} [params.triggerPrice] the price at which a trigger order is triggered at
|
|
2044
|
+
* @param {float} [params.cost] *spot market buy only* the quote quantity that can be used as an alternative for the amount
|
|
2045
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2046
|
+
*/
|
|
2047
|
+
async createOrder(symbol, type, side, amount, price = undefined, params = {}) {
|
|
2048
|
+
await this.loadMarkets();
|
|
2049
|
+
const market = this.market(symbol);
|
|
2050
|
+
let request = {
|
|
2051
|
+
'symbol': market['id'],
|
|
2052
|
+
'side': side.toUpperCase(), // uppercase, both for spot & swap
|
|
2053
|
+
// 'timeInForce': timeInForce, // matches unified values
|
|
2054
|
+
// 'accountType': 'SPOT',
|
|
2055
|
+
// 'amount': amount,
|
|
2056
|
+
};
|
|
2057
|
+
const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
|
|
2058
|
+
[request, params] = this.orderRequest(symbol, type, side, amount, request, price, params);
|
|
2059
|
+
let response = undefined;
|
|
2060
|
+
if (market['swap'] || market['future']) {
|
|
2061
|
+
const responseInitial = await this.swapPrivatePostV3TradeOrder(this.extend(request, params));
|
|
2062
|
+
//
|
|
2063
|
+
// {"code":200,"msg":"Success","data":{"ordId":"418876147745775616","clOrdId":"polo418876147745775616"}}
|
|
2064
|
+
//
|
|
2065
|
+
response = this.safeDict(responseInitial, 'data');
|
|
2066
|
+
}
|
|
2067
|
+
else if (triggerPrice !== undefined) {
|
|
2068
|
+
response = await this.privatePostSmartorders(this.extend(request, params));
|
|
2069
|
+
}
|
|
2070
|
+
else {
|
|
2071
|
+
response = await this.privatePostOrders(this.extend(request, params));
|
|
2072
|
+
}
|
|
2073
|
+
//
|
|
2074
|
+
// {
|
|
2075
|
+
// "id" : "78923648051920896",
|
|
2076
|
+
// "clientOrderId" : ""
|
|
2077
|
+
// }
|
|
2078
|
+
//
|
|
2079
|
+
return this.parseOrder(response, market);
|
|
2080
|
+
}
|
|
2081
|
+
orderRequest(symbol, type, side, amount, request, price = undefined, params = {}) {
|
|
2082
|
+
const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
|
|
2083
|
+
const market = this.market(symbol);
|
|
2084
|
+
if (market['contract']) {
|
|
2085
|
+
let marginMode = undefined;
|
|
2086
|
+
[marginMode, params] = this.handleParamString(params, 'marginMode');
|
|
2087
|
+
if (marginMode !== undefined) {
|
|
2088
|
+
this.checkRequiredArgument('createOrder', marginMode, 'marginMode', ['cross', 'isolated']);
|
|
2089
|
+
request['mgnMode'] = marginMode.toUpperCase();
|
|
2090
|
+
}
|
|
2091
|
+
let hedged = undefined;
|
|
2092
|
+
[hedged, params] = this.handleParamString(params, 'hedged');
|
|
2093
|
+
if (hedged) {
|
|
2094
|
+
if (marginMode === undefined) {
|
|
2095
|
+
throw new ArgumentsRequired(this.id + ' createOrder() requires a marginMode parameter "cross" or "isolated" for hedged orders');
|
|
2096
|
+
}
|
|
2097
|
+
if (!('posSide' in params)) {
|
|
2098
|
+
throw new ArgumentsRequired(this.id + ' createOrder() requires a posSide parameter "LONG" or "SHORT" for hedged orders');
|
|
2099
|
+
}
|
|
2100
|
+
}
|
|
2101
|
+
}
|
|
2102
|
+
let upperCaseType = type.toUpperCase();
|
|
2103
|
+
const isMarket = upperCaseType === 'MARKET';
|
|
2104
|
+
const isPostOnly = this.isPostOnly(isMarket, upperCaseType === 'LIMIT_MAKER', params);
|
|
2105
|
+
params = this.omit(params, ['postOnly', 'triggerPrice', 'stopPrice']);
|
|
2106
|
+
if (triggerPrice !== undefined) {
|
|
2107
|
+
if (!market['spot']) {
|
|
2108
|
+
throw new InvalidOrder(this.id + ' createOrder() does not support trigger orders for ' + market['type'] + ' markets');
|
|
2109
|
+
}
|
|
2110
|
+
upperCaseType = (price === undefined) ? 'STOP' : 'STOP_LIMIT';
|
|
2111
|
+
request['stopPrice'] = triggerPrice;
|
|
2112
|
+
}
|
|
2113
|
+
else if (isPostOnly) {
|
|
2114
|
+
upperCaseType = 'LIMIT_MAKER';
|
|
2115
|
+
}
|
|
2116
|
+
request['type'] = upperCaseType;
|
|
2117
|
+
if (isMarket) {
|
|
2118
|
+
if (side === 'buy') {
|
|
2119
|
+
let quoteAmount = undefined;
|
|
2120
|
+
let createMarketBuyOrderRequiresPrice = true;
|
|
2121
|
+
[createMarketBuyOrderRequiresPrice, params] = this.handleOptionAndParams(params, 'createOrder', 'createMarketBuyOrderRequiresPrice', true);
|
|
2122
|
+
const cost = this.safeNumber(params, 'cost');
|
|
2123
|
+
params = this.omit(params, 'cost');
|
|
2124
|
+
if (cost !== undefined) {
|
|
2125
|
+
quoteAmount = this.costToPrecision(symbol, cost);
|
|
2126
|
+
}
|
|
2127
|
+
else if (createMarketBuyOrderRequiresPrice && market['spot']) {
|
|
2128
|
+
if (price === undefined) {
|
|
2129
|
+
throw new InvalidOrder(this.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend (amount * price), alternatively set the createMarketBuyOrderRequiresPrice option or param to false and pass the cost to spend (quote quantity) in the amount argument');
|
|
2130
|
+
}
|
|
2131
|
+
else {
|
|
2132
|
+
const amountString = this.numberToString(amount);
|
|
2133
|
+
const priceString = this.numberToString(price);
|
|
2134
|
+
const costRequest = Precise.stringMul(amountString, priceString);
|
|
2135
|
+
quoteAmount = this.costToPrecision(symbol, costRequest);
|
|
2136
|
+
}
|
|
2137
|
+
}
|
|
2138
|
+
else {
|
|
2139
|
+
quoteAmount = this.costToPrecision(symbol, amount);
|
|
2140
|
+
}
|
|
2141
|
+
const amountKey = market['spot'] ? 'amount' : 'sz';
|
|
2142
|
+
request[amountKey] = quoteAmount;
|
|
2143
|
+
}
|
|
2144
|
+
else {
|
|
2145
|
+
const amountKey = market['spot'] ? 'quantity' : 'sz';
|
|
2146
|
+
request[amountKey] = this.amountToPrecision(symbol, amount);
|
|
2147
|
+
}
|
|
2148
|
+
}
|
|
2149
|
+
else {
|
|
2150
|
+
const amountKey = market['spot'] ? 'quantity' : 'sz';
|
|
2151
|
+
request[amountKey] = this.amountToPrecision(symbol, amount);
|
|
2152
|
+
const priceKey = market['spot'] ? 'price' : 'px';
|
|
2153
|
+
request[priceKey] = this.priceToPrecision(symbol, price);
|
|
2154
|
+
}
|
|
2155
|
+
const clientOrderId = this.safeString(params, 'clientOrderId');
|
|
2156
|
+
if (clientOrderId !== undefined) {
|
|
2157
|
+
request['clientOrderId'] = clientOrderId;
|
|
2158
|
+
params = this.omit(params, 'clientOrderId');
|
|
2159
|
+
}
|
|
2160
|
+
// remember the timestamp before issuing the request
|
|
2161
|
+
return [request, params];
|
|
2162
|
+
}
|
|
2163
|
+
/**
|
|
2164
|
+
* @method
|
|
2165
|
+
* @name poloniex#editOrder
|
|
2166
|
+
* @description edit a trade order
|
|
2167
|
+
* @see https://api-docs.poloniex.com/spot/api/private/order#cancel-replace-order
|
|
2168
|
+
* @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-replace-order
|
|
2169
|
+
* @param {string} id order id
|
|
2170
|
+
* @param {string} symbol unified symbol of the market to create an order in
|
|
2171
|
+
* @param {string} type 'market' or 'limit'
|
|
2172
|
+
* @param {string} side 'buy' or 'sell'
|
|
2173
|
+
* @param {float} [amount] how much of the currency you want to trade in units of the base currency
|
|
2174
|
+
* @param {float} [price] the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
2175
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2176
|
+
* @param {float} [params.triggerPrice] The price at which a trigger order is triggered at
|
|
2177
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2178
|
+
*/
|
|
2179
|
+
async editOrder(id, symbol, type, side, amount = undefined, price = undefined, params = {}) {
|
|
2180
|
+
await this.loadMarkets();
|
|
2181
|
+
const market = this.market(symbol);
|
|
2182
|
+
if (!market['spot']) {
|
|
2183
|
+
throw new NotSupported(this.id + ' editOrder() does not support ' + market['type'] + ' orders, only spot orders are accepted');
|
|
2184
|
+
}
|
|
2185
|
+
let request = {
|
|
2186
|
+
'id': id,
|
|
2187
|
+
// 'timeInForce': timeInForce,
|
|
2188
|
+
};
|
|
2189
|
+
const triggerPrice = this.safeNumber2(params, 'stopPrice', 'triggerPrice');
|
|
2190
|
+
[request, params] = this.orderRequest(symbol, type, side, amount, request, price, params);
|
|
2191
|
+
let response = undefined;
|
|
2192
|
+
if (triggerPrice !== undefined) {
|
|
2193
|
+
response = await this.privatePutSmartordersId(this.extend(request, params));
|
|
2194
|
+
}
|
|
2195
|
+
else {
|
|
2196
|
+
response = await this.privatePutOrdersId(this.extend(request, params));
|
|
2197
|
+
}
|
|
2198
|
+
//
|
|
2199
|
+
// {
|
|
2200
|
+
// "id" : "78923648051920896",
|
|
2201
|
+
// "clientOrderId" : ""
|
|
2202
|
+
// }
|
|
2203
|
+
//
|
|
2204
|
+
response = this.extend(response, {
|
|
2205
|
+
'side': side,
|
|
2206
|
+
'type': type,
|
|
2207
|
+
});
|
|
2208
|
+
return this.parseOrder(response, market);
|
|
2209
|
+
}
|
|
2210
|
+
async cancelOrder(id, symbol = undefined, params = {}) {
|
|
2211
|
+
//
|
|
2212
|
+
// @method
|
|
2213
|
+
// @name poloniex#cancelOrder
|
|
2214
|
+
// @description cancels an open order
|
|
2215
|
+
// @see https://api-docs.poloniex.com/spot/api/private/order#cancel-order-by-id
|
|
2216
|
+
// @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-order-by-id // trigger orders
|
|
2217
|
+
// @param {string} id order id
|
|
2218
|
+
// @param {string} symbol unified symbol of the market the order was made in
|
|
2219
|
+
// @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2220
|
+
// @param {boolean} [params.trigger] true if canceling a trigger order
|
|
2221
|
+
// @returns {object} An [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2222
|
+
//
|
|
2223
|
+
await this.loadMarkets();
|
|
2224
|
+
if (symbol === undefined) {
|
|
2225
|
+
throw new ArgumentsRequired(this.id + ' cancelOrder() requires a symbol argument');
|
|
2226
|
+
}
|
|
2227
|
+
const market = this.market(symbol);
|
|
2228
|
+
const request = {};
|
|
2229
|
+
if (!market['spot']) {
|
|
2230
|
+
request['symbol'] = market['id'];
|
|
2231
|
+
request['ordId'] = id;
|
|
2232
|
+
const raw = await this.swapPrivateDeleteV3TradeOrder(this.extend(request, params));
|
|
2233
|
+
//
|
|
2234
|
+
// {
|
|
2235
|
+
// "code": "200",
|
|
2236
|
+
// "msg": "Success",
|
|
2237
|
+
// "data": {
|
|
2238
|
+
// "ordId": "418886099910612040",
|
|
2239
|
+
// "clOrdId": "polo418886099910612040"
|
|
2240
|
+
// }
|
|
2241
|
+
// }
|
|
2242
|
+
//
|
|
2243
|
+
return this.parseOrder(this.safeDict(raw, 'data'));
|
|
2244
|
+
}
|
|
2245
|
+
const clientOrderId = this.safeValue(params, 'clientOrderId');
|
|
2246
|
+
if (clientOrderId !== undefined) {
|
|
2247
|
+
id = clientOrderId;
|
|
2248
|
+
}
|
|
2249
|
+
request['id'] = id;
|
|
2250
|
+
const isTrigger = this.safeValue2(params, 'trigger', 'stop');
|
|
2251
|
+
params = this.omit(params, ['clientOrderId', 'trigger', 'stop']);
|
|
2252
|
+
let response = undefined;
|
|
2253
|
+
if (isTrigger) {
|
|
2254
|
+
response = await this.privateDeleteSmartordersId(this.extend(request, params));
|
|
2255
|
+
}
|
|
2256
|
+
else {
|
|
2257
|
+
response = await this.privateDeleteOrdersId(this.extend(request, params));
|
|
2258
|
+
}
|
|
2259
|
+
//
|
|
2260
|
+
// {
|
|
2261
|
+
// "orderId":"210832697138888704",
|
|
2262
|
+
// "clientOrderId":"",
|
|
2263
|
+
// "state":"PENDING_CANCEL",
|
|
2264
|
+
// "code":200,
|
|
2265
|
+
// "message":""
|
|
2266
|
+
// }
|
|
2267
|
+
//
|
|
2268
|
+
return this.parseOrder(response);
|
|
2269
|
+
}
|
|
2270
|
+
/**
|
|
2271
|
+
* @method
|
|
2272
|
+
* @name poloniex#cancelAllOrders
|
|
2273
|
+
* @description cancel all open orders
|
|
2274
|
+
* @see https://api-docs.poloniex.com/spot/api/private/order#cancel-all-orders
|
|
2275
|
+
* @see https://api-docs.poloniex.com/spot/api/private/smart-order#cancel-all-orders // trigger orders
|
|
2276
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/trade/cancel-all-orders - contract markets
|
|
2277
|
+
* @param {string} symbol unified market symbol, only orders in the market of this symbol are cancelled when symbol is not undefined
|
|
2278
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2279
|
+
* @param {boolean} [params.trigger] true if canceling trigger orders
|
|
2280
|
+
* @returns {object[]} a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2281
|
+
*/
|
|
2282
|
+
async cancelAllOrders(symbol = undefined, params = {}) {
|
|
2283
|
+
await this.loadMarkets();
|
|
2284
|
+
const request = {
|
|
2285
|
+
// 'accountTypes': 'SPOT',
|
|
2286
|
+
'symbols': [],
|
|
2287
|
+
};
|
|
2288
|
+
let market = undefined;
|
|
2289
|
+
if (symbol !== undefined) {
|
|
2290
|
+
market = this.market(symbol);
|
|
2291
|
+
request['symbols'] = [
|
|
2292
|
+
market['id'],
|
|
2293
|
+
];
|
|
2294
|
+
}
|
|
2295
|
+
let response = undefined;
|
|
2296
|
+
let marketType = undefined;
|
|
2297
|
+
[marketType, params] = this.handleMarketTypeAndParams('cancelAllOrders', market, params);
|
|
2298
|
+
if (marketType === 'swap' || marketType === 'future') {
|
|
2299
|
+
const raw = await this.swapPrivateDeleteV3TradeAllOrders(this.extend(request, params));
|
|
2300
|
+
//
|
|
2301
|
+
// {
|
|
2302
|
+
// "code": "200",
|
|
2303
|
+
// "msg": "Success",
|
|
2304
|
+
// "data": [
|
|
2305
|
+
// {
|
|
2306
|
+
// "code": "200",
|
|
2307
|
+
// "msg": "Success",
|
|
2308
|
+
// "ordId": "418885787866388511",
|
|
2309
|
+
// "clOrdId": "polo418885787866388511"
|
|
2310
|
+
// }
|
|
2311
|
+
// ]
|
|
2312
|
+
// }
|
|
2313
|
+
//
|
|
2314
|
+
response = this.safeList(raw, 'data');
|
|
2315
|
+
return this.parseOrders(response, market);
|
|
2316
|
+
}
|
|
2317
|
+
const isTrigger = this.safeValue2(params, 'trigger', 'stop');
|
|
2318
|
+
params = this.omit(params, ['trigger', 'stop']);
|
|
2319
|
+
if (isTrigger) {
|
|
2320
|
+
response = await this.privateDeleteSmartorders(this.extend(request, params));
|
|
2321
|
+
}
|
|
2322
|
+
else {
|
|
2323
|
+
response = await this.privateDeleteOrders(this.extend(request, params));
|
|
2324
|
+
}
|
|
2325
|
+
//
|
|
2326
|
+
// [
|
|
2327
|
+
// {
|
|
2328
|
+
// "orderId" : "78xxxxxxxx80",
|
|
2329
|
+
// "clientOrderId" : "",
|
|
2330
|
+
// "state" : "NEW",
|
|
2331
|
+
// "code" : 200,
|
|
2332
|
+
// "message" : ""
|
|
2333
|
+
// }, {
|
|
2334
|
+
// "orderId" : "78xxxxxxxxx80",
|
|
2335
|
+
// "clientOrderId" : "",
|
|
2336
|
+
// "state" : "NEW",
|
|
2337
|
+
// "code" : 200,
|
|
2338
|
+
// "message" : ""
|
|
2339
|
+
// }
|
|
2340
|
+
// ]
|
|
2341
|
+
//
|
|
2342
|
+
return this.parseOrders(response, market);
|
|
2343
|
+
}
|
|
2344
|
+
/**
|
|
2345
|
+
* @method
|
|
2346
|
+
* @name poloniex#fetchOrder
|
|
2347
|
+
* @description fetch an order by it's id
|
|
2348
|
+
* @see https://api-docs.poloniex.com/spot/api/private/order#order-details
|
|
2349
|
+
* @see https://api-docs.poloniex.com/spot/api/private/smart-order#open-orders // trigger orders
|
|
2350
|
+
* @param {string} id order id
|
|
2351
|
+
* @param {string} symbol unified market symbol, default is undefined
|
|
2352
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2353
|
+
* @param {boolean} [params.trigger] true if fetching a trigger order
|
|
2354
|
+
* @returns {object} an [order structure]{@link https://docs.ccxt.com/#/?id=order-structure}
|
|
2355
|
+
*/
|
|
2356
|
+
async fetchOrder(id, symbol = undefined, params = {}) {
|
|
2357
|
+
await this.loadMarkets();
|
|
2358
|
+
id = id.toString();
|
|
2359
|
+
const request = {
|
|
2360
|
+
'id': id,
|
|
2361
|
+
};
|
|
2362
|
+
let market = undefined;
|
|
2363
|
+
if (symbol !== undefined) {
|
|
2364
|
+
market = this.market(symbol);
|
|
2365
|
+
request['symbol'] = market['id'];
|
|
2366
|
+
}
|
|
2367
|
+
let marketType = undefined;
|
|
2368
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchOrder', market, params);
|
|
2369
|
+
if (marketType !== 'spot') {
|
|
2370
|
+
throw new NotSupported(this.id + ' fetchOrder() is not supported for ' + marketType + ' markets yet');
|
|
2371
|
+
}
|
|
2372
|
+
const isTrigger = this.safeValue2(params, 'trigger', 'stop');
|
|
2373
|
+
params = this.omit(params, ['trigger', 'stop']);
|
|
2374
|
+
let response = undefined;
|
|
2375
|
+
if (isTrigger) {
|
|
2376
|
+
response = await this.privateGetSmartordersId(this.extend(request, params));
|
|
2377
|
+
response = this.safeValue(response, 0);
|
|
2378
|
+
}
|
|
2379
|
+
else {
|
|
2380
|
+
response = await this.privateGetOrdersId(this.extend(request, params));
|
|
2381
|
+
}
|
|
2382
|
+
//
|
|
2383
|
+
// {
|
|
2384
|
+
// "id": "21934611974062080",
|
|
2385
|
+
// "clientOrderId": "123",
|
|
2386
|
+
// "symbol": "TRX_USDC",
|
|
2387
|
+
// "state": "NEW",
|
|
2388
|
+
// "accountType": "SPOT",
|
|
2389
|
+
// "side": "SELL",
|
|
2390
|
+
// "type": "LIMIT",
|
|
2391
|
+
// "timeInForce": "GTC",
|
|
2392
|
+
// "quantity": "1.00",
|
|
2393
|
+
// "price": "10.00",
|
|
2394
|
+
// "avgPrice": "0.00",
|
|
2395
|
+
// "amount": "0.00",
|
|
2396
|
+
// "filledQuantity": "0.00",
|
|
2397
|
+
// "filledAmount": "0.00",
|
|
2398
|
+
// "stopPrice": "3750.00", // for trigger orders
|
|
2399
|
+
// "createTime": 1646196019020,
|
|
2400
|
+
// "updateTime": 1646196019020
|
|
2401
|
+
// }
|
|
2402
|
+
//
|
|
2403
|
+
const order = this.parseOrder(response);
|
|
2404
|
+
order['id'] = id;
|
|
2405
|
+
return order;
|
|
2406
|
+
}
|
|
2407
|
+
async fetchOrderStatus(id, symbol = undefined, params = {}) {
|
|
2408
|
+
await this.loadMarkets();
|
|
2409
|
+
const orders = await this.fetchOpenOrders(symbol, undefined, undefined, params);
|
|
2410
|
+
const indexed = this.indexBy(orders, 'id');
|
|
2411
|
+
return (id in indexed) ? 'open' : 'closed';
|
|
2412
|
+
}
|
|
2413
|
+
/**
|
|
2414
|
+
* @method
|
|
2415
|
+
* @name poloniex#fetchOrderTrades
|
|
2416
|
+
* @description fetch all the trades made from a single order
|
|
2417
|
+
* @see https://api-docs.poloniex.com/spot/api/private/trade#trades-by-order-id
|
|
2418
|
+
* @param {string} id order id
|
|
2419
|
+
* @param {string} symbol unified market symbol
|
|
2420
|
+
* @param {int} [since] the earliest time in ms to fetch trades for
|
|
2421
|
+
* @param {int} [limit] the maximum number of trades to retrieve
|
|
2422
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2423
|
+
* @returns {object[]} a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure}
|
|
2424
|
+
*/
|
|
2425
|
+
async fetchOrderTrades(id, symbol = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2426
|
+
await this.loadMarkets();
|
|
2427
|
+
const request = {
|
|
2428
|
+
'id': id,
|
|
2429
|
+
};
|
|
2430
|
+
const trades = await this.privateGetOrdersIdTrades(this.extend(request, params));
|
|
2431
|
+
//
|
|
2432
|
+
// [
|
|
2433
|
+
// {
|
|
2434
|
+
// "id": "30341456333942784",
|
|
2435
|
+
// "symbol": "LINK_USDT",
|
|
2436
|
+
// "accountType": "SPOT",
|
|
2437
|
+
// "orderId": "30249408733945856",
|
|
2438
|
+
// "side": "BUY",
|
|
2439
|
+
// "type": "LIMIT",
|
|
2440
|
+
// "matchRole": "MAKER",
|
|
2441
|
+
// "createTime": 1648200366864,
|
|
2442
|
+
// "price": "3.1",
|
|
2443
|
+
// "quantity": "1",
|
|
2444
|
+
// "amount": "3.1",
|
|
2445
|
+
// "feeCurrency": "LINK",
|
|
2446
|
+
// "feeAmount": "0.00145",
|
|
2447
|
+
// "pageId": "30341456333942784",
|
|
2448
|
+
// "clientOrderId": ""
|
|
2449
|
+
// }
|
|
2450
|
+
// ]
|
|
2451
|
+
//
|
|
2452
|
+
return this.parseTrades(trades);
|
|
2453
|
+
}
|
|
2454
|
+
parseBalance(response) {
|
|
2455
|
+
const result = {
|
|
2456
|
+
'info': response,
|
|
2457
|
+
'timestamp': undefined,
|
|
2458
|
+
'datetime': undefined,
|
|
2459
|
+
};
|
|
2460
|
+
// for swap
|
|
2461
|
+
if (!Array.isArray(response)) {
|
|
2462
|
+
const ts = this.safeInteger(response, 'uTime');
|
|
2463
|
+
result['timestamp'] = ts;
|
|
2464
|
+
result['datetime'] = this.iso8601(ts);
|
|
2465
|
+
const details = this.safeList(response, 'details', []);
|
|
2466
|
+
for (let i = 0; i < details.length; i++) {
|
|
2467
|
+
const balance = details[i];
|
|
2468
|
+
const currencyId = this.safeString(balance, 'ccy');
|
|
2469
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
2470
|
+
const account = this.account();
|
|
2471
|
+
account['total'] = this.safeString(balance, 'avail');
|
|
2472
|
+
account['used'] = this.safeString(balance, 'im');
|
|
2473
|
+
result[code] = account;
|
|
2474
|
+
}
|
|
2475
|
+
return this.safeBalance(result);
|
|
2476
|
+
}
|
|
2477
|
+
// for spot
|
|
2478
|
+
for (let i = 0; i < response.length; i++) {
|
|
2479
|
+
const account = this.safeValue(response, i, {});
|
|
2480
|
+
const balances = this.safeValue(account, 'balances');
|
|
2481
|
+
for (let j = 0; j < balances.length; j++) {
|
|
2482
|
+
const balance = this.safeValue(balances, j);
|
|
2483
|
+
const currencyId = this.safeString(balance, 'currency');
|
|
2484
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
2485
|
+
const newAccount = this.account();
|
|
2486
|
+
newAccount['free'] = this.safeString(balance, 'available');
|
|
2487
|
+
newAccount['used'] = this.safeString(balance, 'hold');
|
|
2488
|
+
result[code] = newAccount;
|
|
2489
|
+
}
|
|
2490
|
+
}
|
|
2491
|
+
return this.safeBalance(result);
|
|
2492
|
+
}
|
|
2493
|
+
/**
|
|
2494
|
+
* @method
|
|
2495
|
+
* @name poloniex#fetchBalance
|
|
2496
|
+
* @description query for balance and get the amount of funds available for trading or funds locked in orders
|
|
2497
|
+
* @see https://api-docs.poloniex.com/spot/api/private/account#all-account-balances
|
|
2498
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/account/balance
|
|
2499
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2500
|
+
* @returns {object} a [balance structure]{@link https://docs.ccxt.com/#/?id=balance-structure}
|
|
2501
|
+
*/
|
|
2502
|
+
async fetchBalance(params = {}) {
|
|
2503
|
+
await this.loadMarkets();
|
|
2504
|
+
let marketType = undefined;
|
|
2505
|
+
[marketType, params] = this.handleMarketTypeAndParams('fetchBalance', undefined, params);
|
|
2506
|
+
if (marketType !== 'spot') {
|
|
2507
|
+
const responseRaw = await this.swapPrivateGetV3AccountBalance(params);
|
|
2508
|
+
//
|
|
2509
|
+
// {
|
|
2510
|
+
// "code": "200",
|
|
2511
|
+
// "msg": "",
|
|
2512
|
+
// "data": {
|
|
2513
|
+
// "state": "NORMAL",
|
|
2514
|
+
// "eq": "9.98571622",
|
|
2515
|
+
// "isoEq": "0",
|
|
2516
|
+
// "im": "0",
|
|
2517
|
+
// "mm": "0",
|
|
2518
|
+
// "mmr": "0",
|
|
2519
|
+
// "upl": "0",
|
|
2520
|
+
// "availMgn": "9.98571622",
|
|
2521
|
+
// "cTime": "1738093601775",
|
|
2522
|
+
// "uTime": "1740829116236",
|
|
2523
|
+
// "details": [
|
|
2524
|
+
// {
|
|
2525
|
+
// "ccy": "USDT",
|
|
2526
|
+
// "eq": "9.98571622",
|
|
2527
|
+
// "isoEq": "0",
|
|
2528
|
+
// "avail": "9.98571622",
|
|
2529
|
+
// "trdHold": "0",
|
|
2530
|
+
// "upl": "0",
|
|
2531
|
+
// "isoAvail": "0",
|
|
2532
|
+
// "isoHold": "0",
|
|
2533
|
+
// "isoUpl": "0",
|
|
2534
|
+
// "im": "0",
|
|
2535
|
+
// "mm": "0",
|
|
2536
|
+
// "mmr": "0",
|
|
2537
|
+
// "imr": "0",
|
|
2538
|
+
// "cTime": "1740829116236",
|
|
2539
|
+
// "uTime": "1740829116236"
|
|
2540
|
+
// }
|
|
2541
|
+
// ]
|
|
2542
|
+
// }
|
|
2543
|
+
// }
|
|
2544
|
+
//
|
|
2545
|
+
const data = this.safeDict(responseRaw, 'data', {});
|
|
2546
|
+
return this.parseBalance(data);
|
|
2547
|
+
}
|
|
2548
|
+
const request = {
|
|
2549
|
+
'accountType': 'SPOT',
|
|
2550
|
+
};
|
|
2551
|
+
const response = await this.privateGetAccountsBalances(this.extend(request, params));
|
|
2552
|
+
//
|
|
2553
|
+
// [
|
|
2554
|
+
// {
|
|
2555
|
+
// "accountId" : "7xxxxxxxxxx8",
|
|
2556
|
+
// "accountType" : "SPOT",
|
|
2557
|
+
// "balances" : [
|
|
2558
|
+
// {
|
|
2559
|
+
// "currencyId" : "214",
|
|
2560
|
+
// "currency" : "USDT",
|
|
2561
|
+
// "available" : "2.00",
|
|
2562
|
+
// "hold" : "0.00"
|
|
2563
|
+
// }
|
|
2564
|
+
// ]
|
|
2565
|
+
// }
|
|
2566
|
+
// ]
|
|
2567
|
+
//
|
|
2568
|
+
return this.parseBalance(response);
|
|
2569
|
+
}
|
|
2570
|
+
/**
|
|
2571
|
+
* @method
|
|
2572
|
+
* @name poloniex#fetchTradingFees
|
|
2573
|
+
* @description fetch the trading fees for multiple markets
|
|
2574
|
+
* @see https://api-docs.poloniex.com/spot/api/private/account#fee-info
|
|
2575
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2576
|
+
* @returns {object} a dictionary of [fee structures]{@link https://docs.ccxt.com/#/?id=fee-structure} indexed by market symbols
|
|
2577
|
+
*/
|
|
2578
|
+
async fetchTradingFees(params = {}) {
|
|
2579
|
+
await this.loadMarkets();
|
|
2580
|
+
const response = await this.privateGetFeeinfo(params);
|
|
2581
|
+
//
|
|
2582
|
+
// {
|
|
2583
|
+
// "trxDiscount" : false,
|
|
2584
|
+
// "makerRate" : "0.00145",
|
|
2585
|
+
// "takerRate" : "0.00155",
|
|
2586
|
+
// "volume30D" : "0.00"
|
|
2587
|
+
// }
|
|
2588
|
+
//
|
|
2589
|
+
const result = {};
|
|
2590
|
+
for (let i = 0; i < this.symbols.length; i++) {
|
|
2591
|
+
const symbol = this.symbols[i];
|
|
2592
|
+
result[symbol] = {
|
|
2593
|
+
'info': response,
|
|
2594
|
+
'symbol': symbol,
|
|
2595
|
+
'maker': this.safeNumber(response, 'makerRate'),
|
|
2596
|
+
'taker': this.safeNumber(response, 'takerRate'),
|
|
2597
|
+
'percentage': true,
|
|
2598
|
+
'tierBased': true,
|
|
2599
|
+
};
|
|
2600
|
+
}
|
|
2601
|
+
return result;
|
|
2602
|
+
}
|
|
2603
|
+
/**
|
|
2604
|
+
* @method
|
|
2605
|
+
* @name poloniex#fetchOrderBook
|
|
2606
|
+
* @description fetches information on open orders with bid (buy) and ask (sell) prices, volumes and other data
|
|
2607
|
+
* @see https://api-docs.poloniex.com/spot/api/public/market-data#order-book
|
|
2608
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/market/get-order-book
|
|
2609
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
2610
|
+
* @param {int} [limit] the maximum amount of order book entries to return
|
|
2611
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2612
|
+
* @returns {object} A dictionary of [order book structures]{@link https://docs.ccxt.com/#/?id=order-book-structure} indexed by market symbols
|
|
2613
|
+
*/
|
|
2614
|
+
async fetchOrderBook(symbol, limit = undefined, params = {}) {
|
|
2615
|
+
await this.loadMarkets();
|
|
2616
|
+
const market = this.market(symbol);
|
|
2617
|
+
const request = {
|
|
2618
|
+
'symbol': market['id'],
|
|
2619
|
+
};
|
|
2620
|
+
if (limit !== undefined) {
|
|
2621
|
+
request['limit'] = limit; // The default value of limit is 10. Valid limit values are: 5, 10, 20, 50, 100, 150.
|
|
2622
|
+
if (market['contract']) {
|
|
2623
|
+
request['limit'] = this.findNearestCeiling([5, 10, 20, 100, 150], limit);
|
|
2624
|
+
}
|
|
2625
|
+
}
|
|
2626
|
+
if (market['contract']) {
|
|
2627
|
+
const responseRaw = await this.swapPublicGetV3MarketOrderBook(this.extend(request, params));
|
|
2628
|
+
//
|
|
2629
|
+
// {
|
|
2630
|
+
// "code": 200,
|
|
2631
|
+
// "data": {
|
|
2632
|
+
// "asks": [ ["58700", "9934"], ..],
|
|
2633
|
+
// "bids": [ ["58600", "9952"], ..],
|
|
2634
|
+
// "s": "100",
|
|
2635
|
+
// "ts": 1719974138333
|
|
2636
|
+
// },
|
|
2637
|
+
// "msg": "Success"
|
|
2638
|
+
// }
|
|
2639
|
+
//
|
|
2640
|
+
const data = this.safeDict(responseRaw, 'data', {});
|
|
2641
|
+
const ts = this.safeInteger(data, 'ts');
|
|
2642
|
+
return this.parseOrderBook(data, symbol, ts);
|
|
2643
|
+
}
|
|
2644
|
+
const response = await this.publicGetMarketsSymbolOrderBook(this.extend(request, params));
|
|
2645
|
+
//
|
|
2646
|
+
// {
|
|
2647
|
+
// "time" : 1659695219507,
|
|
2648
|
+
// "scale" : "-1",
|
|
2649
|
+
// "asks" : [ "23139.82", "0.317981", "23140", "0.191091", "23170.06", "0.01", "23200", "0.107758", "23230.55", "0.01", "23247.2", "0.154", "23254", "0.005121", "23263", "0.038", "23285.4", "0.308", "23300", "0.108896" ],
|
|
2650
|
+
// "bids" : [ "23139.74", "0.432092", "23139.73", "0.198592", "23123.21", "0.000886", "23123.2", "0.308", "23121.4", "0.154", "23105", "0.000789", "23100", "0.078175", "23069.1", "0.026276", "23068.83", "0.001329", "23051", "0.000048" ],
|
|
2651
|
+
// "ts" : 1659695219513
|
|
2652
|
+
// }
|
|
2653
|
+
//
|
|
2654
|
+
const timestamp = this.safeInteger(response, 'time');
|
|
2655
|
+
const asks = this.safeValue(response, 'asks');
|
|
2656
|
+
const bids = this.safeValue(response, 'bids');
|
|
2657
|
+
const asksResult = [];
|
|
2658
|
+
const bidsResult = [];
|
|
2659
|
+
for (let i = 0; i < asks.length; i++) {
|
|
2660
|
+
if ((i % 2) < 1) {
|
|
2661
|
+
const price = this.safeNumber(asks, i);
|
|
2662
|
+
const amount = this.safeNumber(asks, this.sum(i, 1));
|
|
2663
|
+
asksResult.push([price, amount]);
|
|
2664
|
+
}
|
|
2665
|
+
}
|
|
2666
|
+
for (let i = 0; i < bids.length; i++) {
|
|
2667
|
+
if ((i % 2) < 1) {
|
|
2668
|
+
const price = this.safeNumber(bids, i);
|
|
2669
|
+
const amount = this.safeNumber(bids, this.sum(i, 1));
|
|
2670
|
+
bidsResult.push([price, amount]);
|
|
2671
|
+
}
|
|
2672
|
+
}
|
|
2673
|
+
return {
|
|
2674
|
+
'symbol': market['symbol'],
|
|
2675
|
+
'bids': this.sortBy(bidsResult, 0, true),
|
|
2676
|
+
'asks': this.sortBy(asksResult, 0),
|
|
2677
|
+
'timestamp': timestamp,
|
|
2678
|
+
'datetime': this.iso8601(timestamp),
|
|
2679
|
+
'nonce': undefined,
|
|
2680
|
+
};
|
|
2681
|
+
}
|
|
2682
|
+
/**
|
|
2683
|
+
* @method
|
|
2684
|
+
* @name poloniex#createDepositAddress
|
|
2685
|
+
* @description create a currency deposit address
|
|
2686
|
+
* @see https://api-docs.poloniex.com/spot/api/private/wallet#deposit-addresses
|
|
2687
|
+
* @param {string} code unified currency code of the currency for the deposit address
|
|
2688
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2689
|
+
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
2690
|
+
*/
|
|
2691
|
+
async createDepositAddress(code, params = {}) {
|
|
2692
|
+
await this.loadMarkets();
|
|
2693
|
+
const [request, extraParams, currency, networkEntry] = this.prepareRequestForDepositAddress(code, params);
|
|
2694
|
+
params = extraParams;
|
|
2695
|
+
const response = await this.privatePostWalletsAddress(this.extend(request, params));
|
|
2696
|
+
//
|
|
2697
|
+
// {
|
|
2698
|
+
// "address" : "0xfxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxf"
|
|
2699
|
+
// }
|
|
2700
|
+
//
|
|
2701
|
+
return this.parseDepositAddressSpecial(response, currency, networkEntry);
|
|
2702
|
+
}
|
|
2703
|
+
/**
|
|
2704
|
+
* @method
|
|
2705
|
+
* @name poloniex#fetchDepositAddress
|
|
2706
|
+
* @description fetch the deposit address for a currency associated with this account
|
|
2707
|
+
* @see https://api-docs.poloniex.com/spot/api/private/wallet#deposit-addresses
|
|
2708
|
+
* @param {string} code unified currency code
|
|
2709
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2710
|
+
* @returns {object} an [address structure]{@link https://docs.ccxt.com/#/?id=address-structure}
|
|
2711
|
+
*/
|
|
2712
|
+
async fetchDepositAddress(code, params = {}) {
|
|
2713
|
+
await this.loadMarkets();
|
|
2714
|
+
const [request, extraParams, currency, networkEntry] = this.prepareRequestForDepositAddress(code, params);
|
|
2715
|
+
params = extraParams;
|
|
2716
|
+
const response = await this.privateGetWalletsAddresses(this.extend(request, params));
|
|
2717
|
+
//
|
|
2718
|
+
// {
|
|
2719
|
+
// "USDTTRON" : "Txxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxp"
|
|
2720
|
+
// }
|
|
2721
|
+
//
|
|
2722
|
+
const keys = Object.keys(response);
|
|
2723
|
+
const length = keys.length;
|
|
2724
|
+
if (length < 1) {
|
|
2725
|
+
throw new ExchangeError(this.id + ' fetchDepositAddress() returned an empty response, you might need to try "createDepositAddress" at first and then use "fetchDepositAddress"');
|
|
2726
|
+
}
|
|
2727
|
+
return this.parseDepositAddressSpecial(response, currency, networkEntry);
|
|
2728
|
+
}
|
|
2729
|
+
prepareRequestForDepositAddress(code, params = {}) {
|
|
2730
|
+
if (!(code in this.currencies)) {
|
|
2731
|
+
throw new BadSymbol(this.id + ' fetchDepositAddress(): can not recognize ' + code + ' currency, you might try using unified currency-code and add provide specific "network" parameter, like: fetchDepositAddress("USDT", { "network": "TRC20" })');
|
|
2732
|
+
}
|
|
2733
|
+
const currency = this.currency(code);
|
|
2734
|
+
let networkCode = undefined;
|
|
2735
|
+
[networkCode, params] = this.handleNetworkCodeAndParams(params);
|
|
2736
|
+
if (networkCode === undefined) {
|
|
2737
|
+
// we need to know the network to find out the currency-junction
|
|
2738
|
+
throw new ArgumentsRequired(this.id + ' fetchDepositAddress requires a network parameter for ' + code + '.');
|
|
2739
|
+
}
|
|
2740
|
+
let exchangeNetworkId = undefined;
|
|
2741
|
+
networkCode = this.networkIdToCode(networkCode, code);
|
|
2742
|
+
const networkEntry = this.safeDict(currency['networks'], networkCode);
|
|
2743
|
+
if (networkEntry !== undefined) {
|
|
2744
|
+
exchangeNetworkId = networkEntry['id'];
|
|
2745
|
+
}
|
|
2746
|
+
else {
|
|
2747
|
+
exchangeNetworkId = networkCode;
|
|
2748
|
+
}
|
|
2749
|
+
const request = {
|
|
2750
|
+
'currency': exchangeNetworkId,
|
|
2751
|
+
};
|
|
2752
|
+
return [request, params, currency, networkEntry];
|
|
2753
|
+
}
|
|
2754
|
+
parseDepositAddressSpecial(response, currency, networkEntry) {
|
|
2755
|
+
let address = this.safeString(response, 'address');
|
|
2756
|
+
if (address === undefined) {
|
|
2757
|
+
address = this.safeString(response, networkEntry['id']);
|
|
2758
|
+
}
|
|
2759
|
+
let tag = undefined;
|
|
2760
|
+
this.checkAddress(address);
|
|
2761
|
+
if (networkEntry !== undefined) {
|
|
2762
|
+
const depositAddress = this.safeString(networkEntry['info'], 'depositAddress');
|
|
2763
|
+
if (depositAddress !== undefined) {
|
|
2764
|
+
tag = address;
|
|
2765
|
+
address = depositAddress;
|
|
2766
|
+
}
|
|
2767
|
+
}
|
|
2768
|
+
return {
|
|
2769
|
+
'info': response,
|
|
2770
|
+
'currency': currency['code'],
|
|
2771
|
+
'network': this.safeString(networkEntry, 'network'),
|
|
2772
|
+
'address': address,
|
|
2773
|
+
'tag': tag,
|
|
2774
|
+
};
|
|
2775
|
+
}
|
|
2776
|
+
/**
|
|
2777
|
+
* @method
|
|
2778
|
+
* @name poloniex#transfer
|
|
2779
|
+
* @description transfer currency internally between wallets on the same account
|
|
2780
|
+
* @see https://api-docs.poloniex.com/spot/api/private/account#accounts-transfer
|
|
2781
|
+
* @param {string} code unified currency code
|
|
2782
|
+
* @param {float} amount amount to transfer
|
|
2783
|
+
* @param {string} fromAccount account to transfer from
|
|
2784
|
+
* @param {string} toAccount account to transfer to
|
|
2785
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2786
|
+
* @returns {object} a [transfer structure]{@link https://docs.ccxt.com/#/?id=transfer-structure}
|
|
2787
|
+
*/
|
|
2788
|
+
async transfer(code, amount, fromAccount, toAccount, params = {}) {
|
|
2789
|
+
await this.loadMarkets();
|
|
2790
|
+
const currency = this.currency(code);
|
|
2791
|
+
const accountsByType = this.safeValue(this.options, 'accountsByType', {});
|
|
2792
|
+
const fromId = this.safeString(accountsByType, fromAccount, fromAccount);
|
|
2793
|
+
const toId = this.safeString(accountsByType, toAccount, fromAccount);
|
|
2794
|
+
const request = {
|
|
2795
|
+
'amount': this.currencyToPrecision(code, amount),
|
|
2796
|
+
'currency': currency['id'],
|
|
2797
|
+
'fromAccount': fromId,
|
|
2798
|
+
'toAccount': toId,
|
|
2799
|
+
};
|
|
2800
|
+
const response = await this.privatePostAccountsTransfer(this.extend(request, params));
|
|
2801
|
+
//
|
|
2802
|
+
// {
|
|
2803
|
+
// "transferId" : "168041074"
|
|
2804
|
+
// }
|
|
2805
|
+
//
|
|
2806
|
+
return this.parseTransfer(response, currency);
|
|
2807
|
+
}
|
|
2808
|
+
parseTransfer(transfer, currency = undefined) {
|
|
2809
|
+
//
|
|
2810
|
+
// {
|
|
2811
|
+
// "transferId" : "168041074"
|
|
2812
|
+
// }
|
|
2813
|
+
//
|
|
2814
|
+
return {
|
|
2815
|
+
'info': transfer,
|
|
2816
|
+
'id': this.safeString(transfer, 'transferId'),
|
|
2817
|
+
'timestamp': undefined,
|
|
2818
|
+
'datetime': undefined,
|
|
2819
|
+
'currency': this.safeString(currency, 'id'),
|
|
2820
|
+
'amount': undefined,
|
|
2821
|
+
'fromAccount': undefined,
|
|
2822
|
+
'toAccount': undefined,
|
|
2823
|
+
'status': undefined,
|
|
2824
|
+
};
|
|
2825
|
+
}
|
|
2826
|
+
/**
|
|
2827
|
+
* @method
|
|
2828
|
+
* @name poloniex#withdraw
|
|
2829
|
+
* @description make a withdrawal
|
|
2830
|
+
* @see https://api-docs.poloniex.com/spot/api/private/wallet#withdraw-currency
|
|
2831
|
+
* @param {string} code unified currency code
|
|
2832
|
+
* @param {float} amount the amount to withdraw
|
|
2833
|
+
* @param {string} address the address to withdraw to
|
|
2834
|
+
* @param {string} tag
|
|
2835
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2836
|
+
* @returns {object} a [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2837
|
+
*/
|
|
2838
|
+
async withdraw(code, amount, address, tag = undefined, params = {}) {
|
|
2839
|
+
[tag, params] = this.handleWithdrawTagAndParams(tag, params);
|
|
2840
|
+
this.checkAddress(address);
|
|
2841
|
+
const [request, extraParams, currency, networkEntry] = this.prepareRequestForDepositAddress(code, params);
|
|
2842
|
+
params = extraParams;
|
|
2843
|
+
request['amount'] = this.currencyToPrecision(code, amount);
|
|
2844
|
+
request['address'] = address;
|
|
2845
|
+
if (tag !== undefined) {
|
|
2846
|
+
request['paymentId'] = tag;
|
|
2847
|
+
}
|
|
2848
|
+
const response = await this.privatePostWalletsWithdraw(this.extend(request, params));
|
|
2849
|
+
//
|
|
2850
|
+
// {
|
|
2851
|
+
// "response": "Withdrew 1.00000000 USDT.",
|
|
2852
|
+
// "email2FA": false,
|
|
2853
|
+
// "withdrawalNumber": 13449869
|
|
2854
|
+
// }
|
|
2855
|
+
//
|
|
2856
|
+
const withdrawResponse = {
|
|
2857
|
+
'response': response,
|
|
2858
|
+
'withdrawNetworkEntry': networkEntry,
|
|
2859
|
+
};
|
|
2860
|
+
return this.parseTransaction(withdrawResponse, currency);
|
|
2861
|
+
}
|
|
2862
|
+
async fetchTransactionsHelper(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2863
|
+
await this.loadMarkets();
|
|
2864
|
+
const year = 31104000; // 60 * 60 * 24 * 30 * 12 = one year of history, why not
|
|
2865
|
+
const now = this.seconds();
|
|
2866
|
+
const start = (since !== undefined) ? this.parseToInt(since / 1000) : now - 10 * year;
|
|
2867
|
+
const request = {
|
|
2868
|
+
'start': start,
|
|
2869
|
+
'end': now, // UNIX timestamp, required
|
|
2870
|
+
};
|
|
2871
|
+
const response = await this.privateGetWalletsActivity(this.extend(request, params));
|
|
2872
|
+
//
|
|
2873
|
+
// {
|
|
2874
|
+
// "adjustments":[],
|
|
2875
|
+
// "deposits":[
|
|
2876
|
+
// {
|
|
2877
|
+
// "currency": "BTC",
|
|
2878
|
+
// "address": "1MEtiqJWru53FhhHrfJPPvd2tC3TPDVcmW",
|
|
2879
|
+
// "amount": "0.01063000",
|
|
2880
|
+
// "confirmations": 1,
|
|
2881
|
+
// "txid": "952b0e1888d6d491591facc0d37b5ebec540ac1efb241fdbc22bcc20d1822fb6",
|
|
2882
|
+
// "timestamp": 1507916888,
|
|
2883
|
+
// "status": "COMPLETE"
|
|
2884
|
+
// },
|
|
2885
|
+
// {
|
|
2886
|
+
// "currency": "ETH",
|
|
2887
|
+
// "address": "0x20108ba20b65c04d82909e91df06618107460197",
|
|
2888
|
+
// "amount": "4.00000000",
|
|
2889
|
+
// "confirmations": 38,
|
|
2890
|
+
// "txid": "0x4be260073491fe63935e9e0da42bd71138fdeb803732f41501015a2d46eb479d",
|
|
2891
|
+
// "timestamp": 1525060430,
|
|
2892
|
+
// "status": "COMPLETE"
|
|
2893
|
+
// }
|
|
2894
|
+
// ],
|
|
2895
|
+
// "withdrawals":[
|
|
2896
|
+
// {
|
|
2897
|
+
// "withdrawalNumber":13449869,
|
|
2898
|
+
// "currency":"USDTTRON", // not documented in API docs, see commonCurrencies in describe()
|
|
2899
|
+
// "address":"TXGaqPW23JdRWhsVwS2mRsGsegbdnAd3Rw",
|
|
2900
|
+
// "amount":"1.00000000",
|
|
2901
|
+
// "fee":"0.00000000",
|
|
2902
|
+
// "timestamp":1591573420,
|
|
2903
|
+
// "status":"COMPLETE: dadf427224b3d44b38a2c13caa4395e4666152556ca0b2f67dbd86a95655150f",
|
|
2904
|
+
// "ipAddress":"x.x.x.x",
|
|
2905
|
+
// "canCancel":0,
|
|
2906
|
+
// "canResendEmail":0,
|
|
2907
|
+
// "paymentID":null,
|
|
2908
|
+
// "scope":"crypto"
|
|
2909
|
+
// },
|
|
2910
|
+
// {
|
|
2911
|
+
// "withdrawalNumber": 8224394,
|
|
2912
|
+
// "currency": "EMC2",
|
|
2913
|
+
// "address": "EYEKyCrqTNmVCpdDV8w49XvSKRP9N3EUyF",
|
|
2914
|
+
// "amount": "63.10796020",
|
|
2915
|
+
// "fee": "0.01000000",
|
|
2916
|
+
// "timestamp": 1510819838,
|
|
2917
|
+
// "status": "COMPLETE: d37354f9d02cb24d98c8c4fc17aa42f475530b5727effdf668ee5a43ce667fd6",
|
|
2918
|
+
// "ipAddress": "x.x.x.x"
|
|
2919
|
+
// },
|
|
2920
|
+
// {
|
|
2921
|
+
// "withdrawalNumber": 9290444,
|
|
2922
|
+
// "currency": "ETH",
|
|
2923
|
+
// "address": "0x191015ff2e75261d50433fbd05bd57e942336149",
|
|
2924
|
+
// "amount": "0.15500000",
|
|
2925
|
+
// "fee": "0.00500000",
|
|
2926
|
+
// "timestamp": 1514099289,
|
|
2927
|
+
// "status": "COMPLETE: 0x12d444493b4bca668992021fd9e54b5292b8e71d9927af1f076f554e4bea5b2d",
|
|
2928
|
+
// "ipAddress": "x.x.x.x"
|
|
2929
|
+
// },
|
|
2930
|
+
// {
|
|
2931
|
+
// "withdrawalNumber": 11518260,
|
|
2932
|
+
// "currency": "BTC",
|
|
2933
|
+
// "address": "8JoDXAmE1GY2LRK8jD1gmAmgRPq54kXJ4t",
|
|
2934
|
+
// "amount": "0.20000000",
|
|
2935
|
+
// "fee": "0.00050000",
|
|
2936
|
+
// "timestamp": 1527918155,
|
|
2937
|
+
// "status": "COMPLETE: 1864f4ebb277d90b0b1ff53259b36b97fa1990edc7ad2be47c5e0ab41916b5ff",
|
|
2938
|
+
// "ipAddress": "x.x.x.x"
|
|
2939
|
+
// }
|
|
2940
|
+
// ]
|
|
2941
|
+
// }
|
|
2942
|
+
//
|
|
2943
|
+
return response;
|
|
2944
|
+
}
|
|
2945
|
+
/**
|
|
2946
|
+
* @method
|
|
2947
|
+
* @name poloniex#fetchDepositsWithdrawals
|
|
2948
|
+
* @description fetch history of deposits and withdrawals
|
|
2949
|
+
* @see https://api-docs.poloniex.com/spot/api/private/wallet#wallets-activity-records
|
|
2950
|
+
* @param {string} [code] unified currency code for the currency of the deposit/withdrawals, default is undefined
|
|
2951
|
+
* @param {int} [since] timestamp in ms of the earliest deposit/withdrawal, default is undefined
|
|
2952
|
+
* @param {int} [limit] max number of deposit/withdrawals to return, default is undefined
|
|
2953
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2954
|
+
* @returns {object} a list of [transaction structure]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2955
|
+
*/
|
|
2956
|
+
async fetchDepositsWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2957
|
+
await this.loadMarkets();
|
|
2958
|
+
const response = await this.fetchTransactionsHelper(code, since, limit, params);
|
|
2959
|
+
let currency = undefined;
|
|
2960
|
+
if (code !== undefined) {
|
|
2961
|
+
currency = this.currency(code);
|
|
2962
|
+
}
|
|
2963
|
+
const withdrawals = this.safeValue(response, 'withdrawals', []);
|
|
2964
|
+
const deposits = this.safeValue(response, 'deposits', []);
|
|
2965
|
+
const withdrawalTransactions = this.parseTransactions(withdrawals, currency, since, limit);
|
|
2966
|
+
const depositTransactions = this.parseTransactions(deposits, currency, since, limit);
|
|
2967
|
+
const transactions = this.arrayConcat(depositTransactions, withdrawalTransactions);
|
|
2968
|
+
return this.filterByCurrencySinceLimit(this.sortBy(transactions, 'timestamp'), code, since, limit);
|
|
2969
|
+
}
|
|
2970
|
+
/**
|
|
2971
|
+
* @method
|
|
2972
|
+
* @name poloniex#fetchWithdrawals
|
|
2973
|
+
* @description fetch all withdrawals made from an account
|
|
2974
|
+
* @see https://api-docs.poloniex.com/spot/api/private/wallet#wallets-activity-records
|
|
2975
|
+
* @param {string} code unified currency code
|
|
2976
|
+
* @param {int} [since] the earliest time in ms to fetch withdrawals for
|
|
2977
|
+
* @param {int} [limit] the maximum number of withdrawals structures to retrieve
|
|
2978
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2979
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
2980
|
+
*/
|
|
2981
|
+
async fetchWithdrawals(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
2982
|
+
const response = await this.fetchTransactionsHelper(code, since, limit, params);
|
|
2983
|
+
let currency = undefined;
|
|
2984
|
+
if (code !== undefined) {
|
|
2985
|
+
currency = this.currency(code);
|
|
2986
|
+
}
|
|
2987
|
+
const withdrawals = this.safeValue(response, 'withdrawals', []);
|
|
2988
|
+
const transactions = this.parseTransactions(withdrawals, currency, since, limit);
|
|
2989
|
+
return this.filterByCurrencySinceLimit(transactions, code, since, limit);
|
|
2990
|
+
}
|
|
2991
|
+
/**
|
|
2992
|
+
* @method
|
|
2993
|
+
* @name poloniex#fetchDepositWithdrawFees
|
|
2994
|
+
* @description fetch deposit and withdraw fees
|
|
2995
|
+
* @see https://api-docs.poloniex.com/spot/api/public/reference-data#currency-information
|
|
2996
|
+
* @param {string[]|undefined} codes list of unified currency codes
|
|
2997
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
2998
|
+
* @returns {object[]} a list of [fees structures]{@link https://docs.ccxt.com/#/?id=fee-structure}
|
|
2999
|
+
*/
|
|
3000
|
+
async fetchDepositWithdrawFees(codes = undefined, params = {}) {
|
|
3001
|
+
await this.loadMarkets();
|
|
3002
|
+
const response = await this.publicGetCurrencies(this.extend(params, { 'includeMultiChainCurrencies': true }));
|
|
3003
|
+
//
|
|
3004
|
+
// [
|
|
3005
|
+
// {
|
|
3006
|
+
// "1CR": {
|
|
3007
|
+
// "id": 1,
|
|
3008
|
+
// "name": "1CRedit",
|
|
3009
|
+
// "description": "BTC Clone",
|
|
3010
|
+
// "type": "address",
|
|
3011
|
+
// "withdrawalFee": "0.01000000",
|
|
3012
|
+
// "minConf": 10000,
|
|
3013
|
+
// "depositAddress": null,
|
|
3014
|
+
// "blockchain": "1CR",
|
|
3015
|
+
// "delisted": false,
|
|
3016
|
+
// "tradingState": "NORMAL",
|
|
3017
|
+
// "walletState": "DISABLED",
|
|
3018
|
+
// "parentChain": null,
|
|
3019
|
+
// "isMultiChain": false,
|
|
3020
|
+
// "isChildChain": false,
|
|
3021
|
+
// "childChains": []
|
|
3022
|
+
// }
|
|
3023
|
+
// }
|
|
3024
|
+
// ]
|
|
3025
|
+
//
|
|
3026
|
+
const data = {};
|
|
3027
|
+
for (let i = 0; i < response.length; i++) {
|
|
3028
|
+
const entry = response[i];
|
|
3029
|
+
const currencies = Object.keys(entry);
|
|
3030
|
+
const currencyId = this.safeString(currencies, 0);
|
|
3031
|
+
data[currencyId] = entry[currencyId];
|
|
3032
|
+
}
|
|
3033
|
+
return this.parseDepositWithdrawFees(data, codes);
|
|
3034
|
+
}
|
|
3035
|
+
parseDepositWithdrawFees(response, codes = undefined, currencyIdKey = undefined) {
|
|
3036
|
+
//
|
|
3037
|
+
// {
|
|
3038
|
+
// "1CR": {
|
|
3039
|
+
// "id": 1,
|
|
3040
|
+
// "name": "1CRedit",
|
|
3041
|
+
// "description": "BTC Clone",
|
|
3042
|
+
// "type": "address",
|
|
3043
|
+
// "withdrawalFee": "0.01000000",
|
|
3044
|
+
// "minConf": 10000,
|
|
3045
|
+
// "depositAddress": null,
|
|
3046
|
+
// "blockchain": "1CR",
|
|
3047
|
+
// "delisted": false,
|
|
3048
|
+
// "tradingState": "NORMAL",
|
|
3049
|
+
// "walletState": "DISABLED",
|
|
3050
|
+
// "parentChain": null,
|
|
3051
|
+
// "isMultiChain": false,
|
|
3052
|
+
// "isChildChain": false,
|
|
3053
|
+
// "childChains": []
|
|
3054
|
+
// },
|
|
3055
|
+
// }
|
|
3056
|
+
//
|
|
3057
|
+
const depositWithdrawFees = {};
|
|
3058
|
+
codes = this.marketCodes(codes);
|
|
3059
|
+
const responseKeys = Object.keys(response);
|
|
3060
|
+
for (let i = 0; i < responseKeys.length; i++) {
|
|
3061
|
+
const currencyId = responseKeys[i];
|
|
3062
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
3063
|
+
const feeInfo = response[currencyId];
|
|
3064
|
+
if ((codes === undefined) || (this.inArray(code, codes))) {
|
|
3065
|
+
const currency = this.currency(code);
|
|
3066
|
+
depositWithdrawFees[code] = this.parseDepositWithdrawFee(feeInfo, currency);
|
|
3067
|
+
const childChains = this.safeValue(feeInfo, 'childChains');
|
|
3068
|
+
const chainsLength = childChains.length;
|
|
3069
|
+
if (chainsLength > 0) {
|
|
3070
|
+
for (let j = 0; j < childChains.length; j++) {
|
|
3071
|
+
let networkId = childChains[j];
|
|
3072
|
+
networkId = networkId.replace(code, '');
|
|
3073
|
+
const networkCode = this.networkIdToCode(networkId);
|
|
3074
|
+
const networkInfo = this.safeValue(response, networkId);
|
|
3075
|
+
const networkObject = {};
|
|
3076
|
+
const withdrawFee = this.safeNumber(networkInfo, 'withdrawalFee');
|
|
3077
|
+
networkObject[networkCode] = {
|
|
3078
|
+
'withdraw': {
|
|
3079
|
+
'fee': withdrawFee,
|
|
3080
|
+
'percentage': (withdrawFee !== undefined) ? false : undefined,
|
|
3081
|
+
},
|
|
3082
|
+
'deposit': {
|
|
3083
|
+
'fee': undefined,
|
|
3084
|
+
'percentage': undefined,
|
|
3085
|
+
},
|
|
3086
|
+
};
|
|
3087
|
+
depositWithdrawFees[code]['networks'] = this.extend(depositWithdrawFees[code]['networks'], networkObject);
|
|
3088
|
+
}
|
|
3089
|
+
}
|
|
3090
|
+
}
|
|
3091
|
+
}
|
|
3092
|
+
return depositWithdrawFees;
|
|
3093
|
+
}
|
|
3094
|
+
parseDepositWithdrawFee(fee, currency = undefined) {
|
|
3095
|
+
const depositWithdrawFee = this.depositWithdrawFee({});
|
|
3096
|
+
depositWithdrawFee['info'][currency['code']] = fee;
|
|
3097
|
+
const networkId = this.safeString(fee, 'blockchain');
|
|
3098
|
+
const withdrawFee = this.safeNumber(fee, 'withdrawalFee');
|
|
3099
|
+
const withdrawResult = {
|
|
3100
|
+
'fee': withdrawFee,
|
|
3101
|
+
'percentage': (withdrawFee !== undefined) ? false : undefined,
|
|
3102
|
+
};
|
|
3103
|
+
const depositResult = {
|
|
3104
|
+
'fee': undefined,
|
|
3105
|
+
'percentage': undefined,
|
|
3106
|
+
};
|
|
3107
|
+
depositWithdrawFee['withdraw'] = withdrawResult;
|
|
3108
|
+
depositWithdrawFee['deposit'] = depositResult;
|
|
3109
|
+
const networkCode = this.networkIdToCode(networkId);
|
|
3110
|
+
depositWithdrawFee['networks'][networkCode] = {
|
|
3111
|
+
'withdraw': withdrawResult,
|
|
3112
|
+
'deposit': depositResult,
|
|
3113
|
+
};
|
|
3114
|
+
return depositWithdrawFee;
|
|
3115
|
+
}
|
|
3116
|
+
/**
|
|
3117
|
+
* @method
|
|
3118
|
+
* @name poloniex#fetchDeposits
|
|
3119
|
+
* @description fetch all deposits made to an account
|
|
3120
|
+
* @see https://api-docs.poloniex.com/spot/api/private/wallet#wallets-activity-records
|
|
3121
|
+
* @param {string} code unified currency code
|
|
3122
|
+
* @param {int} [since] the earliest time in ms to fetch deposits for
|
|
3123
|
+
* @param {int} [limit] the maximum number of deposits structures to retrieve
|
|
3124
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3125
|
+
* @returns {object[]} a list of [transaction structures]{@link https://docs.ccxt.com/#/?id=transaction-structure}
|
|
3126
|
+
*/
|
|
3127
|
+
async fetchDeposits(code = undefined, since = undefined, limit = undefined, params = {}) {
|
|
3128
|
+
const response = await this.fetchTransactionsHelper(code, since, limit, params);
|
|
3129
|
+
let currency = undefined;
|
|
3130
|
+
if (code !== undefined) {
|
|
3131
|
+
currency = this.currency(code);
|
|
3132
|
+
}
|
|
3133
|
+
const deposits = this.safeValue(response, 'deposits', []);
|
|
3134
|
+
const transactions = this.parseTransactions(deposits, currency, since, limit);
|
|
3135
|
+
return this.filterByCurrencySinceLimit(transactions, code, since, limit);
|
|
3136
|
+
}
|
|
3137
|
+
parseTransactionStatus(status) {
|
|
3138
|
+
const statuses = {
|
|
3139
|
+
'COMPLETE': 'ok',
|
|
3140
|
+
'COMPLETED': 'ok',
|
|
3141
|
+
'AWAITING APPROVAL': 'pending',
|
|
3142
|
+
'AWAITING_APPROVAL': 'pending',
|
|
3143
|
+
'PENDING': 'pending',
|
|
3144
|
+
'PROCESSING': 'pending',
|
|
3145
|
+
'COMPLETE ERROR': 'failed',
|
|
3146
|
+
'COMPLETE_ERROR': 'failed',
|
|
3147
|
+
};
|
|
3148
|
+
return this.safeString(statuses, status, status);
|
|
3149
|
+
}
|
|
3150
|
+
parseTransaction(transaction, currency = undefined) {
|
|
3151
|
+
//
|
|
3152
|
+
// deposits
|
|
3153
|
+
//
|
|
3154
|
+
// {
|
|
3155
|
+
// "txid": "f49d489616911db44b740612d19464521179c76ebe9021af85b6de1e2f8d68cd",
|
|
3156
|
+
// "amount": "49798.01987021",
|
|
3157
|
+
// "status": "COMPLETE",
|
|
3158
|
+
// "address": "DJVJZ58tJC8UeUv9Tqcdtn6uhWobouxFLT",
|
|
3159
|
+
// "currency": "DOGE",
|
|
3160
|
+
// "timestamp": 1524321838,
|
|
3161
|
+
// "confirmations": 3371,
|
|
3162
|
+
// "depositNumber": 134587098
|
|
3163
|
+
// }
|
|
3164
|
+
//
|
|
3165
|
+
// withdrawals
|
|
3166
|
+
//
|
|
3167
|
+
// {
|
|
3168
|
+
// "withdrawalRequestsId": 7397527,
|
|
3169
|
+
// "currency": "ETC",
|
|
3170
|
+
// "address": "0x26419a62055af459d2cd69bb7392f5100b75e304",
|
|
3171
|
+
// "amount": "13.19951600",
|
|
3172
|
+
// "fee": "0.01000000",
|
|
3173
|
+
// "timestamp": 1506010932,
|
|
3174
|
+
// "status": "COMPLETED",
|
|
3175
|
+
// "txid": "343346392f82ac16e8c2604f2a604b7b2382d0e9d8030f673821f8de4b5f5bk",
|
|
3176
|
+
// "ipAddress": "1.2.3.4",
|
|
3177
|
+
// "paymentID": null
|
|
3178
|
+
// }
|
|
3179
|
+
//
|
|
3180
|
+
// withdraw
|
|
3181
|
+
//
|
|
3182
|
+
// {
|
|
3183
|
+
// "withdrawalRequestsId": 33485231
|
|
3184
|
+
// }
|
|
3185
|
+
//
|
|
3186
|
+
// if it's being parsed from "withdraw()" method, get the original response
|
|
3187
|
+
if ('withdrawNetworkEntry' in transaction) {
|
|
3188
|
+
transaction = transaction['response'];
|
|
3189
|
+
}
|
|
3190
|
+
const timestamp = this.safeTimestamp(transaction, 'timestamp');
|
|
3191
|
+
const currencyId = this.safeString(transaction, 'currency');
|
|
3192
|
+
const code = this.safeCurrencyCode(currencyId);
|
|
3193
|
+
let status = this.safeString(transaction, 'status', 'pending');
|
|
3194
|
+
status = this.parseTransactionStatus(status);
|
|
3195
|
+
const txid = this.safeString(transaction, 'txid');
|
|
3196
|
+
const type = ('withdrawalRequestsId' in transaction) ? 'withdrawal' : 'deposit';
|
|
3197
|
+
const id = this.safeString2(transaction, 'withdrawalRequestsId', 'depositNumber');
|
|
3198
|
+
const address = this.safeString(transaction, 'address');
|
|
3199
|
+
const tag = this.safeString(transaction, 'paymentID');
|
|
3200
|
+
let amountString = this.safeString(transaction, 'amount');
|
|
3201
|
+
const feeCostString = this.safeString(transaction, 'fee');
|
|
3202
|
+
if (type === 'withdrawal') {
|
|
3203
|
+
amountString = Precise.stringSub(amountString, feeCostString);
|
|
3204
|
+
}
|
|
3205
|
+
return {
|
|
3206
|
+
'info': transaction,
|
|
3207
|
+
'id': id,
|
|
3208
|
+
'currency': code,
|
|
3209
|
+
'amount': this.parseNumber(amountString),
|
|
3210
|
+
'network': undefined,
|
|
3211
|
+
'address': address,
|
|
3212
|
+
'addressTo': undefined,
|
|
3213
|
+
'addressFrom': undefined,
|
|
3214
|
+
'tag': tag,
|
|
3215
|
+
'tagTo': undefined,
|
|
3216
|
+
'tagFrom': undefined,
|
|
3217
|
+
'status': status,
|
|
3218
|
+
'type': type,
|
|
3219
|
+
'updated': undefined,
|
|
3220
|
+
'txid': txid,
|
|
3221
|
+
'timestamp': timestamp,
|
|
3222
|
+
'datetime': this.iso8601(timestamp),
|
|
3223
|
+
'comment': undefined,
|
|
3224
|
+
'internal': undefined,
|
|
3225
|
+
'fee': {
|
|
3226
|
+
'currency': code,
|
|
3227
|
+
'cost': this.parseNumber(feeCostString),
|
|
3228
|
+
'rate': undefined,
|
|
3229
|
+
},
|
|
3230
|
+
};
|
|
3231
|
+
}
|
|
3232
|
+
/**
|
|
3233
|
+
* @method
|
|
3234
|
+
* @name poloniex#setLeverage
|
|
3235
|
+
* @description set the level of leverage for a market
|
|
3236
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/positions/set-leverage
|
|
3237
|
+
* @param {int} leverage the rate of leverage
|
|
3238
|
+
* @param {string} symbol unified market symbol
|
|
3239
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3240
|
+
* @param {string} [params.marginMode] 'cross' or 'isolated'
|
|
3241
|
+
* @returns {object} response from the exchange
|
|
3242
|
+
*/
|
|
3243
|
+
async setLeverage(leverage, symbol = undefined, params = {}) {
|
|
3244
|
+
if (symbol === undefined) {
|
|
3245
|
+
throw new ArgumentsRequired(this.id + ' setLeverage() requires a symbol argument');
|
|
3246
|
+
}
|
|
3247
|
+
await this.loadMarkets();
|
|
3248
|
+
const market = this.market(symbol);
|
|
3249
|
+
let marginMode = undefined;
|
|
3250
|
+
[marginMode, params] = this.handleMarginModeAndParams('setLeverage', params);
|
|
3251
|
+
if (marginMode === undefined) {
|
|
3252
|
+
throw new ArgumentsRequired(this.id + ' setLeverage() requires a marginMode parameter "cross" or "isolated"');
|
|
3253
|
+
}
|
|
3254
|
+
let hedged = undefined;
|
|
3255
|
+
[hedged, params] = this.handleParamBool(params, 'hedged', false);
|
|
3256
|
+
if (hedged) {
|
|
3257
|
+
if (!('posSide' in params)) {
|
|
3258
|
+
throw new ArgumentsRequired(this.id + ' setLeverage() requires a posSide parameter for hedged mode: "LONG" or "SHORT"');
|
|
3259
|
+
}
|
|
3260
|
+
}
|
|
3261
|
+
const request = {
|
|
3262
|
+
'lever': leverage,
|
|
3263
|
+
'mgnMode': marginMode.toUpperCase(),
|
|
3264
|
+
'symbol': market['id'],
|
|
3265
|
+
};
|
|
3266
|
+
const response = await this.swapPrivatePostV3PositionLeverage(this.extend(request, params));
|
|
3267
|
+
return response;
|
|
3268
|
+
}
|
|
3269
|
+
/**
|
|
3270
|
+
* @method
|
|
3271
|
+
* @name poloniex#fetchLeverage
|
|
3272
|
+
* @description fetch the set leverage for a market
|
|
3273
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/positions/get-leverages
|
|
3274
|
+
* @param {string} symbol unified market symbol
|
|
3275
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3276
|
+
* @returns {object} a [leverage structure]{@link https://docs.ccxt.com/#/?id=leverage-structure}
|
|
3277
|
+
*/
|
|
3278
|
+
async fetchLeverage(symbol, params = {}) {
|
|
3279
|
+
await this.loadMarkets();
|
|
3280
|
+
const market = this.market(symbol);
|
|
3281
|
+
const request = {
|
|
3282
|
+
'symbol': market['id'],
|
|
3283
|
+
};
|
|
3284
|
+
let marginMode = undefined;
|
|
3285
|
+
[marginMode, params] = this.handleMarginModeAndParams('fetchLeverage', params);
|
|
3286
|
+
if (marginMode === undefined) {
|
|
3287
|
+
throw new ArgumentsRequired(this.id + ' fetchLeverage() requires a marginMode parameter "cross" or "isolated"');
|
|
3288
|
+
}
|
|
3289
|
+
request['mgnMode'] = marginMode.toUpperCase();
|
|
3290
|
+
const response = await this.swapPrivateGetV3PositionLeverages(this.extend(request, params));
|
|
3291
|
+
//
|
|
3292
|
+
// for one-way mode:
|
|
3293
|
+
//
|
|
3294
|
+
// {
|
|
3295
|
+
// "code": "200",
|
|
3296
|
+
// "msg": "",
|
|
3297
|
+
// "data": [
|
|
3298
|
+
// {
|
|
3299
|
+
// "symbol": "BTC_USDT_PERP",
|
|
3300
|
+
// "lever": "10",
|
|
3301
|
+
// "mgnMode": "CROSS",
|
|
3302
|
+
// "posSide": "BOTH"
|
|
3303
|
+
// }
|
|
3304
|
+
// ]
|
|
3305
|
+
// }
|
|
3306
|
+
//
|
|
3307
|
+
// for hedge:
|
|
3308
|
+
//
|
|
3309
|
+
// {
|
|
3310
|
+
// "code": "200",
|
|
3311
|
+
// "msg": "",
|
|
3312
|
+
// "data": [
|
|
3313
|
+
// {
|
|
3314
|
+
// "symbol": "BTC_USDT_PERP",
|
|
3315
|
+
// "lever": "20",
|
|
3316
|
+
// "mgnMode": "CROSS",
|
|
3317
|
+
// "posSide": "SHORT"
|
|
3318
|
+
// },
|
|
3319
|
+
// {
|
|
3320
|
+
// "symbol": "BTC_USDT_PERP",
|
|
3321
|
+
// "lever": "20",
|
|
3322
|
+
// "mgnMode": "CROSS",
|
|
3323
|
+
// "posSide": "LONG"
|
|
3324
|
+
// }
|
|
3325
|
+
// ]
|
|
3326
|
+
// }
|
|
3327
|
+
//
|
|
3328
|
+
return this.parseLeverage(response, market);
|
|
3329
|
+
}
|
|
3330
|
+
parseLeverage(leverage, market = undefined) {
|
|
3331
|
+
let shortLeverage = undefined;
|
|
3332
|
+
let longLeverage = undefined;
|
|
3333
|
+
let marketId = undefined;
|
|
3334
|
+
let marginMode = undefined;
|
|
3335
|
+
const data = this.safeList(leverage, 'data');
|
|
3336
|
+
for (let i = 0; i < data.length; i++) {
|
|
3337
|
+
const entry = data[i];
|
|
3338
|
+
marketId = this.safeString(entry, 'symbol');
|
|
3339
|
+
marginMode = this.safeString(entry, 'mgnMode');
|
|
3340
|
+
const lever = this.safeInteger(entry, 'lever');
|
|
3341
|
+
const posSide = this.safeString(entry, 'posSide');
|
|
3342
|
+
if (posSide === 'LONG') {
|
|
3343
|
+
longLeverage = lever;
|
|
3344
|
+
}
|
|
3345
|
+
else if (posSide === 'SHORT') {
|
|
3346
|
+
shortLeverage = lever;
|
|
3347
|
+
}
|
|
3348
|
+
else {
|
|
3349
|
+
longLeverage = lever;
|
|
3350
|
+
shortLeverage = lever;
|
|
3351
|
+
}
|
|
3352
|
+
}
|
|
3353
|
+
return {
|
|
3354
|
+
'info': leverage,
|
|
3355
|
+
'symbol': this.safeSymbol(marketId, market),
|
|
3356
|
+
'marginMode': marginMode,
|
|
3357
|
+
'longLeverage': longLeverage,
|
|
3358
|
+
'shortLeverage': shortLeverage,
|
|
3359
|
+
};
|
|
3360
|
+
}
|
|
3361
|
+
/**
|
|
3362
|
+
* @method
|
|
3363
|
+
* @name poloniex#fetchPositionMode
|
|
3364
|
+
* @description fetchs the position mode, hedged or one way, hedged for binance is set identically for all linear markets or all inverse markets
|
|
3365
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
|
|
3366
|
+
* @param {string} symbol unified symbol of the market to fetch the order book for
|
|
3367
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3368
|
+
* @returns {object} an object detailing whether the market is in hedged or one-way mode
|
|
3369
|
+
*/
|
|
3370
|
+
async fetchPositionMode(symbol = undefined, params = {}) {
|
|
3371
|
+
const response = await this.swapPrivateGetV3PositionMode(params);
|
|
3372
|
+
//
|
|
3373
|
+
// {
|
|
3374
|
+
// "code": "200",
|
|
3375
|
+
// "msg": "Success",
|
|
3376
|
+
// "data": {
|
|
3377
|
+
// "posMode": "ONE_WAY"
|
|
3378
|
+
// }
|
|
3379
|
+
// }
|
|
3380
|
+
//
|
|
3381
|
+
const data = this.safeDict(response, 'data', {});
|
|
3382
|
+
const posMode = this.safeString(data, 'posMode');
|
|
3383
|
+
const hedged = posMode === 'HEDGE';
|
|
3384
|
+
return {
|
|
3385
|
+
'info': response,
|
|
3386
|
+
'hedged': hedged,
|
|
3387
|
+
};
|
|
3388
|
+
}
|
|
3389
|
+
/**
|
|
3390
|
+
* @method
|
|
3391
|
+
* @name poloniex#setPositionMode
|
|
3392
|
+
* @description set hedged to true or false for a market
|
|
3393
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/positions/position-mode-switch
|
|
3394
|
+
* @param {bool} hedged set to true to use dualSidePosition
|
|
3395
|
+
* @param {string} symbol not used by binance setPositionMode ()
|
|
3396
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3397
|
+
* @returns {object} response from the exchange
|
|
3398
|
+
*/
|
|
3399
|
+
async setPositionMode(hedged, symbol = undefined, params = {}) {
|
|
3400
|
+
const mode = hedged ? 'HEDGE' : 'ONE_WAY';
|
|
3401
|
+
const request = {
|
|
3402
|
+
'posMode': mode,
|
|
3403
|
+
};
|
|
3404
|
+
const response = await this.swapPrivatePostV3PositionMode(this.extend(request, params));
|
|
3405
|
+
//
|
|
3406
|
+
// {
|
|
3407
|
+
// "code": "200",
|
|
3408
|
+
// "msg": "Success",
|
|
3409
|
+
// "data": {}
|
|
3410
|
+
// }
|
|
3411
|
+
//
|
|
3412
|
+
return response;
|
|
3413
|
+
}
|
|
3414
|
+
/**
|
|
3415
|
+
* @method
|
|
3416
|
+
* @name poloniex#fetchPositions
|
|
3417
|
+
* @description fetch all open positions
|
|
3418
|
+
* @see https://api-docs.poloniex.com/v3/futures/api/positions/get-current-position
|
|
3419
|
+
* @param {string[]|undefined} symbols list of unified market symbols
|
|
3420
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3421
|
+
* @param {boolean} [params.standard] whether to fetch standard contract positions
|
|
3422
|
+
* @returns {object[]} a list of [position structures]{@link https://docs.ccxt.com/#/?id=position-structure}
|
|
3423
|
+
*/
|
|
3424
|
+
async fetchPositions(symbols = undefined, params = {}) {
|
|
3425
|
+
await this.loadMarkets();
|
|
3426
|
+
symbols = this.marketSymbols(symbols);
|
|
3427
|
+
const response = await this.swapPrivateGetV3TradePositionOpens(params);
|
|
3428
|
+
//
|
|
3429
|
+
// {
|
|
3430
|
+
// "code": "200",
|
|
3431
|
+
// "msg": "",
|
|
3432
|
+
// "data": [
|
|
3433
|
+
// {
|
|
3434
|
+
// "symbol": "BTC_USDT_PERP",
|
|
3435
|
+
// "posSide": "LONG",
|
|
3436
|
+
// "side": "BUY",
|
|
3437
|
+
// "mgnMode": "CROSS",
|
|
3438
|
+
// "openAvgPx": "94193.42",
|
|
3439
|
+
// "qty": "1",
|
|
3440
|
+
// "availQty": "1",
|
|
3441
|
+
// "lever": "20",
|
|
3442
|
+
// "adl": "0.3007",
|
|
3443
|
+
// "liqPx": "84918.201844064386317906",
|
|
3444
|
+
// "im": "4.7047795",
|
|
3445
|
+
// "mm": "0.56457354",
|
|
3446
|
+
// "upl": "-0.09783",
|
|
3447
|
+
// "uplRatio": "-0.0207",
|
|
3448
|
+
// "pnl": "0",
|
|
3449
|
+
// "markPx": "94095.59",
|
|
3450
|
+
// "mgnRatio": "0.0582",
|
|
3451
|
+
// "state": "NORMAL",
|
|
3452
|
+
// "cTime": "1740950344401",
|
|
3453
|
+
// "uTime": "1740950344401",
|
|
3454
|
+
// "mgn": "4.7047795",
|
|
3455
|
+
// "actType": "TRADING",
|
|
3456
|
+
// "maxWAmt": "0",
|
|
3457
|
+
// "tpTrgPx": "",
|
|
3458
|
+
// "slTrgPx": ""
|
|
3459
|
+
// }
|
|
3460
|
+
// ]
|
|
3461
|
+
// }
|
|
3462
|
+
//
|
|
3463
|
+
const positions = this.safeList(response, 'data', []);
|
|
3464
|
+
return this.parsePositions(positions, symbols);
|
|
3465
|
+
}
|
|
3466
|
+
parsePosition(position, market = undefined) {
|
|
3467
|
+
//
|
|
3468
|
+
// {
|
|
3469
|
+
// "symbol": "BTC_USDT_PERP",
|
|
3470
|
+
// "posSide": "LONG",
|
|
3471
|
+
// "side": "BUY",
|
|
3472
|
+
// "mgnMode": "CROSS",
|
|
3473
|
+
// "openAvgPx": "94193.42",
|
|
3474
|
+
// "qty": "1",
|
|
3475
|
+
// "availQty": "1",
|
|
3476
|
+
// "lever": "20",
|
|
3477
|
+
// "adl": "0.3007",
|
|
3478
|
+
// "liqPx": "84918.201844064386317906",
|
|
3479
|
+
// "im": "4.7047795",
|
|
3480
|
+
// "mm": "0.56457354",
|
|
3481
|
+
// "upl": "-0.09783",
|
|
3482
|
+
// "uplRatio": "-0.0207",
|
|
3483
|
+
// "pnl": "0",
|
|
3484
|
+
// "markPx": "94095.59",
|
|
3485
|
+
// "mgnRatio": "0.0582",
|
|
3486
|
+
// "state": "NORMAL",
|
|
3487
|
+
// "cTime": "1740950344401",
|
|
3488
|
+
// "uTime": "1740950344401",
|
|
3489
|
+
// "mgn": "4.7047795",
|
|
3490
|
+
// "actType": "TRADING",
|
|
3491
|
+
// "maxWAmt": "0",
|
|
3492
|
+
// "tpTrgPx": "",
|
|
3493
|
+
// "slTrgPx": ""
|
|
3494
|
+
// }
|
|
3495
|
+
//
|
|
3496
|
+
const marketId = this.safeString(position, 'symbol');
|
|
3497
|
+
market = this.safeMarket(marketId, market);
|
|
3498
|
+
const timestamp = this.safeInteger(position, 'cTime');
|
|
3499
|
+
const marginMode = this.safeStringLower(position, 'mgnMode');
|
|
3500
|
+
const leverage = this.safeString(position, 'lever');
|
|
3501
|
+
const initialMargin = this.safeString(position, 'im');
|
|
3502
|
+
const notional = Precise.stringMul(leverage, initialMargin);
|
|
3503
|
+
const qty = this.safeString(position, 'qty');
|
|
3504
|
+
const avgPrice = this.safeString(position, 'openAvgPx');
|
|
3505
|
+
const collateral = Precise.stringMul(qty, avgPrice);
|
|
3506
|
+
// todo: some more fields
|
|
3507
|
+
return this.safePosition({
|
|
3508
|
+
'info': position,
|
|
3509
|
+
'id': undefined,
|
|
3510
|
+
'symbol': market['symbol'],
|
|
3511
|
+
'notional': notional,
|
|
3512
|
+
'marginMode': marginMode,
|
|
3513
|
+
'liquidationPrice': this.safeNumber(position, 'liqPx'),
|
|
3514
|
+
'entryPrice': this.safeNumber(position, 'openAvgPx'),
|
|
3515
|
+
'unrealizedPnl': this.safeNumber(position, 'upl'),
|
|
3516
|
+
'percentage': undefined,
|
|
3517
|
+
'contracts': this.safeNumber(position, 'qty'),
|
|
3518
|
+
'contractSize': undefined,
|
|
3519
|
+
'markPrice': this.safeNumber(position, 'markPx'),
|
|
3520
|
+
'lastPrice': undefined,
|
|
3521
|
+
'side': this.safeStringLower(position, 'posSide'),
|
|
3522
|
+
'hedged': undefined,
|
|
3523
|
+
'timestamp': timestamp,
|
|
3524
|
+
'datetime': this.iso8601(timestamp),
|
|
3525
|
+
'lastUpdateTimestamp': undefined,
|
|
3526
|
+
'maintenanceMargin': this.safeNumber(position, 'mm'),
|
|
3527
|
+
'maintenanceMarginPercentage': undefined,
|
|
3528
|
+
'collateral': collateral,
|
|
3529
|
+
'initialMargin': initialMargin,
|
|
3530
|
+
'initialMarginPercentage': undefined,
|
|
3531
|
+
'leverage': parseInt(leverage),
|
|
3532
|
+
'marginRatio': this.safeNumber(position, 'mgnRatio'),
|
|
3533
|
+
'stopLossPrice': this.safeNumber(position, 'slTrgPx'),
|
|
3534
|
+
'takeProfitPrice': this.safeNumber(position, 'tpTrgPx'),
|
|
3535
|
+
});
|
|
3536
|
+
}
|
|
3537
|
+
async modifyMarginHelper(symbol, amount, type, params = {}) {
|
|
3538
|
+
await this.loadMarkets();
|
|
3539
|
+
const market = this.market(symbol);
|
|
3540
|
+
amount = this.amountToPrecision(symbol, amount);
|
|
3541
|
+
const request = {
|
|
3542
|
+
'symbol': market['id'],
|
|
3543
|
+
'amt': Precise.stringAbs(amount),
|
|
3544
|
+
'type': type.toUpperCase(), // 'ADD' or 'REDUCE'
|
|
3545
|
+
};
|
|
3546
|
+
// todo: hedged handling, tricky
|
|
3547
|
+
if (!('posMode' in params)) {
|
|
3548
|
+
request['posMode'] = 'BOTH';
|
|
3549
|
+
}
|
|
3550
|
+
const response = await this.swapPrivatePostV3TradePositionMargin(this.extend(request, params));
|
|
3551
|
+
//
|
|
3552
|
+
// {
|
|
3553
|
+
// "code": 200,
|
|
3554
|
+
// "data": {
|
|
3555
|
+
// "amt": "50",
|
|
3556
|
+
// "lever": "20",
|
|
3557
|
+
// "symbol": "DOT_USDT_PERP",
|
|
3558
|
+
// "posSide": "BOTH",
|
|
3559
|
+
// "type": "ADD"
|
|
3560
|
+
// },
|
|
3561
|
+
// "msg": "Success"
|
|
3562
|
+
// }
|
|
3563
|
+
//
|
|
3564
|
+
if (type === 'reduce') {
|
|
3565
|
+
amount = Precise.stringAbs(amount);
|
|
3566
|
+
}
|
|
3567
|
+
const data = this.safeDict(response, 'data');
|
|
3568
|
+
return this.parseMarginModification(data, market);
|
|
3569
|
+
}
|
|
3570
|
+
parseMarginModification(data, market = undefined) {
|
|
3571
|
+
const marketId = this.safeString(data, 'symbol');
|
|
3572
|
+
market = this.safeMarket(marketId, market);
|
|
3573
|
+
const rawType = this.safeString(data, 'type');
|
|
3574
|
+
const type = (rawType === 'ADD') ? 'add' : 'reduce';
|
|
3575
|
+
return {
|
|
3576
|
+
'info': data,
|
|
3577
|
+
'symbol': market['symbol'],
|
|
3578
|
+
'type': type,
|
|
3579
|
+
'marginMode': undefined,
|
|
3580
|
+
'amount': this.safeNumber(data, 'amt'),
|
|
3581
|
+
'total': undefined,
|
|
3582
|
+
'code': undefined,
|
|
3583
|
+
'status': 'ok',
|
|
3584
|
+
'timestamp': undefined,
|
|
3585
|
+
'datetime': undefined,
|
|
3586
|
+
};
|
|
3587
|
+
}
|
|
3588
|
+
/**
|
|
3589
|
+
* @method
|
|
3590
|
+
* @name poloniex#reduceMargin
|
|
3591
|
+
* @description remove margin from a position
|
|
3592
|
+
* @param {string} symbol unified market symbol
|
|
3593
|
+
* @param {float} amount the amount of margin to remove
|
|
3594
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3595
|
+
* @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=reduce-margin-structure}
|
|
3596
|
+
*/
|
|
3597
|
+
async reduceMargin(symbol, amount, params = {}) {
|
|
3598
|
+
return await this.modifyMarginHelper(symbol, -amount, 'reduce', params);
|
|
3599
|
+
}
|
|
3600
|
+
/**
|
|
3601
|
+
* @method
|
|
3602
|
+
* @name poloniex#addMargin
|
|
3603
|
+
* @description add margin
|
|
3604
|
+
* @param {string} symbol unified market symbol
|
|
3605
|
+
* @param {float} amount amount of margin to add
|
|
3606
|
+
* @param {object} [params] extra parameters specific to the exchange API endpoint
|
|
3607
|
+
* @returns {object} a [margin structure]{@link https://docs.ccxt.com/#/?id=add-margin-structure}
|
|
3608
|
+
*/
|
|
3609
|
+
async addMargin(symbol, amount, params = {}) {
|
|
3610
|
+
return await this.modifyMarginHelper(symbol, amount, 'add', params);
|
|
3611
|
+
}
|
|
3612
|
+
nonce() {
|
|
3613
|
+
return this.milliseconds();
|
|
3614
|
+
}
|
|
3615
|
+
sign(path, api = 'public', method = 'GET', params = {}, headers = undefined, body = undefined) {
|
|
3616
|
+
let url = this.urls['api']['spot'];
|
|
3617
|
+
if (this.inArray(api, ['swapPublic', 'swapPrivate'])) {
|
|
3618
|
+
url = this.urls['api']['swap'];
|
|
3619
|
+
}
|
|
3620
|
+
const query = this.omit(params, this.extractParams(path));
|
|
3621
|
+
const implodedPath = this.implodeParams(path, params);
|
|
3622
|
+
if (api === 'public' || api === 'swapPublic') {
|
|
3623
|
+
url += '/' + implodedPath;
|
|
3624
|
+
if (Object.keys(query).length) {
|
|
3625
|
+
url += '?' + this.urlencode(query);
|
|
3626
|
+
}
|
|
3627
|
+
}
|
|
3628
|
+
else {
|
|
3629
|
+
this.checkRequiredCredentials();
|
|
3630
|
+
const timestamp = this.nonce().toString();
|
|
3631
|
+
let auth = method + "\n"; // eslint-disable-line quotes
|
|
3632
|
+
url += '/' + implodedPath;
|
|
3633
|
+
auth += '/' + implodedPath;
|
|
3634
|
+
if ((method === 'POST') || (method === 'PUT') || (method === 'DELETE')) {
|
|
3635
|
+
auth += "\n"; // eslint-disable-line quotes
|
|
3636
|
+
if (Object.keys(query).length) {
|
|
3637
|
+
body = this.json(query);
|
|
3638
|
+
auth += 'requestBody=' + body + '&';
|
|
3639
|
+
}
|
|
3640
|
+
auth += 'signTimestamp=' + timestamp;
|
|
3641
|
+
}
|
|
3642
|
+
else {
|
|
3643
|
+
let sortedQuery = this.extend({ 'signTimestamp': timestamp }, query);
|
|
3644
|
+
sortedQuery = this.keysort(sortedQuery);
|
|
3645
|
+
auth += "\n" + this.urlencode(sortedQuery); // eslint-disable-line quotes
|
|
3646
|
+
if (Object.keys(query).length) {
|
|
3647
|
+
url += '?' + this.urlencode(query);
|
|
3648
|
+
}
|
|
3649
|
+
}
|
|
3650
|
+
const signature = this.hmac(this.encode(auth), this.encode(this.secret), sha256, 'base64');
|
|
3651
|
+
headers = {
|
|
3652
|
+
'Content-Type': 'application/json',
|
|
3653
|
+
'key': this.apiKey,
|
|
3654
|
+
'signTimestamp': timestamp,
|
|
3655
|
+
'signature': signature,
|
|
3656
|
+
};
|
|
3657
|
+
}
|
|
3658
|
+
return { 'url': url, 'method': method, 'body': body, 'headers': headers };
|
|
3659
|
+
}
|
|
3660
|
+
handleErrors(code, reason, url, method, headers, body, response, requestHeaders, requestBody) {
|
|
3661
|
+
if (response === undefined) {
|
|
3662
|
+
return undefined;
|
|
3663
|
+
}
|
|
3664
|
+
//
|
|
3665
|
+
// {
|
|
3666
|
+
// "code" : 21709,
|
|
3667
|
+
// "message" : "Low available balance"
|
|
3668
|
+
// }
|
|
3669
|
+
//
|
|
3670
|
+
const responseCode = this.safeString(response, 'code');
|
|
3671
|
+
if ((responseCode !== undefined) && (responseCode !== '200')) {
|
|
3672
|
+
const codeInner = response['code'];
|
|
3673
|
+
const message = this.safeString(response, 'message');
|
|
3674
|
+
const feedback = this.id + ' ' + body;
|
|
3675
|
+
this.throwExactlyMatchedException(this.exceptions['exact'], codeInner, feedback);
|
|
3676
|
+
this.throwBroadlyMatchedException(this.exceptions['broad'], message, feedback);
|
|
3677
|
+
throw new ExchangeError(feedback); // unknown message
|
|
3678
|
+
}
|
|
3679
|
+
return undefined;
|
|
3680
|
+
}
|
|
3681
|
+
}
|