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