ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3104 -880
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1513 -563
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +206 -89
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +557 -323
- ccxt/async_support/digifinex.py +340 -223
- ccxt/async_support/ellipx.py +1826 -0
- ccxt/async_support/exmo.py +259 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +334 -178
- ccxt/async_support/hollaex.py +134 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +105 -56
- ccxt/async_support/hyperliquid.py +1633 -268
- ccxt/async_support/idex.py +148 -95
- ccxt/async_support/independentreserve.py +236 -31
- ccxt/async_support/indodax.py +165 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +138 -106
- ccxt/async_support/latoken.py +135 -79
- ccxt/async_support/lbank.py +290 -113
- ccxt/async_support/luno.py +112 -62
- ccxt/async_support/lykke.py +104 -55
- ccxt/async_support/mercado.py +36 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +43 -0
- ccxt/async_support/ndax.py +163 -82
- ccxt/async_support/novadax.py +121 -75
- ccxt/async_support/oceanex.py +175 -59
- ccxt/async_support/okcoin.py +222 -163
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +132 -414
- ccxt/async_support/oxfun.py +2832 -0
- ccxt/async_support/p2b.py +79 -51
- ccxt/async_support/paradex.py +2017 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3104 -880
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1513 -563
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +206 -89
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +557 -323
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +334 -178
- ccxt/hollaex.py +134 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +105 -56
- ccxt/hyperliquid.py +1632 -268
- ccxt/idex.py +148 -95
- ccxt/independentreserve.py +235 -31
- ccxt/indodax.py +165 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +138 -106
- ccxt/latoken.py +135 -79
- ccxt/lbank.py +290 -113
- ccxt/luno.py +112 -62
- ccxt/lykke.py +104 -55
- ccxt/mercado.py +36 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +43 -0
- ccxt/ndax.py +163 -82
- ccxt/novadax.py +121 -75
- ccxt/oceanex.py +175 -59
- ccxt/okcoin.py +222 -163
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +132 -414
- ccxt/oxfun.py +2831 -0
- ccxt/p2b.py +79 -51
- ccxt/paradex.py +2017 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +138 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.48.dist-info/METADATA +646 -0
- ccxt-4.4.48.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/async_support/btcmarkets.py
CHANGED
@@ -14,7 +14,6 @@ from ccxt.base.errors import BadRequest
|
|
14
14
|
from ccxt.base.errors import InsufficientFunds
|
15
15
|
from ccxt.base.errors import InvalidOrder
|
16
16
|
from ccxt.base.errors import OrderNotFound
|
17
|
-
from ccxt.base.errors import DDoSProtection
|
18
17
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
19
18
|
from ccxt.base.precise import Precise
|
20
19
|
|
@@ -43,6 +42,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
43
42
|
'createDepositAddress': False,
|
44
43
|
'createOrder': True,
|
45
44
|
'createReduceOnlyOrder': False,
|
45
|
+
'createTriggerOrder': True,
|
46
46
|
'fetchBalance': True,
|
47
47
|
'fetchBorrowRateHistories': False,
|
48
48
|
'fetchBorrowRateHistory': False,
|
@@ -73,8 +73,11 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
73
73
|
'fetchOrderBook': True,
|
74
74
|
'fetchOrders': True,
|
75
75
|
'fetchPosition': False,
|
76
|
+
'fetchPositionHistory': False,
|
76
77
|
'fetchPositionMode': False,
|
77
78
|
'fetchPositions': False,
|
79
|
+
'fetchPositionsForSymbol': False,
|
80
|
+
'fetchPositionsHistory': False,
|
78
81
|
'fetchPositionsRisk': False,
|
79
82
|
'fetchPremiumIndexOHLCV': False,
|
80
83
|
'fetchTicker': True,
|
@@ -89,7 +92,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
89
92
|
'withdraw': True,
|
90
93
|
},
|
91
94
|
'urls': {
|
92
|
-
'logo': 'https://
|
95
|
+
'logo': 'https://github.com/user-attachments/assets/8c8d6907-3873-4cc4-ad20-e22fba28247e',
|
93
96
|
'api': {
|
94
97
|
'public': 'https://api.btcmarkets.net',
|
95
98
|
'private': 'https://api.btcmarkets.net',
|
@@ -156,18 +159,93 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
156
159
|
'1h': '1h',
|
157
160
|
'1d': '1d',
|
158
161
|
},
|
162
|
+
'features': {
|
163
|
+
'spot': {
|
164
|
+
'sandbox': False,
|
165
|
+
'createOrder': {
|
166
|
+
'marginMode': False,
|
167
|
+
'triggerPrice': True, # todo: check
|
168
|
+
'triggerPriceType': None,
|
169
|
+
'triggerDirection': False,
|
170
|
+
'stopLossPrice': False,
|
171
|
+
'takeProfitPrice': False,
|
172
|
+
'attachedStopLossTakeProfit': None,
|
173
|
+
'timeInForce': {
|
174
|
+
'IOC': True,
|
175
|
+
'FOK': True,
|
176
|
+
'PO': True,
|
177
|
+
'GTD': False,
|
178
|
+
},
|
179
|
+
'hedged': False,
|
180
|
+
'leverage': False,
|
181
|
+
'marketBuyRequiresPrice': False,
|
182
|
+
'marketBuyByCost': False,
|
183
|
+
'selfTradePrevention': True, # todo: check
|
184
|
+
'trailing': False,
|
185
|
+
'iceberg': False,
|
186
|
+
},
|
187
|
+
'createOrders': None,
|
188
|
+
'fetchMyTrades': {
|
189
|
+
'marginMode': False,
|
190
|
+
'limit': 100,
|
191
|
+
'daysBack': 100000,
|
192
|
+
'untilDays': 100000,
|
193
|
+
},
|
194
|
+
'fetchOrder': {
|
195
|
+
'marginMode': False,
|
196
|
+
'trigger': False,
|
197
|
+
'trailing': False,
|
198
|
+
},
|
199
|
+
'fetchOpenOrders': {
|
200
|
+
'marginMode': False,
|
201
|
+
'limit': 100,
|
202
|
+
'trigger': False,
|
203
|
+
'trailing': False,
|
204
|
+
},
|
205
|
+
'fetchOrders': {
|
206
|
+
'marginMode': False,
|
207
|
+
'limit': 100,
|
208
|
+
'daysBack': 100000,
|
209
|
+
'untilDays': 100000,
|
210
|
+
'trigger': False,
|
211
|
+
'trailing': False,
|
212
|
+
},
|
213
|
+
'fetchClosedOrders': {
|
214
|
+
'marginMode': False,
|
215
|
+
'limit': 100,
|
216
|
+
'daysBack': 100000,
|
217
|
+
'daysBackCanceled': 1,
|
218
|
+
'untilDays': 100000,
|
219
|
+
'trigger': False,
|
220
|
+
'trailing': False,
|
221
|
+
},
|
222
|
+
'fetchOHLCV': {
|
223
|
+
'limit': 1000,
|
224
|
+
},
|
225
|
+
},
|
226
|
+
'swap': {
|
227
|
+
'linear': None,
|
228
|
+
'inverse': None,
|
229
|
+
},
|
230
|
+
'future': {
|
231
|
+
'linear': None,
|
232
|
+
'inverse': None,
|
233
|
+
},
|
234
|
+
},
|
159
235
|
'precisionMode': TICK_SIZE,
|
160
236
|
'exceptions': {
|
161
|
-
'
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
166
|
-
|
167
|
-
|
168
|
-
|
169
|
-
|
170
|
-
|
237
|
+
'exact': {
|
238
|
+
'InsufficientFund': InsufficientFunds,
|
239
|
+
'InvalidPrice': InvalidOrder,
|
240
|
+
'InvalidAmount': InvalidOrder,
|
241
|
+
'MissingArgument': BadRequest,
|
242
|
+
'OrderAlreadyCancelled': InvalidOrder,
|
243
|
+
'OrderNotFound': OrderNotFound,
|
244
|
+
'OrderStatusIsFinal': InvalidOrder,
|
245
|
+
'InvalidPaginationParameter': BadRequest,
|
246
|
+
},
|
247
|
+
'broad': {
|
248
|
+
},
|
171
249
|
},
|
172
250
|
'fees': {
|
173
251
|
'percentage': True,
|
@@ -187,7 +265,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
187
265
|
|
188
266
|
async def fetch_transactions_with_method(self, method, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
189
267
|
await self.load_markets()
|
190
|
-
request = {}
|
268
|
+
request: dict = {}
|
191
269
|
if limit is not None:
|
192
270
|
request['limit'] = limit
|
193
271
|
if since is not None:
|
@@ -201,7 +279,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
201
279
|
async def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
202
280
|
"""
|
203
281
|
fetch history of deposits and withdrawals
|
204
|
-
|
282
|
+
|
283
|
+
https://docs.btcmarkets.net/v3/#tag/Fund-Management-APIs/paths/~1v3~1transfers/get
|
284
|
+
|
205
285
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
206
286
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
207
287
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
@@ -213,7 +293,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
213
293
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
214
294
|
"""
|
215
295
|
fetch all deposits made to an account
|
216
|
-
|
296
|
+
|
297
|
+
https://docs.btcmarkets.net/v3/#tag/Fund-Management-APIs/paths/~1v3~1deposits/get
|
298
|
+
|
217
299
|
:param str code: unified currency code
|
218
300
|
:param int [since]: the earliest time in ms to fetch deposits for
|
219
301
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -225,7 +307,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
225
307
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
226
308
|
"""
|
227
309
|
fetch all withdrawals made from an account
|
228
|
-
|
310
|
+
|
311
|
+
https://docs.btcmarkets.net/v3/#tag/Fund-Management-APIs/paths/~1v3~1withdrawals/get
|
312
|
+
|
229
313
|
:param str code: unified currency code
|
230
314
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
231
315
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
@@ -234,8 +318,8 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
234
318
|
"""
|
235
319
|
return await self.fetch_transactions_with_method('privateGetWithdrawals', code, since, limit, params)
|
236
320
|
|
237
|
-
def parse_transaction_status(self, status):
|
238
|
-
statuses = {
|
321
|
+
def parse_transaction_status(self, status: Str):
|
322
|
+
statuses: dict = {
|
239
323
|
'Accepted': 'pending',
|
240
324
|
'Pending Authorization': 'pending',
|
241
325
|
'Complete': 'ok',
|
@@ -245,13 +329,13 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
245
329
|
return self.safe_string(statuses, status, status)
|
246
330
|
|
247
331
|
def parse_transaction_type(self, type):
|
248
|
-
statuses = {
|
332
|
+
statuses: dict = {
|
249
333
|
'Withdraw': 'withdrawal',
|
250
334
|
'Deposit': 'deposit',
|
251
335
|
}
|
252
336
|
return self.safe_string(statuses, type, type)
|
253
337
|
|
254
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
338
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
255
339
|
#
|
256
340
|
# {
|
257
341
|
# "id": "6500230339",
|
@@ -302,7 +386,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
302
386
|
type = self.parse_transaction_type(self.safe_string_lower(transaction, 'type'))
|
303
387
|
if type == 'withdraw':
|
304
388
|
type = 'withdrawal'
|
305
|
-
cryptoPaymentDetail = self.
|
389
|
+
cryptoPaymentDetail = self.safe_dict(transaction, 'paymentDetail', {})
|
306
390
|
txid = self.safe_string(cryptoPaymentDetail, 'txId')
|
307
391
|
address = self.safe_string(cryptoPaymentDetail, 'address')
|
308
392
|
tag = None
|
@@ -350,10 +434,12 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
350
434
|
'info': transaction,
|
351
435
|
}
|
352
436
|
|
353
|
-
async def fetch_markets(self, params={}):
|
437
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
354
438
|
"""
|
355
439
|
retrieves data on all markets for btcmarkets
|
356
|
-
|
440
|
+
|
441
|
+
https://docs.btcmarkets.net/v3/#tag/Market-Data-APIs/paths/~1v3~1markets/get
|
442
|
+
|
357
443
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
358
444
|
:returns dict[]: an array of objects representing market data
|
359
445
|
"""
|
@@ -367,23 +453,25 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
367
453
|
# "minOrderAmount":"0.00007",
|
368
454
|
# "maxOrderAmount":"1000000",
|
369
455
|
# "amountDecimals":"8",
|
370
|
-
# "priceDecimals":"2"
|
456
|
+
# "priceDecimals":"2",
|
457
|
+
# "status": "Online"
|
371
458
|
# }
|
372
459
|
# ]
|
373
460
|
#
|
374
461
|
return self.parse_markets(response)
|
375
462
|
|
376
|
-
def parse_market(self, market) -> Market:
|
463
|
+
def parse_market(self, market: dict) -> Market:
|
377
464
|
baseId = self.safe_string(market, 'baseAssetName')
|
378
465
|
quoteId = self.safe_string(market, 'quoteAssetName')
|
379
466
|
id = self.safe_string(market, 'marketId')
|
380
467
|
base = self.safe_currency_code(baseId)
|
381
468
|
quote = self.safe_currency_code(quoteId)
|
382
469
|
symbol = base + '/' + quote
|
383
|
-
fees = self.safe_value(self.
|
470
|
+
fees = self.safe_value(self.safe_dict(self.options, 'fees', {}), quote, self.fees)
|
384
471
|
pricePrecision = self.parse_number(self.parse_precision(self.safe_string(market, 'priceDecimals')))
|
385
472
|
minAmount = self.safe_number(market, 'minOrderAmount')
|
386
473
|
maxAmount = self.safe_number(market, 'maxOrderAmount')
|
474
|
+
status = self.safe_string(market, 'status')
|
387
475
|
minPrice = None
|
388
476
|
if quote == 'AUD':
|
389
477
|
minPrice = pricePrecision
|
@@ -402,7 +490,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
402
490
|
'swap': False,
|
403
491
|
'future': False,
|
404
492
|
'option': False,
|
405
|
-
'active':
|
493
|
+
'active': (status == 'Online'),
|
406
494
|
'contract': False,
|
407
495
|
'linear': None,
|
408
496
|
'inverse': None,
|
@@ -442,7 +530,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
442
530
|
async def fetch_time(self, params={}):
|
443
531
|
"""
|
444
532
|
fetches the current integer timestamp in milliseconds from the exchange server
|
445
|
-
|
533
|
+
|
534
|
+
https://docs.btcmarkets.net/v3/#tag/Misc-APIs/paths/~1v3~1time/get
|
535
|
+
|
446
536
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
447
537
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
448
538
|
"""
|
@@ -455,7 +545,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
455
545
|
return self.parse8601(self.safe_string(response, 'timestamp'))
|
456
546
|
|
457
547
|
def parse_balance(self, response) -> Balances:
|
458
|
-
result = {'info': response}
|
548
|
+
result: dict = {'info': response}
|
459
549
|
for i in range(0, len(response)):
|
460
550
|
balance = response[i]
|
461
551
|
currencyId = self.safe_string(balance, 'assetName')
|
@@ -469,7 +559,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
469
559
|
async def fetch_balance(self, params={}) -> Balances:
|
470
560
|
"""
|
471
561
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
472
|
-
|
562
|
+
|
563
|
+
https://docs.btcmarkets.net/v3/#tag/Account-APIs/paths/~1v3~1accounts~1me~1balances/get
|
564
|
+
|
473
565
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
474
566
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
475
567
|
"""
|
@@ -500,7 +592,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
500
592
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
501
593
|
"""
|
502
594
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
503
|
-
|
595
|
+
|
596
|
+
https://docs.btcmarkets.net/v3/#tag/Market-Data-APIs/paths/~1v3~1markets~1{marketId}~1candles/get
|
597
|
+
|
504
598
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
505
599
|
:param str timeframe: the length of time each candle represents
|
506
600
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -510,7 +604,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
510
604
|
"""
|
511
605
|
await self.load_markets()
|
512
606
|
market = self.market(symbol)
|
513
|
-
request = {
|
607
|
+
request: dict = {
|
514
608
|
'marketId': market['id'],
|
515
609
|
'timeWindow': self.safe_string(self.timeframes, timeframe, timeframe),
|
516
610
|
# 'from': self.iso8601(since),
|
@@ -522,7 +616,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
522
616
|
if since is not None:
|
523
617
|
request['from'] = self.iso8601(since)
|
524
618
|
if limit is not None:
|
525
|
-
request['limit'] = limit # default is 10, max 200
|
619
|
+
request['limit'] = min(limit, 200) # default is 10, max 200
|
526
620
|
response = await self.publicGetMarketsMarketIdCandles(self.extend(request, params))
|
527
621
|
#
|
528
622
|
# [
|
@@ -536,7 +630,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
536
630
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
537
631
|
"""
|
538
632
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
539
|
-
|
633
|
+
|
634
|
+
https://docs.btcmarkets.net/v3/#tag/Market-Data-APIs/paths/~1v3~1markets~1{marketId}~1orderbook/get
|
635
|
+
|
540
636
|
:param str symbol: unified symbol of the market to fetch the order book for
|
541
637
|
:param int [limit]: the maximum amount of order book entries to return
|
542
638
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -544,7 +640,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
544
640
|
"""
|
545
641
|
await self.load_markets()
|
546
642
|
market = self.market(symbol)
|
547
|
-
request = {
|
643
|
+
request: dict = {
|
548
644
|
'marketId': market['id'],
|
549
645
|
}
|
550
646
|
response = await self.publicGetMarketsMarketIdOrderbook(self.extend(request, params))
|
@@ -569,7 +665,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
569
665
|
orderbook['nonce'] = self.safe_integer(response, 'snapshotId')
|
570
666
|
return orderbook
|
571
667
|
|
572
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
668
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
573
669
|
#
|
574
670
|
# fetchTicker
|
575
671
|
#
|
@@ -622,14 +718,16 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
622
718
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
623
719
|
"""
|
624
720
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
625
|
-
|
721
|
+
|
722
|
+
https://docs.btcmarkets.net/v3/#tag/Market-Data-APIs/paths/~1v3~1markets~1{marketId}~1ticker/get
|
723
|
+
|
626
724
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
627
725
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
628
726
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
629
727
|
"""
|
630
728
|
await self.load_markets()
|
631
729
|
market = self.market(symbol)
|
632
|
-
request = {
|
730
|
+
request: dict = {
|
633
731
|
'marketId': market['id'],
|
634
732
|
}
|
635
733
|
response = await self.publicGetMarketsMarketIdTicker(self.extend(request, params))
|
@@ -653,13 +751,13 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
653
751
|
async def fetch_ticker_2(self, symbol: str, params={}):
|
654
752
|
await self.load_markets()
|
655
753
|
market = self.market(symbol)
|
656
|
-
request = {
|
754
|
+
request: dict = {
|
657
755
|
'id': market['id'],
|
658
756
|
}
|
659
757
|
response = await self.publicGetMarketsMarketIdTicker(self.extend(request, params))
|
660
758
|
return self.parse_ticker(response, market)
|
661
759
|
|
662
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
760
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
663
761
|
#
|
664
762
|
# public fetchTrades
|
665
763
|
#
|
@@ -726,7 +824,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
726
824
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
727
825
|
"""
|
728
826
|
get the list of most recent trades for a particular symbol
|
729
|
-
|
827
|
+
|
828
|
+
https://docs.btcmarkets.net/v3/#tag/Market-Data-APIs/paths/~1v3~1markets~1{marketId}~1trades/get
|
829
|
+
|
730
830
|
:param str symbol: unified symbol of the market to fetch trades for
|
731
831
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
732
832
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -735,7 +835,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
735
835
|
"""
|
736
836
|
await self.load_markets()
|
737
837
|
market = self.market(symbol)
|
738
|
-
request = {
|
838
|
+
request: dict = {
|
739
839
|
# 'since': 59868345231,
|
740
840
|
'marketId': market['id'],
|
741
841
|
}
|
@@ -752,18 +852,21 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
752
852
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
753
853
|
"""
|
754
854
|
create a trade order
|
755
|
-
|
855
|
+
|
856
|
+
https://docs.btcmarkets.net/v3/#tag/Order-Placement-APIs/paths/~1v3~1orders/post
|
857
|
+
|
756
858
|
:param str symbol: unified symbol of the market to create an order in
|
757
859
|
:param str type: 'market' or 'limit'
|
758
860
|
:param str side: 'buy' or 'sell'
|
759
861
|
:param float amount: how much of currency you want to trade in units of base currency
|
760
|
-
:param float [price]: the price at which the order is to be
|
862
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
761
863
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
864
|
+
:param float [params.triggerPrice]: the price at which a trigger order is triggered at
|
762
865
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
763
866
|
"""
|
764
867
|
await self.load_markets()
|
765
868
|
market = self.market(symbol)
|
766
|
-
request = {
|
869
|
+
request: dict = {
|
767
870
|
'marketId': market['id'],
|
768
871
|
# 'price': self.price_to_precision(symbol, price),
|
769
872
|
'amount': self.amount_to_precision(symbol, amount),
|
@@ -840,7 +943,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
840
943
|
async def cancel_orders(self, ids, symbol: Str = None, params={}):
|
841
944
|
"""
|
842
945
|
cancel multiple orders
|
843
|
-
|
946
|
+
|
947
|
+
https://docs.btcmarkets.net/v3/#tag/Batch-Order-APIs/paths/~1v3~1batchorders~1{ids}/delete
|
948
|
+
|
844
949
|
:param str[] ids: order ids
|
845
950
|
:param str symbol: not used by btcmarkets cancelOrders()
|
846
951
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -849,31 +954,64 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
849
954
|
await self.load_markets()
|
850
955
|
for i in range(0, len(ids)):
|
851
956
|
ids[i] = int(ids[i])
|
852
|
-
request = {
|
957
|
+
request: dict = {
|
853
958
|
'ids': ids,
|
854
959
|
}
|
855
|
-
|
960
|
+
response = await self.privateDeleteBatchordersIds(self.extend(request, params))
|
961
|
+
#
|
962
|
+
# {
|
963
|
+
# "cancelOrders": [
|
964
|
+
# {
|
965
|
+
# "orderId": "414186",
|
966
|
+
# "clientOrderId": "6"
|
967
|
+
# },
|
968
|
+
# ...
|
969
|
+
# ],
|
970
|
+
# "unprocessedRequests": [
|
971
|
+
# {
|
972
|
+
# "code": "OrderAlreadyCancelled",
|
973
|
+
# "message": "order is already cancelled.",
|
974
|
+
# "requestId": "1"
|
975
|
+
# }
|
976
|
+
# ]
|
977
|
+
# }
|
978
|
+
#
|
979
|
+
cancelOrders = self.safe_list(response, 'cancelOrders', [])
|
980
|
+
unprocessedRequests = self.safe_list(response, 'unprocessedRequests', [])
|
981
|
+
orders = self.array_concat(cancelOrders, unprocessedRequests)
|
982
|
+
return self.parse_orders(orders)
|
856
983
|
|
857
984
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
858
985
|
"""
|
859
986
|
cancels an open order
|
860
|
-
|
987
|
+
|
988
|
+
https://docs.btcmarkets.net/v3/#operation/cancelOrder
|
989
|
+
|
861
990
|
:param str id: order id
|
862
991
|
:param str symbol: not used by btcmarket cancelOrder()
|
863
992
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
864
993
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
865
994
|
"""
|
866
995
|
await self.load_markets()
|
867
|
-
request = {
|
996
|
+
request: dict = {
|
868
997
|
'id': id,
|
869
998
|
}
|
870
|
-
|
999
|
+
response = await self.privateDeleteOrdersId(self.extend(request, params))
|
1000
|
+
#
|
1001
|
+
# {
|
1002
|
+
# "orderId": "7524",
|
1003
|
+
# "clientOrderId": "123-456"
|
1004
|
+
# }
|
1005
|
+
#
|
1006
|
+
return self.parse_order(response)
|
871
1007
|
|
872
1008
|
def calculate_fee(self, symbol, type, side, amount, price, takerOrMaker='taker', params={}):
|
873
1009
|
"""
|
874
1010
|
calculates the presumptive fee that would be charged for an order
|
875
1011
|
:param str symbol: unified market symbol
|
876
|
-
:param str type: not used by btcmarkets.
|
1012
|
+
:param str type: not used by btcmarkets.calculateFee
|
1013
|
+
:param str side: not used by btcmarkets.calculateFee
|
1014
|
+
:param float amount: how much you want to trade, in units of the base currency on most exchanges, or number of contracts
|
877
1015
|
:param float price: the price for the order to be filled at, in units of the quote currency
|
878
1016
|
:param str takerOrMaker: 'taker' or 'maker'
|
879
1017
|
:param dict params:
|
@@ -900,8 +1038,8 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
900
1038
|
'cost': float(self.fee_to_precision(symbol, rateCost)),
|
901
1039
|
}
|
902
1040
|
|
903
|
-
def parse_order_status(self, status):
|
904
|
-
statuses = {
|
1041
|
+
def parse_order_status(self, status: Str):
|
1042
|
+
statuses: dict = {
|
905
1043
|
'Accepted': 'open',
|
906
1044
|
'Placed': 'open',
|
907
1045
|
'Partially Matched': 'open',
|
@@ -912,7 +1050,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
912
1050
|
}
|
913
1051
|
return self.safe_string(statuses, status, status)
|
914
1052
|
|
915
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1053
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
916
1054
|
#
|
917
1055
|
# createOrder
|
918
1056
|
#
|
@@ -950,8 +1088,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
950
1088
|
id = self.safe_string(order, 'orderId')
|
951
1089
|
clientOrderId = self.safe_string(order, 'clientOrderId')
|
952
1090
|
timeInForce = self.safe_string(order, 'timeInForce')
|
953
|
-
|
954
|
-
postOnly = self.safe_value(order, 'postOnly')
|
1091
|
+
postOnly = self.safe_bool(order, 'postOnly')
|
955
1092
|
return self.safe_order({
|
956
1093
|
'info': order,
|
957
1094
|
'id': id,
|
@@ -965,8 +1102,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
965
1102
|
'postOnly': postOnly,
|
966
1103
|
'side': side,
|
967
1104
|
'price': price,
|
968
|
-
'
|
969
|
-
'triggerPrice': stopPrice,
|
1105
|
+
'triggerPrice': self.safe_number(order, 'triggerPrice'),
|
970
1106
|
'cost': None,
|
971
1107
|
'amount': amount,
|
972
1108
|
'filled': None,
|
@@ -980,13 +1116,16 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
980
1116
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
981
1117
|
"""
|
982
1118
|
fetches information on an order made by the user
|
983
|
-
|
1119
|
+
|
1120
|
+
https://docs.btcmarkets.net/v3/#operation/getOrderById
|
1121
|
+
|
1122
|
+
:param str id: the order id
|
984
1123
|
:param str symbol: not used by btcmarkets fetchOrder
|
985
1124
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
986
1125
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
987
1126
|
"""
|
988
1127
|
await self.load_markets()
|
989
|
-
request = {
|
1128
|
+
request: dict = {
|
990
1129
|
'id': id,
|
991
1130
|
}
|
992
1131
|
response = await self.privateGetOrdersId(self.extend(request, params))
|
@@ -995,7 +1134,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
995
1134
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
996
1135
|
"""
|
997
1136
|
fetches information on multiple orders made by the user
|
998
|
-
|
1137
|
+
|
1138
|
+
https://docs.btcmarkets.net/v3/#operation/listOrders
|
1139
|
+
|
999
1140
|
:param str symbol: unified market symbol of the market orders were made in
|
1000
1141
|
:param int [since]: the earliest time in ms to fetch orders for
|
1001
1142
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -1003,7 +1144,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1003
1144
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1004
1145
|
"""
|
1005
1146
|
await self.load_markets()
|
1006
|
-
request = {
|
1147
|
+
request: dict = {
|
1007
1148
|
'status': 'all',
|
1008
1149
|
}
|
1009
1150
|
market = None
|
@@ -1020,20 +1161,24 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1020
1161
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1021
1162
|
"""
|
1022
1163
|
fetch all unfilled currently open orders
|
1023
|
-
|
1164
|
+
|
1165
|
+
https://docs.btcmarkets.net/v3/#operation/listOrders
|
1166
|
+
|
1024
1167
|
:param str symbol: unified market symbol
|
1025
1168
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1026
1169
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
1027
1170
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1028
1171
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1029
1172
|
"""
|
1030
|
-
request = {'status': 'open'}
|
1173
|
+
request: dict = {'status': 'open'}
|
1031
1174
|
return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
1032
1175
|
|
1033
1176
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1034
1177
|
"""
|
1035
1178
|
fetches information on multiple closed orders made by the user
|
1036
|
-
|
1179
|
+
|
1180
|
+
https://docs.btcmarkets.net/v3/#operation/listOrders
|
1181
|
+
|
1037
1182
|
:param str symbol: unified market symbol of the market orders were made in
|
1038
1183
|
:param int [since]: the earliest time in ms to fetch orders for
|
1039
1184
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -1046,7 +1191,9 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1046
1191
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1047
1192
|
"""
|
1048
1193
|
fetch all trades made by the user
|
1049
|
-
|
1194
|
+
|
1195
|
+
https://docs.btcmarkets.net/v3/#operation/getTrades
|
1196
|
+
|
1050
1197
|
:param str symbol: unified market symbol
|
1051
1198
|
:param int [since]: the earliest time in ms to fetch trades for
|
1052
1199
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -1054,7 +1201,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1054
1201
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1055
1202
|
"""
|
1056
1203
|
await self.load_markets()
|
1057
|
-
request = {}
|
1204
|
+
request: dict = {}
|
1058
1205
|
market = None
|
1059
1206
|
if symbol is not None:
|
1060
1207
|
market = self.market(symbol)
|
@@ -1093,10 +1240,12 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1093
1240
|
#
|
1094
1241
|
return self.parse_trades(response, market, since, limit)
|
1095
1242
|
|
1096
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1243
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1097
1244
|
"""
|
1098
1245
|
make a withdrawal
|
1099
|
-
|
1246
|
+
|
1247
|
+
https://docs.btcmarkets.net/v3/#tag/Fund-Management-APIs/paths/~1v3~1withdrawals/post
|
1248
|
+
|
1100
1249
|
:param str code: unified currency code
|
1101
1250
|
:param float amount: the amount to withdraw
|
1102
1251
|
:param str address: the address to withdraw to
|
@@ -1107,7 +1256,7 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1107
1256
|
tag, params = self.handle_withdraw_tag_and_params(tag, params)
|
1108
1257
|
await self.load_markets()
|
1109
1258
|
currency = self.currency(code)
|
1110
|
-
request = {
|
1259
|
+
request: dict = {
|
1111
1260
|
'currency_id': currency['id'],
|
1112
1261
|
'amount': self.currency_to_precision(code, amount),
|
1113
1262
|
}
|
@@ -1167,21 +1316,19 @@ class btcmarkets(Exchange, ImplicitAPI):
|
|
1167
1316
|
url = self.urls['api'][api] + request
|
1168
1317
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1169
1318
|
|
1170
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1319
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1171
1320
|
if response is None:
|
1172
1321
|
return None # fallback to default error handler
|
1173
|
-
|
1174
|
-
|
1175
|
-
|
1176
|
-
|
1177
|
-
|
1178
|
-
|
1179
|
-
|
1180
|
-
if code >= 400:
|
1181
|
-
errorCode = self.safe_string(response, 'code')
|
1182
|
-
message = self.safe_string(response, 'message')
|
1322
|
+
#
|
1323
|
+
# {"code":"UnAuthorized","message":"invalid access token"}
|
1324
|
+
# {"code":"MarketNotFound","message":"invalid marketId"}
|
1325
|
+
#
|
1326
|
+
errorCode = self.safe_string(response, 'code')
|
1327
|
+
message = self.safe_string(response, 'message')
|
1328
|
+
if errorCode is not None:
|
1183
1329
|
feedback = self.id + ' ' + body
|
1184
|
-
self.throw_exactly_matched_exception(self.exceptions,
|
1185
|
-
self.throw_exactly_matched_exception(self.exceptions,
|
1186
|
-
|
1330
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
|
1331
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
|
1332
|
+
self.throw_broadly_matched_exception(self.exceptions['broad'], message, feedback)
|
1333
|
+
raise ExchangeError(feedback) # unknown message
|
1187
1334
|
return None
|