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/ndax.py
CHANGED
@@ -7,13 +7,13 @@ from ccxt.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.ndax import ImplicitAPI
|
8
8
|
import hashlib
|
9
9
|
import json
|
10
|
-
from ccxt.base.types import Account, Balances, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, Transaction
|
10
|
+
from ccxt.base.types import Account, Balances, Currencies, Currency, DepositAddress, IndexType, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, 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 BadSymbol
|
14
15
|
from ccxt.base.errors import InsufficientFunds
|
15
16
|
from ccxt.base.errors import OrderNotFound
|
16
|
-
from ccxt.base.errors import AuthenticationError
|
17
17
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
18
18
|
from ccxt.base.precise import Precise
|
19
19
|
|
@@ -48,46 +48,79 @@ class ndax(Exchange, ImplicitAPI):
|
|
48
48
|
'editOrder': True,
|
49
49
|
'fetchAccounts': True,
|
50
50
|
'fetchBalance': True,
|
51
|
+
'fetchBorrowInterest': False,
|
52
|
+
'fetchBorrowRate': False,
|
51
53
|
'fetchBorrowRateHistories': False,
|
52
54
|
'fetchBorrowRateHistory': False,
|
55
|
+
'fetchBorrowRates': False,
|
56
|
+
'fetchBorrowRatesPerSymbol': False,
|
53
57
|
'fetchCrossBorrowRate': False,
|
54
58
|
'fetchCrossBorrowRates': False,
|
55
59
|
'fetchCurrencies': True,
|
56
60
|
'fetchDepositAddress': True,
|
61
|
+
'fetchDepositAddresses': False,
|
62
|
+
'fetchDepositAddressesByNetwork': False,
|
57
63
|
'fetchDeposits': True,
|
58
64
|
'fetchFundingHistory': False,
|
65
|
+
'fetchFundingInterval': False,
|
66
|
+
'fetchFundingIntervals': False,
|
59
67
|
'fetchFundingRate': False,
|
60
68
|
'fetchFundingRateHistory': False,
|
61
69
|
'fetchFundingRates': False,
|
70
|
+
'fetchGreeks': False,
|
62
71
|
'fetchIndexOHLCV': False,
|
63
72
|
'fetchIsolatedBorrowRate': False,
|
64
73
|
'fetchIsolatedBorrowRates': False,
|
74
|
+
'fetchIsolatedPositions': False,
|
65
75
|
'fetchLedger': True,
|
66
76
|
'fetchLeverage': False,
|
77
|
+
'fetchLeverages': False,
|
67
78
|
'fetchLeverageTiers': False,
|
79
|
+
'fetchLiquidations': False,
|
80
|
+
'fetchMarginAdjustmentHistory': False,
|
81
|
+
'fetchMarginMode': False,
|
82
|
+
'fetchMarginModes': False,
|
83
|
+
'fetchMarketLeverageTiers': False,
|
68
84
|
'fetchMarkets': True,
|
69
85
|
'fetchMarkOHLCV': False,
|
86
|
+
'fetchMarkPrices': False,
|
87
|
+
'fetchMyLiquidations': False,
|
88
|
+
'fetchMySettlementHistory': False,
|
70
89
|
'fetchMyTrades': True,
|
71
90
|
'fetchOHLCV': True,
|
91
|
+
'fetchOpenInterest': False,
|
72
92
|
'fetchOpenInterestHistory': False,
|
73
93
|
'fetchOpenOrders': True,
|
94
|
+
'fetchOption': False,
|
95
|
+
'fetchOptionChain': False,
|
74
96
|
'fetchOrder': True,
|
75
97
|
'fetchOrderBook': True,
|
76
98
|
'fetchOrders': True,
|
77
99
|
'fetchOrderTrades': True,
|
78
100
|
'fetchPosition': False,
|
101
|
+
'fetchPositionHistory': False,
|
102
|
+
'fetchPositionMode': False,
|
79
103
|
'fetchPositions': False,
|
104
|
+
'fetchPositionsForSymbol': False,
|
105
|
+
'fetchPositionsHistory': False,
|
80
106
|
'fetchPositionsRisk': False,
|
81
107
|
'fetchPremiumIndexOHLCV': False,
|
108
|
+
'fetchSettlementHistory': False,
|
82
109
|
'fetchTicker': True,
|
83
110
|
'fetchTickers': False,
|
84
111
|
'fetchTime': False,
|
85
112
|
'fetchTrades': True,
|
86
113
|
'fetchTradingFee': False,
|
87
114
|
'fetchTradingFees': False,
|
115
|
+
'fetchUnderlyingAssets': False,
|
116
|
+
'fetchVolatilityHistory': False,
|
88
117
|
'fetchWithdrawals': True,
|
89
118
|
'reduceMargin': False,
|
119
|
+
'repayCrossMargin': False,
|
120
|
+
'repayIsolatedMargin': False,
|
121
|
+
'sandbox': True,
|
90
122
|
'setLeverage': False,
|
123
|
+
'setMargin': False,
|
91
124
|
'setMarginMode': False,
|
92
125
|
'setPositionMode': False,
|
93
126
|
'signIn': True,
|
@@ -231,6 +264,77 @@ class ndax(Exchange, ImplicitAPI):
|
|
231
264
|
},
|
232
265
|
},
|
233
266
|
},
|
267
|
+
'features': {
|
268
|
+
'spot': {
|
269
|
+
'sandbox': True,
|
270
|
+
'createOrder': {
|
271
|
+
'marginMode': False,
|
272
|
+
'triggerPrice': True,
|
273
|
+
'triggerDirection': False,
|
274
|
+
'triggerPriceType': {
|
275
|
+
'last': True,
|
276
|
+
'mark': False,
|
277
|
+
'index': False,
|
278
|
+
# bid & ask
|
279
|
+
},
|
280
|
+
'stopLossPrice': False, # todo
|
281
|
+
'takeProfitPrice': False, # todo
|
282
|
+
'attachedStopLossTakeProfit': None,
|
283
|
+
# todo
|
284
|
+
'timeInForce': {
|
285
|
+
'IOC': True,
|
286
|
+
'FOK': True,
|
287
|
+
'PO': True,
|
288
|
+
'GTD': False,
|
289
|
+
},
|
290
|
+
'hedged': False,
|
291
|
+
'trailing': False,
|
292
|
+
'leverage': False,
|
293
|
+
'marketBuyByCost': False,
|
294
|
+
'marketBuyRequiresPrice': False,
|
295
|
+
'selfTradePrevention': False,
|
296
|
+
'iceberg': True, # todo
|
297
|
+
},
|
298
|
+
'createOrders': None,
|
299
|
+
'fetchMyTrades': {
|
300
|
+
'marginMode': False,
|
301
|
+
'limit': 100, # todo
|
302
|
+
'daysBack': 100000, # todo
|
303
|
+
'untilDays': 100000, # todo
|
304
|
+
},
|
305
|
+
'fetchOrder': {
|
306
|
+
'marginMode': False,
|
307
|
+
'trigger': False,
|
308
|
+
'trailing': False,
|
309
|
+
},
|
310
|
+
'fetchOpenOrders': {
|
311
|
+
'marginMode': False,
|
312
|
+
'limit': None,
|
313
|
+
'trigger': False,
|
314
|
+
'trailing': False,
|
315
|
+
},
|
316
|
+
'fetchOrders': {
|
317
|
+
'marginMode': False,
|
318
|
+
'limit': None,
|
319
|
+
'daysBack': None,
|
320
|
+
'untilDays': None,
|
321
|
+
'trigger': False,
|
322
|
+
'trailing': False,
|
323
|
+
},
|
324
|
+
'fetchClosedOrders': None,
|
325
|
+
'fetchOHLCV': {
|
326
|
+
'limit': None,
|
327
|
+
},
|
328
|
+
},
|
329
|
+
'swap': {
|
330
|
+
'linear': None,
|
331
|
+
'inverse': None,
|
332
|
+
},
|
333
|
+
'future': {
|
334
|
+
'linear': None,
|
335
|
+
'inverse': None,
|
336
|
+
},
|
337
|
+
},
|
234
338
|
'fees': {
|
235
339
|
'trading': {
|
236
340
|
'tierBased': False,
|
@@ -284,14 +388,16 @@ class ndax(Exchange, ImplicitAPI):
|
|
284
388
|
def sign_in(self, params={}):
|
285
389
|
"""
|
286
390
|
sign in, must be called prior to using other authenticated methods
|
287
|
-
|
391
|
+
|
392
|
+
https://apidoc.ndax.io/#authenticate2fa
|
393
|
+
|
288
394
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
289
395
|
:returns: response from exchange
|
290
396
|
"""
|
291
397
|
self.check_required_credentials()
|
292
398
|
if self.login is None or self.password is None:
|
293
399
|
raise AuthenticationError(self.id + ' signIn() requires exchange.login, exchange.password')
|
294
|
-
request = {
|
400
|
+
request: dict = {
|
295
401
|
'grant_type': 'client_credentials', # the only supported value
|
296
402
|
}
|
297
403
|
response = self.publicGetAuthenticate(self.extend(request, params))
|
@@ -320,7 +426,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
320
426
|
#
|
321
427
|
# {
|
322
428
|
# "Authenticated": True,
|
323
|
-
# "UserId":
|
429
|
+
# "UserId":57764,
|
324
430
|
# "SessionToken":"4a2a5857-c4e5-4fac-b09e-2c4c30b591a0"
|
325
431
|
# }
|
326
432
|
#
|
@@ -329,15 +435,17 @@ class ndax(Exchange, ImplicitAPI):
|
|
329
435
|
return responseInner
|
330
436
|
return response
|
331
437
|
|
332
|
-
def fetch_currencies(self, params={}):
|
438
|
+
def fetch_currencies(self, params={}) -> Currencies:
|
333
439
|
"""
|
334
440
|
fetches all available currencies on an exchange
|
335
|
-
|
441
|
+
|
442
|
+
https://apidoc.ndax.io/#getproduct
|
443
|
+
|
336
444
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
337
445
|
:returns dict: an associative dictionary of currencies
|
338
446
|
"""
|
339
447
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
340
|
-
request = {
|
448
|
+
request: dict = {
|
341
449
|
'omsId': omsId,
|
342
450
|
}
|
343
451
|
response = self.publicGetGetProducts(self.extend(request, params))
|
@@ -357,7 +465,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
357
465
|
# },
|
358
466
|
# ]
|
359
467
|
#
|
360
|
-
result = {}
|
468
|
+
result: dict = {}
|
361
469
|
for i in range(0, len(response)):
|
362
470
|
currency = response[i]
|
363
471
|
id = self.safe_string(currency, 'ProductId')
|
@@ -395,15 +503,17 @@ class ndax(Exchange, ImplicitAPI):
|
|
395
503
|
}
|
396
504
|
return result
|
397
505
|
|
398
|
-
def fetch_markets(self, params={}):
|
506
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
399
507
|
"""
|
400
508
|
retrieves data on all markets for ndax
|
401
|
-
|
509
|
+
|
510
|
+
https://apidoc.ndax.io/#getinstruments
|
511
|
+
|
402
512
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
403
513
|
:returns dict[]: an array of objects representing market data
|
404
514
|
"""
|
405
515
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
406
|
-
request = {
|
516
|
+
request: dict = {
|
407
517
|
'omsId': omsId,
|
408
518
|
}
|
409
519
|
response = self.publicGetGetInstruments(self.extend(request, params))
|
@@ -455,7 +565,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
455
565
|
#
|
456
566
|
return self.parse_markets(response)
|
457
567
|
|
458
|
-
def parse_market(self, market) -> Market:
|
568
|
+
def parse_market(self, market: dict) -> Market:
|
459
569
|
id = self.safe_string(market, 'InstrumentId')
|
460
570
|
# lowercaseId = self.safe_string_lower(market, 'symbol')
|
461
571
|
baseId = self.safe_string(market, 'Product1')
|
@@ -517,7 +627,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
517
627
|
|
518
628
|
def parse_order_book(self, orderbook, symbol, timestamp=None, bidsKey='bids', asksKey='asks', priceKey: IndexType = 6, amountKey: IndexType = 8, countOrIdKey: IndexType = 2):
|
519
629
|
nonce = None
|
520
|
-
result = {
|
630
|
+
result: dict = {
|
521
631
|
'symbol': symbol,
|
522
632
|
'bids': [],
|
523
633
|
'asks': [],
|
@@ -551,7 +661,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
551
661
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
552
662
|
"""
|
553
663
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
554
|
-
|
664
|
+
|
665
|
+
https://apidoc.ndax.io/#getl2snapshot
|
666
|
+
|
555
667
|
:param str symbol: unified symbol of the market to fetch the order book for
|
556
668
|
:param int [limit]: the maximum amount of order book entries to return
|
557
669
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -561,7 +673,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
561
673
|
self.load_markets()
|
562
674
|
market = self.market(symbol)
|
563
675
|
limit = 100 if (limit is None) else limit # default 100
|
564
|
-
request = {
|
676
|
+
request: dict = {
|
565
677
|
'omsId': omsId,
|
566
678
|
'InstrumentId': market['id'],
|
567
679
|
'Depth': limit, # default 100
|
@@ -591,7 +703,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
591
703
|
#
|
592
704
|
return self.parse_order_book(response, symbol)
|
593
705
|
|
594
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
706
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
595
707
|
#
|
596
708
|
# fetchTicker
|
597
709
|
#
|
@@ -660,7 +772,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
660
772
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
661
773
|
"""
|
662
774
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
663
|
-
|
775
|
+
|
776
|
+
https://apidoc.ndax.io/#getlevel1
|
777
|
+
|
664
778
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
665
779
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
666
780
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -668,7 +782,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
668
782
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
669
783
|
self.load_markets()
|
670
784
|
market = self.market(symbol)
|
671
|
-
request = {
|
785
|
+
request: dict = {
|
672
786
|
'omsId': omsId,
|
673
787
|
'InstrumentId': market['id'],
|
674
788
|
}
|
@@ -731,7 +845,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
731
845
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
732
846
|
"""
|
733
847
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
734
|
-
|
848
|
+
|
849
|
+
https://apidoc.ndax.io/#gettickerhistory
|
850
|
+
|
735
851
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
736
852
|
:param str timeframe: the length of time each candle represents
|
737
853
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -742,7 +858,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
742
858
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
743
859
|
self.load_markets()
|
744
860
|
market = self.market(symbol)
|
745
|
-
request = {
|
861
|
+
request: dict = {
|
746
862
|
'omsId': omsId,
|
747
863
|
'InstrumentId': market['id'],
|
748
864
|
'Interval': self.safe_string(self.timeframes, timeframe, timeframe),
|
@@ -769,7 +885,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
769
885
|
#
|
770
886
|
return self.parse_ohlcvs(response, market, timeframe, since, limit)
|
771
887
|
|
772
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
888
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
773
889
|
#
|
774
890
|
# fetchTrades(public)
|
775
891
|
#
|
@@ -946,7 +1062,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
946
1062
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
947
1063
|
self.load_markets()
|
948
1064
|
market = self.market(symbol)
|
949
|
-
request = {
|
1065
|
+
request: dict = {
|
950
1066
|
'omsId': omsId,
|
951
1067
|
'InstrumentId': market['id'],
|
952
1068
|
}
|
@@ -965,7 +1081,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
965
1081
|
def fetch_accounts(self, params={}) -> List[Account]:
|
966
1082
|
"""
|
967
1083
|
fetch all the accounts associated with a profile
|
968
|
-
|
1084
|
+
|
1085
|
+
https://apidoc.ndax.io/#getuseraccounts
|
1086
|
+
|
969
1087
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
970
1088
|
:returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
|
971
1089
|
"""
|
@@ -973,7 +1091,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
973
1091
|
raise AuthenticationError(self.id + ' fetchAccounts() requires exchange.login email credential')
|
974
1092
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
975
1093
|
self.check_required_credentials()
|
976
|
-
request = {
|
1094
|
+
request: dict = {
|
977
1095
|
'omsId': omsId,
|
978
1096
|
'UserId': self.uid,
|
979
1097
|
'UserName': self.login,
|
@@ -994,7 +1112,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
994
1112
|
return result
|
995
1113
|
|
996
1114
|
def parse_balance(self, response) -> Balances:
|
997
|
-
result = {
|
1115
|
+
result: dict = {
|
998
1116
|
'info': response,
|
999
1117
|
'timestamp': None,
|
1000
1118
|
'datetime': None,
|
@@ -1013,17 +1131,21 @@ class ndax(Exchange, ImplicitAPI):
|
|
1013
1131
|
def fetch_balance(self, params={}) -> Balances:
|
1014
1132
|
"""
|
1015
1133
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
1016
|
-
|
1134
|
+
|
1135
|
+
https://apidoc.ndax.io/#getaccountpositions
|
1136
|
+
|
1017
1137
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1018
1138
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
1019
1139
|
"""
|
1020
1140
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
1021
1141
|
self.load_markets()
|
1022
1142
|
self.load_accounts()
|
1023
|
-
defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId'
|
1143
|
+
defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId')
|
1024
1144
|
accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
|
1145
|
+
if accountId is None:
|
1146
|
+
accountId = int(self.accounts[0]['id'])
|
1025
1147
|
params = self.omit(params, ['accountId', 'AccountId'])
|
1026
|
-
request = {
|
1148
|
+
request: dict = {
|
1027
1149
|
'omsId': omsId,
|
1028
1150
|
'AccountId': accountId,
|
1029
1151
|
}
|
@@ -1062,7 +1184,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1062
1184
|
return self.parse_balance(response)
|
1063
1185
|
|
1064
1186
|
def parse_ledger_entry_type(self, type):
|
1065
|
-
types = {
|
1187
|
+
types: dict = {
|
1066
1188
|
'Trade': 'trade',
|
1067
1189
|
'Deposit': 'transaction',
|
1068
1190
|
'Withdraw': 'transaction',
|
@@ -1079,7 +1201,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1079
1201
|
}
|
1080
1202
|
return self.safe_string(types, type, type)
|
1081
1203
|
|
1082
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
1204
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
1083
1205
|
#
|
1084
1206
|
# {
|
1085
1207
|
# "TransactionId": 2663709493,
|
@@ -1097,6 +1219,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1097
1219
|
# }
|
1098
1220
|
#
|
1099
1221
|
currencyId = self.safe_string(item, 'ProductId')
|
1222
|
+
currency = self.safe_currency(currencyId, currency)
|
1100
1223
|
credit = self.safe_string(item, 'CR')
|
1101
1224
|
debit = self.safe_string(item, 'DR')
|
1102
1225
|
amount = None
|
@@ -1114,7 +1237,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1114
1237
|
elif direction == 'in':
|
1115
1238
|
before = Precise.string_max('0', Precise.string_sub(after, amount))
|
1116
1239
|
timestamp = self.safe_integer(item, 'TimeStamp')
|
1117
|
-
return {
|
1240
|
+
return self.safe_ledger_entry({
|
1118
1241
|
'info': item,
|
1119
1242
|
'id': self.safe_string(item, 'TransactionId'),
|
1120
1243
|
'direction': direction,
|
@@ -1130,17 +1253,19 @@ class ndax(Exchange, ImplicitAPI):
|
|
1130
1253
|
'timestamp': timestamp,
|
1131
1254
|
'datetime': self.iso8601(timestamp),
|
1132
1255
|
'fee': None,
|
1133
|
-
}
|
1256
|
+
}, currency)
|
1134
1257
|
|
1135
|
-
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
1258
|
+
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
1136
1259
|
"""
|
1137
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
1138
|
-
|
1139
|
-
|
1260
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
1261
|
+
|
1262
|
+
https://apidoc.ndax.io/#getaccounttransactions
|
1263
|
+
|
1264
|
+
:param str [code]: unified currency code, default is None
|
1140
1265
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
1141
|
-
:param int [limit]: max number of ledger
|
1266
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
1142
1267
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1143
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
1268
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
1144
1269
|
"""
|
1145
1270
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
1146
1271
|
self.load_markets()
|
@@ -1148,7 +1273,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1148
1273
|
defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
|
1149
1274
|
accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
|
1150
1275
|
params = self.omit(params, ['accountId', 'AccountId'])
|
1151
|
-
request = {
|
1276
|
+
request: dict = {
|
1152
1277
|
'omsId': omsId,
|
1153
1278
|
'AccountId': accountId,
|
1154
1279
|
}
|
@@ -1178,8 +1303,8 @@ class ndax(Exchange, ImplicitAPI):
|
|
1178
1303
|
currency = self.currency(code)
|
1179
1304
|
return self.parse_ledger(response, currency, since, limit)
|
1180
1305
|
|
1181
|
-
def parse_order_status(self, status):
|
1182
|
-
statuses = {
|
1306
|
+
def parse_order_status(self, status: Str):
|
1307
|
+
statuses: dict = {
|
1183
1308
|
'Accepted': 'open',
|
1184
1309
|
'Rejected': 'rejected',
|
1185
1310
|
'Working': 'open',
|
@@ -1189,7 +1314,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1189
1314
|
}
|
1190
1315
|
return self.safe_string(statuses, status, status)
|
1191
1316
|
|
1192
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1317
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1193
1318
|
#
|
1194
1319
|
# createOrder
|
1195
1320
|
#
|
@@ -1273,7 +1398,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1273
1398
|
'postOnly': None,
|
1274
1399
|
'side': self.safe_string_lower(order, 'Side'),
|
1275
1400
|
'price': self.safe_string(order, 'Price'),
|
1276
|
-
'
|
1401
|
+
'triggerPrice': self.parse_number(self.omit_zero(self.safe_string(order, 'StopPrice'))),
|
1277
1402
|
'cost': self.safe_string(order, 'GrossValueExecuted'),
|
1278
1403
|
'amount': self.safe_string(order, 'OrigQuantity'),
|
1279
1404
|
'filled': self.safe_string(order, 'QuantityExecuted'),
|
@@ -1286,14 +1411,17 @@ class ndax(Exchange, ImplicitAPI):
|
|
1286
1411
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1287
1412
|
"""
|
1288
1413
|
create a trade order
|
1289
|
-
|
1414
|
+
|
1415
|
+
https://apidoc.ndax.io/#sendorder
|
1416
|
+
|
1290
1417
|
:param str symbol: unified symbol of the market to create an order in
|
1291
1418
|
:param str type: 'market' or 'limit'
|
1292
1419
|
:param str side: 'buy' or 'sell'
|
1293
1420
|
:param float amount: how much of currency you want to trade in units of base currency
|
1294
|
-
:param float [price]: the price at which the order is to be
|
1421
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1295
1422
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1296
1423
|
:param float [params.triggerPrice]: the price at which a trigger order would be triggered
|
1424
|
+
:param str [params.clientOrderId]: a unique id for the order
|
1297
1425
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1298
1426
|
"""
|
1299
1427
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
@@ -1312,7 +1440,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1312
1440
|
params = self.omit(params, ['accountId', 'AccountId', 'clientOrderId', 'ClientOrderId', 'triggerPrice'])
|
1313
1441
|
market = self.market(symbol)
|
1314
1442
|
orderSide = 0 if (side == 'buy') else 1
|
1315
|
-
request = {
|
1443
|
+
request: dict = {
|
1316
1444
|
'InstrumentId': int(market['id']),
|
1317
1445
|
'omsId': omsId,
|
1318
1446
|
'AccountId': accountId,
|
@@ -1357,7 +1485,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1357
1485
|
params = self.omit(params, ['accountId', 'AccountId', 'clientOrderId', 'ClientOrderId'])
|
1358
1486
|
market = self.market(symbol)
|
1359
1487
|
orderSide = 0 if (side == 'buy') else 1
|
1360
|
-
request = {
|
1488
|
+
request: dict = {
|
1361
1489
|
'OrderIdToReplace': int(id),
|
1362
1490
|
'InstrumentId': int(market['id']),
|
1363
1491
|
'omsId': omsId,
|
@@ -1395,7 +1523,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
1395
1523
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1396
1524
|
"""
|
1397
1525
|
fetch all trades made by the user
|
1398
|
-
|
1526
|
+
|
1527
|
+
https://apidoc.ndax.io/#gettradeshistory
|
1528
|
+
|
1399
1529
|
:param str symbol: unified market symbol
|
1400
1530
|
:param int [since]: the earliest time in ms to fetch trades for
|
1401
1531
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -1408,7 +1538,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1408
1538
|
defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
|
1409
1539
|
accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
|
1410
1540
|
params = self.omit(params, ['accountId', 'AccountId'])
|
1411
|
-
request = {
|
1541
|
+
request: dict = {
|
1412
1542
|
'omsId': omsId,
|
1413
1543
|
'AccountId': accountId,
|
1414
1544
|
# 'InstrumentId': market['id'],
|
@@ -1478,7 +1608,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
1478
1608
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
1479
1609
|
"""
|
1480
1610
|
cancel all open orders
|
1481
|
-
|
1611
|
+
|
1612
|
+
https://apidoc.ndax.io/#cancelallorders
|
1613
|
+
|
1482
1614
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
1483
1615
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1484
1616
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1489,7 +1621,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1489
1621
|
defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
|
1490
1622
|
accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
|
1491
1623
|
params = self.omit(params, ['accountId', 'AccountId'])
|
1492
|
-
request = {
|
1624
|
+
request: dict = {
|
1493
1625
|
'omsId': omsId,
|
1494
1626
|
'AccountId': accountId,
|
1495
1627
|
}
|
@@ -1505,15 +1637,22 @@ class ndax(Exchange, ImplicitAPI):
|
|
1505
1637
|
# "detail":null
|
1506
1638
|
# }
|
1507
1639
|
#
|
1508
|
-
return
|
1640
|
+
return [
|
1641
|
+
self.safe_order({
|
1642
|
+
'info': response,
|
1643
|
+
}),
|
1644
|
+
]
|
1509
1645
|
|
1510
1646
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1511
1647
|
"""
|
1512
1648
|
cancels an open order
|
1513
|
-
|
1649
|
+
|
1650
|
+
https://apidoc.ndax.io/#cancelorder
|
1651
|
+
|
1514
1652
|
:param str id: order id
|
1515
1653
|
:param str symbol: unified symbol of the market the order was made in
|
1516
1654
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1655
|
+
:param str [params.clientOrderId]: a unique id for the order
|
1517
1656
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1518
1657
|
"""
|
1519
1658
|
omsId = self.safe_integer(self.options, 'omsId', 1)
|
@@ -1525,7 +1664,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1525
1664
|
market = None
|
1526
1665
|
if symbol is not None:
|
1527
1666
|
market = self.market(symbol)
|
1528
|
-
request = {
|
1667
|
+
request: dict = {
|
1529
1668
|
'omsId': omsId,
|
1530
1669
|
# 'AccountId': accountId,
|
1531
1670
|
}
|
@@ -1545,7 +1684,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
1545
1684
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1546
1685
|
"""
|
1547
1686
|
fetch all unfilled currently open orders
|
1548
|
-
|
1687
|
+
|
1688
|
+
https://apidoc.ndax.io/#getopenorders
|
1689
|
+
|
1549
1690
|
:param str symbol: unified market symbol
|
1550
1691
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1551
1692
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -1561,7 +1702,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1561
1702
|
market = None
|
1562
1703
|
if symbol is not None:
|
1563
1704
|
market = self.market(symbol)
|
1564
|
-
request = {
|
1705
|
+
request: dict = {
|
1565
1706
|
'omsId': omsId,
|
1566
1707
|
'AccountId': accountId,
|
1567
1708
|
}
|
@@ -1621,7 +1762,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
1621
1762
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1622
1763
|
"""
|
1623
1764
|
fetches information on multiple orders made by the user
|
1624
|
-
|
1765
|
+
|
1766
|
+
https://apidoc.ndax.io/#getorderhistory
|
1767
|
+
|
1625
1768
|
:param str symbol: unified market symbol of the market orders were made in
|
1626
1769
|
:param int [since]: the earliest time in ms to fetch orders for
|
1627
1770
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -1634,7 +1777,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1634
1777
|
defaultAccountId = self.safe_integer_2(self.options, 'accountId', 'AccountId', int(self.accounts[0]['id']))
|
1635
1778
|
accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
|
1636
1779
|
params = self.omit(params, ['accountId', 'AccountId'])
|
1637
|
-
request = {
|
1780
|
+
request: dict = {
|
1638
1781
|
'omsId': omsId,
|
1639
1782
|
'AccountId': accountId,
|
1640
1783
|
# 'ClientOrderId': clientOrderId,
|
@@ -1711,7 +1854,10 @@ class ndax(Exchange, ImplicitAPI):
|
|
1711
1854
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1712
1855
|
"""
|
1713
1856
|
fetches information on an order made by the user
|
1714
|
-
|
1857
|
+
|
1858
|
+
https://apidoc.ndax.io/#getorderstatus
|
1859
|
+
|
1860
|
+
:param str id: order id
|
1715
1861
|
:param str symbol: unified symbol of the market the order was made in
|
1716
1862
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1717
1863
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1725,7 +1871,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1725
1871
|
market = None
|
1726
1872
|
if symbol is not None:
|
1727
1873
|
market = self.market(symbol)
|
1728
|
-
request = {
|
1874
|
+
request: dict = {
|
1729
1875
|
'omsId': omsId,
|
1730
1876
|
'AccountId': accountId,
|
1731
1877
|
'OrderId': int(id),
|
@@ -1784,7 +1930,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
1784
1930
|
def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1785
1931
|
"""
|
1786
1932
|
fetch all the trades made from a single order
|
1787
|
-
|
1933
|
+
|
1934
|
+
https://apidoc.ndax.io/#getorderhistorybyorderid
|
1935
|
+
|
1788
1936
|
:param str id: order id
|
1789
1937
|
:param str symbol: unified market symbol
|
1790
1938
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -1801,7 +1949,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1801
1949
|
market = None
|
1802
1950
|
if symbol is not None:
|
1803
1951
|
market = self.market(symbol)
|
1804
|
-
request = {
|
1952
|
+
request: dict = {
|
1805
1953
|
'OMSId': self.parse_to_int(omsId),
|
1806
1954
|
# 'AccountId': accountId,
|
1807
1955
|
'OrderId': int(id),
|
@@ -1858,10 +2006,10 @@ class ndax(Exchange, ImplicitAPI):
|
|
1858
2006
|
# ]
|
1859
2007
|
#
|
1860
2008
|
grouped = self.group_by(response, 'ChangeReason')
|
1861
|
-
trades = self.
|
2009
|
+
trades = self.safe_list(grouped, 'Trade', [])
|
1862
2010
|
return self.parse_trades(trades, market, since, limit)
|
1863
2011
|
|
1864
|
-
def fetch_deposit_address(self, code: str, params={}):
|
2012
|
+
def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1865
2013
|
"""
|
1866
2014
|
fetch the deposit address for a currency associated with self account
|
1867
2015
|
:param str code: unified currency code
|
@@ -1875,7 +2023,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1875
2023
|
accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
|
1876
2024
|
params = self.omit(params, ['accountId', 'AccountId'])
|
1877
2025
|
currency = self.currency(code)
|
1878
|
-
request = {
|
2026
|
+
request: dict = {
|
1879
2027
|
'omsId': omsId,
|
1880
2028
|
'AccountId': accountId,
|
1881
2029
|
'ProductId': currency['id'],
|
@@ -1896,7 +2044,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1896
2044
|
#
|
1897
2045
|
return self.parse_deposit_address(response, currency)
|
1898
2046
|
|
1899
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
2047
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
1900
2048
|
#
|
1901
2049
|
# fetchDepositAddress, createDepositAddress
|
1902
2050
|
#
|
@@ -1923,11 +2071,11 @@ class ndax(Exchange, ImplicitAPI):
|
|
1923
2071
|
code = currency['code']
|
1924
2072
|
self.check_address(address)
|
1925
2073
|
return {
|
2074
|
+
'info': depositAddress,
|
1926
2075
|
'currency': code,
|
2076
|
+
'network': None,
|
1927
2077
|
'address': address,
|
1928
2078
|
'tag': tag,
|
1929
|
-
'network': None,
|
1930
|
-
'info': depositAddress,
|
1931
2079
|
}
|
1932
2080
|
|
1933
2081
|
def create_deposit_address(self, code: str, params={}):
|
@@ -1937,7 +2085,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1937
2085
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1938
2086
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
1939
2087
|
"""
|
1940
|
-
request = {
|
2088
|
+
request: dict = {
|
1941
2089
|
'GenerateNewKey': True,
|
1942
2090
|
}
|
1943
2091
|
return self.fetch_deposit_address(code, self.extend(request, params))
|
@@ -1945,7 +2093,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
1945
2093
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1946
2094
|
"""
|
1947
2095
|
fetch all deposits made to an account
|
1948
|
-
|
2096
|
+
|
2097
|
+
https://apidoc.ndax.io/#getdeposits
|
2098
|
+
|
1949
2099
|
:param str code: unified currency code
|
1950
2100
|
:param int [since]: not used by ndax fetchDeposits
|
1951
2101
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -1961,7 +2111,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
1961
2111
|
currency = None
|
1962
2112
|
if code is not None:
|
1963
2113
|
currency = self.currency(code)
|
1964
|
-
request = {
|
2114
|
+
request: dict = {
|
1965
2115
|
'omsId': omsId,
|
1966
2116
|
'AccountId': accountId,
|
1967
2117
|
}
|
@@ -2001,7 +2151,9 @@ class ndax(Exchange, ImplicitAPI):
|
|
2001
2151
|
def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2002
2152
|
"""
|
2003
2153
|
fetch all withdrawals made from an account
|
2004
|
-
|
2154
|
+
|
2155
|
+
https://apidoc.ndax.io/#getwithdraws
|
2156
|
+
|
2005
2157
|
:param str code: unified currency code
|
2006
2158
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
2007
2159
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
@@ -2017,7 +2169,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
2017
2169
|
currency = None
|
2018
2170
|
if code is not None:
|
2019
2171
|
currency = self.currency(code)
|
2020
|
-
request = {
|
2172
|
+
request: dict = {
|
2021
2173
|
'omsId': omsId,
|
2022
2174
|
'AccountId': accountId,
|
2023
2175
|
}
|
@@ -2049,7 +2201,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
2049
2201
|
return self.parse_transactions(response, currency, since, limit)
|
2050
2202
|
|
2051
2203
|
def parse_transaction_status_by_type(self, status, type=None):
|
2052
|
-
statusesByType = {
|
2204
|
+
statusesByType: dict = {
|
2053
2205
|
'deposit': {
|
2054
2206
|
'New': 'pending', # new ticket awaiting operator review
|
2055
2207
|
'AdminProcessing': 'pending', # an admin is looking at the ticket
|
@@ -2096,7 +2248,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
2096
2248
|
statuses = self.safe_value(statusesByType, type, {})
|
2097
2249
|
return self.safe_string(statuses, status, status)
|
2098
2250
|
|
2099
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2251
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
2100
2252
|
#
|
2101
2253
|
# fetchDeposits
|
2102
2254
|
#
|
@@ -2191,7 +2343,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
2191
2343
|
'network': None,
|
2192
2344
|
}
|
2193
2345
|
|
2194
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2346
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2195
2347
|
"""
|
2196
2348
|
make a withdrawal
|
2197
2349
|
:param str code: unified currency code
|
@@ -2216,7 +2368,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
2216
2368
|
accountId = self.safe_integer_2(params, 'accountId', 'AccountId', defaultAccountId)
|
2217
2369
|
params = self.omit(params, ['accountId', 'AccountId'])
|
2218
2370
|
currency = self.currency(code)
|
2219
|
-
withdrawTemplateTypesRequest = {
|
2371
|
+
withdrawTemplateTypesRequest: dict = {
|
2220
2372
|
'omsId': omsId,
|
2221
2373
|
'AccountId': accountId,
|
2222
2374
|
'ProductId': currency['id'],
|
@@ -2239,7 +2391,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
2239
2391
|
if firstTemplateType is None:
|
2240
2392
|
raise ExchangeError(self.id + ' withdraw() could not find a withdraw template type for ' + currency['code'])
|
2241
2393
|
templateName = self.safe_string(firstTemplateType, 'TemplateName')
|
2242
|
-
withdrawTemplateRequest = {
|
2394
|
+
withdrawTemplateRequest: dict = {
|
2243
2395
|
'omsId': omsId,
|
2244
2396
|
'AccountId': accountId,
|
2245
2397
|
'ProductId': currency['id'],
|
@@ -2263,14 +2415,14 @@ class ndax(Exchange, ImplicitAPI):
|
|
2263
2415
|
if tag is not None:
|
2264
2416
|
if 'Memo' in withdrawTemplate:
|
2265
2417
|
withdrawTemplate['Memo'] = tag
|
2266
|
-
withdrawPayload = {
|
2418
|
+
withdrawPayload: dict = {
|
2267
2419
|
'omsId': omsId,
|
2268
2420
|
'AccountId': accountId,
|
2269
2421
|
'ProductId': currency['id'],
|
2270
2422
|
'TemplateForm': self.json(withdrawTemplate),
|
2271
2423
|
'TemplateType': templateName,
|
2272
2424
|
}
|
2273
|
-
withdrawRequest = {
|
2425
|
+
withdrawRequest: dict = {
|
2274
2426
|
'TfaType': 'Google',
|
2275
2427
|
'TFaCode': self.totp(self.twofa),
|
2276
2428
|
'Payload': self.json(withdrawPayload),
|
@@ -2327,7 +2479,7 @@ class ndax(Exchange, ImplicitAPI):
|
|
2327
2479
|
url += '?' + self.urlencode(query)
|
2328
2480
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
2329
2481
|
|
2330
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
2482
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
2331
2483
|
if code == 404:
|
2332
2484
|
raise AuthenticationError(self.id + ' ' + body)
|
2333
2485
|
if response is None:
|