ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3205 -937
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +223 -97
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +143 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/luno.py
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
from ccxt.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
|
},
|
@@ -178,12 +183,87 @@ class luno(Exchange, ImplicitAPI):
|
|
178
183
|
},
|
179
184
|
},
|
180
185
|
'precisionMode': TICK_SIZE,
|
186
|
+
'features': {
|
187
|
+
'spot': {
|
188
|
+
'sandbox': False,
|
189
|
+
'createOrder': {
|
190
|
+
'marginMode': False,
|
191
|
+
'triggerPrice': True, # todo
|
192
|
+
'triggerPriceType': None,
|
193
|
+
'triggerDirection': True, # todo
|
194
|
+
'stopLossPrice': False, # todo
|
195
|
+
'takeProfitPrice': False, # todo
|
196
|
+
'attachedStopLossTakeProfit': None,
|
197
|
+
'timeInForce': {
|
198
|
+
'IOC': True,
|
199
|
+
'FOK': True,
|
200
|
+
'PO': True,
|
201
|
+
'GTD': False,
|
202
|
+
},
|
203
|
+
'hedged': False,
|
204
|
+
'trailing': False,
|
205
|
+
'leverage': False,
|
206
|
+
'marketBuyByCost': True,
|
207
|
+
'marketBuyRequiresPrice': False,
|
208
|
+
'selfTradePrevention': False,
|
209
|
+
'iceberg': False,
|
210
|
+
},
|
211
|
+
'createOrders': None,
|
212
|
+
'fetchMyTrades': {
|
213
|
+
'marginMode': False,
|
214
|
+
'limit': 1000,
|
215
|
+
'daysBack': 100000, # todo
|
216
|
+
'untilDays': 100000, # todo
|
217
|
+
},
|
218
|
+
'fetchOrder': {
|
219
|
+
'marginMode': False,
|
220
|
+
'trigger': False,
|
221
|
+
'trailing': False,
|
222
|
+
},
|
223
|
+
'fetchOpenOrders': {
|
224
|
+
'marginMode': False,
|
225
|
+
'limit': 1000,
|
226
|
+
'trigger': False,
|
227
|
+
'trailing': False,
|
228
|
+
},
|
229
|
+
'fetchOrders': {
|
230
|
+
'marginMode': False,
|
231
|
+
'limit': 1000,
|
232
|
+
'daysBack': 100000,
|
233
|
+
'untilDays': None,
|
234
|
+
'trigger': False,
|
235
|
+
'trailing': False,
|
236
|
+
},
|
237
|
+
'fetchClosedOrders': {
|
238
|
+
'marginMode': False,
|
239
|
+
'limit': 1000,
|
240
|
+
'daysBack': 100000,
|
241
|
+
'daysBackCanceled': 1,
|
242
|
+
'untilDays': None,
|
243
|
+
'trigger': False,
|
244
|
+
'trailing': False,
|
245
|
+
},
|
246
|
+
'fetchOHLCV': {
|
247
|
+
'limit': None,
|
248
|
+
},
|
249
|
+
},
|
250
|
+
'swap': {
|
251
|
+
'linear': None,
|
252
|
+
'inverse': None,
|
253
|
+
},
|
254
|
+
'future': {
|
255
|
+
'linear': None,
|
256
|
+
'inverse': None,
|
257
|
+
},
|
258
|
+
},
|
181
259
|
})
|
182
260
|
|
183
|
-
def fetch_markets(self, params={}):
|
261
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
184
262
|
"""
|
185
263
|
retrieves data on all markets for luno
|
186
|
-
|
264
|
+
|
265
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/Markets
|
266
|
+
|
187
267
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
188
268
|
:returns dict[]: an array of objects representing market data
|
189
269
|
"""
|
@@ -271,7 +351,9 @@ class luno(Exchange, ImplicitAPI):
|
|
271
351
|
def fetch_accounts(self, params={}) -> List[Account]:
|
272
352
|
"""
|
273
353
|
fetch all the accounts associated with a profile
|
274
|
-
|
354
|
+
|
355
|
+
https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
|
356
|
+
|
275
357
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
276
358
|
:returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
|
277
359
|
"""
|
@@ -293,7 +375,7 @@ class luno(Exchange, ImplicitAPI):
|
|
293
375
|
|
294
376
|
def parse_balance(self, response) -> Balances:
|
295
377
|
wallets = self.safe_value(response, 'balance', [])
|
296
|
-
result = {
|
378
|
+
result: dict = {
|
297
379
|
'info': response,
|
298
380
|
'timestamp': None,
|
299
381
|
'datetime': None,
|
@@ -320,7 +402,9 @@ class luno(Exchange, ImplicitAPI):
|
|
320
402
|
def fetch_balance(self, params={}) -> Balances:
|
321
403
|
"""
|
322
404
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
323
|
-
|
405
|
+
|
406
|
+
https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
|
407
|
+
|
324
408
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
325
409
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
326
410
|
"""
|
@@ -341,8 +425,10 @@ class luno(Exchange, ImplicitAPI):
|
|
341
425
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
342
426
|
"""
|
343
427
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
344
|
-
|
345
|
-
|
428
|
+
|
429
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBookFull
|
430
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBook
|
431
|
+
|
346
432
|
:param str symbol: unified symbol of the market to fetch the order book for
|
347
433
|
:param int [limit]: the maximum amount of order book entries to return
|
348
434
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -350,7 +436,7 @@ class luno(Exchange, ImplicitAPI):
|
|
350
436
|
"""
|
351
437
|
self.load_markets()
|
352
438
|
market = self.market(symbol)
|
353
|
-
request = {
|
439
|
+
request: dict = {
|
354
440
|
'pair': market['id'],
|
355
441
|
}
|
356
442
|
response = None
|
@@ -361,14 +447,14 @@ class luno(Exchange, ImplicitAPI):
|
|
361
447
|
timestamp = self.safe_integer(response, 'timestamp')
|
362
448
|
return self.parse_order_book(response, market['symbol'], timestamp, 'bids', 'asks', 'price', 'volume')
|
363
449
|
|
364
|
-
def parse_order_status(self, status):
|
365
|
-
statuses = {
|
450
|
+
def parse_order_status(self, status: Str):
|
451
|
+
statuses: dict = {
|
366
452
|
# todo add other statuses
|
367
453
|
'PENDING': 'open',
|
368
454
|
}
|
369
455
|
return self.safe_string(statuses, status, status)
|
370
456
|
|
371
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
457
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
372
458
|
#
|
373
459
|
# {
|
374
460
|
# "base": "string",
|
@@ -428,7 +514,6 @@ class luno(Exchange, ImplicitAPI):
|
|
428
514
|
'postOnly': None,
|
429
515
|
'side': side,
|
430
516
|
'price': price,
|
431
|
-
'stopPrice': None,
|
432
517
|
'triggerPrice': None,
|
433
518
|
'amount': amount,
|
434
519
|
'filled': filled,
|
@@ -443,13 +528,16 @@ class luno(Exchange, ImplicitAPI):
|
|
443
528
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
444
529
|
"""
|
445
530
|
fetches information on an order made by the user
|
446
|
-
|
531
|
+
|
532
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
|
533
|
+
|
534
|
+
:param str id: order id
|
447
535
|
:param str symbol: not used by luno fetchOrder
|
448
536
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
449
537
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
450
538
|
"""
|
451
539
|
self.load_markets()
|
452
|
-
request = {
|
540
|
+
request: dict = {
|
453
541
|
'id': id,
|
454
542
|
}
|
455
543
|
response = self.privateGetOrdersId(self.extend(request, params))
|
@@ -457,7 +545,7 @@ class luno(Exchange, ImplicitAPI):
|
|
457
545
|
|
458
546
|
def fetch_orders_by_state(self, state=None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
459
547
|
self.load_markets()
|
460
|
-
request = {}
|
548
|
+
request: dict = {}
|
461
549
|
market = None
|
462
550
|
if state is not None:
|
463
551
|
request['state'] = state
|
@@ -465,13 +553,15 @@ class luno(Exchange, ImplicitAPI):
|
|
465
553
|
market = self.market(symbol)
|
466
554
|
request['pair'] = market['id']
|
467
555
|
response = self.privateGetListorders(self.extend(request, params))
|
468
|
-
orders = self.
|
556
|
+
orders = self.safe_list(response, 'orders', [])
|
469
557
|
return self.parse_orders(orders, market, since, limit)
|
470
558
|
|
471
559
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
472
560
|
"""
|
473
561
|
fetches information on multiple orders made by the user
|
474
|
-
|
562
|
+
|
563
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
|
564
|
+
|
475
565
|
:param str symbol: unified market symbol of the market orders were made in
|
476
566
|
:param int [since]: the earliest time in ms to fetch orders for
|
477
567
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -483,7 +573,9 @@ class luno(Exchange, ImplicitAPI):
|
|
483
573
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
484
574
|
"""
|
485
575
|
fetch all unfilled currently open orders
|
486
|
-
|
576
|
+
|
577
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
|
578
|
+
|
487
579
|
:param str symbol: unified market symbol
|
488
580
|
:param int [since]: the earliest time in ms to fetch open orders for
|
489
581
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -495,7 +587,9 @@ class luno(Exchange, ImplicitAPI):
|
|
495
587
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
496
588
|
"""
|
497
589
|
fetches information on multiple closed orders made by the user
|
498
|
-
|
590
|
+
|
591
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
|
592
|
+
|
499
593
|
:param str symbol: unified market symbol of the market orders were made in
|
500
594
|
:param int [since]: the earliest time in ms to fetch orders for
|
501
595
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -504,7 +598,7 @@ class luno(Exchange, ImplicitAPI):
|
|
504
598
|
"""
|
505
599
|
return self.fetch_orders_by_state('COMPLETE', symbol, since, limit, params)
|
506
600
|
|
507
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
601
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
508
602
|
# {
|
509
603
|
# "pair":"XBTAUD",
|
510
604
|
# "timestamp":1642201439301,
|
@@ -544,7 +638,9 @@ class luno(Exchange, ImplicitAPI):
|
|
544
638
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
545
639
|
"""
|
546
640
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
547
|
-
|
641
|
+
|
642
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetTickers
|
643
|
+
|
548
644
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
549
645
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
550
646
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -554,7 +650,7 @@ class luno(Exchange, ImplicitAPI):
|
|
554
650
|
response = self.publicGetTickers(params)
|
555
651
|
tickers = self.index_by(response['tickers'], 'pair')
|
556
652
|
ids = list(tickers.keys())
|
557
|
-
result = {}
|
653
|
+
result: dict = {}
|
558
654
|
for i in range(0, len(ids)):
|
559
655
|
id = ids[i]
|
560
656
|
market = self.safe_market(id)
|
@@ -566,14 +662,16 @@ class luno(Exchange, ImplicitAPI):
|
|
566
662
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
567
663
|
"""
|
568
664
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
569
|
-
|
665
|
+
|
666
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetTicker
|
667
|
+
|
570
668
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
571
669
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
572
670
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
573
671
|
"""
|
574
672
|
self.load_markets()
|
575
673
|
market = self.market(symbol)
|
576
|
-
request = {
|
674
|
+
request: dict = {
|
577
675
|
'pair': market['id'],
|
578
676
|
}
|
579
677
|
response = self.publicGetTicker(self.extend(request, params))
|
@@ -588,7 +686,7 @@ class luno(Exchange, ImplicitAPI):
|
|
588
686
|
# }
|
589
687
|
return self.parse_ticker(response, market)
|
590
688
|
|
591
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
689
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
592
690
|
#
|
593
691
|
# fetchTrades(public)
|
594
692
|
#
|
@@ -675,7 +773,9 @@ class luno(Exchange, ImplicitAPI):
|
|
675
773
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
676
774
|
"""
|
677
775
|
get the list of most recent trades for a particular symbol
|
678
|
-
|
776
|
+
|
777
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
|
778
|
+
|
679
779
|
:param str symbol: unified symbol of the market to fetch trades for
|
680
780
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
681
781
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -684,7 +784,7 @@ class luno(Exchange, ImplicitAPI):
|
|
684
784
|
"""
|
685
785
|
self.load_markets()
|
686
786
|
market = self.market(symbol)
|
687
|
-
request = {
|
787
|
+
request: dict = {
|
688
788
|
'pair': market['id'],
|
689
789
|
}
|
690
790
|
if since is not None:
|
@@ -703,12 +803,14 @@ class luno(Exchange, ImplicitAPI):
|
|
703
803
|
# ]
|
704
804
|
# }
|
705
805
|
#
|
706
|
-
trades = self.
|
806
|
+
trades = self.safe_list(response, 'trades', [])
|
707
807
|
return self.parse_trades(trades, market, since, limit)
|
708
808
|
|
709
809
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
|
710
810
|
"""
|
711
|
-
|
811
|
+
|
812
|
+
https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
|
813
|
+
|
712
814
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
713
815
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
714
816
|
:param str timeframe: the length of time each candle represents
|
@@ -719,7 +821,7 @@ class luno(Exchange, ImplicitAPI):
|
|
719
821
|
"""
|
720
822
|
self.load_markets()
|
721
823
|
market = self.market(symbol)
|
722
|
-
request = {
|
824
|
+
request: dict = {
|
723
825
|
'duration': self.safe_value(self.timeframes, timeframe, timeframe),
|
724
826
|
'pair': market['id'],
|
725
827
|
}
|
@@ -745,7 +847,7 @@ class luno(Exchange, ImplicitAPI):
|
|
745
847
|
# "pair": "XBTEUR"
|
746
848
|
# }
|
747
849
|
#
|
748
|
-
ohlcvs = self.
|
850
|
+
ohlcvs = self.safe_list(response, 'candles', [])
|
749
851
|
return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
|
750
852
|
|
751
853
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -769,7 +871,9 @@ class luno(Exchange, ImplicitAPI):
|
|
769
871
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
770
872
|
"""
|
771
873
|
fetch all trades made by the user
|
772
|
-
|
874
|
+
|
875
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
|
876
|
+
|
773
877
|
:param str symbol: unified market symbol
|
774
878
|
:param int [since]: the earliest time in ms to fetch trades for
|
775
879
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -780,7 +884,7 @@ class luno(Exchange, ImplicitAPI):
|
|
780
884
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
781
885
|
self.load_markets()
|
782
886
|
market = self.market(symbol)
|
783
|
-
request = {
|
887
|
+
request: dict = {
|
784
888
|
'pair': market['id'],
|
785
889
|
}
|
786
890
|
if since is not None:
|
@@ -809,20 +913,22 @@ class luno(Exchange, ImplicitAPI):
|
|
809
913
|
# ]
|
810
914
|
# }
|
811
915
|
#
|
812
|
-
trades = self.
|
916
|
+
trades = self.safe_list(response, 'trades', [])
|
813
917
|
return self.parse_trades(trades, market, since, limit)
|
814
918
|
|
815
|
-
def fetch_trading_fee(self, symbol: str, params={}):
|
919
|
+
def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
816
920
|
"""
|
817
921
|
fetch the trading fees for a market
|
818
|
-
|
922
|
+
|
923
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
|
924
|
+
|
819
925
|
:param str symbol: unified market symbol
|
820
926
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
821
927
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
822
928
|
"""
|
823
929
|
self.load_markets()
|
824
930
|
market = self.market(symbol)
|
825
|
-
request = {
|
931
|
+
request: dict = {
|
826
932
|
'pair': market['id'],
|
827
933
|
}
|
828
934
|
response = self.privateGetFeeInfo(self.extend(request, params))
|
@@ -838,24 +944,28 @@ class luno(Exchange, ImplicitAPI):
|
|
838
944
|
'symbol': symbol,
|
839
945
|
'maker': self.safe_number(response, 'maker_fee'),
|
840
946
|
'taker': self.safe_number(response, 'taker_fee'),
|
947
|
+
'percentage': None,
|
948
|
+
'tierBased': None,
|
841
949
|
}
|
842
950
|
|
843
951
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
844
952
|
"""
|
845
953
|
create a trade order
|
846
|
-
|
847
|
-
|
954
|
+
|
955
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/PostMarketOrder
|
956
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/PostLimitOrder
|
957
|
+
|
848
958
|
:param str symbol: unified symbol of the market to create an order in
|
849
959
|
:param str type: 'market' or 'limit'
|
850
960
|
:param str side: 'buy' or 'sell'
|
851
961
|
: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
|
962
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
853
963
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
854
964
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
855
965
|
"""
|
856
966
|
self.load_markets()
|
857
967
|
market = self.market(symbol)
|
858
|
-
request = {
|
968
|
+
request: dict = {
|
859
969
|
'pair': market['id'],
|
860
970
|
}
|
861
971
|
response = None
|
@@ -880,17 +990,27 @@ class luno(Exchange, ImplicitAPI):
|
|
880
990
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
881
991
|
"""
|
882
992
|
cancels an open order
|
883
|
-
|
993
|
+
|
994
|
+
https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
|
995
|
+
|
884
996
|
:param str id: order id
|
885
997
|
:param str symbol: unified symbol of the market the order was made in
|
886
998
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
887
999
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
888
1000
|
"""
|
889
1001
|
self.load_markets()
|
890
|
-
request = {
|
1002
|
+
request: dict = {
|
891
1003
|
'order_id': id,
|
892
1004
|
}
|
893
|
-
|
1005
|
+
response = self.privatePostStoporder(self.extend(request, params))
|
1006
|
+
#
|
1007
|
+
# {
|
1008
|
+
# "success": True
|
1009
|
+
# }
|
1010
|
+
#
|
1011
|
+
return self.safe_order({
|
1012
|
+
'info': response,
|
1013
|
+
})
|
894
1014
|
|
895
1015
|
def fetch_ledger_by_entries(self, code: Str = None, entry=None, limit=None, params={}):
|
896
1016
|
# by default without entry number or limit number, return most recent entry
|
@@ -899,21 +1019,23 @@ class luno(Exchange, ImplicitAPI):
|
|
899
1019
|
if limit is None:
|
900
1020
|
limit = 1
|
901
1021
|
since = None
|
902
|
-
request = {
|
1022
|
+
request: dict = {
|
903
1023
|
'min_row': entry,
|
904
1024
|
'max_row': self.sum(entry, limit),
|
905
1025
|
}
|
906
1026
|
return self.fetch_ledger(code, since, limit, self.extend(request, params))
|
907
1027
|
|
908
|
-
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
1028
|
+
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
909
1029
|
"""
|
910
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
911
|
-
|
912
|
-
|
1030
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
1031
|
+
|
1032
|
+
https://www.luno.com/en/developers/api#tag/Accounts/operation/ListTransactions
|
1033
|
+
|
1034
|
+
:param str [code]: unified currency code, default is None
|
913
1035
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
914
|
-
:param int [limit]: max number of ledger
|
1036
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
915
1037
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
916
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
1038
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
917
1039
|
"""
|
918
1040
|
self.load_markets()
|
919
1041
|
self.load_accounts()
|
@@ -942,7 +1064,7 @@ class luno(Exchange, ImplicitAPI):
|
|
942
1064
|
max_row = min_row + limit
|
943
1065
|
if max_row - min_row > 1000:
|
944
1066
|
raise ExchangeError(self.id + " fetchLedger() requires the params 'max_row' - 'min_row' <= 1000")
|
945
|
-
request = {
|
1067
|
+
request: dict = {
|
946
1068
|
'id': id,
|
947
1069
|
'min_row': min_row,
|
948
1070
|
'max_row': max_row,
|
@@ -953,7 +1075,7 @@ class luno(Exchange, ImplicitAPI):
|
|
953
1075
|
|
954
1076
|
def parse_ledger_comment(self, comment):
|
955
1077
|
words = comment.split(' ')
|
956
|
-
types = {
|
1078
|
+
types: dict = {
|
957
1079
|
'Withdrawal': 'fee',
|
958
1080
|
'Trading': 'fee',
|
959
1081
|
'Payment': 'transaction',
|
@@ -980,13 +1102,14 @@ class luno(Exchange, ImplicitAPI):
|
|
980
1102
|
'referenceId': referenceId,
|
981
1103
|
}
|
982
1104
|
|
983
|
-
def parse_ledger_entry(self, entry, currency: Currency = None):
|
1105
|
+
def parse_ledger_entry(self, entry, currency: Currency = None) -> LedgerEntry:
|
984
1106
|
# details = self.safe_value(entry, 'details', {})
|
985
1107
|
id = self.safe_string(entry, 'row_index')
|
986
1108
|
account_id = self.safe_string(entry, 'account_id')
|
987
1109
|
timestamp = self.safe_integer(entry, 'timestamp')
|
988
1110
|
currencyId = self.safe_string(entry, 'currency')
|
989
1111
|
code = self.safe_currency_code(currencyId, currency)
|
1112
|
+
currency = self.safe_currency(currencyId, currency)
|
990
1113
|
available_delta = self.safe_string(entry, 'available_delta')
|
991
1114
|
balance_delta = self.safe_string(entry, 'balance_delta')
|
992
1115
|
after = self.safe_string(entry, 'balance')
|
@@ -1012,7 +1135,8 @@ class luno(Exchange, ImplicitAPI):
|
|
1012
1135
|
direction = 'in'
|
1013
1136
|
elif Precise.string_lt(balance_delta, '0') or Precise.string_lt(available_delta, '0'):
|
1014
1137
|
direction = 'out'
|
1015
|
-
return {
|
1138
|
+
return self.safe_ledger_entry({
|
1139
|
+
'info': entry,
|
1016
1140
|
'id': id,
|
1017
1141
|
'direction': direction,
|
1018
1142
|
'account': account_id,
|
@@ -1020,15 +1144,14 @@ class luno(Exchange, ImplicitAPI):
|
|
1020
1144
|
'referenceAccount': None,
|
1021
1145
|
'type': type,
|
1022
1146
|
'currency': code,
|
1023
|
-
'amount': self.
|
1147
|
+
'amount': self.parse_to_numeric(amount),
|
1024
1148
|
'timestamp': timestamp,
|
1025
1149
|
'datetime': self.iso8601(timestamp),
|
1026
|
-
'before': self.
|
1027
|
-
'after': self.
|
1150
|
+
'before': self.parse_to_numeric(before),
|
1151
|
+
'after': self.parse_to_numeric(after),
|
1028
1152
|
'status': status,
|
1029
1153
|
'fee': None,
|
1030
|
-
|
1031
|
-
}
|
1154
|
+
}, currency)
|
1032
1155
|
|
1033
1156
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
1034
1157
|
url = self.urls['api'][api] + '/' + self.version + '/' + self.implode_params(path, params)
|
@@ -1043,7 +1166,7 @@ class luno(Exchange, ImplicitAPI):
|
|
1043
1166
|
}
|
1044
1167
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1045
1168
|
|
1046
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1169
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1047
1170
|
if response is None:
|
1048
1171
|
return None
|
1049
1172
|
error = self.safe_value(response, 'error')
|