ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3104 -880
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1513 -563
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +206 -89
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +557 -323
- ccxt/async_support/digifinex.py +340 -223
- ccxt/async_support/ellipx.py +1826 -0
- ccxt/async_support/exmo.py +259 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +334 -178
- ccxt/async_support/hollaex.py +134 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +105 -56
- ccxt/async_support/hyperliquid.py +1633 -268
- ccxt/async_support/idex.py +148 -95
- ccxt/async_support/independentreserve.py +236 -31
- ccxt/async_support/indodax.py +165 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +138 -106
- ccxt/async_support/latoken.py +135 -79
- ccxt/async_support/lbank.py +290 -113
- ccxt/async_support/luno.py +112 -62
- ccxt/async_support/lykke.py +104 -55
- ccxt/async_support/mercado.py +36 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +43 -0
- ccxt/async_support/ndax.py +163 -82
- ccxt/async_support/novadax.py +121 -75
- ccxt/async_support/oceanex.py +175 -59
- ccxt/async_support/okcoin.py +222 -163
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +132 -414
- ccxt/async_support/oxfun.py +2832 -0
- ccxt/async_support/p2b.py +79 -51
- ccxt/async_support/paradex.py +2017 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3104 -880
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1513 -563
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +206 -89
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +557 -323
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +334 -178
- ccxt/hollaex.py +134 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +105 -56
- ccxt/hyperliquid.py +1632 -268
- ccxt/idex.py +148 -95
- ccxt/independentreserve.py +235 -31
- ccxt/indodax.py +165 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +138 -106
- ccxt/latoken.py +135 -79
- ccxt/lbank.py +290 -113
- ccxt/luno.py +112 -62
- ccxt/lykke.py +104 -55
- ccxt/mercado.py +36 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +43 -0
- ccxt/ndax.py +163 -82
- ccxt/novadax.py +121 -75
- ccxt/oceanex.py +175 -59
- ccxt/okcoin.py +222 -163
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +132 -414
- ccxt/oxfun.py +2831 -0
- ccxt/p2b.py +79 -51
- ccxt/paradex.py +2017 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +138 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.48.dist-info/METADATA +646 -0
- ccxt-4.4.48.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/coinmetro.py
CHANGED
@@ -5,7 +5,7 @@
|
|
5
5
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.coinmetro import ImplicitAPI
|
8
|
-
from ccxt.base.types import Balances, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
|
8
|
+
from ccxt.base.types import Balances, Currencies, Currency, IndexType, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
|
9
9
|
from typing import List
|
10
10
|
from ccxt.base.errors import ExchangeError
|
11
11
|
from ccxt.base.errors import PermissionDenied
|
@@ -16,7 +16,7 @@ from ccxt.base.errors import InsufficientFunds
|
|
16
16
|
from ccxt.base.errors import InvalidOrder
|
17
17
|
from ccxt.base.errors import OrderNotFound
|
18
18
|
from ccxt.base.errors import RateLimitExceeded
|
19
|
-
from ccxt.base.decimal_to_precision import
|
19
|
+
from ccxt.base.decimal_to_precision import TICK_SIZE
|
20
20
|
from ccxt.base.precise import Precise
|
21
21
|
|
22
22
|
|
@@ -122,6 +122,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
122
122
|
'reduceMargin': False,
|
123
123
|
'repayCrossMargin': False,
|
124
124
|
'repayIsolatedMargin': False,
|
125
|
+
'sandbox': True,
|
125
126
|
'setLeverage': False,
|
126
127
|
'setMargin': False,
|
127
128
|
'setMarginMode': False,
|
@@ -171,6 +172,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
171
172
|
'private': {
|
172
173
|
'get': {
|
173
174
|
'users/balances': 1,
|
175
|
+
'users/wallets': 1,
|
174
176
|
'users/wallets/history/{since}': 1.67,
|
175
177
|
'exchange/orders/status/{orderID}': 1,
|
176
178
|
'exchange/orders/active': 1,
|
@@ -213,12 +215,80 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
213
215
|
'maker': self.parse_number('0'),
|
214
216
|
},
|
215
217
|
},
|
216
|
-
'precisionMode':
|
218
|
+
'precisionMode': TICK_SIZE,
|
217
219
|
# exchange-specific options
|
218
220
|
'options': {
|
219
221
|
'currenciesByIdForParseMarket': None,
|
220
222
|
'currencyIdsListForParseMarket': None,
|
221
223
|
},
|
224
|
+
'features': {
|
225
|
+
'spot': {
|
226
|
+
'sandbox': True,
|
227
|
+
'createOrder': {
|
228
|
+
'marginMode': True, # todo implement
|
229
|
+
'triggerPrice': True,
|
230
|
+
'triggerPriceType': None,
|
231
|
+
'triggerDirection': False,
|
232
|
+
'stopLossPrice': False, # todo
|
233
|
+
'takeProfitPrice': False, # todo
|
234
|
+
'attachedStopLossTakeProfit': {
|
235
|
+
'triggerPriceType': None,
|
236
|
+
'price': False,
|
237
|
+
},
|
238
|
+
'timeInForce': {
|
239
|
+
'IOC': True,
|
240
|
+
'FOK': True,
|
241
|
+
'PO': False,
|
242
|
+
'GTD': True,
|
243
|
+
},
|
244
|
+
'hedged': False,
|
245
|
+
'trailing': False,
|
246
|
+
'leverage': False,
|
247
|
+
'marketBuyByCost': True,
|
248
|
+
'marketBuyRequiresPrice': False,
|
249
|
+
'selfTradePrevention': False,
|
250
|
+
'iceberg': True,
|
251
|
+
},
|
252
|
+
'createOrders': None,
|
253
|
+
'fetchMyTrades': {
|
254
|
+
'marginMode': False,
|
255
|
+
'limit': None,
|
256
|
+
'daysBack': 100000,
|
257
|
+
'untilDays': None,
|
258
|
+
},
|
259
|
+
'fetchOrder': {
|
260
|
+
'marginMode': False,
|
261
|
+
'trigger': False,
|
262
|
+
'trailing': False,
|
263
|
+
},
|
264
|
+
'fetchOpenOrders': {
|
265
|
+
'marginMode': False,
|
266
|
+
'limit': None,
|
267
|
+
'trigger': False,
|
268
|
+
'trailing': False,
|
269
|
+
},
|
270
|
+
'fetchOrders': {
|
271
|
+
'marginMode': False,
|
272
|
+
'limit': None,
|
273
|
+
'daysBack': 100000,
|
274
|
+
'untilDays': None,
|
275
|
+
'trigger': False,
|
276
|
+
'trailing': False,
|
277
|
+
},
|
278
|
+
'fetchClosedOrders': None,
|
279
|
+
'fetchOHLCV': {
|
280
|
+
'limit': 1000,
|
281
|
+
},
|
282
|
+
},
|
283
|
+
'swap': {
|
284
|
+
'linear': None,
|
285
|
+
'inverse': None,
|
286
|
+
},
|
287
|
+
'future': {
|
288
|
+
'linear': None,
|
289
|
+
'inverse': None,
|
290
|
+
},
|
291
|
+
},
|
222
292
|
'exceptions': {
|
223
293
|
# https://trade-docs.coinmetro.co/?javascript--nodejs#message-codes
|
224
294
|
'exact': {
|
@@ -256,10 +326,12 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
256
326
|
},
|
257
327
|
})
|
258
328
|
|
259
|
-
def fetch_currencies(self, params={}):
|
329
|
+
def fetch_currencies(self, params={}) -> Currencies:
|
260
330
|
"""
|
261
331
|
fetches all available currencies on an exchange
|
262
|
-
|
332
|
+
|
333
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#d5876d43-a3fe-4479-8c58-24d0f044edfb
|
334
|
+
|
263
335
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
264
336
|
:returns dict: an associative dictionary of currencies
|
265
337
|
"""
|
@@ -306,7 +378,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
306
378
|
# ...
|
307
379
|
# ]
|
308
380
|
#
|
309
|
-
result = {}
|
381
|
+
result: dict = {}
|
310
382
|
for i in range(0, len(response)):
|
311
383
|
currency = response[i]
|
312
384
|
id = self.safe_string(currency, 'symbol')
|
@@ -315,7 +387,6 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
315
387
|
deposit = self.safe_value(currency, 'canDeposit')
|
316
388
|
canTrade = self.safe_value(currency, 'canTrade')
|
317
389
|
active = withdraw if canTrade else True
|
318
|
-
precision = self.safe_integer(currency, 'digits')
|
319
390
|
minAmount = self.safe_number(currency, 'minQty')
|
320
391
|
result[code] = self.safe_currency_structure({
|
321
392
|
'id': id,
|
@@ -326,7 +397,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
326
397
|
'deposit': deposit,
|
327
398
|
'withdraw': withdraw,
|
328
399
|
'fee': None,
|
329
|
-
'precision':
|
400
|
+
'precision': self.parse_number(self.parse_precision(self.safe_string(currency, 'digits'))),
|
330
401
|
'limits': {
|
331
402
|
'amount': {'min': minAmount, 'max': None},
|
332
403
|
'withdraw': {'min': None, 'max': None},
|
@@ -339,10 +410,12 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
339
410
|
self.options['currencyIdsListForParseMarket'] = list(currenciesById.keys())
|
340
411
|
return result
|
341
412
|
|
342
|
-
def fetch_markets(self, params={}):
|
413
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
343
414
|
"""
|
344
415
|
retrieves data on all markets for coinmetro
|
345
|
-
|
416
|
+
|
417
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#9fd18008-338e-4863-b07d-722878a46832
|
418
|
+
|
346
419
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
347
420
|
:returns dict[]: an array of objects representing market data
|
348
421
|
"""
|
@@ -352,26 +425,21 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
352
425
|
#
|
353
426
|
# [
|
354
427
|
# {
|
355
|
-
# "pair": "
|
356
|
-
# "precision": 5,
|
357
|
-
# "margin": False
|
358
|
-
# },
|
359
|
-
# {
|
360
|
-
# "pair": "PERPUSD",
|
428
|
+
# "pair": "YFIEUR",
|
361
429
|
# "precision": 5,
|
362
430
|
# "margin": False
|
363
431
|
# },
|
364
432
|
# {
|
365
|
-
# "pair": "
|
366
|
-
# "precision":
|
367
|
-
# "margin":
|
433
|
+
# "pair": "BTCEUR",
|
434
|
+
# "precision": 2,
|
435
|
+
# "margin": True
|
368
436
|
# },
|
369
437
|
# ...
|
370
438
|
# ]
|
371
439
|
#
|
372
440
|
return self.parse_markets(response)
|
373
441
|
|
374
|
-
def parse_market(self, market) -> Market:
|
442
|
+
def parse_market(self, market: dict) -> Market:
|
375
443
|
id = self.safe_string(market, 'pair')
|
376
444
|
parsedMarketId = self.parse_market_id(id)
|
377
445
|
baseId = self.safe_string(parsedMarketId, 'baseId')
|
@@ -410,9 +478,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
410
478
|
'optionType': None,
|
411
479
|
'precision': {
|
412
480
|
'amount': basePrecisionAndLimits['precision'],
|
413
|
-
'price':
|
414
|
-
'base': basePrecisionAndLimits['precision'],
|
415
|
-
'quote': quotePrecisionAndLimits['precision'],
|
481
|
+
'price': self.parse_number(self.parse_precision(self.safe_string(market, 'precision'))),
|
416
482
|
},
|
417
483
|
'limits': {
|
418
484
|
'leverage': {
|
@@ -453,7 +519,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
453
519
|
baseId = restId
|
454
520
|
quoteId = currencyId
|
455
521
|
break
|
456
|
-
result = {
|
522
|
+
result: dict = {
|
457
523
|
'baseId': baseId,
|
458
524
|
'quoteId': quoteId,
|
459
525
|
}
|
@@ -462,12 +528,11 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
462
528
|
def parse_market_precision_and_limits(self, currencyId):
|
463
529
|
currencies = self.safe_value(self.options, 'currenciesByIdForParseMarket', {})
|
464
530
|
currency = self.safe_value(currencies, currencyId, {})
|
465
|
-
precision = self.safe_integer(currency, 'precision')
|
466
531
|
limits = self.safe_value(currency, 'limits', {})
|
467
532
|
amountLimits = self.safe_value(limits, 'amount', {})
|
468
533
|
minLimit = self.safe_number(amountLimits, 'min')
|
469
|
-
result = {
|
470
|
-
'precision': precision,
|
534
|
+
result: dict = {
|
535
|
+
'precision': self.safe_number(currency, 'precision'),
|
471
536
|
'minLimit': minLimit,
|
472
537
|
}
|
473
538
|
return result
|
@@ -475,7 +540,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
475
540
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
476
541
|
"""
|
477
542
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
478
|
-
|
543
|
+
|
544
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#13cfb5bc-7bfb-4847-85e1-e0f35dfb3573
|
545
|
+
|
479
546
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
480
547
|
:param str timeframe: the length of time each candle represents
|
481
548
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -486,7 +553,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
486
553
|
"""
|
487
554
|
self.load_markets()
|
488
555
|
market = self.market(symbol)
|
489
|
-
request = {
|
556
|
+
request: dict = {
|
490
557
|
'pair': market['id'],
|
491
558
|
'timeframe': self.safe_string(self.timeframes, timeframe, timeframe),
|
492
559
|
}
|
@@ -498,9 +565,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
498
565
|
until = self.sum(since, duration * (limit))
|
499
566
|
else:
|
500
567
|
request['from'] = ':from' # self endpoint doesn't accept empty from and to params(setting them into the value described in the documentation)
|
501
|
-
until = self.
|
568
|
+
until = self.safe_integer(params, 'until', until)
|
502
569
|
if until is not None:
|
503
|
-
params = self.omit(params, ['
|
570
|
+
params = self.omit(params, ['until'])
|
504
571
|
request['to'] = until
|
505
572
|
else:
|
506
573
|
request['to'] = ':to'
|
@@ -532,7 +599,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
532
599
|
# ]
|
533
600
|
# }
|
534
601
|
#
|
535
|
-
candleHistory = self.
|
602
|
+
candleHistory = self.safe_list(response, 'candleHistory', [])
|
536
603
|
return self.parse_ohlcvs(candleHistory, market, timeframe, since, limit)
|
537
604
|
|
538
605
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -548,7 +615,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
548
615
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
549
616
|
"""
|
550
617
|
get the list of most recent trades for a particular symbol
|
551
|
-
|
618
|
+
|
619
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#6ee5d698-06da-4570-8c84-914185e05065
|
620
|
+
|
552
621
|
:param str symbol: unified symbol of the market to fetch trades for
|
553
622
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
554
623
|
:param int [limit]: the maximum amount of trades to fetch(default 200, max 500)
|
@@ -557,7 +626,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
557
626
|
"""
|
558
627
|
self.load_markets()
|
559
628
|
market = self.market(symbol)
|
560
|
-
request = {
|
629
|
+
request: dict = {
|
561
630
|
'pair': market['id'],
|
562
631
|
}
|
563
632
|
if since is not None:
|
@@ -594,13 +663,15 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
594
663
|
# ]
|
595
664
|
# }
|
596
665
|
#
|
597
|
-
tickHistory = self.
|
666
|
+
tickHistory = self.safe_list(response, 'tickHistory', [])
|
598
667
|
return self.parse_trades(tickHistory, market, since, limit)
|
599
668
|
|
600
669
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
601
670
|
"""
|
602
671
|
fetch all trades made by the user
|
603
|
-
|
672
|
+
|
673
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#4d48ae69-8ee2-44d1-a268-71f84e557b7b
|
674
|
+
|
604
675
|
:param str symbol: unified market symbol
|
605
676
|
:param int [since]: the earliest time in ms to fetch trades for
|
606
677
|
:param int [limit]: the maximum number of trades structures to retrieve(default 500, max 1000)
|
@@ -611,7 +682,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
611
682
|
market = None
|
612
683
|
if symbol is not None:
|
613
684
|
market = self.market(symbol)
|
614
|
-
request = {}
|
685
|
+
request: dict = {}
|
615
686
|
if since is not None:
|
616
687
|
request['since'] = since
|
617
688
|
else:
|
@@ -634,7 +705,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
634
705
|
#
|
635
706
|
return self.parse_trades(response, market, since, limit)
|
636
707
|
|
637
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
708
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
638
709
|
#
|
639
710
|
# fetchTrades
|
640
711
|
# {
|
@@ -705,7 +776,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
705
776
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
706
777
|
"""
|
707
778
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
708
|
-
|
779
|
+
|
780
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#26ad80d7-8c46-41b5-9208-386f439a8b87
|
781
|
+
|
709
782
|
:param str symbol: unified symbol of the market to fetch the order book for
|
710
783
|
:param int [limit]: the maximum amount of order book entries to return(default 100, max 200)
|
711
784
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -713,7 +786,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
713
786
|
"""
|
714
787
|
self.load_markets()
|
715
788
|
market = self.market(symbol)
|
716
|
-
request = {
|
789
|
+
request: dict = {
|
717
790
|
'pair': market['id'],
|
718
791
|
}
|
719
792
|
response = self.publicGetExchangeBookPair(self.extend(request, params))
|
@@ -747,7 +820,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
747
820
|
book = self.safe_value(response, 'book', {})
|
748
821
|
rawBids = self.safe_value(book, 'bid', {})
|
749
822
|
rawAsks = self.safe_value(book, 'ask', {})
|
750
|
-
rawOrderbook = {
|
823
|
+
rawOrderbook: dict = {
|
751
824
|
'bids': rawBids,
|
752
825
|
'asks': rawAsks,
|
753
826
|
}
|
@@ -768,7 +841,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
768
841
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
769
842
|
"""
|
770
843
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
771
|
-
|
844
|
+
|
845
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#6ecd1cd1-f162-45a3-8b3b-de690332a485
|
846
|
+
|
772
847
|
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
773
848
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
774
849
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -825,7 +900,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
825
900
|
#
|
826
901
|
latestPrices = self.safe_value(response, 'latestPrices', [])
|
827
902
|
twentyFourHInfos = self.safe_value(response, '24hInfo', [])
|
828
|
-
tickersObject = {}
|
903
|
+
tickersObject: dict = {}
|
829
904
|
# merging info from two lists into one
|
830
905
|
for i in range(0, len(latestPrices)):
|
831
906
|
latestPrice = latestPrices[i]
|
@@ -844,17 +919,19 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
844
919
|
def fetch_bids_asks(self, symbols: Strings = None, params={}):
|
845
920
|
"""
|
846
921
|
fetches the bid and ask price and volume for multiple markets
|
847
|
-
|
922
|
+
|
923
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#6ecd1cd1-f162-45a3-8b3b-de690332a485
|
924
|
+
|
848
925
|
:param str[] [symbols]: unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
|
849
926
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
850
927
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
851
928
|
"""
|
852
929
|
self.load_markets()
|
853
930
|
response = self.publicGetExchangePrices(params)
|
854
|
-
latestPrices = self.
|
931
|
+
latestPrices = self.safe_list(response, 'latestPrices', [])
|
855
932
|
return self.parse_tickers(latestPrices, symbols)
|
856
933
|
|
857
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
934
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
858
935
|
#
|
859
936
|
# {
|
860
937
|
# "pair": "PERPUSD",
|
@@ -910,65 +987,68 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
910
987
|
def fetch_balance(self, params={}) -> Balances:
|
911
988
|
"""
|
912
989
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
913
|
-
|
990
|
+
|
991
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#741a1dcc-7307-40d0-acca-28d003d1506a
|
992
|
+
|
914
993
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
915
994
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
916
995
|
"""
|
917
996
|
self.load_markets()
|
918
|
-
response = self.
|
919
|
-
|
997
|
+
response = self.privateGetUsersWallets(params)
|
998
|
+
list = self.safe_list(response, 'list', [])
|
999
|
+
return self.parse_balance(list)
|
920
1000
|
|
921
|
-
def parse_balance(self,
|
1001
|
+
def parse_balance(self, balances) -> Balances:
|
922
1002
|
#
|
923
|
-
#
|
924
|
-
#
|
925
|
-
# "
|
926
|
-
# "
|
927
|
-
# "
|
928
|
-
#
|
929
|
-
#
|
930
|
-
# "
|
931
|
-
# "
|
932
|
-
# "
|
933
|
-
#
|
934
|
-
#
|
935
|
-
# "
|
936
|
-
# "
|
1003
|
+
# [
|
1004
|
+
# {
|
1005
|
+
# "xcmLocks": [],
|
1006
|
+
# "xcmLockAmounts": [],
|
1007
|
+
# "refList": [],
|
1008
|
+
# "balanceHistory": [],
|
1009
|
+
# "_id": "5fecd3c998e75c2e4d63f7c3",
|
1010
|
+
# "currency": "BTC",
|
1011
|
+
# "label": "BTC",
|
1012
|
+
# "userId": "5fecd3c97fbfed1521db23bd",
|
1013
|
+
# "__v": 0,
|
1014
|
+
# "balance": 0.5,
|
1015
|
+
# "createdAt": "2020-12-30T19:23:53.646Z",
|
1016
|
+
# "disabled": False,
|
1017
|
+
# "updatedAt": "2020-12-30T19:23:53.653Z",
|
1018
|
+
# "reserved": 0,
|
1019
|
+
# "id": "5fecd3c998e75c2e4d63f7c3"
|
937
1020
|
# },
|
938
|
-
#
|
939
|
-
#
|
940
|
-
# "EUR": 0,
|
941
|
-
# "BTC": 0
|
942
|
-
# }
|
943
|
-
# }
|
1021
|
+
# ...
|
1022
|
+
# ]
|
944
1023
|
#
|
945
|
-
result = {
|
946
|
-
'info':
|
1024
|
+
result: dict = {
|
1025
|
+
'info': balances,
|
947
1026
|
}
|
948
|
-
|
949
|
-
|
950
|
-
|
951
|
-
currencyId = currencyIds[i]
|
1027
|
+
for i in range(0, len(balances)):
|
1028
|
+
balanceEntry = self.safe_dict(balances, i, {})
|
1029
|
+
currencyId = self.safe_string(balanceEntry, 'currency')
|
952
1030
|
code = self.safe_currency_code(currencyId)
|
953
1031
|
account = self.account()
|
954
|
-
|
955
|
-
account['
|
1032
|
+
account['total'] = self.safe_string(balanceEntry, 'balance')
|
1033
|
+
account['used'] = self.safe_string(balanceEntry, 'reserved')
|
956
1034
|
result[code] = account
|
957
1035
|
return self.safe_balance(result)
|
958
1036
|
|
959
|
-
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
1037
|
+
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
960
1038
|
"""
|
961
|
-
fetch the history of changes, actions done by the user or operations that altered balance of the user
|
962
|
-
|
963
|
-
|
1039
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
1040
|
+
|
1041
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#4e7831f7-a0e7-4c3e-9336-1d0e5dcb15cf
|
1042
|
+
|
1043
|
+
:param str [code]: unified currency code, default is None
|
964
1044
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
965
|
-
:param int [limit]: max number of ledger
|
1045
|
+
:param int [limit]: max number of ledger entries to return(default 200, max 500)
|
966
1046
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
967
1047
|
:param int [params.until]: the latest time in ms to fetch entries for
|
968
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
1048
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
969
1049
|
"""
|
970
1050
|
self.load_markets()
|
971
|
-
request = {}
|
1051
|
+
request: dict = {}
|
972
1052
|
if since is not None:
|
973
1053
|
request['since'] = since
|
974
1054
|
else:
|
@@ -1078,7 +1158,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1078
1158
|
ledger.append(rawLedgerEntry)
|
1079
1159
|
return self.parse_ledger(ledger, currency, since, limit)
|
1080
1160
|
|
1081
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
1161
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
1082
1162
|
datetime = self.safe_string(item, 'timestamp')
|
1083
1163
|
currencyId = self.safe_string(item, 'currencyId')
|
1084
1164
|
item = self.omit(item, 'currencyId')
|
@@ -1133,7 +1213,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1133
1213
|
return [type, referenceId]
|
1134
1214
|
|
1135
1215
|
def parse_ledger_entry_type(self, type):
|
1136
|
-
types = {
|
1216
|
+
types: dict = {
|
1137
1217
|
'Deposit': 'transaction',
|
1138
1218
|
'Withdraw': 'transaction',
|
1139
1219
|
'Order': 'trade',
|
@@ -1143,12 +1223,14 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1143
1223
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1144
1224
|
"""
|
1145
1225
|
create a trade order
|
1146
|
-
|
1226
|
+
|
1227
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#a4895a1d-3f50-40ae-8231-6962ef06c771
|
1228
|
+
|
1147
1229
|
:param str symbol: unified symbol of the market to create an order in
|
1148
1230
|
:param str type: 'market' or 'limit'
|
1149
1231
|
:param str side: 'buy' or 'sell'
|
1150
1232
|
:param float amount: how much of currency you want to trade in units of base currency
|
1151
|
-
:param float [price]: the price at which the order is to be
|
1233
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1152
1234
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1153
1235
|
:param float [params.cost]: the quote quantity that can be used alternative for the amount in market orders
|
1154
1236
|
:param str [params.timeInForce]: "GTC", "IOC", "FOK", "GTD"
|
@@ -1163,7 +1245,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1163
1245
|
"""
|
1164
1246
|
self.load_markets()
|
1165
1247
|
market = self.market(symbol)
|
1166
|
-
request = {
|
1248
|
+
request: dict = {
|
1167
1249
|
}
|
1168
1250
|
request['orderType'] = type
|
1169
1251
|
precisedAmount = None
|
@@ -1188,10 +1270,10 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1188
1270
|
if timeInForce is not None:
|
1189
1271
|
params = self.omit(params, 'timeInForce')
|
1190
1272
|
request['timeInForce'] = self.encode_order_time_in_force(timeInForce)
|
1191
|
-
|
1192
|
-
if
|
1273
|
+
triggerPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
|
1274
|
+
if triggerPrice is not None:
|
1193
1275
|
params = self.omit(params, ['triggerPrice'])
|
1194
|
-
request['stopPrice'] = self.price_to_precision(symbol,
|
1276
|
+
request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
|
1195
1277
|
userData = self.safe_value(params, 'userData', {})
|
1196
1278
|
comment = self.safe_string_2(params, 'clientOrderId', 'comment')
|
1197
1279
|
if comment is not None:
|
@@ -1248,7 +1330,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1248
1330
|
return request
|
1249
1331
|
|
1250
1332
|
def encode_order_time_in_force(self, timeInForce):
|
1251
|
-
timeInForceTypes = {
|
1333
|
+
timeInForceTypes: dict = {
|
1252
1334
|
'GTC': 1,
|
1253
1335
|
'IOC': 2,
|
1254
1336
|
'GTD': 3,
|
@@ -1259,8 +1341,10 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1259
1341
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1260
1342
|
"""
|
1261
1343
|
cancels an open order
|
1262
|
-
|
1263
|
-
|
1344
|
+
|
1345
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#eaea86da-16ca-4c56-9f00-5b1cb2ad89f8
|
1346
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#47f913fb-8cab-49f4-bc78-d980e6ced316
|
1347
|
+
|
1264
1348
|
:param str id: order id
|
1265
1349
|
:param str symbol: not used by coinmetro cancelOrder()
|
1266
1350
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1268,7 +1352,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1268
1352
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1269
1353
|
"""
|
1270
1354
|
self.load_markets()
|
1271
|
-
request = {
|
1355
|
+
request: dict = {
|
1272
1356
|
'orderID': id,
|
1273
1357
|
}
|
1274
1358
|
marginMode = None
|
@@ -1304,7 +1388,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1304
1388
|
def close_position(self, symbol: str, side: OrderSide = None, params={}):
|
1305
1389
|
"""
|
1306
1390
|
closes an open position
|
1307
|
-
|
1391
|
+
|
1392
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#47f913fb-8cab-49f4-bc78-d980e6ced316
|
1393
|
+
|
1308
1394
|
:param str symbol: not used by coinmetro closePosition()
|
1309
1395
|
:param str [side]: not used by coinmetro closePosition()
|
1310
1396
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1316,7 +1402,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1316
1402
|
orderId = self.safe_string(params, 'orderId')
|
1317
1403
|
if orderId is None:
|
1318
1404
|
raise ArgumentsRequired(self.id + ' closePosition() requires a orderId parameter')
|
1319
|
-
request = {
|
1405
|
+
request: dict = {
|
1320
1406
|
'orderID': orderId,
|
1321
1407
|
}
|
1322
1408
|
response = self.privatePostExchangeOrdersCloseOrderID(self.extend(request, params))
|
@@ -1354,7 +1440,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1354
1440
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1355
1441
|
"""
|
1356
1442
|
fetch all unfilled currently open orders
|
1357
|
-
|
1443
|
+
|
1444
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#518afd7a-4338-439c-a651-d4fdaa964138
|
1445
|
+
|
1358
1446
|
:param str symbol: unified market symbol
|
1359
1447
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1360
1448
|
:param int [limit]: the maximum number of open order structures to retrieve
|
@@ -1375,7 +1463,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1375
1463
|
def fetch_canceled_and_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1376
1464
|
"""
|
1377
1465
|
fetches information on multiple canceled and closed orders made by the user
|
1378
|
-
|
1466
|
+
|
1467
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#4d48ae69-8ee2-44d1-a268-71f84e557b7b
|
1468
|
+
|
1379
1469
|
:param str symbol: unified market symbol of the market orders were made in
|
1380
1470
|
:param int [since]: the earliest time in ms to fetch orders for
|
1381
1471
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -1386,7 +1476,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1386
1476
|
market = None
|
1387
1477
|
if symbol is not None:
|
1388
1478
|
market = self.market(symbol)
|
1389
|
-
request = {}
|
1479
|
+
request: dict = {}
|
1390
1480
|
if since is not None:
|
1391
1481
|
request['since'] = since
|
1392
1482
|
response = self.privateGetExchangeOrdersHistorySince(self.extend(request, params))
|
@@ -1395,14 +1485,16 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1395
1485
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1396
1486
|
"""
|
1397
1487
|
fetches information on an order made by the user
|
1398
|
-
|
1488
|
+
|
1489
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#95bbed87-db1c-47a7-a03e-aa247e91d5a6
|
1490
|
+
|
1399
1491
|
:param int|str id: order id
|
1400
1492
|
:param str symbol: not used by coinmetro fetchOrder()
|
1401
1493
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1402
1494
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1403
1495
|
"""
|
1404
1496
|
self.load_markets()
|
1405
|
-
request = {
|
1497
|
+
request: dict = {
|
1406
1498
|
'orderID': id,
|
1407
1499
|
}
|
1408
1500
|
response = self.privateGetExchangeOrdersStatusOrderID(self.extend(request, params))
|
@@ -1443,7 +1535,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1443
1535
|
#
|
1444
1536
|
return self.parse_order(response)
|
1445
1537
|
|
1446
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1538
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1447
1539
|
#
|
1448
1540
|
# createOrder market
|
1449
1541
|
# {
|
@@ -1682,7 +1774,6 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1682
1774
|
}
|
1683
1775
|
trades = self.safe_value(order, 'fills', [])
|
1684
1776
|
userData = self.safe_value(order, 'userData', {})
|
1685
|
-
triggerPrice = self.safe_string(order, 'stopPrice')
|
1686
1777
|
clientOrderId = self.safe_string(userData, 'comment')
|
1687
1778
|
takeProfitPrice = self.safe_string(userData, 'takeProfit')
|
1688
1779
|
stopLossPrice = self.safe_string(userData, 'stopLoss')
|
@@ -1698,7 +1789,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1698
1789
|
'timeInForce': self.parse_order_time_in_force(self.safe_integer(order, 'timeInForce')),
|
1699
1790
|
'side': side,
|
1700
1791
|
'price': price,
|
1701
|
-
'triggerPrice':
|
1792
|
+
'triggerPrice': self.safe_string(order, 'stopPrice'),
|
1702
1793
|
'takeProfitPrice': takeProfitPrice,
|
1703
1794
|
'stopLossPrice': stopLossPrice,
|
1704
1795
|
'average': None,
|
@@ -1725,7 +1816,9 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1725
1816
|
def borrow_cross_margin(self, code: str, amount: float, params={}):
|
1726
1817
|
"""
|
1727
1818
|
create a loan to borrow margin
|
1728
|
-
|
1819
|
+
|
1820
|
+
https://documenter.getpostman.com/view/3653795/SVfWN6KS#5b90b3b9-e5db-4d07-ac9d-d680a06fd110
|
1821
|
+
|
1729
1822
|
:param str code: unified currency code of the currency to borrow
|
1730
1823
|
:param float amount: the amount to borrow
|
1731
1824
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1734,7 +1827,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1734
1827
|
self.load_markets()
|
1735
1828
|
currency = self.currency(code)
|
1736
1829
|
currencyId = currency['id']
|
1737
|
-
request = {}
|
1830
|
+
request: dict = {}
|
1738
1831
|
request[currencyId] = self.currency_to_precision(code, amount)
|
1739
1832
|
response = self.privatePutUsersMarginCollateral(self.extend(request, params))
|
1740
1833
|
#
|
@@ -1793,7 +1886,7 @@ class coinmetro(Exchange, ImplicitAPI):
|
|
1793
1886
|
url = url[0:len(url) - 1]
|
1794
1887
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1795
1888
|
|
1796
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1889
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1797
1890
|
if response is None:
|
1798
1891
|
return None
|
1799
1892
|
if (code != 200) and (code != 201) and (code != 202):
|