ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +36 -14
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +112 -48
- ccxt/abstract/binancecoinm.py +112 -48
- ccxt/abstract/binanceus.py +147 -83
- ccxt/abstract/binanceusdm.py +112 -48
- ccxt/abstract/bingx.py +133 -78
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitfinex1.py +69 -0
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +8 -1
- ccxt/abstract/bitmart.py +13 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitpanda.py +0 -12
- ccxt/abstract/bitrue.py +3 -3
- ccxt/abstract/bitstamp.py +26 -3
- ccxt/abstract/blofin.py +24 -0
- ccxt/abstract/btcbox.py +1 -0
- ccxt/abstract/bybit.py +29 -14
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbase.py +6 -0
- ccxt/abstract/coinbaseadvanced.py +94 -0
- ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/coincatch.py +94 -0
- ccxt/abstract/coinex.py +233 -123
- ccxt/abstract/coinmetro.py +1 -0
- ccxt/abstract/cryptocom.py +14 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/gate.py +20 -0
- ccxt/abstract/gateio.py +20 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hashkey.py +67 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +4 -3
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +24 -0
- ccxt/abstract/kucoinfutures.py +34 -0
- ccxt/abstract/luno.py +2 -0
- ccxt/abstract/mexc.py +4 -0
- ccxt/abstract/myokx.py +340 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +30 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/oxfun.py +34 -0
- ccxt/abstract/paradex.py +40 -0
- ccxt/abstract/phemex.py +1 -0
- ccxt/abstract/upbit.py +4 -0
- ccxt/abstract/vertex.py +19 -0
- ccxt/abstract/whitebit.py +31 -1
- ccxt/abstract/woo.py +6 -2
- ccxt/abstract/woofipro.py +119 -0
- ccxt/abstract/xt.py +153 -0
- ccxt/abstract/zonda.py +6 -0
- ccxt/ace.py +164 -60
- ccxt/alpaca.py +727 -63
- ccxt/ascendex.py +395 -249
- ccxt/async_support/__init__.py +36 -14
- ccxt/async_support/ace.py +164 -60
- ccxt/async_support/alpaca.py +727 -63
- ccxt/async_support/ascendex.py +396 -249
- ccxt/async_support/base/exchange.py +531 -155
- ccxt/async_support/base/ws/aiohttp_client.py +28 -5
- ccxt/async_support/base/ws/cache.py +3 -2
- ccxt/async_support/base/ws/client.py +26 -5
- ccxt/async_support/base/ws/fast_client.py +4 -3
- ccxt/async_support/base/ws/functions.py +1 -1
- ccxt/async_support/base/ws/future.py +40 -31
- ccxt/async_support/base/ws/order_book_side.py +3 -0
- ccxt/async_support/bequant.py +1 -1
- ccxt/async_support/bigone.py +329 -202
- ccxt/async_support/binance.py +3030 -1087
- ccxt/async_support/binancecoinm.py +2 -1
- ccxt/async_support/binanceus.py +12 -1
- ccxt/async_support/binanceusdm.py +3 -1
- ccxt/async_support/bingx.py +3205 -937
- ccxt/async_support/bit2c.py +119 -38
- ccxt/async_support/bitbank.py +215 -76
- ccxt/async_support/bitbns.py +124 -53
- ccxt/async_support/bitfinex.py +3236 -1078
- ccxt/async_support/bitfinex1.py +1711 -0
- ccxt/async_support/bitflyer.py +238 -49
- ccxt/async_support/bitget.py +1525 -573
- ccxt/async_support/bithumb.py +199 -65
- ccxt/async_support/bitmart.py +1320 -435
- ccxt/async_support/bitmex.py +308 -111
- ccxt/async_support/bitopro.py +256 -96
- ccxt/async_support/bitrue.py +365 -233
- ccxt/async_support/bitso.py +201 -89
- ccxt/async_support/bitstamp.py +438 -269
- ccxt/async_support/bitteam.py +179 -73
- ccxt/async_support/bitvavo.py +180 -70
- ccxt/async_support/bl3p.py +92 -25
- ccxt/async_support/blockchaincom.py +193 -79
- ccxt/async_support/blofin.py +392 -148
- ccxt/async_support/btcalpha.py +161 -55
- ccxt/async_support/btcbox.py +250 -34
- ccxt/async_support/btcmarkets.py +232 -85
- ccxt/async_support/btcturk.py +159 -60
- ccxt/async_support/bybit.py +2231 -1193
- ccxt/async_support/cex.py +1409 -1329
- ccxt/async_support/coinbase.py +1454 -287
- ccxt/async_support/coinbaseadvanced.py +17 -0
- ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/async_support/coinbaseinternational.py +428 -88
- ccxt/async_support/coincatch.py +5152 -0
- ccxt/async_support/coincheck.py +121 -38
- ccxt/async_support/coinex.py +4020 -3339
- ccxt/async_support/coinlist.py +273 -116
- ccxt/async_support/coinmate.py +204 -97
- ccxt/async_support/coinmetro.py +203 -110
- ccxt/async_support/coinone.py +142 -68
- ccxt/async_support/coinsph.py +223 -97
- ccxt/async_support/coinspot.py +137 -62
- ccxt/async_support/cryptocom.py +515 -185
- ccxt/async_support/currencycom.py +203 -85
- ccxt/async_support/defx.py +2066 -0
- ccxt/async_support/delta.py +404 -109
- ccxt/async_support/deribit.py +639 -323
- ccxt/async_support/digifinex.py +465 -233
- ccxt/async_support/ellipx.py +1887 -0
- ccxt/async_support/exmo.py +317 -128
- ccxt/async_support/gate.py +1472 -463
- ccxt/async_support/gemini.py +206 -84
- ccxt/async_support/hashkey.py +4164 -0
- ccxt/async_support/hitbtc.py +433 -178
- ccxt/async_support/hollaex.py +207 -83
- ccxt/async_support/htx.py +1095 -563
- ccxt/async_support/huobijp.py +178 -56
- ccxt/async_support/hyperliquid.py +1678 -292
- ccxt/async_support/idex.py +219 -95
- ccxt/async_support/independentreserve.py +300 -31
- ccxt/async_support/indodax.py +226 -62
- ccxt/async_support/kraken.py +871 -354
- ccxt/async_support/krakenfutures.py +324 -100
- ccxt/async_support/kucoin.py +917 -357
- ccxt/async_support/kucoinfutures.py +1004 -149
- ccxt/async_support/kuna.py +198 -107
- ccxt/async_support/latoken.py +199 -79
- ccxt/async_support/lbank.py +360 -113
- ccxt/async_support/luno.py +185 -62
- ccxt/async_support/lykke.py +168 -55
- ccxt/async_support/mercado.py +101 -29
- ccxt/async_support/mexc.py +995 -429
- ccxt/async_support/myokx.py +53 -0
- ccxt/async_support/ndax.py +234 -82
- ccxt/async_support/novadax.py +195 -75
- ccxt/async_support/oceanex.py +244 -59
- ccxt/async_support/okcoin.py +301 -165
- ccxt/async_support/okx.py +1776 -454
- ccxt/async_support/onetrading.py +198 -414
- ccxt/async_support/oxfun.py +2898 -0
- ccxt/async_support/p2b.py +142 -52
- ccxt/async_support/paradex.py +2085 -0
- ccxt/async_support/paymium.py +56 -32
- ccxt/async_support/phemex.py +572 -196
- ccxt/async_support/poloniex.py +218 -95
- ccxt/async_support/poloniexfutures.py +260 -92
- ccxt/async_support/probit.py +143 -110
- ccxt/async_support/timex.py +123 -70
- ccxt/async_support/tokocrypto.py +129 -93
- ccxt/async_support/tradeogre.py +39 -25
- ccxt/async_support/upbit.py +322 -113
- ccxt/async_support/vertex.py +2983 -0
- ccxt/async_support/wavesexchange.py +227 -173
- ccxt/async_support/wazirx.py +145 -65
- ccxt/async_support/whitebit.py +533 -138
- ccxt/async_support/woo.py +1137 -296
- ccxt/async_support/woofipro.py +2716 -0
- ccxt/async_support/xt.py +4628 -0
- ccxt/async_support/yobit.py +160 -92
- ccxt/async_support/zaif.py +80 -33
- ccxt/async_support/zonda.py +140 -69
- ccxt/base/errors.py +51 -20
- ccxt/base/exchange.py +1722 -480
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +223 -4
- ccxt/bequant.py +1 -1
- ccxt/bigone.py +329 -202
- ccxt/binance.py +3030 -1087
- ccxt/binancecoinm.py +2 -1
- ccxt/binanceus.py +12 -1
- ccxt/binanceusdm.py +3 -1
- ccxt/bingx.py +3205 -937
- ccxt/bit2c.py +119 -38
- ccxt/bitbank.py +215 -76
- ccxt/bitbns.py +124 -53
- ccxt/bitfinex.py +3235 -1078
- ccxt/bitfinex1.py +1710 -0
- ccxt/bitflyer.py +238 -49
- ccxt/bitget.py +1525 -573
- ccxt/bithumb.py +198 -65
- ccxt/bitmart.py +1320 -435
- ccxt/bitmex.py +308 -111
- ccxt/bitopro.py +256 -96
- ccxt/bitrue.py +365 -233
- ccxt/bitso.py +201 -89
- ccxt/bitstamp.py +438 -269
- ccxt/bitteam.py +179 -73
- ccxt/bitvavo.py +180 -70
- ccxt/bl3p.py +92 -25
- ccxt/blockchaincom.py +193 -79
- ccxt/blofin.py +392 -148
- ccxt/btcalpha.py +161 -55
- ccxt/btcbox.py +250 -34
- ccxt/btcmarkets.py +232 -85
- ccxt/btcturk.py +159 -60
- ccxt/bybit.py +2231 -1193
- ccxt/cex.py +1408 -1329
- ccxt/coinbase.py +1454 -287
- ccxt/coinbaseadvanced.py +17 -0
- ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
- ccxt/coinbaseinternational.py +428 -88
- ccxt/coincatch.py +5152 -0
- ccxt/coincheck.py +121 -38
- ccxt/coinex.py +4020 -3339
- ccxt/coinlist.py +273 -116
- ccxt/coinmate.py +204 -97
- ccxt/coinmetro.py +203 -110
- ccxt/coinone.py +142 -68
- ccxt/coinsph.py +223 -97
- ccxt/coinspot.py +137 -62
- ccxt/cryptocom.py +515 -185
- ccxt/currencycom.py +203 -85
- ccxt/defx.py +2065 -0
- ccxt/delta.py +404 -109
- ccxt/deribit.py +639 -323
- ccxt/digifinex.py +465 -233
- ccxt/ellipx.py +1887 -0
- ccxt/exmo.py +317 -128
- ccxt/gate.py +1472 -463
- ccxt/gemini.py +206 -84
- ccxt/hashkey.py +4164 -0
- ccxt/hitbtc.py +433 -178
- ccxt/hollaex.py +207 -83
- ccxt/htx.py +1095 -563
- ccxt/huobijp.py +178 -56
- ccxt/hyperliquid.py +1677 -292
- ccxt/idex.py +219 -95
- ccxt/independentreserve.py +299 -31
- ccxt/indodax.py +226 -62
- ccxt/kraken.py +871 -354
- ccxt/krakenfutures.py +324 -100
- ccxt/kucoin.py +917 -357
- ccxt/kucoinfutures.py +1004 -149
- ccxt/kuna.py +198 -107
- ccxt/latoken.py +199 -79
- ccxt/lbank.py +360 -113
- ccxt/luno.py +185 -62
- ccxt/lykke.py +168 -55
- ccxt/mercado.py +101 -29
- ccxt/mexc.py +994 -429
- ccxt/myokx.py +53 -0
- ccxt/ndax.py +234 -82
- ccxt/novadax.py +195 -75
- ccxt/oceanex.py +244 -59
- ccxt/okcoin.py +301 -165
- ccxt/okx.py +1776 -454
- ccxt/onetrading.py +198 -414
- ccxt/oxfun.py +2897 -0
- ccxt/p2b.py +142 -52
- ccxt/paradex.py +2085 -0
- ccxt/paymium.py +56 -32
- ccxt/phemex.py +572 -196
- ccxt/poloniex.py +218 -95
- ccxt/poloniexfutures.py +260 -92
- ccxt/pro/__init__.py +29 -5
- ccxt/pro/alpaca.py +32 -17
- ccxt/pro/ascendex.py +62 -14
- ccxt/pro/bequant.py +4 -0
- ccxt/pro/binance.py +1596 -329
- ccxt/pro/binancecoinm.py +1 -0
- ccxt/pro/binanceus.py +2 -9
- ccxt/pro/binanceusdm.py +2 -0
- ccxt/pro/bingx.py +527 -134
- ccxt/pro/bitcoincom.py +4 -1
- ccxt/pro/bitfinex.py +731 -266
- ccxt/pro/bitfinex1.py +635 -0
- ccxt/pro/bitget.py +726 -357
- ccxt/pro/bithumb.py +380 -0
- ccxt/pro/bitmart.py +143 -39
- ccxt/pro/bitmex.py +199 -40
- ccxt/pro/bitopro.py +25 -13
- ccxt/pro/bitrue.py +31 -32
- ccxt/pro/bitstamp.py +7 -6
- ccxt/pro/bitvavo.py +203 -81
- ccxt/pro/blockchaincom.py +30 -17
- ccxt/pro/blofin.py +692 -0
- ccxt/pro/bybit.py +791 -82
- ccxt/pro/cex.py +99 -51
- ccxt/pro/coinbase.py +220 -30
- ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
- ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
- ccxt/pro/coinbaseinternational.py +193 -30
- ccxt/pro/coincatch.py +1464 -0
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +965 -665
- ccxt/pro/coinone.py +17 -10
- ccxt/pro/cryptocom.py +446 -66
- ccxt/pro/currencycom.py +11 -10
- ccxt/pro/defx.py +832 -0
- ccxt/pro/deribit.py +167 -31
- ccxt/pro/exmo.py +252 -20
- ccxt/pro/gate.py +729 -64
- ccxt/pro/gemini.py +44 -26
- ccxt/pro/hashkey.py +802 -0
- ccxt/pro/hitbtc.py +208 -103
- ccxt/pro/hollaex.py +25 -9
- ccxt/pro/htx.py +83 -39
- ccxt/pro/huobijp.py +17 -16
- ccxt/pro/hyperliquid.py +502 -31
- ccxt/pro/idex.py +28 -13
- ccxt/pro/independentreserve.py +21 -16
- ccxt/pro/kraken.py +298 -51
- ccxt/pro/krakenfutures.py +166 -75
- ccxt/pro/kucoin.py +395 -77
- ccxt/pro/kucoinfutures.py +400 -99
- ccxt/pro/lbank.py +52 -31
- ccxt/pro/luno.py +12 -10
- ccxt/pro/mexc.py +400 -50
- ccxt/pro/myokx.py +28 -0
- ccxt/pro/ndax.py +25 -12
- ccxt/pro/okcoin.py +28 -9
- ccxt/pro/okx.py +935 -124
- ccxt/pro/onetrading.py +41 -24
- ccxt/pro/oxfun.py +1054 -0
- ccxt/pro/p2b.py +100 -24
- ccxt/pro/paradex.py +352 -0
- ccxt/pro/phemex.py +92 -33
- ccxt/pro/poloniex.py +128 -49
- ccxt/pro/poloniexfutures.py +53 -32
- ccxt/pro/probit.py +92 -85
- ccxt/pro/upbit.py +401 -8
- ccxt/pro/vertex.py +943 -0
- ccxt/pro/wazirx.py +46 -28
- ccxt/pro/whitebit.py +65 -12
- ccxt/pro/woo.py +437 -65
- ccxt/pro/woofipro.py +1271 -0
- ccxt/pro/xt.py +1067 -0
- ccxt/probit.py +143 -110
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/__init__.py +38 -0
- ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
- ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
- ccxt/static_dependencies/lark/ast_utils.py +59 -0
- ccxt/static_dependencies/lark/common.py +86 -0
- ccxt/static_dependencies/lark/exceptions.py +292 -0
- ccxt/static_dependencies/lark/grammar.py +130 -0
- ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
- ccxt/static_dependencies/lark/indenter.py +143 -0
- ccxt/static_dependencies/lark/lark.py +658 -0
- ccxt/static_dependencies/lark/lexer.py +678 -0
- ccxt/static_dependencies/lark/load_grammar.py +1428 -0
- ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
- ccxt/static_dependencies/lark/parser_frontends.py +257 -0
- ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
- ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
- ccxt/static_dependencies/lark/parsers/earley.py +314 -0
- ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
- ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
- ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
- ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
- ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
- ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
- ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/lark/reconstruct.py +107 -0
- ccxt/static_dependencies/lark/tools/__init__.py +70 -0
- ccxt/static_dependencies/lark/tools/nearley.py +202 -0
- ccxt/static_dependencies/lark/tools/serialize.py +32 -0
- ccxt/static_dependencies/lark/tools/standalone.py +196 -0
- ccxt/static_dependencies/lark/tree.py +267 -0
- ccxt/static_dependencies/lark/tree_matcher.py +186 -0
- ccxt/static_dependencies/lark/tree_templates.py +180 -0
- ccxt/static_dependencies/lark/utils.py +343 -0
- ccxt/static_dependencies/lark/visitors.py +596 -0
- ccxt/static_dependencies/marshmallow/__init__.py +81 -0
- ccxt/static_dependencies/marshmallow/base.py +65 -0
- ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
- ccxt/static_dependencies/marshmallow/decorators.py +231 -0
- ccxt/static_dependencies/marshmallow/error_store.py +60 -0
- ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
- ccxt/static_dependencies/marshmallow/fields.py +2114 -0
- ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/schema.py +1228 -0
- ccxt/static_dependencies/marshmallow/types.py +12 -0
- ccxt/static_dependencies/marshmallow/utils.py +378 -0
- ccxt/static_dependencies/marshmallow/validate.py +678 -0
- ccxt/static_dependencies/marshmallow/warnings.py +2 -0
- ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
- ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
- ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
- ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
- ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
- ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
- ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/static_dependencies/starknet/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
- ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
- ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
- ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
- ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
- ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
- ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
- ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
- ccxt/static_dependencies/starknet/common.py +15 -0
- ccxt/static_dependencies/starknet/constants.py +39 -0
- ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
- ccxt/static_dependencies/starknet/hash/address.py +79 -0
- ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
- ccxt/static_dependencies/starknet/hash/selector.py +16 -0
- ccxt/static_dependencies/starknet/hash/storage.py +12 -0
- ccxt/static_dependencies/starknet/hash/utils.py +78 -0
- ccxt/static_dependencies/starknet/models/__init__.py +0 -0
- ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
- ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
- ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
- ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
- ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
- ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
- ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
- ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
- ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
- ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
- ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
- ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
- ccxt/static_dependencies/starknet/utils/schema.py +13 -0
- ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
- ccxt/static_dependencies/starkware/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
- ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
- ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
- ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
- ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
- ccxt/static_dependencies/sympy/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/__init__.py +0 -0
- ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
- ccxt/static_dependencies/sympy/external/__init__.py +0 -0
- ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
- ccxt/static_dependencies/sympy/external/importtools.py +187 -0
- ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
- ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
- ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
- ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
- ccxt/test/{test_async.py → tests_async.py} +456 -391
- ccxt/test/tests_helpers.py +285 -0
- ccxt/test/tests_init.py +39 -0
- ccxt/test/{test_sync.py → tests_sync.py} +456 -393
- ccxt/timex.py +123 -70
- ccxt/tokocrypto.py +129 -93
- ccxt/tradeogre.py +39 -25
- ccxt/upbit.py +322 -113
- ccxt/vertex.py +2983 -0
- ccxt/wavesexchange.py +227 -173
- ccxt/wazirx.py +145 -65
- ccxt/whitebit.py +533 -138
- ccxt/woo.py +1137 -296
- ccxt/woofipro.py +2716 -0
- ccxt/xt.py +4627 -0
- ccxt/yobit.py +159 -92
- ccxt/zaif.py +80 -33
- ccxt/zonda.py +140 -69
- ccxt-4.4.49.dist-info/LICENSE.txt +21 -0
- ccxt-4.4.49.dist-info/METADATA +646 -0
- ccxt-4.4.49.dist-info/RECORD +669 -0
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/WHEEL +1 -1
- ccxt/abstract/bitbay.py +0 -47
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3496
- ccxt/async_support/flowbtc.py +0 -34
- ccxt/bitbay.py +0 -17
- ccxt/bitfinex2.py +0 -3496
- ccxt/flowbtc.py +0 -34
- ccxt/hitbtc3.py +0 -16
- ccxt/pro/bitfinex2.py +0 -1081
- ccxt/test/base/__init__.py +0 -28
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -103
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -32
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -190
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -32
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -63
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -345
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -86
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt-4.2.77.dist-info/METADATA +0 -626
- ccxt-4.2.77.dist-info/RECORD +0 -534
- {ccxt-4.2.77.dist-info → ccxt-4.4.49.dist-info}/top_level.txt +0 -0
ccxt/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': {
|
@@ -308,11 +302,80 @@ class onetrading(Exchange, ImplicitAPI):
|
|
308
302
|
},
|
309
303
|
'fiat': ['EUR', 'CHF'],
|
310
304
|
},
|
305
|
+
'features': {
|
306
|
+
'spot': {
|
307
|
+
'sandbox': False,
|
308
|
+
'createOrder': {
|
309
|
+
'marginMode': False,
|
310
|
+
'triggerPrice': False,
|
311
|
+
'triggerDirection': False,
|
312
|
+
'triggerPriceType': None,
|
313
|
+
'stopLossPrice': False,
|
314
|
+
'takeProfitPrice': False,
|
315
|
+
'attachedStopLossTakeProfit': None,
|
316
|
+
'timeInForce': {
|
317
|
+
'IOC': True,
|
318
|
+
'FOK': True,
|
319
|
+
'PO': True,
|
320
|
+
'GTD': False,
|
321
|
+
},
|
322
|
+
'hedged': False,
|
323
|
+
'trailing': False,
|
324
|
+
'leverage': False,
|
325
|
+
'marketBuyByCost': False,
|
326
|
+
'marketBuyRequiresPrice': False,
|
327
|
+
'selfTradePrevention': False,
|
328
|
+
'iceberg': False,
|
329
|
+
},
|
330
|
+
'createOrders': None,
|
331
|
+
'fetchMyTrades': {
|
332
|
+
'marginMode': False,
|
333
|
+
'limit': 100,
|
334
|
+
'daysBack': 100000, # todo
|
335
|
+
'untilDays': 100000, # todo
|
336
|
+
},
|
337
|
+
'fetchOrder': {
|
338
|
+
'marginMode': False,
|
339
|
+
'trigger': False,
|
340
|
+
'trailing': False,
|
341
|
+
},
|
342
|
+
'fetchOpenOrders': {
|
343
|
+
'marginMode': False,
|
344
|
+
'limit': 100,
|
345
|
+
'trigger': False,
|
346
|
+
'trailing': False,
|
347
|
+
},
|
348
|
+
'fetchOrders': None, # todo
|
349
|
+
'fetchClosedOrders': {
|
350
|
+
'marginMode': False,
|
351
|
+
'limit': 100,
|
352
|
+
'daysBack': 100000, # todo
|
353
|
+
'daysBackCanceled': 1 / 12, # todo
|
354
|
+
'untilDays': 100000, # todo
|
355
|
+
'trigger': False,
|
356
|
+
'trailing': False,
|
357
|
+
},
|
358
|
+
'fetchOHLCV': {
|
359
|
+
'limit': 5000,
|
360
|
+
},
|
361
|
+
},
|
362
|
+
'swap': {
|
363
|
+
'linear': None,
|
364
|
+
'inverse': None,
|
365
|
+
},
|
366
|
+
'future': {
|
367
|
+
'linear': None,
|
368
|
+
'inverse': None,
|
369
|
+
},
|
370
|
+
},
|
311
371
|
})
|
312
372
|
|
313
373
|
async def fetch_time(self, params={}):
|
314
374
|
"""
|
315
375
|
fetches the current integer timestamp in milliseconds from the exchange server
|
376
|
+
|
377
|
+
https://docs.onetrading.com/#time
|
378
|
+
|
316
379
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
317
380
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
318
381
|
"""
|
@@ -325,9 +388,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
325
388
|
#
|
326
389
|
return self.safe_integer(response, 'epoch_millis')
|
327
390
|
|
328
|
-
async def fetch_currencies(self, params={}):
|
391
|
+
async def fetch_currencies(self, params={}) -> Currencies:
|
329
392
|
"""
|
330
393
|
fetches all available currencies on an exchange
|
394
|
+
|
395
|
+
https://docs.onetrading.com/#currencies
|
396
|
+
|
331
397
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
332
398
|
:returns dict: an associative dictionary of currencies
|
333
399
|
"""
|
@@ -340,7 +406,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
340
406
|
# }
|
341
407
|
# ]
|
342
408
|
#
|
343
|
-
result = {}
|
409
|
+
result: dict = {}
|
344
410
|
for i in range(0, len(response)):
|
345
411
|
currency = response[i]
|
346
412
|
id = self.safe_string(currency, 'code')
|
@@ -363,9 +429,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
363
429
|
}
|
364
430
|
return result
|
365
431
|
|
366
|
-
async def fetch_markets(self, params={}):
|
432
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
367
433
|
"""
|
368
434
|
retrieves data on all markets for onetrading
|
435
|
+
|
436
|
+
https://docs.onetrading.com/#instruments
|
437
|
+
|
369
438
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
370
439
|
:returns dict[]: an array of objects representing market data
|
371
440
|
"""
|
@@ -384,7 +453,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
384
453
|
#
|
385
454
|
return self.parse_markets(response)
|
386
455
|
|
387
|
-
def parse_market(self, market) -> Market:
|
456
|
+
def parse_market(self, market: dict) -> Market:
|
388
457
|
baseAsset = self.safe_value(market, 'base', {})
|
389
458
|
quoteAsset = self.safe_value(market, 'quote', {})
|
390
459
|
baseId = self.safe_string(baseAsset, 'code')
|
@@ -443,9 +512,13 @@ class onetrading(Exchange, ImplicitAPI):
|
|
443
512
|
'info': market,
|
444
513
|
}
|
445
514
|
|
446
|
-
async def fetch_trading_fees(self, params={}):
|
515
|
+
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
447
516
|
"""
|
448
517
|
fetch the trading fees for multiple markets
|
518
|
+
|
519
|
+
https://docs.onetrading.com/#fee-groups
|
520
|
+
https://docs.onetrading.com/#fees
|
521
|
+
|
449
522
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
450
523
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
451
524
|
"""
|
@@ -454,7 +527,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
454
527
|
if method is None:
|
455
528
|
options = self.safe_value(self.options, 'fetchTradingFees', {})
|
456
529
|
method = self.safe_string(options, 'method', 'fetchPrivateTradingFees')
|
457
|
-
|
530
|
+
if method == 'fetchPrivateTradingFees':
|
531
|
+
return await self.fetch_private_trading_fees(params)
|
532
|
+
elif method == 'fetchPublicTradingFees':
|
533
|
+
return await self.fetch_public_trading_fees(params)
|
534
|
+
else:
|
535
|
+
raise NotSupported(self.id + ' fetchTradingFees() does not support ' + method + ', fetchPrivateTradingFees and fetchPublicTradingFees are supported')
|
458
536
|
|
459
537
|
async def fetch_public_trading_fees(self, params={}):
|
460
538
|
await self.load_markets()
|
@@ -482,7 +560,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
482
560
|
feeTiers = self.safe_value(first, 'fee_tiers')
|
483
561
|
tiers = self.parse_fee_tiers(feeTiers)
|
484
562
|
firstTier = self.safe_value(feeTiers, 0, {})
|
485
|
-
result = {}
|
563
|
+
result: dict = {}
|
486
564
|
for i in range(0, len(self.symbols)):
|
487
565
|
symbol = self.symbols[i]
|
488
566
|
result[symbol] = {
|
@@ -526,7 +604,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
526
604
|
makerFee = Precise.string_div(makerFee, '100')
|
527
605
|
takerFee = Precise.string_div(takerFee, '100')
|
528
606
|
feeTiers = self.safe_value(response, 'fee_tiers')
|
529
|
-
result = {}
|
607
|
+
result: dict = {}
|
530
608
|
tiers = self.parse_fee_tiers(feeTiers)
|
531
609
|
for i in range(0, len(self.symbols)):
|
532
610
|
symbol = self.symbols[i]
|
@@ -558,7 +636,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
558
636
|
'taker': takerFees,
|
559
637
|
}
|
560
638
|
|
561
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
639
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
562
640
|
#
|
563
641
|
# fetchTicker, fetchTickers
|
564
642
|
#
|
@@ -613,13 +691,16 @@ class onetrading(Exchange, ImplicitAPI):
|
|
613
691
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
614
692
|
"""
|
615
693
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
694
|
+
|
695
|
+
https://docs.onetrading.com/#market-ticker-for-instrument
|
696
|
+
|
616
697
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
617
698
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
618
699
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
619
700
|
"""
|
620
701
|
await self.load_markets()
|
621
702
|
market = self.market(symbol)
|
622
|
-
request = {
|
703
|
+
request: dict = {
|
623
704
|
'instrument_code': market['id'],
|
624
705
|
}
|
625
706
|
response = await self.publicGetMarketTickerInstrumentCode(self.extend(request, params))
|
@@ -646,7 +727,10 @@ class onetrading(Exchange, ImplicitAPI):
|
|
646
727
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
647
728
|
"""
|
648
729
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
649
|
-
|
730
|
+
|
731
|
+
https://docs.onetrading.com/#market-ticker
|
732
|
+
|
733
|
+
:param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
650
734
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
651
735
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
652
736
|
"""
|
@@ -673,7 +757,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
673
757
|
# }
|
674
758
|
# ]
|
675
759
|
#
|
676
|
-
result = {}
|
760
|
+
result: dict = {}
|
677
761
|
for i in range(0, len(response)):
|
678
762
|
ticker = self.parse_ticker(response[i])
|
679
763
|
symbol = ticker['symbol']
|
@@ -683,6 +767,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
683
767
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
684
768
|
"""
|
685
769
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
770
|
+
|
771
|
+
https://docs.onetrading.com/#order-book
|
772
|
+
|
686
773
|
:param str symbol: unified symbol of the market to fetch the order book for
|
687
774
|
:param int [limit]: the maximum amount of order book entries to return
|
688
775
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -690,7 +777,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
690
777
|
"""
|
691
778
|
await self.load_markets()
|
692
779
|
market = self.market(symbol)
|
693
|
-
request = {
|
780
|
+
request: dict = {
|
694
781
|
'instrument_code': market['id'],
|
695
782
|
# level 1 means only the best bid and ask
|
696
783
|
# level 2 is a compiled order book up to market precision
|
@@ -778,7 +865,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
778
865
|
granularity = self.safe_value(ohlcv, 'granularity')
|
779
866
|
unit = self.safe_string(granularity, 'unit')
|
780
867
|
period = self.safe_string(granularity, 'period')
|
781
|
-
units = {
|
868
|
+
units: dict = {
|
782
869
|
'MINUTES': 'm',
|
783
870
|
'HOURS': 'h',
|
784
871
|
'DAYS': 'd',
|
@@ -805,6 +892,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
805
892
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
806
893
|
"""
|
807
894
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
895
|
+
|
896
|
+
https://docs.onetrading.com/#candlesticks
|
897
|
+
|
808
898
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
809
899
|
:param str timeframe: the length of time each candle represents
|
810
900
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
@@ -820,7 +910,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
820
910
|
duration = durationInSeconds * 1000
|
821
911
|
if limit is None:
|
822
912
|
limit = 1500
|
823
|
-
request = {
|
913
|
+
request: dict = {
|
824
914
|
'instrument_code': market['id'],
|
825
915
|
# 'from': self.iso8601(since),
|
826
916
|
# 'to': self.iso8601(self.milliseconds()),
|
@@ -842,9 +932,10 @@ class onetrading(Exchange, ImplicitAPI):
|
|
842
932
|
# {"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
933
|
# ]
|
844
934
|
#
|
845
|
-
|
935
|
+
ohlcv = self.safe_list(response, 'candlesticks')
|
936
|
+
return self.parse_ohlcvs(ohlcv, market, timeframe, since, limit)
|
846
937
|
|
847
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
938
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
848
939
|
#
|
849
940
|
# fetchTrades(public)
|
850
941
|
#
|
@@ -923,47 +1014,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
923
1014
|
'info': trade,
|
924
1015
|
}, market)
|
925
1016
|
|
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
1017
|
def parse_balance(self, response) -> Balances:
|
965
1018
|
balances = self.safe_value(response, 'balances', [])
|
966
|
-
result = {'info': response}
|
1019
|
+
result: dict = {'info': response}
|
967
1020
|
for i in range(0, len(balances)):
|
968
1021
|
balance = balances[i]
|
969
1022
|
currencyId = self.safe_string(balance, 'currency_code')
|
@@ -977,6 +1030,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
977
1030
|
async def fetch_balance(self, params={}) -> Balances:
|
978
1031
|
"""
|
979
1032
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
1033
|
+
|
1034
|
+
https://docs.onetrading.com/#balances
|
1035
|
+
|
980
1036
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
981
1037
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
982
1038
|
"""
|
@@ -1000,319 +1056,8 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1000
1056
|
#
|
1001
1057
|
return self.parse_balance(response)
|
1002
1058
|
|
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 = {
|
1059
|
+
def parse_order_status(self, status: Str):
|
1060
|
+
statuses: dict = {
|
1316
1061
|
'FILLED': 'open',
|
1317
1062
|
'FILLED_FULLY': 'closed',
|
1318
1063
|
'FILLED_CLOSED': 'canceled',
|
@@ -1322,10 +1067,11 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1322
1067
|
'CLOSED': 'canceled',
|
1323
1068
|
'FAILED': 'failed',
|
1324
1069
|
'STOP_TRIGGERED': 'triggered',
|
1070
|
+
'DONE': 'closed',
|
1325
1071
|
}
|
1326
1072
|
return self.safe_string(statuses, status, status)
|
1327
1073
|
|
1328
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1074
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1329
1075
|
#
|
1330
1076
|
# createOrder
|
1331
1077
|
#
|
@@ -1406,7 +1152,6 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1406
1152
|
side = self.safe_string_lower(rawOrder, 'side')
|
1407
1153
|
type = self.safe_string_lower(rawOrder, 'type')
|
1408
1154
|
timeInForce = self.parse_time_in_force(self.safe_string(rawOrder, 'time_in_force'))
|
1409
|
-
stopPrice = self.safe_number(rawOrder, 'trigger_price')
|
1410
1155
|
postOnly = self.safe_value(rawOrder, 'is_post_only')
|
1411
1156
|
rawTrades = self.safe_value(order, 'trades', [])
|
1412
1157
|
return self.safe_order({
|
@@ -1417,13 +1162,12 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1417
1162
|
'datetime': self.iso8601(timestamp),
|
1418
1163
|
'lastTradeTimestamp': None,
|
1419
1164
|
'symbol': symbol,
|
1420
|
-
'type': type,
|
1165
|
+
'type': self.parse_order_type(type),
|
1421
1166
|
'timeInForce': timeInForce,
|
1422
1167
|
'postOnly': postOnly,
|
1423
1168
|
'side': side,
|
1424
1169
|
'price': price,
|
1425
|
-
'
|
1426
|
-
'triggerPrice': stopPrice,
|
1170
|
+
'triggerPrice': self.safe_number(rawOrder, 'trigger_price'),
|
1427
1171
|
'amount': amount,
|
1428
1172
|
'cost': None,
|
1429
1173
|
'average': None,
|
@@ -1434,8 +1178,14 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1434
1178
|
'trades': rawTrades,
|
1435
1179
|
}, market)
|
1436
1180
|
|
1437
|
-
def
|
1438
|
-
|
1181
|
+
def parse_order_type(self, type: Str):
|
1182
|
+
types: dict = {
|
1183
|
+
'booked': 'limit',
|
1184
|
+
}
|
1185
|
+
return self.safe_string(types, type, type)
|
1186
|
+
|
1187
|
+
def parse_time_in_force(self, timeInForce: Str):
|
1188
|
+
timeInForces: dict = {
|
1439
1189
|
'GOOD_TILL_CANCELLED': 'GTC',
|
1440
1190
|
'GOOD_TILL_TIME': 'GTT',
|
1441
1191
|
'IMMEDIATE_OR_CANCELLED': 'IOC',
|
@@ -1446,12 +1196,14 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1446
1196
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1447
1197
|
"""
|
1448
1198
|
create a trade order
|
1449
|
-
|
1199
|
+
|
1200
|
+
https://docs.onetrading.com/#create-order
|
1201
|
+
|
1450
1202
|
:param str symbol: unified symbol of the market to create an order in
|
1451
1203
|
:param str type: 'market' or 'limit'
|
1452
1204
|
:param str side: 'buy' or 'sell'
|
1453
1205
|
: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
|
1206
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1455
1207
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1456
1208
|
:param float [params.triggerPrice]: onetrading only does stop limit orders and does not do stop market
|
1457
1209
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1459,7 +1211,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1459
1211
|
await self.load_markets()
|
1460
1212
|
market = self.market(symbol)
|
1461
1213
|
uppercaseType = type.upper()
|
1462
|
-
request = {
|
1214
|
+
request: dict = {
|
1463
1215
|
'instrument_code': market['id'],
|
1464
1216
|
'type': uppercaseType, # LIMIT, MARKET, STOP
|
1465
1217
|
'side': side.upper(), # or SELL
|
@@ -1489,6 +1241,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1489
1241
|
if clientOrderId is not None:
|
1490
1242
|
request['client_id'] = clientOrderId
|
1491
1243
|
params = self.omit(params, ['clientOrderId', 'client_id'])
|
1244
|
+
timeInForce = self.safe_string_2(params, 'timeInForce', 'time_in_force', 'GOOD_TILL_CANCELLED')
|
1245
|
+
params = self.omit(params, 'timeInForce')
|
1246
|
+
request['time_in_force'] = timeInForce
|
1492
1247
|
response = await self.privatePostAccountOrders(self.extend(request, params))
|
1493
1248
|
#
|
1494
1249
|
# {
|
@@ -1510,6 +1265,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1510
1265
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1511
1266
|
"""
|
1512
1267
|
cancels an open order
|
1268
|
+
|
1269
|
+
https://docs.onetrading.com/#close-order-by-order-id
|
1270
|
+
|
1513
1271
|
:param str id: order id
|
1514
1272
|
:param str symbol: not used by bitmex cancelOrder()
|
1515
1273
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1519,27 +1277,34 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1519
1277
|
clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_id')
|
1520
1278
|
params = self.omit(params, ['clientOrderId', 'client_id'])
|
1521
1279
|
method = 'privateDeleteAccountOrdersOrderId'
|
1522
|
-
request = {}
|
1280
|
+
request: dict = {}
|
1523
1281
|
if clientOrderId is not None:
|
1524
1282
|
method = 'privateDeleteAccountOrdersClientClientId'
|
1525
1283
|
request['client_id'] = clientOrderId
|
1526
1284
|
else:
|
1527
1285
|
request['order_id'] = id
|
1528
|
-
response =
|
1286
|
+
response = None
|
1287
|
+
if method == 'privateDeleteAccountOrdersOrderId':
|
1288
|
+
response = await self.privateDeleteAccountOrdersOrderId(self.extend(request, params))
|
1289
|
+
else:
|
1290
|
+
response = await self.privateDeleteAccountOrdersClientClientId(self.extend(request, params))
|
1529
1291
|
#
|
1530
1292
|
# responds with an empty body
|
1531
1293
|
#
|
1532
|
-
return response
|
1294
|
+
return self.parse_order(response)
|
1533
1295
|
|
1534
1296
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1535
1297
|
"""
|
1536
1298
|
cancel all open orders
|
1299
|
+
|
1300
|
+
https://docs.onetrading.com/#close-all-orders
|
1301
|
+
|
1537
1302
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
1538
1303
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1539
1304
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1540
1305
|
"""
|
1541
1306
|
await self.load_markets()
|
1542
|
-
request = {}
|
1307
|
+
request: dict = {}
|
1543
1308
|
if symbol is not None:
|
1544
1309
|
market = self.market(symbol)
|
1545
1310
|
request['instrument_code'] = market['id']
|
@@ -1554,13 +1319,16 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1554
1319
|
async def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1555
1320
|
"""
|
1556
1321
|
cancel multiple orders
|
1322
|
+
|
1323
|
+
https://docs.onetrading.com/#close-all-orders
|
1324
|
+
|
1557
1325
|
:param str[] ids: order ids
|
1558
1326
|
:param str symbol: unified market symbol, default is None
|
1559
1327
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1560
1328
|
:returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1561
1329
|
"""
|
1562
1330
|
await self.load_markets()
|
1563
|
-
request = {
|
1331
|
+
request: dict = {
|
1564
1332
|
'ids': ','.join(ids),
|
1565
1333
|
}
|
1566
1334
|
response = await self.privateDeleteAccountOrders(self.extend(request, params))
|
@@ -1574,12 +1342,16 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1574
1342
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1575
1343
|
"""
|
1576
1344
|
fetches information on an order made by the user
|
1345
|
+
|
1346
|
+
https://docs.onetrading.com/#get-order
|
1347
|
+
|
1348
|
+
:param str id: the order id
|
1577
1349
|
:param str symbol: not used by onetrading fetchOrder
|
1578
1350
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1579
1351
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1580
1352
|
"""
|
1581
1353
|
await self.load_markets()
|
1582
|
-
request = {
|
1354
|
+
request: dict = {
|
1583
1355
|
'order_id': id,
|
1584
1356
|
}
|
1585
1357
|
response = await self.privateGetAccountOrdersOrderId(self.extend(request, params))
|
@@ -1629,6 +1401,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1629
1401
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1630
1402
|
"""
|
1631
1403
|
fetch all unfilled currently open orders
|
1404
|
+
|
1405
|
+
https://docs.onetrading.com/#get-orders
|
1406
|
+
|
1632
1407
|
:param str symbol: unified market symbol
|
1633
1408
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1634
1409
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -1636,7 +1411,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1636
1411
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1637
1412
|
"""
|
1638
1413
|
await self.load_markets()
|
1639
|
-
request = {
|
1414
|
+
request: dict = {
|
1640
1415
|
# 'from': self.iso8601(since),
|
1641
1416
|
# 'to': self.iso8601(self.milliseconds()), # max range is 100 days
|
1642
1417
|
# 'instrument_code': market['id'],
|
@@ -1737,19 +1512,22 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1737
1512
|
# "max_page_size": 100
|
1738
1513
|
# }
|
1739
1514
|
#
|
1740
|
-
orderHistory = self.
|
1515
|
+
orderHistory = self.safe_list(response, 'order_history', [])
|
1741
1516
|
return self.parse_orders(orderHistory, market, since, limit)
|
1742
1517
|
|
1743
1518
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1744
1519
|
"""
|
1745
1520
|
fetches information on multiple closed orders made by the user
|
1521
|
+
|
1522
|
+
https://docs.onetrading.com/#get-orders
|
1523
|
+
|
1746
1524
|
:param str symbol: unified market symbol of the market orders were made in
|
1747
1525
|
:param int [since]: the earliest time in ms to fetch orders for
|
1748
1526
|
:param int [limit]: the maximum number of order structures to retrieve
|
1749
1527
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1750
1528
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1751
1529
|
"""
|
1752
|
-
request = {
|
1530
|
+
request: dict = {
|
1753
1531
|
'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
1532
|
}
|
1755
1533
|
return await self.fetch_open_orders(symbol, since, limit, self.extend(request, params))
|
@@ -1757,6 +1535,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1757
1535
|
async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1758
1536
|
"""
|
1759
1537
|
fetch all the trades made from a single order
|
1538
|
+
|
1539
|
+
https://docs.onetrading.com/#trades-for-order
|
1540
|
+
|
1760
1541
|
:param str id: order id
|
1761
1542
|
:param str symbol: unified market symbol
|
1762
1543
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -1765,7 +1546,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1765
1546
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1766
1547
|
"""
|
1767
1548
|
await self.load_markets()
|
1768
|
-
request = {
|
1549
|
+
request: dict = {
|
1769
1550
|
'order_id': id,
|
1770
1551
|
# 'max_page_size': 100,
|
1771
1552
|
# 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
|
@@ -1812,6 +1593,9 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1812
1593
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
1813
1594
|
"""
|
1814
1595
|
fetch all trades made by the user
|
1596
|
+
|
1597
|
+
https://docs.onetrading.com/#all-trades
|
1598
|
+
|
1815
1599
|
:param str symbol: unified market symbol
|
1816
1600
|
:param int [since]: the earliest time in ms to fetch trades for
|
1817
1601
|
:param int [limit]: the maximum number of trades structures to retrieve
|
@@ -1819,7 +1603,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1819
1603
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
1820
1604
|
"""
|
1821
1605
|
await self.load_markets()
|
1822
|
-
request = {
|
1606
|
+
request: dict = {
|
1823
1607
|
# 'from': self.iso8601(since),
|
1824
1608
|
# 'to': self.iso8601(self.milliseconds()), # max range is 100 days
|
1825
1609
|
# 'instrument_code': market['id'],
|
@@ -1868,7 +1652,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1868
1652
|
# "cursor": "string"
|
1869
1653
|
# }
|
1870
1654
|
#
|
1871
|
-
tradeHistory = self.
|
1655
|
+
tradeHistory = self.safe_list(response, 'trade_history', [])
|
1872
1656
|
return self.parse_trades(tradeHistory, market, since, limit)
|
1873
1657
|
|
1874
1658
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
@@ -1891,7 +1675,7 @@ class onetrading(Exchange, ImplicitAPI):
|
|
1891
1675
|
url += '?' + self.urlencode(query)
|
1892
1676
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1893
1677
|
|
1894
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1678
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1895
1679
|
if response is None:
|
1896
1680
|
return None
|
1897
1681
|
#
|