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/bithumb.py
CHANGED
@@ -6,16 +6,16 @@
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.bithumb import ImplicitAPI
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
9
|
+
from ccxt.base.types import Balances, Currency, Int, Market, MarketInterface, 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
|
15
16
|
from ccxt.base.errors import InvalidAddress
|
16
17
|
from ccxt.base.errors import InvalidOrder
|
17
18
|
from ccxt.base.errors import ExchangeNotAvailable
|
18
|
-
from ccxt.base.errors import AuthenticationError
|
19
19
|
from ccxt.base.decimal_to_precision import TRUNCATE
|
20
20
|
from ccxt.base.decimal_to_precision import DECIMAL_PLACES
|
21
21
|
from ccxt.base.decimal_to_precision import SIGNIFICANT_DIGITS
|
@@ -30,6 +30,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
30
30
|
'name': 'Bithumb',
|
31
31
|
'countries': ['KR'], # South Korea
|
32
32
|
'rateLimit': 500,
|
33
|
+
'pro': True,
|
33
34
|
'has': {
|
34
35
|
'CORS': True,
|
35
36
|
'spot': True,
|
@@ -65,7 +66,11 @@ class bithumb(Exchange, ImplicitAPI):
|
|
65
66
|
'fetchOrder': True,
|
66
67
|
'fetchOrderBook': True,
|
67
68
|
'fetchPosition': False,
|
69
|
+
'fetchPositionHistory': False,
|
70
|
+
'fetchPositionMode': False,
|
68
71
|
'fetchPositions': False,
|
72
|
+
'fetchPositionsForSymbol': False,
|
73
|
+
'fetchPositionsHistory': False,
|
69
74
|
'fetchPositionsRisk': False,
|
70
75
|
'fetchPremiumIndexOHLCV': False,
|
71
76
|
'fetchTicker': True,
|
@@ -82,7 +87,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
82
87
|
},
|
83
88
|
'hostname': 'bithumb.com',
|
84
89
|
'urls': {
|
85
|
-
'logo': 'https://
|
90
|
+
'logo': 'https://github.com/user-attachments/assets/c9e0eefb-4777-46b9-8f09-9d7f7c4af82d',
|
86
91
|
'api': {
|
87
92
|
'public': 'https://api.{hostname}/public',
|
88
93
|
'private': 'https://api.{hostname}',
|
@@ -136,6 +141,60 @@ class bithumb(Exchange, ImplicitAPI):
|
|
136
141
|
},
|
137
142
|
},
|
138
143
|
'precisionMode': SIGNIFICANT_DIGITS,
|
144
|
+
# todo: update to v2 apis
|
145
|
+
'features': {
|
146
|
+
'spot': {
|
147
|
+
'sandbox': False,
|
148
|
+
'createOrder': {
|
149
|
+
'marginMode': False,
|
150
|
+
'triggerPrice': False,
|
151
|
+
'triggerPriceType': None,
|
152
|
+
'triggerDirection': False,
|
153
|
+
'stopLossPrice': False,
|
154
|
+
'takeProfitPrice': False,
|
155
|
+
'attachedStopLossTakeProfit': None,
|
156
|
+
'timeInForce': {
|
157
|
+
'IOC': False,
|
158
|
+
'FOK': False,
|
159
|
+
'PO': False,
|
160
|
+
'GTD': False,
|
161
|
+
},
|
162
|
+
'hedged': False,
|
163
|
+
'trailing': False,
|
164
|
+
'leverage': False,
|
165
|
+
'marketBuyRequiresPrice': False,
|
166
|
+
'marketBuyByCost': False,
|
167
|
+
'selfTradePrevention': False,
|
168
|
+
'iceberg': False,
|
169
|
+
},
|
170
|
+
'createOrders': None,
|
171
|
+
'fetchMyTrades': None,
|
172
|
+
'fetchOrder': {
|
173
|
+
'marginMode': False,
|
174
|
+
'trigger': False,
|
175
|
+
'trailing': False,
|
176
|
+
},
|
177
|
+
'fetchOpenOrders': {
|
178
|
+
'marginMode': False,
|
179
|
+
'limit': 1000,
|
180
|
+
'trigger': False,
|
181
|
+
'trailing': False,
|
182
|
+
},
|
183
|
+
'fetchOrders': None,
|
184
|
+
'fetchClosedOrders': None,
|
185
|
+
'fetchOHLCV': {
|
186
|
+
'limit': 1000,
|
187
|
+
},
|
188
|
+
},
|
189
|
+
'swap': {
|
190
|
+
'linear': None,
|
191
|
+
'inverse': None,
|
192
|
+
},
|
193
|
+
'future': {
|
194
|
+
'linear': None,
|
195
|
+
'inverse': None,
|
196
|
+
},
|
197
|
+
},
|
139
198
|
'exceptions': {
|
140
199
|
'Bad Request(SSL)': BadRequest,
|
141
200
|
'Bad Request(Bad Method)': BadRequest,
|
@@ -189,7 +248,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
189
248
|
},
|
190
249
|
})
|
191
250
|
|
192
|
-
def safe_market(self, marketId=None, market=None, delimiter=None, marketType=None):
|
251
|
+
def safe_market(self, marketId: Str = None, market: Market = None, delimiter: Str = None, marketType: Str = None) -> MarketInterface:
|
193
252
|
# bithumb has a different type of conflict in markets, because
|
194
253
|
# their ids are the base currency(BTC for instance), so we can have
|
195
254
|
# multiple "BTC" ids representing the different markets(BTC/ETH, "BTC/DOGE", etc)
|
@@ -199,25 +258,66 @@ class bithumb(Exchange, ImplicitAPI):
|
|
199
258
|
def amount_to_precision(self, symbol, amount):
|
200
259
|
return self.decimal_to_precision(amount, TRUNCATE, self.markets[symbol]['precision']['amount'], DECIMAL_PLACES)
|
201
260
|
|
202
|
-
def fetch_markets(self, params={}):
|
261
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
203
262
|
"""
|
204
263
|
retrieves data on all markets for bithumb
|
205
|
-
|
264
|
+
|
265
|
+
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
|
266
|
+
|
206
267
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
207
268
|
:returns dict[]: an array of objects representing market data
|
208
269
|
"""
|
209
270
|
result = []
|
210
|
-
quoteCurrencies = self.
|
271
|
+
quoteCurrencies = self.safe_dict(self.options, 'quoteCurrencies', {})
|
211
272
|
quotes = list(quoteCurrencies.keys())
|
273
|
+
promises = []
|
212
274
|
for i in range(0, len(quotes)):
|
213
|
-
quote = quotes[i]
|
214
|
-
quoteId = quote
|
215
|
-
extension = self.safe_value(quoteCurrencies, quote, {})
|
216
275
|
request = {
|
217
|
-
'quoteId':
|
276
|
+
'quoteId': quotes[i],
|
218
277
|
}
|
219
|
-
|
220
|
-
|
278
|
+
promises.append(self.publicGetTickerALLQuoteId(self.extend(request, params)))
|
279
|
+
#
|
280
|
+
# {
|
281
|
+
# "status": "0000",
|
282
|
+
# "data": {
|
283
|
+
# "ETH": {
|
284
|
+
# "opening_price": "0.05153399",
|
285
|
+
# "closing_price": "0.05145144",
|
286
|
+
# "min_price": "0.05145144",
|
287
|
+
# "max_price": "0.05160781",
|
288
|
+
# "units_traded": "6.541124172077830855",
|
289
|
+
# "acc_trade_value": "0.33705472498492329997697755",
|
290
|
+
# "prev_closing_price": "0.0515943",
|
291
|
+
# "units_traded_24H": "43.368879902677400513",
|
292
|
+
# "acc_trade_value_24H": "2.24165339555398079994373342",
|
293
|
+
# "fluctate_24H": "-0.00018203",
|
294
|
+
# "fluctate_rate_24H": "-0.35"
|
295
|
+
# },
|
296
|
+
# "XRP": {
|
297
|
+
# "opening_price": "0.00000918",
|
298
|
+
# "closing_price": "0.0000092",
|
299
|
+
# "min_price": "0.00000918",
|
300
|
+
# "max_price": "0.0000092",
|
301
|
+
# "units_traded": "6516.949363",
|
302
|
+
# "acc_trade_value": "0.0598792533602796",
|
303
|
+
# "prev_closing_price": "0.00000916",
|
304
|
+
# "units_traded_24H": "229161.50354738",
|
305
|
+
# "acc_trade_value_24H": "2.0446589371637117",
|
306
|
+
# "fluctate_24H": "0.00000049",
|
307
|
+
# "fluctate_rate_24H": "5.63"
|
308
|
+
# },
|
309
|
+
# ...
|
310
|
+
# "date": "1721675913145"
|
311
|
+
# }
|
312
|
+
# }
|
313
|
+
#
|
314
|
+
results = promises
|
315
|
+
for i in range(0, len(quotes)):
|
316
|
+
quote = quotes[i]
|
317
|
+
quoteId = quote
|
318
|
+
response = results[i]
|
319
|
+
data = self.safe_dict(response, 'data')
|
320
|
+
extension = self.safe_dict(quoteCurrencies, quote, {})
|
221
321
|
currencyIds = list(data.keys())
|
222
322
|
for j in range(0, len(currencyIds)):
|
223
323
|
currencyId = currencyIds[j]
|
@@ -280,8 +380,8 @@ class bithumb(Exchange, ImplicitAPI):
|
|
280
380
|
return result
|
281
381
|
|
282
382
|
def parse_balance(self, response) -> Balances:
|
283
|
-
result = {'info': response}
|
284
|
-
balances = self.
|
383
|
+
result: dict = {'info': response}
|
384
|
+
balances = self.safe_dict(response, 'data')
|
285
385
|
codes = list(self.currencies.keys())
|
286
386
|
for i in range(0, len(codes)):
|
287
387
|
code = codes[i]
|
@@ -297,12 +397,14 @@ class bithumb(Exchange, ImplicitAPI):
|
|
297
397
|
def fetch_balance(self, params={}) -> Balances:
|
298
398
|
"""
|
299
399
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
300
|
-
|
400
|
+
|
401
|
+
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
|
402
|
+
|
301
403
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
302
404
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
303
405
|
"""
|
304
406
|
self.load_markets()
|
305
|
-
request = {
|
407
|
+
request: dict = {
|
306
408
|
'currency': 'ALL',
|
307
409
|
}
|
308
410
|
response = self.privatePostInfoBalance(self.extend(request, params))
|
@@ -311,7 +413,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
311
413
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
312
414
|
"""
|
313
415
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
314
|
-
|
416
|
+
|
417
|
+
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
|
418
|
+
|
315
419
|
:param str symbol: unified symbol of the market to fetch the order book for
|
316
420
|
:param int [limit]: the maximum amount of order book entries to return
|
317
421
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -319,7 +423,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
319
423
|
"""
|
320
424
|
self.load_markets()
|
321
425
|
market = self.market(symbol)
|
322
|
-
request = {
|
426
|
+
request: dict = {
|
323
427
|
'baseId': market['baseId'],
|
324
428
|
'quoteId': market['quoteId'],
|
325
429
|
}
|
@@ -346,11 +450,11 @@ class bithumb(Exchange, ImplicitAPI):
|
|
346
450
|
# }
|
347
451
|
# }
|
348
452
|
#
|
349
|
-
data = self.
|
453
|
+
data = self.safe_dict(response, 'data', {})
|
350
454
|
timestamp = self.safe_integer(data, 'timestamp')
|
351
455
|
return self.parse_order_book(data, symbol, timestamp, 'bids', 'asks', 'price', 'quantity')
|
352
456
|
|
353
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
457
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
354
458
|
#
|
355
459
|
# fetchTicker, fetchTickers
|
356
460
|
#
|
@@ -401,22 +505,27 @@ class bithumb(Exchange, ImplicitAPI):
|
|
401
505
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
402
506
|
"""
|
403
507
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
404
|
-
|
508
|
+
|
509
|
+
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
|
510
|
+
|
405
511
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
406
512
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
407
513
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
408
514
|
"""
|
409
515
|
self.load_markets()
|
410
|
-
result = {}
|
411
|
-
quoteCurrencies = self.
|
516
|
+
result: dict = {}
|
517
|
+
quoteCurrencies = self.safe_dict(self.options, 'quoteCurrencies', {})
|
412
518
|
quotes = list(quoteCurrencies.keys())
|
519
|
+
promises = []
|
413
520
|
for i in range(0, len(quotes)):
|
414
|
-
|
415
|
-
|
416
|
-
request = {
|
417
|
-
'quoteId': quoteId,
|
521
|
+
request: dict = {
|
522
|
+
'quoteId': quotes[i],
|
418
523
|
}
|
419
|
-
|
524
|
+
promises.append(self.publicGetTickerALLQuoteId(self.extend(request, params)))
|
525
|
+
responses = promises
|
526
|
+
for i in range(0, len(quotes)):
|
527
|
+
quote = quotes[i]
|
528
|
+
response = responses[i]
|
420
529
|
#
|
421
530
|
# {
|
422
531
|
# "status":"0000",
|
@@ -438,7 +547,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
438
547
|
# }
|
439
548
|
# }
|
440
549
|
#
|
441
|
-
data = self.
|
550
|
+
data = self.safe_dict(response, 'data', {})
|
442
551
|
timestamp = self.safe_integer(data, 'date')
|
443
552
|
tickers = self.omit(data, 'date')
|
444
553
|
currencyIds = list(tickers.keys())
|
@@ -455,14 +564,16 @@ class bithumb(Exchange, ImplicitAPI):
|
|
455
564
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
456
565
|
"""
|
457
566
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
458
|
-
|
567
|
+
|
568
|
+
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
|
569
|
+
|
459
570
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
460
571
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
461
572
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
462
573
|
"""
|
463
574
|
self.load_markets()
|
464
575
|
market = self.market(symbol)
|
465
|
-
request = {
|
576
|
+
request: dict = {
|
466
577
|
'baseId': market['baseId'],
|
467
578
|
'quoteId': market['quoteId'],
|
468
579
|
}
|
@@ -486,7 +597,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
486
597
|
# }
|
487
598
|
# }
|
488
599
|
#
|
489
|
-
data = self.
|
600
|
+
data = self.safe_dict(response, 'data', {})
|
490
601
|
return self.parse_ticker(data, market)
|
491
602
|
|
492
603
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -512,7 +623,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
512
623
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
513
624
|
"""
|
514
625
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
515
|
-
|
626
|
+
|
627
|
+
https://apidocs.bithumb.com/v1.2.0/reference/candlestick-rest-api
|
628
|
+
|
516
629
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
517
630
|
:param str timeframe: the length of time each candle represents
|
518
631
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -522,7 +635,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
522
635
|
"""
|
523
636
|
self.load_markets()
|
524
637
|
market = self.market(symbol)
|
525
|
-
request = {
|
638
|
+
request: dict = {
|
526
639
|
'baseId': market['baseId'],
|
527
640
|
'quoteId': market['quoteId'],
|
528
641
|
'interval': self.safe_string(self.timeframes, timeframe, timeframe),
|
@@ -551,10 +664,10 @@ class bithumb(Exchange, ImplicitAPI):
|
|
551
664
|
# }
|
552
665
|
# }
|
553
666
|
#
|
554
|
-
data = self.
|
667
|
+
data = self.safe_list(response, 'data', [])
|
555
668
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
556
669
|
|
557
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
670
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
558
671
|
#
|
559
672
|
# fetchTrades(public)
|
560
673
|
#
|
@@ -629,7 +742,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
629
742
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
630
743
|
"""
|
631
744
|
get the list of most recent trades for a particular symbol
|
632
|
-
|
745
|
+
|
746
|
+
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
|
747
|
+
|
633
748
|
:param str symbol: unified symbol of the market to fetch trades for
|
634
749
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
635
750
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -638,7 +753,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
638
753
|
"""
|
639
754
|
self.load_markets()
|
640
755
|
market = self.market(symbol)
|
641
|
-
request = {
|
756
|
+
request: dict = {
|
642
757
|
'baseId': market['baseId'],
|
643
758
|
'quoteId': market['quoteId'],
|
644
759
|
}
|
@@ -659,26 +774,28 @@ class bithumb(Exchange, ImplicitAPI):
|
|
659
774
|
# ]
|
660
775
|
# }
|
661
776
|
#
|
662
|
-
data = self.
|
777
|
+
data = self.safe_list(response, 'data', [])
|
663
778
|
return self.parse_trades(data, market, since, limit)
|
664
779
|
|
665
780
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
666
781
|
"""
|
667
782
|
create a trade order
|
668
|
-
|
669
|
-
|
670
|
-
|
783
|
+
|
784
|
+
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
|
785
|
+
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
|
786
|
+
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
|
787
|
+
|
671
788
|
:param str symbol: unified symbol of the market to create an order in
|
672
789
|
:param str type: 'market' or 'limit'
|
673
790
|
:param str side: 'buy' or 'sell'
|
674
791
|
: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
|
792
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
676
793
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
677
794
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
678
795
|
"""
|
679
796
|
self.load_markets()
|
680
797
|
market = self.market(symbol)
|
681
|
-
request = {
|
798
|
+
request: dict = {
|
682
799
|
'order_currency': market['id'],
|
683
800
|
'payment_currency': market['quote'],
|
684
801
|
'units': amount,
|
@@ -704,7 +821,10 @@ class bithumb(Exchange, ImplicitAPI):
|
|
704
821
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
705
822
|
"""
|
706
823
|
fetches information on an order made by the user
|
707
|
-
|
824
|
+
|
825
|
+
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
|
826
|
+
|
827
|
+
:param str id: order id
|
708
828
|
:param str symbol: unified symbol of the market the order was made in
|
709
829
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
710
830
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -713,7 +833,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
713
833
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
714
834
|
self.load_markets()
|
715
835
|
market = self.market(symbol)
|
716
|
-
request = {
|
836
|
+
request: dict = {
|
717
837
|
'order_id': id,
|
718
838
|
'count': 1,
|
719
839
|
'order_currency': market['base'],
|
@@ -747,18 +867,18 @@ class bithumb(Exchange, ImplicitAPI):
|
|
747
867
|
# }
|
748
868
|
# }
|
749
869
|
#
|
750
|
-
data = self.
|
870
|
+
data = self.safe_dict(response, 'data')
|
751
871
|
return self.parse_order(self.extend(data, {'order_id': id}), market)
|
752
872
|
|
753
|
-
def parse_order_status(self, status):
|
754
|
-
statuses = {
|
873
|
+
def parse_order_status(self, status: Str):
|
874
|
+
statuses: dict = {
|
755
875
|
'Pending': 'open',
|
756
876
|
'Completed': 'closed',
|
757
877
|
'Cancel': 'canceled',
|
758
878
|
}
|
759
879
|
return self.safe_string(statuses, status, status)
|
760
880
|
|
761
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
881
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
762
882
|
#
|
763
883
|
#
|
764
884
|
# fetchOrder
|
@@ -800,7 +920,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
800
920
|
# }
|
801
921
|
#
|
802
922
|
timestamp = self.safe_integer_product(order, 'order_date', 0.001)
|
803
|
-
sideProperty = self.
|
923
|
+
sideProperty = self.safe_string_2(order, 'type', 'side')
|
804
924
|
side = 'buy' if (sideProperty == 'bid') else 'sell'
|
805
925
|
status = self.parse_order_status(self.safe_string(order, 'order_status'))
|
806
926
|
price = self.safe_string_2(order, 'order_price', 'price')
|
@@ -825,7 +945,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
825
945
|
market = self.safe_market(None, market)
|
826
946
|
symbol = market['symbol']
|
827
947
|
id = self.safe_string(order, 'order_id')
|
828
|
-
rawTrades = self.
|
948
|
+
rawTrades = self.safe_list(order, 'contract', [])
|
829
949
|
return self.safe_order({
|
830
950
|
'info': order,
|
831
951
|
'id': id,
|
@@ -839,7 +959,6 @@ class bithumb(Exchange, ImplicitAPI):
|
|
839
959
|
'postOnly': None,
|
840
960
|
'side': side,
|
841
961
|
'price': price,
|
842
|
-
'stopPrice': None,
|
843
962
|
'triggerPrice': None,
|
844
963
|
'amount': amount,
|
845
964
|
'cost': None,
|
@@ -854,7 +973,9 @@ class bithumb(Exchange, ImplicitAPI):
|
|
854
973
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
855
974
|
"""
|
856
975
|
fetch all unfilled currently open orders
|
857
|
-
|
976
|
+
|
977
|
+
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
|
978
|
+
|
858
979
|
:param str symbol: unified market symbol
|
859
980
|
:param int [since]: the earliest time in ms to fetch open orders for
|
860
981
|
:param int [limit]: the maximum number of open order structures to retrieve
|
@@ -867,7 +988,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
867
988
|
market = self.market(symbol)
|
868
989
|
if limit is None:
|
869
990
|
limit = 100
|
870
|
-
request = {
|
991
|
+
request: dict = {
|
871
992
|
'count': limit,
|
872
993
|
'order_currency': market['base'],
|
873
994
|
'payment_currency': market['quote'],
|
@@ -892,13 +1013,15 @@ class bithumb(Exchange, ImplicitAPI):
|
|
892
1013
|
# ]
|
893
1014
|
# }
|
894
1015
|
#
|
895
|
-
data = self.
|
1016
|
+
data = self.safe_list(response, 'data', [])
|
896
1017
|
return self.parse_orders(data, market, since, limit)
|
897
1018
|
|
898
1019
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
899
1020
|
"""
|
900
1021
|
cancels an open order
|
901
|
-
|
1022
|
+
|
1023
|
+
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
|
1024
|
+
|
902
1025
|
:param str id: order id
|
903
1026
|
:param str symbol: unified symbol of the market the order was made in
|
904
1027
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -913,24 +1036,34 @@ class bithumb(Exchange, ImplicitAPI):
|
|
913
1036
|
side = 'bid' if (params['side'] == 'buy') else 'ask'
|
914
1037
|
params = self.omit(params, ['side', 'currency'])
|
915
1038
|
# https://github.com/ccxt/ccxt/issues/6771
|
916
|
-
request = {
|
1039
|
+
request: dict = {
|
917
1040
|
'order_id': id,
|
918
1041
|
'type': side,
|
919
1042
|
'order_currency': market['base'],
|
920
1043
|
'payment_currency': market['quote'],
|
921
1044
|
}
|
922
|
-
|
1045
|
+
response = self.privatePostTradeCancel(self.extend(request, params))
|
1046
|
+
#
|
1047
|
+
# {
|
1048
|
+
# 'status': 'string',
|
1049
|
+
# }
|
1050
|
+
#
|
1051
|
+
return self.safe_order({
|
1052
|
+
'info': response,
|
1053
|
+
})
|
923
1054
|
|
924
1055
|
def cancel_unified_order(self, order, params={}):
|
925
|
-
request = {
|
1056
|
+
request: dict = {
|
926
1057
|
'side': order['side'],
|
927
1058
|
}
|
928
1059
|
return self.cancel_order(order['id'], order['symbol'], self.extend(request, params))
|
929
1060
|
|
930
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1061
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
931
1062
|
"""
|
932
1063
|
make a withdrawal
|
933
|
-
|
1064
|
+
|
1065
|
+
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
|
1066
|
+
|
934
1067
|
:param str code: unified currency code
|
935
1068
|
:param float amount: the amount to withdraw
|
936
1069
|
:param str address: the address to withdraw to
|
@@ -942,12 +1075,12 @@ class bithumb(Exchange, ImplicitAPI):
|
|
942
1075
|
self.check_address(address)
|
943
1076
|
self.load_markets()
|
944
1077
|
currency = self.currency(code)
|
945
|
-
request = {
|
1078
|
+
request: dict = {
|
946
1079
|
'units': amount,
|
947
1080
|
'address': address,
|
948
1081
|
'currency': currency['id'],
|
949
1082
|
}
|
950
|
-
if code == 'XRP' or code == 'XMR' or code == 'EOS' or code == 'STEEM':
|
1083
|
+
if code == 'XRP' or code == 'XMR' or code == 'EOS' or code == 'STEEM' or code == 'TON':
|
951
1084
|
destination = self.safe_string(params, 'destination')
|
952
1085
|
if (tag is None) and (destination is None):
|
953
1086
|
raise ArgumentsRequired(self.id + ' ' + code + ' withdraw() requires a tag argument or an extra destination param')
|
@@ -959,7 +1092,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
959
1092
|
#
|
960
1093
|
return self.parse_transaction(response, currency)
|
961
1094
|
|
962
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1095
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
963
1096
|
#
|
964
1097
|
# withdraw
|
965
1098
|
#
|
@@ -1026,7 +1159,7 @@ class bithumb(Exchange, ImplicitAPI):
|
|
1026
1159
|
}
|
1027
1160
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1028
1161
|
|
1029
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1162
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1030
1163
|
if response is None:
|
1031
1164
|
return None # fallback to default error handler
|
1032
1165
|
if 'status' in response:
|