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/async_support/ace.py
CHANGED
@@ -7,11 +7,11 @@ from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.ace import ImplicitAPI
|
8
8
|
from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
|
9
9
|
from typing import List
|
10
|
+
from ccxt.base.errors import AuthenticationError
|
10
11
|
from ccxt.base.errors import ArgumentsRequired
|
11
12
|
from ccxt.base.errors import BadRequest
|
12
13
|
from ccxt.base.errors import InsufficientFunds
|
13
14
|
from ccxt.base.errors import InvalidOrder
|
14
|
-
from ccxt.base.errors import AuthenticationError
|
15
15
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
16
16
|
from ccxt.base.precise import Precise
|
17
17
|
|
@@ -67,8 +67,13 @@ class ace(Exchange, ImplicitAPI):
|
|
67
67
|
'fetchOrderBook': True,
|
68
68
|
'fetchOrders': False,
|
69
69
|
'fetchOrderTrades': True,
|
70
|
+
'fetchPosition': False,
|
71
|
+
'fetchPositionHistory': False,
|
70
72
|
'fetchPositionMode': False,
|
71
73
|
'fetchPositions': False,
|
74
|
+
'fetchPositionsForSymbol': False,
|
75
|
+
'fetchPositionsHistory': False,
|
76
|
+
'fetchPositionsRisk': False,
|
72
77
|
'fetchPremiumIndexOHLCV': False,
|
73
78
|
'fetchTicker': True,
|
74
79
|
'fetchTickers': True,
|
@@ -103,7 +108,7 @@ class ace(Exchange, ImplicitAPI):
|
|
103
108
|
'1M': 31,
|
104
109
|
},
|
105
110
|
'urls': {
|
106
|
-
'logo': 'https://
|
111
|
+
'logo': 'https://github.com/user-attachments/assets/115f1e4a-0fd0-4b76-85d5-a49ebf64d1c8',
|
107
112
|
'api': {
|
108
113
|
'public': 'https://ace.io/polarisex',
|
109
114
|
'private': 'https://ace.io/polarisex/open',
|
@@ -149,6 +154,64 @@ class ace(Exchange, ImplicitAPI):
|
|
149
154
|
'options': {
|
150
155
|
'brokerId': 'ccxt',
|
151
156
|
},
|
157
|
+
'features': {
|
158
|
+
'spot': {
|
159
|
+
'sandbox': False,
|
160
|
+
'createOrder': {
|
161
|
+
'marginMode': False,
|
162
|
+
'triggerPrice': False,
|
163
|
+
'triggerPriceType': None,
|
164
|
+
'triggerDirection': False,
|
165
|
+
'stopLossPrice': False,
|
166
|
+
'takeProfitPrice': False,
|
167
|
+
'attachedStopLossTakeProfit': None, # not supported
|
168
|
+
'timeInForce': {
|
169
|
+
'IOC': False,
|
170
|
+
'FOK': False,
|
171
|
+
'PO': False,
|
172
|
+
'GTD': False,
|
173
|
+
},
|
174
|
+
'hedged': False,
|
175
|
+
'leverage': False,
|
176
|
+
'marketBuyRequiresPrice': False,
|
177
|
+
'marketBuyByCost': False,
|
178
|
+
'selfTradePrevention': False,
|
179
|
+
'trailing': False,
|
180
|
+
'iceberg': False,
|
181
|
+
},
|
182
|
+
'createOrders': None,
|
183
|
+
'fetchMyTrades': {
|
184
|
+
'marginMode': False,
|
185
|
+
'limit': 500,
|
186
|
+
'daysBack': None,
|
187
|
+
'untilDays': None,
|
188
|
+
},
|
189
|
+
'fetchOrder': {
|
190
|
+
'marginMode': False,
|
191
|
+
'trigger': False,
|
192
|
+
'trailing': False,
|
193
|
+
},
|
194
|
+
'fetchOpenOrders': {
|
195
|
+
'marginMode': False,
|
196
|
+
'limit': None,
|
197
|
+
'trigger': False,
|
198
|
+
'trailing': False,
|
199
|
+
},
|
200
|
+
'fetchOrders': None,
|
201
|
+
'fetchClosedOrders': None,
|
202
|
+
'fetchOHLCV': {
|
203
|
+
'limit': 2000,
|
204
|
+
},
|
205
|
+
},
|
206
|
+
'swap': {
|
207
|
+
'linear': None,
|
208
|
+
'inverse': None,
|
209
|
+
},
|
210
|
+
'future': {
|
211
|
+
'linear': None,
|
212
|
+
'inverse': None,
|
213
|
+
},
|
214
|
+
},
|
152
215
|
'precisionMode': TICK_SIZE,
|
153
216
|
'exceptions': {
|
154
217
|
'exact': {
|
@@ -173,10 +236,12 @@ class ace(Exchange, ImplicitAPI):
|
|
173
236
|
},
|
174
237
|
})
|
175
238
|
|
176
|
-
async def fetch_markets(self, params={}):
|
239
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
177
240
|
"""
|
178
241
|
retrieves data on all markets for ace
|
179
|
-
|
242
|
+
|
243
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---market-pair
|
244
|
+
|
180
245
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
181
246
|
:returns dict[]: an array of objects representing market data
|
182
247
|
"""
|
@@ -197,11 +262,24 @@ class ace(Exchange, ImplicitAPI):
|
|
197
262
|
#
|
198
263
|
return self.parse_markets(response)
|
199
264
|
|
200
|
-
def parse_market(self, market) -> Market:
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
265
|
+
def parse_market(self, market: dict) -> Market:
|
266
|
+
#
|
267
|
+
# {
|
268
|
+
# "symbol": "ADA/TWD",
|
269
|
+
# "base": "ADA",
|
270
|
+
# "baseCurrencyId": "122",
|
271
|
+
# "quote": "TWD",
|
272
|
+
# "quoteCurrencyId": "1",
|
273
|
+
# "basePrecision": "2",
|
274
|
+
# "quotePrecision": "3",
|
275
|
+
# "minLimitBaseAmount": "1.0",
|
276
|
+
# "maxLimitBaseAmount": "150000.0"
|
277
|
+
# }
|
278
|
+
#
|
279
|
+
baseId = self.safe_string(market, 'baseCurrencyId')
|
280
|
+
base = self.safe_currency_code(self.safe_string(market, 'base'))
|
281
|
+
quoteId = self.safe_string(market, 'quoteCurrencyId')
|
282
|
+
quote = self.safe_currency_code(self.safe_string(market, 'quote'))
|
205
283
|
symbol = base + '/' + quote
|
206
284
|
return {
|
207
285
|
'id': self.safe_string(market, 'symbol'),
|
@@ -254,7 +332,7 @@ class ace(Exchange, ImplicitAPI):
|
|
254
332
|
'info': market,
|
255
333
|
}
|
256
334
|
|
257
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
335
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
258
336
|
#
|
259
337
|
# {
|
260
338
|
# "base_volume":229196.34035399999,
|
@@ -290,7 +368,9 @@ class ace(Exchange, ImplicitAPI):
|
|
290
368
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
291
369
|
"""
|
292
370
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
293
|
-
|
371
|
+
|
372
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---trade-data
|
373
|
+
|
294
374
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
295
375
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
296
376
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -299,7 +379,7 @@ class ace(Exchange, ImplicitAPI):
|
|
299
379
|
market = self.market(symbol)
|
300
380
|
response = await self.publicGetOapiV2ListTradePrice(params)
|
301
381
|
marketId = market['id']
|
302
|
-
ticker = self.
|
382
|
+
ticker = self.safe_dict(response, marketId, {})
|
303
383
|
#
|
304
384
|
# {
|
305
385
|
# "BTC/USDT":{
|
@@ -314,7 +394,9 @@ class ace(Exchange, ImplicitAPI):
|
|
314
394
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
315
395
|
"""
|
316
396
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
317
|
-
|
397
|
+
|
398
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#oapi-api---trade-data
|
399
|
+
|
318
400
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
319
401
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
320
402
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
@@ -335,7 +417,7 @@ class ace(Exchange, ImplicitAPI):
|
|
335
417
|
for i in range(0, len(pairs)):
|
336
418
|
marketId = pairs[i]
|
337
419
|
market = self.safe_market(marketId)
|
338
|
-
rawTicker = self.
|
420
|
+
rawTicker = self.safe_dict(response, marketId, {})
|
339
421
|
ticker = self.parse_ticker(rawTicker, market)
|
340
422
|
tickers.append(ticker)
|
341
423
|
return self.filter_by_array_tickers(tickers, 'symbol', symbols)
|
@@ -343,7 +425,9 @@ class ace(Exchange, ImplicitAPI):
|
|
343
425
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
344
426
|
"""
|
345
427
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
346
|
-
|
428
|
+
|
429
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-books
|
430
|
+
|
347
431
|
:param str symbol: unified symbol of the market to fetch the order book for
|
348
432
|
:param int [limit]: the maximum amount of order book entries to return
|
349
433
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -351,7 +435,7 @@ class ace(Exchange, ImplicitAPI):
|
|
351
435
|
"""
|
352
436
|
await self.load_markets()
|
353
437
|
market = self.market(symbol)
|
354
|
-
request = {
|
438
|
+
request: dict = {
|
355
439
|
'quoteCurrencyId': market['quoteId'],
|
356
440
|
'baseCurrencyId': market['baseId'],
|
357
441
|
}
|
@@ -395,8 +479,8 @@ class ace(Exchange, ImplicitAPI):
|
|
395
479
|
# "status": 200
|
396
480
|
# }
|
397
481
|
#
|
398
|
-
orderBook = self.
|
399
|
-
return self.parse_order_book(orderBook, market['symbol'], None, 'bids', 'asks')
|
482
|
+
orderBook = self.safe_dict(response, 'attachment')
|
483
|
+
return self.parse_order_book(orderBook, market['symbol'], None, 'bids', 'asks', 1, 0)
|
400
484
|
|
401
485
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
402
486
|
#
|
@@ -429,7 +513,9 @@ class ace(Exchange, ImplicitAPI):
|
|
429
513
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
430
514
|
"""
|
431
515
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
432
|
-
|
516
|
+
|
517
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---klinecandlestick-data
|
518
|
+
|
433
519
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
434
520
|
:param str timeframe: the length of time each candle represents
|
435
521
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -439,7 +525,7 @@ class ace(Exchange, ImplicitAPI):
|
|
439
525
|
"""
|
440
526
|
await self.load_markets()
|
441
527
|
market = self.market(symbol)
|
442
|
-
request = {
|
528
|
+
request: dict = {
|
443
529
|
'duration': self.timeframes[timeframe],
|
444
530
|
'quoteCurrencyId': market['quoteId'],
|
445
531
|
'baseCurrencyId': market['baseId'],
|
@@ -449,7 +535,7 @@ class ace(Exchange, ImplicitAPI):
|
|
449
535
|
if since is not None:
|
450
536
|
request['startTime'] = since
|
451
537
|
response = await self.privatePostV2KlineGetKline(self.extend(request, params))
|
452
|
-
data = self.
|
538
|
+
data = self.safe_list(response, 'attachment', [])
|
453
539
|
#
|
454
540
|
# {
|
455
541
|
# "attachment":[
|
@@ -470,8 +556,8 @@ class ace(Exchange, ImplicitAPI):
|
|
470
556
|
#
|
471
557
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
472
558
|
|
473
|
-
def parse_order_status(self, status):
|
474
|
-
statuses = {
|
559
|
+
def parse_order_status(self, status: Str):
|
560
|
+
statuses: dict = {
|
475
561
|
'0': 'open',
|
476
562
|
'1': 'open',
|
477
563
|
'2': 'closed',
|
@@ -480,7 +566,7 @@ class ace(Exchange, ImplicitAPI):
|
|
480
566
|
}
|
481
567
|
return self.safe_string(statuses, status, None)
|
482
568
|
|
483
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
569
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
484
570
|
#
|
485
571
|
# createOrder
|
486
572
|
# "15697850529570392100421100482693"
|
@@ -528,18 +614,18 @@ class ace(Exchange, ImplicitAPI):
|
|
528
614
|
if dateTime is not None:
|
529
615
|
timestamp = self.parse8601(dateTime)
|
530
616
|
timestamp = timestamp - 28800000 # 8 hours
|
531
|
-
orderSide = self.
|
617
|
+
orderSide = self.safe_string(order, 'buyOrSell')
|
532
618
|
if orderSide is not None:
|
533
|
-
side = 'buy' if (orderSide == 1) else 'sell'
|
619
|
+
side = 'buy' if (orderSide == '1') else 'sell'
|
534
620
|
amount = self.safe_string(order, 'num')
|
535
621
|
price = self.safe_string(order, 'price')
|
536
622
|
quoteId = self.safe_string(order, 'quoteCurrencyName')
|
537
623
|
baseId = self.safe_string(order, 'baseCurrencyName')
|
538
624
|
if quoteId is not None and baseId is not None:
|
539
625
|
symbol = baseId + '/' + quoteId
|
540
|
-
orderType = self.
|
626
|
+
orderType = self.safe_string(order, 'type')
|
541
627
|
if orderType is not None:
|
542
|
-
type = 'limit' if (orderType == 1) else 'market'
|
628
|
+
type = 'limit' if (orderType == '1') else 'market'
|
543
629
|
filled = self.safe_string(order, 'tradeNum')
|
544
630
|
remaining = self.safe_string(order, 'remainNum')
|
545
631
|
status = self.parse_order_status(self.safe_string(order, 'status'))
|
@@ -556,7 +642,7 @@ class ace(Exchange, ImplicitAPI):
|
|
556
642
|
'postOnly': None,
|
557
643
|
'side': side,
|
558
644
|
'price': price,
|
559
|
-
'
|
645
|
+
'triggerPrice': None,
|
560
646
|
'amount': amount,
|
561
647
|
'cost': None,
|
562
648
|
'average': average,
|
@@ -571,12 +657,14 @@ class ace(Exchange, ImplicitAPI):
|
|
571
657
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
572
658
|
"""
|
573
659
|
create a trade order
|
574
|
-
|
660
|
+
|
661
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---new-order
|
662
|
+
|
575
663
|
:param str symbol: unified symbol of the market to create an order in
|
576
664
|
:param str type: 'market' or 'limit'
|
577
665
|
:param str side: 'buy' or 'sell'
|
578
666
|
:param float amount: how much of currency you want to trade in units of base currency
|
579
|
-
:param float [price]: the price at which the order is to be
|
667
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
580
668
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
581
669
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
582
670
|
"""
|
@@ -584,7 +672,7 @@ class ace(Exchange, ImplicitAPI):
|
|
584
672
|
market = self.market(symbol)
|
585
673
|
orderType = type.upper()
|
586
674
|
orderSide = side.upper()
|
587
|
-
request = {
|
675
|
+
request: dict = {
|
588
676
|
'baseCurrencyId': market['baseId'],
|
589
677
|
'quoteCurrencyId': market['quoteId'],
|
590
678
|
'type': 1 if (orderType == 'LIMIT') else 2,
|
@@ -602,20 +690,22 @@ class ace(Exchange, ImplicitAPI):
|
|
602
690
|
# "status": 200
|
603
691
|
# }
|
604
692
|
#
|
605
|
-
data = self.
|
693
|
+
data = self.safe_dict(response, 'attachment')
|
606
694
|
return self.parse_order(data, market)
|
607
695
|
|
608
696
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
609
697
|
"""
|
610
698
|
cancels an open order
|
611
|
-
|
699
|
+
|
700
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---cancel-order
|
701
|
+
|
612
702
|
:param str id: order id
|
613
703
|
:param str symbol: unified symbol of the market the order was made in
|
614
704
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
615
705
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
616
706
|
"""
|
617
707
|
await self.load_markets()
|
618
|
-
request = {
|
708
|
+
request: dict = {
|
619
709
|
'orderNo': id,
|
620
710
|
}
|
621
711
|
response = await self.privatePostV2OrderCancel(self.extend(request, params))
|
@@ -632,13 +722,16 @@ class ace(Exchange, ImplicitAPI):
|
|
632
722
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
633
723
|
"""
|
634
724
|
fetches information on an order made by the user
|
635
|
-
|
725
|
+
|
726
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-status
|
727
|
+
|
728
|
+
:param str id: the order id
|
636
729
|
:param str symbol: unified symbol of the market the order was made in
|
637
730
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
638
731
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
639
732
|
"""
|
640
733
|
await self.load_markets()
|
641
|
-
request = {
|
734
|
+
request: dict = {
|
642
735
|
'orderNo': id,
|
643
736
|
}
|
644
737
|
response = await self.privatePostV2OrderShowOrderStatus(self.extend(request, params))
|
@@ -664,13 +757,15 @@ class ace(Exchange, ImplicitAPI):
|
|
664
757
|
# "status": 200
|
665
758
|
# }
|
666
759
|
#
|
667
|
-
data = self.
|
760
|
+
data = self.safe_dict(response, 'attachment')
|
668
761
|
return self.parse_order(data, None)
|
669
762
|
|
670
763
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
671
764
|
"""
|
672
765
|
fetch all unfilled currently open orders
|
673
|
-
|
766
|
+
|
767
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-list
|
768
|
+
|
674
769
|
:param str symbol: unified market symbol of the market orders were made in
|
675
770
|
:param int [since]: the earliest time in ms to fetch orders for
|
676
771
|
:param int [limit]: the maximum number of order structures to retrieve
|
@@ -681,7 +776,7 @@ class ace(Exchange, ImplicitAPI):
|
|
681
776
|
raise ArgumentsRequired(self.id + ' fetchOpenOrders() requires a symbol argument')
|
682
777
|
await self.load_markets()
|
683
778
|
market = self.market(symbol)
|
684
|
-
request = {
|
779
|
+
request: dict = {
|
685
780
|
'quoteCurrencyId': market['quoteId'],
|
686
781
|
'baseCurrencyId': market['baseId'],
|
687
782
|
# 'start': 0,
|
@@ -689,7 +784,7 @@ class ace(Exchange, ImplicitAPI):
|
|
689
784
|
if limit is not None:
|
690
785
|
request['size'] = limit
|
691
786
|
response = await self.privatePostV2OrderGetOrderList(self.extend(request, params))
|
692
|
-
orders = self.
|
787
|
+
orders = self.safe_list(response, 'attachment')
|
693
788
|
#
|
694
789
|
# {
|
695
790
|
# "attachment": [
|
@@ -721,7 +816,7 @@ class ace(Exchange, ImplicitAPI):
|
|
721
816
|
#
|
722
817
|
return self.parse_orders(orders, market, since, limit)
|
723
818
|
|
724
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
819
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
725
820
|
#
|
726
821
|
# fetchOrderTrades
|
727
822
|
# {
|
@@ -799,7 +894,9 @@ class ace(Exchange, ImplicitAPI):
|
|
799
894
|
async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
800
895
|
"""
|
801
896
|
fetch all the trades made from a single order
|
802
|
-
|
897
|
+
|
898
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---order-history
|
899
|
+
|
803
900
|
:param str id: order id
|
804
901
|
:param str symbol: unified market symbol
|
805
902
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -809,7 +906,7 @@ class ace(Exchange, ImplicitAPI):
|
|
809
906
|
"""
|
810
907
|
await self.load_markets()
|
811
908
|
market = self.safe_market(symbol)
|
812
|
-
request = {
|
909
|
+
request: dict = {
|
813
910
|
'orderNo': id,
|
814
911
|
}
|
815
912
|
response = await self.privatePostV2OrderShowOrderHistory(self.extend(request, params))
|
@@ -846,14 +943,16 @@ class ace(Exchange, ImplicitAPI):
|
|
846
943
|
# "status": 200
|
847
944
|
# }
|
848
945
|
#
|
849
|
-
data = self.
|
850
|
-
trades = self.
|
946
|
+
data = self.safe_dict(response, 'attachment')
|
947
|
+
trades = self.safe_list(data, 'trades', [])
|
851
948
|
return self.parse_trades(trades, market, since, limit)
|
852
949
|
|
853
950
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
854
951
|
"""
|
855
952
|
fetch all trades made by the user
|
856
|
-
|
953
|
+
|
954
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---trade-list
|
955
|
+
|
857
956
|
:param str symbol: unified symbol of the market to fetch trades for
|
858
957
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
859
958
|
:param int [limit]: the maximum amount of trades to fetch
|
@@ -862,7 +961,7 @@ class ace(Exchange, ImplicitAPI):
|
|
862
961
|
"""
|
863
962
|
await self.load_markets()
|
864
963
|
market = self.safe_market(symbol)
|
865
|
-
request = {
|
964
|
+
request: dict = {
|
866
965
|
# 'buyOrSell': 1,
|
867
966
|
# 'start': 0,
|
868
967
|
}
|
@@ -902,7 +1001,7 @@ class ace(Exchange, ImplicitAPI):
|
|
902
1001
|
# "status": 200
|
903
1002
|
# }
|
904
1003
|
#
|
905
|
-
trades = self.
|
1004
|
+
trades = self.safe_list(response, 'attachment', [])
|
906
1005
|
return self.parse_trades(trades, market, since, limit)
|
907
1006
|
|
908
1007
|
def parse_balance(self, response) -> Balances:
|
@@ -917,7 +1016,7 @@ class ace(Exchange, ImplicitAPI):
|
|
917
1016
|
# }
|
918
1017
|
# ]
|
919
1018
|
#
|
920
|
-
result = {
|
1019
|
+
result: dict = {
|
921
1020
|
'info': response,
|
922
1021
|
}
|
923
1022
|
for i in range(0, len(response)):
|
@@ -926,7 +1025,7 @@ class ace(Exchange, ImplicitAPI):
|
|
926
1025
|
code = self.safe_currency_code(currencyId)
|
927
1026
|
amount = self.safe_string(balance, 'amount')
|
928
1027
|
available = self.safe_string(balance, 'cashAmount')
|
929
|
-
account = {
|
1028
|
+
account: dict = {
|
930
1029
|
'free': available,
|
931
1030
|
'total': amount,
|
932
1031
|
}
|
@@ -936,13 +1035,15 @@ class ace(Exchange, ImplicitAPI):
|
|
936
1035
|
async def fetch_balance(self, params={}) -> Balances:
|
937
1036
|
"""
|
938
1037
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
939
|
-
|
1038
|
+
|
1039
|
+
https://github.com/ace-exchange/ace-official-api-docs/blob/master/api_v2.md#open-api---account-balance
|
1040
|
+
|
940
1041
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
941
1042
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
942
1043
|
"""
|
943
1044
|
await self.load_markets()
|
944
1045
|
response = await self.privatePostV2CoinCustomerAccount(params)
|
945
|
-
balances = self.
|
1046
|
+
balances = self.safe_list(response, 'attachment', [])
|
946
1047
|
#
|
947
1048
|
# {
|
948
1049
|
# "attachment":[
|
@@ -972,13 +1073,16 @@ class ace(Exchange, ImplicitAPI):
|
|
972
1073
|
auth = 'ACE_SIGN' + self.secret
|
973
1074
|
data = self.extend({
|
974
1075
|
'apiKey': self.apiKey,
|
975
|
-
'timeStamp': nonce,
|
1076
|
+
'timeStamp': self.number_to_string(nonce),
|
976
1077
|
}, params)
|
977
|
-
|
978
|
-
|
979
|
-
|
980
|
-
|
981
|
-
|
1078
|
+
sortedData = self.keysort(data)
|
1079
|
+
values = list(sortedData.values())
|
1080
|
+
stringifiedValues = []
|
1081
|
+
for i in range(0, len(values)):
|
1082
|
+
value = values[i]
|
1083
|
+
strValue = str(value)
|
1084
|
+
stringifiedValues.append(strValue)
|
1085
|
+
auth += ''.join(stringifiedValues)
|
982
1086
|
signature = self.hash(self.encode(auth), 'sha256', 'hex')
|
983
1087
|
data['signKey'] = signature
|
984
1088
|
headers = {
|
@@ -995,7 +1099,7 @@ class ace(Exchange, ImplicitAPI):
|
|
995
1099
|
url = self.urls['api'][api] + url
|
996
1100
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
997
1101
|
|
998
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1102
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
999
1103
|
if response is None:
|
1000
1104
|
return None # fallback to the default error handler
|
1001
1105
|
feedback = self.id + ' ' + body
|