ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +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 +3104 -880
- 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 +1513 -563
- 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 +206 -89
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +557 -323
- ccxt/async_support/digifinex.py +340 -223
- ccxt/async_support/ellipx.py +1826 -0
- ccxt/async_support/exmo.py +259 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +334 -178
- ccxt/async_support/hollaex.py +134 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +105 -56
- ccxt/async_support/hyperliquid.py +1633 -268
- ccxt/async_support/idex.py +148 -95
- ccxt/async_support/independentreserve.py +236 -31
- ccxt/async_support/indodax.py +165 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +138 -106
- ccxt/async_support/latoken.py +135 -79
- ccxt/async_support/lbank.py +290 -113
- ccxt/async_support/luno.py +112 -62
- ccxt/async_support/lykke.py +104 -55
- ccxt/async_support/mercado.py +36 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +43 -0
- ccxt/async_support/ndax.py +163 -82
- ccxt/async_support/novadax.py +121 -75
- ccxt/async_support/oceanex.py +175 -59
- ccxt/async_support/okcoin.py +222 -163
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +132 -414
- ccxt/async_support/oxfun.py +2832 -0
- ccxt/async_support/p2b.py +79 -51
- ccxt/async_support/paradex.py +2017 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +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 +3104 -880
- 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 +1513 -563
- 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 +206 -89
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +557 -323
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +334 -178
- ccxt/hollaex.py +134 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +105 -56
- ccxt/hyperliquid.py +1632 -268
- ccxt/idex.py +148 -95
- ccxt/independentreserve.py +235 -31
- ccxt/indodax.py +165 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +138 -106
- ccxt/latoken.py +135 -79
- ccxt/lbank.py +290 -113
- ccxt/luno.py +112 -62
- ccxt/lykke.py +104 -55
- ccxt/mercado.py +36 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +43 -0
- ccxt/ndax.py +163 -82
- ccxt/novadax.py +121 -75
- ccxt/oceanex.py +175 -59
- ccxt/okcoin.py +222 -163
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +132 -414
- ccxt/oxfun.py +2831 -0
- ccxt/p2b.py +79 -51
- ccxt/paradex.py +2017 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +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 +138 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +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.48.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.48.dist-info/METADATA +646 -0
- ccxt-4.4.48.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/async_support/digifinex.py
CHANGED
@@ -8,15 +8,15 @@ from ccxt.abstract.digifinex import ImplicitAPI
|
|
8
8
|
import asyncio
|
9
9
|
import hashlib
|
10
10
|
import json
|
11
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
11
|
+
from ccxt.base.types import Balances, BorrowInterest, CrossBorrowRate, CrossBorrowRates, Currencies, Currency, DepositAddress, Int, LedgerEntry, LeverageTier, LeverageTiers, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFeeInterface, Transaction, TransferEntry
|
12
12
|
from typing import List
|
13
13
|
from ccxt.base.errors import ExchangeError
|
14
|
+
from ccxt.base.errors import AuthenticationError
|
14
15
|
from ccxt.base.errors import PermissionDenied
|
15
16
|
from ccxt.base.errors import AccountSuspended
|
16
17
|
from ccxt.base.errors import ArgumentsRequired
|
17
18
|
from ccxt.base.errors import BadRequest
|
18
19
|
from ccxt.base.errors import BadSymbol
|
19
|
-
from ccxt.base.errors import BadResponse
|
20
20
|
from ccxt.base.errors import InsufficientFunds
|
21
21
|
from ccxt.base.errors import InvalidAddress
|
22
22
|
from ccxt.base.errors import InvalidOrder
|
@@ -26,7 +26,7 @@ from ccxt.base.errors import NetworkError
|
|
26
26
|
from ccxt.base.errors import DDoSProtection
|
27
27
|
from ccxt.base.errors import RateLimitExceeded
|
28
28
|
from ccxt.base.errors import InvalidNonce
|
29
|
-
from ccxt.base.errors import
|
29
|
+
from ccxt.base.errors import BadResponse
|
30
30
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
31
31
|
from ccxt.base.precise import Precise
|
32
32
|
|
@@ -68,10 +68,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
68
68
|
'fetchCrossBorrowRates': True,
|
69
69
|
'fetchCurrencies': True,
|
70
70
|
'fetchDepositAddress': True,
|
71
|
+
'fetchDepositAddresses': False,
|
72
|
+
'fetchDepositAddressesByNetwork': False,
|
71
73
|
'fetchDeposits': True,
|
72
74
|
'fetchDepositWithdrawFee': 'emulated',
|
73
75
|
'fetchDepositWithdrawFees': True,
|
74
76
|
'fetchFundingHistory': True,
|
77
|
+
'fetchFundingInterval': True,
|
78
|
+
'fetchFundingIntervals': False,
|
75
79
|
'fetchFundingRate': True,
|
76
80
|
'fetchFundingRateHistory': True,
|
77
81
|
'fetchFundingRates': False,
|
@@ -227,6 +231,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
227
231
|
'trade/order_info',
|
228
232
|
],
|
229
233
|
'post': [
|
234
|
+
'account/transfer',
|
230
235
|
'account/leverage',
|
231
236
|
'account/position_mode',
|
232
237
|
'account/position_margin',
|
@@ -366,7 +371,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
366
371
|
},
|
367
372
|
})
|
368
373
|
|
369
|
-
async def fetch_currencies(self, params={}):
|
374
|
+
async def fetch_currencies(self, params={}) -> Currencies:
|
370
375
|
"""
|
371
376
|
fetches all available currencies on an exchange
|
372
377
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -411,7 +416,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
411
416
|
# }
|
412
417
|
#
|
413
418
|
data = self.safe_value(response, 'data', [])
|
414
|
-
result = {}
|
419
|
+
result: dict = {}
|
415
420
|
for i in range(0, len(data)):
|
416
421
|
currency = data[i]
|
417
422
|
id = self.safe_string(currency, 'currency')
|
@@ -434,7 +439,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
434
439
|
networkCode = None
|
435
440
|
if networkId is not None:
|
436
441
|
networkCode = self.network_id_to_code(networkId)
|
437
|
-
network = {
|
442
|
+
network: dict = {
|
438
443
|
'info': currency,
|
439
444
|
'id': networkId,
|
440
445
|
'network': networkCode,
|
@@ -523,7 +528,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
523
528
|
result[code]['precision'] = precision if (result[code]['precision'] is None) else max(result[code]['precision'], precision)
|
524
529
|
return result
|
525
530
|
|
526
|
-
async def fetch_markets(self, params={}):
|
531
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
527
532
|
"""
|
528
533
|
retrieves data on all markets for digifinex
|
529
534
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -789,7 +794,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
789
794
|
# "time_stamp": 1661487402396
|
790
795
|
# }
|
791
796
|
#
|
792
|
-
result = {'info': response}
|
797
|
+
result: dict = {'info': response}
|
793
798
|
for i in range(0, len(response)):
|
794
799
|
balance = response[i]
|
795
800
|
currencyId = self.safe_string(balance, 'currency')
|
@@ -806,9 +811,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
806
811
|
async def fetch_balance(self, params={}) -> Balances:
|
807
812
|
"""
|
808
813
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
809
|
-
|
810
|
-
|
811
|
-
|
814
|
+
|
815
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#spot-account-assets
|
816
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
817
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#accountbalance
|
818
|
+
|
812
819
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
813
820
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
814
821
|
"""
|
@@ -869,8 +876,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
869
876
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
870
877
|
"""
|
871
878
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
872
|
-
|
873
|
-
|
879
|
+
|
880
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-orderbook
|
881
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderbook
|
882
|
+
|
874
883
|
:param str symbol: unified symbol of the market to fetch the order book for
|
875
884
|
:param int [limit]: the maximum amount of order book entries to return
|
876
885
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -879,7 +888,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
879
888
|
await self.load_markets()
|
880
889
|
market = self.market(symbol)
|
881
890
|
marketType, query = self.handle_market_type_and_params('fetchOrderBook', market, params)
|
882
|
-
request = {}
|
891
|
+
request: dict = {}
|
883
892
|
if limit is not None:
|
884
893
|
request['limit'] = limit
|
885
894
|
response = None
|
@@ -940,8 +949,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
940
949
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
941
950
|
"""
|
942
951
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
943
|
-
|
944
|
-
|
952
|
+
|
953
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#ticker-price
|
954
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#tickers
|
955
|
+
|
945
956
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
946
957
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
947
958
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -954,7 +965,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
954
965
|
market = self.market(first)
|
955
966
|
type = None
|
956
967
|
type, params = self.handle_market_type_and_params('fetchTickers', market, params)
|
957
|
-
request = {}
|
968
|
+
request: dict = {}
|
958
969
|
response = None
|
959
970
|
if type == 'swap':
|
960
971
|
response = await self.publicSwapGetPublicTickers(self.extend(request, params))
|
@@ -1008,7 +1019,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1008
1019
|
# ]
|
1009
1020
|
# }
|
1010
1021
|
#
|
1011
|
-
result = {}
|
1022
|
+
result: dict = {}
|
1012
1023
|
tickers = self.safe_value_2(response, 'ticker', 'data', [])
|
1013
1024
|
date = self.safe_integer(response, 'date')
|
1014
1025
|
for i in range(0, len(tickers)):
|
@@ -1023,15 +1034,17 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1023
1034
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
1024
1035
|
"""
|
1025
1036
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
1026
|
-
|
1027
|
-
|
1037
|
+
|
1038
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#ticker-price
|
1039
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#ticker
|
1040
|
+
|
1028
1041
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
1029
1042
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1030
1043
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
1031
1044
|
"""
|
1032
1045
|
await self.load_markets()
|
1033
1046
|
market = self.market(symbol)
|
1034
|
-
request = {}
|
1047
|
+
request: dict = {}
|
1035
1048
|
response = None
|
1036
1049
|
if market['swap']:
|
1037
1050
|
request['instrument_id'] = market['id']
|
@@ -1095,7 +1108,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1095
1108
|
result = self.extend({'date': date}, firstTicker)
|
1096
1109
|
return self.parse_ticker(result, market)
|
1097
1110
|
|
1098
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
1111
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
1099
1112
|
#
|
1100
1113
|
# spot: fetchTicker, fetchTickers
|
1101
1114
|
#
|
@@ -1164,10 +1177,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1164
1177
|
'average': None,
|
1165
1178
|
'baseVolume': self.safe_string_2(ticker, 'vol', 'volume_24h'),
|
1166
1179
|
'quoteVolume': self.safe_string(ticker, 'base_vol'),
|
1180
|
+
'markPrice': self.safe_string(ticker, 'mark_price'),
|
1181
|
+
'indexPrice': indexPrice,
|
1167
1182
|
'info': ticker,
|
1168
1183
|
}, market)
|
1169
1184
|
|
1170
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
1185
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
1171
1186
|
#
|
1172
1187
|
# spot: fetchTrades
|
1173
1188
|
#
|
@@ -1336,8 +1351,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1336
1351
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1337
1352
|
"""
|
1338
1353
|
get the list of most recent trades for a particular symbol
|
1339
|
-
|
1340
|
-
|
1354
|
+
|
1355
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-recent-trades
|
1356
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#recenttrades
|
1357
|
+
|
1341
1358
|
:param str symbol: unified symbol of the market to fetch trades for
|
1342
1359
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
1343
1360
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -1346,7 +1363,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1346
1363
|
"""
|
1347
1364
|
await self.load_markets()
|
1348
1365
|
market = self.market(symbol)
|
1349
|
-
request = {}
|
1366
|
+
request: dict = {}
|
1350
1367
|
if limit is not None:
|
1351
1368
|
request['limit'] = min(limit, 100) if market['swap'] else limit
|
1352
1369
|
response = None
|
@@ -1397,7 +1414,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1397
1414
|
# ]
|
1398
1415
|
# }
|
1399
1416
|
#
|
1400
|
-
data = self.
|
1417
|
+
data = self.safe_list(response, 'data', [])
|
1401
1418
|
return self.parse_trades(data, market, since, limit)
|
1402
1419
|
|
1403
1420
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -1433,8 +1450,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1433
1450
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1434
1451
|
"""
|
1435
1452
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1436
|
-
|
1437
|
-
|
1453
|
+
|
1454
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-candles-data
|
1455
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#recentcandle
|
1456
|
+
|
1438
1457
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1439
1458
|
:param str timeframe: the length of time each candle represents
|
1440
1459
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -1444,13 +1463,13 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1444
1463
|
"""
|
1445
1464
|
await self.load_markets()
|
1446
1465
|
market = self.market(symbol)
|
1447
|
-
request = {}
|
1466
|
+
request: dict = {}
|
1448
1467
|
response = None
|
1449
1468
|
if market['swap']:
|
1450
1469
|
request['instrument_id'] = market['id']
|
1451
1470
|
request['granularity'] = timeframe
|
1452
1471
|
if limit is not None:
|
1453
|
-
request['limit'] = limit
|
1472
|
+
request['limit'] = min(limit, 100)
|
1454
1473
|
response = await self.publicSwapGetPublicCandles(self.extend(request, params))
|
1455
1474
|
else:
|
1456
1475
|
request['symbol'] = market['id']
|
@@ -1505,13 +1524,15 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1505
1524
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1506
1525
|
"""
|
1507
1526
|
create a trade order
|
1508
|
-
|
1509
|
-
|
1527
|
+
|
1528
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-new-order
|
1529
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderplace
|
1530
|
+
|
1510
1531
|
:param str symbol: unified symbol of the market to create an order in
|
1511
1532
|
:param str type: 'market' or 'limit'
|
1512
1533
|
:param str side: 'buy' or 'sell'
|
1513
1534
|
:param float amount: how much you want to trade in units of the base currency, spot market orders use the quote currency, swap requires the number of contracts
|
1514
|
-
:param float [price]: the price at which the order is to be
|
1535
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1515
1536
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1516
1537
|
:param str [params.timeInForce]: "GTC", "IOC", "FOK", or "PO"
|
1517
1538
|
:param bool [params.postOnly]: True or False
|
@@ -1559,8 +1580,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1559
1580
|
async def create_orders(self, orders: List[OrderRequest], params={}):
|
1560
1581
|
"""
|
1561
1582
|
create a list of trade orders(all orders should be of the same symbol)
|
1562
|
-
|
1563
|
-
|
1583
|
+
|
1584
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-multiple-order
|
1585
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#batchorder
|
1586
|
+
|
1564
1587
|
:param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
|
1565
1588
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1566
1589
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1593,7 +1616,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1593
1616
|
orderRequest = self.create_order_request(marketId, type, side, amount, price, orderParams)
|
1594
1617
|
ordersRequests.append(orderRequest)
|
1595
1618
|
market = self.market(symbol)
|
1596
|
-
request = {}
|
1619
|
+
request: dict = {}
|
1597
1620
|
response = None
|
1598
1621
|
if market['swap']:
|
1599
1622
|
response = await self.privateSwapPostTradeBatchOrder(ordersRequests)
|
@@ -1631,7 +1654,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1631
1654
|
result = []
|
1632
1655
|
for i in range(0, len(orders)):
|
1633
1656
|
rawOrder = orders[i]
|
1634
|
-
individualOrder = {}
|
1657
|
+
individualOrder: dict = {}
|
1635
1658
|
individualOrder['order_id'] = data[i]
|
1636
1659
|
individualOrder['instrument_id'] = market['id']
|
1637
1660
|
individualOrder['amount'] = self.safe_number(rawOrder, 'amount')
|
@@ -1641,13 +1664,13 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1641
1664
|
|
1642
1665
|
def create_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1643
1666
|
"""
|
1644
|
-
|
1667
|
+
@ignore
|
1645
1668
|
helper function to build request
|
1646
1669
|
:param str symbol: unified symbol of the market to create an order in
|
1647
1670
|
:param str type: 'market' or 'limit'
|
1648
1671
|
:param str side: 'buy' or 'sell'
|
1649
1672
|
:param float amount: how much you want to trade in units of the base currency, spot market orders use the quote currency, swap requires the number of contracts
|
1650
|
-
:param float [price]: the price at which the order is to be
|
1673
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1651
1674
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1652
1675
|
:returns dict: request to be sent to the exchange
|
1653
1676
|
"""
|
@@ -1658,7 +1681,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1658
1681
|
marginMode, params = self.handle_margin_mode_and_params('createOrderRequest', params)
|
1659
1682
|
if marginMode is not None:
|
1660
1683
|
marketType = 'margin'
|
1661
|
-
request = {}
|
1684
|
+
request: dict = {}
|
1662
1685
|
swap = (marketType == 'swap')
|
1663
1686
|
isMarketOrder = (type == 'market')
|
1664
1687
|
isLimitOrder = (type == 'limit')
|
@@ -1733,7 +1756,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1733
1756
|
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
1734
1757
|
"""
|
1735
1758
|
create a market buy order by providing the symbol and cost
|
1736
|
-
|
1759
|
+
|
1760
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#create-new-order
|
1761
|
+
|
1737
1762
|
:param str symbol: unified symbol of the market to create an order in
|
1738
1763
|
:param float cost: how much you want to trade in units of the quote currency
|
1739
1764
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1749,8 +1774,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1749
1774
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1750
1775
|
"""
|
1751
1776
|
cancels an open order
|
1752
|
-
|
1753
|
-
|
1777
|
+
|
1778
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#cancel-order
|
1779
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#cancelorder
|
1780
|
+
|
1754
1781
|
:param str id: order id
|
1755
1782
|
:param str symbol: not used by digifinex cancelOrder()
|
1756
1783
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1763,7 +1790,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1763
1790
|
id = str(id)
|
1764
1791
|
marketType = None
|
1765
1792
|
marketType, params = self.handle_market_type_and_params('cancelOrder', market, params)
|
1766
|
-
request = {
|
1793
|
+
request: dict = {
|
1767
1794
|
'order_id': id,
|
1768
1795
|
}
|
1769
1796
|
if marketType == 'swap':
|
@@ -1809,7 +1836,34 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1809
1836
|
numCanceledOrders = len(canceledOrders)
|
1810
1837
|
if numCanceledOrders != 1:
|
1811
1838
|
raise OrderNotFound(self.id + ' cancelOrder() ' + id + ' not found')
|
1812
|
-
|
1839
|
+
orders = self.parse_cancel_orders(response)
|
1840
|
+
return self.safe_dict(orders, 0)
|
1841
|
+
else:
|
1842
|
+
return self.safe_order({
|
1843
|
+
'info': response,
|
1844
|
+
'orderId': self.safe_string(response, 'data'),
|
1845
|
+
})
|
1846
|
+
|
1847
|
+
def parse_cancel_orders(self, response):
|
1848
|
+
success = self.safe_list(response, 'success')
|
1849
|
+
error = self.safe_list(response, 'error')
|
1850
|
+
result = []
|
1851
|
+
for i in range(0, len(success)):
|
1852
|
+
order = success[i]
|
1853
|
+
result.append(self.safe_order({
|
1854
|
+
'info': order,
|
1855
|
+
'id': order,
|
1856
|
+
'status': 'canceled',
|
1857
|
+
}))
|
1858
|
+
for i in range(0, len(error)):
|
1859
|
+
order = error[i]
|
1860
|
+
result.append(self.safe_order({
|
1861
|
+
'info': order,
|
1862
|
+
'id': self.safe_string_2(order, 'order-id', 'order_id'),
|
1863
|
+
'status': 'failed',
|
1864
|
+
'clientOrderId': self.safe_string(order, 'client-order-id'),
|
1865
|
+
}))
|
1866
|
+
return result
|
1813
1867
|
|
1814
1868
|
async def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1815
1869
|
"""
|
@@ -1823,7 +1877,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1823
1877
|
defaultType = self.safe_string(self.options, 'defaultType', 'spot')
|
1824
1878
|
orderType = self.safe_string(params, 'type', defaultType)
|
1825
1879
|
params = self.omit(params, 'type')
|
1826
|
-
request = {
|
1880
|
+
request: dict = {
|
1827
1881
|
'market': orderType,
|
1828
1882
|
'order_id': ','.join(ids),
|
1829
1883
|
}
|
@@ -1840,14 +1894,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1840
1894
|
# ]
|
1841
1895
|
# }
|
1842
1896
|
#
|
1843
|
-
|
1844
|
-
numCanceledOrders = len(canceledOrders)
|
1845
|
-
if numCanceledOrders < 1:
|
1846
|
-
raise OrderNotFound(self.id + ' cancelOrders() error')
|
1847
|
-
return response
|
1897
|
+
return self.parse_cancel_orders(response)
|
1848
1898
|
|
1849
|
-
def parse_order_status(self, status):
|
1850
|
-
statuses = {
|
1899
|
+
def parse_order_status(self, status: Str):
|
1900
|
+
statuses: dict = {
|
1851
1901
|
'0': 'open',
|
1852
1902
|
'1': 'open', # partially filled
|
1853
1903
|
'2': 'closed',
|
@@ -1856,7 +1906,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1856
1906
|
}
|
1857
1907
|
return self.safe_string(statuses, status, status)
|
1858
1908
|
|
1859
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1909
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1860
1910
|
#
|
1861
1911
|
# spot: createOrder
|
1862
1912
|
#
|
@@ -1975,7 +2025,6 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1975
2025
|
'postOnly': None,
|
1976
2026
|
'side': side,
|
1977
2027
|
'price': self.safe_number(order, 'price'),
|
1978
|
-
'stopPrice': None,
|
1979
2028
|
'triggerPrice': None,
|
1980
2029
|
'amount': self.safe_number_2(order, 'amount', 'size'),
|
1981
2030
|
'filled': self.safe_number_2(order, 'executed_amount', 'filled_qty'),
|
@@ -1992,8 +2041,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
1992
2041
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1993
2042
|
"""
|
1994
2043
|
fetch all unfilled currently open orders
|
1995
|
-
|
1996
|
-
|
2044
|
+
|
2045
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#current-active-orders
|
2046
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#openorder
|
2047
|
+
|
1997
2048
|
:param str symbol: unified market symbol
|
1998
2049
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1999
2050
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -2007,7 +2058,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2007
2058
|
marketType = None
|
2008
2059
|
marketType, params = self.handle_market_type_and_params('fetchOpenOrders', market, params)
|
2009
2060
|
marginMode, query = self.handle_margin_mode_and_params('fetchOpenOrders', params)
|
2010
|
-
request = {}
|
2061
|
+
request: dict = {}
|
2011
2062
|
swap = (marketType == 'swap')
|
2012
2063
|
if swap:
|
2013
2064
|
if since is not None:
|
@@ -2080,14 +2131,16 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2080
2131
|
# ]
|
2081
2132
|
# }
|
2082
2133
|
#
|
2083
|
-
data = self.
|
2134
|
+
data = self.safe_list(response, 'data', [])
|
2084
2135
|
return self.parse_orders(data, market, since, limit)
|
2085
2136
|
|
2086
2137
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
2087
2138
|
"""
|
2088
2139
|
fetches information on multiple orders made by the user
|
2089
|
-
|
2090
|
-
|
2140
|
+
|
2141
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-all-orders-including-history-orders
|
2142
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#historyorder
|
2143
|
+
|
2091
2144
|
:param str symbol: unified market symbol of the market orders were made in
|
2092
2145
|
:param int [since]: the earliest time in ms to fetch orders for
|
2093
2146
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -2101,7 +2154,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2101
2154
|
marketType = None
|
2102
2155
|
marketType, params = self.handle_market_type_and_params('fetchOrders', market, params)
|
2103
2156
|
marginMode, query = self.handle_margin_mode_and_params('fetchOrders', params)
|
2104
|
-
request = {}
|
2157
|
+
request: dict = {}
|
2105
2158
|
if marketType == 'swap':
|
2106
2159
|
if since is not None:
|
2107
2160
|
request['start_timestamp'] = since
|
@@ -2175,14 +2228,16 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2175
2228
|
# ]
|
2176
2229
|
# }
|
2177
2230
|
#
|
2178
|
-
data = self.
|
2231
|
+
data = self.safe_list(response, 'data', [])
|
2179
2232
|
return self.parse_orders(data, market, since, limit)
|
2180
2233
|
|
2181
2234
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
2182
2235
|
"""
|
2183
2236
|
fetches information on an order made by the user
|
2184
|
-
|
2185
|
-
|
2237
|
+
|
2238
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-order-status
|
2239
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#orderinfo
|
2240
|
+
|
2186
2241
|
:param str id: order id
|
2187
2242
|
:param str symbol: unified symbol of the market the order was made in
|
2188
2243
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -2195,7 +2250,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2195
2250
|
marketType = None
|
2196
2251
|
marketType, params = self.handle_market_type_and_params('fetchOrder', market, params)
|
2197
2252
|
marginMode, query = self.handle_margin_mode_and_params('fetchOrder', params)
|
2198
|
-
request = {
|
2253
|
+
request: dict = {
|
2199
2254
|
'order_id': id,
|
2200
2255
|
}
|
2201
2256
|
if marketType == 'swap':
|
@@ -2270,8 +2325,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2270
2325
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
2271
2326
|
"""
|
2272
2327
|
fetch all trades made by the user
|
2273
|
-
|
2274
|
-
|
2328
|
+
|
2329
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#customer-39-s-trades
|
2330
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#historytrade
|
2331
|
+
|
2275
2332
|
:param str symbol: unified market symbol
|
2276
2333
|
:param int [since]: the earliest time in ms to fetch trades for
|
2277
2334
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -2280,7 +2337,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2280
2337
|
"""
|
2281
2338
|
await self.load_markets()
|
2282
2339
|
market = None
|
2283
|
-
request = {}
|
2340
|
+
request: dict = {}
|
2284
2341
|
if symbol is not None:
|
2285
2342
|
market = self.market(symbol)
|
2286
2343
|
marketType = None
|
@@ -2354,14 +2411,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2354
2411
|
# }
|
2355
2412
|
#
|
2356
2413
|
responseRequest = 'data' if (marketType == 'swap') else 'list'
|
2357
|
-
data = self.
|
2414
|
+
data = self.safe_list(response, responseRequest, [])
|
2358
2415
|
return self.parse_trades(data, market, since, limit)
|
2359
2416
|
|
2360
2417
|
def parse_ledger_entry_type(self, type):
|
2361
|
-
types = {}
|
2418
|
+
types: dict = {}
|
2362
2419
|
return self.safe_string(types, type, type)
|
2363
2420
|
|
2364
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
2421
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
2365
2422
|
#
|
2366
2423
|
# spot and margin
|
2367
2424
|
#
|
@@ -2383,13 +2440,15 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2383
2440
|
# }
|
2384
2441
|
#
|
2385
2442
|
type = self.parse_ledger_entry_type(self.safe_string_2(item, 'type', 'finance_type'))
|
2386
|
-
|
2443
|
+
currencyId = self.safe_string_2(item, 'currency_mark', 'currency')
|
2444
|
+
code = self.safe_currency_code(currencyId, currency)
|
2445
|
+
currency = self.safe_currency(currencyId, currency)
|
2387
2446
|
amount = self.safe_number_2(item, 'num', 'change')
|
2388
2447
|
after = self.safe_number(item, 'balance')
|
2389
2448
|
timestamp = self.safe_timestamp(item, 'time')
|
2390
2449
|
if timestamp is None:
|
2391
2450
|
timestamp = self.safe_integer(item, 'timestamp')
|
2392
|
-
return {
|
2451
|
+
return self.safe_ledger_entry({
|
2393
2452
|
'info': item,
|
2394
2453
|
'id': None,
|
2395
2454
|
'direction': None,
|
@@ -2405,21 +2464,23 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2405
2464
|
'timestamp': timestamp,
|
2406
2465
|
'datetime': self.iso8601(timestamp),
|
2407
2466
|
'fee': None,
|
2408
|
-
}
|
2467
|
+
}, currency)
|
2409
2468
|
|
2410
|
-
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
2469
|
+
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
2411
2470
|
"""
|
2412
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
2413
|
-
|
2414
|
-
|
2415
|
-
|
2471
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
2472
|
+
|
2473
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#spot-margin-otc-financial-logs
|
2474
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#bills
|
2475
|
+
|
2476
|
+
:param str [code]: unified currency code, default is None
|
2416
2477
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
2417
|
-
:param int [limit]: max number of ledger
|
2478
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
2418
2479
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2419
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
2480
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
2420
2481
|
"""
|
2421
2482
|
await self.load_markets()
|
2422
|
-
request = {}
|
2483
|
+
request: dict = {}
|
2423
2484
|
marketType = None
|
2424
2485
|
marketType, params = self.handle_market_type_and_params('fetchLedger', None, params)
|
2425
2486
|
marginMode, query = self.handle_margin_mode_and_params('fetchLedger', params)
|
@@ -2488,7 +2549,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2488
2549
|
ledger = self.safe_value(data, 'finance', [])
|
2489
2550
|
return self.parse_ledger(ledger, currency, since, limit)
|
2490
2551
|
|
2491
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
2552
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
2492
2553
|
#
|
2493
2554
|
# {
|
2494
2555
|
# "addressTag":"",
|
@@ -2504,12 +2565,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2504
2565
|
return {
|
2505
2566
|
'info': depositAddress,
|
2506
2567
|
'currency': code,
|
2568
|
+
'network': None,
|
2507
2569
|
'address': address,
|
2508
2570
|
'tag': tag,
|
2509
|
-
'network': None,
|
2510
2571
|
}
|
2511
2572
|
|
2512
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
2573
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
2513
2574
|
"""
|
2514
2575
|
fetch the deposit address for a currency associated with self account
|
2515
2576
|
:param str code: unified currency code
|
@@ -2518,7 +2579,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2518
2579
|
"""
|
2519
2580
|
await self.load_markets()
|
2520
2581
|
currency = self.currency(code)
|
2521
|
-
request = {
|
2582
|
+
request: dict = {
|
2522
2583
|
'currency': currency['id'],
|
2523
2584
|
}
|
2524
2585
|
response = await self.privateSpotGetDepositAddress(self.extend(request, params))
|
@@ -2545,7 +2606,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2545
2606
|
async def fetch_transactions_by_type(self, type, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
2546
2607
|
await self.load_markets()
|
2547
2608
|
currency = None
|
2548
|
-
request = {
|
2609
|
+
request: dict = {
|
2549
2610
|
# 'currency': currency['id'],
|
2550
2611
|
# 'from': 'fromId', # When direct is' prev ', from is 1, returning from old to new ascending, when direct is' next ', from is the ID of the most recent record, returned from the old descending order
|
2551
2612
|
# 'size': 100, # default 100, max 500
|
@@ -2581,7 +2642,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2581
2642
|
# ]
|
2582
2643
|
# }
|
2583
2644
|
#
|
2584
|
-
data = self.
|
2645
|
+
data = self.safe_list(response, 'data', [])
|
2585
2646
|
return self.parse_transactions(data, currency, since, limit, {'type': type})
|
2586
2647
|
|
2587
2648
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
@@ -2606,10 +2667,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2606
2667
|
"""
|
2607
2668
|
return await self.fetch_transactions_by_type('withdrawal', code, since, limit, params)
|
2608
2669
|
|
2609
|
-
def parse_transaction_status(self, status):
|
2670
|
+
def parse_transaction_status(self, status: Str):
|
2610
2671
|
# deposit state includes: 1(in deposit), 2(to be confirmed), 3(successfully deposited), 4(stopped)
|
2611
2672
|
# withdrawal state includes: 1(application in progress), 2(to be confirmed), 3(completed), 4(rejected)
|
2612
|
-
statuses = {
|
2673
|
+
statuses: dict = {
|
2613
2674
|
'1': 'pending', # in Progress
|
2614
2675
|
'2': 'pending', # to be confirmed
|
2615
2676
|
'3': 'ok', # Completed
|
@@ -2617,7 +2678,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2617
2678
|
}
|
2618
2679
|
return self.safe_string(statuses, status, status)
|
2619
2680
|
|
2620
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2681
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
2621
2682
|
#
|
2622
2683
|
# withdraw
|
2623
2684
|
#
|
@@ -2680,20 +2741,31 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2680
2741
|
'fee': fee,
|
2681
2742
|
}
|
2682
2743
|
|
2683
|
-
def parse_transfer_status(self, status):
|
2684
|
-
statuses = {
|
2744
|
+
def parse_transfer_status(self, status: Str) -> Str:
|
2745
|
+
statuses: dict = {
|
2685
2746
|
'0': 'ok',
|
2686
2747
|
}
|
2687
2748
|
return self.safe_string(statuses, status, status)
|
2688
2749
|
|
2689
|
-
def parse_transfer(self, transfer, currency: Currency = None):
|
2750
|
+
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
2690
2751
|
#
|
2691
|
-
# transfer
|
2752
|
+
# transfer between spot, margin and OTC
|
2692
2753
|
#
|
2693
2754
|
# {
|
2694
2755
|
# "code": 0
|
2695
2756
|
# }
|
2696
2757
|
#
|
2758
|
+
# transfer between spot and swap
|
2759
|
+
#
|
2760
|
+
# {
|
2761
|
+
# "code": 0,
|
2762
|
+
# "data": {
|
2763
|
+
# "type": 2,
|
2764
|
+
# "currency": "USDT",
|
2765
|
+
# "transfer_amount": "5"
|
2766
|
+
# }
|
2767
|
+
# }
|
2768
|
+
#
|
2697
2769
|
# fetchTransfers
|
2698
2770
|
#
|
2699
2771
|
# {
|
@@ -2706,7 +2778,8 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2706
2778
|
#
|
2707
2779
|
fromAccount = None
|
2708
2780
|
toAccount = None
|
2709
|
-
|
2781
|
+
data = self.safe_dict(transfer, 'data', transfer)
|
2782
|
+
type = self.safe_integer(data, 'type')
|
2710
2783
|
if type == 1:
|
2711
2784
|
fromAccount = 'spot'
|
2712
2785
|
toAccount = 'swap'
|
@@ -2719,8 +2792,8 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2719
2792
|
'id': self.safe_string(transfer, 'transfer_id'),
|
2720
2793
|
'timestamp': timestamp,
|
2721
2794
|
'datetime': self.iso8601(timestamp),
|
2722
|
-
'currency': self.safe_currency_code(self.safe_string(
|
2723
|
-
'amount': self.
|
2795
|
+
'currency': self.safe_currency_code(self.safe_string(data, 'currency'), currency),
|
2796
|
+
'amount': self.safe_number_2(data, 'amount', 'transfer_amount'),
|
2724
2797
|
'fromAccount': fromAccount,
|
2725
2798
|
'toAccount': toAccount,
|
2726
2799
|
'status': self.parse_transfer_status(self.safe_string(transfer, 'code')),
|
@@ -2729,33 +2802,59 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2729
2802
|
async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
2730
2803
|
"""
|
2731
2804
|
transfer currency internally between wallets on the same account
|
2805
|
+
|
2806
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#transfer-assets-among-accounts
|
2807
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#accounttransfer
|
2808
|
+
|
2732
2809
|
:param str code: unified currency code
|
2733
2810
|
:param float amount: amount to transfer
|
2734
|
-
:param str fromAccount: account to transfer from
|
2735
|
-
:param str toAccount: account to transfer to
|
2811
|
+
:param str fromAccount: 'spot', 'swap', 'margin', 'OTC' - account to transfer from
|
2812
|
+
:param str toAccount: 'spot', 'swap', 'margin', 'OTC' - account to transfer to
|
2736
2813
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2737
2814
|
:returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
|
2738
2815
|
"""
|
2739
2816
|
await self.load_markets()
|
2740
2817
|
currency = self.currency(code)
|
2818
|
+
currencyId = currency['id']
|
2741
2819
|
accountsByType = self.safe_value(self.options, 'accountsByType', {})
|
2742
2820
|
fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
|
2743
2821
|
toId = self.safe_string(accountsByType, toAccount, toAccount)
|
2744
|
-
request = {
|
2745
|
-
|
2746
|
-
|
2747
|
-
|
2748
|
-
|
2749
|
-
|
2750
|
-
|
2751
|
-
|
2752
|
-
|
2753
|
-
|
2754
|
-
|
2755
|
-
|
2822
|
+
request = {}
|
2823
|
+
fromSwap = (fromAccount == 'swap')
|
2824
|
+
toSwap = (toAccount == 'swap')
|
2825
|
+
response = None
|
2826
|
+
amountString = self.currency_to_precision(code, amount)
|
2827
|
+
if fromSwap or toSwap:
|
2828
|
+
if (fromId != '1') and (toId != '1'):
|
2829
|
+
raise ExchangeError(self.id + ' transfer() supports transferring between spot and swap, spot and margin, spot and OTC only')
|
2830
|
+
request['type'] = 1 if toSwap else 2 # 1 = spot to swap, 2 = swap to spot
|
2831
|
+
request['currency'] = currencyId
|
2832
|
+
request['transfer_amount'] = amountString
|
2833
|
+
#
|
2834
|
+
# {
|
2835
|
+
# "code": 0,
|
2836
|
+
# "data": {
|
2837
|
+
# "type": 2,
|
2838
|
+
# "currency": "USDT",
|
2839
|
+
# "transfer_amount": "5"
|
2840
|
+
# }
|
2841
|
+
# }
|
2842
|
+
#
|
2843
|
+
response = await self.privateSwapPostAccountTransfer(self.extend(request, params))
|
2844
|
+
else:
|
2845
|
+
request['currency_mark'] = currencyId
|
2846
|
+
request['num'] = amountString
|
2847
|
+
request['from'] = fromId # 1 = SPOT, 2 = MARGIN, 3 = OTC
|
2848
|
+
request['to'] = toId # 1 = SPOT, 2 = MARGIN, 3 = OTC
|
2849
|
+
#
|
2850
|
+
# {
|
2851
|
+
# "code": 0
|
2852
|
+
# }
|
2853
|
+
#
|
2854
|
+
response = await self.privateSpotPostTransfer(self.extend(request, params))
|
2756
2855
|
return self.parse_transfer(response, currency)
|
2757
2856
|
|
2758
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2857
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2759
2858
|
"""
|
2760
2859
|
make a withdrawal
|
2761
2860
|
:param str code: unified currency code
|
@@ -2769,7 +2868,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2769
2868
|
self.check_address(address)
|
2770
2869
|
await self.load_markets()
|
2771
2870
|
currency = self.currency(code)
|
2772
|
-
request = {
|
2871
|
+
request: dict = {
|
2773
2872
|
# 'chain': 'ERC20', 'OMNI', 'TRC20', # required for USDT
|
2774
2873
|
'address': address,
|
2775
2874
|
'amount': self.currency_to_precision(code, amount),
|
@@ -2786,9 +2885,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2786
2885
|
#
|
2787
2886
|
return self.parse_transaction(response, currency)
|
2788
2887
|
|
2789
|
-
async def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
2888
|
+
async def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[BorrowInterest]:
|
2790
2889
|
await self.load_markets()
|
2791
|
-
request = {}
|
2890
|
+
request: dict = {}
|
2792
2891
|
market = None
|
2793
2892
|
if symbol is not None:
|
2794
2893
|
market = self.market(symbol)
|
@@ -2819,7 +2918,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2819
2918
|
interest = self.parse_borrow_interests(rows, market)
|
2820
2919
|
return self.filter_by_currency_since_limit(interest, code, since, limit)
|
2821
2920
|
|
2822
|
-
def parse_borrow_interest(self, info, market: Market = None):
|
2921
|
+
def parse_borrow_interest(self, info: dict, market: Market = None) -> BorrowInterest:
|
2823
2922
|
#
|
2824
2923
|
# {
|
2825
2924
|
# "amount": 0.0006103,
|
@@ -2841,27 +2940,29 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2841
2940
|
currency = None if (market is None) else market['base']
|
2842
2941
|
symbol = self.safe_symbol(marketId, market)
|
2843
2942
|
return {
|
2844
|
-
'
|
2943
|
+
'info': info,
|
2845
2944
|
'symbol': symbol,
|
2846
2945
|
'currency': currency,
|
2847
2946
|
'interest': None,
|
2848
2947
|
'interestRate': 0.001, # all interest rates on digifinex are 0.1%
|
2849
2948
|
'amountBorrowed': self.parse_number(amountBorrowed),
|
2949
|
+
'marginMode': None,
|
2850
2950
|
'timestamp': None,
|
2851
2951
|
'datetime': None,
|
2852
|
-
'info': info,
|
2853
2952
|
}
|
2854
2953
|
|
2855
|
-
async def fetch_cross_borrow_rate(self, code: str, params={}):
|
2954
|
+
async def fetch_cross_borrow_rate(self, code: str, params={}) -> CrossBorrowRate:
|
2856
2955
|
"""
|
2857
2956
|
fetch the rate of interest to borrow a currency for margin trading
|
2858
|
-
|
2957
|
+
|
2958
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
2959
|
+
|
2859
2960
|
:param str code: unified currency code
|
2860
2961
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2861
2962
|
:returns dict: a `borrow rate structure <https://github.com/ccxt/ccxt/wiki/Manual#borrow-rate-structure>`
|
2862
2963
|
"""
|
2863
2964
|
await self.load_markets()
|
2864
|
-
request = {}
|
2965
|
+
request: dict = {}
|
2865
2966
|
response = await self.privateSpotGetMarginAssets(self.extend(request, params))
|
2866
2967
|
#
|
2867
2968
|
# {
|
@@ -2889,10 +2990,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2889
2990
|
currency = self.currency(code)
|
2890
2991
|
return self.parse_borrow_rate(result, currency)
|
2891
2992
|
|
2892
|
-
async def fetch_cross_borrow_rates(self, params={}):
|
2993
|
+
async def fetch_cross_borrow_rates(self, params={}) -> CrossBorrowRates:
|
2893
2994
|
"""
|
2894
2995
|
fetch the borrow interest rates of all currencies
|
2895
|
-
|
2996
|
+
|
2997
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-assets
|
2998
|
+
|
2896
2999
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2897
3000
|
:returns dict: a list of `borrow rate structures <https://docs.ccxt.com/#/?id=borrow-rate-structure>`
|
2898
3001
|
"""
|
@@ -2947,7 +3050,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2947
3050
|
# "currency": "USDT"
|
2948
3051
|
# },
|
2949
3052
|
#
|
2950
|
-
result = {}
|
3053
|
+
result: dict = {}
|
2951
3054
|
for i in range(0, len(info)):
|
2952
3055
|
item = info[i]
|
2953
3056
|
currency = self.safe_string(item, codeKey)
|
@@ -2956,10 +3059,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2956
3059
|
result[code] = borrowRate
|
2957
3060
|
return result
|
2958
3061
|
|
2959
|
-
async def fetch_funding_rate(self, symbol: str, params={}):
|
3062
|
+
async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
|
2960
3063
|
"""
|
2961
3064
|
fetch the current funding rate
|
2962
|
-
|
3065
|
+
|
3066
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#currentfundingrate
|
3067
|
+
|
2963
3068
|
:param str symbol: unified market symbol
|
2964
3069
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2965
3070
|
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
@@ -2968,7 +3073,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2968
3073
|
market = self.market(symbol)
|
2969
3074
|
if not market['swap']:
|
2970
3075
|
raise BadSymbol(self.id + ' fetchFundingRate() supports swap contracts only')
|
2971
|
-
request = {
|
3076
|
+
request: dict = {
|
2972
3077
|
'instrument_id': market['id'],
|
2973
3078
|
}
|
2974
3079
|
response = await self.publicSwapGetPublicFundingRate(self.extend(request, params))
|
@@ -2984,10 +3089,22 @@ class digifinex(Exchange, ImplicitAPI):
|
|
2984
3089
|
# }
|
2985
3090
|
# }
|
2986
3091
|
#
|
2987
|
-
data = self.
|
3092
|
+
data = self.safe_dict(response, 'data', {})
|
2988
3093
|
return self.parse_funding_rate(data, market)
|
2989
3094
|
|
2990
|
-
def
|
3095
|
+
async def fetch_funding_interval(self, symbol: str, params={}) -> FundingRate:
|
3096
|
+
"""
|
3097
|
+
fetch the current funding rate interval
|
3098
|
+
|
3099
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#currentfundingrate
|
3100
|
+
|
3101
|
+
:param str symbol: unified market symbol
|
3102
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3103
|
+
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
3104
|
+
"""
|
3105
|
+
return await self.fetch_funding_rate(symbol, params)
|
3106
|
+
|
3107
|
+
def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
|
2991
3108
|
#
|
2992
3109
|
# {
|
2993
3110
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3000,6 +3117,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3000
3117
|
marketId = self.safe_string(contract, 'instrument_id')
|
3001
3118
|
timestamp = self.safe_integer(contract, 'funding_time')
|
3002
3119
|
nextTimestamp = self.safe_integer(contract, 'next_funding_time')
|
3120
|
+
fundingTimeString = self.safe_string(contract, 'funding_time')
|
3121
|
+
nextFundingTimeString = self.safe_string(contract, 'next_funding_time')
|
3122
|
+
millisecondsInterval = Precise.string_sub(nextFundingTimeString, fundingTimeString)
|
3003
3123
|
return {
|
3004
3124
|
'info': contract,
|
3005
3125
|
'symbol': self.safe_symbol(marketId, market),
|
@@ -3012,14 +3132,25 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3012
3132
|
'fundingRate': self.safe_number(contract, 'funding_rate'),
|
3013
3133
|
'fundingTimestamp': timestamp,
|
3014
3134
|
'fundingDatetime': self.iso8601(timestamp),
|
3015
|
-
'nextFundingRate': self.
|
3135
|
+
'nextFundingRate': self.safe_number(contract, 'next_funding_rate'),
|
3016
3136
|
'nextFundingTimestamp': nextTimestamp,
|
3017
3137
|
'nextFundingDatetime': self.iso8601(nextTimestamp),
|
3018
3138
|
'previousFundingRate': None,
|
3019
3139
|
'previousFundingTimestamp': None,
|
3020
3140
|
'previousFundingDatetime': None,
|
3141
|
+
'interval': self.parse_funding_interval(millisecondsInterval),
|
3021
3142
|
}
|
3022
3143
|
|
3144
|
+
def parse_funding_interval(self, interval):
|
3145
|
+
intervals: dict = {
|
3146
|
+
'3600000': '1h',
|
3147
|
+
'14400000': '4h',
|
3148
|
+
'28800000': '8h',
|
3149
|
+
'57600000': '16h',
|
3150
|
+
'86400000': '24h',
|
3151
|
+
}
|
3152
|
+
return self.safe_string(intervals, interval, interval)
|
3153
|
+
|
3023
3154
|
async def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3024
3155
|
"""
|
3025
3156
|
fetches historical funding rate prices
|
@@ -3035,7 +3166,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3035
3166
|
market = self.market(symbol)
|
3036
3167
|
if not market['swap']:
|
3037
3168
|
raise BadSymbol(self.id + ' fetchFundingRateHistory() supports swap contracts only')
|
3038
|
-
request = {
|
3169
|
+
request: dict = {
|
3039
3170
|
'instrument_id': market['id'],
|
3040
3171
|
}
|
3041
3172
|
if since is not None:
|
@@ -3076,10 +3207,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3076
3207
|
sorted = self.sort_by(rates, 'timestamp')
|
3077
3208
|
return self.filter_by_symbol_since_limit(sorted, symbol, since, limit)
|
3078
3209
|
|
3079
|
-
async def fetch_trading_fee(self, symbol: str, params={}):
|
3210
|
+
async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
3080
3211
|
"""
|
3081
3212
|
fetch the trading fees for a market
|
3082
|
-
|
3213
|
+
|
3214
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#tradingfee
|
3215
|
+
|
3083
3216
|
:param str symbol: unified market symbol
|
3084
3217
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3085
3218
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -3088,7 +3221,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3088
3221
|
market = self.market(symbol)
|
3089
3222
|
if not market['swap']:
|
3090
3223
|
raise BadRequest(self.id + ' fetchTradingFee() supports swap markets only')
|
3091
|
-
request = {
|
3224
|
+
request: dict = {
|
3092
3225
|
'instrument_id': market['id'],
|
3093
3226
|
}
|
3094
3227
|
response = await self.privateSwapGetAccountTradingFeeRate(self.extend(request, params))
|
@@ -3105,7 +3238,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3105
3238
|
data = self.safe_value(response, 'data', {})
|
3106
3239
|
return self.parse_trading_fee(data, market)
|
3107
3240
|
|
3108
|
-
def parse_trading_fee(self, fee, market: Market = None):
|
3241
|
+
def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
|
3109
3242
|
#
|
3110
3243
|
# {
|
3111
3244
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3120,20 +3253,24 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3120
3253
|
'symbol': symbol,
|
3121
3254
|
'maker': self.safe_number(fee, 'maker_fee_rate'),
|
3122
3255
|
'taker': self.safe_number(fee, 'taker_fee_rate'),
|
3256
|
+
'percentage': None,
|
3257
|
+
'tierBased': None,
|
3123
3258
|
}
|
3124
3259
|
|
3125
3260
|
async def fetch_positions(self, symbols: Strings = None, params={}):
|
3126
3261
|
"""
|
3127
3262
|
fetch all open positions
|
3128
|
-
|
3129
|
-
|
3263
|
+
|
3264
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-positions
|
3265
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positions
|
3266
|
+
|
3130
3267
|
:param str[]|None symbols: list of unified market symbols
|
3131
3268
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3132
3269
|
:returns dict[]: a list of `position structures <https://docs.ccxt.com/#/?id=position-structure>`
|
3133
3270
|
"""
|
3134
3271
|
await self.load_markets()
|
3135
3272
|
symbols = self.market_symbols(symbols)
|
3136
|
-
request = {}
|
3273
|
+
request: dict = {}
|
3137
3274
|
market = None
|
3138
3275
|
marketType = None
|
3139
3276
|
if symbols is not None:
|
@@ -3222,8 +3359,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3222
3359
|
|
3223
3360
|
async def fetch_position(self, symbol: str, params={}):
|
3224
3361
|
"""
|
3225
|
-
|
3226
|
-
|
3362
|
+
|
3363
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#margin-positions
|
3364
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positions
|
3365
|
+
|
3227
3366
|
fetch data on a single open contract trade position
|
3228
3367
|
:param str symbol: unified market symbol of the market the position is held in
|
3229
3368
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3231,7 +3370,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3231
3370
|
"""
|
3232
3371
|
await self.load_markets()
|
3233
3372
|
market = self.market(symbol)
|
3234
|
-
request = {}
|
3373
|
+
request: dict = {}
|
3235
3374
|
marketType = None
|
3236
3375
|
marketType, params = self.handle_market_type_and_params('fetchPosition', market, params)
|
3237
3376
|
marginMode, query = self.handle_margin_mode_and_params('fetchPosition', params)
|
@@ -3307,7 +3446,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3307
3446
|
position['marginRatio'] = self.safe_number(response, 'margin_rate')
|
3308
3447
|
return position
|
3309
3448
|
|
3310
|
-
def parse_position(self, position, market: Market = None):
|
3449
|
+
def parse_position(self, position: dict, market: Market = None):
|
3311
3450
|
#
|
3312
3451
|
# swap
|
3313
3452
|
#
|
@@ -3391,7 +3530,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3391
3530
|
async def set_leverage(self, leverage: Int, symbol: Str = None, params={}):
|
3392
3531
|
"""
|
3393
3532
|
set the level of leverage for a market
|
3394
|
-
|
3533
|
+
|
3534
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#setleverage
|
3535
|
+
|
3395
3536
|
:param float leverage: the rate of leverage
|
3396
3537
|
:param str symbol: unified market symbol
|
3397
3538
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3407,7 +3548,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3407
3548
|
raise BadSymbol(self.id + ' setLeverage() supports swap contracts only')
|
3408
3549
|
if (leverage < 1) or (leverage > 100):
|
3409
3550
|
raise BadRequest(self.id + ' leverage should be between 1 and 100')
|
3410
|
-
request = {
|
3551
|
+
request: dict = {
|
3411
3552
|
'instrument_id': market['id'],
|
3412
3553
|
'leverage': leverage,
|
3413
3554
|
}
|
@@ -3437,10 +3578,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3437
3578
|
# }
|
3438
3579
|
#
|
3439
3580
|
|
3440
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
3581
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
3441
3582
|
"""
|
3442
3583
|
fetch the transfer history, only transfers between spot and swap accounts are supported
|
3443
|
-
|
3584
|
+
|
3585
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#transferrecord
|
3586
|
+
|
3444
3587
|
:param str code: unified currency code of the currency transferred
|
3445
3588
|
:param int [since]: the earliest time in ms to fetch transfers for
|
3446
3589
|
:param int [limit]: the maximum number of transfers to retrieve
|
@@ -3449,7 +3592,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3449
3592
|
"""
|
3450
3593
|
await self.load_markets()
|
3451
3594
|
currency = None
|
3452
|
-
request = {}
|
3595
|
+
request: dict = {}
|
3453
3596
|
if code is not None:
|
3454
3597
|
currency = self.safe_currency_code(code)
|
3455
3598
|
request['currency'] = currency['id']
|
@@ -3473,12 +3616,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3473
3616
|
# ]
|
3474
3617
|
# }
|
3475
3618
|
#
|
3476
|
-
transfers = self.
|
3619
|
+
transfers = self.safe_list(response, 'data', [])
|
3477
3620
|
return self.parse_transfers(transfers, currency, since, limit)
|
3478
3621
|
|
3479
|
-
async def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
|
3622
|
+
async def fetch_leverage_tiers(self, symbols: Strings = None, params={}) -> LeverageTiers:
|
3480
3623
|
"""
|
3481
|
-
|
3624
|
+
|
3625
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#instruments
|
3626
|
+
|
3482
3627
|
retrieve information on the maximum leverage, for different trade sizes
|
3483
3628
|
:param str[]|None symbols: a list of unified market symbols
|
3484
3629
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3517,56 +3662,14 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3517
3662
|
#
|
3518
3663
|
data = self.safe_value(response, 'data', [])
|
3519
3664
|
symbols = self.market_symbols(symbols)
|
3520
|
-
return self.parse_leverage_tiers(data, symbols, '
|
3521
|
-
|
3522
|
-
def parse_leverage_tiers(self, response, symbols: Strings = None, marketIdKey=None):
|
3523
|
-
#
|
3524
|
-
# [
|
3525
|
-
# {
|
3526
|
-
# "instrument_id": "BTCUSDTPERP",
|
3527
|
-
# "type": "REAL",
|
3528
|
-
# "contract_type": "PERPETUAL",
|
3529
|
-
# "base_currency": "BTC",
|
3530
|
-
# "quote_currency": "USDT",
|
3531
|
-
# "clear_currency": "USDT",
|
3532
|
-
# "contract_value": "0.001",
|
3533
|
-
# "contract_value_currency": "BTC",
|
3534
|
-
# "is_inverse": False,
|
3535
|
-
# "is_trading": True,
|
3536
|
-
# "status": "ONLINE",
|
3537
|
-
# "price_precision": 1,
|
3538
|
-
# "tick_size": "0.1",
|
3539
|
-
# "min_order_amount": 1,
|
3540
|
-
# "open_max_limits": [
|
3541
|
-
# {
|
3542
|
-
# "leverage": "50",
|
3543
|
-
# "max_limit": "1000000"
|
3544
|
-
# }
|
3545
|
-
# ]
|
3546
|
-
# },
|
3547
|
-
# ]
|
3548
|
-
#
|
3549
|
-
tiers = {}
|
3550
|
-
result = {}
|
3551
|
-
for i in range(0, len(response)):
|
3552
|
-
entry = response[i]
|
3553
|
-
marketId = self.safe_string(entry, 'instrument_id')
|
3554
|
-
market = self.safe_market(marketId)
|
3555
|
-
symbol = self.safe_symbol(marketId, market)
|
3556
|
-
symbolsLength = 0
|
3557
|
-
tiers[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3558
|
-
if symbols is not None:
|
3559
|
-
symbolsLength = len(symbols)
|
3560
|
-
if self.in_array(symbol, symbols):
|
3561
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3562
|
-
if symbol is not None and (symbolsLength == 0 or self.in_array(symbols, symbol)):
|
3563
|
-
result[symbol] = self.parse_market_leverage_tiers(response[i], market)
|
3564
|
-
return result
|
3665
|
+
return self.parse_leverage_tiers(data, symbols, 'instrument_id')
|
3565
3666
|
|
3566
|
-
async def fetch_market_leverage_tiers(self, symbol: str, params={}):
|
3667
|
+
async def fetch_market_leverage_tiers(self, symbol: str, params={}) -> List[LeverageTier]:
|
3567
3668
|
"""
|
3568
|
-
:see: https://docs.digifinex.com/en-ww/swap/v2/rest.html#instrument
|
3569
3669
|
retrieve information on the maximum leverage, for different trade sizes for a single market
|
3670
|
+
|
3671
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#instrument
|
3672
|
+
|
3570
3673
|
:param str symbol: unified market symbol
|
3571
3674
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3572
3675
|
:returns dict: a `leverage tiers structure <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`
|
@@ -3575,7 +3678,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3575
3678
|
market = self.market(symbol)
|
3576
3679
|
if not market['swap']:
|
3577
3680
|
raise BadRequest(self.id + ' fetchMarketLeverageTiers() supports swap markets only')
|
3578
|
-
request = {
|
3681
|
+
request: dict = {
|
3579
3682
|
'instrument_id': market['id'],
|
3580
3683
|
}
|
3581
3684
|
response = await self.publicSwapGetPublicInstrument(self.extend(request, params))
|
@@ -3609,7 +3712,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3609
3712
|
data = self.safe_value(response, 'data', {})
|
3610
3713
|
return self.parse_market_leverage_tiers(data, market)
|
3611
3714
|
|
3612
|
-
def parse_market_leverage_tiers(self, info, market: Market = None):
|
3715
|
+
def parse_market_leverage_tiers(self, info, market: Market = None) -> List[LeverageTier]:
|
3613
3716
|
#
|
3614
3717
|
# {
|
3615
3718
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3639,9 +3742,10 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3639
3742
|
for i in range(0, len(brackets)):
|
3640
3743
|
tier = brackets[i]
|
3641
3744
|
marketId = self.safe_string(info, 'instrument_id')
|
3642
|
-
market = self.safe_market(marketId)
|
3745
|
+
market = self.safe_market(marketId, market)
|
3643
3746
|
tiers.append({
|
3644
3747
|
'tier': self.sum(i, 1),
|
3748
|
+
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3645
3749
|
'currency': market['settle'],
|
3646
3750
|
'minNotional': None,
|
3647
3751
|
'maxNotional': self.safe_number(tier, 'max_limit'),
|
@@ -3653,7 +3757,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3653
3757
|
|
3654
3758
|
def handle_margin_mode_and_params(self, methodName, params={}, defaultValue=None):
|
3655
3759
|
"""
|
3656
|
-
|
3760
|
+
@ignore
|
3657
3761
|
marginMode specified by params["marginMode"], self.options["marginMode"], self.options["defaultMarginMode"], params["margin"] = True or self.options["defaultType"] = 'margin'
|
3658
3762
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3659
3763
|
:returns Array: the marginMode in lowercase
|
@@ -3673,7 +3777,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3673
3777
|
async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
3674
3778
|
"""
|
3675
3779
|
fetch deposit and withdraw fees
|
3676
|
-
|
3780
|
+
|
3781
|
+
https://docs.digifinex.com/en-ww/spot/v3/rest.html#get-currency-deposit-and-withdrawal-information
|
3782
|
+
|
3677
3783
|
:param str[]|None codes: not used by fetchDepositWithdrawFees()
|
3678
3784
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
3679
3785
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
@@ -3709,7 +3815,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3709
3815
|
# "code": 200,
|
3710
3816
|
# }
|
3711
3817
|
#
|
3712
|
-
data = self.
|
3818
|
+
data = self.safe_list(response, 'data')
|
3713
3819
|
return self.parse_deposit_withdraw_fees(data, codes)
|
3714
3820
|
|
3715
3821
|
def parse_deposit_withdraw_fees(self, response, codes=None, currencyIdKey=None):
|
@@ -3739,7 +3845,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3739
3845
|
# },
|
3740
3846
|
# ]
|
3741
3847
|
#
|
3742
|
-
depositWithdrawFees = {}
|
3848
|
+
depositWithdrawFees: dict = {}
|
3743
3849
|
codes = self.market_codes(codes)
|
3744
3850
|
for i in range(0, len(response)):
|
3745
3851
|
entry = response[i]
|
@@ -3753,11 +3859,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3753
3859
|
depositWithdrawFees[code]['info'].append(entry)
|
3754
3860
|
networkId = self.safe_string(entry, 'chain')
|
3755
3861
|
withdrawFee = self.safe_value(entry, 'min_withdraw_fee')
|
3756
|
-
withdrawResult = {
|
3862
|
+
withdrawResult: dict = {
|
3757
3863
|
'fee': withdrawFee,
|
3758
3864
|
'percentage': False if (withdrawFee is not None) else None,
|
3759
3865
|
}
|
3760
|
-
depositResult = {
|
3866
|
+
depositResult: dict = {
|
3761
3867
|
'fee': None,
|
3762
3868
|
'percentage': None,
|
3763
3869
|
}
|
@@ -3777,10 +3883,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3777
3883
|
depositWithdrawFees[code] = self.assign_default_deposit_withdraw_fees(depositWithdrawFees[code], currency)
|
3778
3884
|
return depositWithdrawFees
|
3779
3885
|
|
3780
|
-
async def add_margin(self, symbol: str, amount, params={}):
|
3886
|
+
async def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
3781
3887
|
"""
|
3782
3888
|
add margin to a position
|
3783
|
-
|
3889
|
+
|
3890
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
|
3891
|
+
|
3784
3892
|
:param str symbol: unified market symbol
|
3785
3893
|
:param float amount: amount of margin to add
|
3786
3894
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3791,10 +3899,12 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3791
3899
|
self.check_required_argument('addMargin', side, 'side', ['long', 'short'])
|
3792
3900
|
return await self.modify_margin_helper(symbol, amount, 1, params)
|
3793
3901
|
|
3794
|
-
async def reduce_margin(self, symbol: str, amount, params={}):
|
3902
|
+
async def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
3795
3903
|
"""
|
3796
3904
|
remove margin from a position
|
3797
|
-
|
3905
|
+
|
3906
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmargin
|
3907
|
+
|
3798
3908
|
:param str symbol: unified market symbol
|
3799
3909
|
:param float amount: the amount of margin to remove
|
3800
3910
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3805,11 +3915,11 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3805
3915
|
self.check_required_argument('reduceMargin', side, 'side', ['long', 'short'])
|
3806
3916
|
return await self.modify_margin_helper(symbol, amount, 2, params)
|
3807
3917
|
|
3808
|
-
async def modify_margin_helper(self, symbol: str, amount, type, params={}):
|
3918
|
+
async def modify_margin_helper(self, symbol: str, amount, type, params={}) -> MarginModification:
|
3809
3919
|
await self.load_markets()
|
3810
3920
|
side = self.safe_string(params, 'side')
|
3811
3921
|
market = self.market(symbol)
|
3812
|
-
request = {
|
3922
|
+
request: dict = {
|
3813
3923
|
'instrument_id': market['id'],
|
3814
3924
|
'amount': self.number_to_string(amount),
|
3815
3925
|
'type': type,
|
@@ -3834,7 +3944,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3834
3944
|
'status': status,
|
3835
3945
|
})
|
3836
3946
|
|
3837
|
-
def parse_margin_modification(self, data, market: Market = None):
|
3947
|
+
def parse_margin_modification(self, data: dict, market: Market = None) -> MarginModification:
|
3838
3948
|
#
|
3839
3949
|
# {
|
3840
3950
|
# "instrument_id": "BTCUSDTPERP",
|
@@ -3847,18 +3957,23 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3847
3957
|
rawType = self.safe_integer(data, 'type')
|
3848
3958
|
return {
|
3849
3959
|
'info': data,
|
3960
|
+
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3850
3961
|
'type': 'add' if (rawType == 1) else 'reduce',
|
3962
|
+
'marginMode': 'isolated',
|
3851
3963
|
'amount': self.safe_number(data, 'amount'),
|
3852
3964
|
'total': None,
|
3853
3965
|
'code': market['settle'],
|
3854
|
-
'symbol': self.safe_symbol(marketId, market, None, 'swap'),
|
3855
3966
|
'status': None,
|
3967
|
+
'timestamp': None,
|
3968
|
+
'datetime': None,
|
3856
3969
|
}
|
3857
3970
|
|
3858
3971
|
async def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
3859
3972
|
"""
|
3860
3973
|
fetch the history of funding payments paid and received on self account
|
3861
|
-
|
3974
|
+
|
3975
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#funding-fee
|
3976
|
+
|
3862
3977
|
:param str [symbol]: unified market symbol
|
3863
3978
|
:param int [since]: the earliest time in ms to fetch funding history for
|
3864
3979
|
:param int [limit]: the maximum number of funding history structures to retrieve
|
@@ -3867,7 +3982,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3867
3982
|
:returns dict: a `funding history structure <https://docs.ccxt.com/#/?id=funding-history-structure>`
|
3868
3983
|
"""
|
3869
3984
|
await self.load_markets()
|
3870
|
-
request = {}
|
3985
|
+
request: dict = {}
|
3871
3986
|
request, params = self.handle_until_option('end_timestamp', request, params)
|
3872
3987
|
market = None
|
3873
3988
|
if symbol is not None:
|
@@ -3891,7 +4006,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3891
4006
|
# ]
|
3892
4007
|
# }
|
3893
4008
|
#
|
3894
|
-
data = self.
|
4009
|
+
data = self.safe_list(response, 'data', [])
|
3895
4010
|
return self.parse_incomes(data, market, since, limit)
|
3896
4011
|
|
3897
4012
|
def parse_income(self, income, market: Market = None):
|
@@ -3919,7 +4034,9 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3919
4034
|
async def set_margin_mode(self, marginMode: str, symbol: Str = None, params={}):
|
3920
4035
|
"""
|
3921
4036
|
set margin mode to 'cross' or 'isolated'
|
3922
|
-
|
4037
|
+
|
4038
|
+
https://docs.digifinex.com/en-ww/swap/v2/rest.html#positionmode
|
4039
|
+
|
3923
4040
|
:param str marginMode: 'cross' or 'isolated'
|
3924
4041
|
:param str symbol: unified market symbol
|
3925
4042
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -3932,7 +4049,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3932
4049
|
marginMode = marginMode.lower()
|
3933
4050
|
if marginMode == 'cross':
|
3934
4051
|
marginMode = 'crossed'
|
3935
|
-
request = {
|
4052
|
+
request: dict = {
|
3936
4053
|
'instrument_id': market['id'],
|
3937
4054
|
'margin_mode': marginMode,
|
3938
4055
|
}
|
@@ -3985,7 +4102,7 @@ class digifinex(Exchange, ImplicitAPI):
|
|
3985
4102
|
url += '?' + urlencoded
|
3986
4103
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
3987
4104
|
|
3988
|
-
def handle_errors(self, statusCode, statusText, url, method, responseHeaders, responseBody, response, requestHeaders, requestBody):
|
4105
|
+
def handle_errors(self, statusCode: int, statusText: str, url: str, method: str, responseHeaders: dict, responseBody, response, requestHeaders, requestBody):
|
3989
4106
|
if not response:
|
3990
4107
|
return None # fall back to default error handler
|
3991
4108
|
code = self.safe_string(response, 'code')
|