ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3205 -937
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +223 -97
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +143 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/pro/bitvavo.py
CHANGED
@@ -6,12 +6,12 @@
|
|
6
6
|
import ccxt.async_support
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade
|
9
|
+
from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
|
10
10
|
from ccxt.async_support.base.ws.client import Client
|
11
11
|
from typing import List
|
12
12
|
from ccxt.base.errors import ExchangeError
|
13
|
-
from ccxt.base.errors import ArgumentsRequired
|
14
13
|
from ccxt.base.errors import AuthenticationError
|
14
|
+
from ccxt.base.errors import ArgumentsRequired
|
15
15
|
|
16
16
|
|
17
17
|
class bitvavo(ccxt.async_support.bitvavo):
|
@@ -25,6 +25,8 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
25
25
|
'watchOrderBook': True,
|
26
26
|
'watchTrades': True,
|
27
27
|
'watchTicker': True,
|
28
|
+
'watchTickers': True,
|
29
|
+
'watchBidsAsks': True,
|
28
30
|
'watchOHLCV': True,
|
29
31
|
'watchOrders': True,
|
30
32
|
'watchMyTrades': True,
|
@@ -71,7 +73,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
71
73
|
market = self.market(symbol)
|
72
74
|
messageHash = name + '@' + market['id']
|
73
75
|
url = self.urls['api']['ws']
|
74
|
-
request = {
|
76
|
+
request: dict = {
|
75
77
|
'action': 'subscribe',
|
76
78
|
'channels': [
|
77
79
|
{
|
@@ -85,15 +87,55 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
85
87
|
message = self.extend(request, params)
|
86
88
|
return await self.watch(url, messageHash, message, messageHash)
|
87
89
|
|
90
|
+
async def watch_public_multiple(self, methodName, channelName: str, symbols, params={}):
|
91
|
+
await self.load_markets()
|
92
|
+
symbols = self.market_symbols(symbols)
|
93
|
+
messageHashes = [methodName]
|
94
|
+
args = []
|
95
|
+
for i in range(0, len(symbols)):
|
96
|
+
market = self.market(symbols[i])
|
97
|
+
args.append(market['id'])
|
98
|
+
url = self.urls['api']['ws']
|
99
|
+
request: dict = {
|
100
|
+
'action': 'subscribe',
|
101
|
+
'channels': [
|
102
|
+
{
|
103
|
+
'name': channelName,
|
104
|
+
'markets': args,
|
105
|
+
},
|
106
|
+
],
|
107
|
+
}
|
108
|
+
message = self.extend(request, params)
|
109
|
+
return await self.watch_multiple(url, messageHashes, message, messageHashes)
|
110
|
+
|
88
111
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
89
112
|
"""
|
90
113
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
114
|
+
|
115
|
+
https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
|
116
|
+
|
91
117
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
92
118
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
93
119
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
94
120
|
"""
|
95
121
|
return await self.watch_public('ticker24h', symbol, params)
|
96
122
|
|
123
|
+
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
124
|
+
"""
|
125
|
+
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
126
|
+
|
127
|
+
https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
|
128
|
+
|
129
|
+
:param str[] [symbols]: unified symbol of the market to fetch the ticker for
|
130
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
131
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
132
|
+
"""
|
133
|
+
await self.load_markets()
|
134
|
+
symbols = self.market_symbols(symbols, None, False)
|
135
|
+
channel = 'ticker24h'
|
136
|
+
tickers = await self.watch_public_multiple(channel, channel, symbols, params)
|
137
|
+
return self.filter_by_array(tickers, 'symbol', symbols)
|
138
|
+
|
97
139
|
def handle_ticker(self, client: Client, message):
|
98
140
|
#
|
99
141
|
# {
|
@@ -116,8 +158,10 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
116
158
|
# ]
|
117
159
|
# }
|
118
160
|
#
|
161
|
+
self.handle_bid_ask(client, message)
|
119
162
|
event = self.safe_string(message, 'event')
|
120
163
|
tickers = self.safe_value(message, 'data', [])
|
164
|
+
result = []
|
121
165
|
for i in range(0, len(tickers)):
|
122
166
|
data = tickers[i]
|
123
167
|
marketId = self.safe_string(data, 'market')
|
@@ -126,8 +170,55 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
126
170
|
ticker = self.parse_ticker(data, market)
|
127
171
|
symbol = ticker['symbol']
|
128
172
|
self.tickers[symbol] = ticker
|
173
|
+
result.append(ticker)
|
129
174
|
client.resolve(ticker, messageHash)
|
130
|
-
|
175
|
+
client.resolve(result, event)
|
176
|
+
|
177
|
+
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
178
|
+
"""
|
179
|
+
watches best bid & ask for symbols
|
180
|
+
|
181
|
+
https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
|
182
|
+
|
183
|
+
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
184
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
185
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
186
|
+
"""
|
187
|
+
await self.load_markets()
|
188
|
+
symbols = self.market_symbols(symbols, None, False)
|
189
|
+
channel = 'ticker24h'
|
190
|
+
tickers = await self.watch_public_multiple('bidask', channel, symbols, params)
|
191
|
+
return self.filter_by_array(tickers, 'symbol', symbols)
|
192
|
+
|
193
|
+
def handle_bid_ask(self, client: Client, message):
|
194
|
+
event = 'bidask'
|
195
|
+
tickers = self.safe_value(message, 'data', [])
|
196
|
+
result = []
|
197
|
+
for i in range(0, len(tickers)):
|
198
|
+
data = tickers[i]
|
199
|
+
ticker = self.parse_ws_bid_ask(data)
|
200
|
+
symbol = ticker['symbol']
|
201
|
+
self.bidsasks[symbol] = ticker
|
202
|
+
result.append(ticker)
|
203
|
+
messageHash = event + ':' + symbol
|
204
|
+
client.resolve(ticker, messageHash)
|
205
|
+
client.resolve(result, event)
|
206
|
+
|
207
|
+
def parse_ws_bid_ask(self, ticker, market=None):
|
208
|
+
marketId = self.safe_string(ticker, 'market')
|
209
|
+
market = self.safe_market(marketId, None, '-')
|
210
|
+
symbol = self.safe_string(market, 'symbol')
|
211
|
+
timestamp = self.safe_integer(ticker, 'timestamp')
|
212
|
+
return self.safe_ticker({
|
213
|
+
'symbol': symbol,
|
214
|
+
'timestamp': timestamp,
|
215
|
+
'datetime': self.iso8601(timestamp),
|
216
|
+
'ask': self.safe_number(ticker, 'ask'),
|
217
|
+
'askVolume': self.safe_number(ticker, 'askSize'),
|
218
|
+
'bid': self.safe_number(ticker, 'bid'),
|
219
|
+
'bidVolume': self.safe_number(ticker, 'bidSize'),
|
220
|
+
'info': ticker,
|
221
|
+
}, market)
|
131
222
|
|
132
223
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
133
224
|
"""
|
@@ -189,7 +280,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
189
280
|
interval = self.safe_string(self.timeframes, timeframe, timeframe)
|
190
281
|
messageHash = name + '@' + marketId + '_' + interval
|
191
282
|
url = self.urls['api']['ws']
|
192
|
-
request = {
|
283
|
+
request: dict = {
|
193
284
|
'action': 'subscribe',
|
194
285
|
'channels': [
|
195
286
|
{
|
@@ -215,10 +306,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
215
306
|
# ]
|
216
307
|
# }
|
217
308
|
#
|
218
|
-
action = self.safe_string(message, 'action')
|
219
309
|
response = self.safe_value(message, 'response')
|
220
310
|
ohlcv = self.parse_ohlcvs(response, None, None, None)
|
221
|
-
messageHash = self.
|
311
|
+
messageHash = self.safe_string(message, 'requestId')
|
222
312
|
client.resolve(ohlcv, messageHash)
|
223
313
|
|
224
314
|
def handle_ohlcv(self, client: Client, message):
|
@@ -274,7 +364,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
274
364
|
name = 'book'
|
275
365
|
messageHash = name + '@' + market['id']
|
276
366
|
url = self.urls['api']['ws']
|
277
|
-
request = {
|
367
|
+
request: dict = {
|
278
368
|
'action': 'subscribe',
|
279
369
|
'channels': [
|
280
370
|
{
|
@@ -285,7 +375,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
285
375
|
},
|
286
376
|
],
|
287
377
|
}
|
288
|
-
subscription = {
|
378
|
+
subscription: dict = {
|
289
379
|
'messageHash': messageHash,
|
290
380
|
'name': name,
|
291
381
|
'symbol': symbol,
|
@@ -371,7 +461,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
371
461
|
name = 'getBook'
|
372
462
|
messageHash = name + '@' + marketId
|
373
463
|
url = self.urls['api']['ws']
|
374
|
-
request = {
|
464
|
+
request: dict = {
|
375
465
|
'action': name,
|
376
466
|
'market': marketId,
|
377
467
|
}
|
@@ -455,7 +545,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
455
545
|
url = self.urls['api']['ws']
|
456
546
|
name = 'account'
|
457
547
|
messageHash = 'order:' + symbol
|
458
|
-
request = {
|
548
|
+
request: dict = {
|
459
549
|
'action': 'subscribe',
|
460
550
|
'channels': [
|
461
551
|
{
|
@@ -476,7 +566,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
476
566
|
:param int [since]: the earliest time in ms to fetch trades for
|
477
567
|
:param int [limit]: the maximum number of trade structures to retrieve
|
478
568
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
479
|
-
:returns dict[]: a list of
|
569
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
480
570
|
"""
|
481
571
|
if symbol is None:
|
482
572
|
raise ArgumentsRequired(self.id + ' watchMyTrades() requires a symbol argument')
|
@@ -488,7 +578,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
488
578
|
url = self.urls['api']['ws']
|
489
579
|
name = 'account'
|
490
580
|
messageHash = 'myTrades:' + symbol
|
491
|
-
request = {
|
581
|
+
request: dict = {
|
492
582
|
'action': 'subscribe',
|
493
583
|
'channels': [
|
494
584
|
{
|
@@ -505,12 +595,14 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
505
595
|
async def create_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
|
506
596
|
"""
|
507
597
|
create a trade order
|
508
|
-
|
598
|
+
|
599
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1order/post
|
600
|
+
|
509
601
|
:param str symbol: unified symbol of the market to create an order in
|
510
602
|
:param str type: 'market' or 'limit'
|
511
603
|
:param str side: 'buy' or 'sell'
|
512
604
|
:param float amount: how much of currency you want to trade in units of base currency
|
513
|
-
:param float price: the price at which the order is to be
|
605
|
+
:param float price: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
514
606
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
515
607
|
:param str [params.timeInForce]: "GTC", "IOC", or "PO"
|
516
608
|
:param float [params.stopPrice]: The price at which a trigger order is triggered at
|
@@ -533,13 +625,15 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
533
625
|
async def edit_order_ws(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}) -> Order:
|
534
626
|
"""
|
535
627
|
edit a trade order
|
536
|
-
|
628
|
+
|
629
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1order/put
|
630
|
+
|
537
631
|
:param str id: cancel order id
|
538
632
|
:param str symbol: unified symbol of the market to create an order in
|
539
633
|
:param str type: 'market' or 'limit'
|
540
634
|
:param str side: 'buy' or 'sell'
|
541
635
|
:param float [amount]: how much of currency you want to trade in units of base currency
|
542
|
-
:param float [price]: the price at which the order is to be
|
636
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
543
637
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
544
638
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
545
639
|
"""
|
@@ -550,7 +644,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
550
644
|
|
551
645
|
async def cancel_order_ws(self, id: str, symbol: Str = None, params={}):
|
552
646
|
"""
|
553
|
-
|
647
|
+
|
648
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1order/delete
|
649
|
+
|
554
650
|
cancels an open order
|
555
651
|
:param str id: order id
|
556
652
|
:param str symbol: unified symbol of the market the order was made in
|
@@ -559,12 +655,14 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
559
655
|
"""
|
560
656
|
await self.load_markets()
|
561
657
|
await self.authenticate()
|
562
|
-
request = self.
|
658
|
+
request = self.cancel_order_request(id, symbol, params)
|
563
659
|
return await self.watch_request('privateCancelOrder', request)
|
564
660
|
|
565
661
|
async def cancel_all_orders_ws(self, symbol: Str = None, params={}):
|
566
662
|
"""
|
567
|
-
|
663
|
+
|
664
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1orders/delete
|
665
|
+
|
568
666
|
cancel all open orders
|
569
667
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
570
668
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
@@ -572,7 +670,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
572
670
|
"""
|
573
671
|
await self.load_markets()
|
574
672
|
await self.authenticate()
|
575
|
-
request = {}
|
673
|
+
request: dict = {}
|
576
674
|
market = None
|
577
675
|
if symbol is not None:
|
578
676
|
market = self.market(symbol)
|
@@ -588,20 +686,24 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
588
686
|
# }]
|
589
687
|
# }
|
590
688
|
#
|
591
|
-
action = self.safe_string(message, 'action')
|
592
|
-
response = self.
|
593
|
-
firstRawOrder = self.safe_value(response, 0, {})
|
594
|
-
marketId = self.safe_string(firstRawOrder, 'market')
|
689
|
+
# action = self.safe_string(message, 'action')
|
690
|
+
response = self.safe_list(message, 'response')
|
691
|
+
# firstRawOrder = self.safe_value(response, 0, {})
|
692
|
+
# marketId = self.safe_string(firstRawOrder, 'market')
|
595
693
|
orders = self.parse_orders(response)
|
596
|
-
messageHash = self.build_message_hash(action, {'market': marketId})
|
597
|
-
client.resolve(orders, messageHash)
|
598
|
-
messageHash = self.build_message_hash(action, message)
|
694
|
+
# messageHash = self.build_message_hash(action, {'market': marketId})
|
695
|
+
# client.resolve(orders, messageHash)
|
696
|
+
# messageHash = self.build_message_hash(action, message)
|
697
|
+
messageHash = self.safe_string(message, 'requestId')
|
599
698
|
client.resolve(orders, messageHash)
|
600
699
|
|
601
700
|
async def fetch_order_ws(self, id: str, symbol: Str = None, params={}) -> Order:
|
602
701
|
"""
|
603
|
-
|
702
|
+
|
703
|
+
https://docs.bitvavo.com/#tag/General/paths/~1assets/get
|
704
|
+
|
604
705
|
fetches information on an order made by the user
|
706
|
+
:param str id: the order id
|
605
707
|
:param str symbol: unified symbol of the market the order was made in
|
606
708
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
607
709
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -611,7 +713,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
611
713
|
await self.load_markets()
|
612
714
|
await self.authenticate()
|
613
715
|
market = self.market(symbol)
|
614
|
-
request = {
|
716
|
+
request: dict = {
|
615
717
|
'orderId': id,
|
616
718
|
'market': market['id'],
|
617
719
|
}
|
@@ -619,7 +721,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
619
721
|
|
620
722
|
async def fetch_orders_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
621
723
|
"""
|
622
|
-
|
724
|
+
|
725
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1orders/get
|
726
|
+
|
623
727
|
fetches information on multiple orders made by the user
|
624
728
|
:param str symbol: unified market symbol of the market orders were made in
|
625
729
|
:param int [since]: the earliest time in ms to fetch orders for
|
@@ -635,12 +739,19 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
635
739
|
orders = await self.watch_request('privateGetOrders', request)
|
636
740
|
return self.filter_by_symbol_since_limit(orders, symbol, since, limit)
|
637
741
|
|
742
|
+
def request_id(self):
|
743
|
+
ts = str(self.milliseconds())
|
744
|
+
randomNumber = self.rand_number(4)
|
745
|
+
randomPart = str(randomNumber)
|
746
|
+
return int(ts + randomPart)
|
747
|
+
|
638
748
|
async def watch_request(self, action, request):
|
749
|
+
messageHash = self.request_id()
|
750
|
+
messageHashStr = str(messageHash)
|
639
751
|
request['action'] = action
|
640
|
-
|
641
|
-
self.check_message_hash_does_not_exist(messageHash)
|
752
|
+
request['requestId'] = messageHash
|
642
753
|
url = self.urls['api']['ws']
|
643
|
-
return await self.watch(url,
|
754
|
+
return await self.watch(url, messageHashStr, request, messageHashStr)
|
644
755
|
|
645
756
|
async def fetch_open_orders_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
646
757
|
"""
|
@@ -653,7 +764,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
653
764
|
"""
|
654
765
|
await self.load_markets()
|
655
766
|
await self.authenticate()
|
656
|
-
request = {
|
767
|
+
request: dict = {
|
657
768
|
# 'market': market['id'], # rate limit 25 without a market, 1 with market specified
|
658
769
|
}
|
659
770
|
market = None
|
@@ -665,7 +776,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
665
776
|
|
666
777
|
async def fetch_my_trades_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
667
778
|
"""
|
668
|
-
|
779
|
+
|
780
|
+
https://docs.bitvavo.com/#tag/Trades
|
781
|
+
|
669
782
|
fetch all trades made by the user
|
670
783
|
:param str symbol: unified market symbol
|
671
784
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -703,12 +816,12 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
703
816
|
# }
|
704
817
|
#
|
705
818
|
#
|
706
|
-
action = self.safe_string(message, 'action')
|
707
|
-
response = self.
|
708
|
-
|
709
|
-
marketId = self.safe_string(firstRawTrade, 'market')
|
819
|
+
# action = self.safe_string(message, 'action')
|
820
|
+
response = self.safe_list(message, 'response')
|
821
|
+
# marketId = self.safe_string(firstRawTrade, 'market')
|
710
822
|
trades = self.parse_trades(response, None, None, None)
|
711
|
-
messageHash = self.build_message_hash(action, {'market': marketId})
|
823
|
+
# messageHash = self.build_message_hash(action, {'market': marketId})
|
824
|
+
messageHash = self.safe_string(message, 'requestId')
|
712
825
|
client.resolve(trades, messageHash)
|
713
826
|
|
714
827
|
async def withdraw_ws(self, code: str, amount, address, tag=None, params={}):
|
@@ -739,15 +852,18 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
739
852
|
# }
|
740
853
|
# }
|
741
854
|
#
|
742
|
-
action = self.safe_string(message, 'action')
|
743
|
-
messageHash = self.build_message_hash(action, message)
|
855
|
+
# action = self.safe_string(message, 'action')
|
856
|
+
# messageHash = self.build_message_hash(action, message)
|
857
|
+
messageHash = self.safe_string(message, 'requestId')
|
744
858
|
response = self.safe_value(message, 'response')
|
745
859
|
withdraw = self.parse_transaction(response)
|
746
860
|
client.resolve(withdraw, messageHash)
|
747
861
|
|
748
862
|
async def fetch_withdrawals_ws(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
749
863
|
"""
|
750
|
-
|
864
|
+
|
865
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1withdrawalHistory/get
|
866
|
+
|
751
867
|
fetch all withdrawals made from an account
|
752
868
|
:param str code: unified currency code
|
753
869
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
@@ -777,15 +893,18 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
777
893
|
# ]
|
778
894
|
# }
|
779
895
|
#
|
780
|
-
action = self.safe_string(message, 'action')
|
781
|
-
messageHash = self.build_message_hash(action, message)
|
782
|
-
response = self.
|
896
|
+
# action = self.safe_string(message, 'action')
|
897
|
+
# messageHash = self.build_message_hash(action, message)
|
898
|
+
response = self.safe_list(message, 'response')
|
899
|
+
messageHash = self.safe_string(message, 'requestId')
|
783
900
|
withdrawals = self.parse_transactions(response, None, None, None, {'type': 'withdrawal'})
|
784
901
|
client.resolve(withdrawals, messageHash)
|
785
902
|
|
786
903
|
async def fetch_ohlcv_ws(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
787
904
|
"""
|
788
|
-
|
905
|
+
|
906
|
+
https://docs.bitvavo.com/#tag/Market-Data/paths/~1{market}~1candles/get
|
907
|
+
|
789
908
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
790
909
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
791
910
|
:param str timeframe: the length of time each candle represents
|
@@ -802,7 +921,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
802
921
|
|
803
922
|
async def fetch_deposits_ws(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
804
923
|
"""
|
805
|
-
|
924
|
+
|
925
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1depositHistory/get
|
926
|
+
|
806
927
|
fetch all deposits made to an account
|
807
928
|
:param str code: unified currency code
|
808
929
|
:param int [since]: the earliest time in ms to fetch deposits for
|
@@ -832,15 +953,16 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
832
953
|
# ]
|
833
954
|
# }
|
834
955
|
#
|
835
|
-
action = self.safe_string(message, 'action')
|
836
|
-
messageHash = self.build_message_hash(action, message)
|
837
956
|
response = self.safe_value(message, 'response')
|
838
957
|
deposits = self.parse_transactions(response, None, None, None, {'type': 'deposit'})
|
958
|
+
messageHash = self.safe_string(message, 'requestId')
|
839
959
|
client.resolve(deposits, messageHash)
|
840
960
|
|
841
|
-
async def fetch_trading_fees_ws(self, params={}):
|
961
|
+
async def fetch_trading_fees_ws(self, params={}) -> TradingFees:
|
842
962
|
"""
|
843
|
-
|
963
|
+
|
964
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1account/get
|
965
|
+
|
844
966
|
fetch the trading fees for multiple markets
|
845
967
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
846
968
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
@@ -851,7 +973,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
851
973
|
|
852
974
|
async def fetch_markets_ws(self, params={}):
|
853
975
|
"""
|
854
|
-
|
976
|
+
|
977
|
+
https://docs.bitvavo.com/#tag/General/paths/~1markets/get
|
978
|
+
|
855
979
|
retrieves data on all markets for bitvavo
|
856
980
|
:param dict [params]: extra parameters specific to the exchange api endpoint
|
857
981
|
:returns dict[]: an array of objects representing market data
|
@@ -860,7 +984,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
860
984
|
|
861
985
|
async def fetch_currencies_ws(self, params={}):
|
862
986
|
"""
|
863
|
-
|
987
|
+
|
988
|
+
https://docs.bitvavo.com/#tag/General/paths/~1assets/get
|
989
|
+
|
864
990
|
fetches all available currencies on an exchange
|
865
991
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
866
992
|
:returns dict: an associative dictionary of currencies
|
@@ -889,10 +1015,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
889
1015
|
# ]
|
890
1016
|
# }
|
891
1017
|
#
|
892
|
-
|
893
|
-
messageHash = self.build_message_hash(action, message)
|
1018
|
+
messageHash = self.safe_string(message, 'requestId')
|
894
1019
|
response = self.safe_value(message, 'response')
|
895
|
-
currencies = self.
|
1020
|
+
currencies = self.parse_currencies(response)
|
896
1021
|
client.resolve(currencies, messageHash)
|
897
1022
|
|
898
1023
|
def handle_trading_fees(self, client, message):
|
@@ -908,15 +1033,16 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
908
1033
|
# }
|
909
1034
|
# }
|
910
1035
|
#
|
911
|
-
|
912
|
-
messageHash = self.build_message_hash(action, message)
|
1036
|
+
messageHash = self.safe_string(message, 'requestId')
|
913
1037
|
response = self.safe_value(message, 'response')
|
914
1038
|
fees = self.parse_trading_fees(response)
|
915
1039
|
client.resolve(fees, messageHash)
|
916
1040
|
|
917
1041
|
async def fetch_balance_ws(self, params={}) -> Balances:
|
918
1042
|
"""
|
919
|
-
|
1043
|
+
|
1044
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1balance/get
|
1045
|
+
|
920
1046
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
921
1047
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
922
1048
|
:returns dict: a `balance structure <https://docs.ccxt.com/en/latest/manual.html?#balance-structure>`
|
@@ -938,8 +1064,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
938
1064
|
# ]
|
939
1065
|
# }
|
940
1066
|
#
|
941
|
-
|
942
|
-
messageHash = self.build_message_hash(action, message)
|
1067
|
+
messageHash = self.safe_string(message, 'requestId')
|
943
1068
|
response = self.safe_value(message, 'response', [])
|
944
1069
|
balance = self.parse_balance(response)
|
945
1070
|
client.resolve(balance, messageHash)
|
@@ -973,10 +1098,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
973
1098
|
# }
|
974
1099
|
# }
|
975
1100
|
#
|
976
|
-
action = self.safe_string(message, 'action')
|
977
1101
|
response = self.safe_value(message, 'response', {})
|
978
1102
|
order = self.parse_order(response)
|
979
|
-
messageHash = self.
|
1103
|
+
messageHash = self.safe_string(message, 'requestId')
|
980
1104
|
client.resolve(order, messageHash)
|
981
1105
|
|
982
1106
|
def handle_markets(self, client: Client, message):
|
@@ -999,14 +1123,13 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
999
1123
|
# ]
|
1000
1124
|
# }
|
1001
1125
|
#
|
1002
|
-
action = self.safe_string(message, 'action')
|
1003
1126
|
response = self.safe_value(message, 'response', {})
|
1004
1127
|
markets = self.parse_markets(response)
|
1005
|
-
messageHash = self.
|
1128
|
+
messageHash = self.safe_string(message, 'requestId')
|
1006
1129
|
client.resolve(markets, messageHash)
|
1007
1130
|
|
1008
1131
|
def build_message_hash(self, action, params={}):
|
1009
|
-
methods = {
|
1132
|
+
methods: dict = {
|
1010
1133
|
'privateCreateOrder': self.action_and_market_message_hash,
|
1011
1134
|
'privateUpdateOrder': self.action_and_order_id_message_hash,
|
1012
1135
|
'privateCancelOrder': self.action_and_order_id_message_hash,
|
@@ -1019,15 +1142,6 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
1019
1142
|
messageHash = method(action, params)
|
1020
1143
|
return messageHash
|
1021
1144
|
|
1022
|
-
def check_message_hash_does_not_exist(self, messageHash):
|
1023
|
-
supressMultipleWsRequestsError = self.safe_bool(self.options, 'supressMultipleWsRequestsError', False)
|
1024
|
-
if not supressMultipleWsRequestsError:
|
1025
|
-
client = self.safe_value(self.clients, self.urls['api']['ws'])
|
1026
|
-
if client is not None:
|
1027
|
-
future = self.safe_value(client.futures, messageHash)
|
1028
|
-
if future is not None:
|
1029
|
-
raise ExchangeError(self.id + ' a similar request with messageHash ' + messageHash + ' is already pending, you must wait for a response, or turn off self error by setting supressMultipleWsRequestsError in the options to True')
|
1030
|
-
|
1031
1145
|
def action_and_market_message_hash(self, action, params={}):
|
1032
1146
|
symbol = self.safe_string(params, 'market', '')
|
1033
1147
|
return action + symbol
|
@@ -1110,7 +1224,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
1110
1224
|
# }
|
1111
1225
|
#
|
1112
1226
|
subscriptions = self.safe_value(message, 'subscriptions', {})
|
1113
|
-
methods = {
|
1227
|
+
methods: dict = {
|
1114
1228
|
'book': self.handle_order_book_subscriptions,
|
1115
1229
|
}
|
1116
1230
|
names = list(subscriptions.keys())
|
@@ -1133,7 +1247,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
1133
1247
|
auth = stringTimestamp + 'GET/' + self.version + '/websocket'
|
1134
1248
|
signature = self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha256)
|
1135
1249
|
action = 'authenticate'
|
1136
|
-
request = {
|
1250
|
+
request: dict = {
|
1137
1251
|
'action': action,
|
1138
1252
|
'key': self.apiKey,
|
1139
1253
|
'signature': signature,
|
@@ -1171,11 +1285,19 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
1171
1285
|
# errorCode: 217,
|
1172
1286
|
# error: 'Minimum order size in quote currency is 5 EUR or 0.001 BTC.'
|
1173
1287
|
# }
|
1288
|
+
# {
|
1289
|
+
# action: 'privateCreateOrder',
|
1290
|
+
# requestId: '17317539426571916',
|
1291
|
+
# market: 'USDT-EUR',
|
1292
|
+
# errorCode: 216,
|
1293
|
+
# error: 'You do not have sufficient balance to complete self operation.'
|
1294
|
+
# }
|
1174
1295
|
#
|
1175
1296
|
error = self.safe_string(message, 'error')
|
1176
1297
|
code = self.safe_integer(error, 'errorCode')
|
1177
1298
|
action = self.safe_string(message, 'action')
|
1178
|
-
|
1299
|
+
buildMessage = self.build_message_hash(action, message)
|
1300
|
+
messageHash = self.safe_string(message, 'requestId', buildMessage)
|
1179
1301
|
rejected = False
|
1180
1302
|
try:
|
1181
1303
|
self.handle_errors(code, error, client.url, None, None, error, message, None, None)
|
@@ -1232,7 +1354,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
1232
1354
|
error = self.safe_string(message, 'error')
|
1233
1355
|
if error is not None:
|
1234
1356
|
self.handle_error_message(client, message)
|
1235
|
-
methods = {
|
1357
|
+
methods: dict = {
|
1236
1358
|
'subscribed': self.handle_subscription_status,
|
1237
1359
|
'book': self.handle_order_book,
|
1238
1360
|
'getBook': self.handle_order_book_snapshot,
|