ccxt-ir 4.3.46.0.2__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 +9 -9
- 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 +10 -10
- 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.2.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.2.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
- 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.2.dist-info/RECORD +0 -772
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/pro/kucoinfutures.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, Position, Str, Strings, Ticker, Tickers, Trade
|
|
8
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Order, OrderBook, Position, 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 kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
16
16
|
|
|
17
|
-
def describe(self):
|
|
17
|
+
def describe(self) -> Any:
|
|
18
18
|
return self.deep_extend(super(kucoinfutures, self).describe(), {
|
|
19
19
|
'has': {
|
|
20
20
|
'ws': True,
|
|
@@ -175,10 +175,30 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
175
175
|
}
|
|
176
176
|
return await self.watch_multiple(url, messageHashes, self.extend(request, params), subscriptionHashes, subscriptionArgs)
|
|
177
177
|
|
|
178
|
+
async def un_subscribe_multiple(self, url, messageHashes, topic, subscriptionHashes, params={}, subscription: dict = None):
|
|
179
|
+
requestId = str(self.request_id())
|
|
180
|
+
request: dict = {
|
|
181
|
+
'id': requestId,
|
|
182
|
+
'type': 'unsubscribe',
|
|
183
|
+
'topic': topic,
|
|
184
|
+
'response': True,
|
|
185
|
+
}
|
|
186
|
+
message = self.extend(request, params)
|
|
187
|
+
if subscription is not None:
|
|
188
|
+
subscription[requestId] = requestId
|
|
189
|
+
client = self.client(url)
|
|
190
|
+
for i in range(0, len(subscriptionHashes)):
|
|
191
|
+
subscriptionHash = subscriptionHashes[i]
|
|
192
|
+
if not (subscriptionHash in client.subscriptions):
|
|
193
|
+
client.subscriptions[requestId] = subscriptionHash
|
|
194
|
+
return await self.watch_multiple(url, messageHashes, message, subscriptionHashes, subscription)
|
|
195
|
+
|
|
178
196
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
179
197
|
"""
|
|
180
198
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
181
|
-
|
|
199
|
+
|
|
200
|
+
https://www.kucoin.com/docs/websocket/futures-trading/public-channels/get-ticker
|
|
201
|
+
|
|
182
202
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
183
203
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
184
204
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -236,7 +256,9 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
236
256
|
|
|
237
257
|
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
|
238
258
|
"""
|
|
239
|
-
|
|
259
|
+
|
|
260
|
+
https://www.kucoin.com/docs/websocket/futures-trading/public-channels/get-ticker-v2
|
|
261
|
+
|
|
240
262
|
watches best bid & ask for symbols
|
|
241
263
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
242
264
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -320,7 +342,9 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
320
342
|
async def watch_position(self, symbol: Str = None, params={}) -> Position:
|
|
321
343
|
"""
|
|
322
344
|
watch open positions for a specific symbol
|
|
323
|
-
|
|
345
|
+
|
|
346
|
+
https://docs.kucoin.com/futures/#position-change-events
|
|
347
|
+
|
|
324
348
|
:param str|None symbol: unified market symbol
|
|
325
349
|
:param dict params: extra parameters specific to the exchange API endpoint
|
|
326
350
|
:returns dict: a `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
|
|
@@ -338,7 +362,7 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
338
362
|
client = self.client(url)
|
|
339
363
|
self.set_position_cache(client, symbol)
|
|
340
364
|
fetchPositionSnapshot = self.handle_option('watchPosition', 'fetchPositionSnapshot', True)
|
|
341
|
-
awaitPositionSnapshot = self.
|
|
365
|
+
awaitPositionSnapshot = self.handle_option('watchPosition', 'awaitPositionSnapshot', True)
|
|
342
366
|
currentPosition = self.get_current_position(symbol)
|
|
343
367
|
if fetchPositionSnapshot and awaitPositionSnapshot and currentPosition is None:
|
|
344
368
|
snapshot = await client.future('fetchPositionSnapshot:' + symbol)
|
|
@@ -485,7 +509,9 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
485
509
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
486
510
|
"""
|
|
487
511
|
get the list of most recent trades for a particular symbol
|
|
488
|
-
|
|
512
|
+
|
|
513
|
+
https://docs.kucoin.com/futures/#execution-data
|
|
514
|
+
|
|
489
515
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
490
516
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
491
517
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -497,7 +523,7 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
497
523
|
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
498
524
|
"""
|
|
499
525
|
get the list of most recent trades for a particular symbol
|
|
500
|
-
:param str
|
|
526
|
+
:param str[] symbols:
|
|
501
527
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
502
528
|
:param int [limit]: the maximum amount of trades to fetch
|
|
503
529
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -526,6 +552,46 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
526
552
|
limit = trades.getLimit(tradeSymbol, limit)
|
|
527
553
|
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
|
528
554
|
|
|
555
|
+
async def un_watch_trades(self, symbol: str, params={}) -> Any:
|
|
556
|
+
"""
|
|
557
|
+
unWatches trades stream
|
|
558
|
+
|
|
559
|
+
https://docs.kucoin.com/futures/#execution-data
|
|
560
|
+
|
|
561
|
+
:param str symbol: unified symbol of the market to fetch trades for
|
|
562
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
563
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
|
564
|
+
"""
|
|
565
|
+
return await self.un_watch_trades_for_symbols([symbol], params)
|
|
566
|
+
|
|
567
|
+
async def un_watch_trades_for_symbols(self, symbols: List[str], params={}) -> Any:
|
|
568
|
+
"""
|
|
569
|
+
get the list of most recent trades for a particular symbol
|
|
570
|
+
:param str[] symbols:
|
|
571
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
572
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
|
573
|
+
"""
|
|
574
|
+
await self.load_markets()
|
|
575
|
+
symbols = self.market_symbols(symbols, None, False)
|
|
576
|
+
url = await self.negotiate(False)
|
|
577
|
+
symbols = self.market_symbols(symbols)
|
|
578
|
+
marketIds = self.market_ids(symbols)
|
|
579
|
+
topic = '/contractMarket/execution:' + ','.join(marketIds)
|
|
580
|
+
subscriptionHashes = []
|
|
581
|
+
messageHashes = []
|
|
582
|
+
for i in range(0, len(symbols)):
|
|
583
|
+
symbol = symbols[i]
|
|
584
|
+
messageHashes.append('unsubscribe:trades:' + symbol)
|
|
585
|
+
subscriptionHashes.append('trades:' + symbol)
|
|
586
|
+
subscription = {
|
|
587
|
+
'messageHashes': messageHashes,
|
|
588
|
+
'subMessageHashes': subscriptionHashes,
|
|
589
|
+
'topic': 'trades',
|
|
590
|
+
'unsubscribe': True,
|
|
591
|
+
'symbols': symbols,
|
|
592
|
+
}
|
|
593
|
+
return await self.un_subscribe_multiple(url, messageHashes, topic, messageHashes, params, subscription)
|
|
594
|
+
|
|
529
595
|
def handle_trade(self, client: Client, message):
|
|
530
596
|
#
|
|
531
597
|
# {
|
|
@@ -562,7 +628,9 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
562
628
|
|
|
563
629
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
564
630
|
"""
|
|
565
|
-
|
|
631
|
+
|
|
632
|
+
https://www.kucoin.com/docs/websocket/futures-trading/public-channels/klines
|
|
633
|
+
|
|
566
634
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
567
635
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
568
636
|
:param str timeframe: the length of time each candle represents
|
|
@@ -634,13 +702,15 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
634
702
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
635
703
|
"""
|
|
636
704
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
637
|
-
|
|
638
|
-
|
|
639
|
-
|
|
640
|
-
|
|
641
|
-
|
|
642
|
-
|
|
643
|
-
|
|
705
|
+
1. After receiving the websocket Level 2 data flow, cache the data.
|
|
706
|
+
2. Initiate a REST request to get the snapshot data of Level 2 order book.
|
|
707
|
+
3. Playback the cached Level 2 data flow.
|
|
708
|
+
4. Apply the new Level 2 data flow to the local snapshot to ensure that the sequence of the new Level 2 update lines up with the sequence of the previous Level 2 data. Discard all the message prior to that sequence, and then playback the change to snapshot.
|
|
709
|
+
5. Update the level2 full data based on sequence according to the size. If the price is 0, ignore the messages and update the sequence. If the size=0, update the sequence and remove the price of which the size is 0 out of level 2. For other cases, please update the price.
|
|
710
|
+
6. If the sequence of the newly pushed message does not line up to the sequence of the last message, you could pull through REST Level 2 message request to get the updated messages. Please note that the difference between the start and end parameters cannot exceed 500.
|
|
711
|
+
|
|
712
|
+
https://docs.kucoin.com/futures/#level-2-market-data
|
|
713
|
+
|
|
644
714
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
645
715
|
:param int [limit]: the maximum amount of order book entries to return
|
|
646
716
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -651,6 +721,9 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
651
721
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
|
652
722
|
"""
|
|
653
723
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
724
|
+
|
|
725
|
+
https://docs.kucoin.com/futures/#level-2-market-data
|
|
726
|
+
|
|
654
727
|
:param str[] symbols: unified array of symbols
|
|
655
728
|
:param int [limit]: the maximum amount of order book entries to return
|
|
656
729
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -680,6 +753,45 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
680
753
|
orderbook = await self.subscribe_multiple(url, messageHashes, topic, subscriptionHashes, subscriptionArgs, params)
|
|
681
754
|
return orderbook.limit()
|
|
682
755
|
|
|
756
|
+
async def un_watch_order_book(self, symbol: str, params={}) -> Any:
|
|
757
|
+
"""
|
|
758
|
+
unWatches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
759
|
+
|
|
760
|
+
https://docs.kucoin.com/futures/#level-2-market-data
|
|
761
|
+
|
|
762
|
+
:param str symbol: unified symbol of the market to fetch the order book for
|
|
763
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
764
|
+
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
|
765
|
+
"""
|
|
766
|
+
return await self.un_watch_order_book_for_symbols([symbol], params)
|
|
767
|
+
|
|
768
|
+
async def un_watch_order_book_for_symbols(self, symbols: List[str], params={}) -> Any:
|
|
769
|
+
"""
|
|
770
|
+
unWatches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
771
|
+
:param str[] symbols: unified array of symbols
|
|
772
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
773
|
+
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
|
774
|
+
"""
|
|
775
|
+
await self.load_markets()
|
|
776
|
+
symbols = self.market_symbols(symbols)
|
|
777
|
+
marketIds = self.market_ids(symbols)
|
|
778
|
+
url = await self.negotiate(False)
|
|
779
|
+
topic = '/contractMarket/level2:' + ','.join(marketIds)
|
|
780
|
+
subscriptionHashes = []
|
|
781
|
+
messageHashes = []
|
|
782
|
+
for i in range(0, len(symbols)):
|
|
783
|
+
symbol = symbols[i]
|
|
784
|
+
messageHashes.append('unsubscribe:orderbook:' + symbol)
|
|
785
|
+
subscriptionHashes.append('orderbook:' + symbol)
|
|
786
|
+
subscription = {
|
|
787
|
+
'messageHashes': messageHashes,
|
|
788
|
+
'symbols': symbols,
|
|
789
|
+
'unsubscribe': True,
|
|
790
|
+
'topic': 'orderbook',
|
|
791
|
+
'subMessageHashes': subscriptionHashes,
|
|
792
|
+
}
|
|
793
|
+
return await self.un_subscribe_multiple(url, messageHashes, topic, messageHashes, params, subscription)
|
|
794
|
+
|
|
683
795
|
def handle_delta(self, orderbook, delta):
|
|
684
796
|
orderbook['nonce'] = self.safe_integer(delta, 'sequence')
|
|
685
797
|
timestamp = self.safe_integer(delta, 'timestamp')
|
|
@@ -784,7 +896,9 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
784
896
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
785
897
|
"""
|
|
786
898
|
watches information on multiple orders made by the user
|
|
787
|
-
|
|
899
|
+
|
|
900
|
+
https://docs.kucoin.com/futures/#trade-orders-according-to-the-market
|
|
901
|
+
|
|
788
902
|
:param str symbol: unified market symbol of the market orders were made in
|
|
789
903
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
790
904
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -900,7 +1014,9 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
900
1014
|
async def watch_balance(self, params={}) -> Balances:
|
|
901
1015
|
"""
|
|
902
1016
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
903
|
-
|
|
1017
|
+
|
|
1018
|
+
https://docs.kucoin.com/futures/#account-balance-events
|
|
1019
|
+
|
|
904
1020
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
905
1021
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
906
1022
|
"""
|
|
@@ -1035,7 +1151,7 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
1035
1151
|
else:
|
|
1036
1152
|
return elementName + 's@all'
|
|
1037
1153
|
|
|
1038
|
-
def ping(self, client):
|
|
1154
|
+
def ping(self, client: Client):
|
|
1039
1155
|
# kucoin does not support built-in ws protocol-level ping-pong
|
|
1040
1156
|
# instead it requires a custom json-based text ping-pong
|
|
1041
1157
|
# https://docs.kucoin.com/#ping
|
|
@@ -1050,7 +1166,7 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
1050
1166
|
client.lastPong = self.milliseconds()
|
|
1051
1167
|
return message
|
|
1052
1168
|
|
|
1053
|
-
def handle_error_message(self, client: Client, message):
|
|
1169
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1054
1170
|
#
|
|
1055
1171
|
# {
|
|
1056
1172
|
# "id": "64d8732c856851144bded10d",
|
|
@@ -1065,7 +1181,34 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
1065
1181
|
if client.url.find('connectId=private') >= 0:
|
|
1066
1182
|
type = 'private'
|
|
1067
1183
|
self.options['urls'][type] = None
|
|
1068
|
-
self.handle_errors(
|
|
1184
|
+
self.handle_errors(1, '', client.url, '', {}, data, message, {}, {})
|
|
1185
|
+
return True
|
|
1186
|
+
|
|
1187
|
+
def handle_subscription_status(self, client: Client, message):
|
|
1188
|
+
#
|
|
1189
|
+
# {
|
|
1190
|
+
# "id": "1578090438322",
|
|
1191
|
+
# "type": "ack"
|
|
1192
|
+
# }
|
|
1193
|
+
#
|
|
1194
|
+
id = self.safe_string(message, 'id')
|
|
1195
|
+
if not (id in client.subscriptions):
|
|
1196
|
+
return
|
|
1197
|
+
subscriptionHash = self.safe_string(client.subscriptions, id)
|
|
1198
|
+
subscription = self.safe_value(client.subscriptions, subscriptionHash)
|
|
1199
|
+
del client.subscriptions[id]
|
|
1200
|
+
method = self.safe_value(subscription, 'method')
|
|
1201
|
+
if method is not None:
|
|
1202
|
+
method(client, message, subscription)
|
|
1203
|
+
isUnSub = self.safe_bool(subscription, 'unsubscribe', False)
|
|
1204
|
+
if isUnSub:
|
|
1205
|
+
messageHashes = self.safe_list(subscription, 'messageHashes', [])
|
|
1206
|
+
subMessageHashes = self.safe_list(subscription, 'subMessageHashes', [])
|
|
1207
|
+
for i in range(0, len(messageHashes)):
|
|
1208
|
+
messageHash = messageHashes[i]
|
|
1209
|
+
subHash = subMessageHashes[i]
|
|
1210
|
+
self.clean_unsubscription(client, subHash, messageHash)
|
|
1211
|
+
self.clean_cache(subscription)
|
|
1069
1212
|
|
|
1070
1213
|
def handle_message(self, client: Client, message):
|
|
1071
1214
|
type = self.safe_string(message, 'type')
|
|
@@ -1075,6 +1218,7 @@ class kucoinfutures(ccxt.async_support.kucoinfutures):
|
|
|
1075
1218
|
'message': self.handle_subject,
|
|
1076
1219
|
'pong': self.handle_pong,
|
|
1077
1220
|
'error': self.handle_error_message,
|
|
1221
|
+
'ack': self.handle_subscription_status,
|
|
1078
1222
|
}
|
|
1079
1223
|
method = self.safe_value(methods, type)
|
|
1080
1224
|
if method is not None:
|
ccxt/pro/lbank.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
|
|
8
8
|
import math
|
|
9
|
-
from ccxt.base.types import Int, Order, OrderBook, Str, Ticker, Trade
|
|
9
|
+
from ccxt.base.types import Any, Balances, Int, Order, OrderBook, Str, Ticker, Trade
|
|
10
10
|
from ccxt.async_support.base.ws.client import Client
|
|
11
11
|
from typing import List
|
|
12
12
|
from ccxt.base.errors import ExchangeError
|
|
@@ -14,7 +14,7 @@ from ccxt.base.errors import ExchangeError
|
|
|
14
14
|
|
|
15
15
|
class lbank(ccxt.async_support.lbank):
|
|
16
16
|
|
|
17
|
-
def describe(self):
|
|
17
|
+
def describe(self) -> Any:
|
|
18
18
|
return self.deep_extend(super(lbank, self).describe(), {
|
|
19
19
|
'has': {
|
|
20
20
|
'ws': True,
|
|
@@ -22,10 +22,11 @@ class lbank(ccxt.async_support.lbank):
|
|
|
22
22
|
'fetchOrderBookWs': True,
|
|
23
23
|
'fetchTickerWs': True,
|
|
24
24
|
'fetchTradesWs': True,
|
|
25
|
-
'watchBalance':
|
|
25
|
+
'watchBalance': True,
|
|
26
26
|
'watchTicker': True,
|
|
27
27
|
'watchTickers': False,
|
|
28
28
|
'watchTrades': True,
|
|
29
|
+
'watchTradesForSymbols': False,
|
|
29
30
|
'watchMyTrades': False,
|
|
30
31
|
'watchOrders': True,
|
|
31
32
|
'watchOrderBook': True,
|
|
@@ -66,7 +67,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
66
67
|
|
|
67
68
|
async def fetch_ohlcv_ws(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
68
69
|
"""
|
|
69
|
-
|
|
70
|
+
|
|
71
|
+
https://www.lbank.com/en-US/docs/index.html#request-amp-subscription-instruction
|
|
72
|
+
|
|
70
73
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
71
74
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
72
75
|
:param str timeframe: the length of time each candle represents
|
|
@@ -98,7 +101,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
98
101
|
|
|
99
102
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
100
103
|
"""
|
|
101
|
-
|
|
104
|
+
|
|
105
|
+
https://www.lbank.com/en-US/docs/index.html#subscription-of-k-line-data
|
|
106
|
+
|
|
102
107
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
103
108
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
104
109
|
:param str timeframe: the length of time each candle represents
|
|
@@ -229,7 +234,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
229
234
|
|
|
230
235
|
async def fetch_ticker_ws(self, symbol: str, params={}) -> Ticker:
|
|
231
236
|
"""
|
|
232
|
-
|
|
237
|
+
|
|
238
|
+
https://www.lbank.com/en-US/docs/index.html#request-amp-subscription-instruction
|
|
239
|
+
|
|
233
240
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
234
241
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
235
242
|
:param dict [params]: extra parameters specific to the cex api endpoint
|
|
@@ -250,7 +257,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
250
257
|
|
|
251
258
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
252
259
|
"""
|
|
253
|
-
|
|
260
|
+
|
|
261
|
+
https://www.lbank.com/en-US/docs/index.html#market
|
|
262
|
+
|
|
254
263
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
255
264
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
256
265
|
:param dict params: extra parameters specific to the lbank api endpoint
|
|
@@ -352,7 +361,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
352
361
|
async def fetch_trades_ws(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
353
362
|
"""
|
|
354
363
|
get the list of most recent trades for a particular symbol
|
|
355
|
-
|
|
364
|
+
|
|
365
|
+
https://www.lbank.com/en-US/docs/index.html#request-amp-subscription-instruction
|
|
366
|
+
|
|
356
367
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
357
368
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
358
369
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -377,7 +388,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
377
388
|
|
|
378
389
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
379
390
|
"""
|
|
380
|
-
|
|
391
|
+
|
|
392
|
+
https://www.lbank.com/en-US/docs/index.html#trade-record
|
|
393
|
+
|
|
381
394
|
get the list of most recent trades for a particular symbol
|
|
382
395
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
383
396
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
@@ -416,7 +429,7 @@ class lbank(ccxt.async_support.lbank):
|
|
|
416
429
|
# "volume":6.3607,
|
|
417
430
|
# "amount":77148.9303,
|
|
418
431
|
# "price":12129,
|
|
419
|
-
# "direction":"sell", #
|
|
432
|
+
# "direction":"sell", # buy, sell, buy_market, sell_market, buy_maker, sell_maker, buy_ioc, sell_ioc, buy_fok, sell_fok
|
|
420
433
|
# "TS":"2019-06-28T19:55:49.460"
|
|
421
434
|
# },
|
|
422
435
|
# "type":"trade",
|
|
@@ -454,7 +467,7 @@ class lbank(ccxt.async_support.lbank):
|
|
|
454
467
|
# "volume":6.3607,
|
|
455
468
|
# "amount":77148.9303,
|
|
456
469
|
# "price":12129,
|
|
457
|
-
# "direction":"sell", #
|
|
470
|
+
# "direction":"sell", # buy, sell, buy_market, sell_market, buy_maker, sell_maker, buy_ioc, sell_ioc, buy_fok, sell_fok
|
|
458
471
|
# "TS":"2019-06-28T19:55:49.460"
|
|
459
472
|
# }
|
|
460
473
|
#
|
|
@@ -462,8 +475,14 @@ class lbank(ccxt.async_support.lbank):
|
|
|
462
475
|
datetime = (self.iso8601(timestamp)) if (timestamp is not None) else (self.safe_string(trade, 'TS'))
|
|
463
476
|
if timestamp is None:
|
|
464
477
|
timestamp = self.parse8601(datetime)
|
|
465
|
-
|
|
466
|
-
|
|
478
|
+
rawSide = self.safe_string_2(trade, 'direction', 3)
|
|
479
|
+
parts = rawSide.split('_')
|
|
480
|
+
firstPart = self.safe_string(parts, 0)
|
|
481
|
+
secondPart = self.safe_string(parts, 1)
|
|
482
|
+
side = firstPart
|
|
483
|
+
# reverse if it was 'maker'
|
|
484
|
+
if secondPart is not None and secondPart == 'maker':
|
|
485
|
+
side = 'sell' if (side == 'buy') else 'buy'
|
|
467
486
|
return self.safe_trade({
|
|
468
487
|
'timestamp': timestamp,
|
|
469
488
|
'datetime': datetime,
|
|
@@ -482,7 +501,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
482
501
|
|
|
483
502
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
484
503
|
"""
|
|
485
|
-
|
|
504
|
+
|
|
505
|
+
https://www.lbank.com/en-US/docs/index.html#update-subscribed-orders
|
|
506
|
+
|
|
486
507
|
get the list of trades associated with the user
|
|
487
508
|
:param str [symbol]: unified symbol of the market to fetch trades for
|
|
488
509
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
@@ -637,9 +658,64 @@ class lbank(ccxt.async_support.lbank):
|
|
|
637
658
|
}
|
|
638
659
|
return self.safe_string(statuses, status, status)
|
|
639
660
|
|
|
661
|
+
async def watch_balance(self, params={}) -> Balances:
|
|
662
|
+
"""
|
|
663
|
+
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
664
|
+
|
|
665
|
+
https://www.lbank.com/docs/index.html#update-subscribed-asset
|
|
666
|
+
|
|
667
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
668
|
+
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
669
|
+
"""
|
|
670
|
+
await self.load_markets()
|
|
671
|
+
key = await self.authenticate(params)
|
|
672
|
+
url = self.urls['api']['ws']
|
|
673
|
+
messageHash = 'balance'
|
|
674
|
+
message: dict = {
|
|
675
|
+
'action': 'subscribe',
|
|
676
|
+
'subscribe': 'assetUpdate',
|
|
677
|
+
'subscribeKey': key,
|
|
678
|
+
}
|
|
679
|
+
request = self.deep_extend(message, params)
|
|
680
|
+
return await self.watch(url, messageHash, request, messageHash, request)
|
|
681
|
+
|
|
682
|
+
def handle_balance(self, client: Client, message):
|
|
683
|
+
#
|
|
684
|
+
# {
|
|
685
|
+
# "data": {
|
|
686
|
+
# "asset": "114548.31881315",
|
|
687
|
+
# "assetCode": "usdt",
|
|
688
|
+
# "free": "97430.6739041",
|
|
689
|
+
# "freeze": "17117.64490905",
|
|
690
|
+
# "time": 1627300043270,
|
|
691
|
+
# "type": "ORDER_CREATE"
|
|
692
|
+
# },
|
|
693
|
+
# "SERVER": "V2",
|
|
694
|
+
# "type": "assetUpdate",
|
|
695
|
+
# "TS": "2021-07-26T19:48:03.548"
|
|
696
|
+
# }
|
|
697
|
+
#
|
|
698
|
+
data = self.safe_dict(message, 'data', {})
|
|
699
|
+
timestamp = self.parse8601(self.safe_string(message, 'TS'))
|
|
700
|
+
datetime = self.iso8601(timestamp)
|
|
701
|
+
self.balance['info'] = data
|
|
702
|
+
self.balance['timestamp'] = timestamp
|
|
703
|
+
self.balance['datetime'] = datetime
|
|
704
|
+
currencyId = self.safe_string(data, 'assetCode')
|
|
705
|
+
code = self.safe_currency_code(currencyId)
|
|
706
|
+
account = self.account()
|
|
707
|
+
account['free'] = self.safe_string(data, 'free')
|
|
708
|
+
account['used'] = self.safe_string(data, 'freeze')
|
|
709
|
+
account['total'] = self.safe_string(data, 'asset')
|
|
710
|
+
self.balance[code] = account
|
|
711
|
+
self.balance = self.safe_balance(self.balance)
|
|
712
|
+
client.resolve(self.balance, 'balance')
|
|
713
|
+
|
|
640
714
|
async def fetch_order_book_ws(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
641
715
|
"""
|
|
642
|
-
|
|
716
|
+
|
|
717
|
+
https://www.lbank.com/en-US/docs/index.html#request-amp-subscription-instruction
|
|
718
|
+
|
|
643
719
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
644
720
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
645
721
|
:param int|None limit: the maximum amount of order book entries to return
|
|
@@ -664,8 +740,9 @@ class lbank(ccxt.async_support.lbank):
|
|
|
664
740
|
|
|
665
741
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
666
742
|
"""
|
|
667
|
-
|
|
668
|
-
|
|
743
|
+
|
|
744
|
+
https://www.lbank.com/en-US/docs/index.html#market-depth
|
|
745
|
+
|
|
669
746
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
670
747
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
671
748
|
:param int|None limit: the maximum amount of order book entries to return
|
|
@@ -780,10 +857,13 @@ class lbank(ccxt.async_support.lbank):
|
|
|
780
857
|
# {ping: 'a13a939c-5f25-4e06-9981-93cb3b890707', action: 'ping'}
|
|
781
858
|
#
|
|
782
859
|
pingId = self.safe_string(message, 'ping')
|
|
783
|
-
|
|
784
|
-
|
|
785
|
-
|
|
786
|
-
|
|
860
|
+
try:
|
|
861
|
+
await client.send({
|
|
862
|
+
'action': 'pong',
|
|
863
|
+
'pong': pingId,
|
|
864
|
+
})
|
|
865
|
+
except Exception as e:
|
|
866
|
+
self.on_error(client, e)
|
|
787
867
|
|
|
788
868
|
def handle_message(self, client, message):
|
|
789
869
|
status = self.safe_string(message, 'status')
|
|
@@ -800,6 +880,7 @@ class lbank(ccxt.async_support.lbank):
|
|
|
800
880
|
'trade': self.handle_trades,
|
|
801
881
|
'tick': self.handle_ticker,
|
|
802
882
|
'orderUpdate': self.handle_orders,
|
|
883
|
+
'assetUpdate': self.handle_balance,
|
|
803
884
|
}
|
|
804
885
|
handler = self.safe_value(handlers, type)
|
|
805
886
|
if handler is not None:
|
ccxt/pro/luno.py
CHANGED
|
@@ -5,20 +5,21 @@
|
|
|
5
5
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache
|
|
8
|
-
from ccxt.base.types import IndexType, Int, OrderBook, Trade
|
|
8
|
+
from ccxt.base.types import Any, IndexType, Int, OrderBook, Trade
|
|
9
9
|
from ccxt.async_support.base.ws.client import Client
|
|
10
10
|
from typing import List
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class luno(ccxt.async_support.luno):
|
|
14
14
|
|
|
15
|
-
def describe(self):
|
|
15
|
+
def describe(self) -> Any:
|
|
16
16
|
return self.deep_extend(super(luno, self).describe(), {
|
|
17
17
|
'has': {
|
|
18
18
|
'ws': True,
|
|
19
19
|
'watchTicker': False,
|
|
20
20
|
'watchTickers': False,
|
|
21
21
|
'watchTrades': True,
|
|
22
|
+
'watchTradesForSymbols': False,
|
|
22
23
|
'watchMyTrades': False,
|
|
23
24
|
'watchOrders': None, # is in beta
|
|
24
25
|
'watchOrderBook': True,
|
|
@@ -41,7 +42,9 @@ class luno(ccxt.async_support.luno):
|
|
|
41
42
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
42
43
|
"""
|
|
43
44
|
get the list of most recent trades for a particular symbol
|
|
44
|
-
|
|
45
|
+
|
|
46
|
+
https://www.luno.com/en/developers/api#tag/Streaming-API
|
|
47
|
+
|
|
45
48
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
46
49
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
47
50
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -193,15 +196,16 @@ class luno(ccxt.async_support.luno):
|
|
|
193
196
|
timestamp = self.safe_integer(message, 'timestamp')
|
|
194
197
|
if not (symbol in self.orderbooks):
|
|
195
198
|
self.orderbooks[symbol] = self.indexed_order_book({})
|
|
196
|
-
orderbook = self.orderbooks[symbol]
|
|
197
199
|
asks = self.safe_value(message, 'asks')
|
|
198
200
|
if asks is not None:
|
|
199
201
|
snapshot = self.custom_parse_order_book(message, symbol, timestamp, 'bids', 'asks', 'price', 'volume', 'id')
|
|
200
|
-
|
|
202
|
+
self.orderbooks[symbol] = self.indexed_order_book(snapshot)
|
|
201
203
|
else:
|
|
202
|
-
self.
|
|
203
|
-
|
|
204
|
-
|
|
204
|
+
ob = self.orderbooks[symbol]
|
|
205
|
+
self.handle_delta(ob, message)
|
|
206
|
+
ob['timestamp'] = timestamp
|
|
207
|
+
ob['datetime'] = self.iso8601(timestamp)
|
|
208
|
+
orderbook = self.orderbooks[symbol]
|
|
205
209
|
nonce = self.safe_integer(message, 'sequence')
|
|
206
210
|
orderbook['nonce'] = nonce
|
|
207
211
|
client.resolve(orderbook, messageHash)
|