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/huobijp.py
CHANGED
@@ -6,9 +6,10 @@
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.huobijp import ImplicitAPI
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
9
|
+
from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, 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
|
@@ -21,7 +22,6 @@ from ccxt.base.errors import NetworkError
|
|
21
22
|
from ccxt.base.errors import ExchangeNotAvailable
|
22
23
|
from ccxt.base.errors import OnMaintenance
|
23
24
|
from ccxt.base.errors import RequestTimeout
|
24
|
-
from ccxt.base.errors import AuthenticationError
|
25
25
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
26
26
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
27
27
|
from ccxt.base.precise import Precise
|
@@ -265,6 +265,79 @@ class huobijp(Exchange, ImplicitAPI):
|
|
265
265
|
'taker': self.parse_number('0.002'),
|
266
266
|
},
|
267
267
|
},
|
268
|
+
'features': {
|
269
|
+
'spot': {
|
270
|
+
'sandbox': False,
|
271
|
+
'createOrder': {
|
272
|
+
'marginMode': False,
|
273
|
+
'triggerPrice': True, # todo: implement
|
274
|
+
'triggerPriceType': None,
|
275
|
+
'triggerDirection': False,
|
276
|
+
'stopLossPrice': False, # todo
|
277
|
+
'takeProfitPrice': False, # todo
|
278
|
+
'attachedStopLossTakeProfit': None,
|
279
|
+
'timeInForce': {
|
280
|
+
'IOC': False,
|
281
|
+
'FOK': False,
|
282
|
+
'PO': False,
|
283
|
+
'GTD': False,
|
284
|
+
},
|
285
|
+
'hedged': False,
|
286
|
+
'selfTradePrevention': False,
|
287
|
+
'trailing': False,
|
288
|
+
'leverage': False,
|
289
|
+
'marketBuyByCost': True,
|
290
|
+
'marketBuyRequiresPrice': False,
|
291
|
+
'iceberg': False,
|
292
|
+
},
|
293
|
+
'createOrders': None,
|
294
|
+
'fetchMyTrades': {
|
295
|
+
'marginMode': False,
|
296
|
+
'limit': 100,
|
297
|
+
'daysBack': 120,
|
298
|
+
'untilDays': 2,
|
299
|
+
},
|
300
|
+
'fetchOrder': {
|
301
|
+
'marginMode': False,
|
302
|
+
'trigger': False,
|
303
|
+
'trailing': False,
|
304
|
+
},
|
305
|
+
'fetchOpenOrders': {
|
306
|
+
'marginMode': False,
|
307
|
+
'limit': None, # todo
|
308
|
+
'trigger': False,
|
309
|
+
'trailing': False,
|
310
|
+
},
|
311
|
+
'fetchOrders': {
|
312
|
+
'marginMode': False,
|
313
|
+
'limit': None,
|
314
|
+
'daysBack': None, # todo
|
315
|
+
'untilDays': None, # todo
|
316
|
+
'trigger': False,
|
317
|
+
'trailing': False,
|
318
|
+
},
|
319
|
+
'fetchClosedOrders': {
|
320
|
+
'marginMode': False,
|
321
|
+
'limit': None,
|
322
|
+
'daysBack': None, # todo
|
323
|
+
'daysBackCanceled': None, # todo
|
324
|
+
'untilDays': None, # todo
|
325
|
+
'trigger': False,
|
326
|
+
'trailing': False,
|
327
|
+
},
|
328
|
+
'fetchOHLCV': {
|
329
|
+
'limit': 2000,
|
330
|
+
},
|
331
|
+
},
|
332
|
+
'swap': {
|
333
|
+
'linear': None,
|
334
|
+
'inverse': None,
|
335
|
+
},
|
336
|
+
'future': {
|
337
|
+
'linear': None,
|
338
|
+
'inverse': None,
|
339
|
+
},
|
340
|
+
},
|
268
341
|
'precisionMode': TICK_SIZE,
|
269
342
|
'exceptions': {
|
270
343
|
'broad': {
|
@@ -323,6 +396,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
323
396
|
'fetchMarketsMethod': 'publicGetCommonSymbols',
|
324
397
|
'fetchBalanceMethod': 'privateGetAccountAccountsIdBalance',
|
325
398
|
'createOrderMethod': 'privatePostOrderOrdersPlace',
|
399
|
+
'currencyToPrecisionRoundingMode': TRUNCATE,
|
326
400
|
'language': 'en-US',
|
327
401
|
'broker': {
|
328
402
|
'id': 'AA03022abc',
|
@@ -361,14 +435,14 @@ class huobijp(Exchange, ImplicitAPI):
|
|
361
435
|
self.load_markets()
|
362
436
|
if symbols is None:
|
363
437
|
symbols = self.symbols
|
364
|
-
result = {}
|
438
|
+
result: dict = {}
|
365
439
|
for i in range(0, len(symbols)):
|
366
440
|
symbol = symbols[i]
|
367
441
|
result[symbol] = self.fetch_trading_limits_by_id(self.market_id(symbol), params)
|
368
442
|
return result
|
369
443
|
|
370
444
|
def fetch_trading_limits_by_id(self, id: str, params={}):
|
371
|
-
request = {
|
445
|
+
request: dict = {
|
372
446
|
'symbol': id,
|
373
447
|
}
|
374
448
|
response = self.publicGetCommonExchange(self.extend(request, params))
|
@@ -419,7 +493,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
419
493
|
def cost_to_precision(self, symbol, cost):
|
420
494
|
return self.decimal_to_precision(cost, TRUNCATE, self.markets[symbol]['precision']['cost'], self.precisionMode)
|
421
495
|
|
422
|
-
def fetch_markets(self, params={}):
|
496
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
423
497
|
"""
|
424
498
|
retrieves data on all markets for huobijp
|
425
499
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -530,7 +604,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
530
604
|
})
|
531
605
|
return result
|
532
606
|
|
533
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
607
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
534
608
|
#
|
535
609
|
# fetchTicker
|
536
610
|
#
|
@@ -621,7 +695,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
621
695
|
"""
|
622
696
|
self.load_markets()
|
623
697
|
market = self.market(symbol)
|
624
|
-
request = {
|
698
|
+
request: dict = {
|
625
699
|
'symbol': market['id'],
|
626
700
|
'type': 'step0',
|
627
701
|
}
|
@@ -666,7 +740,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
666
740
|
"""
|
667
741
|
self.load_markets()
|
668
742
|
market = self.market(symbol)
|
669
|
-
request = {
|
743
|
+
request: dict = {
|
670
744
|
'symbol': market['id'],
|
671
745
|
}
|
672
746
|
response = self.marketGetDetailMerged(self.extend(request, params))
|
@@ -708,7 +782,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
708
782
|
response = self.marketGetTickers(params)
|
709
783
|
tickers = self.safe_value(response, 'data', [])
|
710
784
|
timestamp = self.safe_integer(response, 'ts')
|
711
|
-
result = {}
|
785
|
+
result: dict = {}
|
712
786
|
for i in range(0, len(tickers)):
|
713
787
|
marketId = self.safe_string(tickers[i], 'symbol')
|
714
788
|
market = self.safe_market(marketId)
|
@@ -719,7 +793,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
719
793
|
result[symbol] = ticker
|
720
794
|
return self.filter_by_array_tickers(result, 'symbol', symbols)
|
721
795
|
|
722
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
796
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
723
797
|
#
|
724
798
|
# fetchTrades(public)
|
725
799
|
#
|
@@ -808,7 +882,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
808
882
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
809
883
|
"""
|
810
884
|
self.load_markets()
|
811
|
-
request = {
|
885
|
+
request: dict = {
|
812
886
|
'id': id,
|
813
887
|
}
|
814
888
|
response = self.privateGetOrderOrdersIdMatchresults(self.extend(request, params))
|
@@ -825,7 +899,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
825
899
|
"""
|
826
900
|
self.load_markets()
|
827
901
|
market = None
|
828
|
-
request = {}
|
902
|
+
request: dict = {}
|
829
903
|
if symbol is not None:
|
830
904
|
market = self.market(symbol)
|
831
905
|
request['symbol'] = market['id']
|
@@ -848,7 +922,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
848
922
|
"""
|
849
923
|
self.load_markets()
|
850
924
|
market = self.market(symbol)
|
851
|
-
request = {
|
925
|
+
request: dict = {
|
852
926
|
'symbol': market['id'],
|
853
927
|
}
|
854
928
|
if limit is not None:
|
@@ -922,12 +996,12 @@ class huobijp(Exchange, ImplicitAPI):
|
|
922
996
|
"""
|
923
997
|
self.load_markets()
|
924
998
|
market = self.market(symbol)
|
925
|
-
request = {
|
999
|
+
request: dict = {
|
926
1000
|
'symbol': market['id'],
|
927
1001
|
'period': self.safe_string(self.timeframes, timeframe, timeframe),
|
928
1002
|
}
|
929
1003
|
if limit is not None:
|
930
|
-
request['size'] = limit
|
1004
|
+
request['size'] = min(limit, 2000)
|
931
1005
|
response = self.marketGetHistoryKline(self.extend(request, params))
|
932
1006
|
#
|
933
1007
|
# {
|
@@ -941,7 +1015,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
941
1015
|
# ]
|
942
1016
|
# }
|
943
1017
|
#
|
944
|
-
data = self.
|
1018
|
+
data = self.safe_list(response, 'data', [])
|
945
1019
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
946
1020
|
|
947
1021
|
def fetch_accounts(self, params={}) -> List[Account]:
|
@@ -954,13 +1028,13 @@ class huobijp(Exchange, ImplicitAPI):
|
|
954
1028
|
response = self.privateGetAccountAccounts(params)
|
955
1029
|
return response['data']
|
956
1030
|
|
957
|
-
def fetch_currencies(self, params={}):
|
1031
|
+
def fetch_currencies(self, params={}) -> Currencies:
|
958
1032
|
"""
|
959
1033
|
fetches all available currencies on an exchange
|
960
1034
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
961
1035
|
:returns dict: an associative dictionary of currencies
|
962
1036
|
"""
|
963
|
-
request = {
|
1037
|
+
request: dict = {
|
964
1038
|
'language': self.options['language'],
|
965
1039
|
}
|
966
1040
|
response = self.publicGetSettingsCurrencys(self.extend(request, params))
|
@@ -1005,7 +1079,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1005
1079
|
# }
|
1006
1080
|
#
|
1007
1081
|
currencies = self.safe_value(response, 'data', [])
|
1008
|
-
result = {}
|
1082
|
+
result: dict = {}
|
1009
1083
|
for i in range(0, len(currencies)):
|
1010
1084
|
currency = currencies[i]
|
1011
1085
|
id = self.safe_value(currency, 'name')
|
@@ -1051,7 +1125,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1051
1125
|
|
1052
1126
|
def parse_balance(self, response) -> Balances:
|
1053
1127
|
balances = self.safe_value(response['data'], 'list', [])
|
1054
|
-
result = {'info': response}
|
1128
|
+
result: dict = {'info': response}
|
1055
1129
|
for i in range(0, len(balances)):
|
1056
1130
|
balance = balances[i]
|
1057
1131
|
currencyId = self.safe_string(balance, 'currency')
|
@@ -1077,7 +1151,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1077
1151
|
self.load_markets()
|
1078
1152
|
self.load_accounts()
|
1079
1153
|
method = self.options['fetchBalanceMethod']
|
1080
|
-
request = {
|
1154
|
+
request: dict = {
|
1081
1155
|
'id': self.accounts[0]['id'],
|
1082
1156
|
}
|
1083
1157
|
response = getattr(self, method)(self.extend(request, params))
|
@@ -1085,7 +1159,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1085
1159
|
|
1086
1160
|
def fetch_orders_by_states(self, states, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1087
1161
|
self.load_markets()
|
1088
|
-
request = {
|
1162
|
+
request: dict = {
|
1089
1163
|
'states': states,
|
1090
1164
|
}
|
1091
1165
|
market = None
|
@@ -1116,16 +1190,17 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1116
1190
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1117
1191
|
"""
|
1118
1192
|
fetches information on an order made by the user
|
1193
|
+
:param str id: order id
|
1119
1194
|
:param str symbol: unified symbol of the market the order was made in
|
1120
1195
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1121
1196
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1122
1197
|
"""
|
1123
1198
|
self.load_markets()
|
1124
|
-
request = {
|
1199
|
+
request: dict = {
|
1125
1200
|
'id': id,
|
1126
1201
|
}
|
1127
1202
|
response = self.privateGetOrderOrdersId(self.extend(request, params))
|
1128
|
-
order = self.
|
1203
|
+
order = self.safe_dict(response, 'data')
|
1129
1204
|
return self.parse_order(order)
|
1130
1205
|
|
1131
1206
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
@@ -1169,7 +1244,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1169
1244
|
|
1170
1245
|
def fetch_open_orders_v2(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1171
1246
|
self.load_markets()
|
1172
|
-
request = {}
|
1247
|
+
request: dict = {}
|
1173
1248
|
market = None
|
1174
1249
|
if symbol is not None:
|
1175
1250
|
market = self.market(symbol)
|
@@ -1210,11 +1285,11 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1210
1285
|
# ]
|
1211
1286
|
# }
|
1212
1287
|
#
|
1213
|
-
data = self.
|
1288
|
+
data = self.safe_list(response, 'data', [])
|
1214
1289
|
return self.parse_orders(data, market, since, limit)
|
1215
1290
|
|
1216
|
-
def parse_order_status(self, status):
|
1217
|
-
statuses = {
|
1291
|
+
def parse_order_status(self, status: Str):
|
1292
|
+
statuses: dict = {
|
1218
1293
|
'partial-filled': 'open',
|
1219
1294
|
'partial-canceled': 'canceled',
|
1220
1295
|
'filled': 'closed',
|
@@ -1223,7 +1298,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1223
1298
|
}
|
1224
1299
|
return self.safe_string(statuses, status, status)
|
1225
1300
|
|
1226
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1301
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1227
1302
|
#
|
1228
1303
|
# { id: 13997833014,
|
1229
1304
|
# "symbol": "ethbtc",
|
@@ -1293,7 +1368,6 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1293
1368
|
'postOnly': None,
|
1294
1369
|
'side': side,
|
1295
1370
|
'price': price,
|
1296
|
-
'stopPrice': None,
|
1297
1371
|
'triggerPrice': None,
|
1298
1372
|
'average': None,
|
1299
1373
|
'cost': cost,
|
@@ -1327,14 +1401,14 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1327
1401
|
:param str type: 'market' or 'limit'
|
1328
1402
|
:param str side: 'buy' or 'sell'
|
1329
1403
|
:param float amount: how much of currency you want to trade in units of base currency
|
1330
|
-
:param float [price]: the price at which the order is to be
|
1404
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1331
1405
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1332
1406
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1333
1407
|
"""
|
1334
1408
|
self.load_markets()
|
1335
1409
|
self.load_accounts()
|
1336
1410
|
market = self.market(symbol)
|
1337
|
-
request = {
|
1411
|
+
request: dict = {
|
1338
1412
|
'account-id': self.accounts[0]['id'],
|
1339
1413
|
'symbol': market['id'],
|
1340
1414
|
'type': side + '-' + type,
|
@@ -1430,7 +1504,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1430
1504
|
self.load_markets()
|
1431
1505
|
clientOrderIds = self.safe_value_2(params, 'clientOrderIds', 'client-order-ids')
|
1432
1506
|
params = self.omit(params, ['clientOrderIds', 'client-order-ids'])
|
1433
|
-
request = {}
|
1507
|
+
request: dict = {}
|
1434
1508
|
if clientOrderIds is None:
|
1435
1509
|
request['order-ids'] = ids
|
1436
1510
|
else:
|
@@ -1468,7 +1542,61 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1468
1542
|
# }
|
1469
1543
|
# }
|
1470
1544
|
#
|
1471
|
-
return response
|
1545
|
+
return self.parse_cancel_orders(response)
|
1546
|
+
|
1547
|
+
def parse_cancel_orders(self, orders):
|
1548
|
+
#
|
1549
|
+
# {
|
1550
|
+
# "success": [
|
1551
|
+
# "5983466"
|
1552
|
+
# ],
|
1553
|
+
# "failed": [
|
1554
|
+
# {
|
1555
|
+
# "err-msg": "Incorrect order state",
|
1556
|
+
# "order-state": 7,
|
1557
|
+
# "order-id": "",
|
1558
|
+
# "err-code": "order-orderstate-error",
|
1559
|
+
# "client-order-id": "first"
|
1560
|
+
# },
|
1561
|
+
# ...
|
1562
|
+
# ]
|
1563
|
+
# }
|
1564
|
+
#
|
1565
|
+
# {
|
1566
|
+
# "errors": [
|
1567
|
+
# {
|
1568
|
+
# "order_id": "769206471845261312",
|
1569
|
+
# "err_code": 1061,
|
1570
|
+
# "err_msg": "This order doesnt exist."
|
1571
|
+
# }
|
1572
|
+
# ],
|
1573
|
+
# "successes": "1258075374411399168,1258075393254871040"
|
1574
|
+
# }
|
1575
|
+
#
|
1576
|
+
successes = self.safe_string(orders, 'successes')
|
1577
|
+
success = None
|
1578
|
+
if successes is not None:
|
1579
|
+
success = successes.split(',')
|
1580
|
+
else:
|
1581
|
+
success = self.safe_list(orders, 'success', [])
|
1582
|
+
failed = self.safe_list_2(orders, 'errors', 'failed', [])
|
1583
|
+
result = []
|
1584
|
+
for i in range(0, len(success)):
|
1585
|
+
order = success[i]
|
1586
|
+
result.append(self.safe_order({
|
1587
|
+
'info': order,
|
1588
|
+
'id': order,
|
1589
|
+
'status': 'canceled',
|
1590
|
+
}))
|
1591
|
+
for i in range(0, len(failed)):
|
1592
|
+
order = failed[i]
|
1593
|
+
result.append(self.safe_order({
|
1594
|
+
'info': order,
|
1595
|
+
'id': self.safe_string_2(order, 'order-id', 'order_id'),
|
1596
|
+
'status': 'failed',
|
1597
|
+
'clientOrderId': self.safe_string(order, 'client-order-id'),
|
1598
|
+
}))
|
1599
|
+
return result
|
1472
1600
|
|
1473
1601
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
1474
1602
|
"""
|
@@ -1478,7 +1606,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1478
1606
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1479
1607
|
"""
|
1480
1608
|
self.load_markets()
|
1481
|
-
request = {
|
1609
|
+
request: dict = {
|
1482
1610
|
# 'account-id' string False NA The account id used for self cancel Refer to GET /v1/account/accounts
|
1483
1611
|
# 'symbol': market['id'], # a list of comma-separated symbols, all symbols by default
|
1484
1612
|
# 'types' 'string', buy-market, sell-market, buy-limit, sell-limit, buy-ioc, sell-ioc, buy-stop-limit, sell-stop-limit, buy-limit-fok, sell-limit-fok, buy-stop-limit-fok, sell-stop-limit-fok
|
@@ -1500,18 +1628,12 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1500
1628
|
# }
|
1501
1629
|
# }
|
1502
1630
|
#
|
1503
|
-
|
1504
|
-
|
1505
|
-
|
1506
|
-
|
1507
|
-
|
1508
|
-
|
1509
|
-
lastCharacterIndex = len(networkId) - 1
|
1510
|
-
lastCharacter = networkId[lastCharacterIndex]
|
1511
|
-
if lastCharacter == '1':
|
1512
|
-
networkId = networkId[0:lastCharacterIndex]
|
1513
|
-
networksById = {}
|
1514
|
-
return self.safe_string(networksById, networkId, networkId)
|
1631
|
+
data = self.safe_dict(response, 'data', {})
|
1632
|
+
return [
|
1633
|
+
self.safe_order({
|
1634
|
+
'info': data,
|
1635
|
+
}),
|
1636
|
+
]
|
1515
1637
|
|
1516
1638
|
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
1517
1639
|
#
|
@@ -1556,7 +1678,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1556
1678
|
currency = None
|
1557
1679
|
if code is not None:
|
1558
1680
|
currency = self.currency(code)
|
1559
|
-
request = {
|
1681
|
+
request: dict = {
|
1560
1682
|
'type': 'deposit',
|
1561
1683
|
'from': 0, # From 'id' ... if you want to get results after a particular transaction id, pass the id in params.from
|
1562
1684
|
}
|
@@ -1583,7 +1705,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1583
1705
|
currency = None
|
1584
1706
|
if code is not None:
|
1585
1707
|
currency = self.currency(code)
|
1586
|
-
request = {
|
1708
|
+
request: dict = {
|
1587
1709
|
'type': 'withdraw',
|
1588
1710
|
'from': 0, # From 'id' ... if you want to get results after a particular transaction id, pass the id in params.from
|
1589
1711
|
}
|
@@ -1595,7 +1717,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1595
1717
|
# return response
|
1596
1718
|
return self.parse_transactions(response['data'], currency, since, limit)
|
1597
1719
|
|
1598
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1720
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1599
1721
|
#
|
1600
1722
|
# fetchDeposits
|
1601
1723
|
#
|
@@ -1673,8 +1795,8 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1673
1795
|
},
|
1674
1796
|
}
|
1675
1797
|
|
1676
|
-
def parse_transaction_status(self, status):
|
1677
|
-
statuses = {
|
1798
|
+
def parse_transaction_status(self, status: Str):
|
1799
|
+
statuses: dict = {
|
1678
1800
|
# deposit statuses
|
1679
1801
|
'unknown': 'failed',
|
1680
1802
|
'confirming': 'pending',
|
@@ -1696,7 +1818,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1696
1818
|
}
|
1697
1819
|
return self.safe_string(statuses, status, status)
|
1698
1820
|
|
1699
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1821
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1700
1822
|
"""
|
1701
1823
|
make a withdrawal
|
1702
1824
|
:param str code: unified currency code
|
@@ -1710,7 +1832,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1710
1832
|
self.load_markets()
|
1711
1833
|
self.check_address(address)
|
1712
1834
|
currency = self.currency(code)
|
1713
|
-
request = {
|
1835
|
+
request: dict = {
|
1714
1836
|
'address': address, # only supports existing addresses in your withdraw address list
|
1715
1837
|
'amount': amount,
|
1716
1838
|
'currency': currency['id'].lower(),
|
@@ -1749,7 +1871,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1749
1871
|
if api == 'private' or api == 'v2Private':
|
1750
1872
|
self.check_required_credentials()
|
1751
1873
|
timestamp = self.ymdhms(self.milliseconds(), 'T')
|
1752
|
-
request = {
|
1874
|
+
request: dict = {
|
1753
1875
|
'SignatureMethod': 'HmacSHA256',
|
1754
1876
|
'SignatureVersion': '2',
|
1755
1877
|
'AccessKeyId': self.apiKey,
|
@@ -1782,7 +1904,7 @@ class huobijp(Exchange, ImplicitAPI):
|
|
1782
1904
|
}) + url
|
1783
1905
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1784
1906
|
|
1785
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1907
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1786
1908
|
if response is None:
|
1787
1909
|
return None # fallback to default error handler
|
1788
1910
|
if 'status' in response:
|