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
ccxt/oceanex.py
CHANGED
@@ -5,16 +5,16 @@
|
|
5
5
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.oceanex import ImplicitAPI
|
8
|
-
from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
|
8
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
|
9
9
|
from typing import List
|
10
10
|
from ccxt.base.errors import ExchangeError
|
11
|
+
from ccxt.base.errors import AuthenticationError
|
11
12
|
from ccxt.base.errors import PermissionDenied
|
12
13
|
from ccxt.base.errors import ArgumentsRequired
|
13
14
|
from ccxt.base.errors import BadRequest
|
14
15
|
from ccxt.base.errors import InsufficientFunds
|
15
16
|
from ccxt.base.errors import InvalidOrder
|
16
17
|
from ccxt.base.errors import OrderNotFound
|
17
|
-
from ccxt.base.errors import AuthenticationError
|
18
18
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
19
19
|
|
20
20
|
|
@@ -54,9 +54,11 @@ class oceanex(Exchange, ImplicitAPI):
|
|
54
54
|
'fetchClosedOrders': True,
|
55
55
|
'fetchCrossBorrowRate': False,
|
56
56
|
'fetchCrossBorrowRates': False,
|
57
|
-
'fetchDepositAddress':
|
58
|
-
'fetchDepositAddresses':
|
59
|
-
'fetchDepositAddressesByNetwork':
|
57
|
+
'fetchDepositAddress': 'emulated',
|
58
|
+
'fetchDepositAddresses': None,
|
59
|
+
'fetchDepositAddressesByNetwork': True,
|
60
|
+
'fetchFundingRateHistory': False,
|
61
|
+
'fetchFundingRates': False,
|
60
62
|
'fetchIsolatedBorrowRate': False,
|
61
63
|
'fetchIsolatedBorrowRates': False,
|
62
64
|
'fetchMarkets': True,
|
@@ -117,6 +119,11 @@ class oceanex(Exchange, ImplicitAPI):
|
|
117
119
|
'order/delete',
|
118
120
|
'order/delete/multi',
|
119
121
|
'orders/clear',
|
122
|
+
'/withdraws/special/new',
|
123
|
+
'/deposit_address',
|
124
|
+
'/deposit_addresses',
|
125
|
+
'/deposit_history',
|
126
|
+
'/withdraw_history',
|
120
127
|
],
|
121
128
|
},
|
122
129
|
},
|
@@ -156,14 +163,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
156
163
|
},
|
157
164
|
})
|
158
165
|
|
159
|
-
def fetch_markets(self, params={}):
|
166
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
160
167
|
"""
|
161
168
|
retrieves data on all markets for oceanex
|
162
|
-
|
169
|
+
|
170
|
+
https://api.oceanex.pro/doc/v1/#markets-post
|
171
|
+
|
163
172
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
164
173
|
:returns dict[]: an array of objects representing market data
|
165
174
|
"""
|
166
|
-
request = {'show_details': True}
|
175
|
+
request: dict = {'show_details': True}
|
167
176
|
response = self.publicGetMarkets(self.extend(request, params))
|
168
177
|
#
|
169
178
|
# {
|
@@ -181,7 +190,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
181
190
|
markets = self.safe_value(response, 'data', [])
|
182
191
|
return self.parse_markets(markets)
|
183
192
|
|
184
|
-
def parse_market(self, market) -> Market:
|
193
|
+
def parse_market(self, market: dict) -> Market:
|
185
194
|
id = self.safe_value(market, 'id')
|
186
195
|
name = self.safe_value(market, 'name')
|
187
196
|
baseId, quoteId = name.split('/')
|
@@ -243,14 +252,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
243
252
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
244
253
|
"""
|
245
254
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
246
|
-
|
255
|
+
|
256
|
+
https://api.oceanex.pro/doc/v1/#ticker-post
|
257
|
+
|
247
258
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
248
259
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
249
260
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
250
261
|
"""
|
251
262
|
self.load_markets()
|
252
263
|
market = self.market(symbol)
|
253
|
-
request = {
|
264
|
+
request: dict = {
|
254
265
|
'pair': market['id'],
|
255
266
|
}
|
256
267
|
response = self.publicGetTickersPair(self.extend(request, params))
|
@@ -271,13 +282,15 @@ class oceanex(Exchange, ImplicitAPI):
|
|
271
282
|
# }
|
272
283
|
# }
|
273
284
|
#
|
274
|
-
data = self.
|
285
|
+
data = self.safe_dict(response, 'data', {})
|
275
286
|
return self.parse_ticker(data, market)
|
276
287
|
|
277
288
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
278
289
|
"""
|
279
290
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
280
|
-
|
291
|
+
|
292
|
+
https://api.oceanex.pro/doc/v1/#multiple-tickers-post
|
293
|
+
|
281
294
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
282
295
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
283
296
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -287,7 +300,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
287
300
|
if symbols is None:
|
288
301
|
symbols = self.symbols
|
289
302
|
marketIds = self.market_ids(symbols)
|
290
|
-
request = {'markets': marketIds}
|
303
|
+
request: dict = {'markets': marketIds}
|
291
304
|
response = self.publicGetTickersMulti(self.extend(request, params))
|
292
305
|
#
|
293
306
|
# {
|
@@ -307,7 +320,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
307
320
|
# }
|
308
321
|
#
|
309
322
|
data = self.safe_value(response, 'data', [])
|
310
|
-
result = {}
|
323
|
+
result: dict = {}
|
311
324
|
for i in range(0, len(data)):
|
312
325
|
ticker = data[i]
|
313
326
|
marketId = self.safe_string(ticker, 'market')
|
@@ -359,7 +372,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
359
372
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
360
373
|
"""
|
361
374
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
362
|
-
|
375
|
+
|
376
|
+
https://api.oceanex.pro/doc/v1/#order-book-post
|
377
|
+
|
363
378
|
:param str symbol: unified symbol of the market to fetch the order book for
|
364
379
|
:param int [limit]: the maximum amount of order book entries to return
|
365
380
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -367,7 +382,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
367
382
|
"""
|
368
383
|
self.load_markets()
|
369
384
|
market = self.market(symbol)
|
370
|
-
request = {
|
385
|
+
request: dict = {
|
371
386
|
'market': market['id'],
|
372
387
|
}
|
373
388
|
if limit is not None:
|
@@ -399,7 +414,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
399
414
|
def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
|
400
415
|
"""
|
401
416
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
|
402
|
-
|
417
|
+
|
418
|
+
https://api.oceanex.pro/doc/v1/#multiple-order-books-post
|
419
|
+
|
403
420
|
:param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
|
404
421
|
:param int [limit]: max number of entries per orderbook to return, default is None
|
405
422
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -409,7 +426,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
409
426
|
if symbols is None:
|
410
427
|
symbols = self.symbols
|
411
428
|
marketIds = self.market_ids(symbols)
|
412
|
-
request = {
|
429
|
+
request: dict = {
|
413
430
|
'markets': marketIds,
|
414
431
|
}
|
415
432
|
if limit is not None:
|
@@ -439,7 +456,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
439
456
|
# }
|
440
457
|
#
|
441
458
|
data = self.safe_value(response, 'data', [])
|
442
|
-
result = {}
|
459
|
+
result: dict = {}
|
443
460
|
for i in range(0, len(data)):
|
444
461
|
orderbook = data[i]
|
445
462
|
marketId = self.safe_string(orderbook, 'market')
|
@@ -451,7 +468,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
451
468
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
452
469
|
"""
|
453
470
|
get the list of most recent trades for a particular symbol
|
454
|
-
|
471
|
+
|
472
|
+
https://api.oceanex.pro/doc/v1/#trades-post
|
473
|
+
|
455
474
|
:param str symbol: unified symbol of the market to fetch trades for
|
456
475
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
457
476
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -460,7 +479,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
460
479
|
"""
|
461
480
|
self.load_markets()
|
462
481
|
market = self.market(symbol)
|
463
|
-
request = {
|
482
|
+
request: dict = {
|
464
483
|
'market': market['id'],
|
465
484
|
}
|
466
485
|
if limit is not None:
|
@@ -478,16 +497,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
478
497
|
# "funds":"6.0732952",
|
479
498
|
# "market":"ethusdt",
|
480
499
|
# "created_at":"2022-04-19T19:03:15Z",
|
481
|
-
# "created_on":
|
500
|
+
# "created_on":1650394994,
|
482
501
|
# "side":"bid"
|
483
502
|
# },
|
484
503
|
# ]
|
485
504
|
# }
|
486
505
|
#
|
487
|
-
data = self.
|
506
|
+
data = self.safe_list(response, 'data')
|
488
507
|
return self.parse_trades(data, market, since, limit)
|
489
508
|
|
490
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
509
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
491
510
|
#
|
492
511
|
# fetchTrades(public)
|
493
512
|
#
|
@@ -533,7 +552,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
533
552
|
def fetch_time(self, params={}):
|
534
553
|
"""
|
535
554
|
fetches the current integer timestamp in milliseconds from the exchange server
|
536
|
-
|
555
|
+
|
556
|
+
https://api.oceanex.pro/doc/v1/#api-server-time-post
|
557
|
+
|
537
558
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
538
559
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
539
560
|
"""
|
@@ -543,16 +564,18 @@ class oceanex(Exchange, ImplicitAPI):
|
|
543
564
|
#
|
544
565
|
return self.safe_timestamp(response, 'data')
|
545
566
|
|
546
|
-
def fetch_trading_fees(self, params={}):
|
567
|
+
def fetch_trading_fees(self, params={}) -> TradingFees:
|
547
568
|
"""
|
548
569
|
fetch the trading fees for multiple markets
|
549
|
-
|
570
|
+
|
571
|
+
https://api.oceanex.pro/doc/v1/#trading-fees-post
|
572
|
+
|
550
573
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
551
574
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
552
575
|
"""
|
553
576
|
response = self.publicGetFeesTrading(params)
|
554
577
|
data = self.safe_value(response, 'data', [])
|
555
|
-
result = {}
|
578
|
+
result: dict = {}
|
556
579
|
for i in range(0, len(data)):
|
557
580
|
group = data[i]
|
558
581
|
maker = self.safe_value(group, 'ask_fee', {})
|
@@ -575,7 +598,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
575
598
|
def parse_balance(self, response) -> Balances:
|
576
599
|
data = self.safe_value(response, 'data')
|
577
600
|
balances = self.safe_value(data, 'accounts', [])
|
578
|
-
result = {'info': response}
|
601
|
+
result: dict = {'info': response}
|
579
602
|
for i in range(0, len(balances)):
|
580
603
|
balance = balances[i]
|
581
604
|
currencyId = self.safe_value(balance, 'currency')
|
@@ -589,7 +612,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
589
612
|
def fetch_balance(self, params={}) -> Balances:
|
590
613
|
"""
|
591
614
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
592
|
-
|
615
|
+
|
616
|
+
https://api.oceanex.pro/doc/v1/#account-info-post
|
617
|
+
|
593
618
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
594
619
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
595
620
|
"""
|
@@ -600,18 +625,20 @@ class oceanex(Exchange, ImplicitAPI):
|
|
600
625
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
601
626
|
"""
|
602
627
|
create a trade order
|
603
|
-
|
628
|
+
|
629
|
+
https://api.oceanex.pro/doc/v1/#new-order-post
|
630
|
+
|
604
631
|
:param str symbol: unified symbol of the market to create an order in
|
605
632
|
:param str type: 'market' or 'limit'
|
606
633
|
:param str side: 'buy' or 'sell'
|
607
634
|
:param float amount: how much of currency you want to trade in units of base currency
|
608
|
-
:param float [price]: the price at which the order is to be
|
635
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
609
636
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
610
637
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
611
638
|
"""
|
612
639
|
self.load_markets()
|
613
640
|
market = self.market(symbol)
|
614
|
-
request = {
|
641
|
+
request: dict = {
|
615
642
|
'market': market['id'],
|
616
643
|
'side': side,
|
617
644
|
'ord_type': type,
|
@@ -620,13 +647,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
620
647
|
if type == 'limit':
|
621
648
|
request['price'] = self.price_to_precision(symbol, price)
|
622
649
|
response = self.privatePostOrders(self.extend(request, params))
|
623
|
-
data = self.
|
650
|
+
data = self.safe_dict(response, 'data')
|
624
651
|
return self.parse_order(data, market)
|
625
652
|
|
626
653
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
627
654
|
"""
|
628
655
|
fetches information on an order made by the user
|
629
|
-
|
656
|
+
|
657
|
+
https://api.oceanex.pro/doc/v1/#order-status-get
|
658
|
+
|
659
|
+
:param str id: order id
|
630
660
|
:param str symbol: unified symbol of the market the order was made in
|
631
661
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
632
662
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -636,7 +666,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
636
666
|
if symbol is not None:
|
637
667
|
market = self.market(symbol)
|
638
668
|
ids = [id]
|
639
|
-
request = {'ids': ids}
|
669
|
+
request: dict = {'ids': ids}
|
640
670
|
response = self.privateGetOrders(self.extend(request, params))
|
641
671
|
data = self.safe_value(response, 'data')
|
642
672
|
dataLength = len(data)
|
@@ -652,14 +682,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
652
682
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
653
683
|
"""
|
654
684
|
fetch all unfilled currently open orders
|
655
|
-
|
685
|
+
|
686
|
+
https://api.oceanex.pro/doc/v1/#order-status-get
|
687
|
+
|
656
688
|
:param str symbol: unified market symbol
|
657
689
|
:param int [since]: the earliest time in ms to fetch open orders for
|
658
690
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
659
691
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
660
692
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
661
693
|
"""
|
662
|
-
request = {
|
694
|
+
request: dict = {
|
663
695
|
'states': ['wait'],
|
664
696
|
}
|
665
697
|
return self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -667,14 +699,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
667
699
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
668
700
|
"""
|
669
701
|
fetches information on multiple closed orders made by the user
|
670
|
-
|
702
|
+
|
703
|
+
https://api.oceanex.pro/doc/v1/#order-status-get
|
704
|
+
|
671
705
|
:param str symbol: unified market symbol of the market orders were made in
|
672
706
|
:param int [since]: the earliest time in ms to fetch orders for
|
673
707
|
:param int [limit]: the maximum number of order structures to retrieve
|
674
708
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
675
709
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
676
710
|
"""
|
677
|
-
request = {
|
711
|
+
request: dict = {
|
678
712
|
'states': ['done', 'cancel'],
|
679
713
|
}
|
680
714
|
return self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -682,7 +716,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
682
716
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
683
717
|
"""
|
684
718
|
fetches information on multiple orders made by the user
|
685
|
-
|
719
|
+
|
720
|
+
https://api.oceanex.pro/doc/v1/#order-status-with-filters-post
|
721
|
+
|
686
722
|
:param str symbol: unified market symbol of the market orders were made in
|
687
723
|
:param int [since]: the earliest time in ms to fetch orders for
|
688
724
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -695,7 +731,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
695
731
|
market = self.market(symbol)
|
696
732
|
states = self.safe_value(params, 'states', ['wait', 'done', 'cancel'])
|
697
733
|
query = self.omit(params, 'states')
|
698
|
-
request = {
|
734
|
+
request: dict = {
|
699
735
|
'market': market['id'],
|
700
736
|
'states': states,
|
701
737
|
'need_price': 'True',
|
@@ -733,7 +769,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
733
769
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
734
770
|
"""
|
735
771
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
736
|
-
|
772
|
+
|
773
|
+
https://api.oceanex.pro/doc/v1/#k-line-post
|
774
|
+
|
737
775
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
738
776
|
:param str timeframe: the length of time each candle represents
|
739
777
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -743,19 +781,19 @@ class oceanex(Exchange, ImplicitAPI):
|
|
743
781
|
"""
|
744
782
|
self.load_markets()
|
745
783
|
market = self.market(symbol)
|
746
|
-
request = {
|
784
|
+
request: dict = {
|
747
785
|
'market': market['id'],
|
748
786
|
'period': self.safe_string(self.timeframes, timeframe, timeframe),
|
749
787
|
}
|
750
788
|
if since is not None:
|
751
789
|
request['timestamp'] = since
|
752
790
|
if limit is not None:
|
753
|
-
request['limit'] = limit
|
791
|
+
request['limit'] = min(limit, 10000)
|
754
792
|
response = self.publicPostK(self.extend(request, params))
|
755
|
-
ohlcvs = self.
|
793
|
+
ohlcvs = self.safe_list(response, 'data', [])
|
756
794
|
return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
|
757
795
|
|
758
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
796
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
759
797
|
#
|
760
798
|
# {
|
761
799
|
# "created_at": "2019-01-18T00:38:18Z",
|
@@ -797,7 +835,6 @@ class oceanex(Exchange, ImplicitAPI):
|
|
797
835
|
'postOnly': None,
|
798
836
|
'side': self.safe_value(order, 'side'),
|
799
837
|
'price': price,
|
800
|
-
'stopPrice': None,
|
801
838
|
'triggerPrice': None,
|
802
839
|
'average': average,
|
803
840
|
'amount': amount,
|
@@ -809,8 +846,8 @@ class oceanex(Exchange, ImplicitAPI):
|
|
809
846
|
'fee': None,
|
810
847
|
}, market)
|
811
848
|
|
812
|
-
def parse_order_status(self, status):
|
813
|
-
statuses = {
|
849
|
+
def parse_order_status(self, status: Str):
|
850
|
+
statuses: dict = {
|
814
851
|
'wait': 'open',
|
815
852
|
'done': 'closed',
|
816
853
|
'cancel': 'canceled',
|
@@ -820,7 +857,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
820
857
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
821
858
|
"""
|
822
859
|
cancels an open order
|
823
|
-
|
860
|
+
|
861
|
+
https://api.oceanex.pro/doc/v1/#cancel-order-post
|
862
|
+
|
824
863
|
:param str id: order id
|
825
864
|
:param str symbol: not used by oceanex cancelOrder()
|
826
865
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -828,13 +867,15 @@ class oceanex(Exchange, ImplicitAPI):
|
|
828
867
|
"""
|
829
868
|
self.load_markets()
|
830
869
|
response = self.privatePostOrderDelete(self.extend({'id': id}, params))
|
831
|
-
data = self.
|
870
|
+
data = self.safe_dict(response, 'data')
|
832
871
|
return self.parse_order(data)
|
833
872
|
|
834
873
|
def cancel_orders(self, ids, symbol: Str = None, params={}):
|
835
874
|
"""
|
836
875
|
cancel multiple orders
|
837
|
-
|
876
|
+
|
877
|
+
https://api.oceanex.pro/doc/v1/#cancel-multiple-orders-post
|
878
|
+
|
838
879
|
:param str[] ids: order ids
|
839
880
|
:param str symbol: not used by oceanex cancelOrders()
|
840
881
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -842,22 +883,97 @@ class oceanex(Exchange, ImplicitAPI):
|
|
842
883
|
"""
|
843
884
|
self.load_markets()
|
844
885
|
response = self.privatePostOrderDeleteMulti(self.extend({'ids': ids}, params))
|
845
|
-
data = self.
|
886
|
+
data = self.safe_list(response, 'data')
|
846
887
|
return self.parse_orders(data)
|
847
888
|
|
848
889
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
849
890
|
"""
|
850
891
|
cancel all open orders
|
851
|
-
|
892
|
+
|
893
|
+
https://api.oceanex.pro/doc/v1/#cancel-all-orders-post
|
894
|
+
|
852
895
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
853
896
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
854
897
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
855
898
|
"""
|
856
899
|
self.load_markets()
|
857
900
|
response = self.privatePostOrdersClear(params)
|
858
|
-
data = self.
|
901
|
+
data = self.safe_list(response, 'data')
|
859
902
|
return self.parse_orders(data)
|
860
903
|
|
904
|
+
def fetch_deposit_addresses_by_network(self, code: str, params={}) -> List[DepositAddress]:
|
905
|
+
"""
|
906
|
+
fetch the deposit addresses for a currency associated with self account
|
907
|
+
|
908
|
+
https://api.oceanex.pro/doc/v1/#deposit-addresses-post
|
909
|
+
|
910
|
+
:param str code: unified currency code
|
911
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
912
|
+
:returns dict: a dictionary `address structures <https://docs.ccxt.com/#/?id=address-structure>`, indexed by the network
|
913
|
+
"""
|
914
|
+
self.load_markets()
|
915
|
+
currency = self.currency(code)
|
916
|
+
request: dict = {
|
917
|
+
'currency': currency['id'],
|
918
|
+
}
|
919
|
+
response = self.privatePostDepositAddresses(self.extend(request, params))
|
920
|
+
#
|
921
|
+
# {
|
922
|
+
# code: '0',
|
923
|
+
# message: 'Operation successful',
|
924
|
+
# data: {
|
925
|
+
# data: {
|
926
|
+
# currency_id: 'usdt',
|
927
|
+
# display_name: 'USDT',
|
928
|
+
# num_of_resources: '3',
|
929
|
+
# resources: [
|
930
|
+
# {
|
931
|
+
# chain_name: 'TRC20',
|
932
|
+
# currency_id: 'usdt',
|
933
|
+
# address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
|
934
|
+
# memo: '',
|
935
|
+
# deposit_status: 'enabled'
|
936
|
+
# },
|
937
|
+
# ...
|
938
|
+
# ]
|
939
|
+
# }
|
940
|
+
# }
|
941
|
+
# }
|
942
|
+
#
|
943
|
+
data = self.safe_dict(response, 'data', {})
|
944
|
+
data2 = self.safe_dict(data, 'data', {})
|
945
|
+
resources = self.safe_list(data2, 'resources', [])
|
946
|
+
result = {}
|
947
|
+
for i in range(0, len(resources)):
|
948
|
+
resource = resources[i]
|
949
|
+
enabled = self.safe_string(resource, 'deposit_status')
|
950
|
+
if enabled == 'enabled':
|
951
|
+
parsedAddress = self.parse_deposit_address(resource, currency)
|
952
|
+
result[parsedAddress['currency']] = parsedAddress
|
953
|
+
return result
|
954
|
+
|
955
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
956
|
+
#
|
957
|
+
# {
|
958
|
+
# chain_name: 'TRC20',
|
959
|
+
# currency_id: 'usdt',
|
960
|
+
# address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
|
961
|
+
# memo: '',
|
962
|
+
# deposit_status: 'enabled'
|
963
|
+
# }
|
964
|
+
#
|
965
|
+
address = self.safe_string(depositAddress, 'address')
|
966
|
+
self.check_address(address)
|
967
|
+
currencyId = self.safe_string(depositAddress, 'currency_id')
|
968
|
+
networkId = self.safe_string(depositAddress, 'chain_name')
|
969
|
+
return {
|
970
|
+
'info': depositAddress,
|
971
|
+
'currency': self.safe_currency_code(currencyId, currency),
|
972
|
+
'network': self.network_id_to_code(networkId),
|
973
|
+
'address': address,
|
974
|
+
'tag': self.safe_string(depositAddress, 'memo'),
|
975
|
+
}
|
976
|
+
|
861
977
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
862
978
|
url = self.urls['api']['rest'] + '/' + self.version + '/' + self.implode_params(path, params)
|
863
979
|
query = self.omit(params, self.extract_params(path))
|
@@ -875,7 +991,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
875
991
|
url += '?' + self.urlencode(query)
|
876
992
|
elif api == 'private':
|
877
993
|
self.check_required_credentials()
|
878
|
-
request = {
|
994
|
+
request: dict = {
|
879
995
|
'uid': self.apiKey,
|
880
996
|
'data': query,
|
881
997
|
}
|
@@ -887,7 +1003,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
887
1003
|
headers = {'Content-Type': 'application/json'}
|
888
1004
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
889
1005
|
|
890
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1006
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
891
1007
|
#
|
892
1008
|
# {"code":1011,"message":"This IP 'x.x.x.x' is not allowed","data":{}}
|
893
1009
|
#
|