ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +25 -0
- ccxt/abstract/kucoinfutures.py +35 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3513 -1511
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3105 -881
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +239 -50
- ccxt/async_support/bitget.py +1513 -563
- ccxt/async_support/bithumb.py +201 -67
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +403 -150
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2326 -1255
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1455 -288
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +206 -89
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +467 -158
- ccxt/async_support/deribit.py +558 -324
- ccxt/async_support/digifinex.py +340 -223
- ccxt/async_support/ellipx.py +1826 -0
- ccxt/async_support/exmo.py +259 -128
- ccxt/async_support/gate.py +1473 -464
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +334 -178
- ccxt/async_support/hollaex.py +134 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +105 -56
- ccxt/async_support/hyperliquid.py +1634 -269
- ccxt/async_support/idex.py +148 -95
- ccxt/async_support/independentreserve.py +236 -31
- ccxt/async_support/indodax.py +165 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +1050 -355
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +138 -106
- ccxt/async_support/latoken.py +135 -79
- ccxt/async_support/lbank.py +290 -113
- ccxt/async_support/luno.py +112 -62
- ccxt/async_support/lykke.py +104 -55
- ccxt/async_support/mercado.py +36 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +43 -0
- ccxt/async_support/ndax.py +163 -82
- ccxt/async_support/novadax.py +121 -75
- ccxt/async_support/oceanex.py +175 -59
- ccxt/async_support/okcoin.py +222 -163
- ccxt/async_support/okx.py +1777 -455
- ccxt/async_support/onetrading.py +132 -414
- ccxt/async_support/oxfun.py +2832 -0
- ccxt/async_support/p2b.py +79 -51
- ccxt/async_support/paradex.py +2017 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1155 -295
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1729 -482
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3513 -1511
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3105 -881
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +239 -50
- ccxt/bitget.py +1513 -563
- ccxt/bithumb.py +200 -67
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +403 -150
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2326 -1255
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1455 -288
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +206 -89
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +467 -158
- ccxt/deribit.py +558 -324
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1473 -464
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +334 -178
- ccxt/hollaex.py +134 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +105 -56
- ccxt/hyperliquid.py +1633 -269
- ccxt/idex.py +148 -95
- ccxt/independentreserve.py +235 -31
- ccxt/indodax.py +165 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +1050 -355
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +138 -106
- ccxt/latoken.py +135 -79
- ccxt/lbank.py +290 -113
- ccxt/luno.py +112 -62
- ccxt/lykke.py +104 -55
- ccxt/mercado.py +36 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +43 -0
- ccxt/ndax.py +163 -82
- ccxt/novadax.py +121 -75
- ccxt/oceanex.py +175 -59
- ccxt/okcoin.py +222 -163
- ccxt/okx.py +1777 -455
- ccxt/onetrading.py +132 -414
- ccxt/oxfun.py +2831 -0
- ccxt/p2b.py +79 -51
- ccxt/paradex.py +2017 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +63 -15
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +138 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +204 -82
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -661
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +168 -32
- ccxt/pro/exmo.py +253 -21
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +93 -34
- ccxt/pro/poloniex.py +129 -50
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +93 -86
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +486 -70
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +465 -407
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +465 -409
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1155 -295
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.48.dist-info/METADATA +646 -0
- ccxt-4.4.48.dist-info/RECORD +669 -0
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.76.dist-info/METADATA +0 -626
- ccxt-4.2.76.dist-info/RECORD +0 -534
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/async_support/bithumb.py
CHANGED
@@ -5,17 +5,18 @@
|
|
5
5
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.bithumb import ImplicitAPI
|
8
|
+
import asyncio
|
8
9
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
10
|
+
from ccxt.base.types import Balances, Currency, Int, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
10
11
|
from typing import List
|
11
12
|
from ccxt.base.errors import ExchangeError
|
13
|
+
from ccxt.base.errors import AuthenticationError
|
12
14
|
from ccxt.base.errors import PermissionDenied
|
13
15
|
from ccxt.base.errors import ArgumentsRequired
|
14
16
|
from ccxt.base.errors import BadRequest
|
15
17
|
from ccxt.base.errors import InvalidAddress
|
16
18
|
from ccxt.base.errors import InvalidOrder
|
17
19
|
from ccxt.base.errors import ExchangeNotAvailable
|
18
|
-
from ccxt.base.errors import AuthenticationError
|
19
20
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
20
21
|
from ccxt.base.decimal_to_precision import DECIMAL_PLACES
|
21
22
|
from ccxt.base.decimal_to_precision import SIGNIFICANT_DIGITS
|
@@ -30,6 +31,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
30
31
|
'name': 'Bithumb',
|
31
32
|
'countries': ['KR'], # South Korea
|
32
33
|
'rateLimit': 500,
|
34
|
+
'pro': True,
|
33
35
|
'has': {
|
34
36
|
'CORS': True,
|
35
37
|
'spot': True,
|
@@ -65,7 +67,11 @@ class bithumb(Exchange, ImplicitAPI):
|
|
65
67
|
'fetchOrder': True,
|
66
68
|
'fetchOrderBook': True,
|
67
69
|
'fetchPosition': False,
|
70
|
+
'fetchPositionHistory': False,
|
71
|
+
'fetchPositionMode': False,
|
68
72
|
'fetchPositions': False,
|
73
|
+
'fetchPositionsForSymbol': False,
|
74
|
+
'fetchPositionsHistory': False,
|
69
75
|
'fetchPositionsRisk': False,
|
70
76
|
'fetchPremiumIndexOHLCV': False,
|
71
77
|
'fetchTicker': True,
|
@@ -82,7 +88,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
82
88
|
},
|
83
89
|
'hostname': 'bithumb.com',
|
84
90
|
'urls': {
|
85
|
-
'logo': 'https://
|
91
|
+
'logo': 'https://github.com/user-attachments/assets/c9e0eefb-4777-46b9-8f09-9d7f7c4af82d',
|
86
92
|
'api': {
|
87
93
|
'public': 'https://api.{hostname}/public',
|
88
94
|
'private': 'https://api.{hostname}',
|
@@ -136,6 +142,60 @@ class bithumb(Exchange, ImplicitAPI):
|
|
136
142
|
},
|
137
143
|
},
|
138
144
|
'precisionMode': SIGNIFICANT_DIGITS,
|
145
|
+
# todo: update to v2 apis
|
146
|
+
'features': {
|
147
|
+
'spot': {
|
148
|
+
'sandbox': False,
|
149
|
+
'createOrder': {
|
150
|
+
'marginMode': False,
|
151
|
+
'triggerPrice': False,
|
152
|
+
'triggerPriceType': None,
|
153
|
+
'triggerDirection': False,
|
154
|
+
'stopLossPrice': False,
|
155
|
+
'takeProfitPrice': False,
|
156
|
+
'attachedStopLossTakeProfit': None,
|
157
|
+
'timeInForce': {
|
158
|
+
'IOC': False,
|
159
|
+
'FOK': False,
|
160
|
+
'PO': False,
|
161
|
+
'GTD': False,
|
162
|
+
},
|
163
|
+
'hedged': False,
|
164
|
+
'trailing': False,
|
165
|
+
'leverage': False,
|
166
|
+
'marketBuyRequiresPrice': False,
|
167
|
+
'marketBuyByCost': False,
|
168
|
+
'selfTradePrevention': False,
|
169
|
+
'iceberg': False,
|
170
|
+
},
|
171
|
+
'createOrders': None,
|
172
|
+
'fetchMyTrades': None,
|
173
|
+
'fetchOrder': {
|
174
|
+
'marginMode': False,
|
175
|
+
'trigger': False,
|
176
|
+
'trailing': False,
|
177
|
+
},
|
178
|
+
'fetchOpenOrders': {
|
179
|
+
'marginMode': False,
|
180
|
+
'limit': 1000,
|
181
|
+
'trigger': False,
|
182
|
+
'trailing': False,
|
183
|
+
},
|
184
|
+
'fetchOrders': None,
|
185
|
+
'fetchClosedOrders': None,
|
186
|
+
'fetchOHLCV': {
|
187
|
+
'limit': 1000,
|
188
|
+
},
|
189
|
+
},
|
190
|
+
'swap': {
|
191
|
+
'linear': None,
|
192
|
+
'inverse': None,
|
193
|
+
},
|
194
|
+
'future': {
|
195
|
+
'linear': None,
|
196
|
+
'inverse': None,
|
197
|
+
},
|
198
|
+
},
|
139
199
|
'exceptions': {
|
140
200
|
'Bad Request(SSL)': BadRequest,
|
141
201
|
'Bad Request(Bad Method)': BadRequest,
|
@@ -189,7 +249,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
189
249
|
},
|
190
250
|
})
|
191
251
|
|
192
|
-
def safe_market(self, marketId=None, market=None, delimiter=None, marketType=None):
|
252
|
+
def safe_market(self, marketId: Str = None, market: Market = None, delimiter: Str = None, marketType: Str = None) -> MarketInterface:
|
193
253
|
# bithumb has a different type of conflict in markets, because
|
194
254
|
# their ids are the base currency(BTC for instance), so we can have
|
195
255
|
# multiple "BTC" ids representing the different markets(BTC/ETH, "BTC/DOGE", etc)
|
@@ -199,25 +259,66 @@ class bithumb(Exchange, ImplicitAPI):
|
|
199
259
|
def amount_to_precision(self, symbol, amount):
|
200
260
|
return self.decimal_to_precision(amount, TRUNCATE, self.markets[symbol]['precision']['amount'], DECIMAL_PLACES)
|
201
261
|
|
202
|
-
async def fetch_markets(self, params={}):
|
262
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
203
263
|
"""
|
204
264
|
retrieves data on all markets for bithumb
|
205
|
-
|
265
|
+
|
266
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all
|
267
|
+
|
206
268
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
207
269
|
:returns dict[]: an array of objects representing market data
|
208
270
|
"""
|
209
271
|
result = []
|
210
|
-
quoteCurrencies = self.
|
272
|
+
quoteCurrencies = self.safe_dict(self.options, 'quoteCurrencies', {})
|
211
273
|
quotes = list(quoteCurrencies.keys())
|
274
|
+
promises = []
|
212
275
|
for i in range(0, len(quotes)):
|
213
|
-
quote = quotes[i]
|
214
|
-
quoteId = quote
|
215
|
-
extension = self.safe_value(quoteCurrencies, quote, {})
|
216
276
|
request = {
|
217
|
-
'quoteId':
|
277
|
+
'quoteId': quotes[i],
|
218
278
|
}
|
219
|
-
|
220
|
-
|
279
|
+
promises.append(self.publicGetTickerALLQuoteId(self.extend(request, params)))
|
280
|
+
#
|
281
|
+
# {
|
282
|
+
# "status": "0000",
|
283
|
+
# "data": {
|
284
|
+
# "ETH": {
|
285
|
+
# "opening_price": "0.05153399",
|
286
|
+
# "closing_price": "0.05145144",
|
287
|
+
# "min_price": "0.05145144",
|
288
|
+
# "max_price": "0.05160781",
|
289
|
+
# "units_traded": "6.541124172077830855",
|
290
|
+
# "acc_trade_value": "0.33705472498492329997697755",
|
291
|
+
# "prev_closing_price": "0.0515943",
|
292
|
+
# "units_traded_24H": "43.368879902677400513",
|
293
|
+
# "acc_trade_value_24H": "2.24165339555398079994373342",
|
294
|
+
# "fluctate_24H": "-0.00018203",
|
295
|
+
# "fluctate_rate_24H": "-0.35"
|
296
|
+
# },
|
297
|
+
# "XRP": {
|
298
|
+
# "opening_price": "0.00000918",
|
299
|
+
# "closing_price": "0.0000092",
|
300
|
+
# "min_price": "0.00000918",
|
301
|
+
# "max_price": "0.0000092",
|
302
|
+
# "units_traded": "6516.949363",
|
303
|
+
# "acc_trade_value": "0.0598792533602796",
|
304
|
+
# "prev_closing_price": "0.00000916",
|
305
|
+
# "units_traded_24H": "229161.50354738",
|
306
|
+
# "acc_trade_value_24H": "2.0446589371637117",
|
307
|
+
# "fluctate_24H": "0.00000049",
|
308
|
+
# "fluctate_rate_24H": "5.63"
|
309
|
+
# },
|
310
|
+
# ...
|
311
|
+
# "date": "1721675913145"
|
312
|
+
# }
|
313
|
+
# }
|
314
|
+
#
|
315
|
+
results = await asyncio.gather(*promises)
|
316
|
+
for i in range(0, len(quotes)):
|
317
|
+
quote = quotes[i]
|
318
|
+
quoteId = quote
|
319
|
+
response = results[i]
|
320
|
+
data = self.safe_dict(response, 'data')
|
321
|
+
extension = self.safe_dict(quoteCurrencies, quote, {})
|
221
322
|
currencyIds = list(data.keys())
|
222
323
|
for j in range(0, len(currencyIds)):
|
223
324
|
currencyId = currencyIds[j]
|
@@ -280,8 +381,8 @@ class bithumb(Exchange, ImplicitAPI):
|
|
280
381
|
return result
|
281
382
|
|
282
383
|
def parse_balance(self, response) -> Balances:
|
283
|
-
result = {'info': response}
|
284
|
-
balances = self.
|
384
|
+
result: dict = {'info': response}
|
385
|
+
balances = self.safe_dict(response, 'data')
|
285
386
|
codes = list(self.currencies.keys())
|
286
387
|
for i in range(0, len(codes)):
|
287
388
|
code = codes[i]
|
@@ -297,12 +398,14 @@ class bithumb(Exchange, ImplicitAPI):
|
|
297
398
|
async def fetch_balance(self, params={}) -> Balances:
|
298
399
|
"""
|
299
400
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
300
|
-
|
401
|
+
|
402
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EB%B3%B4%EC%9C%A0%EC%9E%90%EC%82%B0-%EC%A1%B0%ED%9A%8C
|
403
|
+
|
301
404
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
302
405
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
303
406
|
"""
|
304
407
|
await self.load_markets()
|
305
|
-
request = {
|
408
|
+
request: dict = {
|
306
409
|
'currency': 'ALL',
|
307
410
|
}
|
308
411
|
response = await self.privatePostInfoBalance(self.extend(request, params))
|
@@ -311,7 +414,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
311
414
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
312
415
|
"""
|
313
416
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
314
|
-
|
417
|
+
|
418
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
|
419
|
+
|
315
420
|
:param str symbol: unified symbol of the market to fetch the order book for
|
316
421
|
:param int [limit]: the maximum amount of order book entries to return
|
317
422
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -319,7 +424,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
319
424
|
"""
|
320
425
|
await self.load_markets()
|
321
426
|
market = self.market(symbol)
|
322
|
-
request = {
|
427
|
+
request: dict = {
|
323
428
|
'baseId': market['baseId'],
|
324
429
|
'quoteId': market['quoteId'],
|
325
430
|
}
|
@@ -346,11 +451,11 @@ class bithumb(Exchange, ImplicitAPI):
|
|
346
451
|
# }
|
347
452
|
# }
|
348
453
|
#
|
349
|
-
data = self.
|
454
|
+
data = self.safe_dict(response, 'data', {})
|
350
455
|
timestamp = self.safe_integer(data, 'timestamp')
|
351
456
|
return self.parse_order_book(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity')
|
352
457
|
|
353
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
458
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
354
459
|
#
|
355
460
|
# fetchTicker, fetchTickers
|
356
461
|
#
|
@@ -401,22 +506,27 @@ class bithumb(Exchange, ImplicitAPI):
|
|
401
506
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
402
507
|
"""
|
403
508
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
404
|
-
|
509
|
+
|
510
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C-all
|
511
|
+
|
405
512
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
406
513
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
407
514
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
408
515
|
"""
|
409
516
|
await self.load_markets()
|
410
|
-
result = {}
|
411
|
-
quoteCurrencies = self.
|
517
|
+
result: dict = {}
|
518
|
+
quoteCurrencies = self.safe_dict(self.options, 'quoteCurrencies', {})
|
412
519
|
quotes = list(quoteCurrencies.keys())
|
520
|
+
promises = []
|
413
521
|
for i in range(0, len(quotes)):
|
414
|
-
|
415
|
-
|
416
|
-
request = {
|
417
|
-
'quoteId': quoteId,
|
522
|
+
request: dict = {
|
523
|
+
'quoteId': quotes[i],
|
418
524
|
}
|
419
|
-
|
525
|
+
promises.append(self.publicGetTickerALLQuoteId(self.extend(request, params)))
|
526
|
+
responses = await asyncio.gather(*promises)
|
527
|
+
for i in range(0, len(quotes)):
|
528
|
+
quote = quotes[i]
|
529
|
+
response = responses[i]
|
420
530
|
#
|
421
531
|
# {
|
422
532
|
# "status":"0000",
|
@@ -438,7 +548,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
438
548
|
# }
|
439
549
|
# }
|
440
550
|
#
|
441
|
-
data = self.
|
551
|
+
data = self.safe_dict(response, 'data', {})
|
442
552
|
timestamp = self.safe_integer(data, 'date')
|
443
553
|
tickers = self.omit(data, 'date')
|
444
554
|
currencyIds = list(tickers.keys())
|
@@ -455,14 +565,16 @@ class bithumb(Exchange, ImplicitAPI):
|
|
455
565
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
456
566
|
"""
|
457
567
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
458
|
-
|
568
|
+
|
569
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
|
570
|
+
|
459
571
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
460
572
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
461
573
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
462
574
|
"""
|
463
575
|
await self.load_markets()
|
464
576
|
market = self.market(symbol)
|
465
|
-
request = {
|
577
|
+
request: dict = {
|
466
578
|
'baseId': market['baseId'],
|
467
579
|
'quoteId': market['quoteId'],
|
468
580
|
}
|
@@ -486,7 +598,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
486
598
|
# }
|
487
599
|
# }
|
488
600
|
#
|
489
|
-
data = self.
|
601
|
+
data = self.safe_dict(response, 'data', {})
|
490
602
|
return self.parse_ticker(data, market)
|
491
603
|
|
492
604
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -512,7 +624,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
512
624
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
513
625
|
"""
|
514
626
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
515
|
-
|
627
|
+
|
628
|
+
https://apidocs.bithumb.com/v1.2.0/reference/candlestick-rest-api
|
629
|
+
|
516
630
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
517
631
|
:param str timeframe: the length of time each candle represents
|
518
632
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -522,7 +636,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
522
636
|
"""
|
523
637
|
await self.load_markets()
|
524
638
|
market = self.market(symbol)
|
525
|
-
request = {
|
639
|
+
request: dict = {
|
526
640
|
'baseId': market['baseId'],
|
527
641
|
'quoteId': market['quoteId'],
|
528
642
|
'interval': self.safe_string(self.timeframes, timeframe, timeframe),
|
@@ -551,10 +665,10 @@ class bithumb(Exchange, ImplicitAPI):
|
|
551
665
|
# }
|
552
666
|
# }
|
553
667
|
#
|
554
|
-
data = self.
|
668
|
+
data = self.safe_list(response, 'data', [])
|
555
669
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
556
670
|
|
557
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
671
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
558
672
|
#
|
559
673
|
# fetchTrades(public)
|
560
674
|
#
|
@@ -629,7 +743,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
629
743
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
630
744
|
"""
|
631
745
|
get the list of most recent trades for a particular symbol
|
632
|
-
|
746
|
+
|
747
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EC%B5%9C%EA%B7%BC-%EC%B2%B4%EA%B2%B0-%EB%82%B4%EC%97%AD
|
748
|
+
|
633
749
|
:param str symbol: unified symbol of the market to fetch trades for
|
634
750
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
635
751
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -638,7 +754,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
638
754
|
"""
|
639
755
|
await self.load_markets()
|
640
756
|
market = self.market(symbol)
|
641
|
-
request = {
|
757
|
+
request: dict = {
|
642
758
|
'baseId': market['baseId'],
|
643
759
|
'quoteId': market['quoteId'],
|
644
760
|
}
|
@@ -659,26 +775,28 @@ class bithumb(Exchange, ImplicitAPI):
|
|
659
775
|
# ]
|
660
776
|
# }
|
661
777
|
#
|
662
|
-
data = self.
|
778
|
+
data = self.safe_list(response, 'data', [])
|
663
779
|
return self.parse_trades(data, market, since, limit)
|
664
780
|
|
665
781
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
666
782
|
"""
|
667
783
|
create a trade order
|
668
|
-
|
669
|
-
|
670
|
-
|
784
|
+
|
785
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EC%A7%80%EC%A0%95%EA%B0%80-%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
|
786
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EC%8B%9C%EC%9E%A5%EA%B0%80-%EB%A7%A4%EC%88%98%ED%95%98%EA%B8%B0
|
787
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EC%8B%9C%EC%9E%A5%EA%B0%80-%EB%A7%A4%EB%8F%84%ED%95%98%EA%B8%B0
|
788
|
+
|
671
789
|
:param str symbol: unified symbol of the market to create an order in
|
672
790
|
:param str type: 'market' or 'limit'
|
673
791
|
:param str side: 'buy' or 'sell'
|
674
792
|
:param float amount: how much of currency you want to trade in units of base currency
|
675
|
-
:param float [price]: the price at which the order is to be
|
793
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
676
794
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
677
795
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
678
796
|
"""
|
679
797
|
await self.load_markets()
|
680
798
|
market = self.market(symbol)
|
681
|
-
request = {
|
799
|
+
request: dict = {
|
682
800
|
'order_currency': market['id'],
|
683
801
|
'payment_currency': market['quote'],
|
684
802
|
'units': amount,
|
@@ -704,7 +822,10 @@ class bithumb(Exchange, ImplicitAPI):
|
|
704
822
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
705
823
|
"""
|
706
824
|
fetches information on an order made by the user
|
707
|
-
|
825
|
+
|
826
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EA%B1%B0%EB%9E%98-%EC%A3%BC%EB%AC%B8%EB%82%B4%EC%97%AD-%EC%83%81%EC%84%B8-%EC%A1%B0%ED%9A%8C
|
827
|
+
|
828
|
+
:param str id: order id
|
708
829
|
:param str symbol: unified symbol of the market the order was made in
|
709
830
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
710
831
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -713,7 +834,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
713
834
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
714
835
|
await self.load_markets()
|
715
836
|
market = self.market(symbol)
|
716
|
-
request = {
|
837
|
+
request: dict = {
|
717
838
|
'order_id': id,
|
718
839
|
'count': 1,
|
719
840
|
'order_currency': market['base'],
|
@@ -747,18 +868,18 @@ class bithumb(Exchange, ImplicitAPI):
|
|
747
868
|
# }
|
748
869
|
# }
|
749
870
|
#
|
750
|
-
data = self.
|
871
|
+
data = self.safe_dict(response, 'data')
|
751
872
|
return self.parse_order(self.extend(data, {'order_id': id}), market)
|
752
873
|
|
753
|
-
def parse_order_status(self, status):
|
754
|
-
statuses = {
|
874
|
+
def parse_order_status(self, status: Str):
|
875
|
+
statuses: dict = {
|
755
876
|
'Pending': 'open',
|
756
877
|
'Completed': 'closed',
|
757
878
|
'Cancel': 'canceled',
|
758
879
|
}
|
759
880
|
return self.safe_string(statuses, status, status)
|
760
881
|
|
761
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
882
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
762
883
|
#
|
763
884
|
#
|
764
885
|
# fetchOrder
|
@@ -800,7 +921,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
800
921
|
# }
|
801
922
|
#
|
802
923
|
timestamp = self.safe_integer_product(order, 'order_date', 0.001)
|
803
|
-
sideProperty = self.
|
924
|
+
sideProperty = self.safe_string_2(order, 'type', 'side')
|
804
925
|
side = 'buy' if (sideProperty == 'bid') else 'sell'
|
805
926
|
status = self.parse_order_status(self.safe_string(order, 'order_status'))
|
806
927
|
price = self.safe_string_2(order, 'order_price', 'price')
|
@@ -825,7 +946,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
825
946
|
market = self.safe_market(None, market)
|
826
947
|
symbol = market['symbol']
|
827
948
|
id = self.safe_string(order, 'order_id')
|
828
|
-
rawTrades = self.
|
949
|
+
rawTrades = self.safe_list(order, 'contract', [])
|
829
950
|
return self.safe_order({
|
830
951
|
'info': order,
|
831
952
|
'id': id,
|
@@ -839,7 +960,6 @@ class bithumb(Exchange, ImplicitAPI):
|
|
839
960
|
'postOnly': None,
|
840
961
|
'side': side,
|
841
962
|
'price': price,
|
842
|
-
'stopPrice': None,
|
843
963
|
'triggerPrice': None,
|
844
964
|
'amount': amount,
|
845
965
|
'cost': None,
|
@@ -854,7 +974,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
854
974
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
855
975
|
"""
|
856
976
|
fetch all unfilled currently open orders
|
857
|
-
|
977
|
+
|
978
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EA%B1%B0%EB%9E%98-%EC%A3%BC%EB%AC%B8%EB%82%B4%EC%97%AD-%EC%A1%B0%ED%9A%8C
|
979
|
+
|
858
980
|
:param str symbol: unified market symbol
|
859
981
|
:param int [since]: the earliest time in ms to fetch open orders for
|
860
982
|
:param int [limit]: the maximum number of open order structures to retrieve
|
@@ -867,7 +989,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
867
989
|
market = self.market(symbol)
|
868
990
|
if limit is None:
|
869
991
|
limit = 100
|
870
|
-
request = {
|
992
|
+
request: dict = {
|
871
993
|
'count': limit,
|
872
994
|
'order_currency': market['base'],
|
873
995
|
'payment_currency': market['quote'],
|
@@ -892,13 +1014,15 @@ class bithumb(Exchange, ImplicitAPI):
|
|
892
1014
|
# ]
|
893
1015
|
# }
|
894
1016
|
#
|
895
|
-
data = self.
|
1017
|
+
data = self.safe_list(response, 'data', [])
|
896
1018
|
return self.parse_orders(data, market, since, limit)
|
897
1019
|
|
898
1020
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
899
1021
|
"""
|
900
1022
|
cancels an open order
|
901
|
-
|
1023
|
+
|
1024
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C%ED%95%98%EA%B8%B0
|
1025
|
+
|
902
1026
|
:param str id: order id
|
903
1027
|
:param str symbol: unified symbol of the market the order was made in
|
904
1028
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -913,24 +1037,34 @@ class bithumb(Exchange, ImplicitAPI):
|
|
913
1037
|
side = 'bid' if (params['side'] == 'buy') else 'ask'
|
914
1038
|
params = self.omit(params, ['side', 'currency'])
|
915
1039
|
# https://github.com/ccxt/ccxt/issues/6771
|
916
|
-
request = {
|
1040
|
+
request: dict = {
|
917
1041
|
'order_id': id,
|
918
1042
|
'type': side,
|
919
1043
|
'order_currency': market['base'],
|
920
1044
|
'payment_currency': market['quote'],
|
921
1045
|
}
|
922
|
-
|
1046
|
+
response = await self.privatePostTradeCancel(self.extend(request, params))
|
1047
|
+
#
|
1048
|
+
# {
|
1049
|
+
# 'status': 'string',
|
1050
|
+
# }
|
1051
|
+
#
|
1052
|
+
return self.safe_order({
|
1053
|
+
'info': response,
|
1054
|
+
})
|
923
1055
|
|
924
1056
|
async def cancel_unified_order(self, order, params={}):
|
925
|
-
request = {
|
1057
|
+
request: dict = {
|
926
1058
|
'side': order['side'],
|
927
1059
|
}
|
928
1060
|
return await self.cancel_order(order['id'], order['symbol'], self.extend(request, params))
|
929
1061
|
|
930
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1062
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
931
1063
|
"""
|
932
1064
|
make a withdrawal
|
933
|
-
|
1065
|
+
|
1066
|
+
https://apidocs.bithumb.com/v1.2.0/reference/%EC%BD%94%EC%9D%B8-%EC%B6%9C%EA%B8%88%ED%95%98%EA%B8%B0-%EA%B0%9C%EC%9D%B8
|
1067
|
+
|
934
1068
|
:param str code: unified currency code
|
935
1069
|
:param float amount: the amount to withdraw
|
936
1070
|
:param str address: the address to withdraw to
|
@@ -942,12 +1076,12 @@ class bithumb(Exchange, ImplicitAPI):
|
|
942
1076
|
self.check_address(address)
|
943
1077
|
await self.load_markets()
|
944
1078
|
currency = self.currency(code)
|
945
|
-
request = {
|
1079
|
+
request: dict = {
|
946
1080
|
'units': amount,
|
947
1081
|
'address': address,
|
948
1082
|
'currency': currency['id'],
|
949
1083
|
}
|
950
|
-
if code == 'XRP' or code == 'XMR' or code == 'EOS' or code == 'STEEM':
|
1084
|
+
if code == 'XRP' or code == 'XMR' or code == 'EOS' or code == 'STEEM' or code == 'TON':
|
951
1085
|
destination = self.safe_string(params, 'destination')
|
952
1086
|
if (tag is None) and (destination is None):
|
953
1087
|
raise ArgumentsRequired(self.id + ' ' + code + ' withdraw() requires a tag argument or an extra destination param')
|
@@ -959,7 +1093,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
959
1093
|
#
|
960
1094
|
return self.parse_transaction(response, currency)
|
961
1095
|
|
962
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1096
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
963
1097
|
#
|
964
1098
|
# withdraw
|
965
1099
|
#
|
@@ -1026,7 +1160,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
1026
1160
|
}
|
1027
1161
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1028
1162
|
|
1029
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1163
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1030
1164
|
if response is None:
|
1031
1165
|
return None # fallback to default error handler
|
1032
1166
|
if 'status' in response:
|