ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__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 +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +25 -0
- ccxt/abstract/kucoinfutures.py +35 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3513 -1511
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3105 -881
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +239 -50
- ccxt/async_support/bitget.py +1513 -563
- ccxt/async_support/bithumb.py +201 -67
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +403 -150
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2326 -1255
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1455 -288
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +206 -89
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +467 -158
- ccxt/async_support/deribit.py +558 -324
- ccxt/async_support/digifinex.py +340 -223
- ccxt/async_support/ellipx.py +1826 -0
- ccxt/async_support/exmo.py +259 -128
- ccxt/async_support/gate.py +1473 -464
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +334 -178
- ccxt/async_support/hollaex.py +134 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +105 -56
- ccxt/async_support/hyperliquid.py +1634 -269
- ccxt/async_support/idex.py +148 -95
- ccxt/async_support/independentreserve.py +236 -31
- ccxt/async_support/indodax.py +165 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +1050 -355
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +138 -106
- ccxt/async_support/latoken.py +135 -79
- ccxt/async_support/lbank.py +290 -113
- ccxt/async_support/luno.py +112 -62
- ccxt/async_support/lykke.py +104 -55
- ccxt/async_support/mercado.py +36 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +43 -0
- ccxt/async_support/ndax.py +163 -82
- ccxt/async_support/novadax.py +121 -75
- ccxt/async_support/oceanex.py +175 -59
- ccxt/async_support/okcoin.py +222 -163
- ccxt/async_support/okx.py +1777 -455
- ccxt/async_support/onetrading.py +132 -414
- ccxt/async_support/oxfun.py +2832 -0
- ccxt/async_support/p2b.py +79 -51
- ccxt/async_support/paradex.py +2017 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1155 -295
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1729 -482
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3513 -1511
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3105 -881
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +239 -50
- ccxt/bitget.py +1513 -563
- ccxt/bithumb.py +200 -67
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +403 -150
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2326 -1255
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1455 -288
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +206 -89
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +467 -158
- ccxt/deribit.py +558 -324
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1473 -464
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +334 -178
- ccxt/hollaex.py +134 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +105 -56
- ccxt/hyperliquid.py +1633 -269
- ccxt/idex.py +148 -95
- ccxt/independentreserve.py +235 -31
- ccxt/indodax.py +165 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +1050 -355
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +138 -106
- ccxt/latoken.py +135 -79
- ccxt/lbank.py +290 -113
- ccxt/luno.py +112 -62
- ccxt/lykke.py +104 -55
- ccxt/mercado.py +36 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +43 -0
- ccxt/ndax.py +163 -82
- ccxt/novadax.py +121 -75
- ccxt/oceanex.py +175 -59
- ccxt/okcoin.py +222 -163
- ccxt/okx.py +1777 -455
- ccxt/onetrading.py +132 -414
- ccxt/oxfun.py +2831 -0
- ccxt/p2b.py +79 -51
- ccxt/paradex.py +2017 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +63 -15
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +138 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +204 -82
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -661
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +168 -32
- ccxt/pro/exmo.py +253 -21
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +93 -34
- ccxt/pro/poloniex.py +129 -50
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +93 -86
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +486 -70
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +465 -407
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +465 -409
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1155 -295
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.48.dist-info/METADATA +646 -0
- ccxt-4.4.48.dist-info/RECORD +669 -0
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- 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 -103
- 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 -32
- 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_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- 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 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- 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-4.2.76.dist-info/METADATA +0 -626
- ccxt-4.2.76.dist-info/RECORD +0 -534
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/pro/bitmex.py
CHANGED
@@ -6,12 +6,12 @@
|
|
6
6
|
import ccxt.async_support
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Int, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
9
|
+
from ccxt.base.types import Balances, Int, Liquidation, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, 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
|
13
|
-
from ccxt.base.errors import RateLimitExceeded
|
14
13
|
from ccxt.base.errors import AuthenticationError
|
14
|
+
from ccxt.base.errors import RateLimitExceeded
|
15
15
|
|
16
16
|
|
17
17
|
class bitmex(ccxt.async_support.bitmex):
|
@@ -21,6 +21,10 @@ class bitmex(ccxt.async_support.bitmex):
|
|
21
21
|
'has': {
|
22
22
|
'ws': True,
|
23
23
|
'watchBalance': True,
|
24
|
+
'watchLiquidations': True,
|
25
|
+
'watchLiquidationsForSymbols': True,
|
26
|
+
'watchMyLiquidations': None,
|
27
|
+
'watchMyLiquidationsForSymbols': None,
|
24
28
|
'watchMyTrades': True,
|
25
29
|
'watchOHLCV': True,
|
26
30
|
'watchOrderBook': True,
|
@@ -62,6 +66,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
62
66
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
63
67
|
"""
|
64
68
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
69
|
+
|
70
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
71
|
+
|
65
72
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
66
73
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
67
74
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -74,6 +81,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
74
81
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
75
82
|
"""
|
76
83
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
84
|
+
|
85
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
86
|
+
|
77
87
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
78
88
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
79
89
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -95,13 +105,13 @@ class bitmex(ccxt.async_support.bitmex):
|
|
95
105
|
else:
|
96
106
|
rawSubscriptions.append(name)
|
97
107
|
messageHashes.append('alltickers')
|
98
|
-
request = {
|
108
|
+
request: dict = {
|
99
109
|
'op': 'subscribe',
|
100
110
|
'args': rawSubscriptions,
|
101
111
|
}
|
102
112
|
ticker = await self.watch_multiple(url, messageHashes, self.extend(request, params), rawSubscriptions)
|
103
113
|
if self.newUpdates:
|
104
|
-
result = {}
|
114
|
+
result: dict = {}
|
105
115
|
result[ticker['symbol']] = ticker
|
106
116
|
return result
|
107
117
|
return self.filter_by_array(self.tickers, 'symbol', symbols)
|
@@ -334,7 +344,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
334
344
|
# }
|
335
345
|
#
|
336
346
|
data = self.safe_list(message, 'data', [])
|
337
|
-
tickers = {}
|
347
|
+
tickers: dict = {}
|
338
348
|
for i in range(0, len(data)):
|
339
349
|
update = data[i]
|
340
350
|
marketId = self.safe_string(update, 'symbol')
|
@@ -350,9 +360,108 @@ class bitmex(ccxt.async_support.bitmex):
|
|
350
360
|
client.resolve(fullParsedTicker, 'alltickers')
|
351
361
|
return message
|
352
362
|
|
363
|
+
async def watch_liquidations(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Liquidation]:
|
364
|
+
"""
|
365
|
+
watch the public liquidations of a trading pair
|
366
|
+
|
367
|
+
https://www.bitmex.com/app/wsAPI#Liquidation
|
368
|
+
|
369
|
+
:param str symbol: unified CCXT market symbol
|
370
|
+
:param int [since]: the earliest time in ms to fetch liquidations for
|
371
|
+
:param int [limit]: the maximum number of liquidation structures to retrieve
|
372
|
+
:param dict [params]: exchange specific parameters for the bitmex api endpoint
|
373
|
+
:returns dict: an array of `liquidation structures <https://github.com/ccxt/ccxt/wiki/Manual#liquidation-structure>`
|
374
|
+
"""
|
375
|
+
return self.watch_liquidations_for_symbols([symbol], since, limit, params)
|
376
|
+
|
377
|
+
async def watch_liquidations_for_symbols(self, symbols: List[str] = None, since: Int = None, limit: Int = None, params={}) -> List[Liquidation]:
|
378
|
+
"""
|
379
|
+
watch the public liquidations of a trading pair
|
380
|
+
|
381
|
+
https://www.bitmex.com/app/wsAPI#Liquidation
|
382
|
+
|
383
|
+
:param str[] symbols:
|
384
|
+
:param int [since]: the earliest time in ms to fetch liquidations for
|
385
|
+
:param int [limit]: the maximum number of liquidation structures to retrieve
|
386
|
+
:param dict [params]: exchange specific parameters for the bitmex api endpoint
|
387
|
+
:returns dict: an array of `liquidation structures <https://github.com/ccxt/ccxt/wiki/Manual#liquidation-structure>`
|
388
|
+
"""
|
389
|
+
await self.load_markets()
|
390
|
+
symbols = self.market_symbols(symbols, None, True, True)
|
391
|
+
messageHashes = []
|
392
|
+
subscriptionHashes = []
|
393
|
+
if self.is_empty(symbols):
|
394
|
+
subscriptionHashes.append('liquidation')
|
395
|
+
messageHashes.append('liquidations')
|
396
|
+
else:
|
397
|
+
for i in range(0, len(symbols)):
|
398
|
+
symbol = symbols[i]
|
399
|
+
market = self.market(symbol)
|
400
|
+
subscriptionHashes.append('liquidation:' + market['id'])
|
401
|
+
messageHashes.append('liquidations::' + symbol)
|
402
|
+
url = self.urls['api']['ws']
|
403
|
+
request = {
|
404
|
+
'op': 'subscribe',
|
405
|
+
'args': subscriptionHashes,
|
406
|
+
}
|
407
|
+
newLiquidations = await self.watch_multiple(url, messageHashes, self.deep_extend(request, params), subscriptionHashes)
|
408
|
+
if self.newUpdates:
|
409
|
+
return newLiquidations
|
410
|
+
return self.filter_by_symbols_since_limit(self.liquidations, symbols, since, limit, True)
|
411
|
+
|
412
|
+
def handle_liquidation(self, client: Client, message):
|
413
|
+
#
|
414
|
+
# {
|
415
|
+
# "table":"liquidation",
|
416
|
+
# "action":"partial",
|
417
|
+
# "keys":[
|
418
|
+
# "orderID"
|
419
|
+
# ],
|
420
|
+
# "types":{
|
421
|
+
# "orderID":"guid",
|
422
|
+
# "symbol":"symbol",
|
423
|
+
# "side":"symbol",
|
424
|
+
# "price":"float",
|
425
|
+
# "leavesQty":"long"
|
426
|
+
# },
|
427
|
+
# "filter":{},
|
428
|
+
# "data":[
|
429
|
+
# {
|
430
|
+
# "orderID":"e0a568ee-7830-4428-92c3-73e82b9576ce",
|
431
|
+
# "symbol":"XPLAUSDT",
|
432
|
+
# "side":"Sell",
|
433
|
+
# "price":0.206,
|
434
|
+
# "leavesQty":340
|
435
|
+
# }
|
436
|
+
# ]
|
437
|
+
# }
|
438
|
+
#
|
439
|
+
rawLiquidations = self.safe_value(message, 'data', [])
|
440
|
+
newLiquidations = []
|
441
|
+
for i in range(0, len(rawLiquidations)):
|
442
|
+
rawLiquidation = rawLiquidations[i]
|
443
|
+
liquidation = self.parse_liquidation(rawLiquidation)
|
444
|
+
symbol = liquidation['symbol']
|
445
|
+
liquidations = self.safe_value(self.liquidations, symbol)
|
446
|
+
if liquidations is None:
|
447
|
+
limit = self.safe_integer(self.options, 'liquidationsLimit', 1000)
|
448
|
+
liquidations = ArrayCache(limit)
|
449
|
+
liquidations.append(liquidation)
|
450
|
+
self.liquidations[symbol] = liquidations
|
451
|
+
newLiquidations.append(liquidation)
|
452
|
+
client.resolve(newLiquidations, 'liquidations')
|
453
|
+
liquidationsBySymbol = self.index_by(newLiquidations, 'symbol')
|
454
|
+
symbols = list(liquidationsBySymbol.keys())
|
455
|
+
for i in range(0, len(symbols)):
|
456
|
+
symbol = symbols[i]
|
457
|
+
client.resolve(liquidationsBySymbol[symbol], 'liquidations::' + symbol)
|
458
|
+
|
353
459
|
async def watch_balance(self, params={}) -> Balances:
|
354
460
|
"""
|
355
461
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
462
|
+
|
463
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
464
|
+
|
356
465
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
357
466
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
358
467
|
"""
|
@@ -360,7 +469,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
360
469
|
await self.authenticate()
|
361
470
|
messageHash = 'margin'
|
362
471
|
url = self.urls['api']['ws']
|
363
|
-
request = {
|
472
|
+
request: dict = {
|
364
473
|
'op': 'subscribe',
|
365
474
|
'args': [
|
366
475
|
messageHash,
|
@@ -540,8 +649,8 @@ class bitmex(ccxt.async_support.bitmex):
|
|
540
649
|
for i in range(0, len(marketIds)):
|
541
650
|
marketId = marketIds[i]
|
542
651
|
market = self.safe_market(marketId)
|
543
|
-
messageHash = table + ':' + marketId
|
544
652
|
symbol = market['symbol']
|
653
|
+
messageHash = table + ':' + symbol
|
545
654
|
trades = self.parse_trades(dataByMarketIds[marketId], market)
|
546
655
|
stored = self.safe_value(self.trades, symbol)
|
547
656
|
if stored is None:
|
@@ -555,28 +664,16 @@ class bitmex(ccxt.async_support.bitmex):
|
|
555
664
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
556
665
|
"""
|
557
666
|
get the list of most recent trades for a particular symbol
|
667
|
+
|
668
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
669
|
+
|
558
670
|
:param str symbol: unified symbol of the market to fetch trades for
|
559
671
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
560
672
|
:param int [limit]: the maximum amount of trades to fetch
|
561
673
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
562
674
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
563
675
|
"""
|
564
|
-
await self.
|
565
|
-
market = self.market(symbol)
|
566
|
-
symbol = market['symbol']
|
567
|
-
table = 'trade'
|
568
|
-
messageHash = table + ':' + market['id']
|
569
|
-
url = self.urls['api']['ws']
|
570
|
-
request = {
|
571
|
-
'op': 'subscribe',
|
572
|
-
'args': [
|
573
|
-
messageHash,
|
574
|
-
],
|
575
|
-
}
|
576
|
-
trades = await self.watch(url, messageHash, self.extend(request, params), messageHash)
|
577
|
-
if self.newUpdates:
|
578
|
-
limit = trades.getLimit(symbol, limit)
|
579
|
-
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
676
|
+
return await self.watch_trades_for_symbols([symbol], since, limit, params)
|
580
677
|
|
581
678
|
async def authenticate(self, params={}):
|
582
679
|
url = self.urls['api']['ws']
|
@@ -589,7 +686,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
589
686
|
timestamp = self.milliseconds()
|
590
687
|
payload = 'GET' + '/realtime' + str(timestamp)
|
591
688
|
signature = self.hmac(self.encode(payload), self.encode(self.secret), hashlib.sha256)
|
592
|
-
request = {
|
689
|
+
request: dict = {
|
593
690
|
'op': 'authKeyExpires',
|
594
691
|
'args': [
|
595
692
|
self.apiKey,
|
@@ -599,7 +696,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
599
696
|
}
|
600
697
|
message = self.extend(request, params)
|
601
698
|
self.watch(url, messageHash, message, messageHash)
|
602
|
-
return future
|
699
|
+
return await future
|
603
700
|
|
604
701
|
def handle_authentication_message(self, client: Client, message):
|
605
702
|
authenticated = self.safe_bool(message, 'success', False)
|
@@ -616,9 +713,13 @@ class bitmex(ccxt.async_support.bitmex):
|
|
616
713
|
|
617
714
|
async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
|
618
715
|
"""
|
619
|
-
:see: https://www.bitmex.com/app/wsAPI
|
620
716
|
watch all open positions
|
717
|
+
|
718
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
719
|
+
|
621
720
|
:param str[]|None symbols: list of unified market symbols
|
721
|
+
:param int [since]: the earliest time in ms to watch positions for
|
722
|
+
:param int [limit]: the maximum number of positions to retrieve
|
622
723
|
:param dict params: extra parameters specific to the exchange API endpoint
|
623
724
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
|
624
725
|
"""
|
@@ -629,7 +730,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
629
730
|
if not self.is_empty(symbols):
|
630
731
|
messageHash = '::' + ','.join(symbols)
|
631
732
|
url = self.urls['api']['ws']
|
632
|
-
request = {
|
733
|
+
request: dict = {
|
633
734
|
'op': 'subscribe',
|
634
735
|
'args': [
|
635
736
|
subscriptionHash,
|
@@ -813,6 +914,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
813
914
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
814
915
|
"""
|
815
916
|
watches information on multiple orders made by the user
|
917
|
+
|
918
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
919
|
+
|
816
920
|
:param str symbol: unified market symbol of the market orders were made in
|
817
921
|
:param int [since]: the earliest time in ms to fetch orders for
|
818
922
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -828,7 +932,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
828
932
|
symbol = self.symbol(symbol)
|
829
933
|
messageHash += ':' + symbol
|
830
934
|
url = self.urls['api']['ws']
|
831
|
-
request = {
|
935
|
+
request: dict = {
|
832
936
|
'op': 'subscribe',
|
833
937
|
'args': [
|
834
938
|
subscriptionHash,
|
@@ -998,7 +1102,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
998
1102
|
limit = self.safe_integer(self.options, 'ordersLimit', 1000)
|
999
1103
|
self.orders = ArrayCacheBySymbolById(limit)
|
1000
1104
|
stored = self.orders
|
1001
|
-
symbols = {}
|
1105
|
+
symbols: dict = {}
|
1002
1106
|
for i in range(0, dataLength):
|
1003
1107
|
currentOrder = data[i]
|
1004
1108
|
orderId = self.safe_string(currentOrder, 'orderID')
|
@@ -1019,11 +1123,14 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1019
1123
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1020
1124
|
"""
|
1021
1125
|
watches information on multiple trades made by the user
|
1126
|
+
|
1127
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
1128
|
+
|
1022
1129
|
:param str symbol: unified market symbol of the market trades were made in
|
1023
1130
|
:param int [since]: the earliest time in ms to fetch trades for
|
1024
1131
|
:param int [limit]: the maximum number of trade structures to retrieve
|
1025
1132
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1026
|
-
:returns dict[]: a list of
|
1133
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1027
1134
|
"""
|
1028
1135
|
await self.load_markets()
|
1029
1136
|
await self.authenticate()
|
@@ -1034,7 +1141,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1034
1141
|
symbol = self.symbol(symbol)
|
1035
1142
|
messageHash += ':' + symbol
|
1036
1143
|
url = self.urls['api']['ws']
|
1037
|
-
request = {
|
1144
|
+
request: dict = {
|
1038
1145
|
'op': 'subscribe',
|
1039
1146
|
'args': [
|
1040
1147
|
subscriptionHash,
|
@@ -1112,7 +1219,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1112
1219
|
limit = self.safe_integer(self.options, 'tradesLimit', 1000)
|
1113
1220
|
self.myTrades = ArrayCacheBySymbolById(limit)
|
1114
1221
|
stored = self.myTrades
|
1115
|
-
symbols = {}
|
1222
|
+
symbols: dict = {}
|
1116
1223
|
for j in range(0, len(trades)):
|
1117
1224
|
trade = trades[j]
|
1118
1225
|
symbol = trade['symbol']
|
@@ -1128,6 +1235,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1128
1235
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
1129
1236
|
"""
|
1130
1237
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
1238
|
+
|
1239
|
+
https://www.bitmex.com/app/wsAPI#OrderBookL2
|
1240
|
+
|
1131
1241
|
:param str symbol: unified symbol of the market to fetch the order book for
|
1132
1242
|
:param int [limit]: the maximum amount of order book entries to return
|
1133
1243
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1138,6 +1248,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1138
1248
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
1139
1249
|
"""
|
1140
1250
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
1251
|
+
|
1252
|
+
https://www.bitmex.com/app/wsAPI#OrderBookL2
|
1253
|
+
|
1141
1254
|
:param str[] symbols: unified array of symbols
|
1142
1255
|
:param int [limit]: the maximum amount of order book entries to return
|
1143
1256
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1164,16 +1277,55 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1164
1277
|
messageHash = table + ':' + symbol
|
1165
1278
|
messageHashes.append(messageHash)
|
1166
1279
|
url = self.urls['api']['ws']
|
1167
|
-
request = {
|
1280
|
+
request: dict = {
|
1168
1281
|
'op': 'subscribe',
|
1169
1282
|
'args': topics,
|
1170
1283
|
}
|
1171
1284
|
orderbook = await self.watch_multiple(url, messageHashes, self.deep_extend(request, params), topics)
|
1172
1285
|
return orderbook.limit()
|
1173
1286
|
|
1287
|
+
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1288
|
+
"""
|
1289
|
+
get the list of most recent trades for a list of symbols
|
1290
|
+
|
1291
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
1292
|
+
|
1293
|
+
:param str[] symbols: unified symbol of the market to fetch trades for
|
1294
|
+
:param int [since]: timestamp in ms of the earliest trade to fetch
|
1295
|
+
:param int [limit]: the maximum amount of trades to fetch
|
1296
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1297
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
1298
|
+
"""
|
1299
|
+
await self.load_markets()
|
1300
|
+
symbols = self.market_symbols(symbols, None, False)
|
1301
|
+
table = 'trade'
|
1302
|
+
topics = []
|
1303
|
+
messageHashes = []
|
1304
|
+
for i in range(0, len(symbols)):
|
1305
|
+
symbol = symbols[i]
|
1306
|
+
market = self.market(symbol)
|
1307
|
+
topic = table + ':' + market['id']
|
1308
|
+
topics.append(topic)
|
1309
|
+
messageHash = table + ':' + symbol
|
1310
|
+
messageHashes.append(messageHash)
|
1311
|
+
url = self.urls['api']['ws']
|
1312
|
+
request: dict = {
|
1313
|
+
'op': 'subscribe',
|
1314
|
+
'args': topics,
|
1315
|
+
}
|
1316
|
+
trades = await self.watch_multiple(url, messageHashes, self.deep_extend(request, params), topics)
|
1317
|
+
if self.newUpdates:
|
1318
|
+
first = self.safe_value(trades, 0)
|
1319
|
+
tradeSymbol = self.safe_string(first, 'symbol')
|
1320
|
+
limit = trades.getLimit(tradeSymbol, limit)
|
1321
|
+
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
1322
|
+
|
1174
1323
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1175
1324
|
"""
|
1176
1325
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1326
|
+
|
1327
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
1328
|
+
|
1177
1329
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1178
1330
|
:param str timeframe: the length of time each candle represents
|
1179
1331
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -1187,7 +1339,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1187
1339
|
table = 'tradeBin' + self.safe_string(self.timeframes, timeframe, timeframe)
|
1188
1340
|
messageHash = table + ':' + market['id']
|
1189
1341
|
url = self.urls['api']['ws']
|
1190
|
-
request = {
|
1342
|
+
request: dict = {
|
1191
1343
|
'op': 'subscribe',
|
1192
1344
|
'args': [
|
1193
1345
|
messageHash,
|
@@ -1269,7 +1421,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1269
1421
|
timeframe = self.find_timeframe(interval)
|
1270
1422
|
duration = self.parse_timeframe(timeframe)
|
1271
1423
|
candles = self.safe_value(message, 'data', [])
|
1272
|
-
results = {}
|
1424
|
+
results: dict = {}
|
1273
1425
|
for i in range(0, len(candles)):
|
1274
1426
|
candle = candles[i]
|
1275
1427
|
marketId = self.safe_string(candle, 'symbol')
|
@@ -1355,11 +1507,15 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1355
1507
|
#
|
1356
1508
|
action = self.safe_string(message, 'action')
|
1357
1509
|
table = self.safe_string(message, 'table')
|
1510
|
+
if table is None:
|
1511
|
+
return # protecting from weird updates
|
1358
1512
|
data = self.safe_value(message, 'data', [])
|
1359
1513
|
# if it's an initial snapshot
|
1360
1514
|
if action == 'partial':
|
1361
|
-
filter = self.
|
1515
|
+
filter = self.safe_dict(message, 'filter', {})
|
1362
1516
|
marketId = self.safe_value(filter, 'symbol')
|
1517
|
+
if marketId is None:
|
1518
|
+
return # protecting from weird update
|
1363
1519
|
market = self.safe_market(marketId)
|
1364
1520
|
symbol = market['symbol']
|
1365
1521
|
if table == 'orderBookL2':
|
@@ -1377,16 +1533,18 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1377
1533
|
side = self.safe_string(data[i], 'side')
|
1378
1534
|
side = 'bids' if (side == 'Buy') else 'asks'
|
1379
1535
|
bookside = orderbook[side]
|
1380
|
-
bookside.
|
1536
|
+
bookside.storeArray([price, size, id])
|
1381
1537
|
datetime = self.safe_string(data[i], 'timestamp')
|
1382
1538
|
orderbook['timestamp'] = self.parse8601(datetime)
|
1383
1539
|
orderbook['datetime'] = datetime
|
1384
1540
|
messageHash = table + ':' + symbol
|
1385
1541
|
client.resolve(orderbook, messageHash)
|
1386
1542
|
else:
|
1387
|
-
numUpdatesByMarketId = {}
|
1543
|
+
numUpdatesByMarketId: dict = {}
|
1388
1544
|
for i in range(0, len(data)):
|
1389
1545
|
marketId = self.safe_value(data[i], 'symbol')
|
1546
|
+
if marketId is None:
|
1547
|
+
return # protecting from weird update
|
1390
1548
|
if not (marketId in numUpdatesByMarketId):
|
1391
1549
|
numUpdatesByMarketId[marketId] = 0
|
1392
1550
|
numUpdatesByMarketId[marketId] = self.sum(numUpdatesByMarketId, 1)
|
@@ -1399,7 +1557,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1399
1557
|
side = self.safe_string(data[i], 'side')
|
1400
1558
|
side = 'bids' if (side == 'Buy') else 'asks'
|
1401
1559
|
bookside = orderbook[side]
|
1402
|
-
bookside.
|
1560
|
+
bookside.storeArray([price, size, id])
|
1403
1561
|
datetime = self.safe_string(data[i], 'timestamp')
|
1404
1562
|
orderbook['timestamp'] = self.parse8601(datetime)
|
1405
1563
|
orderbook['datetime'] = datetime
|
@@ -1510,7 +1668,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1510
1668
|
#
|
1511
1669
|
if self.handle_error_message(client, message):
|
1512
1670
|
table = self.safe_string(message, 'table')
|
1513
|
-
methods = {
|
1671
|
+
methods: dict = {
|
1514
1672
|
'orderBookL2': self.handle_order_book,
|
1515
1673
|
'orderBookL2_25': self.handle_order_book,
|
1516
1674
|
'orderBook10': self.handle_order_book,
|
@@ -1523,6 +1681,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
1523
1681
|
'order': self.handle_orders,
|
1524
1682
|
'execution': self.handle_my_trades,
|
1525
1683
|
'margin': self.handle_balance,
|
1684
|
+
'liquidation': self.handle_liquidation,
|
1526
1685
|
'position': self.handle_positions,
|
1527
1686
|
}
|
1528
1687
|
method = self.safe_value(methods, table)
|
ccxt/pro/bitopro.py
CHANGED
@@ -26,6 +26,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
26
26
|
'watchTicker': True,
|
27
27
|
'watchTickers': False,
|
28
28
|
'watchTrades': True,
|
29
|
+
'watchTradesForSymbols': False,
|
29
30
|
},
|
30
31
|
'urls': {
|
31
32
|
'ws': {
|
@@ -57,7 +58,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
57
58
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
58
59
|
"""
|
59
60
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
60
|
-
|
61
|
+
|
62
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/order_book_stream.md
|
63
|
+
|
61
64
|
:param str symbol: unified symbol of the market to fetch the order book for
|
62
65
|
:param int [limit]: the maximum amount of order book entries to return
|
63
66
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -74,7 +77,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
74
77
|
if limit is None:
|
75
78
|
endPart = market['id']
|
76
79
|
else:
|
77
|
-
endPart = market['id'] + ':' + limit
|
80
|
+
endPart = market['id'] + ':' + self.number_to_string(limit)
|
78
81
|
orderbook = await self.watch_public('order-books', messageHash, endPart)
|
79
82
|
return orderbook.limit()
|
80
83
|
|
@@ -116,7 +119,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
116
119
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
117
120
|
"""
|
118
121
|
get the list of most recent trades for a particular symbol
|
119
|
-
|
122
|
+
|
123
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/trade_stream.md
|
124
|
+
|
120
125
|
:param str symbol: unified symbol of the market to fetch trades for
|
121
126
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
122
127
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -171,12 +176,14 @@ class bitopro(ccxt.async_support.bitopro):
|
|
171
176
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
172
177
|
"""
|
173
178
|
watches information on multiple trades made by the user
|
174
|
-
|
179
|
+
|
180
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/private/matches_stream.md
|
181
|
+
|
175
182
|
:param str symbol: unified market symbol of the market trades were made in
|
176
183
|
:param int [since]: the earliest time in ms to fetch trades for
|
177
184
|
:param int [limit]: the maximum number of trade structures to retrieve
|
178
185
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
179
|
-
:returns dict[]: a list of
|
186
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
180
187
|
"""
|
181
188
|
self.check_required_credentials()
|
182
189
|
await self.load_markets()
|
@@ -231,7 +238,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
231
238
|
client.resolve(trades, messageHash)
|
232
239
|
client.resolve(trades, messageHash + ':' + symbol)
|
233
240
|
|
234
|
-
def parse_ws_trade(self, trade, market: Market = None) -> Trade:
|
241
|
+
def parse_ws_trade(self, trade: dict, market: Market = None) -> Trade:
|
235
242
|
#
|
236
243
|
# {
|
237
244
|
# "base": "usdt",
|
@@ -303,7 +310,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
303
310
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
304
311
|
"""
|
305
312
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
306
|
-
|
313
|
+
|
314
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/ticker_stream.md
|
315
|
+
|
307
316
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
308
317
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
309
318
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -357,16 +366,17 @@ class bitopro(ccxt.async_support.bitopro):
|
|
357
366
|
})
|
358
367
|
payload = self.string_to_base64(rawData)
|
359
368
|
signature = self.hmac(self.encode(payload), self.encode(self.secret), hashlib.sha384)
|
360
|
-
defaultOptions = {
|
369
|
+
defaultOptions: dict = {
|
361
370
|
'ws': {
|
362
371
|
'options': {
|
363
372
|
'headers': {},
|
364
373
|
},
|
365
374
|
},
|
366
375
|
}
|
367
|
-
self.options = self.extend(defaultOptions, self.options)
|
376
|
+
# self.options = self.extend(defaultOptions, self.options)
|
377
|
+
self.extend_exchange_options(defaultOptions)
|
368
378
|
originalHeaders = self.options['ws']['options']['headers']
|
369
|
-
headers = {
|
379
|
+
headers: dict = {
|
370
380
|
'X-BITOPRO-API': 'ccxt',
|
371
381
|
'X-BITOPRO-APIKEY': self.apiKey,
|
372
382
|
'X-BITOPRO-PAYLOAD': payload,
|
@@ -380,7 +390,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
380
390
|
async def watch_balance(self, params={}) -> Balances:
|
381
391
|
"""
|
382
392
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
383
|
-
|
393
|
+
|
394
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/private/user_balance_stream.md
|
395
|
+
|
384
396
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
385
397
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
386
398
|
"""
|
@@ -413,7 +425,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
413
425
|
timestamp = self.safe_integer(message, 'timestamp')
|
414
426
|
datetime = self.safe_string(message, 'datetime')
|
415
427
|
currencies = list(data.keys())
|
416
|
-
result = {
|
428
|
+
result: dict = {
|
417
429
|
'info': data,
|
418
430
|
'timestamp': timestamp,
|
419
431
|
'datetime': datetime,
|
@@ -431,7 +443,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
431
443
|
client.resolve(self.balance, event)
|
432
444
|
|
433
445
|
def handle_message(self, client: Client, message):
|
434
|
-
methods = {
|
446
|
+
methods: dict = {
|
435
447
|
'TRADE': self.handle_trade,
|
436
448
|
'TICKER': self.handle_ticker,
|
437
449
|
'ORDER_BOOK': self.handle_order_book,
|