ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__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 +24 -0
- ccxt/abstract/kucoinfutures.py +34 -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 +3030 -1087
- 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 +3205 -937
- 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 +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- 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 +392 -148
- 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 +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- 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 +223 -97
- 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 +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -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 +1137 -296
- 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 +1722 -480
- 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 +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- 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 +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- 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 +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- 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 +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -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 +62 -14
- 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 +143 -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 +203 -81
- 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 +965 -665
- 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 +167 -31
- ccxt/pro/exmo.py +252 -20
- 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 +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- 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 +437 -65
- 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} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- 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 +1137 -296
- 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.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.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.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/bitmex.py
CHANGED
@@ -6,9 +6,10 @@
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.bitmex import ImplicitAPI
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Currency, Int, Leverage, Leverages, Market, MarketType, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
9
|
+
from ccxt.base.types import Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Leverage, Leverages, Market, MarketType, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, Transaction
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadRequest
|
@@ -18,7 +19,6 @@ from ccxt.base.errors import InvalidOrder
|
|
18
19
|
from ccxt.base.errors import OrderNotFound
|
19
20
|
from ccxt.base.errors import DDoSProtection
|
20
21
|
from ccxt.base.errors import ExchangeNotAvailable
|
21
|
-
from ccxt.base.errors import AuthenticationError
|
22
22
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
23
23
|
from ccxt.base.precise import Precise
|
24
24
|
|
@@ -48,13 +48,16 @@ class bitmex(Exchange, ImplicitAPI):
|
|
48
48
|
'option': False,
|
49
49
|
'addMargin': None,
|
50
50
|
'cancelAllOrders': True,
|
51
|
+
'cancelAllOrdersAfter': True,
|
51
52
|
'cancelOrder': True,
|
52
53
|
'cancelOrders': True,
|
53
54
|
'closeAllPositions': False,
|
54
55
|
'closePosition': True,
|
55
56
|
'createOrder': True,
|
56
57
|
'createReduceOnlyOrder': True,
|
58
|
+
'createStopOrder': True,
|
57
59
|
'createTrailingAmountOrder': True,
|
60
|
+
'createTriggerOrder': True,
|
58
61
|
'editOrder': True,
|
59
62
|
'fetchBalance': True,
|
60
63
|
'fetchClosedOrders': True,
|
@@ -66,7 +69,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
66
69
|
'fetchDepositWithdrawFee': 'emulated',
|
67
70
|
'fetchDepositWithdrawFees': True,
|
68
71
|
'fetchFundingHistory': False,
|
69
|
-
'fetchFundingRate':
|
72
|
+
'fetchFundingRate': 'emulated', # emulated in exchange
|
70
73
|
'fetchFundingRateHistory': True,
|
71
74
|
'fetchFundingRates': True,
|
72
75
|
'fetchIndexOHLCV': False,
|
@@ -75,6 +78,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
75
78
|
'fetchLeverages': True,
|
76
79
|
'fetchLeverageTiers': False,
|
77
80
|
'fetchLiquidations': True,
|
81
|
+
'fetchMarginAdjustmentHistory': False,
|
78
82
|
'fetchMarketLeverageTiers': False,
|
79
83
|
'fetchMarkets': True,
|
80
84
|
'fetchMarkOHLCV': False,
|
@@ -86,7 +90,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
86
90
|
'fetchOrderBook': True,
|
87
91
|
'fetchOrders': True,
|
88
92
|
'fetchPosition': False,
|
93
|
+
'fetchPositionHistory': False,
|
89
94
|
'fetchPositions': True,
|
95
|
+
'fetchPositionsHistory': False,
|
90
96
|
'fetchPositionsRisk': False,
|
91
97
|
'fetchPremiumIndexOHLCV': False,
|
92
98
|
'fetchTicker': True,
|
@@ -96,6 +102,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
96
102
|
'fetchTransfer': False,
|
97
103
|
'fetchTransfers': False,
|
98
104
|
'reduceMargin': None,
|
105
|
+
'sandbox': True,
|
99
106
|
'setLeverage': True,
|
100
107
|
'setMargin': None,
|
101
108
|
'setMarginMode': True,
|
@@ -114,7 +121,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
114
121
|
'public': 'https://testnet.bitmex.com',
|
115
122
|
'private': 'https://testnet.bitmex.com',
|
116
123
|
},
|
117
|
-
'logo': 'https://github.com/
|
124
|
+
'logo': 'https://github.com/user-attachments/assets/c78425ab-78d5-49d6-bd14-db7734798f04',
|
118
125
|
'api': {
|
119
126
|
'public': 'https://www.bitmex.com',
|
120
127
|
'private': 'https://www.bitmex.com',
|
@@ -248,6 +255,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
248
255
|
'orderQty is invalid': InvalidOrder,
|
249
256
|
'Invalid price': InvalidOrder,
|
250
257
|
'Invalid stopPx for ordType': InvalidOrder,
|
258
|
+
'Account is restricted': PermissionDenied, # {"error":{"message":"Account is restricted","name":"HTTPError"}}
|
251
259
|
},
|
252
260
|
'broad': {
|
253
261
|
'Signature not valid': AuthenticationError,
|
@@ -278,6 +286,108 @@ class bitmex(Exchange, ImplicitAPI):
|
|
278
286
|
'SOL': 'sol',
|
279
287
|
'ADA': 'ada',
|
280
288
|
},
|
289
|
+
'features': {
|
290
|
+
'default': {
|
291
|
+
'sandbox': True,
|
292
|
+
'createOrder': {
|
293
|
+
'marginMode': True,
|
294
|
+
'triggerPrice': True,
|
295
|
+
'triggerPriceType': {
|
296
|
+
'last': True,
|
297
|
+
'mark': True,
|
298
|
+
},
|
299
|
+
'triggerDirection': True,
|
300
|
+
'stopLossPrice': False,
|
301
|
+
'takeProfitPrice': False,
|
302
|
+
'attachedStopLossTakeProfit': None,
|
303
|
+
'timeInForce': {
|
304
|
+
'IOC': True,
|
305
|
+
'FOK': True,
|
306
|
+
'PO': True,
|
307
|
+
'GTD': False,
|
308
|
+
},
|
309
|
+
'hedged': False,
|
310
|
+
'trailing': True,
|
311
|
+
'marketBuyRequiresPrice': False,
|
312
|
+
'marketBuyByCost': False,
|
313
|
+
# exchange-supported features
|
314
|
+
# 'selfTradePrevention': True,
|
315
|
+
# 'twap': False,
|
316
|
+
# 'iceberg': False,
|
317
|
+
# 'oco': False,
|
318
|
+
},
|
319
|
+
'createOrders': None,
|
320
|
+
'fetchMyTrades': {
|
321
|
+
'marginMode': False,
|
322
|
+
'limit': 500,
|
323
|
+
'daysBack': None,
|
324
|
+
'untilDays': 1000000,
|
325
|
+
},
|
326
|
+
'fetchOrder': {
|
327
|
+
'marginMode': False,
|
328
|
+
'trigger': False,
|
329
|
+
'trailing': False,
|
330
|
+
},
|
331
|
+
'fetchOpenOrders': {
|
332
|
+
'marginMode': False,
|
333
|
+
'limit': 500,
|
334
|
+
'trigger': False,
|
335
|
+
'trailing': False,
|
336
|
+
},
|
337
|
+
'fetchOrders': {
|
338
|
+
'marginMode': False,
|
339
|
+
'limit': 500,
|
340
|
+
'daysBack': None,
|
341
|
+
'untilDays': 1000000,
|
342
|
+
'trigger': False,
|
343
|
+
'trailing': False,
|
344
|
+
},
|
345
|
+
'fetchClosedOrders': {
|
346
|
+
'marginMode': False,
|
347
|
+
'limit': 500,
|
348
|
+
'daysBackClosed': None,
|
349
|
+
'daysBackCanceled': None,
|
350
|
+
'untilDays': 1000000,
|
351
|
+
'trigger': False,
|
352
|
+
'trailing': False,
|
353
|
+
},
|
354
|
+
'fetchOHLCV': {
|
355
|
+
'limit': 10000,
|
356
|
+
},
|
357
|
+
},
|
358
|
+
'spot': {
|
359
|
+
'extends': 'default',
|
360
|
+
'createOrder': {
|
361
|
+
'triggerPriceType': {
|
362
|
+
'index': False,
|
363
|
+
},
|
364
|
+
},
|
365
|
+
},
|
366
|
+
'forDeriv': {
|
367
|
+
'extends': 'default',
|
368
|
+
'createOrder': {
|
369
|
+
'triggerPriceType': {
|
370
|
+
'index': True,
|
371
|
+
},
|
372
|
+
},
|
373
|
+
},
|
374
|
+
'swap': {
|
375
|
+
'linear': {
|
376
|
+
'extends': 'forDeriv',
|
377
|
+
},
|
378
|
+
'inverse': {
|
379
|
+
'extends': 'forDeriv',
|
380
|
+
},
|
381
|
+
},
|
382
|
+
'future': {
|
383
|
+
'linear': {
|
384
|
+
'extends': 'forDeriv',
|
385
|
+
},
|
386
|
+
'inverse': {
|
387
|
+
'extends': 'forDeriv',
|
388
|
+
},
|
389
|
+
},
|
390
|
+
},
|
281
391
|
},
|
282
392
|
'commonCurrencies': {
|
283
393
|
'USDt': 'USDT',
|
@@ -290,10 +400,12 @@ class bitmex(Exchange, ImplicitAPI):
|
|
290
400
|
},
|
291
401
|
})
|
292
402
|
|
293
|
-
def fetch_currencies(self, params={}):
|
403
|
+
def fetch_currencies(self, params={}) -> Currencies:
|
294
404
|
"""
|
295
405
|
fetches all available currencies on an exchange
|
296
|
-
|
406
|
+
|
407
|
+
https://www.bitmex.com/api/explorer/#not /Wallet/Wallet_getAssetsConfig
|
408
|
+
|
297
409
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
298
410
|
:returns dict: an associative dictionary of currencies
|
299
411
|
"""
|
@@ -331,7 +443,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
331
443
|
# },
|
332
444
|
# }
|
333
445
|
#
|
334
|
-
result = {}
|
446
|
+
result: dict = {}
|
335
447
|
for i in range(0, len(response)):
|
336
448
|
currency = response[i]
|
337
449
|
asset = self.safe_string(currency, 'asset')
|
@@ -341,7 +453,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
341
453
|
chains = self.safe_value(currency, 'networks', [])
|
342
454
|
depositEnabled = False
|
343
455
|
withdrawEnabled = False
|
344
|
-
networks = {}
|
456
|
+
networks: dict = {}
|
345
457
|
scale = self.safe_string(currency, 'scale')
|
346
458
|
precisionString = self.parse_precision(scale)
|
347
459
|
precision = self.parse_number(precisionString)
|
@@ -453,10 +565,12 @@ class bitmex(Exchange, ImplicitAPI):
|
|
453
565
|
def convert_from_raw_cost(self, symbol, rawQuantity):
|
454
566
|
return self.convert_from_raw_quantity(symbol, rawQuantity, 'quote')
|
455
567
|
|
456
|
-
def fetch_markets(self, params={}):
|
568
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
457
569
|
"""
|
458
570
|
retrieves data on all markets for bitmex
|
459
|
-
|
571
|
+
|
572
|
+
https://www.bitmex.com/api/explorer/#not /Instrument/Instrument_getActive
|
573
|
+
|
460
574
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
461
575
|
:returns dict[]: an array of objects representing market data
|
462
576
|
"""
|
@@ -574,7 +688,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
574
688
|
#
|
575
689
|
return self.parse_markets(response)
|
576
690
|
|
577
|
-
def parse_market(self, market) -> Market:
|
691
|
+
def parse_market(self, market: dict) -> Market:
|
578
692
|
id = self.safe_string(market, 'symbol')
|
579
693
|
baseId = self.safe_string(market, 'underlying')
|
580
694
|
quoteId = self.safe_string(market, 'quoteCurrency')
|
@@ -738,7 +852,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
738
852
|
# }
|
739
853
|
# ]
|
740
854
|
#
|
741
|
-
result = {'info': response}
|
855
|
+
result: dict = {'info': response}
|
742
856
|
for i in range(0, len(response)):
|
743
857
|
balance = response[i]
|
744
858
|
currencyId = self.safe_string(balance, 'currency')
|
@@ -754,12 +868,14 @@ class bitmex(Exchange, ImplicitAPI):
|
|
754
868
|
def fetch_balance(self, params={}) -> Balances:
|
755
869
|
"""
|
756
870
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
757
|
-
|
871
|
+
|
872
|
+
https://www.bitmex.com/api/explorer/#not /User/User_getMargin
|
873
|
+
|
758
874
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
759
875
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
760
876
|
"""
|
761
877
|
self.load_markets()
|
762
|
-
request = {
|
878
|
+
request: dict = {
|
763
879
|
'currency': 'all',
|
764
880
|
}
|
765
881
|
response = self.privateGetUserMargin(self.extend(request, params))
|
@@ -815,7 +931,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
815
931
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
816
932
|
"""
|
817
933
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
818
|
-
|
934
|
+
|
935
|
+
https://www.bitmex.com/api/explorer/#not /OrderBook/OrderBook_getL2
|
936
|
+
|
819
937
|
:param str symbol: unified symbol of the market to fetch the order book for
|
820
938
|
:param int [limit]: the maximum amount of order book entries to return
|
821
939
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -823,13 +941,13 @@ class bitmex(Exchange, ImplicitAPI):
|
|
823
941
|
"""
|
824
942
|
self.load_markets()
|
825
943
|
market = self.market(symbol)
|
826
|
-
request = {
|
944
|
+
request: dict = {
|
827
945
|
'symbol': market['id'],
|
828
946
|
}
|
829
947
|
if limit is not None:
|
830
948
|
request['depth'] = limit
|
831
949
|
response = self.publicGetOrderBookL2(self.extend(request, params))
|
832
|
-
result = {
|
950
|
+
result: dict = {
|
833
951
|
'symbol': symbol,
|
834
952
|
'bids': [],
|
835
953
|
'asks': [],
|
@@ -854,12 +972,15 @@ class bitmex(Exchange, ImplicitAPI):
|
|
854
972
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
855
973
|
"""
|
856
974
|
fetches information on an order made by the user
|
857
|
-
|
975
|
+
|
976
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_getOrders
|
977
|
+
|
978
|
+
:param str id: the order id
|
858
979
|
:param str symbol: unified symbol of the market the order was made in
|
859
980
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
860
981
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
861
982
|
"""
|
862
|
-
filter = {
|
983
|
+
filter: dict = {
|
863
984
|
'filter': {
|
864
985
|
'orderID': id,
|
865
986
|
},
|
@@ -872,7 +993,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
872
993
|
|
873
994
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
874
995
|
"""
|
875
|
-
|
996
|
+
|
997
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_getOrders
|
998
|
+
|
876
999
|
fetches information on multiple orders made by the user
|
877
1000
|
:param str symbol: unified market symbol of the market orders were made in
|
878
1001
|
:param int [since]: the earliest time in ms to fetch orders for
|
@@ -888,7 +1011,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
888
1011
|
if paginate:
|
889
1012
|
return self.fetch_paginated_call_dynamic('fetchOrders', symbol, since, limit, params, 100)
|
890
1013
|
market = None
|
891
|
-
request = {}
|
1014
|
+
request: dict = {}
|
892
1015
|
if symbol is not None:
|
893
1016
|
market = self.market(symbol)
|
894
1017
|
request['symbol'] = market['id']
|
@@ -912,14 +1035,16 @@ class bitmex(Exchange, ImplicitAPI):
|
|
912
1035
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
913
1036
|
"""
|
914
1037
|
fetch all unfilled currently open orders
|
915
|
-
|
1038
|
+
|
1039
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_getOrders
|
1040
|
+
|
916
1041
|
:param str symbol: unified market symbol
|
917
1042
|
:param int [since]: the earliest time in ms to fetch open orders for
|
918
1043
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
919
1044
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
920
1045
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
921
1046
|
"""
|
922
|
-
request = {
|
1047
|
+
request: dict = {
|
923
1048
|
'filter': {
|
924
1049
|
'open': True,
|
925
1050
|
},
|
@@ -929,7 +1054,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
929
1054
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
930
1055
|
"""
|
931
1056
|
fetches information on multiple closed orders made by the user
|
932
|
-
|
1057
|
+
|
1058
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_getOrders
|
1059
|
+
|
933
1060
|
:param str symbol: unified market symbol of the market orders were made in
|
934
1061
|
:param int [since]: the earliest time in ms to fetch orders for
|
935
1062
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -943,7 +1070,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
943
1070
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
944
1071
|
"""
|
945
1072
|
fetch all trades made by the user
|
946
|
-
|
1073
|
+
|
1074
|
+
https://www.bitmex.com/api/explorer/#not /Execution/Execution_getTradeHistory
|
1075
|
+
|
947
1076
|
:param str symbol: unified market symbol
|
948
1077
|
:param int [since]: the earliest time in ms to fetch trades for
|
949
1078
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -957,14 +1086,14 @@ class bitmex(Exchange, ImplicitAPI):
|
|
957
1086
|
if paginate:
|
958
1087
|
return self.fetch_paginated_call_dynamic('fetchMyTrades', symbol, since, limit, params, 100)
|
959
1088
|
market = None
|
960
|
-
request = {}
|
1089
|
+
request: dict = {}
|
961
1090
|
if symbol is not None:
|
962
1091
|
market = self.market(symbol)
|
963
1092
|
request['symbol'] = market['id']
|
964
1093
|
if since is not None:
|
965
1094
|
request['startTime'] = self.iso8601(since)
|
966
1095
|
if limit is not None:
|
967
|
-
request['count'] = limit
|
1096
|
+
request['count'] = min(500, limit)
|
968
1097
|
until = self.safe_integer_2(params, 'until', 'endTime')
|
969
1098
|
if until is not None:
|
970
1099
|
params = self.omit(params, ['until'])
|
@@ -1032,7 +1161,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1032
1161
|
return self.parse_trades(response, market, since, limit)
|
1033
1162
|
|
1034
1163
|
def parse_ledger_entry_type(self, type):
|
1035
|
-
types = {
|
1164
|
+
types: dict = {
|
1036
1165
|
'Withdrawal': 'transaction',
|
1037
1166
|
'RealisedPNL': 'margin',
|
1038
1167
|
'UnrealisedPNL': 'margin',
|
@@ -1043,7 +1172,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1043
1172
|
}
|
1044
1173
|
return self.safe_string(types, type, type)
|
1045
1174
|
|
1046
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
1175
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
1047
1176
|
#
|
1048
1177
|
# {
|
1049
1178
|
# "transactID": "69573da3-7744-5467-3207-89fd6efe7a47",
|
@@ -1092,6 +1221,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1092
1221
|
type = self.parse_ledger_entry_type(self.safe_string(item, 'transactType'))
|
1093
1222
|
currencyId = self.safe_string(item, 'currency')
|
1094
1223
|
code = self.safe_currency_code(currencyId, currency)
|
1224
|
+
currency = self.safe_currency(currencyId, currency)
|
1095
1225
|
amountString = self.safe_string(item, 'amount')
|
1096
1226
|
amount = self.convert_to_real_amount(code, amountString)
|
1097
1227
|
timestamp = self.parse8601(self.safe_string(item, 'transactTime'))
|
@@ -1100,13 +1230,14 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1100
1230
|
# set the timestamp to zero, 1970 Jan 1 00:00:00
|
1101
1231
|
# for unrealized pnl and other transactions without a timestamp
|
1102
1232
|
timestamp = 0 # see comments above
|
1233
|
+
fee = None
|
1103
1234
|
feeCost = self.safe_string(item, 'fee')
|
1104
1235
|
if feeCost is not None:
|
1105
1236
|
feeCost = self.convert_to_real_amount(code, feeCost)
|
1106
|
-
|
1107
|
-
|
1108
|
-
|
1109
|
-
|
1237
|
+
fee = {
|
1238
|
+
'cost': self.parse_number(feeCost),
|
1239
|
+
'currency': code,
|
1240
|
+
}
|
1110
1241
|
after = self.safe_string(item, 'walletBalance')
|
1111
1242
|
if after is not None:
|
1112
1243
|
after = self.convert_to_real_amount(code, after)
|
@@ -1118,9 +1249,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1118
1249
|
else:
|
1119
1250
|
direction = 'in'
|
1120
1251
|
status = self.parse_transaction_status(self.safe_string(item, 'transactStatus'))
|
1121
|
-
return {
|
1122
|
-
'id': id,
|
1252
|
+
return self.safe_ledger_entry({
|
1123
1253
|
'info': item,
|
1254
|
+
'id': id,
|
1124
1255
|
'timestamp': timestamp,
|
1125
1256
|
'datetime': self.iso8601(timestamp),
|
1126
1257
|
'direction': direction,
|
@@ -1129,25 +1260,27 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1129
1260
|
'referenceAccount': referenceAccount,
|
1130
1261
|
'type': type,
|
1131
1262
|
'currency': code,
|
1132
|
-
'amount': amount,
|
1263
|
+
'amount': self.parse_number(amount),
|
1133
1264
|
'before': before,
|
1134
1265
|
'after': self.parse_number(after),
|
1135
1266
|
'status': status,
|
1136
1267
|
'fee': fee,
|
1137
|
-
}
|
1268
|
+
}, currency)
|
1138
1269
|
|
1139
|
-
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
1270
|
+
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
1140
1271
|
"""
|
1141
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
1142
|
-
|
1143
|
-
|
1272
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
1273
|
+
|
1274
|
+
https://www.bitmex.com/api/explorer/#not /User/User_getWalletHistory
|
1275
|
+
|
1276
|
+
:param str [code]: unified currency code, default is None
|
1144
1277
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
1145
|
-
:param int [limit]: max number of ledger
|
1278
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
1146
1279
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1147
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
1280
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
1148
1281
|
"""
|
1149
1282
|
self.load_markets()
|
1150
|
-
request = {
|
1283
|
+
request: dict = {
|
1151
1284
|
# 'start': 123,
|
1152
1285
|
}
|
1153
1286
|
#
|
@@ -1187,7 +1320,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1187
1320
|
def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1188
1321
|
"""
|
1189
1322
|
fetch history of deposits and withdrawals
|
1190
|
-
|
1323
|
+
|
1324
|
+
https://www.bitmex.com/api/explorer/#not /User/User_getWalletHistory
|
1325
|
+
|
1191
1326
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
1192
1327
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
1193
1328
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
@@ -1195,7 +1330,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1195
1330
|
:returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1196
1331
|
"""
|
1197
1332
|
self.load_markets()
|
1198
|
-
request = {
|
1333
|
+
request: dict = {
|
1199
1334
|
'currency': 'all',
|
1200
1335
|
# 'start': 123,
|
1201
1336
|
}
|
@@ -1214,8 +1349,8 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1214
1349
|
transactions = self.filter_by_array(response, 'transactType', ['Withdrawal', 'Deposit'], False)
|
1215
1350
|
return self.parse_transactions(transactions, currency, since, limit)
|
1216
1351
|
|
1217
|
-
def parse_transaction_status(self, status):
|
1218
|
-
statuses = {
|
1352
|
+
def parse_transaction_status(self, status: Str):
|
1353
|
+
statuses: dict = {
|
1219
1354
|
'Confirmed': 'pending',
|
1220
1355
|
'Canceled': 'canceled',
|
1221
1356
|
'Completed': 'ok',
|
@@ -1223,7 +1358,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1223
1358
|
}
|
1224
1359
|
return self.safe_string(statuses, status, status)
|
1225
1360
|
|
1226
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1361
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1227
1362
|
#
|
1228
1363
|
# {
|
1229
1364
|
# "transactID": "ffe699c2-95ee-4c13-91f9-0faf41daec25",
|
@@ -1299,14 +1434,16 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1299
1434
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
1300
1435
|
"""
|
1301
1436
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
1302
|
-
|
1437
|
+
|
1438
|
+
https://www.bitmex.com/api/explorer/#not /Instrument/Instrument_get
|
1439
|
+
|
1303
1440
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
1304
1441
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1305
1442
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
1306
1443
|
"""
|
1307
1444
|
self.load_markets()
|
1308
1445
|
market = self.market(symbol)
|
1309
|
-
request = {
|
1446
|
+
request: dict = {
|
1310
1447
|
'symbol': market['id'],
|
1311
1448
|
}
|
1312
1449
|
response = self.publicGetInstrument(self.extend(request, params))
|
@@ -1318,7 +1455,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1318
1455
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
1319
1456
|
"""
|
1320
1457
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
1321
|
-
|
1458
|
+
|
1459
|
+
https://www.bitmex.com/api/explorer/#not /Instrument/Instrument_getActiveAndIndices
|
1460
|
+
|
1322
1461
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
1323
1462
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1324
1463
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -1327,7 +1466,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1327
1466
|
symbols = self.market_symbols(symbols)
|
1328
1467
|
response = self.publicGetInstrumentActiveAndIndices(params)
|
1329
1468
|
# same response "fetchMarkets"
|
1330
|
-
result = {}
|
1469
|
+
result: dict = {}
|
1331
1470
|
for i in range(0, len(response)):
|
1332
1471
|
ticker = self.parse_ticker(response[i])
|
1333
1472
|
symbol = self.safe_string(ticker, 'symbol')
|
@@ -1335,7 +1474,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1335
1474
|
result[symbol] = ticker
|
1336
1475
|
return self.filter_by_array_tickers(result, 'symbol', symbols)
|
1337
1476
|
|
1338
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
1477
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
1339
1478
|
# see response sample under "fetchMarkets" because same endpoint is being used here
|
1340
1479
|
marketId = self.safe_string(ticker, 'symbol')
|
1341
1480
|
symbol = self.safe_symbol(marketId, market)
|
@@ -1362,6 +1501,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1362
1501
|
'average': None,
|
1363
1502
|
'baseVolume': self.safe_string(ticker, 'homeNotional24h'),
|
1364
1503
|
'quoteVolume': self.safe_string(ticker, 'foreignNotional24h'),
|
1504
|
+
'markPrice': self.safe_string(ticker, 'markPrice'),
|
1365
1505
|
'info': ticker,
|
1366
1506
|
}, market)
|
1367
1507
|
|
@@ -1398,7 +1538,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1398
1538
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1399
1539
|
"""
|
1400
1540
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1401
|
-
|
1541
|
+
|
1542
|
+
https://www.bitmex.com/api/explorer/#not /Trade/Trade_getBucketed
|
1543
|
+
|
1402
1544
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1403
1545
|
:param str timeframe: the length of time each candle represents
|
1404
1546
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -1414,12 +1556,12 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1414
1556
|
return self.fetch_paginated_call_deterministic('fetchOHLCV', symbol, since, limit, timeframe, params)
|
1415
1557
|
# send JSON key/value pairs, such as {"key": "value"}
|
1416
1558
|
# filter by individual fields and do advanced queries on timestamps
|
1417
|
-
# filter = {'key': 'value'}
|
1559
|
+
# filter: Dict = {'key': 'value'}
|
1418
1560
|
# send a bare series(e.g. XBU) to nearest expiring contract in that series
|
1419
1561
|
# you can also send a timeframe, e.g. XBU:monthly
|
1420
1562
|
# timeframes: daily, weekly, monthly, quarterly, and biquarterly
|
1421
1563
|
market = self.market(symbol)
|
1422
|
-
request = {
|
1564
|
+
request: dict = {
|
1423
1565
|
'symbol': market['id'],
|
1424
1566
|
'binSize': self.safe_string(self.timeframes, timeframe, timeframe),
|
1425
1567
|
'partial': True, # True == include yet-incomplete current bins
|
@@ -1431,7 +1573,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1431
1573
|
}
|
1432
1574
|
if limit is not None:
|
1433
1575
|
request['count'] = limit # default 100, max 500
|
1434
|
-
until = self.
|
1576
|
+
until = self.safe_integer(params, 'until')
|
1435
1577
|
if until is not None:
|
1436
1578
|
params = self.omit(params, ['until'])
|
1437
1579
|
request['endTime'] = self.iso8601(until)
|
@@ -1463,7 +1605,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1463
1605
|
result[i][0] = result[i][0] - duration
|
1464
1606
|
return result
|
1465
1607
|
|
1466
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
1608
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
1467
1609
|
#
|
1468
1610
|
# fetchTrades(public)
|
1469
1611
|
#
|
@@ -1573,8 +1715,8 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1573
1715
|
'fee': fee,
|
1574
1716
|
}, market)
|
1575
1717
|
|
1576
|
-
def parse_order_status(self, status):
|
1577
|
-
statuses = {
|
1718
|
+
def parse_order_status(self, status: Str):
|
1719
|
+
statuses: dict = {
|
1578
1720
|
'New': 'open',
|
1579
1721
|
'PartiallyFilled': 'open',
|
1580
1722
|
'Filled': 'closed',
|
@@ -1590,8 +1732,8 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1590
1732
|
}
|
1591
1733
|
return self.safe_string(statuses, status, status)
|
1592
1734
|
|
1593
|
-
def parse_time_in_force(self, timeInForce):
|
1594
|
-
timeInForces = {
|
1735
|
+
def parse_time_in_force(self, timeInForce: Str):
|
1736
|
+
timeInForces: dict = {
|
1595
1737
|
'Day': 'Day',
|
1596
1738
|
'GoodTillCancel': 'GTC',
|
1597
1739
|
'ImmediateOrCancel': 'IOC',
|
@@ -1599,7 +1741,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1599
1741
|
}
|
1600
1742
|
return self.safe_string(timeInForces, timeInForce, timeInForce)
|
1601
1743
|
|
1602
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1744
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1603
1745
|
#
|
1604
1746
|
# {
|
1605
1747
|
# "orderID":"56222c7a-9956-413a-82cf-99f4812c214b",
|
@@ -1665,7 +1807,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1665
1807
|
if execInst is not None:
|
1666
1808
|
postOnly = (execInst == 'ParticipateDoNotInitiate')
|
1667
1809
|
timestamp = self.parse8601(self.safe_string(order, 'timestamp'))
|
1668
|
-
|
1810
|
+
triggerPrice = self.safe_number(order, 'stopPx')
|
1669
1811
|
remaining = self.safe_string(order, 'leavesQty')
|
1670
1812
|
return self.safe_order({
|
1671
1813
|
'info': order,
|
@@ -1680,8 +1822,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1680
1822
|
'postOnly': postOnly,
|
1681
1823
|
'side': self.safe_string_lower(order, 'side'),
|
1682
1824
|
'price': self.safe_string(order, 'price'),
|
1683
|
-
'
|
1684
|
-
'triggerPrice': stopPrice,
|
1825
|
+
'triggerPrice': triggerPrice,
|
1685
1826
|
'amount': amount,
|
1686
1827
|
'cost': cost,
|
1687
1828
|
'average': average,
|
@@ -1695,7 +1836,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1695
1836
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1696
1837
|
"""
|
1697
1838
|
get the list of most recent trades for a particular symbol
|
1698
|
-
|
1839
|
+
|
1840
|
+
https://www.bitmex.com/api/explorer/#not /Trade/Trade_get
|
1841
|
+
|
1699
1842
|
:param str symbol: unified symbol of the market to fetch trades for
|
1700
1843
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
1701
1844
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -1709,7 +1852,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1709
1852
|
if paginate:
|
1710
1853
|
return self.fetch_paginated_call_dynamic('fetchTrades', symbol, since, limit, params)
|
1711
1854
|
market = self.market(symbol)
|
1712
|
-
request = {
|
1855
|
+
request: dict = {
|
1713
1856
|
'symbol': market['id'],
|
1714
1857
|
}
|
1715
1858
|
if since is not None:
|
@@ -1757,12 +1900,14 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1757
1900
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1758
1901
|
"""
|
1759
1902
|
create a trade order
|
1760
|
-
|
1903
|
+
|
1904
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_new
|
1905
|
+
|
1761
1906
|
:param str symbol: unified symbol of the market to create an order in
|
1762
1907
|
:param str type: 'market' or 'limit'
|
1763
1908
|
:param str side: 'buy' or 'sell'
|
1764
1909
|
:param float amount: how much of currency you want to trade in units of base currency
|
1765
|
-
:param float [price]: the price at which the order is to be
|
1910
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1766
1911
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1767
1912
|
:param dict [params.triggerPrice]: the price at which a trigger order is triggered at
|
1768
1913
|
:param dict [params.triggerDirection]: the direction whenever the trigger happens with relation to price - 'above' or 'below'
|
@@ -1778,7 +1923,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1778
1923
|
raise InvalidOrder(self.id + ' createOrder() does not support reduceOnly for ' + market['type'] + ' orders, reduceOnly orders are supported for swap and future markets only')
|
1779
1924
|
brokerId = self.safe_string(self.options, 'brokerId', 'CCXT')
|
1780
1925
|
qty = self.parse_to_int(self.amount_to_precision(symbol, amount))
|
1781
|
-
request = {
|
1926
|
+
request: dict = {
|
1782
1927
|
'symbol': market['id'],
|
1783
1928
|
'side': self.capitalize(side),
|
1784
1929
|
'orderQty': qty, # lot size multiplied by the number of contracts
|
@@ -1815,7 +1960,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1815
1960
|
else:
|
1816
1961
|
if triggerPrice is None:
|
1817
1962
|
# if exchange specific trigger types were provided
|
1818
|
-
raise ArgumentsRequired(self.id + ' createOrder() requires a triggerPrice
|
1963
|
+
raise ArgumentsRequired(self.id + ' createOrder() requires a triggerPrice parameter for the ' + orderType + ' order type')
|
1819
1964
|
request['stopPx'] = self.parse_to_numeric(self.price_to_precision(symbol, triggerPrice))
|
1820
1965
|
request['ordType'] = orderType
|
1821
1966
|
params = self.omit(params, ['triggerPrice', 'stopPrice', 'stopPx', 'triggerDirection', 'trailingAmount'])
|
@@ -1830,7 +1975,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1830
1975
|
|
1831
1976
|
def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
|
1832
1977
|
self.load_markets()
|
1833
|
-
request = {}
|
1978
|
+
request: dict = {}
|
1834
1979
|
trailingAmount = self.safe_string_2(params, 'trailingAmount', 'pegOffsetValue')
|
1835
1980
|
isTrailingAmountOrder = trailingAmount is not None
|
1836
1981
|
if isTrailingAmountOrder:
|
@@ -1877,7 +2022,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1877
2022
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1878
2023
|
"""
|
1879
2024
|
cancels an open order
|
1880
|
-
|
2025
|
+
|
2026
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_cancel
|
2027
|
+
|
1881
2028
|
:param str id: order id
|
1882
2029
|
:param str symbol: not used by bitmex cancelOrder()
|
1883
2030
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1886,7 +2033,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1886
2033
|
self.load_markets()
|
1887
2034
|
# https://github.com/ccxt/ccxt/issues/6507
|
1888
2035
|
clientOrderId = self.safe_value_2(params, 'clOrdID', 'clientOrderId')
|
1889
|
-
request = {}
|
2036
|
+
request: dict = {}
|
1890
2037
|
if clientOrderId is None:
|
1891
2038
|
request['orderID'] = id
|
1892
2039
|
else:
|
@@ -1903,7 +2050,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1903
2050
|
def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1904
2051
|
"""
|
1905
2052
|
cancel multiple orders
|
1906
|
-
|
2053
|
+
|
2054
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_cancel
|
2055
|
+
|
1907
2056
|
:param str[] ids: order ids
|
1908
2057
|
:param str symbol: not used by bitmex cancelOrders()
|
1909
2058
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1913,7 +2062,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1913
2062
|
self.load_markets()
|
1914
2063
|
# https://github.com/ccxt/ccxt/issues/6507
|
1915
2064
|
clientOrderId = self.safe_value_2(params, 'clOrdID', 'clientOrderId')
|
1916
|
-
request = {}
|
2065
|
+
request: dict = {}
|
1917
2066
|
if clientOrderId is None:
|
1918
2067
|
request['orderID'] = ids
|
1919
2068
|
else:
|
@@ -1925,13 +2074,15 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1925
2074
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
1926
2075
|
"""
|
1927
2076
|
cancel all open orders
|
1928
|
-
|
2077
|
+
|
2078
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_cancelAll
|
2079
|
+
|
1929
2080
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
1930
2081
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1931
2082
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1932
2083
|
"""
|
1933
2084
|
self.load_markets()
|
1934
|
-
request = {}
|
2085
|
+
request: dict = {}
|
1935
2086
|
market = None
|
1936
2087
|
if symbol is not None:
|
1937
2088
|
market = self.market(symbol)
|
@@ -1978,10 +2129,35 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1978
2129
|
#
|
1979
2130
|
return self.parse_orders(response, market)
|
1980
2131
|
|
1981
|
-
def
|
2132
|
+
def cancel_all_orders_after(self, timeout: Int, params={}):
|
2133
|
+
"""
|
2134
|
+
dead man's switch, cancel all orders after the given timeout
|
2135
|
+
|
2136
|
+
https://www.bitmex.com/api/explorer/#not /Order/Order_cancelAllAfter
|
2137
|
+
|
2138
|
+
:param number timeout: time in milliseconds, 0 represents cancel the timer
|
2139
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2140
|
+
:returns dict: the api result
|
2141
|
+
"""
|
2142
|
+
self.load_markets()
|
2143
|
+
request: dict = {
|
2144
|
+
'timeout': self.parse_to_int(timeout / 1000) if (timeout > 0) else 0,
|
2145
|
+
}
|
2146
|
+
response = self.privatePostOrderCancelAllAfter(self.extend(request, params))
|
2147
|
+
#
|
2148
|
+
# {
|
2149
|
+
# now: '2024-04-09T09:01:56.560Z',
|
2150
|
+
# cancelTime: '2024-04-09T09:01:56.660Z'
|
2151
|
+
# }
|
2152
|
+
#
|
2153
|
+
return response
|
2154
|
+
|
2155
|
+
def fetch_leverages(self, symbols: Strings = None, params={}) -> Leverages:
|
1982
2156
|
"""
|
1983
2157
|
fetch the set leverage for all contract markets
|
1984
|
-
|
2158
|
+
|
2159
|
+
https://www.bitmex.com/api/explorer/#not /Position/Position_get
|
2160
|
+
|
1985
2161
|
:param str[] [symbols]: a list of unified market symbols
|
1986
2162
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1987
2163
|
:returns dict: a list of `leverage structures <https://docs.ccxt.com/#/?id=leverage-structure>`
|
@@ -1990,7 +2166,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
1990
2166
|
leverages = self.fetch_positions(symbols, params)
|
1991
2167
|
return self.parse_leverages(leverages, symbols, 'symbol')
|
1992
2168
|
|
1993
|
-
def parse_leverage(self, leverage, market=None) -> Leverage:
|
2169
|
+
def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
|
1994
2170
|
marketId = self.safe_string(leverage, 'symbol')
|
1995
2171
|
return {
|
1996
2172
|
'info': leverage,
|
@@ -2003,7 +2179,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2003
2179
|
def fetch_positions(self, symbols: Strings = None, params={}):
|
2004
2180
|
"""
|
2005
2181
|
fetch all open positions
|
2006
|
-
|
2182
|
+
|
2183
|
+
https://www.bitmex.com/api/explorer/#not /Position/Position_get
|
2184
|
+
|
2007
2185
|
:param str[]|None symbols: list of unified market symbols
|
2008
2186
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2009
2187
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
|
@@ -2110,7 +2288,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2110
2288
|
results = self.parse_positions(response, symbols)
|
2111
2289
|
return self.filter_by_array_positions(results, 'symbol', symbols, False)
|
2112
2290
|
|
2113
|
-
def parse_position(self, position, market: Market = None):
|
2291
|
+
def parse_position(self, position: dict, market: Market = None):
|
2114
2292
|
#
|
2115
2293
|
# {
|
2116
2294
|
# "account": 9371654,
|
@@ -2254,10 +2432,12 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2254
2432
|
'takeProfitPrice': None,
|
2255
2433
|
})
|
2256
2434
|
|
2257
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2435
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2258
2436
|
"""
|
2259
2437
|
make a withdrawal
|
2260
|
-
|
2438
|
+
|
2439
|
+
https://www.bitmex.com/api/explorer/#not /User/User_requestWithdrawal
|
2440
|
+
|
2261
2441
|
:param str code: unified currency code
|
2262
2442
|
:param float amount: the amount to withdraw
|
2263
2443
|
:param str address: the address to withdraw to
|
@@ -2272,7 +2452,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2272
2452
|
qty = self.convert_from_real_amount(code, amount)
|
2273
2453
|
networkCode = None
|
2274
2454
|
networkCode, params = self.handle_network_code_and_params(params)
|
2275
|
-
request = {
|
2455
|
+
request: dict = {
|
2276
2456
|
'currency': currency['id'],
|
2277
2457
|
'amount': qty,
|
2278
2458
|
'address': address,
|
@@ -2280,6 +2460,8 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2280
2460
|
# 'otpToken': '123456', # requires if two-factor auth(OTP) is enabled
|
2281
2461
|
# 'fee': 0.001, # bitcoin network fee
|
2282
2462
|
}
|
2463
|
+
if self.twofa is not None:
|
2464
|
+
request['otpToken'] = self.totp(self.twofa)
|
2283
2465
|
response = self.privatePostUserRequestWithdrawal(self.extend(request, params))
|
2284
2466
|
#
|
2285
2467
|
# {
|
@@ -2300,13 +2482,15 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2300
2482
|
#
|
2301
2483
|
return self.parse_transaction(response, currency)
|
2302
2484
|
|
2303
|
-
def fetch_funding_rates(self, symbols: Strings = None, params={}):
|
2485
|
+
def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
|
2304
2486
|
"""
|
2305
2487
|
fetch the funding rate for multiple markets
|
2306
|
-
|
2488
|
+
|
2489
|
+
https://www.bitmex.com/api/explorer/#not /Instrument/Instrument_getActiveAndIndices
|
2490
|
+
|
2307
2491
|
:param str[]|None symbols: list of unified market symbols
|
2308
2492
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2309
|
-
:returns dict: a
|
2493
|
+
:returns dict[]: a list of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexed by market symbols
|
2310
2494
|
"""
|
2311
2495
|
self.load_markets()
|
2312
2496
|
response = self.publicGetInstrumentActiveAndIndices(params)
|
@@ -2323,7 +2507,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2323
2507
|
result = self.parse_funding_rates(filteredResponse)
|
2324
2508
|
return self.filter_by_array(result, 'symbol', symbols)
|
2325
2509
|
|
2326
|
-
def parse_funding_rate(self, contract, market: Market = None):
|
2510
|
+
def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
|
2327
2511
|
# see response sample under "fetchMarkets" because same endpoint is being used here
|
2328
2512
|
datetime = self.safe_string(contract, 'timestamp')
|
2329
2513
|
marketId = self.safe_string(contract, 'symbol')
|
@@ -2338,7 +2522,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2338
2522
|
'timestamp': self.parse8601(datetime),
|
2339
2523
|
'datetime': datetime,
|
2340
2524
|
'fundingRate': self.safe_number(contract, 'fundingRate'),
|
2341
|
-
'fundingTimestamp': self.
|
2525
|
+
'fundingTimestamp': self.parse8601(fundingDatetime),
|
2342
2526
|
'fundingDatetime': fundingDatetime,
|
2343
2527
|
'nextFundingRate': self.safe_number(contract, 'indicativeFundingRate'),
|
2344
2528
|
'nextFundingTimestamp': None,
|
@@ -2346,12 +2530,15 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2346
2530
|
'previousFundingRate': None,
|
2347
2531
|
'previousFundingTimestamp': None,
|
2348
2532
|
'previousFundingDatetime': None,
|
2533
|
+
'interval': None,
|
2349
2534
|
}
|
2350
2535
|
|
2351
2536
|
def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
2352
2537
|
"""
|
2353
2538
|
Fetches the history of funding rates
|
2354
|
-
|
2539
|
+
|
2540
|
+
https://www.bitmex.com/api/explorer/#not /Funding/Funding_get
|
2541
|
+
|
2355
2542
|
:param str symbol: unified symbol of the market to fetch the funding rate history for
|
2356
2543
|
:param int [since]: timestamp in ms of the earliest funding rate to fetch
|
2357
2544
|
:param int [limit]: the maximum amount of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rate-history-structure>` to fetch
|
@@ -2364,7 +2551,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2364
2551
|
:returns dict[]: a list of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rate-history-structure>`
|
2365
2552
|
"""
|
2366
2553
|
self.load_markets()
|
2367
|
-
request = {}
|
2554
|
+
request: dict = {}
|
2368
2555
|
market = None
|
2369
2556
|
if symbol in self.currencies:
|
2370
2557
|
code = self.currency(symbol)
|
@@ -2384,8 +2571,8 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2384
2571
|
request['startTime'] = self.iso8601(since)
|
2385
2572
|
if limit is not None:
|
2386
2573
|
request['count'] = limit
|
2387
|
-
until = self.
|
2388
|
-
params = self.omit(params, ['until'
|
2574
|
+
until = self.safe_integer(params, 'until')
|
2575
|
+
params = self.omit(params, ['until'])
|
2389
2576
|
if until is not None:
|
2390
2577
|
request['endTime'] = self.iso8601(until)
|
2391
2578
|
if (since is None) and (until is None):
|
@@ -2427,7 +2614,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2427
2614
|
def set_leverage(self, leverage: Int, symbol: Str = None, params={}):
|
2428
2615
|
"""
|
2429
2616
|
set the level of leverage for a market
|
2430
|
-
|
2617
|
+
|
2618
|
+
https://www.bitmex.com/api/explorer/#not /Position/Position_updateLeverage
|
2619
|
+
|
2431
2620
|
:param float leverage: the rate of leverage
|
2432
2621
|
:param str symbol: unified market symbol
|
2433
2622
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -2441,7 +2630,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2441
2630
|
market = self.market(symbol)
|
2442
2631
|
if market['type'] != 'swap' and market['type'] != 'future':
|
2443
2632
|
raise BadSymbol(self.id + ' setLeverage() supports future and swap contracts only')
|
2444
|
-
request = {
|
2633
|
+
request: dict = {
|
2445
2634
|
'symbol': market['id'],
|
2446
2635
|
'leverage': leverage,
|
2447
2636
|
}
|
@@ -2450,7 +2639,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2450
2639
|
def set_margin_mode(self, marginMode: str, symbol: Str = None, params={}):
|
2451
2640
|
"""
|
2452
2641
|
set margin mode to 'cross' or 'isolated'
|
2453
|
-
|
2642
|
+
|
2643
|
+
https://www.bitmex.com/api/explorer/#not /Position/Position_isolateMargin
|
2644
|
+
|
2454
2645
|
:param str marginMode: 'cross' or 'isolated'
|
2455
2646
|
:param str symbol: unified market symbol
|
2456
2647
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -2466,16 +2657,18 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2466
2657
|
if (market['type'] != 'swap') and (market['type'] != 'future'):
|
2467
2658
|
raise BadSymbol(self.id + ' setMarginMode() supports swap and future contracts only')
|
2468
2659
|
enabled = False if (marginMode == 'cross') else True
|
2469
|
-
request = {
|
2660
|
+
request: dict = {
|
2470
2661
|
'symbol': market['id'],
|
2471
2662
|
'enabled': enabled,
|
2472
2663
|
}
|
2473
2664
|
return self.privatePostPositionIsolate(self.extend(request, params))
|
2474
2665
|
|
2475
|
-
def fetch_deposit_address(self, code: str, params={}):
|
2666
|
+
def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
2476
2667
|
"""
|
2477
2668
|
fetch the deposit address for a currency associated with self account
|
2478
|
-
|
2669
|
+
|
2670
|
+
https://www.bitmex.com/api/explorer/#not /User/User_getDepositAddress
|
2671
|
+
|
2479
2672
|
:param str code: unified currency code
|
2480
2673
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2481
2674
|
:param str [params.network]: deposit chain, can view all chains via self.publicGetWalletAssets, default is eth, unless the currency has a default chain within self.options['networks']
|
@@ -2488,7 +2681,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2488
2681
|
raise ArgumentsRequired(self.id + ' fetchDepositAddress requires params["network"]')
|
2489
2682
|
currency = self.currency(code)
|
2490
2683
|
params = self.omit(params, 'network')
|
2491
|
-
request = {
|
2684
|
+
request: dict = {
|
2492
2685
|
'currency': currency['id'],
|
2493
2686
|
'network': self.network_code_to_id(networkCode, currency['code']),
|
2494
2687
|
}
|
@@ -2497,11 +2690,11 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2497
2690
|
# '"bc1qmex3puyrzn2gduqcnlu70c2uscpyaa9nm2l2j9le2lt2wkgmw33sy7ndjg"'
|
2498
2691
|
#
|
2499
2692
|
return {
|
2693
|
+
'info': response,
|
2500
2694
|
'currency': code,
|
2695
|
+
'network': networkCode,
|
2501
2696
|
'address': response.replace('"', '').replace('"', ''), # Done twice because some languages only replace the first instance
|
2502
2697
|
'tag': None,
|
2503
|
-
'network': networkCode,
|
2504
|
-
'info': response,
|
2505
2698
|
}
|
2506
2699
|
|
2507
2700
|
def parse_deposit_withdraw_fee(self, fee, currency: Currency = None):
|
@@ -2533,7 +2726,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2533
2726
|
#
|
2534
2727
|
networks = self.safe_value(fee, 'networks', [])
|
2535
2728
|
networksLength = len(networks)
|
2536
|
-
result = {
|
2729
|
+
result: dict = {
|
2537
2730
|
'info': fee,
|
2538
2731
|
'withdraw': {
|
2539
2732
|
'fee': None,
|
@@ -2567,7 +2760,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2567
2760
|
def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
2568
2761
|
"""
|
2569
2762
|
fetch deposit and withdraw fees
|
2570
|
-
|
2763
|
+
|
2764
|
+
https://www.bitmex.com/api/explorer/#not /Wallet/Wallet_getAssetsConfig
|
2765
|
+
|
2571
2766
|
:param str[]|None codes: list of unified currency codes
|
2572
2767
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2573
2768
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -2618,7 +2813,9 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2618
2813
|
def fetch_liquidations(self, symbol: str, since: Int = None, limit: Int = None, params={}):
|
2619
2814
|
"""
|
2620
2815
|
retrieves the public liquidations of a trading pair
|
2621
|
-
|
2816
|
+
|
2817
|
+
https://www.bitmex.com/api/explorer/#not /Liquidation/Liquidation_get
|
2818
|
+
|
2622
2819
|
:param str symbol: unified CCXT market symbol
|
2623
2820
|
:param int [since]: the earliest time in ms to fetch liquidations for
|
2624
2821
|
:param int [limit]: the maximum number of liquidation structures to retrieve
|
@@ -2633,7 +2830,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2633
2830
|
if paginate:
|
2634
2831
|
return self.fetch_paginated_call_dynamic('fetchLiquidations', symbol, since, limit, params)
|
2635
2832
|
market = self.market(symbol)
|
2636
|
-
request = {
|
2833
|
+
request: dict = {
|
2637
2834
|
'symbol': market['id'],
|
2638
2835
|
}
|
2639
2836
|
if since is not None:
|
@@ -2678,7 +2875,7 @@ class bitmex(Exchange, ImplicitAPI):
|
|
2678
2875
|
'datetime': None,
|
2679
2876
|
})
|
2680
2877
|
|
2681
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
2878
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
2682
2879
|
if response is None:
|
2683
2880
|
return None
|
2684
2881
|
if code == 429:
|