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/onetrading.py
CHANGED
@@ -5,9 +5,10 @@
|
|
5
5
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.onetrading import ImplicitAPI
|
8
|
-
from ccxt.base.types import Balances,
|
8
|
+
from ccxt.base.types import Balances, Currencies, 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
|
@@ -15,9 +16,9 @@ from ccxt.base.errors import InsufficientFunds
|
|
15
16
|
from ccxt.base.errors import InvalidAddress
|
16
17
|
from ccxt.base.errors import InvalidOrder
|
17
18
|
from ccxt.base.errors import OrderNotFound
|
19
|
+
from ccxt.base.errors import NotSupported
|
18
20
|
from ccxt.base.errors import DDoSProtection
|
19
21
|
from ccxt.base.errors import ExchangeNotAvailable
|
20
|
-
from ccxt.base.errors import AuthenticationError
|
21
22
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
22
23
|
from ccxt.base.precise import Precise
|
23
24
|
|
@@ -46,7 +47,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
46
47
|
'cancelOrders': True,
|
47
48
|
'closeAllPositions': False,
|
48
49
|
'closePosition': False,
|
49
|
-
'createDepositAddress':
|
50
|
+
'createDepositAddress': False,
|
50
51
|
'createOrder': True,
|
51
52
|
'createReduceOnlyOrder': False,
|
52
53
|
'createStopLimitOrder': True,
|
@@ -61,9 +62,10 @@ class onetrading(Exchange, ImplicitAPI):
|
|
61
62
|
'fetchCrossBorrowRates': False,
|
62
63
|
'fetchCurrencies': True,
|
63
64
|
'fetchDeposit': False,
|
64
|
-
'fetchDepositAddress':
|
65
|
+
'fetchDepositAddress': False,
|
65
66
|
'fetchDepositAddresses': False,
|
66
|
-
'
|
67
|
+
'fetchDepositAddressesByNetwork': False,
|
68
|
+
'fetchDeposits': False,
|
67
69
|
'fetchDepositsWithdrawals': False,
|
68
70
|
'fetchFundingHistory': False,
|
69
71
|
'fetchFundingRate': False,
|
@@ -86,14 +88,17 @@ class onetrading(Exchange, ImplicitAPI):
|
|
86
88
|
'fetchOrders': False,
|
87
89
|
'fetchOrderTrades': True,
|
88
90
|
'fetchPosition': False,
|
91
|
+
'fetchPositionHistory': False,
|
89
92
|
'fetchPositionMode': False,
|
90
93
|
'fetchPositions': False,
|
94
|
+
'fetchPositionsForSymbol': False,
|
95
|
+
'fetchPositionsHistory': False,
|
91
96
|
'fetchPositionsRisk': False,
|
92
97
|
'fetchPremiumIndexOHLCV': False,
|
93
98
|
'fetchTicker': True,
|
94
99
|
'fetchTickers': True,
|
95
100
|
'fetchTime': True,
|
96
|
-
'fetchTrades':
|
101
|
+
'fetchTrades': False,
|
97
102
|
'fetchTradingFee': False,
|
98
103
|
'fetchTradingFees': True,
|
99
104
|
'fetchTransactionFee': False,
|
@@ -102,14 +107,14 @@ class onetrading(Exchange, ImplicitAPI):
|
|
102
107
|
'fetchTransfer': False,
|
103
108
|
'fetchTransfers': False,
|
104
109
|
'fetchWithdrawal': False,
|
105
|
-
'fetchWithdrawals':
|
110
|
+
'fetchWithdrawals': False,
|
106
111
|
'reduceMargin': False,
|
107
112
|
'setLeverage': False,
|
108
113
|
'setMargin': False,
|
109
114
|
'setMarginMode': False,
|
110
115
|
'setPositionMode': False,
|
111
116
|
'transfer': False,
|
112
|
-
'withdraw':
|
117
|
+
'withdraw': False,
|
113
118
|
},
|
114
119
|
'timeframes': {
|
115
120
|
'1m': '1/MINUTES',
|
@@ -125,8 +130,8 @@ class onetrading(Exchange, ImplicitAPI):
|
|
125
130
|
'urls': {
|
126
131
|
'logo': 'https://github.com/ccxt/ccxt/assets/43336371/bdbc26fd-02f2-4ca7-9f1e-17333690bb1c',
|
127
132
|
'api': {
|
128
|
-
'public': 'https://api.onetrading.com/
|
129
|
-
'private': 'https://api.onetrading.com/
|
133
|
+
'public': 'https://api.onetrading.com/fast',
|
134
|
+
'private': 'https://api.onetrading.com/fast',
|
130
135
|
},
|
131
136
|
'www': 'https://onetrading.com/',
|
132
137
|
'doc': [
|
@@ -144,32 +149,20 @@ class onetrading(Exchange, ImplicitAPI):
|
|
144
149
|
'order-book/{instrument_code}',
|
145
150
|
'market-ticker',
|
146
151
|
'market-ticker/{instrument_code}',
|
147
|
-
'price-ticks/{instrument_code}',
|
148
152
|
'time',
|
149
153
|
],
|
150
154
|
},
|
151
155
|
'private': {
|
152
156
|
'get': [
|
153
157
|
'account/balances',
|
154
|
-
'account/deposit/crypto/{currency_code}',
|
155
|
-
'account/deposit/fiat/EUR',
|
156
|
-
'account/deposits',
|
157
|
-
'account/deposits/bitpanda',
|
158
|
-
'account/withdrawals',
|
159
|
-
'account/withdrawals/bitpanda',
|
160
158
|
'account/fees',
|
161
159
|
'account/orders',
|
162
160
|
'account/orders/{order_id}',
|
163
161
|
'account/orders/{order_id}/trades',
|
164
162
|
'account/trades',
|
165
163
|
'account/trades/{trade_id}',
|
166
|
-
'account/trading-volume',
|
167
164
|
],
|
168
165
|
'post': [
|
169
|
-
'account/deposit/crypto',
|
170
|
-
'account/withdraw/crypto',
|
171
|
-
'account/withdraw/fiat',
|
172
|
-
'account/fees',
|
173
166
|
'account/orders',
|
174
167
|
],
|
175
168
|
'delete': [
|
@@ -296,6 +289,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
296
289
|
'INTERNAL_SERVER_ERROR': ExchangeError,
|
297
290
|
},
|
298
291
|
'broad': {
|
292
|
+
'Order not found.': OrderNotFound,
|
299
293
|
},
|
300
294
|
},
|
301
295
|
'commonCurrencies': {
|
@@ -313,6 +307,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
313
307
|
async def fetch_time(self, params={}):
|
314
308
|
"""
|
315
309
|
fetches the current integer timestamp in milliseconds from the exchange server
|
310
|
+
|
311
|
+
https://docs.onetrading.com/#time
|
312
|
+
|
316
313
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
317
314
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
318
315
|
"""
|
@@ -325,9 +322,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
325
322
|
#
|
326
323
|
return self.safe_integer(response, 'epoch_millis')
|
327
324
|
|
328
|
-
async def fetch_currencies(self, params={}):
|
325
|
+
async def fetch_currencies(self, params={}) -> Currencies:
|
329
326
|
"""
|
330
327
|
fetches all available currencies on an exchange
|
328
|
+
|
329
|
+
https://docs.onetrading.com/#currencies
|
330
|
+
|
331
331
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
332
332
|
:returns dict: an associative dictionary of currencies
|
333
333
|
"""
|
@@ -340,7 +340,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
340
340
|
# }
|
341
341
|
# ]
|
342
342
|
#
|
343
|
-
result = {}
|
343
|
+
result: dict = {}
|
344
344
|
for i in range(0, len(response)):
|
345
345
|
currency = response[i]
|
346
346
|
id = self.safe_string(currency, 'code')
|
@@ -363,9 +363,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
363
363
|
}
|
364
364
|
return result
|
365
365
|
|
366
|
-
async def fetch_markets(self, params={}):
|
366
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
367
367
|
"""
|
368
368
|
retrieves data on all markets for onetrading
|
369
|
+
|
370
|
+
https://docs.onetrading.com/#instruments
|
371
|
+
|
369
372
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
370
373
|
:returns dict[]: an array of objects representing market data
|
371
374
|
"""
|
@@ -384,7 +387,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
384
387
|
#
|
385
388
|
return self.parse_markets(response)
|
386
389
|
|
387
|
-
def parse_market(self, market) -> Market:
|
390
|
+
def parse_market(self, market: dict) -> Market:
|
388
391
|
baseAsset = self.safe_value(market, 'base', {})
|
389
392
|
quoteAsset = self.safe_value(market, 'quote', {})
|
390
393
|
baseId = self.safe_string(baseAsset, 'code')
|
@@ -443,9 +446,13 @@ class onetrading(Exchange, ImplicitAPI):
|
|
443
446
|
'info': market,
|
444
447
|
}
|
445
448
|
|
446
|
-
async def fetch_trading_fees(self, params={}):
|
449
|
+
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
447
450
|
"""
|
448
451
|
fetch the trading fees for multiple markets
|
452
|
+
|
453
|
+
https://docs.onetrading.com/#fee-groups
|
454
|
+
https://docs.onetrading.com/#fees
|
455
|
+
|
449
456
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
450
457
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
451
458
|
"""
|
@@ -454,7 +461,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
454
461
|
if method is None:
|
455
462
|
options = self.safe_value(self.options, 'fetchTradingFees', {})
|
456
463
|
method = self.safe_string(options, 'method', 'fetchPrivateTradingFees')
|
457
|
-
|
464
|
+
if method == 'fetchPrivateTradingFees':
|
465
|
+
return await self.fetch_private_trading_fees(params)
|
466
|
+
elif method == 'fetchPublicTradingFees':
|
467
|
+
return await self.fetch_public_trading_fees(params)
|
468
|
+
else:
|
469
|
+
raise NotSupported(self.id + ' fetchTradingFees() does not support ' + method + ', fetchPrivateTradingFees and fetchPublicTradingFees are supported')
|
458
470
|
|
459
471
|
async def fetch_public_trading_fees(self, params={}):
|
460
472
|
await self.load_markets()
|
@@ -482,7 +494,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
482
494
|
feeTiers = self.safe_value(first, 'fee_tiers')
|
483
495
|
tiers = self.parse_fee_tiers(feeTiers)
|
484
496
|
firstTier = self.safe_value(feeTiers, 0, {})
|
485
|
-
result = {}
|
497
|
+
result: dict = {}
|
486
498
|
for i in range(0, len(self.symbols)):
|
487
499
|
symbol = self.symbols[i]
|
488
500
|
result[symbol] = {
|
@@ -526,7 +538,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
526
538
|
makerFee = Precise.string_div(makerFee, '100')
|
527
539
|
takerFee = Precise.string_div(takerFee, '100')
|
528
540
|
feeTiers = self.safe_value(response, 'fee_tiers')
|
529
|
-
result = {}
|
541
|
+
result: dict = {}
|
530
542
|
tiers = self.parse_fee_tiers(feeTiers)
|
531
543
|
for i in range(0, len(self.symbols)):
|
532
544
|
symbol = self.symbols[i]
|
@@ -558,7 +570,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
558
570
|
'taker': takerFees,
|
559
571
|
}
|
560
572
|
|
561
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
573
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
562
574
|
#
|
563
575
|
# fetchTicker, fetchTickers
|
564
576
|
#
|
@@ -613,13 +625,16 @@ class onetrading(Exchange, ImplicitAPI):
|
|
613
625
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
614
626
|
"""
|
615
627
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
628
|
+
|
629
|
+
https://docs.onetrading.com/#market-ticker-for-instrument
|
630
|
+
|
616
631
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
617
632
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
618
633
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
619
634
|
"""
|
620
635
|
await self.load_markets()
|
621
636
|
market = self.market(symbol)
|
622
|
-
request = {
|
637
|
+
request: dict = {
|
623
638
|
'instrument_code': market['id'],
|
624
639
|
}
|
625
640
|
response = await self.publicGetMarketTickerInstrumentCode(self.extend(request, params))
|
@@ -646,7 +661,10 @@ class onetrading(Exchange, ImplicitAPI):
|
|
646
661
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
647
662
|
"""
|
648
663
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
649
|
-
|
664
|
+
|
665
|
+
https://docs.onetrading.com/#market-ticker
|
666
|
+
|
667
|
+
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
650
668
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
651
669
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
652
670
|
"""
|
@@ -673,7 +691,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
673
691
|
# }
|
674
692
|
# ]
|
675
693
|
#
|
676
|
-
result = {}
|
694
|
+
result: dict = {}
|
677
695
|
for i in range(0, len(response)):
|
678
696
|
ticker = self.parse_ticker(response[i])
|
679
697
|
symbol = ticker['symbol']
|
@@ -683,6 +701,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
683
701
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
684
702
|
"""
|
685
703
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
704
|
+
|
705
|
+
https://docs.onetrading.com/#order-book
|
706
|
+
|
686
707
|
:param str symbol: unified symbol of the market to fetch the order book for
|
687
708
|
:param int [limit]: the maximum amount of order book entries to return
|
688
709
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -690,7 +711,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
690
711
|
"""
|
691
712
|
await self.load_markets()
|
692
713
|
market = self.market(symbol)
|
693
|
-
request = {
|
714
|
+
request: dict = {
|
694
715
|
'instrument_code': market['id'],
|
695
716
|
# level 1 means only the best bid and ask
|
696
717
|
# level 2 is a compiled order book up to market precision
|
@@ -778,7 +799,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
778
799
|
granularity = self.safe_value(ohlcv, 'granularity')
|
779
800
|
unit = self.safe_string(granularity, 'unit')
|
780
801
|
period = self.safe_string(granularity, 'period')
|
781
|
-
units = {
|
802
|
+
units: dict = {
|
782
803
|
'MINUTES': 'm',
|
783
804
|
'HOURS': 'h',
|
784
805
|
'DAYS': 'd',
|
@@ -805,6 +826,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
805
826
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
806
827
|
"""
|
807
828
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
829
|
+
|
830
|
+
https://docs.onetrading.com/#candlesticks
|
831
|
+
|
808
832
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
809
833
|
:param str timeframe: the length of time each candle represents
|
810
834
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -820,7 +844,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
820
844
|
duration = durationInSeconds * 1000
|
821
845
|
if limit is None:
|
822
846
|
limit = 1500
|
823
|
-
request = {
|
847
|
+
request: dict = {
|
824
848
|
'instrument_code': market['id'],
|
825
849
|
# 'from': self.iso8601(since),
|
826
850
|
# 'to': self.iso8601(self.milliseconds()),
|
@@ -842,9 +866,10 @@ class onetrading(Exchange, ImplicitAPI):
|
|
842
866
|
# {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9135.7","low":"9002.59","open":"9055.45","close":"9133.98","total_amount":"26.21919","volume":"238278.8724959","time":"2020-05-09T00:59:59.999Z","last_sequence":461521},
|
843
867
|
# ]
|
844
868
|
#
|
845
|
-
|
869
|
+
ohlcv = self.safe_list(response, 'candlesticks')
|
870
|
+
return self.parse_ohlcvs(ohlcv, market, timeframe, since, limit)
|
846
871
|
|
847
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
872
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
848
873
|
#
|
849
874
|
# fetchTrades(public)
|
850
875
|
#
|
@@ -923,47 +948,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
923
948
|
'info': trade,
|
924
949
|
}, market)
|
925
950
|
|
926
|
-
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
927
|
-
"""
|
928
|
-
get the list of most recent trades for a particular symbol
|
929
|
-
:param str symbol: unified symbol of the market to fetch trades for
|
930
|
-
:param int [since]: timestamp in ms of the earliest trade to fetch
|
931
|
-
:param int [limit]: the maximum amount of trades to fetch
|
932
|
-
:param dict [params]: extra parameters specific to the exchange API endpoint
|
933
|
-
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
|
934
|
-
"""
|
935
|
-
await self.load_markets()
|
936
|
-
market = self.market(symbol)
|
937
|
-
request = {
|
938
|
-
'instrument_code': market['id'],
|
939
|
-
# 'from': self.iso8601(since),
|
940
|
-
# 'to': self.iso8601(self.milliseconds()),
|
941
|
-
}
|
942
|
-
if since is not None:
|
943
|
-
# returns price ticks for a specific market with an interval of maximum of 4 hours
|
944
|
-
# sorted by latest first
|
945
|
-
request['from'] = self.iso8601(since)
|
946
|
-
request['to'] = self.iso8601(self.sum(since, 14400000))
|
947
|
-
response = await self.publicGetPriceTicksInstrumentCode(self.extend(request, params))
|
948
|
-
#
|
949
|
-
# [
|
950
|
-
# {
|
951
|
-
# "instrument_code":"BTC_EUR",
|
952
|
-
# "price":"8137.28",
|
953
|
-
# "amount":"0.22269",
|
954
|
-
# "taker_side":"BUY",
|
955
|
-
# "volume":"1812.0908832",
|
956
|
-
# "time":"2020-07-10T14:44:32.299Z",
|
957
|
-
# "trade_timestamp":1594392272299,
|
958
|
-
# "sequence":603047
|
959
|
-
# }
|
960
|
-
# ]
|
961
|
-
#
|
962
|
-
return self.parse_trades(response, market, since, limit)
|
963
|
-
|
964
951
|
def parse_balance(self, response) -> Balances:
|
965
952
|
balances = self.safe_value(response, 'balances', [])
|
966
|
-
result = {'info': response}
|
953
|
+
result: dict = {'info': response}
|
967
954
|
for i in range(0, len(balances)):
|
968
955
|
balance = balances[i]
|
969
956
|
currencyId = self.safe_string(balance, 'currency_code')
|
@@ -977,6 +964,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
977
964
|
async def fetch_balance(self, params={}) -> Balances:
|
978
965
|
"""
|
979
966
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
967
|
+
|
968
|
+
https://docs.onetrading.com/#balances
|
969
|
+
|
980
970
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
981
971
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
982
972
|
"""
|
@@ -1000,319 +990,8 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1000
990
|
#
|
1001
991
|
return self.parse_balance(response)
|
1002
992
|
|
1003
|
-
def
|
1004
|
-
|
1005
|
-
if currency is not None:
|
1006
|
-
code = currency['code']
|
1007
|
-
address = self.safe_string(depositAddress, 'address')
|
1008
|
-
tag = self.safe_string(depositAddress, 'destination_tag')
|
1009
|
-
self.check_address(address)
|
1010
|
-
return {
|
1011
|
-
'currency': code,
|
1012
|
-
'address': address,
|
1013
|
-
'tag': tag,
|
1014
|
-
'network': None,
|
1015
|
-
'info': depositAddress,
|
1016
|
-
}
|
1017
|
-
|
1018
|
-
async def create_deposit_address(self, code: str, params={}):
|
1019
|
-
"""
|
1020
|
-
create a currency deposit address
|
1021
|
-
:param str code: unified currency code of the currency for the deposit address
|
1022
|
-
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1023
|
-
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
1024
|
-
"""
|
1025
|
-
await self.load_markets()
|
1026
|
-
currency = self.currency(code)
|
1027
|
-
request = {
|
1028
|
-
'currency': currency['id'],
|
1029
|
-
}
|
1030
|
-
response = await self.privatePostAccountDepositCrypto(self.extend(request, params))
|
1031
|
-
#
|
1032
|
-
# {
|
1033
|
-
# "address":"rBnNhk95FrdNisZtXcStzriFS8vEzz53DM",
|
1034
|
-
# "destination_tag":"865690307",
|
1035
|
-
# "enabled":true,
|
1036
|
-
# "is_smart_contract":false
|
1037
|
-
# }
|
1038
|
-
#
|
1039
|
-
return self.parse_deposit_address(response, currency)
|
1040
|
-
|
1041
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
1042
|
-
"""
|
1043
|
-
fetch the deposit address for a currency associated with self account
|
1044
|
-
:param str code: unified currency code
|
1045
|
-
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1046
|
-
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
1047
|
-
"""
|
1048
|
-
await self.load_markets()
|
1049
|
-
currency = self.currency(code)
|
1050
|
-
request = {
|
1051
|
-
'currency_code': currency['id'],
|
1052
|
-
}
|
1053
|
-
response = await self.privateGetAccountDepositCryptoCurrencyCode(self.extend(request, params))
|
1054
|
-
#
|
1055
|
-
# {
|
1056
|
-
# "address":"rBnNhk95FrdNisZtXcStzriFS8vEzz53DM",
|
1057
|
-
# "destination_tag":"865690307",
|
1058
|
-
# "enabled":true,
|
1059
|
-
# "is_smart_contract":false,
|
1060
|
-
# "can_create_more":false
|
1061
|
-
# }
|
1062
|
-
#
|
1063
|
-
return self.parse_deposit_address(response, currency)
|
1064
|
-
|
1065
|
-
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1066
|
-
"""
|
1067
|
-
fetch all deposits made to an account
|
1068
|
-
:param str code: unified currency code
|
1069
|
-
:param int [since]: the earliest time in ms to fetch deposits for
|
1070
|
-
:param int [limit]: the maximum number of deposits structures to retrieve
|
1071
|
-
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1072
|
-
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1073
|
-
"""
|
1074
|
-
await self.load_markets()
|
1075
|
-
request = {
|
1076
|
-
# 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
|
1077
|
-
}
|
1078
|
-
currency = None
|
1079
|
-
if code is not None:
|
1080
|
-
currency = self.currency(code)
|
1081
|
-
request['currency_code'] = currency['id']
|
1082
|
-
if limit is not None:
|
1083
|
-
request['max_page_size'] = limit
|
1084
|
-
if since is not None:
|
1085
|
-
to = self.safe_string(params, 'to')
|
1086
|
-
if to is None:
|
1087
|
-
raise ArgumentsRequired(self.id + ' fetchDeposits() requires a "to" iso8601 string param with the since argument is specified')
|
1088
|
-
request['from'] = self.iso8601(since)
|
1089
|
-
response = await self.privateGetAccountDeposits(self.extend(request, params))
|
1090
|
-
#
|
1091
|
-
# {
|
1092
|
-
# "deposit_history": [
|
1093
|
-
# {
|
1094
|
-
# "transaction_id": "e5342efcd-d5b7-4a56-8e12-b69ffd68c5ef",
|
1095
|
-
# "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
|
1096
|
-
# "amount": "100",
|
1097
|
-
# "type": "CRYPTO",
|
1098
|
-
# "funds_source": "INTERNAL",
|
1099
|
-
# "time": "2020-04-22T09:57:47Z",
|
1100
|
-
# "currency": "BTC",
|
1101
|
-
# "fee_amount": "0.0",
|
1102
|
-
# "fee_currency": "BTC"
|
1103
|
-
# },
|
1104
|
-
# {
|
1105
|
-
# "transaction_id": "79793d00-2899-4a4d-95b7-73ae6b31384f",
|
1106
|
-
# "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
|
1107
|
-
# "time": "2020-05-05T11:22:07.925Z",
|
1108
|
-
# "currency": "EUR",
|
1109
|
-
# "funds_source": "EXTERNAL",
|
1110
|
-
# "type": "FIAT",
|
1111
|
-
# "amount": "50.0",
|
1112
|
-
# "fee_amount": "0.01",
|
1113
|
-
# "fee_currency": "EUR"
|
1114
|
-
# }
|
1115
|
-
# ],
|
1116
|
-
# "max_page_size": 2,
|
1117
|
-
# "cursor": "eyJhY2NvdW50X2lkIjp7InMiOiJlMzY5YWM4MC00NTc3LTExZTktYWUwOC05YmVkYzQ3OTBiODQiLCJzcyI6W10sIm5zIjpbXSwiYnMiOltdLCJtIjp7fSwibCI6W119LCJpdGVtX2tleSI6eyJzIjoiV0lUSERSQVdBTDo6MmFlMjYwY2ItOTk3MC00YmNiLTgxNmEtZGY4MDVmY2VhZTY1Iiwic3MiOltdLCJucyI6W10sImJzIjpbXSwibSI6e30sImwiOltdfSwiZ2xvYmFsX3dpdGhkcmF3YWxfaW5kZXhfaGFzaF9rZXkiOnsicyI6ImUzNjlhYzgwLTQ1NzctMTFlOS1hZTA4LTliZWRjNDc5MGI4NCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX0sInRpbWVzdGFtcCI6eyJuIjoiMTU4ODA1ODc2Nzk0OCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX19"
|
1118
|
-
# }
|
1119
|
-
#
|
1120
|
-
depositHistory = self.safe_value(response, 'deposit_history', [])
|
1121
|
-
return self.parse_transactions(depositHistory, currency, since, limit, {'type': 'deposit'})
|
1122
|
-
|
1123
|
-
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1124
|
-
"""
|
1125
|
-
fetch all withdrawals made from an account
|
1126
|
-
:param str code: unified currency code
|
1127
|
-
:param int [since]: the earliest time in ms to fetch withdrawals for
|
1128
|
-
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
1129
|
-
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1130
|
-
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1131
|
-
"""
|
1132
|
-
await self.load_markets()
|
1133
|
-
request = {
|
1134
|
-
# 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
|
1135
|
-
}
|
1136
|
-
currency = None
|
1137
|
-
if code is not None:
|
1138
|
-
currency = self.currency(code)
|
1139
|
-
request['currency_code'] = currency['id']
|
1140
|
-
if limit is not None:
|
1141
|
-
request['max_page_size'] = limit
|
1142
|
-
if since is not None:
|
1143
|
-
to = self.safe_string(params, 'to')
|
1144
|
-
if to is None:
|
1145
|
-
raise ArgumentsRequired(self.id + ' fetchWithdrawals() requires a "to" iso8601 string param with the since argument is specified')
|
1146
|
-
request['from'] = self.iso8601(since)
|
1147
|
-
response = await self.privateGetAccountWithdrawals(self.extend(request, params))
|
1148
|
-
#
|
1149
|
-
# {
|
1150
|
-
# "withdrawal_history": [
|
1151
|
-
# {
|
1152
|
-
# "account_id": "e369ac80-4577-11e9-ae08-9bedc4790b84",
|
1153
|
-
# "amount": "0.1",
|
1154
|
-
# "currency": "BTC",
|
1155
|
-
# "fee_amount": "0.00002",
|
1156
|
-
# "fee_currency": "BTC",
|
1157
|
-
# "funds_source": "EXTERNAL",
|
1158
|
-
# "related_transaction_id": "e298341a-3855-405e-bce3-92db368a3157",
|
1159
|
-
# "time": "2020-05-05T11:11:32.110Z",
|
1160
|
-
# "transaction_id": "6693ff40-bb10-4dcf-ada7-3b287727c882",
|
1161
|
-
# "type": "CRYPTO"
|
1162
|
-
# },
|
1163
|
-
# {
|
1164
|
-
# "account_id": "e369ac80-4577-11e9-ae08-9bedc4790b84",
|
1165
|
-
# "amount": "0.1",
|
1166
|
-
# "currency": "BTC",
|
1167
|
-
# "fee_amount": "0.0",
|
1168
|
-
# "fee_currency": "BTC",
|
1169
|
-
# "funds_source": "INTERNAL",
|
1170
|
-
# "time": "2020-05-05T10:29:53.464Z",
|
1171
|
-
# "transaction_id": "ec9703b1-954b-4f76-adea-faac66eabc0b",
|
1172
|
-
# "type": "CRYPTO"
|
1173
|
-
# }
|
1174
|
-
# ],
|
1175
|
-
# "cursor": "eyJhY2NvdW50X2lkIjp7InMiOiJlMzY5YWM4MC00NTc3LTExZTktYWUwOC05YmVkYzQ3OTBiODQiLCJzcyI6W10sIm5zIjpbXSwiYnMiOltdLCJtIjp7fSwibCI6W119LCJpdGVtX2tleSI6eyJzIjoiV0lUSERSQVdBTDo6ZWM5NzAzYjEtOTU0Yi00Zjc2LWFkZWEtZmFhYzY2ZWFiYzBiIiwic3MiOltdLCJucyI6W10sImJzIjpbXSwibSI6e30sImwiOltdfSwiZ2xvYmFsX3dpdGhkcmF3YWxfaW5kZXhfaGFzaF9rZXkiOnsicyI6ImUzNjlhYzgwLTQ1NzctMTFlOS1hZTA4LTliZWRjNDc5MGI4NCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX0sInRpbWVzdGFtcCI6eyJuIjoiMTU4ODY3NDU5MzQ2NCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX19",
|
1176
|
-
# "max_page_size": 2
|
1177
|
-
# }
|
1178
|
-
#
|
1179
|
-
withdrawalHistory = self.safe_value(response, 'withdrawal_history', [])
|
1180
|
-
return self.parse_transactions(withdrawalHistory, currency, since, limit, {'type': 'withdrawal'})
|
1181
|
-
|
1182
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1183
|
-
"""
|
1184
|
-
make a withdrawal
|
1185
|
-
:param str code: unified currency code
|
1186
|
-
:param float amount: the amount to withdraw
|
1187
|
-
:param str address: the address to withdraw to
|
1188
|
-
:param str tag:
|
1189
|
-
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1190
|
-
:returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
|
1191
|
-
"""
|
1192
|
-
tag, params = self.handle_withdraw_tag_and_params(tag, params)
|
1193
|
-
self.check_address(address)
|
1194
|
-
await self.load_markets()
|
1195
|
-
currency = self.currency(code)
|
1196
|
-
request = {
|
1197
|
-
'currency': code,
|
1198
|
-
'amount': self.currency_to_precision(code, amount),
|
1199
|
-
# 'payout_account_id': '66756a10-3e86-48f4-9678-b634c4b135b2', # fiat only
|
1200
|
-
# 'recipient': { # crypto only
|
1201
|
-
# 'address': address,
|
1202
|
-
# # 'destination_tag': '',
|
1203
|
-
# },
|
1204
|
-
}
|
1205
|
-
options = self.safe_value(self.options, 'fiat', [])
|
1206
|
-
isFiat = self.in_array(code, options)
|
1207
|
-
method = 'privatePostAccountWithdrawFiat' if isFiat else 'privatePostAccountWithdrawCrypto'
|
1208
|
-
if isFiat:
|
1209
|
-
payoutAccountId = self.safe_string(params, 'payout_account_id')
|
1210
|
-
if payoutAccountId is None:
|
1211
|
-
raise ArgumentsRequired(self.id + ' withdraw() requires a payout_account_id param for fiat ' + code + ' withdrawals')
|
1212
|
-
else:
|
1213
|
-
recipient = {'address': address}
|
1214
|
-
if tag is not None:
|
1215
|
-
recipient['destination_tag'] = tag
|
1216
|
-
request['recipient'] = recipient
|
1217
|
-
response = await getattr(self, method)(self.extend(request, params))
|
1218
|
-
#
|
1219
|
-
# crypto
|
1220
|
-
#
|
1221
|
-
# {
|
1222
|
-
# "amount": "1234.5678",
|
1223
|
-
# "fee": "1234.5678",
|
1224
|
-
# "recipient": "3NacQ7rzZdhfyAtfJ5a11k8jFPdcMP2Bq7",
|
1225
|
-
# "destination_tag": "",
|
1226
|
-
# "transaction_id": "d0f8529f-f832-4e6a-9dc5-b8d5797badb2"
|
1227
|
-
# }
|
1228
|
-
#
|
1229
|
-
# fiat
|
1230
|
-
#
|
1231
|
-
# {
|
1232
|
-
# "transaction_id": "54236cd0-4413-11e9-93fb-5fea7e5b5df6"
|
1233
|
-
# }
|
1234
|
-
#
|
1235
|
-
return self.parse_transaction(response, currency)
|
1236
|
-
|
1237
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1238
|
-
#
|
1239
|
-
# fetchDeposits, fetchWithdrawals
|
1240
|
-
#
|
1241
|
-
# {
|
1242
|
-
# "transaction_id": "C2b42efcd-d5b7-4a56-8e12-b69ffd68c5ef",
|
1243
|
-
# "type": "FIAT",
|
1244
|
-
# "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
|
1245
|
-
# "amount": "1234.5678",
|
1246
|
-
# "time": "2019-08-24T14:15:22Z",
|
1247
|
-
# "funds_source": "INTERNAL",
|
1248
|
-
# "currency": "BTC",
|
1249
|
-
# "fee_amount": "1234.5678",
|
1250
|
-
# "fee_currency": "BTC",
|
1251
|
-
# "blockchain_transaction_id": "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16",
|
1252
|
-
# "related_transaction_id": "e298341a-3855-405e-bce3-92db368a3157"
|
1253
|
-
# }
|
1254
|
-
#
|
1255
|
-
# withdraw
|
1256
|
-
#
|
1257
|
-
#
|
1258
|
-
# crypto
|
1259
|
-
#
|
1260
|
-
# {
|
1261
|
-
# "amount": "1234.5678",
|
1262
|
-
# "fee": "1234.5678",
|
1263
|
-
# "recipient": "3NacQ7rzZdhfyAtfJ5a11k8jFPdcMP2Bq7",
|
1264
|
-
# "destination_tag": "",
|
1265
|
-
# "transaction_id": "d0f8529f-f832-4e6a-9dc5-b8d5797badb2"
|
1266
|
-
# }
|
1267
|
-
#
|
1268
|
-
# fiat
|
1269
|
-
#
|
1270
|
-
# {
|
1271
|
-
# "transaction_id": "54236cd0-4413-11e9-93fb-5fea7e5b5df6"
|
1272
|
-
# }
|
1273
|
-
#
|
1274
|
-
id = self.safe_string(transaction, 'transaction_id')
|
1275
|
-
amount = self.safe_number(transaction, 'amount')
|
1276
|
-
timestamp = self.parse8601(self.safe_string(transaction, 'time'))
|
1277
|
-
currencyId = self.safe_string(transaction, 'currency')
|
1278
|
-
currency = self.safe_currency(currencyId, currency)
|
1279
|
-
status = 'ok' # the exchange returns cleared transactions only
|
1280
|
-
feeCost = self.safe_number_2(transaction, 'fee_amount', 'fee')
|
1281
|
-
fee = None
|
1282
|
-
addressTo = self.safe_string(transaction, 'recipient')
|
1283
|
-
tagTo = self.safe_string(transaction, 'destination_tag')
|
1284
|
-
if feeCost is not None:
|
1285
|
-
feeCurrencyId = self.safe_string(transaction, 'fee_currency', currencyId)
|
1286
|
-
feeCurrencyCode = self.safe_currency_code(feeCurrencyId)
|
1287
|
-
fee = {
|
1288
|
-
'cost': feeCost,
|
1289
|
-
'currency': feeCurrencyCode,
|
1290
|
-
}
|
1291
|
-
return {
|
1292
|
-
'info': transaction,
|
1293
|
-
'id': id,
|
1294
|
-
'currency': currency['code'],
|
1295
|
-
'amount': amount,
|
1296
|
-
'network': None,
|
1297
|
-
'address': addressTo,
|
1298
|
-
'addressFrom': None,
|
1299
|
-
'addressTo': addressTo,
|
1300
|
-
'tag': tagTo,
|
1301
|
-
'tagFrom': None,
|
1302
|
-
'tagTo': tagTo,
|
1303
|
-
'status': status,
|
1304
|
-
'type': None,
|
1305
|
-
'updated': None,
|
1306
|
-
'txid': self.safe_string(transaction, 'blockchain_transaction_id'),
|
1307
|
-
'comment': None,
|
1308
|
-
'internal': None,
|
1309
|
-
'timestamp': timestamp,
|
1310
|
-
'datetime': self.iso8601(timestamp),
|
1311
|
-
'fee': fee,
|
1312
|
-
}
|
1313
|
-
|
1314
|
-
def parse_order_status(self, status):
|
1315
|
-
statuses = {
|
993
|
+
def parse_order_status(self, status: Str):
|
994
|
+
statuses: dict = {
|
1316
995
|
'FILLED': 'open',
|
1317
996
|
'FILLED_FULLY': 'closed',
|
1318
997
|
'FILLED_CLOSED': 'canceled',
|
@@ -1322,10 +1001,11 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1322
1001
|
'CLOSED': 'canceled',
|
1323
1002
|
'FAILED': 'failed',
|
1324
1003
|
'STOP_TRIGGERED': 'triggered',
|
1004
|
+
'DONE': 'closed',
|
1325
1005
|
}
|
1326
1006
|
return self.safe_string(statuses, status, status)
|
1327
1007
|
|
1328
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1008
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1329
1009
|
#
|
1330
1010
|
# createOrder
|
1331
1011
|
#
|
@@ -1406,7 +1086,6 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1406
1086
|
side = self.safe_string_lower(rawOrder, 'side')
|
1407
1087
|
type = self.safe_string_lower(rawOrder, 'type')
|
1408
1088
|
timeInForce = self.parse_time_in_force(self.safe_string(rawOrder, 'time_in_force'))
|
1409
|
-
stopPrice = self.safe_number(rawOrder, 'trigger_price')
|
1410
1089
|
postOnly = self.safe_value(rawOrder, 'is_post_only')
|
1411
1090
|
rawTrades = self.safe_value(order, 'trades', [])
|
1412
1091
|
return self.safe_order({
|
@@ -1417,13 +1096,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1417
1096
|
'datetime': self.iso8601(timestamp),
|
1418
1097
|
'lastTradeTimestamp': None,
|
1419
1098
|
'symbol': symbol,
|
1420
|
-
'type': type,
|
1099
|
+
'type': self.parse_order_type(type),
|
1421
1100
|
'timeInForce': timeInForce,
|
1422
1101
|
'postOnly': postOnly,
|
1423
1102
|
'side': side,
|
1424
1103
|
'price': price,
|
1425
|
-
'
|
1426
|
-
'triggerPrice': stopPrice,
|
1104
|
+
'triggerPrice': self.safe_number(rawOrder, 'trigger_price'),
|
1427
1105
|
'amount': amount,
|
1428
1106
|
'cost': None,
|
1429
1107
|
'average': None,
|
@@ -1434,8 +1112,14 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1434
1112
|
'trades': rawTrades,
|
1435
1113
|
}, market)
|
1436
1114
|
|
1437
|
-
def
|
1438
|
-
|
1115
|
+
def parse_order_type(self, type: Str):
|
1116
|
+
types: dict = {
|
1117
|
+
'booked': 'limit',
|
1118
|
+
}
|
1119
|
+
return self.safe_string(types, type, type)
|
1120
|
+
|
1121
|
+
def parse_time_in_force(self, timeInForce: Str):
|
1122
|
+
timeInForces: dict = {
|
1439
1123
|
'GOOD_TILL_CANCELLED': 'GTC',
|
1440
1124
|
'GOOD_TILL_TIME': 'GTT',
|
1441
1125
|
'IMMEDIATE_OR_CANCELLED': 'IOC',
|
@@ -1446,12 +1130,14 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1446
1130
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1447
1131
|
"""
|
1448
1132
|
create a trade order
|
1449
|
-
|
1133
|
+
|
1134
|
+
https://docs.onetrading.com/#create-order
|
1135
|
+
|
1450
1136
|
:param str symbol: unified symbol of the market to create an order in
|
1451
1137
|
:param str type: 'market' or 'limit'
|
1452
1138
|
:param str side: 'buy' or 'sell'
|
1453
1139
|
:param float amount: how much of currency you want to trade in units of base currency
|
1454
|
-
:param float [price]: the price at which the order is to be
|
1140
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1455
1141
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1456
1142
|
:param float [params.triggerPrice]: onetrading only does stop limit orders and does not do stop market
|
1457
1143
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1459,7 +1145,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1459
1145
|
await self.load_markets()
|
1460
1146
|
market = self.market(symbol)
|
1461
1147
|
uppercaseType = type.upper()
|
1462
|
-
request = {
|
1148
|
+
request: dict = {
|
1463
1149
|
'instrument_code': market['id'],
|
1464
1150
|
'type': uppercaseType, # LIMIT, MARKET, STOP
|
1465
1151
|
'side': side.upper(), # or SELL
|
@@ -1489,6 +1175,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1489
1175
|
if clientOrderId is not None:
|
1490
1176
|
request['client_id'] = clientOrderId
|
1491
1177
|
params = self.omit(params, ['clientOrderId', 'client_id'])
|
1178
|
+
timeInForce = self.safe_string_2(params, 'timeInForce', 'time_in_force', 'GOOD_TILL_CANCELLED')
|
1179
|
+
params = self.omit(params, 'timeInForce')
|
1180
|
+
request['time_in_force'] = timeInForce
|
1492
1181
|
response = await self.privatePostAccountOrders(self.extend(request, params))
|
1493
1182
|
#
|
1494
1183
|
# {
|
@@ -1510,6 +1199,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1510
1199
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1511
1200
|
"""
|
1512
1201
|
cancels an open order
|
1202
|
+
|
1203
|
+
https://docs.onetrading.com/#close-order-by-order-id
|
1204
|
+
|
1513
1205
|
:param str id: order id
|
1514
1206
|
:param str symbol: not used by bitmex cancelOrder()
|
1515
1207
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1519,27 +1211,34 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1519
1211
|
clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_id')
|
1520
1212
|
params = self.omit(params, ['clientOrderId', 'client_id'])
|
1521
1213
|
method = 'privateDeleteAccountOrdersOrderId'
|
1522
|
-
request = {}
|
1214
|
+
request: dict = {}
|
1523
1215
|
if clientOrderId is not None:
|
1524
1216
|
method = 'privateDeleteAccountOrdersClientClientId'
|
1525
1217
|
request['client_id'] = clientOrderId
|
1526
1218
|
else:
|
1527
1219
|
request['order_id'] = id
|
1528
|
-
response =
|
1220
|
+
response = None
|
1221
|
+
if method == 'privateDeleteAccountOrdersOrderId':
|
1222
|
+
response = await self.privateDeleteAccountOrdersOrderId(self.extend(request, params))
|
1223
|
+
else:
|
1224
|
+
response = await self.privateDeleteAccountOrdersClientClientId(self.extend(request, params))
|
1529
1225
|
#
|
1530
1226
|
# responds with an empty body
|
1531
1227
|
#
|
1532
|
-
return response
|
1228
|
+
return self.parse_order(response)
|
1533
1229
|
|
1534
1230
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1535
1231
|
"""
|
1536
1232
|
cancel all open orders
|
1233
|
+
|
1234
|
+
https://docs.onetrading.com/#close-all-orders
|
1235
|
+
|
1537
1236
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
1538
1237
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1539
1238
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1540
1239
|
"""
|
1541
1240
|
await self.load_markets()
|
1542
|
-
request = {}
|
1241
|
+
request: dict = {}
|
1543
1242
|
if symbol is not None:
|
1544
1243
|
market = self.market(symbol)
|
1545
1244
|
request['instrument_code'] = market['id']
|
@@ -1554,13 +1253,16 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1554
1253
|
async def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1555
1254
|
"""
|
1556
1255
|
cancel multiple orders
|
1256
|
+
|
1257
|
+
https://docs.onetrading.com/#close-all-orders
|
1258
|
+
|
1557
1259
|
:param str[] ids: order ids
|
1558
1260
|
:param str symbol: unified market symbol, default is None
|
1559
1261
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1560
1262
|
:returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1561
1263
|
"""
|
1562
1264
|
await self.load_markets()
|
1563
|
-
request = {
|
1265
|
+
request: dict = {
|
1564
1266
|
'ids': ','.join(ids),
|
1565
1267
|
}
|
1566
1268
|
response = await self.privateDeleteAccountOrders(self.extend(request, params))
|
@@ -1574,12 +1276,16 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1574
1276
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1575
1277
|
"""
|
1576
1278
|
fetches information on an order made by the user
|
1279
|
+
|
1280
|
+
https://docs.onetrading.com/#get-order
|
1281
|
+
|
1282
|
+
:param str id: the order id
|
1577
1283
|
:param str symbol: not used by onetrading fetchOrder
|
1578
1284
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1579
1285
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1580
1286
|
"""
|
1581
1287
|
await self.load_markets()
|
1582
|
-
request = {
|
1288
|
+
request: dict = {
|
1583
1289
|
'order_id': id,
|
1584
1290
|
}
|
1585
1291
|
response = await self.privateGetAccountOrdersOrderId(self.extend(request, params))
|
@@ -1629,6 +1335,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1629
1335
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1630
1336
|
"""
|
1631
1337
|
fetch all unfilled currently open orders
|
1338
|
+
|
1339
|
+
https://docs.onetrading.com/#get-orders
|
1340
|
+
|
1632
1341
|
:param str symbol: unified market symbol
|
1633
1342
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1634
1343
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -1636,7 +1345,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1636
1345
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1637
1346
|
"""
|
1638
1347
|
await self.load_markets()
|
1639
|
-
request = {
|
1348
|
+
request: dict = {
|
1640
1349
|
# 'from': self.iso8601(since),
|
1641
1350
|
# 'to': self.iso8601(self.milliseconds()), # max range is 100 days
|
1642
1351
|
# 'instrument_code': market['id'],
|
@@ -1737,19 +1446,22 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1737
1446
|
# "max_page_size": 100
|
1738
1447
|
# }
|
1739
1448
|
#
|
1740
|
-
orderHistory = self.
|
1449
|
+
orderHistory = self.safe_list(response, 'order_history', [])
|
1741
1450
|
return self.parse_orders(orderHistory, market, since, limit)
|
1742
1451
|
|
1743
1452
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1744
1453
|
"""
|
1745
1454
|
fetches information on multiple closed orders made by the user
|
1455
|
+
|
1456
|
+
https://docs.onetrading.com/#get-orders
|
1457
|
+
|
1746
1458
|
:param str symbol: unified market symbol of the market orders were made in
|
1747
1459
|
:param int [since]: the earliest time in ms to fetch orders for
|
1748
1460
|
:param int [limit]: the maximum number of order structures to retrieve
|
1749
1461
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1750
1462
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1751
1463
|
"""
|
1752
|
-
request = {
|
1464
|
+
request: dict = {
|
1753
1465
|
'with_cancelled_and_rejected': True, # default is False, orders which have been cancelled by the user before being filled or rejected by the system, additionally, all inactive filled orders which would return with "with_just_filled_inactive"
|
1754
1466
|
}
|
1755
1467
|
return await self.fetch_open_orders(symbol, since, limit, self.extend(request, params))
|
@@ -1757,6 +1469,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1757
1469
|
async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1758
1470
|
"""
|
1759
1471
|
fetch all the trades made from a single order
|
1472
|
+
|
1473
|
+
https://docs.onetrading.com/#trades-for-order
|
1474
|
+
|
1760
1475
|
:param str id: order id
|
1761
1476
|
:param str symbol: unified market symbol
|
1762
1477
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -1765,7 +1480,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1765
1480
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1766
1481
|
"""
|
1767
1482
|
await self.load_markets()
|
1768
|
-
request = {
|
1483
|
+
request: dict = {
|
1769
1484
|
'order_id': id,
|
1770
1485
|
# 'max_page_size': 100,
|
1771
1486
|
# 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
|
@@ -1812,6 +1527,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1812
1527
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1813
1528
|
"""
|
1814
1529
|
fetch all trades made by the user
|
1530
|
+
|
1531
|
+
https://docs.onetrading.com/#all-trades
|
1532
|
+
|
1815
1533
|
:param str symbol: unified market symbol
|
1816
1534
|
:param int [since]: the earliest time in ms to fetch trades for
|
1817
1535
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -1819,7 +1537,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1819
1537
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1820
1538
|
"""
|
1821
1539
|
await self.load_markets()
|
1822
|
-
request = {
|
1540
|
+
request: dict = {
|
1823
1541
|
# 'from': self.iso8601(since),
|
1824
1542
|
# 'to': self.iso8601(self.milliseconds()), # max range is 100 days
|
1825
1543
|
# 'instrument_code': market['id'],
|
@@ -1868,7 +1586,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1868
1586
|
# "cursor": "string"
|
1869
1587
|
# }
|
1870
1588
|
#
|
1871
|
-
tradeHistory = self.
|
1589
|
+
tradeHistory = self.safe_list(response, 'trade_history', [])
|
1872
1590
|
return self.parse_trades(tradeHistory, market, since, limit)
|
1873
1591
|
|
1874
1592
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
@@ -1891,7 +1609,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1891
1609
|
url += '?' + self.urlencode(query)
|
1892
1610
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1893
1611
|
|
1894
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1612
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1895
1613
|
if response is None:
|
1896
1614
|
return None
|
1897
1615
|
#
|