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/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
|
},
|
@@ -132,6 +139,75 @@ class oceanex(Exchange, ImplicitAPI):
|
|
132
139
|
'PLA': 'Plair',
|
133
140
|
},
|
134
141
|
'precisionMode': TICK_SIZE,
|
142
|
+
'features': {
|
143
|
+
'spot': {
|
144
|
+
'sandbox': False,
|
145
|
+
'createOrder': {
|
146
|
+
'marginMode': False,
|
147
|
+
'triggerPrice': True, # todo
|
148
|
+
'triggerDirection': True, # todo
|
149
|
+
'triggerPriceType': None,
|
150
|
+
'stopLossPrice': False, # todo
|
151
|
+
'takeProfitPrice': False, # todo
|
152
|
+
'attachedStopLossTakeProfit': None,
|
153
|
+
'timeInForce': {
|
154
|
+
'IOC': False,
|
155
|
+
'FOK': False,
|
156
|
+
'PO': False,
|
157
|
+
'GTD': False,
|
158
|
+
},
|
159
|
+
'hedged': False,
|
160
|
+
'trailing': False,
|
161
|
+
'leverage': False,
|
162
|
+
'marketBuyByCost': False,
|
163
|
+
'marketBuyRequiresPrice': False,
|
164
|
+
'selfTradePrevention': False,
|
165
|
+
'iceberg': False,
|
166
|
+
},
|
167
|
+
'createOrders': None,
|
168
|
+
'fetchMyTrades': None,
|
169
|
+
'fetchOrder': {
|
170
|
+
'marginMode': False,
|
171
|
+
'trigger': False,
|
172
|
+
'trailing': False,
|
173
|
+
},
|
174
|
+
'fetchOpenOrders': {
|
175
|
+
'marginMode': False,
|
176
|
+
'limit': 100, # todo: max unknown
|
177
|
+
'trigger': False,
|
178
|
+
'trailing': False,
|
179
|
+
},
|
180
|
+
'fetchOrders': {
|
181
|
+
'marginMode': False,
|
182
|
+
'limit': 100,
|
183
|
+
'daysBack': 100000, # todo
|
184
|
+
'untilDays': 100000, # todo
|
185
|
+
'trigger': False,
|
186
|
+
'trailing': False,
|
187
|
+
},
|
188
|
+
'fetchClosedOrders': {
|
189
|
+
'marginMode': False,
|
190
|
+
'limit': 100,
|
191
|
+
'daysBack': 100000, # todo
|
192
|
+
'daysBackCanceled': 1, # todo
|
193
|
+
'untilDays': 100000, # todo
|
194
|
+
'trigger': False,
|
195
|
+
'trailing': False,
|
196
|
+
},
|
197
|
+
'fetchOHLCV': {
|
198
|
+
'limit': 100,
|
199
|
+
},
|
200
|
+
},
|
201
|
+
# todo implement swap
|
202
|
+
'swap': {
|
203
|
+
'linear': None,
|
204
|
+
'inverse': None,
|
205
|
+
},
|
206
|
+
'future': {
|
207
|
+
'linear': None,
|
208
|
+
'inverse': None,
|
209
|
+
},
|
210
|
+
},
|
135
211
|
'exceptions': {
|
136
212
|
'codes': {
|
137
213
|
'-1': BadRequest,
|
@@ -156,14 +232,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
156
232
|
},
|
157
233
|
})
|
158
234
|
|
159
|
-
def fetch_markets(self, params={}):
|
235
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
160
236
|
"""
|
161
237
|
retrieves data on all markets for oceanex
|
162
|
-
|
238
|
+
|
239
|
+
https://api.oceanex.pro/doc/v1/#markets-post
|
240
|
+
|
163
241
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
164
242
|
:returns dict[]: an array of objects representing market data
|
165
243
|
"""
|
166
|
-
request = {'show_details': True}
|
244
|
+
request: dict = {'show_details': True}
|
167
245
|
response = self.publicGetMarkets(self.extend(request, params))
|
168
246
|
#
|
169
247
|
# {
|
@@ -181,7 +259,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
181
259
|
markets = self.safe_value(response, 'data', [])
|
182
260
|
return self.parse_markets(markets)
|
183
261
|
|
184
|
-
def parse_market(self, market) -> Market:
|
262
|
+
def parse_market(self, market: dict) -> Market:
|
185
263
|
id = self.safe_value(market, 'id')
|
186
264
|
name = self.safe_value(market, 'name')
|
187
265
|
baseId, quoteId = name.split('/')
|
@@ -243,14 +321,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
243
321
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
244
322
|
"""
|
245
323
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
246
|
-
|
324
|
+
|
325
|
+
https://api.oceanex.pro/doc/v1/#ticker-post
|
326
|
+
|
247
327
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
248
328
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
249
329
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
250
330
|
"""
|
251
331
|
self.load_markets()
|
252
332
|
market = self.market(symbol)
|
253
|
-
request = {
|
333
|
+
request: dict = {
|
254
334
|
'pair': market['id'],
|
255
335
|
}
|
256
336
|
response = self.publicGetTickersPair(self.extend(request, params))
|
@@ -271,13 +351,15 @@ class oceanex(Exchange, ImplicitAPI):
|
|
271
351
|
# }
|
272
352
|
# }
|
273
353
|
#
|
274
|
-
data = self.
|
354
|
+
data = self.safe_dict(response, 'data', {})
|
275
355
|
return self.parse_ticker(data, market)
|
276
356
|
|
277
357
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
278
358
|
"""
|
279
359
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
280
|
-
|
360
|
+
|
361
|
+
https://api.oceanex.pro/doc/v1/#multiple-tickers-post
|
362
|
+
|
281
363
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
282
364
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
283
365
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -287,7 +369,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
287
369
|
if symbols is None:
|
288
370
|
symbols = self.symbols
|
289
371
|
marketIds = self.market_ids(symbols)
|
290
|
-
request = {'markets': marketIds}
|
372
|
+
request: dict = {'markets': marketIds}
|
291
373
|
response = self.publicGetTickersMulti(self.extend(request, params))
|
292
374
|
#
|
293
375
|
# {
|
@@ -307,7 +389,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
307
389
|
# }
|
308
390
|
#
|
309
391
|
data = self.safe_value(response, 'data', [])
|
310
|
-
result = {}
|
392
|
+
result: dict = {}
|
311
393
|
for i in range(0, len(data)):
|
312
394
|
ticker = data[i]
|
313
395
|
marketId = self.safe_string(ticker, 'market')
|
@@ -359,7 +441,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
359
441
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
360
442
|
"""
|
361
443
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
362
|
-
|
444
|
+
|
445
|
+
https://api.oceanex.pro/doc/v1/#order-book-post
|
446
|
+
|
363
447
|
:param str symbol: unified symbol of the market to fetch the order book for
|
364
448
|
:param int [limit]: the maximum amount of order book entries to return
|
365
449
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -367,7 +451,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
367
451
|
"""
|
368
452
|
self.load_markets()
|
369
453
|
market = self.market(symbol)
|
370
|
-
request = {
|
454
|
+
request: dict = {
|
371
455
|
'market': market['id'],
|
372
456
|
}
|
373
457
|
if limit is not None:
|
@@ -399,7 +483,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
399
483
|
def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
|
400
484
|
"""
|
401
485
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
|
402
|
-
|
486
|
+
|
487
|
+
https://api.oceanex.pro/doc/v1/#multiple-order-books-post
|
488
|
+
|
403
489
|
:param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
|
404
490
|
:param int [limit]: max number of entries per orderbook to return, default is None
|
405
491
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -409,7 +495,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
409
495
|
if symbols is None:
|
410
496
|
symbols = self.symbols
|
411
497
|
marketIds = self.market_ids(symbols)
|
412
|
-
request = {
|
498
|
+
request: dict = {
|
413
499
|
'markets': marketIds,
|
414
500
|
}
|
415
501
|
if limit is not None:
|
@@ -439,7 +525,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
439
525
|
# }
|
440
526
|
#
|
441
527
|
data = self.safe_value(response, 'data', [])
|
442
|
-
result = {}
|
528
|
+
result: dict = {}
|
443
529
|
for i in range(0, len(data)):
|
444
530
|
orderbook = data[i]
|
445
531
|
marketId = self.safe_string(orderbook, 'market')
|
@@ -451,7 +537,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
451
537
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
452
538
|
"""
|
453
539
|
get the list of most recent trades for a particular symbol
|
454
|
-
|
540
|
+
|
541
|
+
https://api.oceanex.pro/doc/v1/#trades-post
|
542
|
+
|
455
543
|
:param str symbol: unified symbol of the market to fetch trades for
|
456
544
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
457
545
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -460,7 +548,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
460
548
|
"""
|
461
549
|
self.load_markets()
|
462
550
|
market = self.market(symbol)
|
463
|
-
request = {
|
551
|
+
request: dict = {
|
464
552
|
'market': market['id'],
|
465
553
|
}
|
466
554
|
if limit is not None:
|
@@ -478,16 +566,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
478
566
|
# "funds":"6.0732952",
|
479
567
|
# "market":"ethusdt",
|
480
568
|
# "created_at":"2022-04-19T19:03:15Z",
|
481
|
-
# "created_on":
|
569
|
+
# "created_on":1650394994,
|
482
570
|
# "side":"bid"
|
483
571
|
# },
|
484
572
|
# ]
|
485
573
|
# }
|
486
574
|
#
|
487
|
-
data = self.
|
575
|
+
data = self.safe_list(response, 'data')
|
488
576
|
return self.parse_trades(data, market, since, limit)
|
489
577
|
|
490
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
578
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
491
579
|
#
|
492
580
|
# fetchTrades(public)
|
493
581
|
#
|
@@ -533,7 +621,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
533
621
|
def fetch_time(self, params={}):
|
534
622
|
"""
|
535
623
|
fetches the current integer timestamp in milliseconds from the exchange server
|
536
|
-
|
624
|
+
|
625
|
+
https://api.oceanex.pro/doc/v1/#api-server-time-post
|
626
|
+
|
537
627
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
538
628
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
539
629
|
"""
|
@@ -543,16 +633,18 @@ class oceanex(Exchange, ImplicitAPI):
|
|
543
633
|
#
|
544
634
|
return self.safe_timestamp(response, 'data')
|
545
635
|
|
546
|
-
def fetch_trading_fees(self, params={}):
|
636
|
+
def fetch_trading_fees(self, params={}) -> TradingFees:
|
547
637
|
"""
|
548
638
|
fetch the trading fees for multiple markets
|
549
|
-
|
639
|
+
|
640
|
+
https://api.oceanex.pro/doc/v1/#trading-fees-post
|
641
|
+
|
550
642
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
551
643
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
552
644
|
"""
|
553
645
|
response = self.publicGetFeesTrading(params)
|
554
646
|
data = self.safe_value(response, 'data', [])
|
555
|
-
result = {}
|
647
|
+
result: dict = {}
|
556
648
|
for i in range(0, len(data)):
|
557
649
|
group = data[i]
|
558
650
|
maker = self.safe_value(group, 'ask_fee', {})
|
@@ -575,7 +667,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
575
667
|
def parse_balance(self, response) -> Balances:
|
576
668
|
data = self.safe_value(response, 'data')
|
577
669
|
balances = self.safe_value(data, 'accounts', [])
|
578
|
-
result = {'info': response}
|
670
|
+
result: dict = {'info': response}
|
579
671
|
for i in range(0, len(balances)):
|
580
672
|
balance = balances[i]
|
581
673
|
currencyId = self.safe_value(balance, 'currency')
|
@@ -589,7 +681,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
589
681
|
def fetch_balance(self, params={}) -> Balances:
|
590
682
|
"""
|
591
683
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
592
|
-
|
684
|
+
|
685
|
+
https://api.oceanex.pro/doc/v1/#account-info-post
|
686
|
+
|
593
687
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
594
688
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
595
689
|
"""
|
@@ -600,18 +694,20 @@ class oceanex(Exchange, ImplicitAPI):
|
|
600
694
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
601
695
|
"""
|
602
696
|
create a trade order
|
603
|
-
|
697
|
+
|
698
|
+
https://api.oceanex.pro/doc/v1/#new-order-post
|
699
|
+
|
604
700
|
:param str symbol: unified symbol of the market to create an order in
|
605
701
|
:param str type: 'market' or 'limit'
|
606
702
|
:param str side: 'buy' or 'sell'
|
607
703
|
: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
|
704
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
609
705
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
610
706
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
611
707
|
"""
|
612
708
|
self.load_markets()
|
613
709
|
market = self.market(symbol)
|
614
|
-
request = {
|
710
|
+
request: dict = {
|
615
711
|
'market': market['id'],
|
616
712
|
'side': side,
|
617
713
|
'ord_type': type,
|
@@ -620,13 +716,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
620
716
|
if type == 'limit':
|
621
717
|
request['price'] = self.price_to_precision(symbol, price)
|
622
718
|
response = self.privatePostOrders(self.extend(request, params))
|
623
|
-
data = self.
|
719
|
+
data = self.safe_dict(response, 'data')
|
624
720
|
return self.parse_order(data, market)
|
625
721
|
|
626
722
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
627
723
|
"""
|
628
724
|
fetches information on an order made by the user
|
629
|
-
|
725
|
+
|
726
|
+
https://api.oceanex.pro/doc/v1/#order-status-get
|
727
|
+
|
728
|
+
:param str id: order id
|
630
729
|
:param str symbol: unified symbol of the market the order was made in
|
631
730
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
632
731
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -636,7 +735,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
636
735
|
if symbol is not None:
|
637
736
|
market = self.market(symbol)
|
638
737
|
ids = [id]
|
639
|
-
request = {'ids': ids}
|
738
|
+
request: dict = {'ids': ids}
|
640
739
|
response = self.privateGetOrders(self.extend(request, params))
|
641
740
|
data = self.safe_value(response, 'data')
|
642
741
|
dataLength = len(data)
|
@@ -652,14 +751,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
652
751
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
653
752
|
"""
|
654
753
|
fetch all unfilled currently open orders
|
655
|
-
|
754
|
+
|
755
|
+
https://api.oceanex.pro/doc/v1/#order-status-get
|
756
|
+
|
656
757
|
:param str symbol: unified market symbol
|
657
758
|
:param int [since]: the earliest time in ms to fetch open orders for
|
658
759
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
659
760
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
660
761
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
661
762
|
"""
|
662
|
-
request = {
|
763
|
+
request: dict = {
|
663
764
|
'states': ['wait'],
|
664
765
|
}
|
665
766
|
return self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -667,14 +768,16 @@ class oceanex(Exchange, ImplicitAPI):
|
|
667
768
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
668
769
|
"""
|
669
770
|
fetches information on multiple closed orders made by the user
|
670
|
-
|
771
|
+
|
772
|
+
https://api.oceanex.pro/doc/v1/#order-status-get
|
773
|
+
|
671
774
|
:param str symbol: unified market symbol of the market orders were made in
|
672
775
|
:param int [since]: the earliest time in ms to fetch orders for
|
673
776
|
:param int [limit]: the maximum number of order structures to retrieve
|
674
777
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
675
778
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
676
779
|
"""
|
677
|
-
request = {
|
780
|
+
request: dict = {
|
678
781
|
'states': ['done', 'cancel'],
|
679
782
|
}
|
680
783
|
return self.fetch_orders(symbol, since, limit, self.extend(request, params))
|
@@ -682,7 +785,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
682
785
|
def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
683
786
|
"""
|
684
787
|
fetches information on multiple orders made by the user
|
685
|
-
|
788
|
+
|
789
|
+
https://api.oceanex.pro/doc/v1/#order-status-with-filters-post
|
790
|
+
|
686
791
|
:param str symbol: unified market symbol of the market orders were made in
|
687
792
|
:param int [since]: the earliest time in ms to fetch orders for
|
688
793
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -695,7 +800,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
695
800
|
market = self.market(symbol)
|
696
801
|
states = self.safe_value(params, 'states', ['wait', 'done', 'cancel'])
|
697
802
|
query = self.omit(params, 'states')
|
698
|
-
request = {
|
803
|
+
request: dict = {
|
699
804
|
'market': market['id'],
|
700
805
|
'states': states,
|
701
806
|
'need_price': 'True',
|
@@ -733,7 +838,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
733
838
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
734
839
|
"""
|
735
840
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
736
|
-
|
841
|
+
|
842
|
+
https://api.oceanex.pro/doc/v1/#k-line-post
|
843
|
+
|
737
844
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
738
845
|
:param str timeframe: the length of time each candle represents
|
739
846
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -743,19 +850,19 @@ class oceanex(Exchange, ImplicitAPI):
|
|
743
850
|
"""
|
744
851
|
self.load_markets()
|
745
852
|
market = self.market(symbol)
|
746
|
-
request = {
|
853
|
+
request: dict = {
|
747
854
|
'market': market['id'],
|
748
855
|
'period': self.safe_string(self.timeframes, timeframe, timeframe),
|
749
856
|
}
|
750
857
|
if since is not None:
|
751
858
|
request['timestamp'] = since
|
752
859
|
if limit is not None:
|
753
|
-
request['limit'] = limit
|
860
|
+
request['limit'] = min(limit, 10000)
|
754
861
|
response = self.publicPostK(self.extend(request, params))
|
755
|
-
ohlcvs = self.
|
862
|
+
ohlcvs = self.safe_list(response, 'data', [])
|
756
863
|
return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
|
757
864
|
|
758
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
865
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
759
866
|
#
|
760
867
|
# {
|
761
868
|
# "created_at": "2019-01-18T00:38:18Z",
|
@@ -797,7 +904,6 @@ class oceanex(Exchange, ImplicitAPI):
|
|
797
904
|
'postOnly': None,
|
798
905
|
'side': self.safe_value(order, 'side'),
|
799
906
|
'price': price,
|
800
|
-
'stopPrice': None,
|
801
907
|
'triggerPrice': None,
|
802
908
|
'average': average,
|
803
909
|
'amount': amount,
|
@@ -809,8 +915,8 @@ class oceanex(Exchange, ImplicitAPI):
|
|
809
915
|
'fee': None,
|
810
916
|
}, market)
|
811
917
|
|
812
|
-
def parse_order_status(self, status):
|
813
|
-
statuses = {
|
918
|
+
def parse_order_status(self, status: Str):
|
919
|
+
statuses: dict = {
|
814
920
|
'wait': 'open',
|
815
921
|
'done': 'closed',
|
816
922
|
'cancel': 'canceled',
|
@@ -820,7 +926,9 @@ class oceanex(Exchange, ImplicitAPI):
|
|
820
926
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
821
927
|
"""
|
822
928
|
cancels an open order
|
823
|
-
|
929
|
+
|
930
|
+
https://api.oceanex.pro/doc/v1/#cancel-order-post
|
931
|
+
|
824
932
|
:param str id: order id
|
825
933
|
:param str symbol: not used by oceanex cancelOrder()
|
826
934
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -828,13 +936,15 @@ class oceanex(Exchange, ImplicitAPI):
|
|
828
936
|
"""
|
829
937
|
self.load_markets()
|
830
938
|
response = self.privatePostOrderDelete(self.extend({'id': id}, params))
|
831
|
-
data = self.
|
939
|
+
data = self.safe_dict(response, 'data')
|
832
940
|
return self.parse_order(data)
|
833
941
|
|
834
942
|
def cancel_orders(self, ids, symbol: Str = None, params={}):
|
835
943
|
"""
|
836
944
|
cancel multiple orders
|
837
|
-
|
945
|
+
|
946
|
+
https://api.oceanex.pro/doc/v1/#cancel-multiple-orders-post
|
947
|
+
|
838
948
|
:param str[] ids: order ids
|
839
949
|
:param str symbol: not used by oceanex cancelOrders()
|
840
950
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -842,22 +952,97 @@ class oceanex(Exchange, ImplicitAPI):
|
|
842
952
|
"""
|
843
953
|
self.load_markets()
|
844
954
|
response = self.privatePostOrderDeleteMulti(self.extend({'ids': ids}, params))
|
845
|
-
data = self.
|
955
|
+
data = self.safe_list(response, 'data')
|
846
956
|
return self.parse_orders(data)
|
847
957
|
|
848
958
|
def cancel_all_orders(self, symbol: Str = None, params={}):
|
849
959
|
"""
|
850
960
|
cancel all open orders
|
851
|
-
|
961
|
+
|
962
|
+
https://api.oceanex.pro/doc/v1/#cancel-all-orders-post
|
963
|
+
|
852
964
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
853
965
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
854
966
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
855
967
|
"""
|
856
968
|
self.load_markets()
|
857
969
|
response = self.privatePostOrdersClear(params)
|
858
|
-
data = self.
|
970
|
+
data = self.safe_list(response, 'data')
|
859
971
|
return self.parse_orders(data)
|
860
972
|
|
973
|
+
def fetch_deposit_addresses_by_network(self, code: str, params={}) -> List[DepositAddress]:
|
974
|
+
"""
|
975
|
+
fetch the deposit addresses for a currency associated with self account
|
976
|
+
|
977
|
+
https://api.oceanex.pro/doc/v1/#deposit-addresses-post
|
978
|
+
|
979
|
+
:param str code: unified currency code
|
980
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
981
|
+
:returns dict: a dictionary `address structures <https://docs.ccxt.com/#/?id=address-structure>`, indexed by the network
|
982
|
+
"""
|
983
|
+
self.load_markets()
|
984
|
+
currency = self.currency(code)
|
985
|
+
request: dict = {
|
986
|
+
'currency': currency['id'],
|
987
|
+
}
|
988
|
+
response = self.privatePostDepositAddresses(self.extend(request, params))
|
989
|
+
#
|
990
|
+
# {
|
991
|
+
# code: '0',
|
992
|
+
# message: 'Operation successful',
|
993
|
+
# data: {
|
994
|
+
# data: {
|
995
|
+
# currency_id: 'usdt',
|
996
|
+
# display_name: 'USDT',
|
997
|
+
# num_of_resources: '3',
|
998
|
+
# resources: [
|
999
|
+
# {
|
1000
|
+
# chain_name: 'TRC20',
|
1001
|
+
# currency_id: 'usdt',
|
1002
|
+
# address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
|
1003
|
+
# memo: '',
|
1004
|
+
# deposit_status: 'enabled'
|
1005
|
+
# },
|
1006
|
+
# ...
|
1007
|
+
# ]
|
1008
|
+
# }
|
1009
|
+
# }
|
1010
|
+
# }
|
1011
|
+
#
|
1012
|
+
data = self.safe_dict(response, 'data', {})
|
1013
|
+
data2 = self.safe_dict(data, 'data', {})
|
1014
|
+
resources = self.safe_list(data2, 'resources', [])
|
1015
|
+
result = {}
|
1016
|
+
for i in range(0, len(resources)):
|
1017
|
+
resource = resources[i]
|
1018
|
+
enabled = self.safe_string(resource, 'deposit_status')
|
1019
|
+
if enabled == 'enabled':
|
1020
|
+
parsedAddress = self.parse_deposit_address(resource, currency)
|
1021
|
+
result[parsedAddress['currency']] = parsedAddress
|
1022
|
+
return result
|
1023
|
+
|
1024
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
1025
|
+
#
|
1026
|
+
# {
|
1027
|
+
# chain_name: 'TRC20',
|
1028
|
+
# currency_id: 'usdt',
|
1029
|
+
# address: 'TPcS7VgKMFmpRrWY82GbJzDeMnemWxEbpg',
|
1030
|
+
# memo: '',
|
1031
|
+
# deposit_status: 'enabled'
|
1032
|
+
# }
|
1033
|
+
#
|
1034
|
+
address = self.safe_string(depositAddress, 'address')
|
1035
|
+
self.check_address(address)
|
1036
|
+
currencyId = self.safe_string(depositAddress, 'currency_id')
|
1037
|
+
networkId = self.safe_string(depositAddress, 'chain_name')
|
1038
|
+
return {
|
1039
|
+
'info': depositAddress,
|
1040
|
+
'currency': self.safe_currency_code(currencyId, currency),
|
1041
|
+
'network': self.network_id_to_code(networkId),
|
1042
|
+
'address': address,
|
1043
|
+
'tag': self.safe_string(depositAddress, 'memo'),
|
1044
|
+
}
|
1045
|
+
|
861
1046
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
862
1047
|
url = self.urls['api']['rest'] + '/' + self.version + '/' + self.implode_params(path, params)
|
863
1048
|
query = self.omit(params, self.extract_params(path))
|
@@ -875,7 +1060,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
875
1060
|
url += '?' + self.urlencode(query)
|
876
1061
|
elif api == 'private':
|
877
1062
|
self.check_required_credentials()
|
878
|
-
request = {
|
1063
|
+
request: dict = {
|
879
1064
|
'uid': self.apiKey,
|
880
1065
|
'data': query,
|
881
1066
|
}
|
@@ -887,7 +1072,7 @@ class oceanex(Exchange, ImplicitAPI):
|
|
887
1072
|
headers = {'Content-Type': 'application/json'}
|
888
1073
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
889
1074
|
|
890
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1075
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
891
1076
|
#
|
892
1077
|
# {"code":1011,"message":"This IP 'x.x.x.x' is not allowed","data":{}}
|
893
1078
|
#
|