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/async_support/indodax.py
CHANGED
@@ -7,16 +7,17 @@ from ccxt.async_support.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,
|
@@ -200,6 +204,67 @@ class indodax(Exchange, ImplicitAPI):
|
|
200
204
|
'1w': '1W',
|
201
205
|
},
|
202
206
|
},
|
207
|
+
'features': {
|
208
|
+
'spot': {
|
209
|
+
'sandbox': False,
|
210
|
+
'createOrder': {
|
211
|
+
'marginMode': False,
|
212
|
+
'triggerPrice': False,
|
213
|
+
'triggerPriceType': None,
|
214
|
+
'triggerDirection': False,
|
215
|
+
'stopLossPrice': False,
|
216
|
+
'takeProfitPrice': False,
|
217
|
+
'attachedStopLossTakeProfit': None,
|
218
|
+
'timeInForce': {
|
219
|
+
'IOC': True, # todo implementation
|
220
|
+
'FOK': False,
|
221
|
+
'PO': False,
|
222
|
+
'GTD': False,
|
223
|
+
},
|
224
|
+
'hedged': False,
|
225
|
+
'selfTradePrevention': False,
|
226
|
+
'trailing': False,
|
227
|
+
'leverage': False,
|
228
|
+
'marketBuyByCost': False,
|
229
|
+
'marketBuyRequiresPrice': False,
|
230
|
+
'iceberg': False,
|
231
|
+
},
|
232
|
+
'createOrders': None,
|
233
|
+
'fetchMyTrades': None, # todo implement
|
234
|
+
'fetchOrder': {
|
235
|
+
'marginMode': False,
|
236
|
+
'trigger': False,
|
237
|
+
'trailing': False,
|
238
|
+
},
|
239
|
+
'fetchOpenOrders': {
|
240
|
+
'marginMode': False,
|
241
|
+
'limit': None,
|
242
|
+
'trigger': False,
|
243
|
+
'trailing': False,
|
244
|
+
},
|
245
|
+
'fetchOrders': None,
|
246
|
+
'fetchClosedOrders': {
|
247
|
+
'marginMode': False,
|
248
|
+
'limit': 1000,
|
249
|
+
'daysBack': 100000, # todo
|
250
|
+
'daysBackCanceled': 1,
|
251
|
+
'untilDays': None,
|
252
|
+
'trigger': False,
|
253
|
+
'trailing': False,
|
254
|
+
},
|
255
|
+
'fetchOHLCV': {
|
256
|
+
'limit': 2000, # todo: not in request
|
257
|
+
},
|
258
|
+
},
|
259
|
+
'swap': {
|
260
|
+
'linear': None,
|
261
|
+
'inverse': None,
|
262
|
+
},
|
263
|
+
'future': {
|
264
|
+
'linear': None,
|
265
|
+
'inverse': None,
|
266
|
+
},
|
267
|
+
},
|
203
268
|
'commonCurrencies': {
|
204
269
|
'STR': 'XLM',
|
205
270
|
'BCHABC': 'BCH',
|
@@ -216,7 +281,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
216
281
|
async def fetch_time(self, params={}):
|
217
282
|
"""
|
218
283
|
fetches the current integer timestamp in milliseconds from the exchange server
|
219
|
-
|
284
|
+
|
285
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#server-time
|
286
|
+
|
220
287
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
221
288
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
222
289
|
"""
|
@@ -229,10 +296,12 @@ class indodax(Exchange, ImplicitAPI):
|
|
229
296
|
#
|
230
297
|
return self.safe_integer(response, 'server_time')
|
231
298
|
|
232
|
-
async def fetch_markets(self, params={}):
|
299
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
233
300
|
"""
|
234
301
|
retrieves data on all markets for indodax
|
235
|
-
|
302
|
+
|
303
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#pairs
|
304
|
+
|
236
305
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
237
306
|
:returns dict[]: an array of objects representing market data
|
238
307
|
"""
|
@@ -331,7 +400,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
331
400
|
free = self.safe_value(balances, 'balance', {})
|
332
401
|
used = self.safe_value(balances, 'balance_hold', {})
|
333
402
|
timestamp = self.safe_timestamp(balances, 'server_time')
|
334
|
-
result = {
|
403
|
+
result: dict = {
|
335
404
|
'info': response,
|
336
405
|
'timestamp': timestamp,
|
337
406
|
'datetime': self.iso8601(timestamp),
|
@@ -349,7 +418,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
349
418
|
async def fetch_balance(self, params={}) -> Balances:
|
350
419
|
"""
|
351
420
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
352
|
-
|
421
|
+
|
422
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-info-endpoint
|
423
|
+
|
353
424
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
354
425
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
355
426
|
"""
|
@@ -390,7 +461,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
390
461
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
391
462
|
"""
|
392
463
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
393
|
-
|
464
|
+
|
465
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#depth
|
466
|
+
|
394
467
|
:param str symbol: unified symbol of the market to fetch the order book for
|
395
468
|
:param int [limit]: the maximum amount of order book entries to return
|
396
469
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -398,13 +471,13 @@ class indodax(Exchange, ImplicitAPI):
|
|
398
471
|
"""
|
399
472
|
await self.load_markets()
|
400
473
|
market = self.market(symbol)
|
401
|
-
request = {
|
474
|
+
request: dict = {
|
402
475
|
'pair': market['base'] + market['quote'],
|
403
476
|
}
|
404
477
|
orderbook = await self.publicGetApiDepthPair(self.extend(request, params))
|
405
478
|
return self.parse_order_book(orderbook, market['symbol'], None, 'buy', 'sell')
|
406
479
|
|
407
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
480
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
408
481
|
#
|
409
482
|
# {
|
410
483
|
# "high":"0.01951",
|
@@ -448,14 +521,16 @@ class indodax(Exchange, ImplicitAPI):
|
|
448
521
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
449
522
|
"""
|
450
523
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
451
|
-
|
524
|
+
|
525
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker
|
526
|
+
|
452
527
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
453
528
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
454
529
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
455
530
|
"""
|
456
531
|
await self.load_markets()
|
457
532
|
market = self.market(symbol)
|
458
|
-
request = {
|
533
|
+
request: dict = {
|
459
534
|
'pair': market['base'] + market['quote'],
|
460
535
|
}
|
461
536
|
response = await self.publicGetApiTickerPair(self.extend(request, params))
|
@@ -473,13 +548,15 @@ class indodax(Exchange, ImplicitAPI):
|
|
473
548
|
# }
|
474
549
|
# }
|
475
550
|
#
|
476
|
-
ticker = self.
|
551
|
+
ticker = self.safe_dict(response, 'ticker', {})
|
477
552
|
return self.parse_ticker(ticker, market)
|
478
553
|
|
479
554
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
480
555
|
"""
|
481
556
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
482
|
-
|
557
|
+
|
558
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker-all
|
559
|
+
|
483
560
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
484
561
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
485
562
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -502,10 +579,10 @@ class indodax(Exchange, ImplicitAPI):
|
|
502
579
|
# }
|
503
580
|
#
|
504
581
|
response = await self.publicGetApiTickerAll(params)
|
505
|
-
tickers = self.
|
582
|
+
tickers = self.safe_dict(response, 'tickers', {})
|
506
583
|
return self.parse_tickers(tickers, symbols)
|
507
584
|
|
508
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
585
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
509
586
|
timestamp = self.safe_timestamp(trade, 'date')
|
510
587
|
return self.safe_trade({
|
511
588
|
'id': self.safe_string(trade, 'tid'),
|
@@ -526,7 +603,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
526
603
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
527
604
|
"""
|
528
605
|
get the list of most recent trades for a particular symbol
|
529
|
-
|
606
|
+
|
607
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#trades
|
608
|
+
|
530
609
|
:param str symbol: unified symbol of the market to fetch trades for
|
531
610
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
532
611
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -535,7 +614,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
535
614
|
"""
|
536
615
|
await self.load_markets()
|
537
616
|
market = self.market(symbol)
|
538
|
-
request = {
|
617
|
+
request: dict = {
|
539
618
|
'pair': market['base'] + market['quote'],
|
540
619
|
}
|
541
620
|
response = await self.publicGetApiTradesPair(self.extend(request, params))
|
@@ -577,9 +656,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
577
656
|
timeframes = self.options['timeframes']
|
578
657
|
selectedTimeframe = self.safe_string(timeframes, timeframe, timeframe)
|
579
658
|
now = self.seconds()
|
580
|
-
until = self.
|
581
|
-
params = self.omit(params, ['until'
|
582
|
-
request = {
|
659
|
+
until = self.safe_integer(params, 'until', now)
|
660
|
+
params = self.omit(params, ['until'])
|
661
|
+
request: dict = {
|
583
662
|
'to': until,
|
584
663
|
'tf': selectedTimeframe,
|
585
664
|
'symbol': market['base'] + market['quote'],
|
@@ -606,15 +685,15 @@ class indodax(Exchange, ImplicitAPI):
|
|
606
685
|
#
|
607
686
|
return self.parse_ohlcvs(response, market, timeframe, since, limit)
|
608
687
|
|
609
|
-
def parse_order_status(self, status):
|
610
|
-
statuses = {
|
688
|
+
def parse_order_status(self, status: Str):
|
689
|
+
statuses: dict = {
|
611
690
|
'open': 'open',
|
612
691
|
'filled': 'closed',
|
613
692
|
'cancelled': 'canceled',
|
614
693
|
}
|
615
694
|
return self.safe_string(statuses, status, status)
|
616
695
|
|
617
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
696
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
618
697
|
#
|
619
698
|
# {
|
620
699
|
# "order_id": "12345",
|
@@ -638,6 +717,24 @@ class indodax(Exchange, ImplicitAPI):
|
|
638
717
|
# "order_xrp": "30.45000000",
|
639
718
|
# "remain_xrp": "0.00000000"
|
640
719
|
# }
|
720
|
+
#
|
721
|
+
# cancelOrder
|
722
|
+
#
|
723
|
+
# {
|
724
|
+
# "order_id": 666883,
|
725
|
+
# "client_order_id": "clientx-sj82ks82j",
|
726
|
+
# "type": "sell",
|
727
|
+
# "pair": "btc_idr",
|
728
|
+
# "balance": {
|
729
|
+
# "idr": "33605800",
|
730
|
+
# "btc": "0.00000000",
|
731
|
+
# ...
|
732
|
+
# "frozen_idr": "0",
|
733
|
+
# "frozen_btc": "0.00000000",
|
734
|
+
# ...
|
735
|
+
# }
|
736
|
+
# }
|
737
|
+
#
|
641
738
|
side = None
|
642
739
|
if 'type' in order:
|
643
740
|
side = order['type']
|
@@ -647,6 +744,8 @@ class indodax(Exchange, ImplicitAPI):
|
|
647
744
|
price = self.safe_string(order, 'price')
|
648
745
|
amount = None
|
649
746
|
remaining = None
|
747
|
+
marketId = self.safe_string(order, 'pair')
|
748
|
+
market = self.safe_market(marketId, market)
|
650
749
|
if market is not None:
|
651
750
|
symbol = market['symbol']
|
652
751
|
quoteId = market['quoteId']
|
@@ -665,7 +764,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
665
764
|
return self.safe_order({
|
666
765
|
'info': order,
|
667
766
|
'id': id,
|
668
|
-
'clientOrderId':
|
767
|
+
'clientOrderId': self.safe_string(order, 'client_order_id'),
|
669
768
|
'timestamp': timestamp,
|
670
769
|
'datetime': self.iso8601(timestamp),
|
671
770
|
'lastTradeTimestamp': None,
|
@@ -675,7 +774,6 @@ class indodax(Exchange, ImplicitAPI):
|
|
675
774
|
'postOnly': None,
|
676
775
|
'side': side,
|
677
776
|
'price': price,
|
678
|
-
'stopPrice': None,
|
679
777
|
'triggerPrice': None,
|
680
778
|
'cost': cost,
|
681
779
|
'average': None,
|
@@ -690,7 +788,10 @@ class indodax(Exchange, ImplicitAPI):
|
|
690
788
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
691
789
|
"""
|
692
790
|
fetches information on an order made by the user
|
693
|
-
|
791
|
+
|
792
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-order-endpoints
|
793
|
+
|
794
|
+
:param str id: order id
|
694
795
|
:param str symbol: unified symbol of the market the order was made in
|
695
796
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
696
797
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -699,7 +800,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
699
800
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
700
801
|
await self.load_markets()
|
701
802
|
market = self.market(symbol)
|
702
|
-
request = {
|
803
|
+
request: dict = {
|
703
804
|
'pair': market['id'],
|
704
805
|
'order_id': id,
|
705
806
|
}
|
@@ -712,7 +813,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
712
813
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
713
814
|
"""
|
714
815
|
fetch all unfilled currently open orders
|
715
|
-
|
816
|
+
|
817
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#open-orders-endpoints
|
818
|
+
|
716
819
|
:param str symbol: unified market symbol
|
717
820
|
:param int [since]: the earliest time in ms to fetch open orders for
|
718
821
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -721,7 +824,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
721
824
|
"""
|
722
825
|
await self.load_markets()
|
723
826
|
market = None
|
724
|
-
request = {}
|
827
|
+
request: dict = {}
|
725
828
|
if symbol is not None:
|
726
829
|
market = self.market(symbol)
|
727
830
|
request['pair'] = market['id']
|
@@ -747,7 +850,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
747
850
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
748
851
|
"""
|
749
852
|
fetches information on multiple closed orders made by the user
|
750
|
-
|
853
|
+
|
854
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#order-history
|
855
|
+
|
751
856
|
:param str symbol: unified market symbol of the market orders were made in
|
752
857
|
:param int [since]: the earliest time in ms to fetch orders for
|
753
858
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -758,7 +863,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
758
863
|
raise ArgumentsRequired(self.id + ' fetchClosedOrders() requires a symbol argument')
|
759
864
|
await self.load_markets()
|
760
865
|
market = self.market(symbol)
|
761
|
-
request = {
|
866
|
+
request: dict = {
|
762
867
|
'pair': market['id'],
|
763
868
|
}
|
764
869
|
response = await self.privatePostOrderHistory(self.extend(request, params))
|
@@ -769,30 +874,54 @@ class indodax(Exchange, ImplicitAPI):
|
|
769
874
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
770
875
|
"""
|
771
876
|
create a trade order
|
772
|
-
|
877
|
+
|
878
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#trade-endpoints
|
879
|
+
|
773
880
|
:param str symbol: unified symbol of the market to create an order in
|
774
881
|
:param str type: 'market' or 'limit'
|
775
882
|
:param str side: 'buy' or 'sell'
|
776
883
|
: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
|
884
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
778
885
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
779
886
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
780
887
|
"""
|
781
|
-
if type != 'limit':
|
782
|
-
raise ExchangeError(self.id + ' createOrder() allows limit orders only')
|
783
888
|
await self.load_markets()
|
784
889
|
market = self.market(symbol)
|
785
|
-
request = {
|
890
|
+
request: dict = {
|
786
891
|
'pair': market['id'],
|
787
892
|
'type': side,
|
788
893
|
'price': price,
|
789
894
|
}
|
790
|
-
|
791
|
-
|
792
|
-
|
793
|
-
|
794
|
-
|
795
|
-
|
895
|
+
priceIsRequired = False
|
896
|
+
quantityIsRequired = False
|
897
|
+
if type == 'market':
|
898
|
+
if side == 'buy':
|
899
|
+
quoteAmount = None
|
900
|
+
cost = self.safe_number(params, 'cost')
|
901
|
+
params = self.omit(params, 'cost')
|
902
|
+
if cost is not None:
|
903
|
+
quoteAmount = self.cost_to_precision(symbol, cost)
|
904
|
+
else:
|
905
|
+
if price is None:
|
906
|
+
raise InvalidOrder(self.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend(amount * price).')
|
907
|
+
amountString = self.number_to_string(amount)
|
908
|
+
priceString = self.number_to_string(price)
|
909
|
+
costRequest = Precise.string_mul(amountString, priceString)
|
910
|
+
quoteAmount = self.cost_to_precision(symbol, costRequest)
|
911
|
+
request[market['quoteId']] = quoteAmount
|
912
|
+
else:
|
913
|
+
quantityIsRequired = True
|
914
|
+
elif type == 'limit':
|
915
|
+
priceIsRequired = True
|
916
|
+
quantityIsRequired = True
|
917
|
+
if side == 'buy':
|
918
|
+
request[market['quoteId']] = self.parse_to_numeric(Precise.string_mul(self.number_to_string(amount), self.number_to_string(price)))
|
919
|
+
if priceIsRequired:
|
920
|
+
if price is None:
|
921
|
+
raise InvalidOrder(self.id + ' createOrder() requires a price argument for a ' + type + ' order')
|
922
|
+
request['price'] = price
|
923
|
+
if quantityIsRequired:
|
924
|
+
request[market['baseId']] = self.amount_to_precision(symbol, amount)
|
796
925
|
result = await self.privatePostTrade(self.extend(request, params))
|
797
926
|
data = self.safe_value(result, 'return', {})
|
798
927
|
id = self.safe_string(data, 'order_id')
|
@@ -804,7 +933,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
804
933
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
805
934
|
"""
|
806
935
|
cancels an open order
|
807
|
-
|
936
|
+
|
937
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#cancel-order-endpoints
|
938
|
+
|
808
939
|
:param str id: order id
|
809
940
|
:param str symbol: unified symbol of the market the order was made in
|
810
941
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -817,24 +948,47 @@ class indodax(Exchange, ImplicitAPI):
|
|
817
948
|
raise ArgumentsRequired(self.id + ' cancelOrder() requires an extra "side" param')
|
818
949
|
await self.load_markets()
|
819
950
|
market = self.market(symbol)
|
820
|
-
request = {
|
951
|
+
request: dict = {
|
821
952
|
'order_id': id,
|
822
953
|
'pair': market['id'],
|
823
954
|
'type': side,
|
824
955
|
}
|
825
|
-
|
956
|
+
response = await self.privatePostCancelOrder(self.extend(request, params))
|
957
|
+
#
|
958
|
+
# {
|
959
|
+
# "success": 1,
|
960
|
+
# "return": {
|
961
|
+
# "order_id": 666883,
|
962
|
+
# "client_order_id": "clientx-sj82ks82j",
|
963
|
+
# "type": "sell",
|
964
|
+
# "pair": "btc_idr",
|
965
|
+
# "balance": {
|
966
|
+
# "idr": "33605800",
|
967
|
+
# "btc": "0.00000000",
|
968
|
+
# ...
|
969
|
+
# "frozen_idr": "0",
|
970
|
+
# "frozen_btc": "0.00000000",
|
971
|
+
# ...
|
972
|
+
# }
|
973
|
+
# }
|
974
|
+
# }
|
975
|
+
#
|
976
|
+
data = self.safe_dict(response, 'return')
|
977
|
+
return self.parse_order(data)
|
826
978
|
|
827
979
|
async def fetch_transaction_fee(self, code: str, params={}):
|
828
980
|
"""
|
829
981
|
fetch the fee for a transaction
|
830
|
-
|
982
|
+
|
983
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-fee-endpoints
|
984
|
+
|
831
985
|
:param str code: unified currency code
|
832
986
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
833
987
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
834
988
|
"""
|
835
989
|
await self.load_markets()
|
836
990
|
currency = self.currency(code)
|
837
|
-
request = {
|
991
|
+
request: dict = {
|
838
992
|
'currency': currency['id'],
|
839
993
|
}
|
840
994
|
response = await self.privatePostWithdrawFee(self.extend(request, params))
|
@@ -859,7 +1013,9 @@ class indodax(Exchange, ImplicitAPI):
|
|
859
1013
|
async def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
860
1014
|
"""
|
861
1015
|
fetch history of deposits and withdrawals
|
862
|
-
|
1016
|
+
|
1017
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#transaction-history-endpoints
|
1018
|
+
|
863
1019
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
864
1020
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
865
1021
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
@@ -867,7 +1023,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
867
1023
|
:returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
868
1024
|
"""
|
869
1025
|
await self.load_markets()
|
870
|
-
request = {}
|
1026
|
+
request: dict = {}
|
871
1027
|
if since is not None:
|
872
1028
|
startTime = self.iso8601(since)[0:10]
|
873
1029
|
request['start'] = startTime
|
@@ -951,10 +1107,12 @@ class indodax(Exchange, ImplicitAPI):
|
|
951
1107
|
transactions = self.array_concat(withdraws, deposits)
|
952
1108
|
return self.parse_transactions(transactions, currency, since, limit)
|
953
1109
|
|
954
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1110
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
955
1111
|
"""
|
956
1112
|
make a withdrawal
|
957
|
-
|
1113
|
+
|
1114
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-coin-endpoints
|
1115
|
+
|
958
1116
|
:param str code: unified currency code
|
959
1117
|
:param float amount: the amount to withdraw
|
960
1118
|
:param str address: the address to withdraw to
|
@@ -973,7 +1131,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
973
1131
|
requestId = self.milliseconds()
|
974
1132
|
# Alternatively:
|
975
1133
|
# requestId = self.uuid()
|
976
|
-
request = {
|
1134
|
+
request: dict = {
|
977
1135
|
'currency': currency['id'],
|
978
1136
|
'withdraw_amount': amount,
|
979
1137
|
'withdraw_address': address,
|
@@ -999,7 +1157,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
999
1157
|
#
|
1000
1158
|
return self.parse_transaction(response, currency)
|
1001
1159
|
|
1002
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1160
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1003
1161
|
#
|
1004
1162
|
# withdraw
|
1005
1163
|
#
|
@@ -1075,16 +1233,18 @@ class indodax(Exchange, ImplicitAPI):
|
|
1075
1233
|
'info': transaction,
|
1076
1234
|
}
|
1077
1235
|
|
1078
|
-
def parse_transaction_status(self, status):
|
1079
|
-
statuses = {
|
1236
|
+
def parse_transaction_status(self, status: Str):
|
1237
|
+
statuses: dict = {
|
1080
1238
|
'success': 'ok',
|
1081
1239
|
}
|
1082
1240
|
return self.safe_string(statuses, status, status)
|
1083
1241
|
|
1084
|
-
async def fetch_deposit_addresses(self, codes:
|
1242
|
+
async def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
|
1085
1243
|
"""
|
1086
1244
|
fetch deposit addresses for multiple currencies and chain types
|
1087
|
-
|
1245
|
+
|
1246
|
+
https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#general-information-on-endpoints
|
1247
|
+
|
1088
1248
|
:param str[] [codes]: list of unified currency codes, default is None
|
1089
1249
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1090
1250
|
:returns dict: a list of `address structures <https://docs.ccxt.com/#/?id=address-structure>`
|
@@ -1130,7 +1290,7 @@ class indodax(Exchange, ImplicitAPI):
|
|
1130
1290
|
addresses = self.safe_dict(data, 'address', {})
|
1131
1291
|
networks = self.safe_dict(data, 'network', {})
|
1132
1292
|
addressKeys = list(addresses.keys())
|
1133
|
-
result = {
|
1293
|
+
result: dict = {
|
1134
1294
|
'info': data,
|
1135
1295
|
}
|
1136
1296
|
for i in range(0, len(addressKeys)):
|
@@ -1152,8 +1312,8 @@ class indodax(Exchange, ImplicitAPI):
|
|
1152
1312
|
result[code] = {
|
1153
1313
|
'info': {},
|
1154
1314
|
'currency': code,
|
1155
|
-
'address': address,
|
1156
1315
|
'network': network,
|
1316
|
+
'address': address,
|
1157
1317
|
'tag': None,
|
1158
1318
|
}
|
1159
1319
|
return result
|
@@ -1180,17 +1340,21 @@ class indodax(Exchange, ImplicitAPI):
|
|
1180
1340
|
}
|
1181
1341
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1182
1342
|
|
1183
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1343
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1184
1344
|
if response is None:
|
1185
1345
|
return None
|
1186
1346
|
# {success: 0, error: "invalid order."}
|
1187
1347
|
# or
|
1188
1348
|
# [{data, ...}, {...}, ...]
|
1349
|
+
# {"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
1350
|
if isinstance(response, list):
|
1190
1351
|
return None # public endpoints may return []-arrays
|
1191
1352
|
error = self.safe_value(response, 'error', '')
|
1192
1353
|
if not ('success' in response) and error == '':
|
1193
1354
|
return None # no 'success' property on public responses
|
1355
|
+
status = self.safe_string(response, 'success')
|
1356
|
+
if status == 'approved':
|
1357
|
+
return None
|
1194
1358
|
if self.safe_integer(response, 'success', 0) == 1:
|
1195
1359
|
# {success: 1, return: {orders: []}}
|
1196
1360
|
if not ('return' in response):
|