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/novadax.py
CHANGED
@@ -9,6 +9,7 @@ import hashlib
|
|
9
9
|
from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountNotEnabled
|
14
15
|
from ccxt.base.errors import AccountSuspended
|
@@ -18,10 +19,9 @@ from ccxt.base.errors import BadSymbol
|
|
18
19
|
from ccxt.base.errors import InsufficientFunds
|
19
20
|
from ccxt.base.errors import InvalidOrder
|
20
21
|
from ccxt.base.errors import OrderNotFound
|
21
|
-
from ccxt.base.errors import CancelPending
|
22
22
|
from ccxt.base.errors import RateLimitExceeded
|
23
23
|
from ccxt.base.errors import OnMaintenance
|
24
|
-
from ccxt.base.errors import
|
24
|
+
from ccxt.base.errors import CancelPending
|
25
25
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
26
26
|
from ccxt.base.precise import Precise
|
27
27
|
|
@@ -89,7 +89,11 @@ class novadax(Exchange, ImplicitAPI):
|
|
89
89
|
'fetchOrders': True,
|
90
90
|
'fetchOrderTrades': True,
|
91
91
|
'fetchPosition': False,
|
92
|
+
'fetchPositionHistory': False,
|
93
|
+
'fetchPositionMode': False,
|
92
94
|
'fetchPositions': False,
|
95
|
+
'fetchPositionsForSymbol': False,
|
96
|
+
'fetchPositionsHistory': False,
|
93
97
|
'fetchPositionsRisk': False,
|
94
98
|
'fetchPremiumIndexOHLCV': False,
|
95
99
|
'fetchTicker': True,
|
@@ -219,12 +223,88 @@ class novadax(Exchange, ImplicitAPI):
|
|
219
223
|
'fillResponseFromRequest': True,
|
220
224
|
},
|
221
225
|
},
|
226
|
+
'features': {
|
227
|
+
'spot': {
|
228
|
+
'sandbox': False,
|
229
|
+
'createOrder': {
|
230
|
+
'marginMode': False,
|
231
|
+
'triggerPrice': True,
|
232
|
+
'triggerDirection': True, # todo
|
233
|
+
'triggerPriceType': None,
|
234
|
+
'stopLossPrice': False, # todo
|
235
|
+
'takeProfitPrice': False, # todo
|
236
|
+
'attachedStopLossTakeProfit': None,
|
237
|
+
# todo
|
238
|
+
'timeInForce': {
|
239
|
+
'IOC': False,
|
240
|
+
'FOK': False,
|
241
|
+
'PO': False,
|
242
|
+
'GTD': False,
|
243
|
+
},
|
244
|
+
'hedged': False,
|
245
|
+
'trailing': False,
|
246
|
+
'leverage': False,
|
247
|
+
'marketBuyByCost': True,
|
248
|
+
'marketBuyRequiresPrice': False,
|
249
|
+
'selfTradePrevention': False,
|
250
|
+
'iceberg': True, # todo
|
251
|
+
},
|
252
|
+
'createOrders': None, # todo: add implementation
|
253
|
+
'fetchMyTrades': {
|
254
|
+
'marginMode': False,
|
255
|
+
'limit': 100,
|
256
|
+
'daysBack': 100000, # todo
|
257
|
+
'untilDays': 100000, # todo
|
258
|
+
},
|
259
|
+
'fetchOrder': {
|
260
|
+
'marginMode': False,
|
261
|
+
'trigger': False,
|
262
|
+
'trailing': False,
|
263
|
+
},
|
264
|
+
'fetchOpenOrders': {
|
265
|
+
'marginMode': False,
|
266
|
+
'limit': None,
|
267
|
+
'trigger': False,
|
268
|
+
'trailing': False,
|
269
|
+
},
|
270
|
+
'fetchOrders': {
|
271
|
+
'marginMode': False,
|
272
|
+
'limit': 100,
|
273
|
+
'daysBack': 100000, # todo
|
274
|
+
'untilDays': 100000, # todo
|
275
|
+
'trigger': False,
|
276
|
+
'trailing': False,
|
277
|
+
},
|
278
|
+
'fetchClosedOrders': {
|
279
|
+
'marginMode': False,
|
280
|
+
'limit': 100,
|
281
|
+
'daysBack': 100000, # todo
|
282
|
+
'daysBackCanceled': 1, # todo
|
283
|
+
'untilDays': 100000, # todo
|
284
|
+
'trigger': False,
|
285
|
+
'trailing': False,
|
286
|
+
},
|
287
|
+
'fetchOHLCV': {
|
288
|
+
'limit': None, # todo max 3000
|
289
|
+
},
|
290
|
+
},
|
291
|
+
'swap': {
|
292
|
+
'linear': None,
|
293
|
+
'inverse': None,
|
294
|
+
},
|
295
|
+
'future': {
|
296
|
+
'linear': None,
|
297
|
+
'inverse': None,
|
298
|
+
},
|
299
|
+
},
|
222
300
|
})
|
223
301
|
|
224
302
|
def fetch_time(self, params={}):
|
225
303
|
"""
|
226
304
|
fetches the current integer timestamp in milliseconds from the exchange server
|
227
|
-
|
305
|
+
|
306
|
+
https://doc.novadax.com/en-US/#get-current-system-time
|
307
|
+
|
228
308
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
229
309
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
230
310
|
"""
|
@@ -238,10 +318,12 @@ class novadax(Exchange, ImplicitAPI):
|
|
238
318
|
#
|
239
319
|
return self.safe_integer(response, 'data')
|
240
320
|
|
241
|
-
def fetch_markets(self, params={}):
|
321
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
242
322
|
"""
|
243
323
|
retrieves data on all markets for novadax
|
244
|
-
|
324
|
+
|
325
|
+
https://doc.novadax.com/en-US/#get-all-supported-trading-symbol
|
326
|
+
|
245
327
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
246
328
|
:returns dict[]: an array of objects representing market data
|
247
329
|
"""
|
@@ -268,7 +350,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
268
350
|
data = self.safe_value(response, 'data', [])
|
269
351
|
return self.parse_markets(data)
|
270
352
|
|
271
|
-
def parse_market(self, market) -> Market:
|
353
|
+
def parse_market(self, market: dict) -> Market:
|
272
354
|
baseId = self.safe_string(market, 'baseCurrency')
|
273
355
|
quoteId = self.safe_string(market, 'quoteCurrency')
|
274
356
|
id = self.safe_string(market, 'symbol')
|
@@ -326,7 +408,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
326
408
|
'info': market,
|
327
409
|
}
|
328
410
|
|
329
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
411
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
330
412
|
#
|
331
413
|
# fetchTicker, fetchTickers
|
332
414
|
#
|
@@ -376,14 +458,16 @@ class novadax(Exchange, ImplicitAPI):
|
|
376
458
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
377
459
|
"""
|
378
460
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
379
|
-
|
461
|
+
|
462
|
+
https://doc.novadax.com/en-US/#get-latest-ticker-for-specific-pair
|
463
|
+
|
380
464
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
381
465
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
382
466
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
383
467
|
"""
|
384
468
|
self.load_markets()
|
385
469
|
market = self.market(symbol)
|
386
|
-
request = {
|
470
|
+
request: dict = {
|
387
471
|
'symbol': market['id'],
|
388
472
|
}
|
389
473
|
response = self.publicGetMarketTicker(self.extend(request, params))
|
@@ -405,13 +489,15 @@ class novadax(Exchange, ImplicitAPI):
|
|
405
489
|
# "message":"Success"
|
406
490
|
# }
|
407
491
|
#
|
408
|
-
data = self.
|
492
|
+
data = self.safe_dict(response, 'data', {})
|
409
493
|
return self.parse_ticker(data, market)
|
410
494
|
|
411
495
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
412
496
|
"""
|
413
497
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
414
|
-
|
498
|
+
|
499
|
+
https://doc.novadax.com/en-US/#get-latest-tickers-for-all-trading-pairs
|
500
|
+
|
415
501
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
416
502
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
417
503
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -440,7 +526,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
440
526
|
# }
|
441
527
|
#
|
442
528
|
data = self.safe_value(response, 'data', [])
|
443
|
-
result = {}
|
529
|
+
result: dict = {}
|
444
530
|
for i in range(0, len(data)):
|
445
531
|
ticker = self.parse_ticker(data[i])
|
446
532
|
symbol = ticker['symbol']
|
@@ -450,7 +536,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
450
536
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
451
537
|
"""
|
452
538
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
453
|
-
|
539
|
+
|
540
|
+
https://doc.novadax.com/en-US/#get-market-depth
|
541
|
+
|
454
542
|
:param str symbol: unified symbol of the market to fetch the order book for
|
455
543
|
:param int [limit]: the maximum amount of order book entries to return
|
456
544
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -458,7 +546,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
458
546
|
"""
|
459
547
|
self.load_markets()
|
460
548
|
market = self.market(symbol)
|
461
|
-
request = {
|
549
|
+
request: dict = {
|
462
550
|
'symbol': market['id'],
|
463
551
|
}
|
464
552
|
if limit is not None:
|
@@ -487,7 +575,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
487
575
|
timestamp = self.safe_integer(data, 'timestamp')
|
488
576
|
return self.parse_order_book(data, market['symbol'], timestamp, 'bids', 'asks')
|
489
577
|
|
490
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
578
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
491
579
|
#
|
492
580
|
# public fetchTrades
|
493
581
|
#
|
@@ -567,7 +655,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
567
655
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
568
656
|
"""
|
569
657
|
get the list of most recent trades for a particular symbol
|
570
|
-
|
658
|
+
|
659
|
+
https://doc.novadax.com/en-US/#get-recent-trades
|
660
|
+
|
571
661
|
:param str symbol: unified symbol of the market to fetch trades for
|
572
662
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
573
663
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -576,7 +666,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
576
666
|
"""
|
577
667
|
self.load_markets()
|
578
668
|
market = self.market(symbol)
|
579
|
-
request = {
|
669
|
+
request: dict = {
|
580
670
|
'symbol': market['id'],
|
581
671
|
}
|
582
672
|
if limit is not None:
|
@@ -593,13 +683,15 @@ class novadax(Exchange, ImplicitAPI):
|
|
593
683
|
# "message":"Success"
|
594
684
|
# }
|
595
685
|
#
|
596
|
-
data = self.
|
686
|
+
data = self.safe_list(response, 'data', [])
|
597
687
|
return self.parse_trades(data, market, since, limit)
|
598
688
|
|
599
689
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
600
690
|
"""
|
601
691
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
602
|
-
|
692
|
+
|
693
|
+
https://doc.novadax.com/en-US/#get-kline-data
|
694
|
+
|
603
695
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
604
696
|
:param str timeframe: the length of time each candle represents
|
605
697
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -609,7 +701,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
609
701
|
"""
|
610
702
|
self.load_markets()
|
611
703
|
market = self.market(symbol)
|
612
|
-
request = {
|
704
|
+
request: dict = {
|
613
705
|
'symbol': market['id'],
|
614
706
|
'unit': self.safe_string(self.timeframes, timeframe, timeframe),
|
615
707
|
}
|
@@ -644,7 +736,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
644
736
|
# "message": "Success"
|
645
737
|
# }
|
646
738
|
#
|
647
|
-
data = self.
|
739
|
+
data = self.safe_list(response, 'data', [])
|
648
740
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
649
741
|
|
650
742
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -674,7 +766,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
674
766
|
|
675
767
|
def parse_balance(self, response) -> Balances:
|
676
768
|
data = self.safe_value(response, 'data', [])
|
677
|
-
result = {
|
769
|
+
result: dict = {
|
678
770
|
'info': response,
|
679
771
|
'timestamp': None,
|
680
772
|
'datetime': None,
|
@@ -693,7 +785,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
693
785
|
def fetch_balance(self, params={}) -> Balances:
|
694
786
|
"""
|
695
787
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
696
|
-
|
788
|
+
|
789
|
+
https://doc.novadax.com/en-US/#get-account-balance
|
790
|
+
|
697
791
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
698
792
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
699
793
|
"""
|
@@ -718,12 +812,14 @@ class novadax(Exchange, ImplicitAPI):
|
|
718
812
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
719
813
|
"""
|
720
814
|
create a trade order
|
721
|
-
|
815
|
+
|
816
|
+
https://doc.novadax.com/en-US/#order-introduction
|
817
|
+
|
722
818
|
:param str symbol: unified symbol of the market to create an order in
|
723
819
|
:param str type: 'market' or 'limit'
|
724
820
|
:param str side: 'buy' or 'sell'
|
725
821
|
:param float amount: how much you want to trade in units of the base currency
|
726
|
-
:param float [price]: the price at which the order is to be
|
822
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
727
823
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
728
824
|
:param float [params.cost]: for spot market buy orders, the quote quantity that can be used alternative for the amount
|
729
825
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -732,7 +828,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
732
828
|
market = self.market(symbol)
|
733
829
|
uppercaseType = type.upper()
|
734
830
|
uppercaseSide = side.upper()
|
735
|
-
request = {
|
831
|
+
request: dict = {
|
736
832
|
'symbol': market['id'],
|
737
833
|
'side': uppercaseSide, # or SELL
|
738
834
|
# "amount": self.amount_to_precision(symbol, amount),
|
@@ -741,8 +837,8 @@ class novadax(Exchange, ImplicitAPI):
|
|
741
837
|
# "stopPrice": self.price_to_precision(symbol, stopPrice),
|
742
838
|
# "accountId": "...", # subaccount id, optional
|
743
839
|
}
|
744
|
-
|
745
|
-
if
|
840
|
+
triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
|
841
|
+
if triggerPrice is None:
|
746
842
|
if (uppercaseType == 'STOP_LIMIT') or (uppercaseType == 'STOP_MARKET'):
|
747
843
|
raise ArgumentsRequired(self.id + ' createOrder() requires a stopPrice parameter for ' + uppercaseType + ' orders')
|
748
844
|
else:
|
@@ -752,7 +848,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
752
848
|
uppercaseType = 'STOP_MARKET'
|
753
849
|
defaultOperator = 'LTE' if (uppercaseSide == 'BUY') else 'GTE'
|
754
850
|
request['operator'] = self.safe_string(params, 'operator', defaultOperator)
|
755
|
-
request['stopPrice'] = self.price_to_precision(symbol,
|
851
|
+
request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
|
756
852
|
params = self.omit(params, ['triggerPrice', 'stopPrice'])
|
757
853
|
if (uppercaseType == 'LIMIT') or (uppercaseType == 'STOP_LIMIT'):
|
758
854
|
request['price'] = self.price_to_precision(symbol, price)
|
@@ -804,20 +900,22 @@ class novadax(Exchange, ImplicitAPI):
|
|
804
900
|
# "message": "Success"
|
805
901
|
# }
|
806
902
|
#
|
807
|
-
data = self.
|
903
|
+
data = self.safe_dict(response, 'data', {})
|
808
904
|
return self.parse_order(data, market)
|
809
905
|
|
810
906
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
811
907
|
"""
|
812
908
|
cancels an open order
|
813
|
-
|
909
|
+
|
910
|
+
https://doc.novadax.com/en-US/#cancel-an-order
|
911
|
+
|
814
912
|
:param str id: order id
|
815
913
|
:param str symbol: not used by novadax cancelOrder()
|
816
914
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
817
915
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
818
916
|
"""
|
819
917
|
self.load_markets()
|
820
|
-
request = {
|
918
|
+
request: dict = {
|
821
919
|
'id': id,
|
822
920
|
}
|
823
921
|
response = self.privatePostOrdersCancel(self.extend(request, params))
|
@@ -830,19 +928,22 @@ class novadax(Exchange, ImplicitAPI):
|
|
830
928
|
# "message": "Success"
|
831
929
|
# }
|
832
930
|
#
|
833
|
-
data = self.
|
931
|
+
data = self.safe_dict(response, 'data', {})
|
834
932
|
return self.parse_order(data)
|
835
933
|
|
836
934
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
837
935
|
"""
|
838
936
|
fetches information on an order made by the user
|
839
|
-
|
937
|
+
|
938
|
+
https://doc.novadax.com/en-US/#get-order-details
|
939
|
+
|
940
|
+
:param str id: order id
|
840
941
|
:param str symbol: not used by novadax fetchOrder
|
841
942
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
842
943
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
843
944
|
"""
|
844
945
|
self.load_markets()
|
845
|
-
request = {
|
946
|
+
request: dict = {
|
846
947
|
'id': id,
|
847
948
|
}
|
848
949
|
response = self.privateGetOrdersGet(self.extend(request, params))
|
@@ -867,13 +968,15 @@ class novadax(Exchange, ImplicitAPI):
|
|
867
968
|
# "message": "Success"
|
868
969
|
# }
|
869
970
|
#
|
870
|
-
data = self.
|
971
|
+
data = self.safe_dict(response, 'data', {})
|
871
972
|
return self.parse_order(data)
|
872
973
|
|
873
974
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
874
975
|
"""
|
875
976
|
fetches information on multiple orders made by the user
|
876
|
-
|
977
|
+
|
978
|
+
https://doc.novadax.com/en-US/#get-order-history
|
979
|
+
|
877
980
|
:param str symbol: unified market symbol of the market orders were made in
|
878
981
|
:param int [since]: the earliest time in ms to fetch orders for
|
879
982
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -881,7 +984,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
881
984
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
882
985
|
"""
|
883
986
|
self.load_markets()
|
884
|
-
request = {
|
987
|
+
request: dict = {
|
885
988
|
# 'symbol': market['id'],
|
886
989
|
# 'status': 'SUBMITTED,PROCESSING', # SUBMITTED, PROCESSING, PARTIAL_FILLED, CANCELING, FILLED, CANCELED, REJECTED
|
887
990
|
# 'fromId': '...', # order id to begin with
|
@@ -922,20 +1025,22 @@ class novadax(Exchange, ImplicitAPI):
|
|
922
1025
|
# "message": "Success"
|
923
1026
|
# }
|
924
1027
|
#
|
925
|
-
data = self.
|
1028
|
+
data = self.safe_list(response, 'data', [])
|
926
1029
|
return self.parse_orders(data, market, since, limit)
|
927
1030
|
|
928
1031
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
929
1032
|
"""
|
930
1033
|
fetch all unfilled currently open orders
|
931
|
-
|
1034
|
+
|
1035
|
+
https://doc.novadax.com/en-US/#get-order-history
|
1036
|
+
|
932
1037
|
:param str symbol: unified market symbol
|
933
1038
|
:param int [since]: the earliest time in ms to fetch open orders for
|
934
1039
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
935
1040
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
936
1041
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
937
1042
|
"""
|
938
|
-
request = {
|
1043
|
+
request: dict = {
|
939
1044
|
'status': 'SUBMITTED,PROCESSING,PARTIAL_FILLED,CANCELING',
|
940
1045
|
}
|
941
1046
|
return self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -943,14 +1048,16 @@ class novadax(Exchange, ImplicitAPI):
|
|
943
1048
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
944
1049
|
"""
|
945
1050
|
fetches information on multiple closed orders made by the user
|
946
|
-
|
1051
|
+
|
1052
|
+
https://doc.novadax.com/en-US/#get-order-history
|
1053
|
+
|
947
1054
|
:param str symbol: unified market symbol of the market orders were made in
|
948
1055
|
:param int [since]: the earliest time in ms to fetch orders for
|
949
1056
|
:param int [limit]: the maximum number of order structures to retrieve
|
950
1057
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
951
1058
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
952
1059
|
"""
|
953
|
-
request = {
|
1060
|
+
request: dict = {
|
954
1061
|
'status': 'FILLED,CANCELED,REJECTED',
|
955
1062
|
}
|
956
1063
|
return self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -958,7 +1065,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
958
1065
|
def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
959
1066
|
"""
|
960
1067
|
fetch all the trades made from a single order
|
961
|
-
|
1068
|
+
|
1069
|
+
https://doc.novadax.com/en-US/#get-order-match-details
|
1070
|
+
|
962
1071
|
:param str id: order id
|
963
1072
|
:param str symbol: unified market symbol
|
964
1073
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -967,7 +1076,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
967
1076
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
968
1077
|
"""
|
969
1078
|
self.load_markets()
|
970
|
-
request = {
|
1079
|
+
request: dict = {
|
971
1080
|
'id': id,
|
972
1081
|
}
|
973
1082
|
response = self.privateGetOrdersFill(self.extend(request, params))
|
@@ -998,8 +1107,8 @@ class novadax(Exchange, ImplicitAPI):
|
|
998
1107
|
#
|
999
1108
|
return self.parse_trades(data, market, since, limit)
|
1000
1109
|
|
1001
|
-
def parse_order_status(self, status):
|
1002
|
-
statuses = {
|
1110
|
+
def parse_order_status(self, status: Str):
|
1111
|
+
statuses: dict = {
|
1003
1112
|
'SUBMITTED': 'open',
|
1004
1113
|
'PROCESSING': 'open',
|
1005
1114
|
'PARTIAL_FILLED': 'open',
|
@@ -1010,7 +1119,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1010
1119
|
}
|
1011
1120
|
return self.safe_string(statuses, status, status)
|
1012
1121
|
|
1013
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1122
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1014
1123
|
#
|
1015
1124
|
# createOrder, fetchOrders, fetchOrder
|
1016
1125
|
#
|
@@ -1057,7 +1166,6 @@ class novadax(Exchange, ImplicitAPI):
|
|
1057
1166
|
}
|
1058
1167
|
marketId = self.safe_string(order, 'symbol')
|
1059
1168
|
symbol = self.safe_symbol(marketId, market, '_')
|
1060
|
-
stopPrice = self.safe_number(order, 'stopPrice')
|
1061
1169
|
return self.safe_order({
|
1062
1170
|
'id': id,
|
1063
1171
|
'clientOrderId': None,
|
@@ -1071,8 +1179,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1071
1179
|
'postOnly': None,
|
1072
1180
|
'side': side,
|
1073
1181
|
'price': price,
|
1074
|
-
'
|
1075
|
-
'triggerPrice': stopPrice,
|
1182
|
+
'triggerPrice': self.safe_number(order, 'stopPrice'),
|
1076
1183
|
'amount': amount,
|
1077
1184
|
'cost': cost,
|
1078
1185
|
'average': average,
|
@@ -1086,7 +1193,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
1086
1193
|
def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
1087
1194
|
"""
|
1088
1195
|
transfer currency internally between wallets on the same account
|
1089
|
-
|
1196
|
+
|
1197
|
+
https://doc.novadax.com/en-US/#get-sub-account-transfer
|
1198
|
+
|
1090
1199
|
:param str code: unified currency code
|
1091
1200
|
:param float amount: amount to transfer
|
1092
1201
|
:param str fromAccount: account to transfer from
|
@@ -1101,7 +1210,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1101
1210
|
# master-transfer-in = from master account to subaccount
|
1102
1211
|
# master-transfer-out = from subaccount to master account
|
1103
1212
|
type = 'master-transfer-in' if (fromAccount == 'main') else 'master-transfer-out'
|
1104
|
-
request = {
|
1213
|
+
request: dict = {
|
1105
1214
|
'transferAmount': self.currency_to_precision(code, amount),
|
1106
1215
|
'currency': currency['id'],
|
1107
1216
|
'subId': toAccount if (type == 'master-transfer-in') else fromAccount,
|
@@ -1124,7 +1233,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1124
1233
|
transfer['amount'] = amount
|
1125
1234
|
return transfer
|
1126
1235
|
|
1127
|
-
def parse_transfer(self, transfer, currency: Currency = None):
|
1236
|
+
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
1128
1237
|
#
|
1129
1238
|
# {
|
1130
1239
|
# "code":"A10000",
|
@@ -1139,7 +1248,6 @@ class novadax(Exchange, ImplicitAPI):
|
|
1139
1248
|
'info': transfer,
|
1140
1249
|
'id': id,
|
1141
1250
|
'amount': None,
|
1142
|
-
'code': currencyCode, # kept here for backward-compatibility, but will be removed soon
|
1143
1251
|
'currency': currencyCode,
|
1144
1252
|
'fromAccount': None,
|
1145
1253
|
'toAccount': None,
|
@@ -1148,16 +1256,18 @@ class novadax(Exchange, ImplicitAPI):
|
|
1148
1256
|
'status': status,
|
1149
1257
|
}
|
1150
1258
|
|
1151
|
-
def parse_transfer_status(self, status):
|
1152
|
-
statuses = {
|
1259
|
+
def parse_transfer_status(self, status: Str) -> Str:
|
1260
|
+
statuses: dict = {
|
1153
1261
|
'SUCCESS': 'pending',
|
1154
1262
|
}
|
1155
1263
|
return self.safe_string(statuses, status, 'failed')
|
1156
1264
|
|
1157
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1265
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1158
1266
|
"""
|
1159
1267
|
make a withdrawal
|
1160
|
-
|
1268
|
+
|
1269
|
+
https://doc.novadax.com/en-US/#send-cryptocurrencies
|
1270
|
+
|
1161
1271
|
:param str code: unified currency code
|
1162
1272
|
:param float amount: the amount to withdraw
|
1163
1273
|
:param str address: the address to withdraw to
|
@@ -1168,7 +1278,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1168
1278
|
tag, params = self.handle_withdraw_tag_and_params(tag, params)
|
1169
1279
|
self.load_markets()
|
1170
1280
|
currency = self.currency(code)
|
1171
|
-
request = {
|
1281
|
+
request: dict = {
|
1172
1282
|
'code': currency['id'],
|
1173
1283
|
'amount': self.currency_to_precision(code, amount),
|
1174
1284
|
'wallet': address,
|
@@ -1188,7 +1298,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
1188
1298
|
def fetch_accounts(self, params={}) -> List[Account]:
|
1189
1299
|
"""
|
1190
1300
|
fetch all the accounts associated with a profile
|
1191
|
-
|
1301
|
+
|
1302
|
+
https://doc.novadax.com/en-US/#get-sub-account-list
|
1303
|
+
|
1192
1304
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1193
1305
|
:returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
|
1194
1306
|
"""
|
@@ -1224,14 +1336,16 @@ class novadax(Exchange, ImplicitAPI):
|
|
1224
1336
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1225
1337
|
"""
|
1226
1338
|
fetch all deposits made to an account
|
1227
|
-
|
1339
|
+
|
1340
|
+
https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
|
1341
|
+
|
1228
1342
|
:param str code: unified currency code
|
1229
1343
|
:param int [since]: the earliest time in ms to fetch deposits for
|
1230
1344
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
1231
1345
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1232
1346
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1233
1347
|
"""
|
1234
|
-
request = {
|
1348
|
+
request: dict = {
|
1235
1349
|
'type': 'coin_in',
|
1236
1350
|
}
|
1237
1351
|
return self.fetch_deposits_withdrawals(code, since, limit, self.extend(request, params))
|
@@ -1239,14 +1353,16 @@ class novadax(Exchange, ImplicitAPI):
|
|
1239
1353
|
def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1240
1354
|
"""
|
1241
1355
|
fetch all withdrawals made from an account
|
1242
|
-
|
1356
|
+
|
1357
|
+
https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
|
1358
|
+
|
1243
1359
|
:param str code: unified currency code
|
1244
1360
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
1245
1361
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
1246
1362
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1247
1363
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1248
1364
|
"""
|
1249
|
-
request = {
|
1365
|
+
request: dict = {
|
1250
1366
|
'type': 'coin_out',
|
1251
1367
|
}
|
1252
1368
|
return self.fetch_deposits_withdrawals(code, since, limit, self.extend(request, params))
|
@@ -1254,7 +1370,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
1254
1370
|
def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1255
1371
|
"""
|
1256
1372
|
fetch history of deposits and withdrawals
|
1257
|
-
|
1373
|
+
|
1374
|
+
https://doc.novadax.com/en-US/#wallet-records-of-deposits-and-withdraws
|
1375
|
+
|
1258
1376
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
1259
1377
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
1260
1378
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
@@ -1262,7 +1380,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1262
1380
|
:returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1263
1381
|
"""
|
1264
1382
|
self.load_markets()
|
1265
|
-
request = {
|
1383
|
+
request: dict = {
|
1266
1384
|
# 'currency': currency['id'],
|
1267
1385
|
# 'type': 'coin_in', # 'coin_out'
|
1268
1386
|
# 'direct': 'asc', # 'desc'
|
@@ -1297,17 +1415,17 @@ class novadax(Exchange, ImplicitAPI):
|
|
1297
1415
|
# "message": "Success"
|
1298
1416
|
# }
|
1299
1417
|
#
|
1300
|
-
data = self.
|
1418
|
+
data = self.safe_list(response, 'data', [])
|
1301
1419
|
return self.parse_transactions(data, currency, since, limit)
|
1302
1420
|
|
1303
|
-
def parse_transaction_status(self, status):
|
1421
|
+
def parse_transaction_status(self, status: Str):
|
1304
1422
|
# Pending the record is wait broadcast to chain
|
1305
1423
|
# x/M confirming the comfirming state of tx, the M is total confirmings needed
|
1306
1424
|
# SUCCESS the record is success full
|
1307
1425
|
# FAIL the record failed
|
1308
1426
|
parts = status.split(' ')
|
1309
1427
|
status = self.safe_string(parts, 1, status)
|
1310
|
-
statuses = {
|
1428
|
+
statuses: dict = {
|
1311
1429
|
'Pending': 'pending',
|
1312
1430
|
'confirming': 'pending',
|
1313
1431
|
'SUCCESS': 'ok',
|
@@ -1315,7 +1433,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1315
1433
|
}
|
1316
1434
|
return self.safe_string(statuses, status, status)
|
1317
1435
|
|
1318
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1436
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1319
1437
|
#
|
1320
1438
|
# withdraw
|
1321
1439
|
#
|
@@ -1387,7 +1505,9 @@ class novadax(Exchange, ImplicitAPI):
|
|
1387
1505
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1388
1506
|
"""
|
1389
1507
|
fetch all trades made by the user
|
1390
|
-
|
1508
|
+
|
1509
|
+
https://doc.novadax.com/en-US/#get-order-history
|
1510
|
+
|
1391
1511
|
:param str symbol: unified market symbol
|
1392
1512
|
:param int [since]: the earliest time in ms to fetch trades for
|
1393
1513
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -1395,7 +1515,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1395
1515
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1396
1516
|
"""
|
1397
1517
|
self.load_markets()
|
1398
|
-
request = {
|
1518
|
+
request: dict = {
|
1399
1519
|
# 'orderId': id, # Order ID, string
|
1400
1520
|
# 'symbol': market['id'], # The trading symbol, like BTC_BRL, string
|
1401
1521
|
# 'fromId': fromId, # Search fill id to begin with, string
|
@@ -1435,7 +1555,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1435
1555
|
# "message": "Success"
|
1436
1556
|
# }
|
1437
1557
|
#
|
1438
|
-
data = self.
|
1558
|
+
data = self.safe_list(response, 'data', [])
|
1439
1559
|
return self.parse_trades(data, market, since, limit)
|
1440
1560
|
|
1441
1561
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
@@ -1465,7 +1585,7 @@ class novadax(Exchange, ImplicitAPI):
|
|
1465
1585
|
headers['X-Nova-Signature'] = self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha256)
|
1466
1586
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1467
1587
|
|
1468
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1588
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1469
1589
|
if response is None:
|
1470
1590
|
return None
|
1471
1591
|
#
|