ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__py2.py3-none-any.whl
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.
- ccxt/__init__.py +39 -35
- ccxt/abantether.py +8 -8
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/apex.py +31 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +106 -48
- ccxt/abstract/binancecoinm.py +106 -48
- ccxt/abstract/binanceus.py +141 -83
- ccxt/abstract/binanceusdm.py +106 -48
- ccxt/abstract/bingx.py +50 -1
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +67 -0
- ccxt/abstract/bitmart.py +19 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitrue.py +68 -68
- ccxt/abstract/bitstamp.py +1 -0
- ccxt/abstract/blofin.py +30 -0
- ccxt/abstract/btcbox.py +2 -0
- ccxt/abstract/bybit.py +28 -13
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbaseexchange.py +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/cryptocom.py +16 -0
- ccxt/abstract/cryptomus.py +20 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/derive.py +117 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/foxbit.py +26 -0
- ccxt/abstract/gate.py +19 -0
- ccxt/abstract/gateio.py +19 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hibachi.py +26 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +1 -0
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +10 -0
- ccxt/abstract/kucoinfutures.py +18 -0
- ccxt/abstract/lbank.py +2 -1
- ccxt/abstract/luno.py +1 -0
- ccxt/abstract/mexc.py +2 -0
- ccxt/abstract/modetrade.py +119 -0
- ccxt/abstract/myokx.py +349 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +25 -0
- ccxt/abstract/okxus.py +349 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/paradex.py +23 -0
- ccxt/abstract/phemex.py +2 -0
- ccxt/abstract/poloniex.py +36 -0
- ccxt/abstract/tradeogre.py +3 -1
- ccxt/abstract/upbit.py +51 -34
- ccxt/abstract/whitebit.py +16 -0
- ccxt/abstract/woo.py +64 -6
- ccxt/abstract/xt.py +10 -5
- ccxt/afratether.py +7 -7
- ccxt/alpaca.py +828 -51
- ccxt/apex.py +1875 -0
- ccxt/arzinja.py +7 -7
- ccxt/arzplus.py +9 -9
- ccxt/ascendex.py +501 -306
- ccxt/async_support/__init__.py +39 -35
- ccxt/async_support/abantether.py +8 -8
- ccxt/async_support/afratether.py +9 -9
- ccxt/async_support/alpaca.py +828 -51
- ccxt/async_support/apex.py +1875 -0
- ccxt/async_support/arzinja.py +10 -10
- ccxt/async_support/arzplus.py +12 -12
- ccxt/async_support/ascendex.py +502 -306
- ccxt/async_support/base/exchange.py +303 -89
- ccxt/async_support/base/ws/cache.py +9 -3
- ccxt/async_support/base/ws/client.py +173 -38
- ccxt/async_support/base/ws/future.py +25 -37
- ccxt/async_support/bequant.py +5 -3
- ccxt/async_support/bigone.py +279 -144
- ccxt/async_support/binance.py +2347 -1158
- ccxt/async_support/binancecoinm.py +9 -3
- ccxt/async_support/binanceus.py +17 -3
- ccxt/async_support/binanceusdm.py +9 -4
- ccxt/async_support/bingx.py +2962 -920
- ccxt/async_support/bit2c.py +147 -27
- ccxt/async_support/bitbank.py +151 -23
- ccxt/async_support/bitbns.py +104 -30
- ccxt/async_support/bitfinex.py +3291 -1113
- ccxt/async_support/bitflyer.py +202 -27
- ccxt/async_support/bitget.py +3683 -1538
- ccxt/async_support/bithumb.py +195 -38
- ccxt/async_support/bitimen.py +12 -12
- ccxt/async_support/bitir.py +38 -38
- ccxt/async_support/bitmart.py +1288 -350
- ccxt/async_support/bitmex.py +260 -75
- ccxt/async_support/bitopro.py +262 -62
- ccxt/async_support/bitpin.py +17 -16
- ccxt/async_support/bitrue.py +459 -290
- ccxt/async_support/bitso.py +199 -54
- ccxt/async_support/bitstamp.py +230 -96
- ccxt/async_support/bitteam.py +167 -25
- ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
- ccxt/async_support/bitvavo.py +213 -49
- ccxt/async_support/blockchaincom.py +160 -46
- ccxt/async_support/blofin.py +502 -120
- ccxt/async_support/btcalpha.py +169 -31
- ccxt/async_support/btcbox.py +292 -23
- ccxt/async_support/btcmarkets.py +211 -58
- ccxt/async_support/btcturk.py +161 -38
- ccxt/async_support/bybit.py +1775 -1030
- ccxt/async_support/cex.py +1440 -1303
- ccxt/async_support/coinbase.py +724 -212
- ccxt/async_support/coinbaseadvanced.py +2 -1
- ccxt/async_support/coinbaseexchange.py +388 -89
- ccxt/async_support/coinbaseinternational.py +412 -57
- ccxt/async_support/coincatch.py +177 -78
- ccxt/async_support/coincheck.py +135 -19
- ccxt/async_support/coinex.py +606 -232
- ccxt/async_support/coinmate.py +189 -63
- ccxt/async_support/coinmetro.py +195 -54
- ccxt/async_support/coinone.py +158 -51
- ccxt/async_support/coinsph.py +336 -61
- ccxt/async_support/coinspot.py +151 -52
- ccxt/async_support/cryptocom.py +661 -111
- ccxt/async_support/cryptomus.py +1137 -0
- ccxt/async_support/defx.py +2071 -0
- ccxt/async_support/delta.py +299 -99
- ccxt/async_support/deribit.py +348 -126
- ccxt/async_support/derive.py +2572 -0
- ccxt/async_support/digifinex.py +430 -214
- ccxt/async_support/ellipx.py +2029 -0
- ccxt/async_support/eterex.py +10 -10
- ccxt/async_support/excoino.py +31 -31
- ccxt/async_support/exir.py +14 -14
- ccxt/async_support/exmo.py +344 -131
- ccxt/async_support/exnovin.py +10 -10
- ccxt/async_support/farhadexchange.py +12 -12
- ccxt/async_support/fmfwio.py +2 -1
- ccxt/async_support/foxbit.py +1935 -0
- ccxt/async_support/gate.py +1351 -529
- ccxt/async_support/gateio.py +2 -1
- ccxt/async_support/gemini.py +144 -39
- ccxt/async_support/hashkey.py +152 -109
- ccxt/async_support/hibachi.py +2080 -0
- ccxt/async_support/hitbtc.py +395 -167
- ccxt/async_support/hitobit.py +12 -12
- ccxt/async_support/hollaex.py +307 -119
- ccxt/async_support/htx.py +851 -383
- ccxt/async_support/huobi.py +2 -1
- ccxt/async_support/hyperliquid.py +1848 -536
- ccxt/async_support/independentreserve.py +288 -15
- ccxt/async_support/indodax.py +190 -33
- ccxt/async_support/jibitex.py +12 -12
- ccxt/async_support/kraken.py +795 -351
- ccxt/async_support/krakenfutures.py +214 -62
- ccxt/async_support/kucoin.py +715 -396
- ccxt/async_support/kucoinfutures.py +652 -89
- ccxt/async_support/latoken.py +217 -113
- ccxt/async_support/lbank.py +425 -97
- ccxt/async_support/luno.py +382 -35
- ccxt/async_support/mercado.py +113 -6
- ccxt/async_support/mexc.py +874 -437
- ccxt/async_support/modetrade.py +2818 -0
- ccxt/async_support/myokx.py +54 -0
- ccxt/async_support/ndax.py +221 -64
- ccxt/async_support/nobitex.py +31 -37
- ccxt/async_support/novadax.py +190 -34
- ccxt/async_support/oceanex.py +217 -28
- ccxt/async_support/okcoin.py +253 -145
- ccxt/async_support/okexchange.py +11 -11
- ccxt/async_support/okx.py +1088 -351
- ccxt/async_support/okxus.py +54 -0
- ccxt/async_support/ompfinex.py +25 -24
- ccxt/async_support/onetrading.py +213 -392
- ccxt/async_support/oxfun.py +245 -166
- ccxt/async_support/p2b.py +151 -29
- ccxt/async_support/paradex.py +562 -49
- ccxt/async_support/paymium.py +82 -19
- ccxt/async_support/phemex.py +713 -172
- ccxt/async_support/poloniex.py +1602 -283
- ccxt/async_support/probit.py +224 -95
- ccxt/async_support/ramzinex.py +30 -27
- ccxt/async_support/sarmayex.py +9 -9
- ccxt/async_support/sarrafex.py +13 -13
- ccxt/async_support/tabdeal.py +14 -13
- ccxt/async_support/tetherland.py +9 -9
- ccxt/async_support/timex.py +210 -51
- ccxt/async_support/tokocrypto.py +167 -47
- ccxt/async_support/tradeogre.py +266 -31
- ccxt/async_support/twox.py +9 -9
- ccxt/async_support/ubitex.py +12 -12
- ccxt/async_support/upbit.py +568 -165
- ccxt/async_support/vertex.py +160 -32
- ccxt/async_support/wallex.py +12 -12
- ccxt/async_support/wavesexchange.py +165 -30
- ccxt/async_support/whitebit.py +975 -127
- ccxt/async_support/woo.py +1918 -1016
- ccxt/async_support/woofipro.py +433 -141
- ccxt/async_support/xt.py +649 -193
- ccxt/async_support/yobit.py +195 -70
- ccxt/async_support/zaif.py +91 -15
- ccxt/async_support/zonda.py +151 -36
- ccxt/base/decimal_to_precision.py +14 -10
- ccxt/base/errors.py +49 -18
- ccxt/base/exchange.py +1556 -450
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +114 -6
- ccxt/bequant.py +5 -3
- ccxt/bigone.py +279 -144
- ccxt/binance.py +2347 -1158
- ccxt/binancecoinm.py +9 -3
- ccxt/binanceus.py +17 -3
- ccxt/binanceusdm.py +9 -4
- ccxt/bingx.py +2962 -920
- ccxt/bit2c.py +147 -27
- ccxt/bitbank.py +151 -23
- ccxt/bitbns.py +104 -30
- ccxt/bitfinex.py +3290 -1113
- ccxt/bitflyer.py +202 -27
- ccxt/bitget.py +3683 -1538
- ccxt/bithumb.py +194 -38
- ccxt/bitimen.py +9 -9
- ccxt/bitir.py +35 -35
- ccxt/bitmart.py +1288 -350
- ccxt/bitmex.py +260 -75
- ccxt/bitopro.py +262 -62
- ccxt/bitpin.py +15 -14
- ccxt/bitrue.py +459 -290
- ccxt/bitso.py +199 -54
- ccxt/bitstamp.py +230 -96
- ccxt/bitteam.py +167 -25
- ccxt/{huobijp.py → bittrade.py} +158 -30
- ccxt/bitvavo.py +213 -49
- ccxt/blockchaincom.py +160 -46
- ccxt/blofin.py +502 -120
- ccxt/btcalpha.py +169 -31
- ccxt/btcbox.py +291 -23
- ccxt/btcmarkets.py +211 -58
- ccxt/btcturk.py +161 -38
- ccxt/bybit.py +1775 -1030
- ccxt/cex.py +1439 -1303
- ccxt/coinbase.py +724 -212
- ccxt/coinbaseadvanced.py +2 -1
- ccxt/coinbaseexchange.py +388 -89
- ccxt/coinbaseinternational.py +412 -57
- ccxt/coincatch.py +177 -78
- ccxt/coincheck.py +135 -19
- ccxt/coinex.py +606 -232
- ccxt/coinmate.py +189 -63
- ccxt/coinmetro.py +194 -54
- ccxt/coinone.py +158 -51
- ccxt/coinsph.py +336 -61
- ccxt/coinspot.py +151 -52
- ccxt/cryptocom.py +661 -111
- ccxt/cryptomus.py +1137 -0
- ccxt/defx.py +2070 -0
- ccxt/delta.py +299 -99
- ccxt/deribit.py +348 -126
- ccxt/derive.py +2571 -0
- ccxt/digifinex.py +430 -214
- ccxt/ellipx.py +2029 -0
- ccxt/eterex.py +7 -7
- ccxt/excoino.py +29 -29
- ccxt/exir.py +11 -11
- ccxt/exmo.py +343 -131
- ccxt/exnovin.py +8 -8
- ccxt/farhadexchange.py +10 -10
- ccxt/fmfwio.py +2 -1
- ccxt/foxbit.py +1935 -0
- ccxt/gate.py +1351 -529
- ccxt/gateio.py +2 -1
- ccxt/gemini.py +144 -39
- ccxt/hashkey.py +152 -109
- ccxt/hibachi.py +2079 -0
- ccxt/hitbtc.py +395 -167
- ccxt/hitobit.py +9 -9
- ccxt/hollaex.py +307 -119
- ccxt/htx.py +851 -383
- ccxt/huobi.py +2 -1
- ccxt/hyperliquid.py +1848 -536
- ccxt/independentreserve.py +287 -15
- ccxt/indodax.py +190 -33
- ccxt/jibitex.py +9 -9
- ccxt/kraken.py +794 -351
- ccxt/krakenfutures.py +214 -62
- ccxt/kucoin.py +715 -396
- ccxt/kucoinfutures.py +652 -89
- ccxt/latoken.py +217 -113
- ccxt/lbank.py +425 -97
- ccxt/luno.py +382 -35
- ccxt/mercado.py +113 -6
- ccxt/mexc.py +873 -437
- ccxt/modetrade.py +2818 -0
- ccxt/myokx.py +54 -0
- ccxt/ndax.py +221 -64
- ccxt/nobitex.py +29 -35
- ccxt/novadax.py +190 -34
- ccxt/oceanex.py +217 -28
- ccxt/okcoin.py +253 -145
- ccxt/okexchange.py +9 -9
- ccxt/okx.py +1088 -351
- ccxt/okxus.py +54 -0
- ccxt/ompfinex.py +22 -21
- ccxt/onetrading.py +213 -392
- ccxt/oxfun.py +245 -166
- ccxt/p2b.py +151 -29
- ccxt/paradex.py +562 -49
- ccxt/paymium.py +82 -19
- ccxt/phemex.py +712 -172
- ccxt/poloniex.py +1601 -283
- ccxt/pro/__init__.py +76 -17
- ccxt/pro/alpaca.py +21 -6
- ccxt/pro/apex.py +984 -0
- ccxt/pro/ascendex.py +58 -10
- ccxt/pro/bequant.py +6 -1
- ccxt/pro/binance.py +728 -156
- ccxt/pro/binancecoinm.py +6 -2
- ccxt/pro/binanceus.py +8 -4
- ccxt/pro/binanceusdm.py +7 -2
- ccxt/pro/bingx.py +333 -142
- ccxt/pro/bitfinex.py +727 -262
- ccxt/pro/bitget.py +570 -79
- ccxt/pro/bithumb.py +20 -6
- ccxt/pro/bitmart.py +216 -87
- ccxt/pro/bitmex.py +47 -9
- ccxt/pro/bitopro.py +26 -14
- ccxt/pro/bitrue.py +22 -22
- ccxt/pro/bitstamp.py +54 -21
- ccxt/pro/{huobijp.py → bittrade.py} +7 -6
- ccxt/pro/bitvavo.py +191 -67
- ccxt/pro/blockchaincom.py +21 -8
- ccxt/pro/blofin.py +9 -1
- ccxt/pro/bybit.py +632 -245
- ccxt/pro/cex.py +59 -24
- ccxt/pro/coinbase.py +102 -73
- ccxt/pro/coinbaseadvanced.py +2 -1
- ccxt/pro/coinbaseexchange.py +8 -8
- ccxt/pro/coinbaseinternational.py +181 -25
- ccxt/pro/coincatch.py +6 -7
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -665
- ccxt/pro/coinone.py +16 -9
- ccxt/pro/cryptocom.py +448 -45
- ccxt/pro/defx.py +831 -0
- ccxt/pro/deribit.py +150 -14
- ccxt/pro/derive.py +704 -0
- ccxt/pro/exmo.py +239 -6
- ccxt/pro/gate.py +623 -65
- ccxt/pro/gateio.py +2 -1
- ccxt/pro/gemini.py +27 -11
- ccxt/pro/hashkey.py +2 -2
- ccxt/pro/hitbtc.py +196 -91
- ccxt/pro/hollaex.py +23 -7
- ccxt/pro/htx.py +51 -14
- ccxt/pro/huobi.py +2 -1
- ccxt/pro/hyperliquid.py +591 -27
- ccxt/pro/independentreserve.py +9 -6
- ccxt/pro/kraken.py +640 -320
- ccxt/pro/krakenfutures.py +62 -35
- ccxt/pro/kucoin.py +267 -46
- ccxt/pro/kucoinfutures.py +165 -21
- ccxt/pro/lbank.py +102 -21
- ccxt/pro/luno.py +12 -8
- ccxt/pro/mexc.py +877 -111
- ccxt/pro/modetrade.py +1271 -0
- ccxt/pro/myokx.py +38 -0
- ccxt/pro/ndax.py +15 -2
- ccxt/pro/okcoin.py +23 -4
- ccxt/pro/okx.py +573 -98
- ccxt/pro/okxus.py +38 -0
- ccxt/pro/onetrading.py +30 -13
- ccxt/pro/oxfun.py +131 -27
- ccxt/pro/p2b.py +88 -22
- ccxt/pro/paradex.py +3 -3
- ccxt/pro/phemex.py +75 -21
- ccxt/pro/poloniex.py +124 -41
- ccxt/pro/probit.py +87 -80
- ccxt/pro/tradeogre.py +272 -0
- ccxt/pro/upbit.py +152 -12
- ccxt/pro/vertex.py +8 -3
- ccxt/pro/whitebit.py +58 -5
- ccxt/pro/woo.py +228 -37
- ccxt/pro/woofipro.py +106 -18
- ccxt/pro/xt.py +111 -5
- ccxt/probit.py +224 -95
- ccxt/protobuf/__init__.py +0 -0
- ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
- ccxt/protobuf/mexc/__init__.py +0 -0
- ccxt/ramzinex.py +28 -25
- ccxt/sarmayex.py +7 -7
- ccxt/sarrafex.py +10 -10
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/tabdeal.py +12 -11
- ccxt/test/tests_async.py +261 -57
- ccxt/test/tests_helpers.py +1 -3
- ccxt/test/tests_init.py +4 -3
- ccxt/test/tests_sync.py +261 -57
- ccxt/tetherland.py +7 -7
- ccxt/timex.py +210 -51
- ccxt/tokocrypto.py +167 -47
- ccxt/tradeogre.py +266 -31
- ccxt/twox.py +7 -7
- ccxt/ubitex.py +9 -9
- ccxt/upbit.py +568 -165
- ccxt/vertex.py +160 -32
- ccxt/wallex.py +9 -9
- ccxt/wavesexchange.py +165 -30
- ccxt/whitebit.py +975 -127
- ccxt/woo.py +1917 -1016
- ccxt/woofipro.py +432 -141
- ccxt/xt.py +649 -193
- ccxt/yobit.py +194 -70
- ccxt/zaif.py +91 -15
- ccxt/zonda.py +151 -36
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
- ccxt_ir-4.5.0.dist-info/RECORD +743 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
- ccxt/__test__.py +0 -7
- ccxt/abstract/ace.py +0 -15
- ccxt/abstract/bitbay.py +0 -53
- ccxt/abstract/bitcoincom.py +0 -115
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/bitpanda.py +0 -35
- ccxt/abstract/bl3p.py +0 -19
- ccxt/abstract/coinlist.py +0 -54
- ccxt/abstract/currencycom.py +0 -68
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/abstract/idex.py +0 -26
- ccxt/abstract/kuna.py +0 -182
- ccxt/abstract/lykke.py +0 -29
- ccxt/abstract/poloniexfutures.py +0 -48
- ccxt/abstract/wazirx.py +0 -30
- ccxt/ace.py +0 -1012
- ccxt/async_support/ace.py +0 -1012
- ccxt/async_support/base/ws/aiohttp_client.py +0 -125
- ccxt/async_support/base/ws/fast_client.py +0 -96
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitcoincom.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3552
- ccxt/async_support/bitpanda.py +0 -16
- ccxt/async_support/bl3p.py +0 -485
- ccxt/async_support/coinlist.py +0 -2243
- ccxt/async_support/currencycom.py +0 -1950
- ccxt/async_support/hitbtc3.py +0 -16
- ccxt/async_support/idex.py +0 -1766
- ccxt/async_support/kuna.py +0 -1841
- ccxt/async_support/lykke.py +0 -1270
- ccxt/async_support/poloniexfutures.py +0 -1717
- ccxt/async_support/wazirx.py +0 -1224
- ccxt/bitbay.py +0 -17
- ccxt/bitcoincom.py +0 -17
- ccxt/bitfinex2.py +0 -3552
- ccxt/bitpanda.py +0 -16
- ccxt/bl3p.py +0 -485
- ccxt/coinlist.py +0 -2243
- ccxt/currencycom.py +0 -1950
- ccxt/hitbtc3.py +0 -16
- ccxt/idex.py +0 -1766
- ccxt/kuna.py +0 -1841
- ccxt/lykke.py +0 -1270
- ccxt/poloniexfutures.py +0 -1717
- ccxt/pro/bitcoincom.py +0 -34
- ccxt/pro/bitfinex2.py +0 -1083
- ccxt/pro/bitpanda.py +0 -15
- ccxt/pro/currencycom.py +0 -536
- ccxt/pro/idex.py +0 -672
- ccxt/pro/poloniexfutures.py +0 -990
- ccxt/pro/wazirx.py +0 -749
- ccxt/test/base/__init__.py +0 -29
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -109
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -31
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_liquidation.py +0 -50
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -193
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -33
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -69
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -353
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -92
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt/test/test_async.py +0 -1649
- ccxt/test/test_sync.py +0 -1648
- ccxt/wazirx.py +0 -1224
- ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/pro/kucoin.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
|
|
8
|
-
from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
|
|
8
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
|
|
9
9
|
from ccxt.async_support.base.ws.client import Client
|
|
10
10
|
from typing import List
|
|
11
11
|
from ccxt.base.errors import ExchangeError
|
|
@@ -14,7 +14,7 @@ from ccxt.base.errors import ArgumentsRequired
|
|
|
14
14
|
|
|
15
15
|
class kucoin(ccxt.async_support.kucoin):
|
|
16
16
|
|
|
17
|
-
def describe(self):
|
|
17
|
+
def describe(self) -> Any:
|
|
18
18
|
return self.deep_extend(super(kucoin, self).describe(), {
|
|
19
19
|
'has': {
|
|
20
20
|
'ws': True,
|
|
@@ -47,6 +47,9 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
47
47
|
'snapshotMaxRetries': 3,
|
|
48
48
|
'method': '/market/level2', # '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50'
|
|
49
49
|
},
|
|
50
|
+
'watchMyTrades': {
|
|
51
|
+
'method': '/spotMarket/tradeOrders', # or '/spot/tradeFills'
|
|
52
|
+
},
|
|
50
53
|
},
|
|
51
54
|
'streaming': {
|
|
52
55
|
# kucoin does not support built-in ws protocol-level ping-pong
|
|
@@ -150,9 +153,30 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
150
153
|
client.subscriptions[requestId] = subscriptionHash
|
|
151
154
|
return await self.watch_multiple(url, messageHashes, message, subscriptionHashes, subscription)
|
|
152
155
|
|
|
156
|
+
async def un_subscribe_multiple(self, url, messageHashes, topic, subscriptionHashes, params={}, subscription: dict = None):
|
|
157
|
+
requestId = str(self.request_id())
|
|
158
|
+
request: dict = {
|
|
159
|
+
'id': requestId,
|
|
160
|
+
'type': 'unsubscribe',
|
|
161
|
+
'topic': topic,
|
|
162
|
+
'response': True,
|
|
163
|
+
}
|
|
164
|
+
message = self.extend(request, params)
|
|
165
|
+
if subscription is not None:
|
|
166
|
+
subscription[requestId] = requestId
|
|
167
|
+
client = self.client(url)
|
|
168
|
+
for i in range(0, len(subscriptionHashes)):
|
|
169
|
+
subscriptionHash = subscriptionHashes[i]
|
|
170
|
+
if not (subscriptionHash in client.subscriptions):
|
|
171
|
+
client.subscriptions[requestId] = subscriptionHash
|
|
172
|
+
return await self.watch_multiple(url, messageHashes, message, subscriptionHashes, subscription)
|
|
173
|
+
|
|
153
174
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
154
175
|
"""
|
|
155
176
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
177
|
+
|
|
178
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/market-snapshot
|
|
179
|
+
|
|
156
180
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
157
181
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
158
182
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -168,7 +192,9 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
168
192
|
|
|
169
193
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
170
194
|
"""
|
|
171
|
-
|
|
195
|
+
|
|
196
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/ticker
|
|
197
|
+
|
|
172
198
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
173
199
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
174
200
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -285,7 +311,9 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
285
311
|
|
|
286
312
|
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
|
287
313
|
"""
|
|
288
|
-
|
|
314
|
+
|
|
315
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
|
|
316
|
+
|
|
289
317
|
watches best bid & ask for symbols
|
|
290
318
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
291
319
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -367,6 +395,9 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
367
395
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
368
396
|
"""
|
|
369
397
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
398
|
+
|
|
399
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/klines
|
|
400
|
+
|
|
370
401
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
371
402
|
:param str timeframe: the length of time each candle represents
|
|
372
403
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
@@ -431,6 +462,9 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
431
462
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
432
463
|
"""
|
|
433
464
|
get the list of most recent trades for a particular symbol
|
|
465
|
+
|
|
466
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/match-execution-data
|
|
467
|
+
|
|
434
468
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
435
469
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
436
470
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -442,7 +476,10 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
442
476
|
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
443
477
|
"""
|
|
444
478
|
get the list of most recent trades for a particular symbol
|
|
445
|
-
|
|
479
|
+
|
|
480
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/match-execution-data
|
|
481
|
+
|
|
482
|
+
:param str[] symbols:
|
|
446
483
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
447
484
|
:param int [limit]: the maximum amount of trades to fetch
|
|
448
485
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -470,6 +507,48 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
470
507
|
limit = trades.getLimit(tradeSymbol, limit)
|
|
471
508
|
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
|
472
509
|
|
|
510
|
+
async def un_watch_trades_for_symbols(self, symbols: List[str], params={}) -> Any:
|
|
511
|
+
"""
|
|
512
|
+
unWatches trades stream
|
|
513
|
+
|
|
514
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/match-execution-data
|
|
515
|
+
|
|
516
|
+
:param str symbols:
|
|
517
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
518
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
|
519
|
+
"""
|
|
520
|
+
await self.load_markets()
|
|
521
|
+
symbols = self.market_symbols(symbols, None, False)
|
|
522
|
+
marketIds = self.market_ids(symbols)
|
|
523
|
+
url = await self.negotiate(False)
|
|
524
|
+
messageHashes = []
|
|
525
|
+
subscriptionHashes = []
|
|
526
|
+
topic = '/market/match:' + ','.join(marketIds)
|
|
527
|
+
for i in range(0, len(symbols)):
|
|
528
|
+
symbol = symbols[i]
|
|
529
|
+
messageHashes.append('unsubscribe:trades:' + symbol)
|
|
530
|
+
subscriptionHashes.append('trades:' + symbol)
|
|
531
|
+
subscription = {
|
|
532
|
+
'messageHashes': messageHashes,
|
|
533
|
+
'subMessageHashes': subscriptionHashes,
|
|
534
|
+
'topic': 'trades',
|
|
535
|
+
'unsubscribe': True,
|
|
536
|
+
'symbols': symbols,
|
|
537
|
+
}
|
|
538
|
+
return await self.un_subscribe_multiple(url, messageHashes, topic, messageHashes, params, subscription)
|
|
539
|
+
|
|
540
|
+
async def un_watch_trades(self, symbol: str, params={}) -> Any:
|
|
541
|
+
"""
|
|
542
|
+
unWatches trades stream
|
|
543
|
+
|
|
544
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/match-execution-data
|
|
545
|
+
|
|
546
|
+
:param str symbol: unified symbol of the market to fetch trades for
|
|
547
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
548
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
|
549
|
+
"""
|
|
550
|
+
return await self.un_watch_trades_for_symbols([symbol], params)
|
|
551
|
+
|
|
473
552
|
def handle_trade(self, client: Client, message):
|
|
474
553
|
#
|
|
475
554
|
# {
|
|
@@ -504,10 +583,12 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
504
583
|
|
|
505
584
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
506
585
|
"""
|
|
507
|
-
|
|
508
|
-
|
|
509
|
-
|
|
510
|
-
|
|
586
|
+
|
|
587
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
|
|
588
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
|
|
589
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
|
|
590
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
|
|
591
|
+
|
|
511
592
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
512
593
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
513
594
|
:param int [limit]: the maximum amount of order book entries to return
|
|
@@ -532,12 +613,30 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
532
613
|
#
|
|
533
614
|
return await self.watch_order_book_for_symbols([symbol], limit, params)
|
|
534
615
|
|
|
616
|
+
async def un_watch_order_book(self, symbol: str, params={}) -> Any:
|
|
617
|
+
"""
|
|
618
|
+
|
|
619
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
|
|
620
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
|
|
621
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
|
|
622
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
|
|
623
|
+
|
|
624
|
+
unWatches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
625
|
+
:param str symbol: unified symbol of the market to fetch the order book for
|
|
626
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
627
|
+
:param str [params.method]: either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
628
|
+
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
|
629
|
+
"""
|
|
630
|
+
return await self.un_watch_order_book_for_symbols([symbol], params)
|
|
631
|
+
|
|
535
632
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
|
536
633
|
"""
|
|
537
|
-
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
634
|
+
|
|
635
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
|
|
636
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
|
|
637
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
|
|
638
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
|
|
639
|
+
|
|
541
640
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
542
641
|
:param str[] symbols: unified array of symbols
|
|
543
642
|
:param int [limit]: the maximum amount of order book entries to return
|
|
@@ -577,6 +676,46 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
577
676
|
orderbook = await self.subscribe_multiple(url, messageHashes, topic, subscriptionHashes, params, subscription)
|
|
578
677
|
return orderbook.limit()
|
|
579
678
|
|
|
679
|
+
async def un_watch_order_book_for_symbols(self, symbols: List[str], params={}) -> Any:
|
|
680
|
+
"""
|
|
681
|
+
|
|
682
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level1-bbo-market-data
|
|
683
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-market-data
|
|
684
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-5-best-ask-bid-orders
|
|
685
|
+
https://www.kucoin.com/docs/websocket/spot-trading/public-channels/level2-50-best-ask-bid-orders
|
|
686
|
+
|
|
687
|
+
unWatches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
688
|
+
:param str[] symbols: unified array of symbols
|
|
689
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
690
|
+
:param str [params.method]: either '/market/level2' or '/spotMarket/level2Depth5' or '/spotMarket/level2Depth50' default is '/market/level2'
|
|
691
|
+
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
|
692
|
+
"""
|
|
693
|
+
limit = self.safe_integer(params, 'limit')
|
|
694
|
+
params = self.omit(params, 'limit')
|
|
695
|
+
await self.load_markets()
|
|
696
|
+
symbols = self.market_symbols(symbols, None, False)
|
|
697
|
+
marketIds = self.market_ids(symbols)
|
|
698
|
+
url = await self.negotiate(False)
|
|
699
|
+
method: Str = None
|
|
700
|
+
method, params = self.handle_option_and_params(params, 'watchOrderBook', 'method', '/market/level2')
|
|
701
|
+
if (limit == 5) or (limit == 50):
|
|
702
|
+
method = '/spotMarket/level2Depth' + str(limit)
|
|
703
|
+
topic = method + ':' + ','.join(marketIds)
|
|
704
|
+
messageHashes = []
|
|
705
|
+
subscriptionHashes = []
|
|
706
|
+
for i in range(0, len(symbols)):
|
|
707
|
+
symbol = symbols[i]
|
|
708
|
+
messageHashes.append('unsubscribe:orderbook:' + symbol)
|
|
709
|
+
subscriptionHashes.append('orderbook:' + symbol)
|
|
710
|
+
subscription = {
|
|
711
|
+
'messageHashes': messageHashes,
|
|
712
|
+
'symbols': symbols,
|
|
713
|
+
'unsubscribe': True,
|
|
714
|
+
'topic': 'orderbook',
|
|
715
|
+
'subMessageHashes': subscriptionHashes,
|
|
716
|
+
}
|
|
717
|
+
return await self.un_subscribe_multiple(url, messageHashes, topic, messageHashes, params, subscription)
|
|
718
|
+
|
|
580
719
|
def handle_order_book(self, client: Client, message):
|
|
581
720
|
#
|
|
582
721
|
# initial snapshot is fetched with ccxt's fetchOrderBook
|
|
@@ -724,6 +863,15 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
724
863
|
method = self.safe_value(subscription, 'method')
|
|
725
864
|
if method is not None:
|
|
726
865
|
method(client, message, subscription)
|
|
866
|
+
isUnSub = self.safe_bool(subscription, 'unsubscribe', False)
|
|
867
|
+
if isUnSub:
|
|
868
|
+
messageHashes = self.safe_list(subscription, 'messageHashes', [])
|
|
869
|
+
subMessageHashes = self.safe_list(subscription, 'subMessageHashes', [])
|
|
870
|
+
for i in range(0, len(messageHashes)):
|
|
871
|
+
messageHash = messageHashes[i]
|
|
872
|
+
subHash = subMessageHashes[i]
|
|
873
|
+
self.clean_unsubscription(client, subHash, messageHash)
|
|
874
|
+
self.clean_cache(subscription)
|
|
727
875
|
|
|
728
876
|
def handle_system_status(self, client: Client, message):
|
|
729
877
|
#
|
|
@@ -741,18 +889,22 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
741
889
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
742
890
|
"""
|
|
743
891
|
watches information on multiple orders made by the user
|
|
892
|
+
|
|
893
|
+
https://www.kucoin.com/docs/websocket/spot-trading/private-channels/private-order-change
|
|
894
|
+
https://www.kucoin.com/docs/websocket/spot-trading/private-channels/stop-order-event
|
|
895
|
+
|
|
744
896
|
:param str symbol: unified market symbol of the market orders were made in
|
|
745
897
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
746
898
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
747
899
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
748
|
-
:param boolean [params.
|
|
900
|
+
:param boolean [params.trigger]: trigger orders are watched if True
|
|
749
901
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
|
750
902
|
"""
|
|
751
903
|
await self.load_markets()
|
|
752
|
-
|
|
904
|
+
trigger = self.safe_value_2(params, 'stop', 'trigger')
|
|
753
905
|
params = self.omit(params, ['stop', 'trigger'])
|
|
754
906
|
url = await self.negotiate(True)
|
|
755
|
-
topic = '/spotMarket/advancedOrders' if
|
|
907
|
+
topic = '/spotMarket/advancedOrders' if trigger else '/spotMarket/tradeOrders'
|
|
756
908
|
request: dict = {
|
|
757
909
|
'privateChannel': True,
|
|
758
910
|
}
|
|
@@ -874,6 +1026,9 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
874
1026
|
#
|
|
875
1027
|
messageHash = 'orders'
|
|
876
1028
|
data = self.safe_value(message, 'data')
|
|
1029
|
+
tradeId = self.safe_string(data, 'tradeId')
|
|
1030
|
+
if tradeId is not None:
|
|
1031
|
+
self.handle_my_trade(client, message)
|
|
877
1032
|
parsed = self.parse_ws_order(data)
|
|
878
1033
|
symbol = self.safe_string(parsed, 'symbol')
|
|
879
1034
|
orderId = self.safe_string(parsed, 'id')
|
|
@@ -898,15 +1053,20 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
898
1053
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
899
1054
|
"""
|
|
900
1055
|
watches information on multiple trades made by the user
|
|
1056
|
+
|
|
1057
|
+
https://www.kucoin.com/docs/websocket/spot-trading/private-channels/private-order-change
|
|
1058
|
+
|
|
901
1059
|
:param str symbol: unified market symbol of the market trades were made in
|
|
902
1060
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
903
1061
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
904
1062
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
905
|
-
:
|
|
1063
|
+
:param str [params.method]: '/spotMarket/tradeOrders' or '/spot/tradeFills' default is '/spotMarket/tradeOrders'
|
|
1064
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
906
1065
|
"""
|
|
907
1066
|
await self.load_markets()
|
|
908
1067
|
url = await self.negotiate(True)
|
|
909
|
-
topic =
|
|
1068
|
+
topic: Str = None
|
|
1069
|
+
topic, params = self.handle_option_and_params(params, 'watchMyTrades', 'method', '/spotMarket/tradeOrders')
|
|
910
1070
|
request: dict = {
|
|
911
1071
|
'privateChannel': True,
|
|
912
1072
|
}
|
|
@@ -921,12 +1081,41 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
921
1081
|
return self.filter_by_symbol_since_limit(trades, symbol, since, limit, True)
|
|
922
1082
|
|
|
923
1083
|
def handle_my_trade(self, client: Client, message):
|
|
1084
|
+
#
|
|
1085
|
+
# {
|
|
1086
|
+
# "type": "message",
|
|
1087
|
+
# "topic": "/spotMarket/tradeOrders",
|
|
1088
|
+
# "subject": "orderChange",
|
|
1089
|
+
# "channelType": "private",
|
|
1090
|
+
# "data": {
|
|
1091
|
+
# "symbol": "KCS-USDT",
|
|
1092
|
+
# "orderType": "limit",
|
|
1093
|
+
# "side": "sell",
|
|
1094
|
+
# "orderId": "5efab07953bdea00089965fa",
|
|
1095
|
+
# "liquidity": "taker",
|
|
1096
|
+
# "type": "match",
|
|
1097
|
+
# "feeType": "takerFee",
|
|
1098
|
+
# "orderTime": 1670329987026,
|
|
1099
|
+
# "size": "0.1",
|
|
1100
|
+
# "filledSize": "0.1",
|
|
1101
|
+
# "price": "0.938",
|
|
1102
|
+
# "matchPrice": "0.96738",
|
|
1103
|
+
# "matchSize": "0.1",
|
|
1104
|
+
# "tradeId": "5efab07a4ee4c7000a82d6d9",
|
|
1105
|
+
# "clientOid": "1593487481000313",
|
|
1106
|
+
# "remainSize": "0",
|
|
1107
|
+
# "status": "match",
|
|
1108
|
+
# "ts": 1670329987311000000
|
|
1109
|
+
# }
|
|
1110
|
+
# }
|
|
1111
|
+
#
|
|
924
1112
|
if self.myTrades is None:
|
|
925
1113
|
limit = self.safe_integer(self.options, 'tradesLimit', 1000)
|
|
926
1114
|
self.myTrades = ArrayCacheBySymbolById(limit)
|
|
927
1115
|
data = self.safe_dict(message, 'data')
|
|
928
1116
|
parsed = self.parse_ws_trade(data)
|
|
929
|
-
self.myTrades
|
|
1117
|
+
myTrades = self.myTrades
|
|
1118
|
+
myTrades.append(parsed)
|
|
930
1119
|
messageHash = 'myTrades'
|
|
931
1120
|
client.resolve(self.myTrades, messageHash)
|
|
932
1121
|
symbolSpecificMessageHash = messageHash + ':' + parsed['symbol']
|
|
@@ -934,19 +1123,44 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
934
1123
|
|
|
935
1124
|
def parse_ws_trade(self, trade, market=None):
|
|
936
1125
|
#
|
|
937
|
-
#
|
|
938
|
-
#
|
|
939
|
-
#
|
|
940
|
-
#
|
|
941
|
-
#
|
|
942
|
-
#
|
|
943
|
-
#
|
|
944
|
-
#
|
|
945
|
-
#
|
|
946
|
-
#
|
|
947
|
-
#
|
|
948
|
-
#
|
|
949
|
-
#
|
|
1126
|
+
# /spotMarket/tradeOrders
|
|
1127
|
+
#
|
|
1128
|
+
# {
|
|
1129
|
+
# "symbol": "KCS-USDT",
|
|
1130
|
+
# "orderType": "limit",
|
|
1131
|
+
# "side": "sell",
|
|
1132
|
+
# "orderId": "5efab07953bdea00089965fa",
|
|
1133
|
+
# "liquidity": "taker",
|
|
1134
|
+
# "type": "match",
|
|
1135
|
+
# "feeType": "takerFee",
|
|
1136
|
+
# "orderTime": 1670329987026,
|
|
1137
|
+
# "size": "0.1",
|
|
1138
|
+
# "filledSize": "0.1",
|
|
1139
|
+
# "price": "0.938",
|
|
1140
|
+
# "matchPrice": "0.96738",
|
|
1141
|
+
# "matchSize": "0.1",
|
|
1142
|
+
# "tradeId": "5efab07a4ee4c7000a82d6d9",
|
|
1143
|
+
# "clientOid": "1593487481000313",
|
|
1144
|
+
# "remainSize": "0",
|
|
1145
|
+
# "status": "match",
|
|
1146
|
+
# "ts": 1670329987311000000
|
|
1147
|
+
# }
|
|
1148
|
+
#
|
|
1149
|
+
# /spot/tradeFills
|
|
1150
|
+
#
|
|
1151
|
+
# {
|
|
1152
|
+
# "fee": 0.00262148,
|
|
1153
|
+
# "feeCurrency": "USDT",
|
|
1154
|
+
# "feeRate": 0.001,
|
|
1155
|
+
# "orderId": "62417436b29df8000183df2f",
|
|
1156
|
+
# "orderType": "market",
|
|
1157
|
+
# "price": 131.074,
|
|
1158
|
+
# "side": "sell",
|
|
1159
|
+
# "size": 0.02,
|
|
1160
|
+
# "symbol": "LTC-USDT",
|
|
1161
|
+
# "time": "1648456758734571745",
|
|
1162
|
+
# "tradeId": "624174362e113d2f467b3043"
|
|
1163
|
+
# }
|
|
950
1164
|
#
|
|
951
1165
|
marketId = self.safe_string(trade, 'symbol')
|
|
952
1166
|
market = self.safe_market(marketId, market, '-')
|
|
@@ -954,18 +1168,17 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
954
1168
|
type = self.safe_string(trade, 'orderType')
|
|
955
1169
|
side = self.safe_string(trade, 'side')
|
|
956
1170
|
tradeId = self.safe_string(trade, 'tradeId')
|
|
957
|
-
price = self.safe_string(trade, '
|
|
958
|
-
amount = self.safe_string(trade, '
|
|
1171
|
+
price = self.safe_string(trade, 'matchPrice')
|
|
1172
|
+
amount = self.safe_string(trade, 'matchSize')
|
|
1173
|
+
if price is None:
|
|
1174
|
+
# /spot/tradeFills
|
|
1175
|
+
price = self.safe_string(trade, 'price')
|
|
1176
|
+
amount = self.safe_string(trade, 'size')
|
|
959
1177
|
order = self.safe_string(trade, 'orderId')
|
|
960
|
-
timestamp = self.
|
|
1178
|
+
timestamp = self.safe_integer_product_2(trade, 'ts', 'time', 0.000001)
|
|
961
1179
|
feeCurrency = market['quote']
|
|
962
1180
|
feeRate = self.safe_string(trade, 'feeRate')
|
|
963
1181
|
feeCost = self.safe_string(trade, 'fee')
|
|
964
|
-
fee = {
|
|
965
|
-
'cost': feeCost,
|
|
966
|
-
'rate': feeRate,
|
|
967
|
-
'currency': feeCurrency,
|
|
968
|
-
}
|
|
969
1182
|
return self.safe_trade({
|
|
970
1183
|
'info': trade,
|
|
971
1184
|
'timestamp': timestamp,
|
|
@@ -974,17 +1187,24 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
974
1187
|
'id': tradeId,
|
|
975
1188
|
'order': order,
|
|
976
1189
|
'type': type,
|
|
977
|
-
'takerOrMaker':
|
|
1190
|
+
'takerOrMaker': self.safe_string(trade, 'liquidity'),
|
|
978
1191
|
'side': side,
|
|
979
1192
|
'price': price,
|
|
980
1193
|
'amount': amount,
|
|
981
1194
|
'cost': None,
|
|
982
|
-
'fee':
|
|
1195
|
+
'fee': {
|
|
1196
|
+
'cost': feeCost,
|
|
1197
|
+
'rate': feeRate,
|
|
1198
|
+
'currency': feeCurrency,
|
|
1199
|
+
},
|
|
983
1200
|
}, market)
|
|
984
1201
|
|
|
985
1202
|
async def watch_balance(self, params={}) -> Balances:
|
|
986
1203
|
"""
|
|
987
1204
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
1205
|
+
|
|
1206
|
+
https://www.kucoin.com/docs/websocket/spot-trading/private-channels/account-balance-change
|
|
1207
|
+
|
|
988
1208
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
989
1209
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
990
1210
|
"""
|
|
@@ -1079,15 +1299,15 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
1079
1299
|
'trade.l3match': self.handle_trade,
|
|
1080
1300
|
'trade.candles.update': self.handle_ohlcv,
|
|
1081
1301
|
'account.balance': self.handle_balance,
|
|
1082
|
-
'/spot/tradeFills': self.handle_my_trade,
|
|
1083
1302
|
'orderChange': self.handle_order,
|
|
1084
1303
|
'stopOrder': self.handle_order,
|
|
1304
|
+
'/spot/tradeFills': self.handle_my_trade,
|
|
1085
1305
|
}
|
|
1086
1306
|
method = self.safe_value(methods, subject)
|
|
1087
1307
|
if method is not None:
|
|
1088
1308
|
method(client, message)
|
|
1089
1309
|
|
|
1090
|
-
def ping(self, client):
|
|
1310
|
+
def ping(self, client: Client):
|
|
1091
1311
|
# kucoin does not support built-in ws protocol-level ping-pong
|
|
1092
1312
|
# instead it requires a custom json-based text ping-pong
|
|
1093
1313
|
# https://docs.kucoin.com/#ping
|
|
@@ -1101,7 +1321,7 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
1101
1321
|
client.lastPong = self.milliseconds()
|
|
1102
1322
|
# https://docs.kucoin.com/#ping
|
|
1103
1323
|
|
|
1104
|
-
def handle_error_message(self, client: Client, message):
|
|
1324
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1105
1325
|
#
|
|
1106
1326
|
# {
|
|
1107
1327
|
# "id": "1",
|
|
@@ -1116,7 +1336,8 @@ class kucoin(ccxt.async_support.kucoin):
|
|
|
1116
1336
|
if client.url.find('connectId=private') >= 0:
|
|
1117
1337
|
type = 'private'
|
|
1118
1338
|
self.options['urls'][type] = None
|
|
1119
|
-
self.handle_errors(
|
|
1339
|
+
self.handle_errors(1, '', client.url, '', {}, data, message, {}, {})
|
|
1340
|
+
return False
|
|
1120
1341
|
|
|
1121
1342
|
def handle_message(self, client: Client, message):
|
|
1122
1343
|
type = self.safe_string(message, 'type')
|