ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.1__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 +8 -8
- 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 +10 -10
- 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 +32 -38
- 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 +32 -27
- 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 +34 -30
- ccxt/async_support/sarmayex.py +9 -9
- ccxt/async_support/sarrafex.py +13 -13
- ccxt/async_support/tabdeal.py +15 -14
- 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 +30 -36
- 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 +29 -24
- 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 +32 -28
- 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 +13 -12
- 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.1.dist-info}/METADATA +225 -73
- ccxt_ir-4.5.1.dist-info/RECORD +743 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.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.1.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/top_level.txt +0 -0
ccxt/pro/bithumb.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
|
|
8
|
-
from ccxt.base.types import Int, OrderBook, Strings, Ticker, Tickers, Trade
|
|
8
|
+
from ccxt.base.types import Any, Bool, Int, OrderBook, 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
|
|
@@ -13,7 +13,7 @@ from ccxt.base.errors import ExchangeError
|
|
|
13
13
|
|
|
14
14
|
class bithumb(ccxt.async_support.bithumb):
|
|
15
15
|
|
|
16
|
-
def describe(self):
|
|
16
|
+
def describe(self) -> Any:
|
|
17
17
|
return self.deep_extend(super(bithumb, self).describe(), {
|
|
18
18
|
'has': {
|
|
19
19
|
'ws': True,
|
|
@@ -37,6 +37,9 @@ class bithumb(ccxt.async_support.bithumb):
|
|
|
37
37
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
38
38
|
"""
|
|
39
39
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
40
|
+
|
|
41
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EB%B9%97%EC%8D%B8-%EA%B1%B0%EB%9E%98%EC%86%8C-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%8B%A0
|
|
42
|
+
|
|
40
43
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
41
44
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
42
45
|
:param str [params.channel]: the channel to subscribe to, tickers by default. Can be tickers, sprd-tickers, index-tickers, block-tickers
|
|
@@ -56,6 +59,9 @@ class bithumb(ccxt.async_support.bithumb):
|
|
|
56
59
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
57
60
|
"""
|
|
58
61
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
62
|
+
|
|
63
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EB%B9%97%EC%8D%B8-%EA%B1%B0%EB%9E%98%EC%86%8C-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%8B%A0
|
|
64
|
+
|
|
59
65
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
60
66
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
61
67
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -165,6 +171,9 @@ class bithumb(ccxt.async_support.bithumb):
|
|
|
165
171
|
|
|
166
172
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
167
173
|
"""
|
|
174
|
+
|
|
175
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EB%B9%97%EC%8D%B8-%EA%B1%B0%EB%9E%98%EC%86%8C-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%8B%A0
|
|
176
|
+
|
|
168
177
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
169
178
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
170
179
|
:param int [limit]: the maximum amount of order book entries to return
|
|
@@ -248,6 +257,9 @@ class bithumb(ccxt.async_support.bithumb):
|
|
|
248
257
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
249
258
|
"""
|
|
250
259
|
get the list of most recent trades for a particular symbol
|
|
260
|
+
|
|
261
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EB%B9%97%EC%8D%B8-%EA%B1%B0%EB%9E%98%EC%86%8C-%EC%A0%95%EB%B3%B4-%EC%88%98%EC%8B%A0
|
|
262
|
+
|
|
251
263
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
252
264
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
253
265
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -311,18 +323,20 @@ class bithumb(ccxt.async_support.bithumb):
|
|
|
311
323
|
# "contPrice" : "10579000",
|
|
312
324
|
# "contQty" : "0.01",
|
|
313
325
|
# "contAmt" : "105790.00",
|
|
314
|
-
# "contDtm" : "2020-01-29 12:24:18.
|
|
326
|
+
# "contDtm" : "2020-01-29 12:24:18.830038",
|
|
315
327
|
# "updn" : "dn"
|
|
316
328
|
# }
|
|
317
329
|
#
|
|
318
330
|
marketId = self.safe_string(trade, 'symbol')
|
|
319
331
|
datetime = self.safe_string(trade, 'contDtm')
|
|
332
|
+
# that date is not UTC iso8601, but exchange's local time, -9hr difference
|
|
333
|
+
timestamp = self.parse8601(datetime) - 32400000
|
|
320
334
|
sideId = self.safe_string(trade, 'buySellGb')
|
|
321
335
|
return self.safe_trade({
|
|
322
336
|
'id': None,
|
|
323
337
|
'info': trade,
|
|
324
|
-
'timestamp':
|
|
325
|
-
'datetime':
|
|
338
|
+
'timestamp': timestamp,
|
|
339
|
+
'datetime': self.iso8601(timestamp),
|
|
326
340
|
'symbol': self.safe_symbol(marketId, market, '_'),
|
|
327
341
|
'order': None,
|
|
328
342
|
'type': None,
|
|
@@ -334,7 +348,7 @@ class bithumb(ccxt.async_support.bithumb):
|
|
|
334
348
|
'fee': None,
|
|
335
349
|
}, market)
|
|
336
350
|
|
|
337
|
-
def handle_error_message(self, client: Client, message):
|
|
351
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
338
352
|
#
|
|
339
353
|
# {
|
|
340
354
|
# "status" : "5100",
|
ccxt/pro/bitmart.py
CHANGED
|
@@ -7,7 +7,7 @@ import ccxt.async_support
|
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
|
|
8
8
|
from ccxt.async_support.base.ws.order_book_side import Asks, Bids
|
|
9
9
|
import hashlib
|
|
10
|
-
from ccxt.base.types import Balances, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
10
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
11
11
|
from ccxt.async_support.base.ws.client import Client
|
|
12
12
|
from typing import List
|
|
13
13
|
from ccxt.base.errors import ExchangeError
|
|
@@ -17,7 +17,7 @@ from ccxt.base.errors import NotSupported
|
|
|
17
17
|
|
|
18
18
|
class bitmart(ccxt.async_support.bitmart):
|
|
19
19
|
|
|
20
|
-
def describe(self):
|
|
20
|
+
def describe(self) -> Any:
|
|
21
21
|
return self.deep_extend(super(bitmart, self).describe(), {
|
|
22
22
|
'has': {
|
|
23
23
|
'createOrderWs': False,
|
|
@@ -31,6 +31,7 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
31
31
|
'watchBalance': True,
|
|
32
32
|
'watchTicker': True,
|
|
33
33
|
'watchTickers': True,
|
|
34
|
+
'watchBidsAsks': True,
|
|
34
35
|
'watchOrderBook': True,
|
|
35
36
|
'watchOrderBookForSymbols': True,
|
|
36
37
|
'watchOrders': True,
|
|
@@ -48,8 +49,8 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
48
49
|
'private': 'wss://ws-manager-compress.{hostname}/user?protocol=1.1',
|
|
49
50
|
},
|
|
50
51
|
'swap': {
|
|
51
|
-
'public': 'wss://openapi-ws.{hostname}/api?protocol=1.1',
|
|
52
|
-
'private': 'wss://openapi-ws.{hostname}/user?protocol=1.1',
|
|
52
|
+
'public': 'wss://openapi-ws-v2.{hostname}/api?protocol=1.1',
|
|
53
|
+
'private': 'wss://openapi-ws-v2.{hostname}/user?protocol=1.1',
|
|
53
54
|
},
|
|
54
55
|
},
|
|
55
56
|
},
|
|
@@ -70,6 +71,9 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
70
71
|
'watchOrderBookForSymbols': {
|
|
71
72
|
'depth': 'depth/increase100',
|
|
72
73
|
},
|
|
74
|
+
'watchTrades': {
|
|
75
|
+
'ignoreDuplicates': True,
|
|
76
|
+
},
|
|
73
77
|
'ws': {
|
|
74
78
|
'inflate': True,
|
|
75
79
|
},
|
|
@@ -107,6 +111,10 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
107
111
|
}
|
|
108
112
|
else:
|
|
109
113
|
messageHash = 'futures/' + channel + ':' + market['id']
|
|
114
|
+
speed = self.safe_string(params, 'speed')
|
|
115
|
+
if speed is not None:
|
|
116
|
+
params = self.omit(params, 'speed')
|
|
117
|
+
messageHash += ':' + speed
|
|
110
118
|
request = {
|
|
111
119
|
'action': 'subscribe',
|
|
112
120
|
'args': [messageHash],
|
|
@@ -126,8 +134,10 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
126
134
|
rawSubscriptions.append(message)
|
|
127
135
|
messageHashes.append(channel + ':' + market['symbol'])
|
|
128
136
|
# exclusion, futures "tickers" need one generic request for all symbols
|
|
129
|
-
if (type != 'spot') and (channel == 'ticker'):
|
|
130
|
-
|
|
137
|
+
# if (type != 'spot') and (channel == 'ticker'):
|
|
138
|
+
# rawSubscriptions = [channelType + '/' + channel]
|
|
139
|
+
# }
|
|
140
|
+
# Exchange update from 2025-02-11 supports subscription by trading pair for swap
|
|
131
141
|
request: dict = {
|
|
132
142
|
'args': rawSubscriptions,
|
|
133
143
|
}
|
|
@@ -136,8 +146,10 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
136
146
|
|
|
137
147
|
async def watch_balance(self, params={}) -> Balances:
|
|
138
148
|
"""
|
|
139
|
-
|
|
140
|
-
|
|
149
|
+
|
|
150
|
+
https://developer-pro.bitmart.com/en/spot/#private-balance-change
|
|
151
|
+
https://developer-pro.bitmart.com/en/futuresv2/#private-assets-channel
|
|
152
|
+
|
|
141
153
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
142
154
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
143
155
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
@@ -256,8 +268,10 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
256
268
|
|
|
257
269
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
258
270
|
"""
|
|
259
|
-
|
|
260
|
-
|
|
271
|
+
|
|
272
|
+
https://developer-pro.bitmart.com/en/spot/#public-trade-channel
|
|
273
|
+
https://developer-pro.bitmart.com/en/futuresv2/#public-trade-channel
|
|
274
|
+
|
|
261
275
|
get the list of most recent trades for a particular symbol
|
|
262
276
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
263
277
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
@@ -269,7 +283,9 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
269
283
|
|
|
270
284
|
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
271
285
|
"""
|
|
272
|
-
|
|
286
|
+
|
|
287
|
+
https://developer-pro.bitmart.com/en/spot/#public-trade-channel
|
|
288
|
+
|
|
273
289
|
get the list of most recent trades for a list of symbols
|
|
274
290
|
:param str[] symbols: unified symbol of the market to fetch trades for
|
|
275
291
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
@@ -286,7 +302,12 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
286
302
|
first = self.safe_dict(trades, 0)
|
|
287
303
|
tradeSymbol = self.safe_string(first, 'symbol')
|
|
288
304
|
limit = trades.getLimit(tradeSymbol, limit)
|
|
289
|
-
|
|
305
|
+
result = self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
|
306
|
+
if self.handle_option('watchTrades', 'ignoreDuplicates', True):
|
|
307
|
+
filtered = self.remove_repeated_trades_from_array(result)
|
|
308
|
+
filtered = self.sort_by(filtered, 'timestamp')
|
|
309
|
+
return filtered
|
|
310
|
+
return result
|
|
290
311
|
|
|
291
312
|
def get_params_for_multiple_sub(self, methodName: str, symbols: List[str], limit: Int = None, params={}):
|
|
292
313
|
symbols = self.market_symbols(symbols, None, False, True)
|
|
@@ -300,7 +321,10 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
300
321
|
|
|
301
322
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
302
323
|
"""
|
|
303
|
-
|
|
324
|
+
|
|
325
|
+
https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
|
|
326
|
+
https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
|
|
327
|
+
|
|
304
328
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
305
329
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
306
330
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -313,7 +337,10 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
313
337
|
|
|
314
338
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
315
339
|
"""
|
|
316
|
-
|
|
340
|
+
|
|
341
|
+
https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
|
|
342
|
+
https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
|
|
343
|
+
|
|
317
344
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
318
345
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
319
346
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -330,11 +357,84 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
330
357
|
return tickers
|
|
331
358
|
return self.filter_by_array(self.tickers, 'symbol', symbols)
|
|
332
359
|
|
|
360
|
+
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
|
361
|
+
"""
|
|
362
|
+
|
|
363
|
+
https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
|
|
364
|
+
https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
|
|
365
|
+
|
|
366
|
+
watches best bid & ask for symbols
|
|
367
|
+
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
368
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
369
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
370
|
+
"""
|
|
371
|
+
await self.load_markets()
|
|
372
|
+
symbols = self.market_symbols(symbols, None, False)
|
|
373
|
+
firstMarket = self.get_market_from_symbols(symbols)
|
|
374
|
+
marketType = None
|
|
375
|
+
marketType, params = self.handle_market_type_and_params('watchBidsAsks', firstMarket, params)
|
|
376
|
+
url = self.implode_hostname(self.urls['api']['ws'][marketType]['public'])
|
|
377
|
+
channelType = 'spot' if (marketType == 'spot') else 'futures'
|
|
378
|
+
actionType = 'op' if (marketType == 'spot') else 'action'
|
|
379
|
+
rawSubscriptions = []
|
|
380
|
+
messageHashes = []
|
|
381
|
+
for i in range(0, len(symbols)):
|
|
382
|
+
market = self.market(symbols[i])
|
|
383
|
+
rawSubscriptions.append(channelType + '/ticker:' + market['id'])
|
|
384
|
+
messageHashes.append('bidask:' + symbols[i])
|
|
385
|
+
if marketType != 'spot':
|
|
386
|
+
rawSubscriptions = [channelType + '/ticker']
|
|
387
|
+
request: dict = {
|
|
388
|
+
'args': rawSubscriptions,
|
|
389
|
+
}
|
|
390
|
+
request[actionType] = 'subscribe'
|
|
391
|
+
newTickers = await self.watch_multiple(url, messageHashes, request, rawSubscriptions)
|
|
392
|
+
if self.newUpdates:
|
|
393
|
+
tickers: dict = {}
|
|
394
|
+
tickers[newTickers['symbol']] = newTickers
|
|
395
|
+
return tickers
|
|
396
|
+
return self.filter_by_array(self.bidsasks, 'symbol', symbols)
|
|
397
|
+
|
|
398
|
+
def handle_bid_ask(self, client: Client, message):
|
|
399
|
+
table = self.safe_string(message, 'table')
|
|
400
|
+
isSpot = (table is not None)
|
|
401
|
+
rawTickers = []
|
|
402
|
+
if isSpot:
|
|
403
|
+
rawTickers = self.safe_list(message, 'data', [])
|
|
404
|
+
else:
|
|
405
|
+
rawTickers = [self.safe_value(message, 'data', {})]
|
|
406
|
+
if not len(rawTickers):
|
|
407
|
+
return
|
|
408
|
+
for i in range(0, len(rawTickers)):
|
|
409
|
+
ticker = self.parse_ws_bid_ask(rawTickers[i])
|
|
410
|
+
symbol = ticker['symbol']
|
|
411
|
+
self.bidsasks[symbol] = ticker
|
|
412
|
+
messageHash = 'bidask:' + symbol
|
|
413
|
+
client.resolve(ticker, messageHash)
|
|
414
|
+
|
|
415
|
+
def parse_ws_bid_ask(self, ticker, market=None):
|
|
416
|
+
marketId = self.safe_string(ticker, 'symbol')
|
|
417
|
+
market = self.safe_market(marketId, market)
|
|
418
|
+
symbol = self.safe_string(market, 'symbol')
|
|
419
|
+
timestamp = self.safe_integer(ticker, 'ms_t')
|
|
420
|
+
return self.safe_ticker({
|
|
421
|
+
'symbol': symbol,
|
|
422
|
+
'timestamp': timestamp,
|
|
423
|
+
'datetime': self.iso8601(timestamp),
|
|
424
|
+
'ask': self.safe_string_2(ticker, 'ask_px', 'ask_price'),
|
|
425
|
+
'askVolume': self.safe_string_2(ticker, 'ask_sz', 'ask_vol'),
|
|
426
|
+
'bid': self.safe_string_2(ticker, 'bid_px', 'bid_price'),
|
|
427
|
+
'bidVolume': self.safe_string_2(ticker, 'bid_sz', 'bid_vol'),
|
|
428
|
+
'info': ticker,
|
|
429
|
+
}, market)
|
|
430
|
+
|
|
333
431
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
334
432
|
"""
|
|
335
433
|
watches information on multiple orders made by the user
|
|
336
|
-
|
|
337
|
-
|
|
434
|
+
|
|
435
|
+
https://developer-pro.bitmart.com/en/spot/#private-order-progress
|
|
436
|
+
https://developer-pro.bitmart.com/en/futuresv2/#private-order-channel
|
|
437
|
+
|
|
338
438
|
:param str symbol: unified market symbol of the market orders were made in
|
|
339
439
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
340
440
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -452,7 +552,7 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
452
552
|
client.resolve(newOrders, symbolSpecificMessageHash)
|
|
453
553
|
client.resolve(newOrders, messageHash)
|
|
454
554
|
|
|
455
|
-
def parse_ws_order(self, order, market: Market = None):
|
|
555
|
+
def parse_ws_order(self, order: dict, market: Market = None):
|
|
456
556
|
#
|
|
457
557
|
# spot
|
|
458
558
|
# {
|
|
@@ -604,9 +704,13 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
604
704
|
|
|
605
705
|
async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
|
|
606
706
|
"""
|
|
607
|
-
|
|
707
|
+
|
|
708
|
+
https://developer-pro.bitmart.com/en/futures/#private-position-channel
|
|
709
|
+
|
|
608
710
|
watch all open positions
|
|
609
711
|
:param str[]|None symbols: list of unified market symbols
|
|
712
|
+
:param int [since]: the earliest time in ms to fetch positions
|
|
713
|
+
:param int [limit]: the maximum number of positions to retrieve
|
|
610
714
|
:param dict params: extra parameters specific to the exchange API endpoint
|
|
611
715
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
|
|
612
716
|
"""
|
|
@@ -707,8 +811,8 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
707
811
|
symbol = market['symbol']
|
|
708
812
|
openTimestamp = self.safe_integer(position, 'create_time')
|
|
709
813
|
timestamp = self.safe_integer(position, 'update_time')
|
|
710
|
-
side = self.
|
|
711
|
-
marginModeId = self.
|
|
814
|
+
side = self.safe_integer(position, 'position_type')
|
|
815
|
+
marginModeId = self.safe_integer(position, 'open_type')
|
|
712
816
|
return self.safe_position({
|
|
713
817
|
'info': position,
|
|
714
818
|
'id': None,
|
|
@@ -762,15 +866,12 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
762
866
|
# "data":[
|
|
763
867
|
# {
|
|
764
868
|
# "trade_id":6798697637,
|
|
765
|
-
# "contract_id":1,
|
|
766
869
|
# "symbol":"BTCUSDT",
|
|
767
870
|
# "deal_price":"39735.8",
|
|
768
871
|
# "deal_vol":"2",
|
|
769
|
-
# "type":0,
|
|
770
872
|
# "way":1,
|
|
771
|
-
# "
|
|
772
|
-
# "
|
|
773
|
-
# "created_at":"2023-12-03T15:48:23.517518538Z"
|
|
873
|
+
# "created_at":"2023-12-03T15:48:23.517518538Z",
|
|
874
|
+
# "m": True,
|
|
774
875
|
# }
|
|
775
876
|
# ]
|
|
776
877
|
# }
|
|
@@ -802,47 +903,61 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
802
903
|
stored.append(trade)
|
|
803
904
|
return symbol
|
|
804
905
|
|
|
805
|
-
def parse_ws_trade(self, trade, market: Market = None):
|
|
906
|
+
def parse_ws_trade(self, trade: dict, market: Market = None):
|
|
907
|
+
#
|
|
806
908
|
# spot
|
|
807
|
-
#
|
|
808
|
-
#
|
|
809
|
-
#
|
|
810
|
-
#
|
|
811
|
-
#
|
|
812
|
-
#
|
|
813
|
-
#
|
|
909
|
+
# {
|
|
910
|
+
# "ms_t": 1740320841473,
|
|
911
|
+
# "price": "2806.54",
|
|
912
|
+
# "s_t": 1740320841,
|
|
913
|
+
# "side": "sell",
|
|
914
|
+
# "size": "0.77598",
|
|
915
|
+
# "symbol": "ETH_USDT"
|
|
916
|
+
# }
|
|
917
|
+
#
|
|
814
918
|
# swap
|
|
815
|
-
#
|
|
816
|
-
#
|
|
817
|
-
#
|
|
818
|
-
#
|
|
819
|
-
#
|
|
820
|
-
#
|
|
821
|
-
#
|
|
822
|
-
#
|
|
823
|
-
#
|
|
824
|
-
# "create_time_mill":1701618503517,
|
|
825
|
-
# "created_at":"2023-12-03T15:48:23.517518538Z"
|
|
826
|
-
# }
|
|
919
|
+
# {
|
|
920
|
+
# "trade_id": "3000000245258661",
|
|
921
|
+
# "symbol": "ETHUSDT",
|
|
922
|
+
# "deal_price": "2811.1",
|
|
923
|
+
# "deal_vol": "1858",
|
|
924
|
+
# "way": 2,
|
|
925
|
+
# "m": True,
|
|
926
|
+
# "created_at": "2025-02-23T13:59:59.646490751Z"
|
|
927
|
+
# }
|
|
827
928
|
#
|
|
828
|
-
contractId = self.safe_string(trade, 'contract_id')
|
|
829
|
-
marketType = 'spot' if (contractId is None) else 'swap'
|
|
830
|
-
marketDelimiter = '_' if (marketType == 'spot') else ''
|
|
831
|
-
timestamp = self.safe_integer(trade, 'create_time_mill', self.safe_timestamp(trade, 's_t'))
|
|
832
929
|
marketId = self.safe_string(trade, 'symbol')
|
|
930
|
+
market = self.safe_market(marketId, market)
|
|
931
|
+
timestamp = self.safe_integer(trade, 'ms_t')
|
|
932
|
+
datetime: Str = None
|
|
933
|
+
if timestamp is None:
|
|
934
|
+
datetime = self.safe_string(trade, 'created_at')
|
|
935
|
+
timestamp = self.parse8601(datetime)
|
|
936
|
+
else:
|
|
937
|
+
datetime = self.iso8601(timestamp)
|
|
938
|
+
takerOrMaker = None # True for public trades
|
|
939
|
+
side = self.safe_string(trade, 'side')
|
|
940
|
+
buyerMaker = self.safe_bool(trade, 'm')
|
|
941
|
+
if buyerMaker is not None:
|
|
942
|
+
if side is None:
|
|
943
|
+
if buyerMaker:
|
|
944
|
+
side = 'sell'
|
|
945
|
+
else:
|
|
946
|
+
side = 'buy'
|
|
947
|
+
takerOrMaker = 'taker'
|
|
833
948
|
return self.safe_trade({
|
|
834
949
|
'info': trade,
|
|
835
950
|
'id': self.safe_string(trade, 'trade_id'),
|
|
836
951
|
'order': None,
|
|
837
952
|
'timestamp': timestamp,
|
|
838
|
-
'datetime':
|
|
839
|
-
'symbol':
|
|
953
|
+
'datetime': datetime,
|
|
954
|
+
'symbol': market['symbol'],
|
|
840
955
|
'type': None,
|
|
841
|
-
'side':
|
|
956
|
+
'side': side,
|
|
842
957
|
'price': self.safe_string_2(trade, 'price', 'deal_price'),
|
|
843
958
|
'amount': self.safe_string_2(trade, 'size', 'deal_vol'),
|
|
844
959
|
'cost': None,
|
|
845
|
-
'takerOrMaker':
|
|
960
|
+
'takerOrMaker': takerOrMaker,
|
|
846
961
|
'fee': None,
|
|
847
962
|
}, market)
|
|
848
963
|
|
|
@@ -862,21 +977,24 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
862
977
|
# ],
|
|
863
978
|
# "table": "spot/ticker"
|
|
864
979
|
# }
|
|
865
|
-
# {
|
|
866
|
-
# "group":"futures/ticker",
|
|
867
|
-
# "data":{
|
|
868
|
-
# "symbol":"BTCUSDT",
|
|
869
|
-
# "volume_24":"117387.58",
|
|
870
|
-
# "fair_price":"146.24",
|
|
871
|
-
# "last_price":"146.24",
|
|
872
|
-
# "range":"147.17",
|
|
873
|
-
# "ask_price": "147.11",
|
|
874
|
-
# "ask_vol": "1",
|
|
875
|
-
# "bid_price": "142.11",
|
|
876
|
-
# "bid_vol": "1"
|
|
877
|
-
# }
|
|
878
|
-
# }
|
|
879
980
|
#
|
|
981
|
+
# {
|
|
982
|
+
# "data": {
|
|
983
|
+
# "symbol": "ETHUSDT",
|
|
984
|
+
# "last_price": "2807.73",
|
|
985
|
+
# "volume_24": "2227011952",
|
|
986
|
+
# "range": "0.0273398194664491",
|
|
987
|
+
# "mark_price": "2807.5",
|
|
988
|
+
# "index_price": "2808.71047619",
|
|
989
|
+
# "ask_price": "2808.04",
|
|
990
|
+
# "ask_vol": "7371",
|
|
991
|
+
# "bid_price": "2807.28",
|
|
992
|
+
# "bid_vol": "3561"
|
|
993
|
+
# },
|
|
994
|
+
# "group": "futures/ticker:ETHUSDT@100ms"
|
|
995
|
+
# }
|
|
996
|
+
#
|
|
997
|
+
self.handle_bid_ask(client, message)
|
|
880
998
|
table = self.safe_string(message, 'table')
|
|
881
999
|
isSpot = (table is not None)
|
|
882
1000
|
rawTickers = []
|
|
@@ -895,17 +1013,19 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
895
1013
|
|
|
896
1014
|
def parse_ws_swap_ticker(self, ticker, market: Market = None):
|
|
897
1015
|
#
|
|
898
|
-
#
|
|
899
|
-
#
|
|
900
|
-
#
|
|
901
|
-
#
|
|
902
|
-
#
|
|
903
|
-
#
|
|
904
|
-
#
|
|
905
|
-
#
|
|
906
|
-
#
|
|
907
|
-
#
|
|
908
|
-
#
|
|
1016
|
+
# {
|
|
1017
|
+
# "symbol": "ETHUSDT",
|
|
1018
|
+
# "last_price": "2807.73",
|
|
1019
|
+
# "volume_24": "2227011952",
|
|
1020
|
+
# "range": "0.0273398194664491",
|
|
1021
|
+
# "mark_price": "2807.5",
|
|
1022
|
+
# "index_price": "2808.71047619",
|
|
1023
|
+
# "ask_price": "2808.04",
|
|
1024
|
+
# "ask_vol": "7371",
|
|
1025
|
+
# "bid_price": "2807.28",
|
|
1026
|
+
# "bid_vol": "3561"
|
|
1027
|
+
# }
|
|
1028
|
+
#
|
|
909
1029
|
marketId = self.safe_string(ticker, 'symbol')
|
|
910
1030
|
return self.safe_ticker({
|
|
911
1031
|
'symbol': self.safe_symbol(marketId, market, '', 'swap'),
|
|
@@ -924,16 +1044,20 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
924
1044
|
'previousClose': None,
|
|
925
1045
|
'change': None,
|
|
926
1046
|
'percentage': None,
|
|
927
|
-
'average':
|
|
1047
|
+
'average': None,
|
|
928
1048
|
'baseVolume': None,
|
|
929
1049
|
'quoteVolume': self.safe_string(ticker, 'volume_24'),
|
|
930
1050
|
'info': ticker,
|
|
1051
|
+
'markPrice': self.safe_string(ticker, 'mark_price'),
|
|
1052
|
+
'indexPrice': self.safe_string(ticker, 'index_price'),
|
|
931
1053
|
}, market)
|
|
932
1054
|
|
|
933
1055
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
934
1056
|
"""
|
|
935
|
-
|
|
936
|
-
|
|
1057
|
+
|
|
1058
|
+
https://developer-pro.bitmart.com/en/spot/#public-kline-channel
|
|
1059
|
+
https://developer-pro.bitmart.com/en/futuresv2/#public-klinebin-channel
|
|
1060
|
+
|
|
937
1061
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
938
1062
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
939
1063
|
:param str timeframe: the length of time each candle represents
|
|
@@ -1047,13 +1171,16 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
1047
1171
|
|
|
1048
1172
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
1049
1173
|
"""
|
|
1050
|
-
|
|
1051
|
-
|
|
1052
|
-
|
|
1174
|
+
|
|
1175
|
+
https://developer-pro.bitmart.com/en/spot/#public-depth-all-channel
|
|
1176
|
+
https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
|
|
1177
|
+
https://developer-pro.bitmart.com/en/futuresv2/#public-depth-channel
|
|
1178
|
+
|
|
1053
1179
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
1054
1180
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
1055
1181
|
:param int [limit]: the maximum amount of order book entries to return
|
|
1056
1182
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1183
|
+
:param str [params.speed]: *futures only* '100ms' or '200ms'
|
|
1057
1184
|
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
|
1058
1185
|
"""
|
|
1059
1186
|
await self.load_markets()
|
|
@@ -1234,7 +1361,7 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
1234
1361
|
ob['symbol'] = symbol
|
|
1235
1362
|
self.orderbooks[symbol] = ob
|
|
1236
1363
|
orderbook = self.orderbooks[symbol]
|
|
1237
|
-
way = self.
|
|
1364
|
+
way = self.safe_integer(data, 'way')
|
|
1238
1365
|
side = 'bids' if (way == 1) else 'asks'
|
|
1239
1366
|
if way == 1:
|
|
1240
1367
|
orderbook[side] = Bids([], limit)
|
|
@@ -1262,7 +1389,9 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
1262
1389
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
|
1263
1390
|
"""
|
|
1264
1391
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
1265
|
-
|
|
1392
|
+
|
|
1393
|
+
https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
|
|
1394
|
+
|
|
1266
1395
|
:param str[] symbols: unified array of symbols
|
|
1267
1396
|
:param int [limit]: the maximum amount of order book entries to return
|
|
1268
1397
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1333,7 +1462,7 @@ class bitmart(ccxt.async_support.bitmart):
|
|
|
1333
1462
|
future = self.safe_value(client.futures, messageHash)
|
|
1334
1463
|
future.resolve(True)
|
|
1335
1464
|
|
|
1336
|
-
def handle_error_message(self, client: Client, message):
|
|
1465
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1337
1466
|
#
|
|
1338
1467
|
# {event: "error", message: "Invalid sign", errorCode: 30013}
|
|
1339
1468
|
# {"event":"error","message":"Unrecognized request: {\"event\":\"subscribe\",\"channel\":\"spot/depth:BTC-USDT\"}","errorCode":30039}
|