ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +25 -0
- ccxt/abstract/kucoinfutures.py +35 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3513 -1511
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3105 -881
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +239 -50
- ccxt/async_support/bitget.py +1513 -563
- ccxt/async_support/bithumb.py +201 -67
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +403 -150
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2326 -1255
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1455 -288
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +206 -89
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +467 -158
- ccxt/async_support/deribit.py +558 -324
- ccxt/async_support/digifinex.py +340 -223
- ccxt/async_support/ellipx.py +1826 -0
- ccxt/async_support/exmo.py +259 -128
- ccxt/async_support/gate.py +1473 -464
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +334 -178
- ccxt/async_support/hollaex.py +134 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +105 -56
- ccxt/async_support/hyperliquid.py +1634 -269
- ccxt/async_support/idex.py +148 -95
- ccxt/async_support/independentreserve.py +236 -31
- ccxt/async_support/indodax.py +165 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +1050 -355
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +138 -106
- ccxt/async_support/latoken.py +135 -79
- ccxt/async_support/lbank.py +290 -113
- ccxt/async_support/luno.py +112 -62
- ccxt/async_support/lykke.py +104 -55
- ccxt/async_support/mercado.py +36 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +43 -0
- ccxt/async_support/ndax.py +163 -82
- ccxt/async_support/novadax.py +121 -75
- ccxt/async_support/oceanex.py +175 -59
- ccxt/async_support/okcoin.py +222 -163
- ccxt/async_support/okx.py +1777 -455
- ccxt/async_support/onetrading.py +132 -414
- ccxt/async_support/oxfun.py +2832 -0
- ccxt/async_support/p2b.py +79 -51
- ccxt/async_support/paradex.py +2017 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1155 -295
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1729 -482
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3513 -1511
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3105 -881
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +239 -50
- ccxt/bitget.py +1513 -563
- ccxt/bithumb.py +200 -67
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +403 -150
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2326 -1255
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1455 -288
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +206 -89
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +467 -158
- ccxt/deribit.py +558 -324
- ccxt/digifinex.py +340 -223
- ccxt/ellipx.py +1826 -0
- ccxt/exmo.py +259 -128
- ccxt/gate.py +1473 -464
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +334 -178
- ccxt/hollaex.py +134 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +105 -56
- ccxt/hyperliquid.py +1633 -269
- ccxt/idex.py +148 -95
- ccxt/independentreserve.py +235 -31
- ccxt/indodax.py +165 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +1050 -355
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +138 -106
- ccxt/latoken.py +135 -79
- ccxt/lbank.py +290 -113
- ccxt/luno.py +112 -62
- ccxt/lykke.py +104 -55
- ccxt/mercado.py +36 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +43 -0
- ccxt/ndax.py +163 -82
- ccxt/novadax.py +121 -75
- ccxt/oceanex.py +175 -59
- ccxt/okcoin.py +222 -163
- ccxt/okx.py +1777 -455
- ccxt/onetrading.py +132 -414
- ccxt/oxfun.py +2831 -0
- ccxt/p2b.py +79 -51
- ccxt/paradex.py +2017 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +63 -15
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +138 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +204 -82
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -661
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +168 -32
- ccxt/pro/exmo.py +253 -21
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +93 -34
- ccxt/pro/poloniex.py +129 -50
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +93 -86
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +486 -70
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +465 -407
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +465 -409
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1155 -295
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.48.dist-info/METADATA +646 -0
- ccxt-4.4.48.dist-info/RECORD +669 -0
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.76.dist-info/METADATA +0 -626
- ccxt-4.2.76.dist-info/RECORD +0 -534
- {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
@@ -4,14 +4,14 @@
|
|
4
4
|
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
5
5
|
|
6
6
|
import ccxt.async_support
|
7
|
-
from ccxt.async_support.base.ws.cache import ArrayCache
|
7
|
+
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheByTimestamp
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Int, Market, OrderBook, Strings, Ticker, Trade
|
9
|
+
from ccxt.base.types import Int, Market, OrderBook, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade
|
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 NotSupported
|
14
13
|
from ccxt.base.errors import AuthenticationError
|
14
|
+
from ccxt.base.errors import NotSupported
|
15
15
|
|
16
16
|
|
17
17
|
class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
@@ -27,12 +27,12 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
27
27
|
'watchTicker': True,
|
28
28
|
'watchBalance': False,
|
29
29
|
'watchMyTrades': False,
|
30
|
-
'watchOHLCV':
|
30
|
+
'watchOHLCV': True,
|
31
31
|
'watchOHLCVForSymbols': False,
|
32
32
|
'watchOrders': False,
|
33
33
|
'watchOrdersForSymbols': False,
|
34
34
|
'watchPositions': False,
|
35
|
-
'watchTickers':
|
35
|
+
'watchTickers': True,
|
36
36
|
'createOrderWs': False,
|
37
37
|
'editOrderWs': False,
|
38
38
|
'cancelOrderWs': False,
|
@@ -58,6 +58,14 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
58
58
|
'tradesLimit': 1000,
|
59
59
|
'ordersLimit': 1000,
|
60
60
|
'myTradesLimit': 1000,
|
61
|
+
'timeframes': {
|
62
|
+
'1m': 'CANDLES_ONE_MINUTE',
|
63
|
+
'5m': 'CANDLES_FIVE_MINUTES',
|
64
|
+
'30m': 'CANDLES_THIRTY_MINUTES',
|
65
|
+
'1h': 'CANDLES_ONE_HOUR',
|
66
|
+
'2h': 'CANDLES_TWO_HOURS',
|
67
|
+
'1d': 'CANDLES_ONE_DAY',
|
68
|
+
},
|
61
69
|
},
|
62
70
|
'exceptions': {
|
63
71
|
'exact': {
|
@@ -68,26 +76,32 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
68
76
|
|
69
77
|
async def subscribe(self, name: str, symbols: Strings = None, params={}):
|
70
78
|
"""
|
71
|
-
|
79
|
+
@ignore
|
72
80
|
subscribes to a websocket channel
|
73
|
-
|
81
|
+
|
82
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
|
83
|
+
|
74
84
|
:param str name: the name of the channel
|
75
85
|
:param str[] [symbols]: unified market symbol
|
76
86
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
77
87
|
:returns dict: subscription to a websocket channel
|
78
88
|
"""
|
89
|
+
await self.load_markets()
|
79
90
|
self.check_required_credentials()
|
80
91
|
market = None
|
81
92
|
messageHash = name
|
82
|
-
productIds =
|
93
|
+
productIds = None
|
83
94
|
if symbols is None:
|
84
|
-
symbols = self.
|
95
|
+
symbols = self.get_active_symbols()
|
85
96
|
symbolsLength = len(symbols)
|
97
|
+
messageHashes = []
|
86
98
|
if symbolsLength > 1:
|
87
99
|
parsedSymbols = self.market_symbols(symbols)
|
88
100
|
marketIds = self.market_ids(parsedSymbols)
|
89
101
|
productIds = marketIds
|
90
|
-
|
102
|
+
for i in range(0, len(parsedSymbols)):
|
103
|
+
messageHashes.append(name + '::' + parsedSymbols[i])
|
104
|
+
# messageHash = messageHash + '::' + ','.join(parsedSymbols)
|
91
105
|
elif symbolsLength == 1:
|
92
106
|
market = self.market(symbols[0])
|
93
107
|
messageHash = name + '::' + market['symbol']
|
@@ -98,27 +112,34 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
98
112
|
timestamp = str(self.nonce())
|
99
113
|
auth = timestamp + self.apiKey + 'CBINTLMD' + self.password
|
100
114
|
signature = self.hmac(self.encode(auth), self.base64_to_binary(self.secret), hashlib.sha256, 'base64')
|
101
|
-
subscribe = {
|
115
|
+
subscribe: dict = {
|
102
116
|
'type': 'SUBSCRIBE',
|
103
|
-
'product_ids': productIds,
|
117
|
+
# 'product_ids': productIds,
|
104
118
|
'channels': [name],
|
105
119
|
'time': timestamp,
|
106
120
|
'key': self.apiKey,
|
107
121
|
'passphrase': self.password,
|
108
122
|
'signature': signature,
|
109
123
|
}
|
124
|
+
if productIds is not None:
|
125
|
+
subscribe['product_ids'] = productIds
|
126
|
+
if symbolsLength > 1:
|
127
|
+
return await self.watch_multiple(url, messageHashes, self.extend(subscribe, params), messageHashes)
|
110
128
|
return await self.watch(url, messageHash, self.extend(subscribe, params), messageHash)
|
111
129
|
|
112
130
|
async def subscribe_multiple(self, name: str, symbols: Strings = None, params={}):
|
113
131
|
"""
|
114
|
-
|
132
|
+
@ignore
|
115
133
|
subscribes to a websocket channel using watchMultiple
|
116
|
-
|
134
|
+
|
135
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
|
136
|
+
|
117
137
|
:param str name: the name of the channel
|
118
|
-
:param string|str[] [
|
138
|
+
:param string|str[] [symbols]: unified market symbol
|
119
139
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
120
140
|
:returns dict: subscription to a websocket channel
|
121
141
|
"""
|
142
|
+
await self.load_markets()
|
122
143
|
self.check_required_credentials()
|
123
144
|
if self.is_empty(symbols):
|
124
145
|
symbols = self.symbols
|
@@ -137,7 +158,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
137
158
|
timestamp = self.number_to_string(self.seconds())
|
138
159
|
auth = timestamp + self.apiKey + 'CBINTLMD' + self.password
|
139
160
|
signature = self.hmac(self.encode(auth), self.base64_to_binary(self.secret), hashlib.sha256, 'base64')
|
140
|
-
subscribe = {
|
161
|
+
subscribe: dict = {
|
141
162
|
'type': 'SUBSCRIBE',
|
142
163
|
'time': timestamp,
|
143
164
|
'product_ids': productIds,
|
@@ -148,38 +169,85 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
148
169
|
}
|
149
170
|
return await self.watch_multiple(url, messageHashes, self.extend(subscribe, params), messageHashes)
|
150
171
|
|
151
|
-
async def watch_funding_rate(self, symbol: str, params={}) ->
|
172
|
+
async def watch_funding_rate(self, symbol: str, params={}) -> FundingRate:
|
152
173
|
"""
|
153
174
|
watch the current funding rate
|
154
|
-
|
175
|
+
|
176
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
|
177
|
+
|
155
178
|
:param str symbol: unified market symbol
|
156
179
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
157
180
|
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
158
181
|
"""
|
182
|
+
await self.load_markets()
|
159
183
|
return await self.subscribe('RISK', [symbol], params)
|
160
184
|
|
161
|
-
async def watch_funding_rates(self, symbols: List[str], params={}) ->
|
185
|
+
async def watch_funding_rates(self, symbols: List[str], params={}) -> FundingRates:
|
162
186
|
"""
|
163
187
|
watch the funding rate for multiple markets
|
164
|
-
|
188
|
+
|
189
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
|
190
|
+
|
165
191
|
:param str[]|None symbols: list of unified market symbols
|
166
192
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
167
193
|
:returns dict: a dictionary of `funding rates structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexe by market symbols
|
168
194
|
"""
|
169
|
-
|
195
|
+
await self.load_markets()
|
196
|
+
fundingRate = await self.subscribe_multiple('RISK', symbols, params)
|
197
|
+
symbol = self.safe_string(fundingRate, 'symbol')
|
198
|
+
if self.newUpdates:
|
199
|
+
result: dict = {}
|
200
|
+
result[symbol] = fundingRate
|
201
|
+
return result
|
202
|
+
return self.filter_by_array(self.fundingRates, 'symbol', symbols)
|
170
203
|
|
171
204
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
172
205
|
"""
|
173
206
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
174
|
-
|
207
|
+
|
208
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
|
209
|
+
|
175
210
|
:param str [symbol]: unified symbol of the market to fetch the ticker for
|
176
211
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
212
|
+
:param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'LEVEL1'
|
177
213
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
178
214
|
"""
|
215
|
+
await self.load_markets()
|
179
216
|
channel = None
|
180
217
|
channel, params = self.handle_option_and_params(params, 'watchTicker', 'channel', 'LEVEL1')
|
181
218
|
return await self.subscribe(channel, [symbol], params)
|
182
219
|
|
220
|
+
def get_active_symbols(self):
|
221
|
+
symbols = self.symbols
|
222
|
+
output = []
|
223
|
+
for i in range(0, len(symbols)):
|
224
|
+
symbol = symbols[i]
|
225
|
+
market = self.markets[symbol]
|
226
|
+
if market['active']:
|
227
|
+
output.append(symbol)
|
228
|
+
return output
|
229
|
+
|
230
|
+
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
231
|
+
"""
|
232
|
+
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
233
|
+
|
234
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
|
235
|
+
|
236
|
+
:param str[] [symbols]: unified symbol of the market to fetch the ticker for
|
237
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
238
|
+
:param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'INSTLEVEL1UMENTS'
|
239
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
240
|
+
"""
|
241
|
+
await self.load_markets()
|
242
|
+
channel = None
|
243
|
+
channel, params = self.handle_option_and_params(params, 'watchTickers', 'channel', 'LEVEL1')
|
244
|
+
ticker = await self.subscribe(channel, symbols, params)
|
245
|
+
if self.newUpdates:
|
246
|
+
result: dict = {}
|
247
|
+
result[ticker['symbol']] = ticker
|
248
|
+
return result
|
249
|
+
return self.filter_by_array(self.tickers, 'symbol', symbols)
|
250
|
+
|
183
251
|
def handle_instrument(self, client: Client, message):
|
184
252
|
#
|
185
253
|
# {
|
@@ -237,6 +305,33 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
237
305
|
# "channel":"INSTRUMENTS",
|
238
306
|
# "type":"SNAPSHOT"
|
239
307
|
# }
|
308
|
+
# instruments
|
309
|
+
# {
|
310
|
+
# sequence: 0,
|
311
|
+
# instrument_type: 'PERP',
|
312
|
+
# instrument_mode: 'standard',
|
313
|
+
# base_asset_name: 'BTC',
|
314
|
+
# quote_asset_name: 'USDC',
|
315
|
+
# base_increment: '0.0001',
|
316
|
+
# quote_increment: '0.1',
|
317
|
+
# avg_daily_quantity: '502.8845',
|
318
|
+
# avg_daily_volume: '3.1495242961566668E7',
|
319
|
+
# total30_day_quantity: '15086.535',
|
320
|
+
# total30_day_volume: '9.44857288847E8',
|
321
|
+
# total24_hour_quantity: '5.0',
|
322
|
+
# total24_hour_volume: '337016.5',
|
323
|
+
# base_imf: '0.1',
|
324
|
+
# min_quantity: '0.0001',
|
325
|
+
# position_size_limit: '800',
|
326
|
+
# funding_interval: '3600000000000',
|
327
|
+
# trading_state: 'trading',
|
328
|
+
# last_updated_time: '2024-07-30T15:00:00Z',
|
329
|
+
# default_initial_margin: '0.2',
|
330
|
+
# base_asset_multiplier: '1.0',
|
331
|
+
# channel: 'INSTRUMENTS',
|
332
|
+
# type: 'SNAPSHOT',
|
333
|
+
# time: '2024-07-30T15:26:56.766Z',
|
334
|
+
# }
|
240
335
|
#
|
241
336
|
marketId = self.safe_string(ticker, 'product_id')
|
242
337
|
datetime = self.safe_string(ticker, 'time')
|
@@ -259,8 +354,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
259
354
|
'change': None,
|
260
355
|
'percentage': None,
|
261
356
|
'average': None,
|
262
|
-
'baseVolume': self.
|
263
|
-
'quoteVolume': self.
|
357
|
+
'baseVolume': self.safe_string_2(ticker, 'total_24_hour_quantity', 'total24_hour_quantity'),
|
358
|
+
'quoteVolume': self.safe_string_2(ticker, 'total_24_hour_volume', 'total24_hour_volume'),
|
264
359
|
})
|
265
360
|
|
266
361
|
def handle_ticker(self, client: Client, message):
|
@@ -332,10 +427,71 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
332
427
|
'previousClose': None,
|
333
428
|
})
|
334
429
|
|
430
|
+
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
431
|
+
"""
|
432
|
+
watches historical candlestick data containing the open, high, low, close price, and the volume of a market
|
433
|
+
|
434
|
+
https://docs.cdp.coinbase.com/intx/docs/websocket-channels#candles-channel
|
435
|
+
|
436
|
+
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
437
|
+
:param str timeframe: the length of time each candle represents
|
438
|
+
:param int [since]: timestamp in ms of the earliest candle to fetch
|
439
|
+
:param int [limit]: the maximum amount of candles to fetch
|
440
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
441
|
+
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
442
|
+
"""
|
443
|
+
await self.load_markets()
|
444
|
+
market = self.market(symbol)
|
445
|
+
symbol = market['symbol']
|
446
|
+
options = self.safe_dict(self.options, 'timeframes', {})
|
447
|
+
interval = self.safe_string(options, timeframe, timeframe)
|
448
|
+
ohlcv = await self.subscribe(interval, [symbol], params)
|
449
|
+
if self.newUpdates:
|
450
|
+
limit = ohlcv.getLimit(symbol, limit)
|
451
|
+
return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
|
452
|
+
|
453
|
+
def handle_ohlcv(self, client: Client, message):
|
454
|
+
#
|
455
|
+
# {
|
456
|
+
# "sequence": 0,
|
457
|
+
# "product_id": "BTC-PERP",
|
458
|
+
# "channel": "CANDLES_ONE_MINUTE",
|
459
|
+
# "type": "SNAPSHOT",
|
460
|
+
# "candles": [
|
461
|
+
# {
|
462
|
+
# "time": "2023-05-10T14:58:47.000Z",
|
463
|
+
# "low": "28787.8",
|
464
|
+
# "high": "28788.8",
|
465
|
+
# "open": "28788.8",
|
466
|
+
# "close": "28787.8",
|
467
|
+
# "volume": "0.466"
|
468
|
+
# },
|
469
|
+
# ]
|
470
|
+
# }
|
471
|
+
#
|
472
|
+
messageHash = self.safe_string(message, 'channel')
|
473
|
+
marketId = self.safe_string(message, 'product_id')
|
474
|
+
market = self.safe_market(marketId)
|
475
|
+
symbol = market['symbol']
|
476
|
+
timeframe = self.find_timeframe(messageHash)
|
477
|
+
self.ohlcvs[symbol] = self.safe_value(self.ohlcvs, symbol, {})
|
478
|
+
if self.safe_value(self.ohlcvs[symbol], timeframe) is None:
|
479
|
+
limit = self.safe_integer(self.options, 'OHLCVLimit', 1000)
|
480
|
+
self.ohlcvs[symbol][timeframe] = ArrayCacheByTimestamp(limit)
|
481
|
+
stored = self.ohlcvs[symbol][timeframe]
|
482
|
+
data = self.safe_list(message, 'candles', [])
|
483
|
+
for i in range(0, len(data)):
|
484
|
+
tick = data[i]
|
485
|
+
parsed = self.parse_ohlcv(tick, market)
|
486
|
+
stored.append(parsed)
|
487
|
+
client.resolve(stored, messageHash + '::' + symbol)
|
488
|
+
|
335
489
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
336
490
|
"""
|
337
491
|
get the list of most recent trades for a particular symbol
|
338
|
-
|
492
|
+
|
493
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
|
494
|
+
|
339
495
|
:param str symbol: unified symbol of the market to fetch trades for
|
340
496
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
341
497
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -424,7 +580,9 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
424
580
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
425
581
|
"""
|
426
582
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
427
|
-
|
583
|
+
|
584
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
|
585
|
+
|
428
586
|
:param str symbol: unified symbol of the market to fetch the order book for
|
429
587
|
:param int [limit]: the maximum amount of order book entries to return
|
430
588
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -435,8 +593,10 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
435
593
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
436
594
|
"""
|
437
595
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
438
|
-
|
439
|
-
|
596
|
+
|
597
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
|
598
|
+
|
599
|
+
:param str[] symbols:
|
440
600
|
:param int [limit]: the maximum amount of order book entries to return
|
441
601
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
442
602
|
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
@@ -566,6 +726,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
566
726
|
#
|
567
727
|
channel = self.safe_string(message, 'channel')
|
568
728
|
fundingRate = self.parse_funding_rate(message)
|
729
|
+
self.fundingRates[fundingRate['symbol']] = fundingRate
|
569
730
|
client.resolve(fundingRate, channel + '::' + fundingRate['symbol'])
|
570
731
|
|
571
732
|
def handle_error_message(self, client: Client, message):
|
@@ -594,8 +755,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
594
755
|
def handle_message(self, client, message):
|
595
756
|
if self.handle_error_message(client, message):
|
596
757
|
return
|
597
|
-
channel = self.safe_string(message, 'channel')
|
598
|
-
methods = {
|
758
|
+
channel = self.safe_string(message, 'channel', '')
|
759
|
+
methods: dict = {
|
599
760
|
'SUBSCRIPTIONS': self.handle_subscription_status,
|
600
761
|
'INSTRUMENTS': self.handle_instrument,
|
601
762
|
'LEVEL1': self.handle_ticker,
|
@@ -608,6 +769,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
608
769
|
if type == 'error':
|
609
770
|
errorMessage = self.safe_string(message, 'message')
|
610
771
|
raise ExchangeError(errorMessage)
|
772
|
+
if channel.find('CANDLES') > -1:
|
773
|
+
self.handle_ohlcv(client, message)
|
611
774
|
method = self.safe_value(methods, channel)
|
612
775
|
if method is not None:
|
613
776
|
method(client, message)
|