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/poloniex.py
CHANGED
@@ -10,9 +10,9 @@ from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, Ord
|
|
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 AuthenticationError
|
13
14
|
from ccxt.base.errors import BadRequest
|
14
15
|
from ccxt.base.errors import InvalidOrder
|
15
|
-
from ccxt.base.errors import AuthenticationError
|
16
16
|
from ccxt.base.precise import Precise
|
17
17
|
|
18
18
|
|
@@ -27,6 +27,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
27
27
|
'watchTicker': True,
|
28
28
|
'watchTickers': True,
|
29
29
|
'watchTrades': True,
|
30
|
+
'watchTradesForSymbols': True,
|
30
31
|
'watchBalance': True,
|
31
32
|
'watchStatus': False,
|
32
33
|
'watchOrders': True,
|
@@ -84,9 +85,11 @@ class poloniex(ccxt.async_support.poloniex):
|
|
84
85
|
|
85
86
|
async def authenticate(self, params={}):
|
86
87
|
"""
|
87
|
-
|
88
|
+
@ignore
|
88
89
|
authenticates the user to access private web socket channels
|
89
|
-
|
90
|
+
|
91
|
+
https://api-docs.poloniex.com/spot/websocket/authentication
|
92
|
+
|
90
93
|
:returns dict: response from exchange
|
91
94
|
"""
|
92
95
|
self.check_required_credentials()
|
@@ -99,7 +102,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
99
102
|
accessPath = '/ws'
|
100
103
|
requestString = 'GET\n' + accessPath + '\nsignTimestamp=' + timestamp
|
101
104
|
signature = self.hmac(self.encode(requestString), self.encode(self.secret), hashlib.sha256, 'base64')
|
102
|
-
request = {
|
105
|
+
request: dict = {
|
103
106
|
'event': 'subscribe',
|
104
107
|
'channel': ['auth'],
|
105
108
|
'params': {
|
@@ -137,17 +140,18 @@ class poloniex(ccxt.async_support.poloniex):
|
|
137
140
|
|
138
141
|
async def subscribe(self, name: str, messageHash: str, isPrivate: bool, symbols: Strings = None, params={}):
|
139
142
|
"""
|
140
|
-
|
143
|
+
@ignore
|
141
144
|
Connects to a websocket channel
|
142
145
|
:param str name: name of the channel
|
146
|
+
:param str messageHash: unique identifier for the message
|
143
147
|
:param boolean isPrivate: True for the authenticated url, False for the public url
|
144
|
-
:param str[]
|
148
|
+
:param str[] [symbols]: CCXT market symbols
|
145
149
|
:param dict [params]: extra parameters specific to the poloniex api
|
146
150
|
:returns dict: data from the websocket stream
|
147
151
|
"""
|
148
152
|
publicOrPrivate = 'private' if isPrivate else 'public'
|
149
153
|
url = self.urls['api']['ws'][publicOrPrivate]
|
150
|
-
subscribe = {
|
154
|
+
subscribe: dict = {
|
151
155
|
'event': 'subscribe',
|
152
156
|
'channel': [
|
153
157
|
name,
|
@@ -166,16 +170,15 @@ class poloniex(ccxt.async_support.poloniex):
|
|
166
170
|
|
167
171
|
async def trade_request(self, name: str, params={}):
|
168
172
|
"""
|
169
|
-
|
173
|
+
@ignore
|
170
174
|
Connects to a websocket channel
|
171
175
|
:param str name: name of the channel
|
172
|
-
:param str[]|None symbols: CCXT market symbols
|
173
176
|
:param dict [params]: extra parameters specific to the poloniex api
|
174
177
|
:returns dict: data from the websocket stream
|
175
178
|
"""
|
176
179
|
url = self.urls['api']['ws']['private']
|
177
180
|
messageHash = str(self.nonce())
|
178
|
-
subscribe = {
|
181
|
+
subscribe: dict = {
|
179
182
|
'id': messageHash,
|
180
183
|
'event': name,
|
181
184
|
'params': params,
|
@@ -184,19 +187,21 @@ class poloniex(ccxt.async_support.poloniex):
|
|
184
187
|
|
185
188
|
async def create_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
|
186
189
|
"""
|
187
|
-
|
190
|
+
|
191
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#create-order
|
192
|
+
|
188
193
|
create a trade order
|
189
194
|
:param str symbol: unified symbol of the market to create an order in
|
190
195
|
:param str type: 'market' or 'limit'
|
191
196
|
:param str side: 'buy' or 'sell'
|
192
197
|
:param float amount: how much of currency you want to trade in units of base currency
|
193
|
-
:param float [price]: the price at which the order is to be
|
198
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
194
199
|
:param dict [params]: extra parameters specific to the poloniex api endpoint
|
195
200
|
:param str [params.timeInForce]: GTC(default), IOC, FOK
|
196
201
|
:param str [params.clientOrderId]: Maximum 64-character length.*
|
197
202
|
:param float [params.cost]: *spot market buy only* the quote quantity that can be used alternative for the amount
|
198
|
-
|
199
|
-
|
203
|
+
|
204
|
+
EXCHANGE SPECIFIC PARAMETERS
|
200
205
|
:param str [params.amount]: quote units for the order
|
201
206
|
:param boolean [params.allowBorrow]: allow order to be placed by borrowing funds(Default: False)
|
202
207
|
:param str [params.stpMode]: self-trade prevention, defaults to expire_taker, none: enable self-trade; expire_taker: taker order will be canceled when self-trade happens
|
@@ -211,7 +216,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
211
216
|
isPostOnly = self.is_post_only(uppercaseType == 'MARKET', uppercaseType == 'LIMIT_MAKER', params)
|
212
217
|
if isPostOnly:
|
213
218
|
uppercaseType = 'LIMIT_MAKER'
|
214
|
-
request = {
|
219
|
+
request: dict = {
|
215
220
|
'symbol': market['id'],
|
216
221
|
'side': side.upper(),
|
217
222
|
'type': type.upper(),
|
@@ -243,7 +248,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
243
248
|
|
244
249
|
async def cancel_order_ws(self, id: str, symbol: Str = None, params={}):
|
245
250
|
"""
|
246
|
-
|
251
|
+
|
252
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#cancel-multiple-orders
|
253
|
+
|
247
254
|
cancel multiple orders
|
248
255
|
:param str id: order id
|
249
256
|
:param str [symbol]: unified market symbol
|
@@ -259,7 +266,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
259
266
|
|
260
267
|
async def cancel_orders_ws(self, ids: List[str], symbol: Str = None, params={}):
|
261
268
|
"""
|
262
|
-
|
269
|
+
|
270
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#cancel-multiple-orders
|
271
|
+
|
263
272
|
cancel multiple orders
|
264
273
|
:param str[] ids: order ids
|
265
274
|
:param str symbol: unified market symbol, default is None
|
@@ -269,14 +278,16 @@ class poloniex(ccxt.async_support.poloniex):
|
|
269
278
|
"""
|
270
279
|
await self.load_markets()
|
271
280
|
await self.authenticate()
|
272
|
-
request = {
|
281
|
+
request: dict = {
|
273
282
|
'orderIds': ids,
|
274
283
|
}
|
275
284
|
return await self.trade_request('cancelOrders', self.extend(request, params))
|
276
285
|
|
277
286
|
async def cancel_all_orders_ws(self, symbol: Str = None, params={}):
|
278
287
|
"""
|
279
|
-
|
288
|
+
|
289
|
+
https://api-docs.poloniex.com/spot/websocket/trade-request#cancel-all-orders
|
290
|
+
|
280
291
|
cancel all open orders of a type. Only applicable to Option in Portfolio Margin mode, and MMP privilege is required.
|
281
292
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
282
293
|
:param dict [params]: extra parameters specific to the poloniex api endpoint
|
@@ -298,7 +309,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
298
309
|
# }]
|
299
310
|
# }
|
300
311
|
#
|
301
|
-
messageHash = self.
|
312
|
+
messageHash = self.safe_string(message, 'id')
|
302
313
|
data = self.safe_value(message, 'data', [])
|
303
314
|
orders = []
|
304
315
|
for i in range(0, len(data)):
|
@@ -310,7 +321,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
310
321
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
311
322
|
"""
|
312
323
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
313
|
-
|
324
|
+
|
325
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#candlesticks
|
326
|
+
|
314
327
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
315
328
|
:param str timeframe: the length of time each candle represents
|
316
329
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -331,7 +344,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
331
344
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
332
345
|
"""
|
333
346
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
334
|
-
|
347
|
+
|
348
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#ticker
|
349
|
+
|
335
350
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
336
351
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
337
352
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -344,8 +359,10 @@ class poloniex(ccxt.async_support.poloniex):
|
|
344
359
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
345
360
|
"""
|
346
361
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
347
|
-
|
348
|
-
|
362
|
+
|
363
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#ticker
|
364
|
+
|
365
|
+
:param str[] symbols:
|
349
366
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
350
367
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
351
368
|
"""
|
@@ -360,25 +377,59 @@ class poloniex(ccxt.async_support.poloniex):
|
|
360
377
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
361
378
|
"""
|
362
379
|
get the list of most recent trades for a particular symbol
|
363
|
-
|
380
|
+
|
381
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#trades
|
382
|
+
|
364
383
|
:param str symbol: unified symbol of the market to fetch trades for
|
365
384
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
366
385
|
:param int [limit]: the maximum amount of trades to fetch
|
367
386
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
368
387
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
369
388
|
"""
|
389
|
+
return await self.watch_trades_for_symbols([symbol], since, limit, params)
|
390
|
+
|
391
|
+
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
392
|
+
"""
|
393
|
+
get the list of most recent trades for a list of symbols
|
394
|
+
|
395
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#trades
|
396
|
+
|
397
|
+
:param str[] symbols: unified symbol of the market to fetch trades for
|
398
|
+
:param int [since]: timestamp in ms of the earliest trade to fetch
|
399
|
+
:param int [limit]: the maximum amount of trades to fetch
|
400
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
401
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
402
|
+
"""
|
370
403
|
await self.load_markets()
|
371
|
-
|
404
|
+
symbols = self.market_symbols(symbols, None, False, True, True)
|
372
405
|
name = 'trades'
|
373
|
-
|
406
|
+
url = self.urls['api']['ws']['public']
|
407
|
+
marketIds = self.market_ids(symbols)
|
408
|
+
subscribe: dict = {
|
409
|
+
'event': 'subscribe',
|
410
|
+
'channel': [
|
411
|
+
name,
|
412
|
+
],
|
413
|
+
'symbols': marketIds,
|
414
|
+
}
|
415
|
+
request = self.extend(subscribe, params)
|
416
|
+
messageHashes = []
|
417
|
+
if symbols is not None:
|
418
|
+
for i in range(0, len(symbols)):
|
419
|
+
messageHashes.append(name + '::' + symbols[i])
|
420
|
+
trades = await self.watch_multiple(url, messageHashes, request, messageHashes)
|
374
421
|
if self.newUpdates:
|
375
|
-
|
422
|
+
first = self.safe_value(trades, 0)
|
423
|
+
tradeSymbol = self.safe_string(first, 'symbol')
|
424
|
+
limit = trades.getLimit(tradeSymbol, limit)
|
376
425
|
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
377
426
|
|
378
427
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
379
428
|
"""
|
380
429
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
381
|
-
|
430
|
+
|
431
|
+
https://api-docs.poloniex.com/spot/websocket/market-data#book-level-2
|
432
|
+
|
382
433
|
:param str symbol: unified symbol of the market to fetch the order book for
|
383
434
|
:param int [limit]: not used by poloniex watchOrderBook
|
384
435
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -394,7 +445,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
394
445
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
395
446
|
"""
|
396
447
|
watches information on multiple orders made by the user
|
397
|
-
|
448
|
+
|
449
|
+
https://api-docs.poloniex.com/spot/websocket/order
|
450
|
+
|
398
451
|
:param str symbol: unified market symbol of the market orders were made in
|
399
452
|
:param int [since]: not used by poloniex watchOrders
|
400
453
|
:param int [limit]: not used by poloniex watchOrders
|
@@ -415,7 +468,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
415
468
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
416
469
|
"""
|
417
470
|
watches information on multiple trades made by the user using orders stream
|
418
|
-
|
471
|
+
|
472
|
+
https://api-docs.poloniex.com/spot/websocket/order
|
473
|
+
|
419
474
|
:param str symbol: unified market symbol of the market orders were made in
|
420
475
|
:param int [since]: not used by poloniex watchMyTrades
|
421
476
|
:param int [limit]: not used by poloniex watchMyTrades
|
@@ -437,7 +492,9 @@ class poloniex(ccxt.async_support.poloniex):
|
|
437
492
|
async def watch_balance(self, params={}) -> Balances:
|
438
493
|
"""
|
439
494
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
440
|
-
|
495
|
+
|
496
|
+
https://api-docs.poloniex.com/spot/websocket/balance
|
497
|
+
|
441
498
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
442
499
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
443
500
|
"""
|
@@ -606,8 +663,8 @@ class poloniex(ccxt.async_support.poloniex):
|
|
606
663
|
'type': self.safe_string_lower(trade, 'type'),
|
607
664
|
'side': self.safe_string_lower_2(trade, 'takerSide', 'side'),
|
608
665
|
'takerOrMaker': takerMaker,
|
609
|
-
'price': self.omit_zero(self.
|
610
|
-
'amount': self.omit_zero(self.
|
666
|
+
'price': self.omit_zero(self.safe_string_2(trade, 'tradePrice', 'price')),
|
667
|
+
'amount': self.omit_zero(self.safe_string_2(trade, 'filledQuantity', 'quantity')),
|
611
668
|
'cost': self.safe_string_2(trade, 'amount', 'filledAmount'),
|
612
669
|
'fee': {
|
613
670
|
'rate': None,
|
@@ -617,7 +674,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
617
674
|
}, market)
|
618
675
|
|
619
676
|
def parse_status(self, status):
|
620
|
-
statuses = {
|
677
|
+
statuses: dict = {
|
621
678
|
'NEW': 'open',
|
622
679
|
'PARTIALLY_FILLED': 'open',
|
623
680
|
'FILLED': 'closed',
|
@@ -880,7 +937,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
880
937
|
# }
|
881
938
|
#
|
882
939
|
data = self.safe_value(message, 'data', [])
|
883
|
-
newTickers = {}
|
940
|
+
newTickers: dict = {}
|
884
941
|
for i in range(0, len(data)):
|
885
942
|
item = data[i]
|
886
943
|
marketId = self.safe_string(item, 'symbol')
|
@@ -1032,7 +1089,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
1032
1089
|
#
|
1033
1090
|
firstBalance = self.safe_value(response, 0, {})
|
1034
1091
|
timestamp = self.safe_integer(firstBalance, 'ts')
|
1035
|
-
result = {
|
1092
|
+
result: dict = {
|
1036
1093
|
'info': response,
|
1037
1094
|
'timestamp': timestamp,
|
1038
1095
|
'datetime': self.iso8601(timestamp),
|
@@ -1070,7 +1127,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
1070
1127
|
event = self.safe_string(message, 'event')
|
1071
1128
|
if event == 'pong':
|
1072
1129
|
client.lastPong = self.milliseconds()
|
1073
|
-
methods = {
|
1130
|
+
methods: dict = {
|
1074
1131
|
'candles_minute_1': self.handle_ohlcv,
|
1075
1132
|
'candles_minute_5': self.handle_ohlcv,
|
1076
1133
|
'candles_minute_10': self.handle_ohlcv,
|
@@ -1100,13 +1157,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
1100
1157
|
if type == 'auth':
|
1101
1158
|
self.handle_authenticate(client, message)
|
1102
1159
|
elif type is None:
|
1103
|
-
|
1104
|
-
item = self.safe_value(data, 0)
|
1105
|
-
orderId = self.safe_string(item, 'orderId')
|
1106
|
-
if orderId == '0':
|
1107
|
-
self.handle_error_message(client, item)
|
1108
|
-
else:
|
1109
|
-
self.handle_order_request(client, message)
|
1160
|
+
self.handle_order_request(client, message)
|
1110
1161
|
else:
|
1111
1162
|
data = self.safe_value(message, 'data', [])
|
1112
1163
|
dataLength = len(data)
|
@@ -1131,12 +1182,40 @@ class poloniex(ccxt.async_support.poloniex):
|
|
1131
1182
|
# "event": "error",
|
1132
1183
|
# "message": "Platform in maintenance mode"
|
1133
1184
|
# }
|
1185
|
+
# {
|
1186
|
+
# "id":"1722386782048",
|
1187
|
+
# "data":[
|
1188
|
+
# {
|
1189
|
+
# "orderId":0,
|
1190
|
+
# "clientOrderId":null,
|
1191
|
+
# "message":"available insufficient",
|
1192
|
+
# "code":21721
|
1193
|
+
# }
|
1194
|
+
# ]
|
1195
|
+
# }
|
1134
1196
|
#
|
1197
|
+
id = self.safe_string(message, 'id')
|
1135
1198
|
event = self.safe_string(message, 'event')
|
1136
|
-
|
1199
|
+
data = self.safe_list(message, 'data')
|
1200
|
+
first = self.safe_dict(data, 0)
|
1201
|
+
orderId = self.safe_string(first, 'orderId')
|
1137
1202
|
if (event == 'error') or (orderId == '0'):
|
1138
|
-
|
1139
|
-
|
1203
|
+
try:
|
1204
|
+
error = self.safe_string(first, 'message')
|
1205
|
+
code = self.safe_string(first, 'code')
|
1206
|
+
feedback = self.id + ' ' + self.json(message)
|
1207
|
+
self.throw_exactly_matched_exception(self.exceptions['exact'], code, feedback)
|
1208
|
+
self.throw_broadly_matched_exception(self.exceptions['broad'], error, feedback)
|
1209
|
+
raise ExchangeError(feedback)
|
1210
|
+
except Exception as e:
|
1211
|
+
if isinstance(e, AuthenticationError):
|
1212
|
+
messageHash = 'authenticated'
|
1213
|
+
client.reject(e, messageHash)
|
1214
|
+
if messageHash in client.subscriptions:
|
1215
|
+
del client.subscriptions[messageHash]
|
1216
|
+
else:
|
1217
|
+
client.reject(e, id)
|
1218
|
+
return True
|
1140
1219
|
return False
|
1141
1220
|
|
1142
1221
|
def handle_authenticate(self, client: Client, message):
|
@@ -1160,7 +1239,7 @@ class poloniex(ccxt.async_support.poloniex):
|
|
1160
1239
|
del client.subscriptions[messageHash]
|
1161
1240
|
return message
|
1162
1241
|
|
1163
|
-
def ping(self, client):
|
1242
|
+
def ping(self, client: Client):
|
1164
1243
|
return {
|
1165
1244
|
'event': 'ping',
|
1166
1245
|
}
|
ccxt/pro/poloniexfutures.py
CHANGED
@@ -8,9 +8,9 @@ from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
|
|
8
8
|
from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Ticker, Trade
|
9
9
|
from ccxt.async_support.base.ws.client import Client
|
10
10
|
from typing import List
|
11
|
-
from ccxt.base.errors import ExchangeError
|
12
|
-
from ccxt.base.errors import BadRequest
|
13
11
|
from ccxt.base.errors import AuthenticationError
|
12
|
+
from ccxt.base.errors import BadRequest
|
13
|
+
from ccxt.base.errors import ChecksumError
|
14
14
|
|
15
15
|
|
16
16
|
class poloniexfutures(ccxt.async_support.poloniexfutures):
|
@@ -33,6 +33,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
33
33
|
'watchTicker': True,
|
34
34
|
'watchTickers': False,
|
35
35
|
'watchTrades': True,
|
36
|
+
'watchTradesForSymbols': False,
|
36
37
|
'watchBalance': True,
|
37
38
|
'watchOrders': True,
|
38
39
|
'watchMyTrades': False,
|
@@ -57,6 +58,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
57
58
|
'method': '/contractMarket/level2', # can also be '/contractMarket/level3v2'
|
58
59
|
'snapshotDelay': 5,
|
59
60
|
'snapshotMaxRetries': 3,
|
61
|
+
'checksum': True,
|
60
62
|
},
|
61
63
|
'streamLimit': 5, # called tunnels by poloniexfutures docs
|
62
64
|
'streamBySubscriptionsHash': {},
|
@@ -135,7 +137,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
135
137
|
|
136
138
|
async def subscribe(self, name: str, isPrivate: bool, symbol: Str = None, subscription=None, params={}):
|
137
139
|
"""
|
138
|
-
|
140
|
+
@ignore
|
139
141
|
Connects to a websocket channel
|
140
142
|
:param str name: name of the channel and suscriptionHash
|
141
143
|
:param bool isPrivate: True for the authenticated url, False for the public url
|
@@ -152,7 +154,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
152
154
|
messageHash = name
|
153
155
|
tunnelId = await self.stream(url, messageHash)
|
154
156
|
requestId = self.request_id()
|
155
|
-
subscribe = {
|
157
|
+
subscribe: dict = {
|
156
158
|
'id': requestId,
|
157
159
|
'type': 'subscribe',
|
158
160
|
'topic': name, # Subscribed topic. Some topics support subscribe to the data of multiple trading pairs through ",".
|
@@ -160,7 +162,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
160
162
|
'response': True, # Whether the server needs to return the receipt information of self subscription or not. Set by default.
|
161
163
|
'tunnelId': tunnelId,
|
162
164
|
}
|
163
|
-
subscriptionRequest = {
|
165
|
+
subscriptionRequest: dict = {
|
164
166
|
'id': requestId,
|
165
167
|
}
|
166
168
|
if subscription is None:
|
@@ -187,13 +189,13 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
187
189
|
stream = 'stream-' + streamIndexString
|
188
190
|
self.options['streamBySubscriptionsHash'][subscriptionHash] = stream
|
189
191
|
messageHash = 'tunnel:' + stream
|
190
|
-
request = {
|
192
|
+
request: dict = {
|
191
193
|
'id': messageHash,
|
192
194
|
'type': 'openTunnel',
|
193
195
|
'newTunnelId': stream,
|
194
196
|
'response': True,
|
195
197
|
}
|
196
|
-
subscription = {
|
198
|
+
subscription: dict = {
|
197
199
|
'id': messageHash,
|
198
200
|
'method': self.handle_new_stream,
|
199
201
|
}
|
@@ -233,7 +235,9 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
233
235
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
234
236
|
"""
|
235
237
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
236
|
-
|
238
|
+
|
239
|
+
https://api-docs.poloniex.com/futures/websocket/public#get-real-time-symbol-ticker
|
240
|
+
|
237
241
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
238
242
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
239
243
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -246,7 +250,9 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
246
250
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
247
251
|
"""
|
248
252
|
get the list of most recent trades for a particular symbol
|
249
|
-
|
253
|
+
|
254
|
+
https://api-docs.poloniex.com/futures/websocket/public#full-matching-engine-datalevel-3
|
255
|
+
|
250
256
|
:param str symbol: unified symbol of the market to fetch trades for
|
251
257
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
252
258
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -266,7 +272,9 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
266
272
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
267
273
|
"""
|
268
274
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
269
|
-
|
275
|
+
|
276
|
+
https://api-docs.poloniex.com/futures/websocket/public#level-2-market-data
|
277
|
+
|
270
278
|
:param str symbol: unified symbol of the market to fetch the order book for
|
271
279
|
:param int [limit]: not used by poloniexfutures watchOrderBook
|
272
280
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -281,7 +289,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
281
289
|
if limit != 5 and limit != 50:
|
282
290
|
raise BadRequest(self.id + ' watchOrderBook limit argument must be none, 5 or 50 if using method /contractMarket/level2')
|
283
291
|
name += 'Depth' + self.number_to_string(limit)
|
284
|
-
subscription = {
|
292
|
+
subscription: dict = {
|
285
293
|
'symbol': symbol,
|
286
294
|
'limit': limit,
|
287
295
|
'method': self.handle_order_book_subscription,
|
@@ -292,7 +300,9 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
292
300
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
293
301
|
"""
|
294
302
|
watches information on multiple orders made by the user
|
295
|
-
|
303
|
+
|
304
|
+
https://api-docs.poloniex.com/futures/websocket/user-messages#private-messages
|
305
|
+
|
296
306
|
:param str symbol: filter by unified market symbol of the market orders were made in
|
297
307
|
:param int [since]: the earliest time in ms to fetch orders for
|
298
308
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -315,7 +325,9 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
315
325
|
async def watch_balance(self, params={}) -> Balances:
|
316
326
|
"""
|
317
327
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
318
|
-
|
328
|
+
|
329
|
+
https://api-docs.poloniex.com/futures/websocket/user-messages#account-balance-events
|
330
|
+
|
319
331
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
320
332
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
321
333
|
"""
|
@@ -512,19 +524,19 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
512
524
|
|
513
525
|
def parse_order_status(self, status: str, type: str):
|
514
526
|
"""
|
515
|
-
|
527
|
+
@ignore
|
516
528
|
:param str status: "match", "open", "done"
|
517
529
|
:param str type: "open", "match", "filled", "canceled", "update"
|
518
530
|
:returns str:
|
519
531
|
"""
|
520
|
-
types = {
|
532
|
+
types: dict = {
|
521
533
|
'canceled': 'canceled',
|
522
534
|
'cancel': 'canceled',
|
523
535
|
'filled': 'closed',
|
524
536
|
}
|
525
537
|
parsedStatus = self.safe_string(types, type)
|
526
538
|
if parsedStatus is None:
|
527
|
-
statuses = {
|
539
|
+
statuses: dict = {
|
528
540
|
'open': 'open',
|
529
541
|
'match': 'open',
|
530
542
|
'done': 'closed',
|
@@ -809,26 +821,35 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
809
821
|
def handle_delta(self, orderbook, delta):
|
810
822
|
#
|
811
823
|
# {
|
812
|
-
#
|
813
|
-
#
|
814
|
-
#
|
815
|
-
#
|
824
|
+
# sequence: 123677914,
|
825
|
+
# lastSequence: 123677913,
|
826
|
+
# change: '80.36,buy,4924',
|
827
|
+
# changes: ['80.19,buy,0',"80.15,buy,10794"],
|
828
|
+
# timestamp: 1715643483528
|
829
|
+
# },
|
816
830
|
#
|
817
831
|
sequence = self.safe_integer(delta, 'sequence')
|
832
|
+
lastSequence = self.safe_integer(delta, 'lastSequence')
|
818
833
|
nonce = self.safe_integer(orderbook, 'nonce')
|
819
|
-
if nonce
|
820
|
-
|
821
|
-
|
822
|
-
|
823
|
-
|
824
|
-
|
825
|
-
|
834
|
+
if nonce > sequence:
|
835
|
+
return
|
836
|
+
if nonce != lastSequence:
|
837
|
+
checksum = self.handle_option('watchOrderBook', 'checksum', True)
|
838
|
+
if checksum:
|
839
|
+
raise ChecksumError(self.id + ' ' + self.orderbook_checksum_message(''))
|
840
|
+
changes = self.safe_list(delta, 'changes')
|
841
|
+
for i in range(0, len(changes)):
|
842
|
+
change = changes[i]
|
843
|
+
splitChange = change.split(',')
|
844
|
+
price = self.safe_number(splitChange, 0)
|
845
|
+
side = self.safe_string(splitChange, 1)
|
846
|
+
size = self.safe_number(splitChange, 2)
|
847
|
+
orderBookSide = orderbook['bids'] if (side == 'buy') else orderbook['asks']
|
848
|
+
orderBookSide.store(price, size)
|
826
849
|
timestamp = self.safe_integer(delta, 'timestamp')
|
827
850
|
orderbook['timestamp'] = timestamp
|
828
851
|
orderbook['datetime'] = self.iso8601(timestamp)
|
829
852
|
orderbook['nonce'] = sequence
|
830
|
-
orderBookSide = orderbook['bids'] if (side == 'buy') else orderbook['asks']
|
831
|
-
orderBookSide.store(price, size)
|
832
853
|
|
833
854
|
def handle_balance(self, client: Client, message):
|
834
855
|
#
|
@@ -884,7 +905,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
884
905
|
# }
|
885
906
|
#
|
886
907
|
timestamp = self.safe_integer(response, 'timestamp')
|
887
|
-
result = {
|
908
|
+
result: dict = {
|
888
909
|
'info': response,
|
889
910
|
'timestamp': timestamp,
|
890
911
|
'datetime': self.iso8601(timestamp),
|
@@ -907,7 +928,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
907
928
|
|
908
929
|
def handle_subject(self, client: Client, message):
|
909
930
|
subject = self.safe_string(message, 'subject')
|
910
|
-
methods = {
|
931
|
+
methods: dict = {
|
911
932
|
'auth': self.handle_authenticate,
|
912
933
|
'received': self.handle_l3_order_book,
|
913
934
|
'open': self.handle_l3_order_book,
|
@@ -950,7 +971,7 @@ class poloniexfutures(ccxt.async_support.poloniexfutures):
|
|
950
971
|
|
951
972
|
def handle_message(self, client: Client, message):
|
952
973
|
type = self.safe_string(message, 'type')
|
953
|
-
methods = {
|
974
|
+
methods: dict = {
|
954
975
|
'welcome': self.handle_system_status,
|
955
976
|
'ack': self.handle_subscription_status,
|
956
977
|
'message': self.handle_subject,
|