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/indodax.py
CHANGED
@@ -7,16 +7,17 @@ from ccxt.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.indodax import ImplicitAPI
|
8
8
|
import hashlib
|
9
9
|
import math
|
10
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
10
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
|
11
11
|
from typing import List
|
12
12
|
from ccxt.base.errors import ExchangeError
|
13
|
+
from ccxt.base.errors import AuthenticationError
|
13
14
|
from ccxt.base.errors import ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadSymbol
|
15
16
|
from ccxt.base.errors import InsufficientFunds
|
16
17
|
from ccxt.base.errors import InvalidOrder
|
17
18
|
from ccxt.base.errors import OrderNotFound
|
18
|
-
from ccxt.base.errors import AuthenticationError
|
19
19
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
20
|
+
from ccxt.base.precise import Precise
|
20
21
|
|
21
22
|
|
22
23
|
class indodax(Exchange, ImplicitAPI):
|
@@ -28,7 +29,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
28
29
|
'countries': ['ID'], # Indonesia
|
29
30
|
# 10 requests per second for making trades => 1000ms / 10 = 100ms
|
30
31
|
# 180 requests per minute(public endpoints) = 2 requests per second => cost = (1000ms / rateLimit) / 2 = 5
|
31
|
-
'rateLimit':
|
32
|
+
'rateLimit': 50,
|
32
33
|
'has': {
|
33
34
|
'CORS': None,
|
34
35
|
'spot': True,
|
@@ -78,8 +79,11 @@ class indodax(Exchange, ImplicitAPI):
|
|
78
79
|
'fetchOrderBook': True,
|
79
80
|
'fetchOrders': False,
|
80
81
|
'fetchPosition': False,
|
82
|
+
'fetchPositionHistory': False,
|
81
83
|
'fetchPositionMode': False,
|
82
84
|
'fetchPositions': False,
|
85
|
+
'fetchPositionsForSymbol': False,
|
86
|
+
'fetchPositionsHistory': False,
|
83
87
|
'fetchPositionsRisk': False,
|
84
88
|
'fetchPremiumIndexOHLCV': False,
|
85
89
|
'fetchTicker': True,
|
@@ -216,7 +220,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
216
220
|
def fetch_time(self, params={}):
|
217
221
|
"""
|
218
222
|
fetches the current integer timestamp in milliseconds from the exchange server
|
219
|
-
|
223
|
+
|
224
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#server-time
|
225
|
+
|
220
226
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
221
227
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
222
228
|
"""
|
@@ -229,10 +235,12 @@ class indodax(Exchange, ImplicitAPI):
|
|
229
235
|
#
|
230
236
|
return self.safe_integer(response, 'server_time')
|
231
237
|
|
232
|
-
def fetch_markets(self, params={}):
|
238
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
233
239
|
"""
|
234
240
|
retrieves data on all markets for indodax
|
235
|
-
|
241
|
+
|
242
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#pairs
|
243
|
+
|
236
244
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
237
245
|
:returns dict[]: an array of objects representing market data
|
238
246
|
"""
|
@@ -331,7 +339,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
331
339
|
free = self.safe_value(balances, 'balance', {})
|
332
340
|
used = self.safe_value(balances, 'balance_hold', {})
|
333
341
|
timestamp = self.safe_timestamp(balances, 'server_time')
|
334
|
-
result = {
|
342
|
+
result: dict = {
|
335
343
|
'info': response,
|
336
344
|
'timestamp': timestamp,
|
337
345
|
'datetime': self.iso8601(timestamp),
|
@@ -349,7 +357,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
349
357
|
def fetch_balance(self, params={}) -> Balances:
|
350
358
|
"""
|
351
359
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
352
|
-
|
360
|
+
|
361
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-info-endpoint
|
362
|
+
|
353
363
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
354
364
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
355
365
|
"""
|
@@ -390,7 +400,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
390
400
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
391
401
|
"""
|
392
402
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
393
|
-
|
403
|
+
|
404
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#depth
|
405
|
+
|
394
406
|
:param str symbol: unified symbol of the market to fetch the order book for
|
395
407
|
:param int [limit]: the maximum amount of order book entries to return
|
396
408
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -398,13 +410,13 @@ class indodax(Exchange, ImplicitAPI):
|
|
398
410
|
"""
|
399
411
|
self.load_markets()
|
400
412
|
market = self.market(symbol)
|
401
|
-
request = {
|
413
|
+
request: dict = {
|
402
414
|
'pair': market['base'] + market['quote'],
|
403
415
|
}
|
404
416
|
orderbook = self.publicGetApiDepthPair(self.extend(request, params))
|
405
417
|
return self.parse_order_book(orderbook, market['symbol'], None, 'buy', 'sell')
|
406
418
|
|
407
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
419
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
408
420
|
#
|
409
421
|
# {
|
410
422
|
# "high":"0.01951",
|
@@ -448,14 +460,16 @@ class indodax(Exchange, ImplicitAPI):
|
|
448
460
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
449
461
|
"""
|
450
462
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
451
|
-
|
463
|
+
|
464
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker
|
465
|
+
|
452
466
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
453
467
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
454
468
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
455
469
|
"""
|
456
470
|
self.load_markets()
|
457
471
|
market = self.market(symbol)
|
458
|
-
request = {
|
472
|
+
request: dict = {
|
459
473
|
'pair': market['base'] + market['quote'],
|
460
474
|
}
|
461
475
|
response = self.publicGetApiTickerPair(self.extend(request, params))
|
@@ -473,13 +487,15 @@ class indodax(Exchange, ImplicitAPI):
|
|
473
487
|
# }
|
474
488
|
# }
|
475
489
|
#
|
476
|
-
ticker = self.
|
490
|
+
ticker = self.safe_dict(response, 'ticker', {})
|
477
491
|
return self.parse_ticker(ticker, market)
|
478
492
|
|
479
493
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
480
494
|
"""
|
481
495
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
482
|
-
|
496
|
+
|
497
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker-all
|
498
|
+
|
483
499
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
484
500
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
485
501
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -502,10 +518,10 @@ class indodax(Exchange, ImplicitAPI):
|
|
502
518
|
# }
|
503
519
|
#
|
504
520
|
response = self.publicGetApiTickerAll(params)
|
505
|
-
tickers = self.
|
521
|
+
tickers = self.safe_dict(response, 'tickers', {})
|
506
522
|
return self.parse_tickers(tickers, symbols)
|
507
523
|
|
508
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
524
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
509
525
|
timestamp = self.safe_timestamp(trade, 'date')
|
510
526
|
return self.safe_trade({
|
511
527
|
'id': self.safe_string(trade, 'tid'),
|
@@ -526,7 +542,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
526
542
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
527
543
|
"""
|
528
544
|
get the list of most recent trades for a particular symbol
|
529
|
-
|
545
|
+
|
546
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#trades
|
547
|
+
|
530
548
|
:param str symbol: unified symbol of the market to fetch trades for
|
531
549
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
532
550
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -535,7 +553,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
535
553
|
"""
|
536
554
|
self.load_markets()
|
537
555
|
market = self.market(symbol)
|
538
|
-
request = {
|
556
|
+
request: dict = {
|
539
557
|
'pair': market['base'] + market['quote'],
|
540
558
|
}
|
541
559
|
response = self.publicGetApiTradesPair(self.extend(request, params))
|
@@ -577,9 +595,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
577
595
|
timeframes = self.options['timeframes']
|
578
596
|
selectedTimeframe = self.safe_string(timeframes, timeframe, timeframe)
|
579
597
|
now = self.seconds()
|
580
|
-
until = self.
|
581
|
-
params = self.omit(params, ['until'
|
582
|
-
request = {
|
598
|
+
until = self.safe_integer(params, 'until', now)
|
599
|
+
params = self.omit(params, ['until'])
|
600
|
+
request: dict = {
|
583
601
|
'to': until,
|
584
602
|
'tf': selectedTimeframe,
|
585
603
|
'symbol': market['base'] + market['quote'],
|
@@ -606,15 +624,15 @@ class indodax(Exchange, ImplicitAPI):
|
|
606
624
|
#
|
607
625
|
return self.parse_ohlcvs(response, market, timeframe, since, limit)
|
608
626
|
|
609
|
-
def parse_order_status(self, status):
|
610
|
-
statuses = {
|
627
|
+
def parse_order_status(self, status: Str):
|
628
|
+
statuses: dict = {
|
611
629
|
'open': 'open',
|
612
630
|
'filled': 'closed',
|
613
631
|
'cancelled': 'canceled',
|
614
632
|
}
|
615
633
|
return self.safe_string(statuses, status, status)
|
616
634
|
|
617
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
635
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
618
636
|
#
|
619
637
|
# {
|
620
638
|
# "order_id": "12345",
|
@@ -638,6 +656,24 @@ class indodax(Exchange, ImplicitAPI):
|
|
638
656
|
# "order_xrp": "30.45000000",
|
639
657
|
# "remain_xrp": "0.00000000"
|
640
658
|
# }
|
659
|
+
#
|
660
|
+
# cancelOrder
|
661
|
+
#
|
662
|
+
# {
|
663
|
+
# "order_id": 666883,
|
664
|
+
# "client_order_id": "clientx-sj82ks82j",
|
665
|
+
# "type": "sell",
|
666
|
+
# "pair": "btc_idr",
|
667
|
+
# "balance": {
|
668
|
+
# "idr": "33605800",
|
669
|
+
# "btc": "0.00000000",
|
670
|
+
# ...
|
671
|
+
# "frozen_idr": "0",
|
672
|
+
# "frozen_btc": "0.00000000",
|
673
|
+
# ...
|
674
|
+
# }
|
675
|
+
# }
|
676
|
+
#
|
641
677
|
side = None
|
642
678
|
if 'type' in order:
|
643
679
|
side = order['type']
|
@@ -647,6 +683,8 @@ class indodax(Exchange, ImplicitAPI):
|
|
647
683
|
price = self.safe_string(order, 'price')
|
648
684
|
amount = None
|
649
685
|
remaining = None
|
686
|
+
marketId = self.safe_string(order, 'pair')
|
687
|
+
market = self.safe_market(marketId, market)
|
650
688
|
if market is not None:
|
651
689
|
symbol = market['symbol']
|
652
690
|
quoteId = market['quoteId']
|
@@ -665,7 +703,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
665
703
|
return self.safe_order({
|
666
704
|
'info': order,
|
667
705
|
'id': id,
|
668
|
-
'clientOrderId':
|
706
|
+
'clientOrderId': self.safe_string(order, 'client_order_id'),
|
669
707
|
'timestamp': timestamp,
|
670
708
|
'datetime': self.iso8601(timestamp),
|
671
709
|
'lastTradeTimestamp': None,
|
@@ -675,7 +713,6 @@ class indodax(Exchange, ImplicitAPI):
|
|
675
713
|
'postOnly': None,
|
676
714
|
'side': side,
|
677
715
|
'price': price,
|
678
|
-
'stopPrice': None,
|
679
716
|
'triggerPrice': None,
|
680
717
|
'cost': cost,
|
681
718
|
'average': None,
|
@@ -690,7 +727,10 @@ class indodax(Exchange, ImplicitAPI):
|
|
690
727
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
691
728
|
"""
|
692
729
|
fetches information on an order made by the user
|
693
|
-
|
730
|
+
|
731
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-order-endpoints
|
732
|
+
|
733
|
+
:param str id: order id
|
694
734
|
:param str symbol: unified symbol of the market the order was made in
|
695
735
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
696
736
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -699,7 +739,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
699
739
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
700
740
|
self.load_markets()
|
701
741
|
market = self.market(symbol)
|
702
|
-
request = {
|
742
|
+
request: dict = {
|
703
743
|
'pair': market['id'],
|
704
744
|
'order_id': id,
|
705
745
|
}
|
@@ -712,7 +752,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
712
752
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
713
753
|
"""
|
714
754
|
fetch all unfilled currently open orders
|
715
|
-
|
755
|
+
|
756
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#open-orders-endpoints
|
757
|
+
|
716
758
|
:param str symbol: unified market symbol
|
717
759
|
:param int [since]: the earliest time in ms to fetch open orders for
|
718
760
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -721,7 +763,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
721
763
|
"""
|
722
764
|
self.load_markets()
|
723
765
|
market = None
|
724
|
-
request = {}
|
766
|
+
request: dict = {}
|
725
767
|
if symbol is not None:
|
726
768
|
market = self.market(symbol)
|
727
769
|
request['pair'] = market['id']
|
@@ -747,7 +789,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
747
789
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
748
790
|
"""
|
749
791
|
fetches information on multiple closed orders made by the user
|
750
|
-
|
792
|
+
|
793
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#order-history
|
794
|
+
|
751
795
|
:param str symbol: unified market symbol of the market orders were made in
|
752
796
|
:param int [since]: the earliest time in ms to fetch orders for
|
753
797
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -758,7 +802,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
758
802
|
raise ArgumentsRequired(self.id + ' fetchClosedOrders() requires a symbol argument')
|
759
803
|
self.load_markets()
|
760
804
|
market = self.market(symbol)
|
761
|
-
request = {
|
805
|
+
request: dict = {
|
762
806
|
'pair': market['id'],
|
763
807
|
}
|
764
808
|
response = self.privatePostOrderHistory(self.extend(request, params))
|
@@ -769,30 +813,54 @@ class indodax(Exchange, ImplicitAPI):
|
|
769
813
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
770
814
|
"""
|
771
815
|
create a trade order
|
772
|
-
|
816
|
+
|
817
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#trade-endpoints
|
818
|
+
|
773
819
|
:param str symbol: unified symbol of the market to create an order in
|
774
820
|
:param str type: 'market' or 'limit'
|
775
821
|
:param str side: 'buy' or 'sell'
|
776
822
|
:param float amount: how much of currency you want to trade in units of base currency
|
777
|
-
:param float [price]: the price at which the order is to be
|
823
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
778
824
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
779
825
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
780
826
|
"""
|
781
|
-
if type != 'limit':
|
782
|
-
raise ExchangeError(self.id + ' createOrder() allows limit orders only')
|
783
827
|
self.load_markets()
|
784
828
|
market = self.market(symbol)
|
785
|
-
request = {
|
829
|
+
request: dict = {
|
786
830
|
'pair': market['id'],
|
787
831
|
'type': side,
|
788
832
|
'price': price,
|
789
833
|
}
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
834
|
+
priceIsRequired = False
|
835
|
+
quantityIsRequired = False
|
836
|
+
if type == 'market':
|
837
|
+
if side == 'buy':
|
838
|
+
quoteAmount = None
|
839
|
+
cost = self.safe_number(params, 'cost')
|
840
|
+
params = self.omit(params, 'cost')
|
841
|
+
if cost is not None:
|
842
|
+
quoteAmount = self.cost_to_precision(symbol, cost)
|
843
|
+
else:
|
844
|
+
if price is None:
|
845
|
+
raise InvalidOrder(self.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend(amount * price).')
|
846
|
+
amountString = self.number_to_string(amount)
|
847
|
+
priceString = self.number_to_string(price)
|
848
|
+
costRequest = Precise.string_mul(amountString, priceString)
|
849
|
+
quoteAmount = self.cost_to_precision(symbol, costRequest)
|
850
|
+
request[market['quoteId']] = quoteAmount
|
851
|
+
else:
|
852
|
+
quantityIsRequired = True
|
853
|
+
elif type == 'limit':
|
854
|
+
priceIsRequired = True
|
855
|
+
quantityIsRequired = True
|
856
|
+
if side == 'buy':
|
857
|
+
request[market['quoteId']] = self.parse_to_numeric(Precise.string_mul(self.number_to_string(amount), self.number_to_string(price)))
|
858
|
+
if priceIsRequired:
|
859
|
+
if price is None:
|
860
|
+
raise InvalidOrder(self.id + ' createOrder() requires a price argument for a ' + type + ' order')
|
861
|
+
request['price'] = price
|
862
|
+
if quantityIsRequired:
|
863
|
+
request[market['baseId']] = self.amount_to_precision(symbol, amount)
|
796
864
|
result = self.privatePostTrade(self.extend(request, params))
|
797
865
|
data = self.safe_value(result, 'return', {})
|
798
866
|
id = self.safe_string(data, 'order_id')
|
@@ -804,7 +872,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
804
872
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
805
873
|
"""
|
806
874
|
cancels an open order
|
807
|
-
|
875
|
+
|
876
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#cancel-order-endpoints
|
877
|
+
|
808
878
|
:param str id: order id
|
809
879
|
:param str symbol: unified symbol of the market the order was made in
|
810
880
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -817,24 +887,47 @@ class indodax(Exchange, ImplicitAPI):
|
|
817
887
|
raise ArgumentsRequired(self.id + ' cancelOrder() requires an extra "side" param')
|
818
888
|
self.load_markets()
|
819
889
|
market = self.market(symbol)
|
820
|
-
request = {
|
890
|
+
request: dict = {
|
821
891
|
'order_id': id,
|
822
892
|
'pair': market['id'],
|
823
893
|
'type': side,
|
824
894
|
}
|
825
|
-
|
895
|
+
response = self.privatePostCancelOrder(self.extend(request, params))
|
896
|
+
#
|
897
|
+
# {
|
898
|
+
# "success": 1,
|
899
|
+
# "return": {
|
900
|
+
# "order_id": 666883,
|
901
|
+
# "client_order_id": "clientx-sj82ks82j",
|
902
|
+
# "type": "sell",
|
903
|
+
# "pair": "btc_idr",
|
904
|
+
# "balance": {
|
905
|
+
# "idr": "33605800",
|
906
|
+
# "btc": "0.00000000",
|
907
|
+
# ...
|
908
|
+
# "frozen_idr": "0",
|
909
|
+
# "frozen_btc": "0.00000000",
|
910
|
+
# ...
|
911
|
+
# }
|
912
|
+
# }
|
913
|
+
# }
|
914
|
+
#
|
915
|
+
data = self.safe_dict(response, 'return')
|
916
|
+
return self.parse_order(data)
|
826
917
|
|
827
918
|
def fetch_transaction_fee(self, code: str, params={}):
|
828
919
|
"""
|
829
920
|
fetch the fee for a transaction
|
830
|
-
|
921
|
+
|
922
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-fee-endpoints
|
923
|
+
|
831
924
|
:param str code: unified currency code
|
832
925
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
833
926
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
834
927
|
"""
|
835
928
|
self.load_markets()
|
836
929
|
currency = self.currency(code)
|
837
|
-
request = {
|
930
|
+
request: dict = {
|
838
931
|
'currency': currency['id'],
|
839
932
|
}
|
840
933
|
response = self.privatePostWithdrawFee(self.extend(request, params))
|
@@ -859,7 +952,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
859
952
|
def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
860
953
|
"""
|
861
954
|
fetch history of deposits and withdrawals
|
862
|
-
|
955
|
+
|
956
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#transaction-history-endpoints
|
957
|
+
|
863
958
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
864
959
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
865
960
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
@@ -867,7 +962,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
867
962
|
:returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
868
963
|
"""
|
869
964
|
self.load_markets()
|
870
|
-
request = {}
|
965
|
+
request: dict = {}
|
871
966
|
if since is not None:
|
872
967
|
startTime = self.iso8601(since)[0:10]
|
873
968
|
request['start'] = startTime
|
@@ -951,10 +1046,12 @@ class indodax(Exchange, ImplicitAPI):
|
|
951
1046
|
transactions = self.array_concat(withdraws, deposits)
|
952
1047
|
return self.parse_transactions(transactions, currency, since, limit)
|
953
1048
|
|
954
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1049
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
955
1050
|
"""
|
956
1051
|
make a withdrawal
|
957
|
-
|
1052
|
+
|
1053
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-coin-endpoints
|
1054
|
+
|
958
1055
|
:param str code: unified currency code
|
959
1056
|
:param float amount: the amount to withdraw
|
960
1057
|
:param str address: the address to withdraw to
|
@@ -973,7 +1070,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
973
1070
|
requestId = self.milliseconds()
|
974
1071
|
# Alternatively:
|
975
1072
|
# requestId = self.uuid()
|
976
|
-
request = {
|
1073
|
+
request: dict = {
|
977
1074
|
'currency': currency['id'],
|
978
1075
|
'withdraw_amount': amount,
|
979
1076
|
'withdraw_address': address,
|
@@ -999,7 +1096,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
999
1096
|
#
|
1000
1097
|
return self.parse_transaction(response, currency)
|
1001
1098
|
|
1002
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1099
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1003
1100
|
#
|
1004
1101
|
# withdraw
|
1005
1102
|
#
|
@@ -1075,16 +1172,18 @@ class indodax(Exchange, ImplicitAPI):
|
|
1075
1172
|
'info': transaction,
|
1076
1173
|
}
|
1077
1174
|
|
1078
|
-
def parse_transaction_status(self, status):
|
1079
|
-
statuses = {
|
1175
|
+
def parse_transaction_status(self, status: Str):
|
1176
|
+
statuses: dict = {
|
1080
1177
|
'success': 'ok',
|
1081
1178
|
}
|
1082
1179
|
return self.safe_string(statuses, status, status)
|
1083
1180
|
|
1084
|
-
def fetch_deposit_addresses(self, codes:
|
1181
|
+
def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
|
1085
1182
|
"""
|
1086
1183
|
fetch deposit addresses for multiple currencies and chain types
|
1087
|
-
|
1184
|
+
|
1185
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#general-information-on-endpoints
|
1186
|
+
|
1088
1187
|
:param str[] [codes]: list of unified currency codes, default is None
|
1089
1188
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1090
1189
|
:returns dict: a list of `address structures <https://docs.ccxt.com/#/?id=address-structure>`
|
@@ -1130,7 +1229,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
1130
1229
|
addresses = self.safe_dict(data, 'address', {})
|
1131
1230
|
networks = self.safe_dict(data, 'network', {})
|
1132
1231
|
addressKeys = list(addresses.keys())
|
1133
|
-
result = {
|
1232
|
+
result: dict = {
|
1134
1233
|
'info': data,
|
1135
1234
|
}
|
1136
1235
|
for i in range(0, len(addressKeys)):
|
@@ -1152,8 +1251,8 @@ class indodax(Exchange, ImplicitAPI):
|
|
1152
1251
|
result[code] = {
|
1153
1252
|
'info': {},
|
1154
1253
|
'currency': code,
|
1155
|
-
'address': address,
|
1156
1254
|
'network': network,
|
1255
|
+
'address': address,
|
1157
1256
|
'tag': None,
|
1158
1257
|
}
|
1159
1258
|
return result
|
@@ -1180,17 +1279,21 @@ class indodax(Exchange, ImplicitAPI):
|
|
1180
1279
|
}
|
1181
1280
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1182
1281
|
|
1183
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1282
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1184
1283
|
if response is None:
|
1185
1284
|
return None
|
1186
1285
|
# {success: 0, error: "invalid order."}
|
1187
1286
|
# or
|
1188
1287
|
# [{data, ...}, {...}, ...]
|
1288
|
+
# {"success":"1","status":"approved","withdraw_currency":"strm","withdraw_address":"0x2b9A8cd5535D99b419aEfFBF1ae8D90a7eBdb24E","withdraw_amount":"2165.05767839","fee":"21.11000000","amount_after_fee":"2143.94767839","submit_time":"1730759489","withdraw_id":"strm-3423","txid":""}
|
1189
1289
|
if isinstance(response, list):
|
1190
1290
|
return None # public endpoints may return []-arrays
|
1191
1291
|
error = self.safe_value(response, 'error', '')
|
1192
1292
|
if not ('success' in response) and error == '':
|
1193
1293
|
return None # no 'success' property on public responses
|
1294
|
+
status = self.safe_string(response, 'success')
|
1295
|
+
if status == 'approved':
|
1296
|
+
return None
|
1194
1297
|
if self.safe_integer(response, 'success', 0) == 1:
|
1195
1298
|
# {success: 1, return: {orders: []}}
|
1196
1299
|
if not ('return' in response):
|