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/async_support/luno.py
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.luno import ImplicitAPI
|
8
|
-
from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
|
8
|
+
from ccxt.base.types import Account, Balances, Currency, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface
|
9
9
|
from typing import List
|
10
10
|
from ccxt.base.errors import ExchangeError
|
11
11
|
from ccxt.base.errors import ArgumentsRequired
|
@@ -64,8 +64,11 @@ class luno(Exchange, ImplicitAPI):
|
|
64
64
|
'fetchOrderBook': True,
|
65
65
|
'fetchOrders': True,
|
66
66
|
'fetchPosition': False,
|
67
|
+
'fetchPositionHistory': False,
|
67
68
|
'fetchPositionMode': False,
|
68
69
|
'fetchPositions': False,
|
70
|
+
'fetchPositionsForSymbol': False,
|
71
|
+
'fetchPositionsHistory': False,
|
69
72
|
'fetchPositionsRisk': False,
|
70
73
|
'fetchPremiumIndexOHLCV': False,
|
71
74
|
'fetchTicker': True,
|
@@ -147,6 +150,7 @@ class luno(Exchange, ImplicitAPI):
|
|
147
150
|
'withdrawals': 1,
|
148
151
|
'send': 1,
|
149
152
|
'oauth2/grant': 1,
|
153
|
+
'beneficiaries': 1,
|
150
154
|
# POST /api/exchange/1/move
|
151
155
|
},
|
152
156
|
'put': {
|
@@ -154,6 +158,7 @@ class luno(Exchange, ImplicitAPI):
|
|
154
158
|
},
|
155
159
|
'delete': {
|
156
160
|
'withdrawals/{id}': 1,
|
161
|
+
'beneficiaries/{id}': 1,
|
157
162
|
},
|
158
163
|
},
|
159
164
|
},
|
@@ -180,10 +185,12 @@ class luno(Exchange, ImplicitAPI):
|
|
180
185
|
'precisionMode': TICK_SIZE,
|
181
186
|
})
|
182
187
|
|
183
|
-
async def fetch_markets(self, params={}):
|
188
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
184
189
|
"""
|
185
190
|
retrieves data on all markets for luno
|
186
|
-
|
191
|
+
|
192
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/Markets
|
193
|
+
|
187
194
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
188
195
|
:returns dict[]: an array of objects representing market data
|
189
196
|
"""
|
@@ -271,7 +278,9 @@ class luno(Exchange, ImplicitAPI):
|
|
271
278
|
async def fetch_accounts(self, params={}) -> List[Account]:
|
272
279
|
"""
|
273
280
|
fetch all the accounts associated with a profile
|
274
|
-
|
281
|
+
|
282
|
+
https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
|
283
|
+
|
275
284
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
276
285
|
:returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
|
277
286
|
"""
|
@@ -293,7 +302,7 @@ class luno(Exchange, ImplicitAPI):
|
|
293
302
|
|
294
303
|
def parse_balance(self, response) -> Balances:
|
295
304
|
wallets = self.safe_value(response, 'balance', [])
|
296
|
-
result = {
|
305
|
+
result: dict = {
|
297
306
|
'info': response,
|
298
307
|
'timestamp': None,
|
299
308
|
'datetime': None,
|
@@ -320,7 +329,9 @@ class luno(Exchange, ImplicitAPI):
|
|
320
329
|
async def fetch_balance(self, params={}) -> Balances:
|
321
330
|
"""
|
322
331
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
323
|
-
|
332
|
+
|
333
|
+
https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
|
334
|
+
|
324
335
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
325
336
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
326
337
|
"""
|
@@ -341,8 +352,10 @@ class luno(Exchange, ImplicitAPI):
|
|
341
352
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
342
353
|
"""
|
343
354
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
344
|
-
|
345
|
-
|
355
|
+
|
356
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBookFull
|
357
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBook
|
358
|
+
|
346
359
|
:param str symbol: unified symbol of the market to fetch the order book for
|
347
360
|
:param int [limit]: the maximum amount of order book entries to return
|
348
361
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -350,7 +363,7 @@ class luno(Exchange, ImplicitAPI):
|
|
350
363
|
"""
|
351
364
|
await self.load_markets()
|
352
365
|
market = self.market(symbol)
|
353
|
-
request = {
|
366
|
+
request: dict = {
|
354
367
|
'pair': market['id'],
|
355
368
|
}
|
356
369
|
response = None
|
@@ -361,14 +374,14 @@ class luno(Exchange, ImplicitAPI):
|
|
361
374
|
timestamp = self.safe_integer(response, 'timestamp')
|
362
375
|
return self.parse_order_book(response, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
|
363
376
|
|
364
|
-
def parse_order_status(self, status):
|
365
|
-
statuses = {
|
377
|
+
def parse_order_status(self, status: Str):
|
378
|
+
statuses: dict = {
|
366
379
|
# todo add other statuses
|
367
380
|
'PENDING': 'open',
|
368
381
|
}
|
369
382
|
return self.safe_string(statuses, status, status)
|
370
383
|
|
371
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
384
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
372
385
|
#
|
373
386
|
# {
|
374
387
|
# "base": "string",
|
@@ -428,7 +441,6 @@ class luno(Exchange, ImplicitAPI):
|
|
428
441
|
'postOnly': None,
|
429
442
|
'side': side,
|
430
443
|
'price': price,
|
431
|
-
'stopPrice': None,
|
432
444
|
'triggerPrice': None,
|
433
445
|
'amount': amount,
|
434
446
|
'filled': filled,
|
@@ -443,13 +455,16 @@ class luno(Exchange, ImplicitAPI):
|
|
443
455
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
444
456
|
"""
|
445
457
|
fetches information on an order made by the user
|
446
|
-
|
458
|
+
|
459
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
|
460
|
+
|
461
|
+
:param str id: order id
|
447
462
|
:param str symbol: not used by luno fetchOrder
|
448
463
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
449
464
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
450
465
|
"""
|
451
466
|
await self.load_markets()
|
452
|
-
request = {
|
467
|
+
request: dict = {
|
453
468
|
'id': id,
|
454
469
|
}
|
455
470
|
response = await self.privateGetOrdersId(self.extend(request, params))
|
@@ -457,7 +472,7 @@ class luno(Exchange, ImplicitAPI):
|
|
457
472
|
|
458
473
|
async def fetch_orders_by_state(self, state=None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
459
474
|
await self.load_markets()
|
460
|
-
request = {}
|
475
|
+
request: dict = {}
|
461
476
|
market = None
|
462
477
|
if state is not None:
|
463
478
|
request['state'] = state
|
@@ -465,13 +480,15 @@ class luno(Exchange, ImplicitAPI):
|
|
465
480
|
market = self.market(symbol)
|
466
481
|
request['pair'] = market['id']
|
467
482
|
response = await self.privateGetListorders(self.extend(request, params))
|
468
|
-
orders = self.
|
483
|
+
orders = self.safe_list(response, 'orders', [])
|
469
484
|
return self.parse_orders(orders, market, since, limit)
|
470
485
|
|
471
486
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
472
487
|
"""
|
473
488
|
fetches information on multiple orders made by the user
|
474
|
-
|
489
|
+
|
490
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
|
491
|
+
|
475
492
|
:param str symbol: unified market symbol of the market orders were made in
|
476
493
|
:param int [since]: the earliest time in ms to fetch orders for
|
477
494
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -483,7 +500,9 @@ class luno(Exchange, ImplicitAPI):
|
|
483
500
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
484
501
|
"""
|
485
502
|
fetch all unfilled currently open orders
|
486
|
-
|
503
|
+
|
504
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
|
505
|
+
|
487
506
|
:param str symbol: unified market symbol
|
488
507
|
:param int [since]: the earliest time in ms to fetch open orders for
|
489
508
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -495,7 +514,9 @@ class luno(Exchange, ImplicitAPI):
|
|
495
514
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
496
515
|
"""
|
497
516
|
fetches information on multiple closed orders made by the user
|
498
|
-
|
517
|
+
|
518
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
|
519
|
+
|
499
520
|
:param str symbol: unified market symbol of the market orders were made in
|
500
521
|
:param int [since]: the earliest time in ms to fetch orders for
|
501
522
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -504,7 +525,7 @@ class luno(Exchange, ImplicitAPI):
|
|
504
525
|
"""
|
505
526
|
return await self.fetch_orders_by_state('COMPLETE', symbol, since, limit, params)
|
506
527
|
|
507
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
528
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
508
529
|
# {
|
509
530
|
# "pair":"XBTAUD",
|
510
531
|
# "timestamp":1642201439301,
|
@@ -544,7 +565,9 @@ class luno(Exchange, ImplicitAPI):
|
|
544
565
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
545
566
|
"""
|
546
567
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
547
|
-
|
568
|
+
|
569
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetTickers
|
570
|
+
|
548
571
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
549
572
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
550
573
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -554,7 +577,7 @@ class luno(Exchange, ImplicitAPI):
|
|
554
577
|
response = await self.publicGetTickers(params)
|
555
578
|
tickers = self.index_by(response['tickers'], 'pair')
|
556
579
|
ids = list(tickers.keys())
|
557
|
-
result = {}
|
580
|
+
result: dict = {}
|
558
581
|
for i in range(0, len(ids)):
|
559
582
|
id = ids[i]
|
560
583
|
market = self.safe_market(id)
|
@@ -566,14 +589,16 @@ class luno(Exchange, ImplicitAPI):
|
|
566
589
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
567
590
|
"""
|
568
591
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
569
|
-
|
592
|
+
|
593
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetTicker
|
594
|
+
|
570
595
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
571
596
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
572
597
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
573
598
|
"""
|
574
599
|
await self.load_markets()
|
575
600
|
market = self.market(symbol)
|
576
|
-
request = {
|
601
|
+
request: dict = {
|
577
602
|
'pair': market['id'],
|
578
603
|
}
|
579
604
|
response = await self.publicGetTicker(self.extend(request, params))
|
@@ -588,7 +613,7 @@ class luno(Exchange, ImplicitAPI):
|
|
588
613
|
# }
|
589
614
|
return self.parse_ticker(response, market)
|
590
615
|
|
591
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
616
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
592
617
|
#
|
593
618
|
# fetchTrades(public)
|
594
619
|
#
|
@@ -675,7 +700,9 @@ class luno(Exchange, ImplicitAPI):
|
|
675
700
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
676
701
|
"""
|
677
702
|
get the list of most recent trades for a particular symbol
|
678
|
-
|
703
|
+
|
704
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
|
705
|
+
|
679
706
|
:param str symbol: unified symbol of the market to fetch trades for
|
680
707
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
681
708
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -684,7 +711,7 @@ class luno(Exchange, ImplicitAPI):
|
|
684
711
|
"""
|
685
712
|
await self.load_markets()
|
686
713
|
market = self.market(symbol)
|
687
|
-
request = {
|
714
|
+
request: dict = {
|
688
715
|
'pair': market['id'],
|
689
716
|
}
|
690
717
|
if since is not None:
|
@@ -703,12 +730,14 @@ class luno(Exchange, ImplicitAPI):
|
|
703
730
|
# ]
|
704
731
|
# }
|
705
732
|
#
|
706
|
-
trades = self.
|
733
|
+
trades = self.safe_list(response, 'trades', [])
|
707
734
|
return self.parse_trades(trades, market, since, limit)
|
708
735
|
|
709
736
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
710
737
|
"""
|
711
|
-
|
738
|
+
|
739
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
|
740
|
+
|
712
741
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
713
742
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
714
743
|
:param str timeframe: the length of time each candle represents
|
@@ -719,7 +748,7 @@ class luno(Exchange, ImplicitAPI):
|
|
719
748
|
"""
|
720
749
|
await self.load_markets()
|
721
750
|
market = self.market(symbol)
|
722
|
-
request = {
|
751
|
+
request: dict = {
|
723
752
|
'duration': self.safe_value(self.timeframes, timeframe, timeframe),
|
724
753
|
'pair': market['id'],
|
725
754
|
}
|
@@ -745,7 +774,7 @@ class luno(Exchange, ImplicitAPI):
|
|
745
774
|
# "pair": "XBTEUR"
|
746
775
|
# }
|
747
776
|
#
|
748
|
-
ohlcvs = self.
|
777
|
+
ohlcvs = self.safe_list(response, 'candles', [])
|
749
778
|
return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
|
750
779
|
|
751
780
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -769,7 +798,9 @@ class luno(Exchange, ImplicitAPI):
|
|
769
798
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
770
799
|
"""
|
771
800
|
fetch all trades made by the user
|
772
|
-
|
801
|
+
|
802
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
|
803
|
+
|
773
804
|
:param str symbol: unified market symbol
|
774
805
|
:param int [since]: the earliest time in ms to fetch trades for
|
775
806
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -780,7 +811,7 @@ class luno(Exchange, ImplicitAPI):
|
|
780
811
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
781
812
|
await self.load_markets()
|
782
813
|
market = self.market(symbol)
|
783
|
-
request = {
|
814
|
+
request: dict = {
|
784
815
|
'pair': market['id'],
|
785
816
|
}
|
786
817
|
if since is not None:
|
@@ -809,20 +840,22 @@ class luno(Exchange, ImplicitAPI):
|
|
809
840
|
# ]
|
810
841
|
# }
|
811
842
|
#
|
812
|
-
trades = self.
|
843
|
+
trades = self.safe_list(response, 'trades', [])
|
813
844
|
return self.parse_trades(trades, market, since, limit)
|
814
845
|
|
815
|
-
async def fetch_trading_fee(self, symbol: str, params={}):
|
846
|
+
async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
816
847
|
"""
|
817
848
|
fetch the trading fees for a market
|
818
|
-
|
849
|
+
|
850
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
|
851
|
+
|
819
852
|
:param str symbol: unified market symbol
|
820
853
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
821
854
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
822
855
|
"""
|
823
856
|
await self.load_markets()
|
824
857
|
market = self.market(symbol)
|
825
|
-
request = {
|
858
|
+
request: dict = {
|
826
859
|
'pair': market['id'],
|
827
860
|
}
|
828
861
|
response = await self.privateGetFeeInfo(self.extend(request, params))
|
@@ -838,24 +871,28 @@ class luno(Exchange, ImplicitAPI):
|
|
838
871
|
'symbol': symbol,
|
839
872
|
'maker': self.safe_number(response, 'maker_fee'),
|
840
873
|
'taker': self.safe_number(response, 'taker_fee'),
|
874
|
+
'percentage': None,
|
875
|
+
'tierBased': None,
|
841
876
|
}
|
842
877
|
|
843
878
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
844
879
|
"""
|
845
880
|
create a trade order
|
846
|
-
|
847
|
-
|
881
|
+
|
882
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/PostMarketOrder
|
883
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/PostLimitOrder
|
884
|
+
|
848
885
|
:param str symbol: unified symbol of the market to create an order in
|
849
886
|
:param str type: 'market' or 'limit'
|
850
887
|
:param str side: 'buy' or 'sell'
|
851
888
|
:param float amount: how much of currency you want to trade in units of base currency
|
852
|
-
:param float [price]: the price at which the order is to be
|
889
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
853
890
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
854
891
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
855
892
|
"""
|
856
893
|
await self.load_markets()
|
857
894
|
market = self.market(symbol)
|
858
|
-
request = {
|
895
|
+
request: dict = {
|
859
896
|
'pair': market['id'],
|
860
897
|
}
|
861
898
|
response = None
|
@@ -880,17 +917,27 @@ class luno(Exchange, ImplicitAPI):
|
|
880
917
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
881
918
|
"""
|
882
919
|
cancels an open order
|
883
|
-
|
920
|
+
|
921
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
|
922
|
+
|
884
923
|
:param str id: order id
|
885
924
|
:param str symbol: unified symbol of the market the order was made in
|
886
925
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
887
926
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
888
927
|
"""
|
889
928
|
await self.load_markets()
|
890
|
-
request = {
|
929
|
+
request: dict = {
|
891
930
|
'order_id': id,
|
892
931
|
}
|
893
|
-
|
932
|
+
response = await self.privatePostStoporder(self.extend(request, params))
|
933
|
+
#
|
934
|
+
# {
|
935
|
+
# "success": True
|
936
|
+
# }
|
937
|
+
#
|
938
|
+
return self.safe_order({
|
939
|
+
'info': response,
|
940
|
+
})
|
894
941
|
|
895
942
|
async def fetch_ledger_by_entries(self, code: Str = None, entry=None, limit=None, params={}):
|
896
943
|
# by default without entry number or limit number, return most recent entry
|
@@ -899,21 +946,23 @@ class luno(Exchange, ImplicitAPI):
|
|
899
946
|
if limit is None:
|
900
947
|
limit = 1
|
901
948
|
since = None
|
902
|
-
request = {
|
949
|
+
request: dict = {
|
903
950
|
'min_row': entry,
|
904
951
|
'max_row': self.sum(entry, limit),
|
905
952
|
}
|
906
953
|
return await self.fetch_ledger(code, since, limit, self.extend(request, params))
|
907
954
|
|
908
|
-
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
955
|
+
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
909
956
|
"""
|
910
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
911
|
-
|
912
|
-
|
957
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
958
|
+
|
959
|
+
https://www.luno.com/en/developers/api#tag/Accounts/operation/ListTransactions
|
960
|
+
|
961
|
+
:param str [code]: unified currency code, default is None
|
913
962
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
914
|
-
:param int [limit]: max number of ledger
|
963
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
915
964
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
916
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
965
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
917
966
|
"""
|
918
967
|
await self.load_markets()
|
919
968
|
await self.load_accounts()
|
@@ -942,7 +991,7 @@ class luno(Exchange, ImplicitAPI):
|
|
942
991
|
max_row = min_row + limit
|
943
992
|
if max_row - min_row > 1000:
|
944
993
|
raise ExchangeError(self.id + " fetchLedger() requires the params 'max_row' - 'min_row' <= 1000")
|
945
|
-
request = {
|
994
|
+
request: dict = {
|
946
995
|
'id': id,
|
947
996
|
'min_row': min_row,
|
948
997
|
'max_row': max_row,
|
@@ -953,7 +1002,7 @@ class luno(Exchange, ImplicitAPI):
|
|
953
1002
|
|
954
1003
|
def parse_ledger_comment(self, comment):
|
955
1004
|
words = comment.split(' ')
|
956
|
-
types = {
|
1005
|
+
types: dict = {
|
957
1006
|
'Withdrawal': 'fee',
|
958
1007
|
'Trading': 'fee',
|
959
1008
|
'Payment': 'transaction',
|
@@ -980,13 +1029,14 @@ class luno(Exchange, ImplicitAPI):
|
|
980
1029
|
'referenceId': referenceId,
|
981
1030
|
}
|
982
1031
|
|
983
|
-
def parse_ledger_entry(self, entry, currency: Currency = None):
|
1032
|
+
def parse_ledger_entry(self, entry, currency: Currency = None) -> LedgerEntry:
|
984
1033
|
# details = self.safe_value(entry, 'details', {})
|
985
1034
|
id = self.safe_string(entry, 'row_index')
|
986
1035
|
account_id = self.safe_string(entry, 'account_id')
|
987
1036
|
timestamp = self.safe_integer(entry, 'timestamp')
|
988
1037
|
currencyId = self.safe_string(entry, 'currency')
|
989
1038
|
code = self.safe_currency_code(currencyId, currency)
|
1039
|
+
currency = self.safe_currency(currencyId, currency)
|
990
1040
|
available_delta = self.safe_string(entry, 'available_delta')
|
991
1041
|
balance_delta = self.safe_string(entry, 'balance_delta')
|
992
1042
|
after = self.safe_string(entry, 'balance')
|
@@ -1012,7 +1062,8 @@ class luno(Exchange, ImplicitAPI):
|
|
1012
1062
|
direction = 'in'
|
1013
1063
|
elif Precise.string_lt(balance_delta, '0') or Precise.string_lt(available_delta, '0'):
|
1014
1064
|
direction = 'out'
|
1015
|
-
return {
|
1065
|
+
return self.safe_ledger_entry({
|
1066
|
+
'info': entry,
|
1016
1067
|
'id': id,
|
1017
1068
|
'direction': direction,
|
1018
1069
|
'account': account_id,
|
@@ -1020,15 +1071,14 @@ class luno(Exchange, ImplicitAPI):
|
|
1020
1071
|
'referenceAccount': None,
|
1021
1072
|
'type': type,
|
1022
1073
|
'currency': code,
|
1023
|
-
'amount': self.
|
1074
|
+
'amount': self.parse_to_numeric(amount),
|
1024
1075
|
'timestamp': timestamp,
|
1025
1076
|
'datetime': self.iso8601(timestamp),
|
1026
|
-
'before': self.
|
1027
|
-
'after': self.
|
1077
|
+
'before': self.parse_to_numeric(before),
|
1078
|
+
'after': self.parse_to_numeric(after),
|
1028
1079
|
'status': status,
|
1029
1080
|
'fee': None,
|
1030
|
-
|
1031
|
-
}
|
1081
|
+
}, currency)
|
1032
1082
|
|
1033
1083
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
1034
1084
|
url = self.urls['api'][api] + '/' + self.version + '/' + self.implode_params(path, params)
|
@@ -1043,7 +1093,7 @@ class luno(Exchange, ImplicitAPI):
|
|
1043
1093
|
}
|
1044
1094
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1045
1095
|
|
1046
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1096
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1047
1097
|
if response is None:
|
1048
1098
|
return None
|
1049
1099
|
error = self.safe_value(response, 'error')
|