ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3205 -937
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +223 -97
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +143 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/upbit.py
CHANGED
@@ -5,17 +5,17 @@
|
|
5
5
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.upbit import ImplicitAPI
|
8
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
8
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction
|
9
9
|
from typing import List
|
10
10
|
from ccxt.base.errors import ExchangeError
|
11
|
+
from ccxt.base.errors import AuthenticationError
|
11
12
|
from ccxt.base.errors import PermissionDenied
|
12
13
|
from ccxt.base.errors import ArgumentsRequired
|
13
14
|
from ccxt.base.errors import BadRequest
|
14
15
|
from ccxt.base.errors import InsufficientFunds
|
16
|
+
from ccxt.base.errors import AddressPending
|
15
17
|
from ccxt.base.errors import InvalidOrder
|
16
18
|
from ccxt.base.errors import OrderNotFound
|
17
|
-
from ccxt.base.errors import AuthenticationError
|
18
|
-
from ccxt.base.errors import AddressPending
|
19
19
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
20
20
|
from ccxt.base.precise import Precise
|
21
21
|
|
@@ -51,6 +51,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
51
51
|
'fetchDeposit': True,
|
52
52
|
'fetchDepositAddress': True,
|
53
53
|
'fetchDepositAddresses': True,
|
54
|
+
'fetchDepositAddressesByNetwork': False,
|
54
55
|
'fetchDeposits': True,
|
55
56
|
'fetchFundingHistory': False,
|
56
57
|
'fetchFundingRate': False,
|
@@ -85,6 +86,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
85
86
|
'1m': 'minutes',
|
86
87
|
'3m': 'minutes',
|
87
88
|
'5m': 'minutes',
|
89
|
+
'10m': 'minutes',
|
88
90
|
'15m': 'minutes',
|
89
91
|
'30m': 'minutes',
|
90
92
|
'1h': 'minutes',
|
@@ -114,6 +116,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
114
116
|
'candles/minutes/1',
|
115
117
|
'candles/minutes/3',
|
116
118
|
'candles/minutes/5',
|
119
|
+
'candles/minutes/10',
|
117
120
|
'candles/minutes/15',
|
118
121
|
'candles/minutes/30',
|
119
122
|
'candles/minutes/60',
|
@@ -132,6 +135,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
132
135
|
'orders/chance',
|
133
136
|
'order',
|
134
137
|
'orders',
|
138
|
+
'orders/closed',
|
139
|
+
'orders/open',
|
140
|
+
'orders/uuids',
|
135
141
|
'withdraws',
|
136
142
|
'withdraw',
|
137
143
|
'withdraws/chance',
|
@@ -165,6 +171,67 @@ class upbit(Exchange, ImplicitAPI):
|
|
165
171
|
'deposit': {},
|
166
172
|
},
|
167
173
|
},
|
174
|
+
'features': {
|
175
|
+
'spot': {
|
176
|
+
'sandbox': False,
|
177
|
+
'createOrder': {
|
178
|
+
'marginMode': False,
|
179
|
+
'triggerPrice': False,
|
180
|
+
'triggerPriceType': None,
|
181
|
+
'triggerDirection': False,
|
182
|
+
'stopLossPrice': False,
|
183
|
+
'takeProfitPrice': False,
|
184
|
+
'attachedStopLossTakeProfit': None,
|
185
|
+
'timeInForce': {
|
186
|
+
'IOC': True,
|
187
|
+
'FOK': True,
|
188
|
+
'PO': False,
|
189
|
+
'GTD': False,
|
190
|
+
},
|
191
|
+
'hedged': False,
|
192
|
+
'leverage': False,
|
193
|
+
'marketBuyByCost': False,
|
194
|
+
'marketBuyRequiresPrice': False,
|
195
|
+
'selfTradePrevention': False,
|
196
|
+
'trailing': False,
|
197
|
+
'iceberg': False,
|
198
|
+
},
|
199
|
+
'createOrders': None,
|
200
|
+
'fetchMyTrades': None,
|
201
|
+
'fetchOrder': {
|
202
|
+
'marginMode': False,
|
203
|
+
'trigger': False,
|
204
|
+
'trailing': False,
|
205
|
+
},
|
206
|
+
'fetchOpenOrders': {
|
207
|
+
'marginMode': True,
|
208
|
+
'limit': 100,
|
209
|
+
'trigger': False,
|
210
|
+
'trailing': False,
|
211
|
+
},
|
212
|
+
'fetchOrders': None, # todo
|
213
|
+
'fetchClosedOrders': {
|
214
|
+
'marginMode': False,
|
215
|
+
'limit': 1000,
|
216
|
+
'daysBack': 100000,
|
217
|
+
'daysBackCanceled': 1,
|
218
|
+
'untilDays': 7,
|
219
|
+
'trigger': False,
|
220
|
+
'trailing': False,
|
221
|
+
},
|
222
|
+
'fetchOHLCV': {
|
223
|
+
'limit': 200,
|
224
|
+
},
|
225
|
+
},
|
226
|
+
'swap': {
|
227
|
+
'linear': None,
|
228
|
+
'inverse': None,
|
229
|
+
},
|
230
|
+
'future': {
|
231
|
+
'linear': None,
|
232
|
+
'inverse': None,
|
233
|
+
},
|
234
|
+
},
|
168
235
|
'precisionMode': TICK_SIZE,
|
169
236
|
'exceptions': {
|
170
237
|
'exact': {
|
@@ -208,7 +275,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
208
275
|
def fetch_currency_by_id(self, id: str, params={}):
|
209
276
|
# self method is for retrieving funding fees and limits per currency
|
210
277
|
# it requires private access and API keys properly set up
|
211
|
-
request = {
|
278
|
+
request: dict = {
|
212
279
|
'currency': id,
|
213
280
|
}
|
214
281
|
response = self.privateGetWithdrawsChance(self.extend(request, params))
|
@@ -302,7 +369,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
302
369
|
def fetch_market_by_id(self, id: str, params={}):
|
303
370
|
# self method is for retrieving trading fees and limits per market
|
304
371
|
# it requires private access and API keys properly set up
|
305
|
-
request = {
|
372
|
+
request: dict = {
|
306
373
|
'market': id,
|
307
374
|
}
|
308
375
|
response = self.privateGetOrdersChance(self.extend(request, params))
|
@@ -401,9 +468,11 @@ class upbit(Exchange, ImplicitAPI):
|
|
401
468
|
},
|
402
469
|
})
|
403
470
|
|
404
|
-
def fetch_markets(self, params={}):
|
471
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
405
472
|
"""
|
406
|
-
|
473
|
+
|
474
|
+
https://docs.upbit.com/reference/%EB%A7%88%EC%BC%93-%EC%BD%94%EB%93%9C-%EC%A1%B0%ED%9A%8C
|
475
|
+
|
407
476
|
retrieves data on all markets for upbit
|
408
477
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
409
478
|
:returns dict[]: an array of objects representing market data
|
@@ -421,7 +490,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
421
490
|
#
|
422
491
|
return self.parse_markets(response)
|
423
492
|
|
424
|
-
def parse_market(self, market) -> Market:
|
493
|
+
def parse_market(self, market: dict) -> Market:
|
425
494
|
id = self.safe_string(market, 'market')
|
426
495
|
quoteId, baseId = id.split('-')
|
427
496
|
base = self.safe_currency_code(baseId)
|
@@ -479,7 +548,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
479
548
|
})
|
480
549
|
|
481
550
|
def parse_balance(self, response) -> Balances:
|
482
|
-
result = {
|
551
|
+
result: dict = {
|
483
552
|
'info': response,
|
484
553
|
'timestamp': None,
|
485
554
|
'datetime': None,
|
@@ -496,7 +565,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
496
565
|
|
497
566
|
def fetch_balance(self, params={}) -> Balances:
|
498
567
|
"""
|
499
|
-
|
568
|
+
|
569
|
+
https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EA%B3%84%EC%A2%8C-%EC%A1%B0%ED%9A%8C
|
570
|
+
|
500
571
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
501
572
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
502
573
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
@@ -519,7 +590,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
519
590
|
|
520
591
|
def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
|
521
592
|
"""
|
522
|
-
|
593
|
+
|
594
|
+
https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
|
595
|
+
|
523
596
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
|
524
597
|
:param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
|
525
598
|
:param int [limit]: not used by upbit fetchOrderBooks()
|
@@ -537,7 +610,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
537
610
|
else:
|
538
611
|
ids = self.market_ids(symbols)
|
539
612
|
ids = ','.join(ids)
|
540
|
-
request = {
|
613
|
+
request: dict = {
|
541
614
|
'markets': ids,
|
542
615
|
}
|
543
616
|
response = self.publicGetOrderbook(self.extend(request, params))
|
@@ -569,7 +642,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
569
642
|
# "ask_size": 2.752,
|
570
643
|
# "bid_size": 0.4650305} ]} ]
|
571
644
|
#
|
572
|
-
result = {}
|
645
|
+
result: dict = {}
|
573
646
|
for i in range(0, len(response)):
|
574
647
|
orderbook = response[i]
|
575
648
|
marketId = self.safe_string(orderbook, 'market')
|
@@ -587,7 +660,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
587
660
|
|
588
661
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
589
662
|
"""
|
590
|
-
|
663
|
+
|
664
|
+
https://docs.upbit.com/reference/%ED%98%B8%EA%B0%80-%EC%A0%95%EB%B3%B4-%EC%A1%B0%ED%9A%8C
|
665
|
+
|
591
666
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
592
667
|
:param str symbol: unified symbol of the market to fetch the order book for
|
593
668
|
:param int [limit]: the maximum amount of order book entries to return
|
@@ -597,7 +672,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
597
672
|
orderbooks = self.fetch_order_books([symbol], limit, params)
|
598
673
|
return self.safe_value(orderbooks, symbol)
|
599
674
|
|
600
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
675
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
601
676
|
#
|
602
677
|
# { market: "BTC-ETH",
|
603
678
|
# "trade_date": "20181122",
|
@@ -655,7 +730,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
655
730
|
|
656
731
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
657
732
|
"""
|
658
|
-
|
733
|
+
|
734
|
+
https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
|
735
|
+
|
659
736
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
660
737
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
661
738
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -673,7 +750,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
673
750
|
else:
|
674
751
|
ids = self.market_ids(symbols)
|
675
752
|
ids = ','.join(ids)
|
676
|
-
request = {
|
753
|
+
request: dict = {
|
677
754
|
'markets': ids,
|
678
755
|
}
|
679
756
|
response = self.publicGetTicker(self.extend(request, params))
|
@@ -705,7 +782,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
705
782
|
# "lowest_52_week_date": "2017-12-08",
|
706
783
|
# "timestamp": 1542883543813 }]
|
707
784
|
#
|
708
|
-
result = {}
|
785
|
+
result: dict = {}
|
709
786
|
for t in range(0, len(response)):
|
710
787
|
ticker = self.parse_ticker(response[t])
|
711
788
|
symbol = ticker['symbol']
|
@@ -714,7 +791,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
714
791
|
|
715
792
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
716
793
|
"""
|
717
|
-
|
794
|
+
|
795
|
+
https://docs.upbit.com/reference/ticker%ED%98%84%EC%9E%AC%EA%B0%80-%EC%A0%95%EB%B3%B4
|
796
|
+
|
718
797
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
719
798
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
720
799
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -723,7 +802,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
723
802
|
tickers = self.fetch_tickers([symbol], params)
|
724
803
|
return self.safe_value(tickers, symbol)
|
725
804
|
|
726
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
805
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
727
806
|
#
|
728
807
|
# fetchTrades
|
729
808
|
#
|
@@ -793,7 +872,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
793
872
|
|
794
873
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
795
874
|
"""
|
796
|
-
|
875
|
+
|
876
|
+
https://docs.upbit.com/reference/%EC%B5%9C%EA%B7%BC-%EC%B2%B4%EA%B2%B0-%EB%82%B4%EC%97%AD
|
877
|
+
|
797
878
|
get the list of most recent trades for a particular symbol
|
798
879
|
:param str symbol: unified symbol of the market to fetch trades for
|
799
880
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
@@ -805,7 +886,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
805
886
|
market = self.market(symbol)
|
806
887
|
if limit is None:
|
807
888
|
limit = 200
|
808
|
-
request = {
|
889
|
+
request: dict = {
|
809
890
|
'market': market['id'],
|
810
891
|
'count': limit,
|
811
892
|
}
|
@@ -834,9 +915,11 @@ class upbit(Exchange, ImplicitAPI):
|
|
834
915
|
#
|
835
916
|
return self.parse_trades(response, market, since, limit)
|
836
917
|
|
837
|
-
def fetch_trading_fee(self, symbol: str, params={}):
|
918
|
+
def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
838
919
|
"""
|
839
|
-
|
920
|
+
|
921
|
+
https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EA%B0%80%EB%8A%A5-%EC%A0%95%EB%B3%B4
|
922
|
+
|
840
923
|
fetch the trading fees for a market
|
841
924
|
:param str symbol: unified market symbol
|
842
925
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -844,7 +927,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
844
927
|
"""
|
845
928
|
self.load_markets()
|
846
929
|
market = self.market(symbol)
|
847
|
-
request = {
|
930
|
+
request: dict = {
|
848
931
|
'market': market['id'],
|
849
932
|
}
|
850
933
|
response = self.privateGetOrdersChance(self.extend(request, params))
|
@@ -924,7 +1007,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
924
1007
|
|
925
1008
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
926
1009
|
"""
|
927
|
-
|
1010
|
+
|
1011
|
+
https://docs.upbit.com/reference/%EB%B6%84minute-%EC%BA%94%EB%93%A4-1
|
1012
|
+
|
928
1013
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
929
1014
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
930
1015
|
:param str timeframe: the length of time each candle represents
|
@@ -939,7 +1024,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
939
1024
|
timeframeValue = self.safe_string(self.timeframes, timeframe, timeframe)
|
940
1025
|
if limit is None:
|
941
1026
|
limit = 200
|
942
|
-
request = {
|
1027
|
+
request: dict = {
|
943
1028
|
'market': market['id'],
|
944
1029
|
'timeframe': timeframeValue,
|
945
1030
|
'count': limit,
|
@@ -989,13 +1074,15 @@ class upbit(Exchange, ImplicitAPI):
|
|
989
1074
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
990
1075
|
"""
|
991
1076
|
create a trade order
|
992
|
-
|
993
|
-
|
1077
|
+
|
1078
|
+
https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8%ED%95%98%EA%B8%B0
|
1079
|
+
https://global-docs.upbit.com/reference/order
|
1080
|
+
|
994
1081
|
:param str symbol: unified symbol of the market to create an order in
|
995
1082
|
:param str type: 'market' or 'limit'
|
996
1083
|
:param str side: 'buy' or 'sell'
|
997
1084
|
:param float amount: how much you want to trade in units of the base currency
|
998
|
-
:param float [price]: the price at which the order is to be
|
1085
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
999
1086
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1000
1087
|
:param float [params.cost]: for market buy orders, the quote quantity that can be used alternative for the amount
|
1001
1088
|
:param str [params.timeInForce]: 'IOC' or 'FOK'
|
@@ -1010,7 +1097,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1010
1097
|
orderSide = 'ask'
|
1011
1098
|
else:
|
1012
1099
|
raise InvalidOrder(self.id + ' createOrder() allows buy or sell side only!')
|
1013
|
-
request = {
|
1100
|
+
request: dict = {
|
1014
1101
|
'market': market['id'],
|
1015
1102
|
'side': orderSide,
|
1016
1103
|
}
|
@@ -1074,7 +1161,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
1074
1161
|
|
1075
1162
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1076
1163
|
"""
|
1077
|
-
|
1164
|
+
|
1165
|
+
https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EC%B7%A8%EC%86%8C
|
1166
|
+
|
1078
1167
|
cancels an open order
|
1079
1168
|
:param str id: order id
|
1080
1169
|
:param str symbol: not used by upbit cancelOrder()
|
@@ -1082,7 +1171,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1082
1171
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1083
1172
|
"""
|
1084
1173
|
self.load_markets()
|
1085
|
-
request = {
|
1174
|
+
request: dict = {
|
1086
1175
|
'uuid': id,
|
1087
1176
|
}
|
1088
1177
|
response = self.privateDeleteOrder(self.extend(request, params))
|
@@ -1109,7 +1198,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
1109
1198
|
|
1110
1199
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1111
1200
|
"""
|
1112
|
-
|
1201
|
+
|
1202
|
+
https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
|
1203
|
+
|
1113
1204
|
fetch all deposits made to an account
|
1114
1205
|
:param str code: unified currency code
|
1115
1206
|
:param int [since]: the earliest time in ms to fetch deposits for
|
@@ -1118,7 +1209,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1118
1209
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1119
1210
|
"""
|
1120
1211
|
self.load_markets()
|
1121
|
-
request = {
|
1212
|
+
request: dict = {
|
1122
1213
|
# 'page': 1,
|
1123
1214
|
# 'order_by': 'asc', # 'desc'
|
1124
1215
|
}
|
@@ -1150,7 +1241,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
1150
1241
|
def fetch_deposit(self, id: str, code: Str = None, params={}):
|
1151
1242
|
"""
|
1152
1243
|
fetch information on a deposit
|
1153
|
-
|
1244
|
+
|
1245
|
+
https://global-docs.upbit.com/reference/individual-deposit-inquiry
|
1246
|
+
|
1154
1247
|
:param str id: the unique id for the deposit
|
1155
1248
|
:param str [code]: unified currency code of the currency deposited
|
1156
1249
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1158,7 +1251,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1158
1251
|
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1159
1252
|
"""
|
1160
1253
|
self.load_markets()
|
1161
|
-
request = {
|
1254
|
+
request: dict = {
|
1162
1255
|
'uuid': id,
|
1163
1256
|
}
|
1164
1257
|
currency = None
|
@@ -1185,7 +1278,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
1185
1278
|
|
1186
1279
|
def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1187
1280
|
"""
|
1188
|
-
|
1281
|
+
|
1282
|
+
https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%B6%9C%EA%B8%88-%EC%A1%B0%ED%9A%8C
|
1283
|
+
|
1189
1284
|
fetch all withdrawals made from an account
|
1190
1285
|
:param str code: unified currency code
|
1191
1286
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
@@ -1194,7 +1289,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1194
1289
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1195
1290
|
"""
|
1196
1291
|
self.load_markets()
|
1197
|
-
request = {
|
1292
|
+
request: dict = {
|
1198
1293
|
# 'state': 'submitting', # 'submitted', 'almost_accepted', 'rejected', 'accepted', 'processing', 'done', 'canceled'
|
1199
1294
|
}
|
1200
1295
|
currency = None
|
@@ -1226,7 +1321,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
1226
1321
|
def fetch_withdrawal(self, id: str, code: Str = None, params={}):
|
1227
1322
|
"""
|
1228
1323
|
fetch data on a currency withdrawal via the withdrawal id
|
1229
|
-
|
1324
|
+
|
1325
|
+
https://global-docs.upbit.com/reference/individual-withdrawal-inquiry
|
1326
|
+
|
1230
1327
|
:param str id: the unique id for the withdrawal
|
1231
1328
|
:param str [code]: unified currency code of the currency withdrawn
|
1232
1329
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1234,7 +1331,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1234
1331
|
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1235
1332
|
"""
|
1236
1333
|
self.load_markets()
|
1237
|
-
request = {
|
1334
|
+
request: dict = {
|
1238
1335
|
'uuid': id,
|
1239
1336
|
}
|
1240
1337
|
currency = None
|
@@ -1259,8 +1356,8 @@ class upbit(Exchange, ImplicitAPI):
|
|
1259
1356
|
#
|
1260
1357
|
return self.parse_transaction(response, currency)
|
1261
1358
|
|
1262
|
-
def parse_transaction_status(self, status):
|
1263
|
-
statuses = {
|
1359
|
+
def parse_transaction_status(self, status: Str):
|
1360
|
+
statuses: dict = {
|
1264
1361
|
'submitting': 'pending', # 처리 중
|
1265
1362
|
'submitted': 'pending', # 처리 완료
|
1266
1363
|
'almost_accepted': 'pending', # 출금대기중
|
@@ -1272,7 +1369,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1272
1369
|
}
|
1273
1370
|
return self.safe_string(statuses, status, status)
|
1274
1371
|
|
1275
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1372
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1276
1373
|
#
|
1277
1374
|
# fetchDeposits, fetchDeposit
|
1278
1375
|
#
|
@@ -1338,15 +1435,15 @@ class upbit(Exchange, ImplicitAPI):
|
|
1338
1435
|
},
|
1339
1436
|
}
|
1340
1437
|
|
1341
|
-
def parse_order_status(self, status):
|
1342
|
-
statuses = {
|
1438
|
+
def parse_order_status(self, status: Str):
|
1439
|
+
statuses: dict = {
|
1343
1440
|
'wait': 'open',
|
1344
1441
|
'done': 'closed',
|
1345
1442
|
'cancel': 'canceled',
|
1346
1443
|
}
|
1347
1444
|
return self.safe_string(statuses, status, status)
|
1348
1445
|
|
1349
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1446
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1350
1447
|
#
|
1351
1448
|
# {
|
1352
1449
|
# "uuid": "a08f09b1-1718-42e2-9358-f0e5e083d3ee",
|
@@ -1390,6 +1487,28 @@ class upbit(Exchange, ImplicitAPI):
|
|
1390
1487
|
# ],
|
1391
1488
|
# }
|
1392
1489
|
#
|
1490
|
+
# fetchOpenOrders, fetchClosedOrders, fetchCanceledOrders
|
1491
|
+
#
|
1492
|
+
# {
|
1493
|
+
# "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
|
1494
|
+
# "side": "ask",
|
1495
|
+
# "ord_type": "limit",
|
1496
|
+
# "price": "1.5",
|
1497
|
+
# "state": "wait",
|
1498
|
+
# "market": "SGD-XRP",
|
1499
|
+
# "created_at": "2024-06-05T09:37:10Z",
|
1500
|
+
# "volume": "10",
|
1501
|
+
# "remaining_volume": "10",
|
1502
|
+
# "reserved_fee": "0",
|
1503
|
+
# "remaining_fee": "0",
|
1504
|
+
# "paid_fee": "0",
|
1505
|
+
# "locked": "10",
|
1506
|
+
# "executed_volume": "0",
|
1507
|
+
# "executed_funds": "0",
|
1508
|
+
# "trades_count": 0,
|
1509
|
+
# "time_in_force": "ioc"
|
1510
|
+
# }
|
1511
|
+
#
|
1393
1512
|
id = self.safe_string(order, 'uuid')
|
1394
1513
|
side = self.safe_string(order, 'side')
|
1395
1514
|
if side == 'bid':
|
@@ -1451,11 +1570,10 @@ class upbit(Exchange, ImplicitAPI):
|
|
1451
1570
|
'lastTradeTimestamp': lastTradeTimestamp,
|
1452
1571
|
'symbol': market['symbol'],
|
1453
1572
|
'type': type,
|
1454
|
-
'timeInForce':
|
1573
|
+
'timeInForce': self.safe_string_upper(order, 'time_in_force'),
|
1455
1574
|
'postOnly': None,
|
1456
1575
|
'side': side,
|
1457
1576
|
'price': price,
|
1458
|
-
'stopPrice': None,
|
1459
1577
|
'triggerPrice': None,
|
1460
1578
|
'cost': self.parse_number(cost),
|
1461
1579
|
'average': self.parse_number(average),
|
@@ -1467,88 +1585,169 @@ class upbit(Exchange, ImplicitAPI):
|
|
1467
1585
|
'trades': trades,
|
1468
1586
|
})
|
1469
1587
|
|
1470
|
-
def
|
1588
|
+
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1589
|
+
"""
|
1590
|
+
fetch all unfilled currently open orders
|
1591
|
+
|
1592
|
+
https://global-docs.upbit.com/reference/open-order
|
1593
|
+
|
1594
|
+
:param str symbol: unified market symbol
|
1595
|
+
:param int [since]: the earliest time in ms to fetch open orders for
|
1596
|
+
:param int [limit]: the maximum number of open order structures to retrieve
|
1597
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1598
|
+
:param str [params.state]: default is 'wait', set to 'watch' for stop limit orders
|
1599
|
+
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1600
|
+
"""
|
1471
1601
|
self.load_markets()
|
1472
|
-
request = {
|
1473
|
-
# 'market': self.market_id(symbol),
|
1474
|
-
'state': state,
|
1475
|
-
# 'page': 1,
|
1476
|
-
# 'order_by': 'asc',
|
1477
|
-
}
|
1602
|
+
request: dict = {}
|
1478
1603
|
market = None
|
1479
1604
|
if symbol is not None:
|
1480
1605
|
market = self.market(symbol)
|
1481
1606
|
request['market'] = market['id']
|
1482
|
-
|
1607
|
+
if limit is not None:
|
1608
|
+
request['limit'] = limit
|
1609
|
+
response = self.privateGetOrdersOpen(self.extend(request, params))
|
1483
1610
|
#
|
1484
1611
|
# [
|
1485
1612
|
# {
|
1486
|
-
# "uuid": "
|
1487
|
-
# "side": "
|
1613
|
+
# "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
|
1614
|
+
# "side": "ask",
|
1488
1615
|
# "ord_type": "limit",
|
1489
|
-
# "price": "
|
1490
|
-
# "state": "
|
1491
|
-
# "market": "
|
1492
|
-
# "created_at": "
|
1493
|
-
# "volume": "
|
1494
|
-
# "remaining_volume": "
|
1495
|
-
# "reserved_fee": "
|
1496
|
-
# "remaining_fee": "
|
1497
|
-
# "paid_fee": "
|
1498
|
-
# "locked": "
|
1499
|
-
# "executed_volume": "
|
1500
|
-
# "
|
1501
|
-
#
|
1616
|
+
# "price": "1.5",
|
1617
|
+
# "state": "wait",
|
1618
|
+
# "market": "SGD-XRP",
|
1619
|
+
# "created_at": "2024-06-05T09:37:10Z",
|
1620
|
+
# "volume": "10",
|
1621
|
+
# "remaining_volume": "10",
|
1622
|
+
# "reserved_fee": "0",
|
1623
|
+
# "remaining_fee": "0",
|
1624
|
+
# "paid_fee": "0",
|
1625
|
+
# "locked": "10",
|
1626
|
+
# "executed_volume": "0",
|
1627
|
+
# "executed_funds": "0",
|
1628
|
+
# "trades_count": 0
|
1629
|
+
# }
|
1502
1630
|
# ]
|
1503
1631
|
#
|
1504
1632
|
return self.parse_orders(response, market, since, limit)
|
1505
1633
|
|
1506
|
-
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1507
|
-
"""
|
1508
|
-
:see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
|
1509
|
-
fetch all unfilled currently open orders
|
1510
|
-
:param str symbol: unified market symbol
|
1511
|
-
:param int [since]: the earliest time in ms to fetch open orders for
|
1512
|
-
:param int [limit]: the maximum number of open orders structures to retrieve
|
1513
|
-
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1514
|
-
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1515
|
-
"""
|
1516
|
-
return self.fetch_orders_by_state('wait', symbol, since, limit, params)
|
1517
|
-
|
1518
1634
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1519
1635
|
"""
|
1520
|
-
:see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
|
1521
1636
|
fetches information on multiple closed orders made by the user
|
1637
|
+
|
1638
|
+
https://global-docs.upbit.com/reference/closed-order
|
1639
|
+
|
1522
1640
|
:param str symbol: unified market symbol of the market orders were made in
|
1523
1641
|
:param int [since]: the earliest time in ms to fetch orders for
|
1524
1642
|
:param int [limit]: the maximum number of order structures to retrieve
|
1525
1643
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1644
|
+
:param int [params.until]: timestamp in ms of the latest order
|
1526
1645
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1527
1646
|
"""
|
1528
|
-
|
1647
|
+
self.load_markets()
|
1648
|
+
request: dict = {
|
1649
|
+
'state': 'done',
|
1650
|
+
}
|
1651
|
+
market = None
|
1652
|
+
if symbol is not None:
|
1653
|
+
market = self.market(symbol)
|
1654
|
+
request['market'] = market['id']
|
1655
|
+
if since is not None:
|
1656
|
+
request['start_time'] = since
|
1657
|
+
if limit is not None:
|
1658
|
+
request['limit'] = limit
|
1659
|
+
request, params = self.handle_until_option('end_time', request, params)
|
1660
|
+
response = self.privateGetOrdersClosed(self.extend(request, params))
|
1661
|
+
#
|
1662
|
+
# [
|
1663
|
+
# {
|
1664
|
+
# "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
|
1665
|
+
# "side": "ask",
|
1666
|
+
# "ord_type": "limit",
|
1667
|
+
# "price": "1.5",
|
1668
|
+
# "state": "done",
|
1669
|
+
# "market": "SGD-XRP",
|
1670
|
+
# "created_at": "2024-06-05T09:37:10Z",
|
1671
|
+
# "volume": "10",
|
1672
|
+
# "remaining_volume": "10",
|
1673
|
+
# "reserved_fee": "0",
|
1674
|
+
# "remaining_fee": "0",
|
1675
|
+
# "paid_fee": "0",
|
1676
|
+
# "locked": "10",
|
1677
|
+
# "executed_volume": "0",
|
1678
|
+
# "executed_funds": "0",
|
1679
|
+
# "trades_count": 0,
|
1680
|
+
# "time_in_force": "ioc"
|
1681
|
+
# }
|
1682
|
+
# ]
|
1683
|
+
#
|
1684
|
+
return self.parse_orders(response, market, since, limit)
|
1529
1685
|
|
1530
1686
|
def fetch_canceled_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1531
1687
|
"""
|
1532
|
-
:see: https://docs.upbit.com/reference/%EC%A3%BC%EB%AC%B8-%EB%A6%AC%EC%8A%A4%ED%8A%B8-%EC%A1%B0%ED%9A%8C
|
1533
1688
|
fetches information on multiple canceled orders made by the user
|
1689
|
+
|
1690
|
+
https://global-docs.upbit.com/reference/closed-order
|
1691
|
+
|
1534
1692
|
:param str symbol: unified market symbol of the market orders were made in
|
1535
1693
|
:param int [since]: timestamp in ms of the earliest order, default is None
|
1536
1694
|
:param int [limit]: max number of orders to return, default is None
|
1537
1695
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1696
|
+
:param int [params.until]: timestamp in ms of the latest order
|
1538
1697
|
:returns dict: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1539
1698
|
"""
|
1540
|
-
|
1699
|
+
self.load_markets()
|
1700
|
+
request: dict = {
|
1701
|
+
'state': 'cancel',
|
1702
|
+
}
|
1703
|
+
market = None
|
1704
|
+
if symbol is not None:
|
1705
|
+
market = self.market(symbol)
|
1706
|
+
request['market'] = market['id']
|
1707
|
+
if since is not None:
|
1708
|
+
request['start_time'] = since
|
1709
|
+
if limit is not None:
|
1710
|
+
request['limit'] = limit
|
1711
|
+
request, params = self.handle_until_option('end_time', request, params)
|
1712
|
+
response = self.privateGetOrdersClosed(self.extend(request, params))
|
1713
|
+
#
|
1714
|
+
# [
|
1715
|
+
# {
|
1716
|
+
# "uuid": "637fd66-d019-4d77-bee6-8e0cff28edd9",
|
1717
|
+
# "side": "ask",
|
1718
|
+
# "ord_type": "limit",
|
1719
|
+
# "price": "1.5",
|
1720
|
+
# "state": "cancel",
|
1721
|
+
# "market": "SGD-XRP",
|
1722
|
+
# "created_at": "2024-06-05T09:37:10Z",
|
1723
|
+
# "volume": "10",
|
1724
|
+
# "remaining_volume": "10",
|
1725
|
+
# "reserved_fee": "0",
|
1726
|
+
# "remaining_fee": "0",
|
1727
|
+
# "paid_fee": "0",
|
1728
|
+
# "locked": "10",
|
1729
|
+
# "executed_volume": "0",
|
1730
|
+
# "executed_funds": "0",
|
1731
|
+
# "trades_count": 0,
|
1732
|
+
# "time_in_force": "ioc"
|
1733
|
+
# }
|
1734
|
+
# ]
|
1735
|
+
#
|
1736
|
+
return self.parse_orders(response, market, since, limit)
|
1541
1737
|
|
1542
1738
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1543
1739
|
"""
|
1544
|
-
|
1740
|
+
|
1741
|
+
https://docs.upbit.com/reference/%EA%B0%9C%EB%B3%84-%EC%A3%BC%EB%AC%B8-%EC%A1%B0%ED%9A%8C
|
1742
|
+
|
1545
1743
|
fetches information on an order made by the user
|
1744
|
+
:param str id: order id
|
1546
1745
|
:param str symbol: not used by upbit fetchOrder
|
1547
1746
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1548
1747
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1549
1748
|
"""
|
1550
1749
|
self.load_markets()
|
1551
|
-
request = {
|
1750
|
+
request: dict = {
|
1552
1751
|
'uuid': id,
|
1553
1752
|
}
|
1554
1753
|
response = self.privateGetOrder(self.extend(request, params))
|
@@ -1597,9 +1796,11 @@ class upbit(Exchange, ImplicitAPI):
|
|
1597
1796
|
#
|
1598
1797
|
return self.parse_order(response)
|
1599
1798
|
|
1600
|
-
def fetch_deposit_addresses(self, codes:
|
1799
|
+
def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
|
1601
1800
|
"""
|
1602
|
-
|
1801
|
+
|
1802
|
+
https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
|
1803
|
+
|
1603
1804
|
fetch deposit addresses for multiple currencies and chain types
|
1604
1805
|
:param str[]|None codes: list of unified currency codes, default is None
|
1605
1806
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1628,7 +1829,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1628
1829
|
#
|
1629
1830
|
return self.parse_deposit_addresses(response, codes)
|
1630
1831
|
|
1631
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
1832
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
1632
1833
|
#
|
1633
1834
|
# {
|
1634
1835
|
# currency: 'XRP',
|
@@ -1644,16 +1845,18 @@ class upbit(Exchange, ImplicitAPI):
|
|
1644
1845
|
networkId = self.safe_string(depositAddress, 'net_type')
|
1645
1846
|
self.check_address(address)
|
1646
1847
|
return {
|
1848
|
+
'info': depositAddress,
|
1647
1849
|
'currency': code,
|
1850
|
+
'network': self.network_id_to_code(networkId),
|
1648
1851
|
'address': address,
|
1649
1852
|
'tag': tag,
|
1650
|
-
'network': self.network_id_to_code(networkId),
|
1651
|
-
'info': depositAddress,
|
1652
1853
|
}
|
1653
1854
|
|
1654
|
-
def fetch_deposit_address(self, code: str, params={}):
|
1855
|
+
def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1655
1856
|
"""
|
1656
|
-
|
1857
|
+
|
1858
|
+
https://docs.upbit.com/reference/%EC%A0%84%EC%B2%B4-%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%A1%B0%ED%9A%8C
|
1859
|
+
|
1657
1860
|
fetch the deposit address for a currency associated with self account
|
1658
1861
|
:param str code: unified currency code
|
1659
1862
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1682,7 +1885,9 @@ class upbit(Exchange, ImplicitAPI):
|
|
1682
1885
|
|
1683
1886
|
def create_deposit_address(self, code: str, params={}):
|
1684
1887
|
"""
|
1685
|
-
|
1888
|
+
|
1889
|
+
https://docs.upbit.com/reference/%EC%9E%85%EA%B8%88-%EC%A3%BC%EC%86%8C-%EC%83%9D%EC%84%B1-%EC%9A%94%EC%B2%AD
|
1890
|
+
|
1686
1891
|
create a currency deposit address
|
1687
1892
|
:param str code: unified currency code of the currency for the deposit address
|
1688
1893
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1690,7 +1895,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1690
1895
|
"""
|
1691
1896
|
self.load_markets()
|
1692
1897
|
currency = self.currency(code)
|
1693
|
-
request = {
|
1898
|
+
request: dict = {
|
1694
1899
|
'currency': currency['id'],
|
1695
1900
|
}
|
1696
1901
|
# https://github.com/ccxt/ccxt/issues/6452
|
@@ -1715,10 +1920,12 @@ class upbit(Exchange, ImplicitAPI):
|
|
1715
1920
|
raise AddressPending(self.id + ' is generating ' + code + ' deposit address, call fetchDepositAddress or createDepositAddress one more time later to retrieve the generated address')
|
1716
1921
|
return self.parse_deposit_address(response)
|
1717
1922
|
|
1718
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1923
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1719
1924
|
"""
|
1720
|
-
|
1721
|
-
|
1925
|
+
|
1926
|
+
https://docs.upbit.com/reference/디지털자산-출금하기
|
1927
|
+
https://docs.upbit.com/reference/%EC%9B%90%ED%99%94-%EC%B6%9C%EA%B8%88%ED%95%98%EA%B8%B0
|
1928
|
+
|
1722
1929
|
make a withdrawal
|
1723
1930
|
:param str code: unified currency code
|
1724
1931
|
:param float amount: the amount to withdraw
|
@@ -1730,7 +1937,7 @@ class upbit(Exchange, ImplicitAPI):
|
|
1730
1937
|
tag, params = self.handle_withdraw_tag_and_params(tag, params)
|
1731
1938
|
self.load_markets()
|
1732
1939
|
currency = self.currency(code)
|
1733
|
-
request = {
|
1940
|
+
request: dict = {
|
1734
1941
|
'amount': amount,
|
1735
1942
|
}
|
1736
1943
|
response = None
|
@@ -1780,26 +1987,28 @@ class upbit(Exchange, ImplicitAPI):
|
|
1780
1987
|
url += '?' + self.urlencode(query)
|
1781
1988
|
if api == 'private':
|
1782
1989
|
self.check_required_credentials()
|
1990
|
+
headers = {}
|
1783
1991
|
nonce = self.uuid()
|
1784
|
-
request = {
|
1992
|
+
request: dict = {
|
1785
1993
|
'access_key': self.apiKey,
|
1786
1994
|
'nonce': nonce,
|
1787
1995
|
}
|
1788
|
-
|
1789
|
-
|
1996
|
+
hasQuery = query
|
1997
|
+
auth = None
|
1998
|
+
if (method != 'GET') and (method != 'DELETE'):
|
1999
|
+
body = self.json(params)
|
2000
|
+
headers['Content-Type'] = 'application/json'
|
2001
|
+
if hasQuery:
|
2002
|
+
auth = self.rawencode(query)
|
2003
|
+
if auth is not None:
|
1790
2004
|
hash = self.hash(self.encode(auth), 'sha512')
|
1791
2005
|
request['query_hash'] = hash
|
1792
2006
|
request['query_hash_alg'] = 'SHA512'
|
1793
2007
|
token = self.jwt(request, self.encode(self.secret), 'sha256')
|
1794
|
-
headers =
|
1795
|
-
'Authorization': 'Bearer ' + token,
|
1796
|
-
}
|
1797
|
-
if (method != 'GET') and (method != 'DELETE'):
|
1798
|
-
body = self.json(params)
|
1799
|
-
headers['Content-Type'] = 'application/json'
|
2008
|
+
headers['Authorization'] = 'Bearer ' + token
|
1800
2009
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1801
2010
|
|
1802
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
2011
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1803
2012
|
if response is None:
|
1804
2013
|
return None # fallback to default error handler
|
1805
2014
|
#
|