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/okcoin.py
CHANGED
@@ -6,9 +6,10 @@
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.okcoin import ImplicitAPI
|
8
8
|
import hashlib
|
9
|
-
from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
9
|
+
from ccxt.base.types import Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
10
10
|
from typing import List
|
11
11
|
from ccxt.base.errors import ExchangeError
|
12
|
+
from ccxt.base.errors import AuthenticationError
|
12
13
|
from ccxt.base.errors import PermissionDenied
|
13
14
|
from ccxt.base.errors import AccountNotEnabled
|
14
15
|
from ccxt.base.errors import AccountSuspended
|
@@ -19,7 +20,6 @@ from ccxt.base.errors import InsufficientFunds
|
|
19
20
|
from ccxt.base.errors import InvalidAddress
|
20
21
|
from ccxt.base.errors import InvalidOrder
|
21
22
|
from ccxt.base.errors import OrderNotFound
|
22
|
-
from ccxt.base.errors import CancelPending
|
23
23
|
from ccxt.base.errors import NotSupported
|
24
24
|
from ccxt.base.errors import NetworkError
|
25
25
|
from ccxt.base.errors import RateLimitExceeded
|
@@ -27,7 +27,7 @@ from ccxt.base.errors import ExchangeNotAvailable
|
|
27
27
|
from ccxt.base.errors import OnMaintenance
|
28
28
|
from ccxt.base.errors import InvalidNonce
|
29
29
|
from ccxt.base.errors import RequestTimeout
|
30
|
-
from ccxt.base.errors import
|
30
|
+
from ccxt.base.errors import CancelPending
|
31
31
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
32
32
|
from ccxt.base.precise import Precise
|
33
33
|
|
@@ -56,6 +56,8 @@ class okcoin(Exchange, ImplicitAPI):
|
|
56
56
|
'createMarketOrderWithCost': False,
|
57
57
|
'createMarketSellOrderWithCost': False,
|
58
58
|
'createOrder': True,
|
59
|
+
'createStopOrder': True,
|
60
|
+
'createTriggerOrder': True,
|
59
61
|
'fetchBalance': True,
|
60
62
|
'fetchBorrowInterest': False,
|
61
63
|
'fetchBorrowRate': False,
|
@@ -66,10 +68,13 @@ class okcoin(Exchange, ImplicitAPI):
|
|
66
68
|
'fetchClosedOrders': True,
|
67
69
|
'fetchCurrencies': True, # see below
|
68
70
|
'fetchDepositAddress': True,
|
71
|
+
'fetchDepositAddresses': False,
|
72
|
+
'fetchDepositAddressesByNetwork': False,
|
69
73
|
'fetchDeposits': True,
|
70
74
|
'fetchFundingHistory': False,
|
71
75
|
'fetchFundingRate': False,
|
72
76
|
'fetchFundingRateHistory': False,
|
77
|
+
'fetchFundingRates': False,
|
73
78
|
'fetchLedger': True,
|
74
79
|
'fetchMarkets': True,
|
75
80
|
'fetchMyTrades': True,
|
@@ -217,6 +222,83 @@ class okcoin(Exchange, ImplicitAPI):
|
|
217
222
|
},
|
218
223
|
},
|
219
224
|
},
|
225
|
+
'features': {
|
226
|
+
'spot': {
|
227
|
+
'sandbox': False,
|
228
|
+
'createOrder': {
|
229
|
+
'marginMode': True,
|
230
|
+
'triggerPrice': True,
|
231
|
+
'triggerDirection': True, # todo
|
232
|
+
'triggerPriceType': {
|
233
|
+
'last': True,
|
234
|
+
'mark': False,
|
235
|
+
'index': False,
|
236
|
+
},
|
237
|
+
'stopLossPrice': True, # todo revise trigger
|
238
|
+
'takeProfitPrice': True, # todo revise trigger
|
239
|
+
'attachedStopLossTakeProfit': {
|
240
|
+
'triggerPriceType': {
|
241
|
+
'last': True,
|
242
|
+
'mark': False,
|
243
|
+
'index': False,
|
244
|
+
},
|
245
|
+
'price': True,
|
246
|
+
},
|
247
|
+
'timeInForce': {
|
248
|
+
'IOC': True,
|
249
|
+
'FOK': True,
|
250
|
+
'PO': True,
|
251
|
+
'GTD': False,
|
252
|
+
},
|
253
|
+
'hedged': False,
|
254
|
+
'trailing': True, # todo
|
255
|
+
'leverage': False,
|
256
|
+
'marketBuyByCost': True,
|
257
|
+
'marketBuyRequiresPrice': True,
|
258
|
+
'selfTradePrevention': False,
|
259
|
+
'iceberg': True, # todo
|
260
|
+
},
|
261
|
+
'createOrders': None, # todo
|
262
|
+
'fetchMyTrades': {
|
263
|
+
'marginMode': False,
|
264
|
+
'limit': 100,
|
265
|
+
'daysBack': 90,
|
266
|
+
'untilDays': 90, # todo
|
267
|
+
},
|
268
|
+
'fetchOrder': {
|
269
|
+
'marginMode': False,
|
270
|
+
'trigger': True,
|
271
|
+
'trailing': True, # todo
|
272
|
+
},
|
273
|
+
'fetchOpenOrders': {
|
274
|
+
'marginMode': False,
|
275
|
+
'limit': 100,
|
276
|
+
'trigger': True,
|
277
|
+
'trailing': True,
|
278
|
+
},
|
279
|
+
'fetchOrders': None,
|
280
|
+
'fetchClosedOrders': {
|
281
|
+
'marginMode': False,
|
282
|
+
'limit': 100,
|
283
|
+
'daysBack': 90, # todo
|
284
|
+
'daysBackCanceled': 1 / 12, # todo: possible more with history endpoint
|
285
|
+
'untilDays': 90, # todo
|
286
|
+
'trigger': True,
|
287
|
+
'trailing': True,
|
288
|
+
},
|
289
|
+
'fetchOHLCV': {
|
290
|
+
'limit': 100, # 300 is only possible for 'recent' 1440 candles, which does not make much sense
|
291
|
+
},
|
292
|
+
},
|
293
|
+
'swap': {
|
294
|
+
'linear': None,
|
295
|
+
'inverse': None,
|
296
|
+
},
|
297
|
+
'future': {
|
298
|
+
'linear': None,
|
299
|
+
'inverse': None,
|
300
|
+
},
|
301
|
+
},
|
220
302
|
'fees': {
|
221
303
|
'trading': {
|
222
304
|
'taker': 0.002,
|
@@ -266,6 +348,16 @@ class okcoin(Exchange, ImplicitAPI):
|
|
266
348
|
'50026': ExchangeNotAvailable, # System error, please try again later.
|
267
349
|
'50027': PermissionDenied, # The account is restricted from trading
|
268
350
|
'50028': ExchangeError, # Unable to take the order, please reach out to support center for details
|
351
|
+
'50029': ExchangeError, # This instrument({0}) is unavailable at present due to risk management. Please contact customer service for help.
|
352
|
+
'50030': PermissionDenied, # No permission to use self API
|
353
|
+
'50032': AccountSuspended, # This asset is blocked, allow its trading and try again
|
354
|
+
'50033': AccountSuspended, # This instrument is blocked, allow its trading and try again
|
355
|
+
'50035': BadRequest, # This endpoint requires that APIKey must be bound to IP
|
356
|
+
'50036': BadRequest, # Invalid expTime
|
357
|
+
'50037': BadRequest, # Order expired
|
358
|
+
'50038': ExchangeError, # This feature is temporarily unavailable in demo trading
|
359
|
+
'50039': ExchangeError, # The before parameter is not available for implementing timestamp pagination
|
360
|
+
'50041': ExchangeError, # You are not currently on the whitelist, please contact customer service
|
269
361
|
'50044': BadRequest, # Must select one broker type
|
270
362
|
# API Class
|
271
363
|
'50100': ExchangeError, # API frozen, please contact customer service
|
@@ -309,9 +401,25 @@ class okcoin(Exchange, ImplicitAPI):
|
|
309
401
|
'51024': AccountSuspended, # Unified accountblocked
|
310
402
|
'51025': ExchangeError, # Order count exceeds the limit
|
311
403
|
'51026': BadSymbol, # Instrument type does not match underlying index
|
404
|
+
'51030': InvalidOrder, # Funding fee is being settled.
|
405
|
+
'51031': InvalidOrder, # This order price is not within the closing price range
|
406
|
+
'51032': InvalidOrder, # Closing all positions at market price.
|
407
|
+
'51033': InvalidOrder, # The total amount per order for self pair has reached the upper limit.
|
408
|
+
'51037': InvalidOrder, # The current account risk status only supports you to place IOC orders that can reduce the risk of your account.
|
409
|
+
'51038': InvalidOrder, # There is already an IOC order under the current risk module that reduces the risk of the account.
|
410
|
+
'51044': InvalidOrder, # The order type {0}, {1} is not allowed to set stop loss and take profit
|
312
411
|
'51046': InvalidOrder, # The take profit trigger price must be higher than the order price
|
313
412
|
'51047': InvalidOrder, # The stop loss trigger price must be lower than the order price
|
314
|
-
'
|
413
|
+
'51048': InvalidOrder, # The take profit trigger price should be lower than the order price
|
414
|
+
'51049': InvalidOrder, # The stop loss trigger price should be higher than the order price
|
415
|
+
'51050': InvalidOrder, # The take profit trigger price should be higher than the best ask price
|
416
|
+
'51051': InvalidOrder, # The stop loss trigger price should be lower than the best ask price
|
417
|
+
'51052': InvalidOrder, # The take profit trigger price should be lower than the best bid price
|
418
|
+
'51053': InvalidOrder, # The stop loss trigger price should be higher than the best bid price
|
419
|
+
'51054': BadRequest, # Getting information timed out, please try again later
|
420
|
+
'51056': InvalidOrder, # Action not allowed
|
421
|
+
'51058': InvalidOrder, # No available position for self algo order
|
422
|
+
'51059': InvalidOrder, # Strategy for the current state does not support self operation
|
315
423
|
'51100': InvalidOrder, # Trading amount does not meet the min tradable amount
|
316
424
|
'51102': InvalidOrder, # Entered amount exceeds the max pending count
|
317
425
|
'51103': InvalidOrder, # Entered amount exceeds the max pending order count of the underlying asset
|
@@ -572,6 +680,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
572
680
|
'defaultNetwork': 'ERC20',
|
573
681
|
'networks': {
|
574
682
|
'ERC20': 'Ethereum',
|
683
|
+
'BTC': 'Bitcoin',
|
684
|
+
'OMNI': 'Omni',
|
685
|
+
'TRC20': 'TRON',
|
575
686
|
},
|
576
687
|
},
|
577
688
|
'commonCurrencies': {
|
@@ -603,21 +714,23 @@ class okcoin(Exchange, ImplicitAPI):
|
|
603
714
|
#
|
604
715
|
return self.parse8601(self.safe_string(response, 'iso'))
|
605
716
|
|
606
|
-
def fetch_markets(self, params={}):
|
717
|
+
def fetch_markets(self, params={}) -> List[Market]:
|
607
718
|
"""
|
608
|
-
|
719
|
+
|
720
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-public-data-get-instruments
|
721
|
+
|
609
722
|
retrieves data on all markets for okcoin
|
610
723
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
611
724
|
:returns dict[]: an array of objects representing market data
|
612
725
|
"""
|
613
|
-
request = {
|
726
|
+
request: dict = {
|
614
727
|
'instType': 'SPOT',
|
615
728
|
}
|
616
729
|
response = self.publicGetPublicInstruments(self.extend(request, params))
|
617
730
|
markets = self.safe_value(response, 'data', [])
|
618
731
|
return self.parse_markets(markets)
|
619
732
|
|
620
|
-
def parse_market(self, market) -> Market:
|
733
|
+
def parse_market(self, market: dict) -> Market:
|
621
734
|
#
|
622
735
|
# spot markets
|
623
736
|
#
|
@@ -699,15 +812,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
699
812
|
'info': market,
|
700
813
|
})
|
701
814
|
|
702
|
-
def
|
703
|
-
networksById = {
|
704
|
-
'Bitcoin': 'BTC',
|
705
|
-
'Omni': 'OMNI',
|
706
|
-
'TRON': 'TRC20',
|
707
|
-
}
|
708
|
-
return self.safe_string(networksById, networkId, networkId)
|
709
|
-
|
710
|
-
def fetch_currencies(self, params={}):
|
815
|
+
def fetch_currencies(self, params={}) -> Currencies:
|
711
816
|
"""
|
712
817
|
fetches all available currencies on an exchange
|
713
818
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -720,7 +825,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
720
825
|
else:
|
721
826
|
response = self.privateGetAssetCurrencies(params)
|
722
827
|
data = self.safe_value(response, 'data', [])
|
723
|
-
result = {}
|
828
|
+
result: dict = {}
|
724
829
|
dataByCurrencyId = self.group_by(data, 'ccy')
|
725
830
|
currencyIds = list(dataByCurrencyId.keys())
|
726
831
|
for i in range(0, len(currencyIds)):
|
@@ -728,7 +833,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
728
833
|
currency = self.safe_currency(currencyId)
|
729
834
|
code = currency['code']
|
730
835
|
chains = dataByCurrencyId[currencyId]
|
731
|
-
networks = {}
|
836
|
+
networks: dict = {}
|
732
837
|
currencyActive = False
|
733
838
|
depositEnabled = False
|
734
839
|
withdrawEnabled = False
|
@@ -746,7 +851,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
746
851
|
if (networkId is not None) and (networkId.find('-') >= 0):
|
747
852
|
parts = networkId.split('-')
|
748
853
|
chainPart = self.safe_string(parts, 1, networkId)
|
749
|
-
networkCode = self.
|
854
|
+
networkCode = self.network_id_to_code(chainPart)
|
750
855
|
precision = self.parse_precision(self.safe_string(chain, 'wdTickSz'))
|
751
856
|
if maxPrecision is None:
|
752
857
|
maxPrecision = precision
|
@@ -791,7 +896,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
791
896
|
|
792
897
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
793
898
|
"""
|
794
|
-
|
899
|
+
|
900
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-order-book
|
901
|
+
|
795
902
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
796
903
|
:param str symbol: unified symbol of the market to fetch the order book for
|
797
904
|
:param int [limit]: the maximum amount of order book entries to return
|
@@ -800,7 +907,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
800
907
|
"""
|
801
908
|
self.load_markets()
|
802
909
|
market = self.market(symbol)
|
803
|
-
request = {
|
910
|
+
request: dict = {
|
804
911
|
'instId': market['id'],
|
805
912
|
}
|
806
913
|
limit = 20 if (limit is None) else limit
|
@@ -833,7 +940,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
833
940
|
timestamp = self.safe_integer(first, 'ts')
|
834
941
|
return self.parse_order_book(first, symbol, timestamp)
|
835
942
|
|
836
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
943
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
837
944
|
#
|
838
945
|
# {
|
839
946
|
# "instType": "SPOT",
|
@@ -890,7 +997,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
890
997
|
|
891
998
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
892
999
|
"""
|
893
|
-
|
1000
|
+
|
1001
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-ticker
|
1002
|
+
|
894
1003
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
895
1004
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
896
1005
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -898,7 +1007,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
898
1007
|
"""
|
899
1008
|
self.load_markets()
|
900
1009
|
market = self.market(symbol)
|
901
|
-
request = {
|
1010
|
+
request: dict = {
|
902
1011
|
'instId': market['id'],
|
903
1012
|
}
|
904
1013
|
response = self.publicGetMarketTicker(self.extend(request, params))
|
@@ -934,21 +1043,23 @@ class okcoin(Exchange, ImplicitAPI):
|
|
934
1043
|
|
935
1044
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
936
1045
|
"""
|
937
|
-
|
1046
|
+
|
1047
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-tickers
|
1048
|
+
|
938
1049
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
939
1050
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
940
1051
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
941
1052
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
942
1053
|
"""
|
943
1054
|
symbols = self.market_symbols(symbols)
|
944
|
-
request = {
|
1055
|
+
request: dict = {
|
945
1056
|
'instType': 'SPOT',
|
946
1057
|
}
|
947
1058
|
response = self.publicGetMarketTickers(self.extend(request, params))
|
948
|
-
data = self.
|
1059
|
+
data = self.safe_list(response, 'data', [])
|
949
1060
|
return self.parse_tickers(data, symbols, params)
|
950
1061
|
|
951
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
1062
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
952
1063
|
#
|
953
1064
|
# public fetchTrades
|
954
1065
|
#
|
@@ -1023,8 +1134,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1023
1134
|
|
1024
1135
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
1025
1136
|
"""
|
1026
|
-
|
1027
|
-
|
1137
|
+
|
1138
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades
|
1139
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades-history
|
1140
|
+
|
1028
1141
|
get the list of most recent trades for a particular symbol
|
1029
1142
|
:param str symbol: unified symbol of the market to fetch trades for
|
1030
1143
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
@@ -1036,7 +1149,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1036
1149
|
market = self.market(symbol)
|
1037
1150
|
if (limit is None) or (limit > 100):
|
1038
1151
|
limit = 100 # maximum = default = 100
|
1039
|
-
request = {
|
1152
|
+
request: dict = {
|
1040
1153
|
'instId': market['id'],
|
1041
1154
|
}
|
1042
1155
|
method = None
|
@@ -1046,7 +1159,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1046
1159
|
response = self.publicGetMarketTrades(self.extend(request, params))
|
1047
1160
|
else:
|
1048
1161
|
response = self.publicGetMarketHistoryTrades(self.extend(request, params))
|
1049
|
-
data = self.
|
1162
|
+
data = self.safe_list(response, 'data', [])
|
1050
1163
|
return self.parse_trades(data, market, since, limit)
|
1051
1164
|
|
1052
1165
|
def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
|
@@ -1074,8 +1187,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1074
1187
|
|
1075
1188
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
1076
1189
|
"""
|
1077
|
-
|
1078
|
-
|
1190
|
+
|
1191
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks
|
1192
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks-history
|
1193
|
+
|
1079
1194
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
1080
1195
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
1081
1196
|
:param str timeframe: the length of time each candle represents
|
@@ -1092,11 +1207,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1092
1207
|
timezone = self.safe_string(options, 'timezone', 'UTC')
|
1093
1208
|
if (timezone == 'UTC') and (duration >= 21600): # if utc and timeframe >= 6h
|
1094
1209
|
bar += timezone.lower()
|
1095
|
-
request = {
|
1210
|
+
request: dict = {
|
1096
1211
|
'instId': market['id'],
|
1097
1212
|
'bar': bar,
|
1098
|
-
'limit': limit,
|
1099
1213
|
}
|
1214
|
+
if limit is not None:
|
1215
|
+
request['limit'] = limit # default 100, max 100
|
1100
1216
|
method = None
|
1101
1217
|
method, params = self.handle_option_and_params(params, 'fetchOHLCV', 'method', 'publicGetMarketCandles')
|
1102
1218
|
response = None
|
@@ -1104,7 +1220,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1104
1220
|
response = self.publicGetMarketCandles(self.extend(request, params))
|
1105
1221
|
else:
|
1106
1222
|
response = self.publicGetMarketHistoryCandles(self.extend(request, params))
|
1107
|
-
data = self.
|
1223
|
+
data = self.safe_list(response, 'data', [])
|
1108
1224
|
return self.parse_ohlcvs(data, market, timeframe, since, limit)
|
1109
1225
|
|
1110
1226
|
def parse_account_balance(self, response):
|
@@ -1149,7 +1265,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1149
1265
|
# }
|
1150
1266
|
# ]
|
1151
1267
|
#
|
1152
|
-
result = {
|
1268
|
+
result: dict = {
|
1153
1269
|
'info': response,
|
1154
1270
|
'timestamp': None,
|
1155
1271
|
'datetime': None,
|
@@ -1173,7 +1289,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1173
1289
|
"""
|
1174
1290
|
self.load_markets()
|
1175
1291
|
marketType, query = self.handle_market_type_and_params('fetchBalance', None, params)
|
1176
|
-
request = {
|
1292
|
+
request: dict = {
|
1177
1293
|
# 'ccy': 'BTC,ETH', # comma-separated list of currency ids
|
1178
1294
|
}
|
1179
1295
|
response = None
|
@@ -1205,7 +1321,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1205
1321
|
return self.parse_trading_balance(response)
|
1206
1322
|
|
1207
1323
|
def parse_trading_balance(self, response):
|
1208
|
-
result = {'info': response}
|
1324
|
+
result: dict = {'info': response}
|
1209
1325
|
data = self.safe_value(response, 'data', [])
|
1210
1326
|
first = self.safe_value(data, 0, {})
|
1211
1327
|
timestamp = self.safe_integer(first, 'uTime')
|
@@ -1230,7 +1346,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1230
1346
|
return self.safe_balance(result)
|
1231
1347
|
|
1232
1348
|
def parse_funding_balance(self, response):
|
1233
|
-
result = {'info': response}
|
1349
|
+
result: dict = {'info': response}
|
1234
1350
|
data = self.safe_value(response, 'data', [])
|
1235
1351
|
for i in range(0, len(data)):
|
1236
1352
|
balance = data[i]
|
@@ -1247,7 +1363,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1247
1363
|
def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
1248
1364
|
"""
|
1249
1365
|
create a market buy order by providing the symbol and cost
|
1250
|
-
|
1366
|
+
|
1367
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
|
1368
|
+
|
1251
1369
|
:param str symbol: unified symbol of the market to create an order in
|
1252
1370
|
:param float cost: how much you want to trade in units of the quote currency
|
1253
1371
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1263,16 +1381,18 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1263
1381
|
|
1264
1382
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1265
1383
|
"""
|
1266
|
-
|
1267
|
-
|
1268
|
-
|
1269
|
-
|
1384
|
+
|
1385
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
|
1386
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-algo-order
|
1387
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-multiple-orders
|
1388
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
|
1389
|
+
|
1270
1390
|
create a trade order
|
1271
1391
|
:param str symbol: unified symbol of the market to create an order in
|
1272
1392
|
:param str type: 'market' or 'limit'
|
1273
1393
|
:param str side: 'buy' or 'sell'
|
1274
1394
|
:param float amount: how much of currency you want to trade in units of base currency
|
1275
|
-
:param float price: the price at which the order is to be
|
1395
|
+
:param float price: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1276
1396
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1277
1397
|
:param bool [params.reduceOnly]: MARGIN orders only, or swap/future orders in net mode
|
1278
1398
|
:param bool [params.postOnly]: True to place a post only order
|
@@ -1318,7 +1438,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1318
1438
|
|
1319
1439
|
def create_order_request(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1320
1440
|
market = self.market(symbol)
|
1321
|
-
request = {
|
1441
|
+
request: dict = {
|
1322
1442
|
'instId': market['id'],
|
1323
1443
|
# 'ccy': currency['id'], # only applicable to cross MARGIN orders in single-currency margin
|
1324
1444
|
# 'clOrdId': clientOrderId, # up to 32 characters, must be unique
|
@@ -1427,7 +1547,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1427
1547
|
if stopLossDefined:
|
1428
1548
|
stopLossTriggerPrice = self.safe_value_n(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx'])
|
1429
1549
|
if stopLossTriggerPrice is None:
|
1430
|
-
raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"]
|
1550
|
+
raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order')
|
1431
1551
|
request['slTriggerPx'] = self.price_to_precision(symbol, stopLossTriggerPrice)
|
1432
1552
|
stopLossLimitPrice = self.safe_value_n(stopLoss, ['price', 'stopLossPrice', 'slOrdPx'])
|
1433
1553
|
stopLossOrderType = self.safe_string(stopLoss, 'type')
|
@@ -1438,7 +1558,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1438
1558
|
raise InvalidOrder(self.id + ' createOrder() params["stopLoss"]["type"] must be either "limit" or "market"')
|
1439
1559
|
elif stopLossLimitOrderType:
|
1440
1560
|
if stopLossLimitPrice is None:
|
1441
|
-
raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"]
|
1561
|
+
raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order')
|
1442
1562
|
else:
|
1443
1563
|
request['slOrdPx'] = self.price_to_precision(symbol, stopLossLimitPrice)
|
1444
1564
|
elif stopLossOrderType == 'market':
|
@@ -1511,27 +1631,29 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1511
1631
|
|
1512
1632
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1513
1633
|
"""
|
1514
|
-
|
1515
|
-
|
1516
|
-
|
1634
|
+
|
1635
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-order
|
1636
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
|
1637
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
|
1638
|
+
|
1517
1639
|
cancels an open order
|
1518
1640
|
:param str id: order id
|
1519
1641
|
:param str symbol: unified symbol of the market the order was made in
|
1520
1642
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1521
|
-
:param bool [params.
|
1643
|
+
:param bool [params.trigger]: True if cancel trigger or conditional orders
|
1522
1644
|
:param bool [params.advanced]: True if canceling advanced orders only
|
1523
1645
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1524
1646
|
"""
|
1525
1647
|
if symbol is None:
|
1526
1648
|
raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
|
1527
1649
|
self.load_markets()
|
1528
|
-
|
1650
|
+
trigger = self.safe_value_2(params, 'stop', 'trigger')
|
1529
1651
|
advanced = self.safe_value(params, 'advanced')
|
1530
|
-
if
|
1652
|
+
if trigger or advanced:
|
1531
1653
|
orderInner = self.cancel_orders([id], symbol, params)
|
1532
1654
|
return self.safe_value(orderInner, 0)
|
1533
1655
|
market = self.market(symbol)
|
1534
|
-
request = {
|
1656
|
+
request: dict = {
|
1535
1657
|
'instId': market['id'],
|
1536
1658
|
# 'ordId': id, # either ordId or clOrdId is required
|
1537
1659
|
# 'clOrdId': clientOrderId,
|
@@ -1545,12 +1667,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1545
1667
|
response = self.privatePostTradeCancelOrder(self.extend(request, query))
|
1546
1668
|
# {"code":"0","data":[{"clOrdId":"","ordId":"317251910906576896","sCode":"0","sMsg":""}],"msg":""}
|
1547
1669
|
data = self.safe_value(response, 'data', [])
|
1548
|
-
order = self.
|
1670
|
+
order = self.safe_dict(data, 0)
|
1549
1671
|
return self.parse_order(order, market)
|
1550
1672
|
|
1551
1673
|
def parse_ids(self, ids):
|
1552
1674
|
"""
|
1553
|
-
|
1675
|
+
@ignore
|
1554
1676
|
:param string[]|str ids: order ids
|
1555
1677
|
:returns str[]: list of order ids
|
1556
1678
|
"""
|
@@ -1562,9 +1684,11 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1562
1684
|
def cancel_orders(self, ids, symbol: Str = None, params={}):
|
1563
1685
|
"""
|
1564
1686
|
cancel multiple orders
|
1565
|
-
|
1566
|
-
|
1567
|
-
|
1687
|
+
|
1688
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-multiple-orders
|
1689
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
|
1690
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
|
1691
|
+
|
1568
1692
|
:param str[] ids: order ids
|
1569
1693
|
:param str symbol: unified market symbol
|
1570
1694
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -1573,7 +1697,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1573
1697
|
if symbol is None:
|
1574
1698
|
raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
|
1575
1699
|
self.load_markets()
|
1576
|
-
|
1700
|
+
trigger = self.safe_value_2(params, 'stop', 'trigger')
|
1577
1701
|
advanced = self.safe_value(params, 'advanced')
|
1578
1702
|
params = self.omit(params, ['stop', 'trigger', 'advanced'])
|
1579
1703
|
market = self.market(symbol)
|
@@ -1589,7 +1713,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1589
1713
|
'instId': market['id'],
|
1590
1714
|
})
|
1591
1715
|
for i in range(0, len(ids)):
|
1592
|
-
if
|
1716
|
+
if trigger or advanced:
|
1593
1717
|
request.append({
|
1594
1718
|
'algoId': ids[i],
|
1595
1719
|
'instId': market['id'],
|
@@ -1606,7 +1730,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1606
1730
|
'clOrdId': clientOrderIds[i],
|
1607
1731
|
})
|
1608
1732
|
response = None
|
1609
|
-
if
|
1733
|
+
if trigger:
|
1610
1734
|
response = self.privatePostTradeCancelAlgos(request)
|
1611
1735
|
elif advanced:
|
1612
1736
|
response = self.privatePostTradeCancelAdvanceAlgos(request)
|
@@ -1628,11 +1752,11 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1628
1752
|
# }
|
1629
1753
|
#
|
1630
1754
|
#
|
1631
|
-
ordersData = self.
|
1755
|
+
ordersData = self.safe_list(response, 'data', [])
|
1632
1756
|
return self.parse_orders(ordersData, market, None, None, params)
|
1633
1757
|
|
1634
|
-
def parse_order_status(self, status):
|
1635
|
-
statuses = {
|
1758
|
+
def parse_order_status(self, status: Str):
|
1759
|
+
statuses: dict = {
|
1636
1760
|
'canceled': 'canceled',
|
1637
1761
|
'live': 'open',
|
1638
1762
|
'partially_filled': 'open',
|
@@ -1641,7 +1765,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1641
1765
|
}
|
1642
1766
|
return self.safe_string(statuses, status, status)
|
1643
1767
|
|
1644
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1768
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1645
1769
|
#
|
1646
1770
|
# createOrder
|
1647
1771
|
#
|
@@ -1798,7 +1922,6 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1798
1922
|
clientOrderId = None # fix empty clientOrderId string
|
1799
1923
|
stopLossPrice = self.safe_number_2(order, 'slTriggerPx', 'slOrdPx')
|
1800
1924
|
takeProfitPrice = self.safe_number_2(order, 'tpTriggerPx', 'tpOrdPx')
|
1801
|
-
stopPrice = self.safe_number_n(order, ['triggerPx', 'moveTriggerPx'])
|
1802
1925
|
reduceOnlyRaw = self.safe_string(order, 'reduceOnly')
|
1803
1926
|
reduceOnly = False
|
1804
1927
|
if reduceOnly is not None:
|
@@ -1819,8 +1942,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1819
1942
|
'price': price,
|
1820
1943
|
'stopLossPrice': stopLossPrice,
|
1821
1944
|
'takeProfitPrice': takeProfitPrice,
|
1822
|
-
'
|
1823
|
-
'triggerPrice': stopPrice,
|
1945
|
+
'triggerPrice': self.safe_number_n(order, ['triggerPx', 'moveTriggerPx']),
|
1824
1946
|
'average': average,
|
1825
1947
|
'cost': cost,
|
1826
1948
|
'amount': amount,
|
@@ -1834,9 +1956,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1834
1956
|
|
1835
1957
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1836
1958
|
"""
|
1837
|
-
|
1838
|
-
|
1959
|
+
|
1960
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-details
|
1961
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
|
1962
|
+
|
1839
1963
|
fetches information on an order made by the user
|
1964
|
+
:param str id: order id
|
1840
1965
|
:param str symbol: unified symbol of the market the order was made in
|
1841
1966
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1842
1967
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1845,14 +1970,14 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1845
1970
|
raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
|
1846
1971
|
self.load_markets()
|
1847
1972
|
market = self.market(symbol)
|
1848
|
-
request = {
|
1973
|
+
request: dict = {
|
1849
1974
|
'instId': market['id'],
|
1850
1975
|
# 'clOrdId': 'abcdef12345', # optional, [a-z0-9]{1,32}
|
1851
1976
|
# 'ordId': id,
|
1852
1977
|
}
|
1853
1978
|
clientOrderId = self.safe_string_2(params, 'clOrdId', 'clientOrderId')
|
1854
|
-
|
1855
|
-
if
|
1979
|
+
trigger = self.safe_value_2(params, 'stop', 'trigger')
|
1980
|
+
if trigger:
|
1856
1981
|
if clientOrderId is not None:
|
1857
1982
|
request['algoClOrdId'] = clientOrderId
|
1858
1983
|
else:
|
@@ -1864,29 +1989,31 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1864
1989
|
request['ordId'] = id
|
1865
1990
|
query = self.omit(params, ['clientOrderId', 'stop', 'trigger'])
|
1866
1991
|
response = None
|
1867
|
-
if
|
1992
|
+
if trigger:
|
1868
1993
|
response = self.privateGetTradeOrderAlgo(self.extend(request, query))
|
1869
1994
|
else:
|
1870
1995
|
response = self.privateGetTradeOrder(self.extend(request, query))
|
1871
1996
|
data = self.safe_value(response, 'data', [])
|
1872
|
-
order = self.
|
1997
|
+
order = self.safe_dict(data, 0)
|
1873
1998
|
return self.parse_order(order)
|
1874
1999
|
|
1875
2000
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1876
2001
|
"""
|
1877
|
-
|
1878
|
-
|
2002
|
+
|
2003
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-list
|
2004
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
|
2005
|
+
|
1879
2006
|
fetch all unfilled currently open orders
|
1880
2007
|
:param str symbol: unified market symbol
|
1881
2008
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1882
2009
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
1883
2010
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1884
|
-
:param bool [params.
|
2011
|
+
:param bool [params.trigger]: True if fetching trigger or conditional orders
|
1885
2012
|
:param str [params.ordType]: "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
|
1886
2013
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1887
2014
|
"""
|
1888
2015
|
self.load_markets()
|
1889
|
-
request = {
|
2016
|
+
request: dict = {
|
1890
2017
|
# 'instId': market['id'],
|
1891
2018
|
# 'ordType': 'limit', # market, limit, post_only, fok, ioc, comma-separated, stop orders: conditional, oco, trigger, move_order_stop, iceberg, or twap
|
1892
2019
|
# 'state': 'live', # live, partially_filled
|
@@ -1901,34 +2028,36 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1901
2028
|
if limit is not None:
|
1902
2029
|
request['limit'] = limit # default 100, max 100
|
1903
2030
|
ordType = self.safe_string(params, 'ordType')
|
1904
|
-
|
1905
|
-
if
|
2031
|
+
trigger = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
|
2032
|
+
if trigger and (ordType is None):
|
1906
2033
|
request['ordType'] = 'trigger' # default to trigger
|
1907
2034
|
params = self.omit(params, ['stop'])
|
1908
2035
|
response = None
|
1909
|
-
if
|
2036
|
+
if trigger:
|
1910
2037
|
response = self.privateGetTradeOrdersAlgoPending(self.extend(request, params))
|
1911
2038
|
else:
|
1912
2039
|
response = self.privateGetTradeOrdersPending(self.extend(request, params))
|
1913
|
-
data = self.
|
2040
|
+
data = self.safe_list(response, 'data', [])
|
1914
2041
|
return self.parse_orders(data, market, since, limit)
|
1915
2042
|
|
1916
2043
|
def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1917
2044
|
"""
|
1918
|
-
|
1919
|
-
|
1920
|
-
|
2045
|
+
|
2046
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-history
|
2047
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-3-months
|
2048
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-7-days
|
2049
|
+
|
1921
2050
|
fetches information on multiple closed orders made by the user
|
1922
2051
|
:param str symbol: unified market symbol of the market orders were made in
|
1923
2052
|
:param int [since]: the earliest time in ms to fetch orders for
|
1924
2053
|
:param int [limit]: the maximum number of order structures to retrieve
|
1925
2054
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1926
|
-
:param bool [params.
|
2055
|
+
:param bool [params.trigger]: True if fetching trigger or conditional orders
|
1927
2056
|
:param str [params.ordType]: "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
|
1928
2057
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
1929
2058
|
"""
|
1930
2059
|
self.load_markets()
|
1931
|
-
request = {
|
2060
|
+
request: dict = {
|
1932
2061
|
'instType': 'SPOT',
|
1933
2062
|
}
|
1934
2063
|
market = None
|
@@ -1936,12 +2065,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1936
2065
|
market = self.market(symbol)
|
1937
2066
|
request['instId'] = market['id']
|
1938
2067
|
ordType = self.safe_string(params, 'ordType')
|
1939
|
-
|
1940
|
-
if
|
2068
|
+
trigger = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
|
2069
|
+
if trigger and (ordType is None):
|
1941
2070
|
request['ordType'] = 'trigger' # default to trigger
|
1942
2071
|
params = self.omit(params, ['stop'])
|
1943
2072
|
response = None
|
1944
|
-
if
|
2073
|
+
if trigger:
|
1945
2074
|
response = self.privateGetTradeOrdersAlgoHistory(self.extend(request, params))
|
1946
2075
|
else:
|
1947
2076
|
method = None
|
@@ -1991,10 +2120,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
1991
2120
|
# "msg":""
|
1992
2121
|
# }
|
1993
2122
|
#
|
1994
|
-
data = self.
|
2123
|
+
data = self.safe_list(response, 'data', [])
|
1995
2124
|
return self.parse_orders(data, market, since, limit)
|
1996
2125
|
|
1997
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
2126
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
1998
2127
|
#
|
1999
2128
|
# {
|
2000
2129
|
# "addr": "okbtothemoon",
|
@@ -2077,17 +2206,19 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2077
2206
|
#
|
2078
2207
|
self.check_address(address)
|
2079
2208
|
return {
|
2209
|
+
'info': depositAddress,
|
2080
2210
|
'currency': code,
|
2211
|
+
'network': network,
|
2081
2212
|
'address': address,
|
2082
2213
|
'tag': tag,
|
2083
|
-
'network': network,
|
2084
|
-
'info': depositAddress,
|
2085
2214
|
}
|
2086
2215
|
|
2087
|
-
def fetch_deposit_address(self, code: str, params={}):
|
2216
|
+
def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
2088
2217
|
"""
|
2089
2218
|
fetch the deposit address for a currency associated with self account
|
2090
|
-
|
2219
|
+
|
2220
|
+
https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
|
2221
|
+
|
2091
2222
|
:param str code: unified currency code
|
2092
2223
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2093
2224
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
@@ -2103,17 +2234,19 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2103
2234
|
raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find ' + networkCode + ' deposit address for ' + code)
|
2104
2235
|
return result
|
2105
2236
|
|
2106
|
-
def fetch_deposit_addresses_by_network(self, code: str, params={}):
|
2237
|
+
def fetch_deposit_addresses_by_network(self, code: str, params={}) -> List[DepositAddress]:
|
2107
2238
|
"""
|
2108
2239
|
fetch a dictionary of addresses for a currency, indexed by network
|
2109
|
-
|
2240
|
+
|
2241
|
+
https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
|
2242
|
+
|
2110
2243
|
:param str code: unified currency code of the currency for the deposit address
|
2111
2244
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2112
2245
|
:returns dict: a dictionary of `address structures <https://docs.ccxt.com/#/?id=address-structure>` indexed by the network
|
2113
2246
|
"""
|
2114
2247
|
self.load_markets()
|
2115
2248
|
currency = self.currency(code)
|
2116
|
-
request = {
|
2249
|
+
request: dict = {
|
2117
2250
|
'ccy': currency['id'],
|
2118
2251
|
}
|
2119
2252
|
response = self.privateGetAssetDepositAddress(self.extend(request, params))
|
@@ -2145,7 +2278,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2145
2278
|
|
2146
2279
|
def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
2147
2280
|
"""
|
2148
|
-
|
2281
|
+
|
2282
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-funds-transfer
|
2283
|
+
|
2149
2284
|
transfer currency internally between wallets on the same account
|
2150
2285
|
:param str code: unified currency code
|
2151
2286
|
:param float amount: amount to transfer
|
@@ -2159,7 +2294,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2159
2294
|
accountsByType = self.safe_value(self.options, 'accountsByType', {})
|
2160
2295
|
fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
|
2161
2296
|
toId = self.safe_string(accountsByType, toAccount, toAccount)
|
2162
|
-
request = {
|
2297
|
+
request: dict = {
|
2163
2298
|
'ccy': currency['id'],
|
2164
2299
|
'amt': self.currency_to_precision(code, amount),
|
2165
2300
|
'type': '0', # 0 = transfer within account by default, 1 = master account to sub-account, 2 = sub-account to master account, 3 = sub-account to master account(Only applicable to APIKey from sub-account), 4 = sub-account to sub-account
|
@@ -2197,10 +2332,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2197
2332
|
# }
|
2198
2333
|
#
|
2199
2334
|
data = self.safe_value(response, 'data', [])
|
2200
|
-
rawTransfer = self.
|
2335
|
+
rawTransfer = self.safe_dict(data, 0, {})
|
2201
2336
|
return self.parse_transfer(rawTransfer, currency)
|
2202
2337
|
|
2203
|
-
def parse_transfer(self, transfer, currency: Currency = None):
|
2338
|
+
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
2204
2339
|
#
|
2205
2340
|
# transfer
|
2206
2341
|
#
|
@@ -2276,15 +2411,17 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2276
2411
|
'status': self.parse_transfer_status(self.safe_string(transfer, 'state')),
|
2277
2412
|
}
|
2278
2413
|
|
2279
|
-
def parse_transfer_status(self, status):
|
2280
|
-
statuses = {
|
2414
|
+
def parse_transfer_status(self, status: Str) -> Str:
|
2415
|
+
statuses: dict = {
|
2281
2416
|
'success': 'ok',
|
2282
2417
|
}
|
2283
2418
|
return self.safe_string(statuses, status, status)
|
2284
2419
|
|
2285
|
-
def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
2420
|
+
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
2286
2421
|
"""
|
2287
|
-
|
2422
|
+
|
2423
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-withdrawal
|
2424
|
+
|
2288
2425
|
make a withdrawal
|
2289
2426
|
:param str code: unified currency code
|
2290
2427
|
:param float amount: the amount to withdraw
|
@@ -2299,7 +2436,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2299
2436
|
currency = self.currency(code)
|
2300
2437
|
if (tag is not None) and (len(tag) > 0):
|
2301
2438
|
address = address + ':' + tag
|
2302
|
-
request = {
|
2439
|
+
request: dict = {
|
2303
2440
|
'ccy': currency['id'],
|
2304
2441
|
'toAddr': address,
|
2305
2442
|
'dest': '4',
|
@@ -2333,12 +2470,14 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2333
2470
|
# }
|
2334
2471
|
#
|
2335
2472
|
data = self.safe_value(response, 'data', [])
|
2336
|
-
transaction = self.
|
2473
|
+
transaction = self.safe_dict(data, 0)
|
2337
2474
|
return self.parse_transaction(transaction, currency)
|
2338
2475
|
|
2339
2476
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2340
2477
|
"""
|
2341
|
-
|
2478
|
+
|
2479
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-deposit-history
|
2480
|
+
|
2342
2481
|
fetch all deposits made to an account
|
2343
2482
|
:param str code: unified currency code
|
2344
2483
|
:param int [since]: the earliest time in ms to fetch deposits for
|
@@ -2347,7 +2486,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2347
2486
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
2348
2487
|
"""
|
2349
2488
|
self.load_markets()
|
2350
|
-
request = {
|
2489
|
+
request: dict = {
|
2351
2490
|
# 'ccy': currency['id'],
|
2352
2491
|
# 'state': 2, # 0 waiting for confirmation, 1 deposit credited, 2 deposit successful
|
2353
2492
|
# 'after': since,
|
@@ -2402,12 +2541,14 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2402
2541
|
# ]
|
2403
2542
|
# }
|
2404
2543
|
#
|
2405
|
-
data = self.
|
2544
|
+
data = self.safe_list(response, 'data', [])
|
2406
2545
|
return self.parse_transactions(data, currency, since, limit, params)
|
2407
2546
|
|
2408
2547
|
def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
2409
2548
|
"""
|
2410
|
-
|
2549
|
+
|
2550
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-withdrawal-history
|
2551
|
+
|
2411
2552
|
fetch all withdrawals made from an account
|
2412
2553
|
:param str code: unified currency code
|
2413
2554
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
@@ -2416,7 +2557,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2416
2557
|
:returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
|
2417
2558
|
"""
|
2418
2559
|
self.load_markets()
|
2419
|
-
request = {
|
2560
|
+
request: dict = {
|
2420
2561
|
# 'ccy': currency['id'],
|
2421
2562
|
# 'state': 2, # -3: pending cancel, -2 canceled, -1 failed, 0, pending, 1 sending, 2 sent, 3 awaiting email verification, 4 awaiting manual verification, 5 awaiting identity verification
|
2422
2563
|
# 'after': since,
|
@@ -2463,10 +2604,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2463
2604
|
# ]
|
2464
2605
|
# }
|
2465
2606
|
#
|
2466
|
-
data = self.
|
2607
|
+
data = self.safe_list(response, 'data', [])
|
2467
2608
|
return self.parse_transactions(data, currency, since, limit, params)
|
2468
2609
|
|
2469
|
-
def parse_transaction_status(self, status):
|
2610
|
+
def parse_transaction_status(self, status: Str):
|
2470
2611
|
#
|
2471
2612
|
# deposit statuses
|
2472
2613
|
#
|
@@ -2490,7 +2631,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2490
2631
|
# "5": "awaiting identity confirmation"
|
2491
2632
|
# }
|
2492
2633
|
#
|
2493
|
-
statuses = {
|
2634
|
+
statuses: dict = {
|
2494
2635
|
'-3': 'pending',
|
2495
2636
|
'-2': 'canceled',
|
2496
2637
|
'-1': 'failed',
|
@@ -2503,7 +2644,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2503
2644
|
}
|
2504
2645
|
return self.safe_string(statuses, status, status)
|
2505
2646
|
|
2506
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
2647
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
2507
2648
|
#
|
2508
2649
|
# withdraw
|
2509
2650
|
#
|
@@ -2598,8 +2739,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2598
2739
|
|
2599
2740
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
2600
2741
|
"""
|
2601
|
-
|
2602
|
-
|
2742
|
+
|
2743
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-days
|
2744
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-months
|
2745
|
+
|
2603
2746
|
fetch all trades made by the user
|
2604
2747
|
:param str symbol: unified market symbol
|
2605
2748
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -2608,7 +2751,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2608
2751
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
2609
2752
|
"""
|
2610
2753
|
self.load_markets()
|
2611
|
-
request = {
|
2754
|
+
request: dict = {
|
2612
2755
|
'instType': 'SPOT',
|
2613
2756
|
}
|
2614
2757
|
if (limit is not None) and (limit > 100):
|
@@ -2624,7 +2767,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2624
2767
|
response = self.privateGetTradeFillsHistory(self.extend(request, params))
|
2625
2768
|
else:
|
2626
2769
|
response = self.privateGetTradeFills(self.extend(request, params))
|
2627
|
-
data = self.
|
2770
|
+
data = self.safe_list(response, 'data', [])
|
2628
2771
|
return self.parse_trades(data, market, since, limit)
|
2629
2772
|
|
2630
2773
|
def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
@@ -2637,7 +2780,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2637
2780
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2638
2781
|
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
2639
2782
|
"""
|
2640
|
-
request = {
|
2783
|
+
request: dict = {
|
2641
2784
|
# 'instrument_id': market['id'],
|
2642
2785
|
'order_id': id,
|
2643
2786
|
# 'after': '1', # return the page after the specified page number
|
@@ -2646,22 +2789,24 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2646
2789
|
}
|
2647
2790
|
return self.fetch_my_trades(symbol, since, limit, self.extend(request, params))
|
2648
2791
|
|
2649
|
-
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
2792
|
+
def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
2650
2793
|
"""
|
2651
|
-
|
2652
|
-
|
2653
|
-
|
2654
|
-
|
2655
|
-
|
2794
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
2795
|
+
|
2796
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-asset-bills-details
|
2797
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days
|
2798
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months
|
2799
|
+
|
2800
|
+
:param str [code]: unified currency code, default is None
|
2656
2801
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
2657
|
-
:param int [limit]: max number of ledger
|
2802
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
2658
2803
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
2659
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
2804
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
2660
2805
|
"""
|
2661
2806
|
self.load_markets()
|
2662
2807
|
method = None
|
2663
2808
|
method, params = self.handle_option_and_params(params, 'fetchLedger', 'method', 'privateGetAccountBills')
|
2664
|
-
request = {
|
2809
|
+
request: dict = {
|
2665
2810
|
# 'instType': None, # 'SPOT', 'MARGIN', 'SWAP', 'FUTURES", 'OPTION'
|
2666
2811
|
# 'ccy': None, # currency['id'],
|
2667
2812
|
# 'ctType': None, # 'linear', 'inverse', only applicable to FUTURES/SWAP
|
@@ -2739,7 +2884,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2739
2884
|
return self.parse_ledger(data, currency, since, limit)
|
2740
2885
|
|
2741
2886
|
def parse_ledger_entry_type(self, type):
|
2742
|
-
types = {
|
2887
|
+
types: dict = {
|
2743
2888
|
'1': 'transfer', # transfer
|
2744
2889
|
'2': 'trade', # trade
|
2745
2890
|
'3': 'trade', # delivery
|
@@ -2754,7 +2899,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2754
2899
|
}
|
2755
2900
|
return self.safe_string(types, type, type)
|
2756
2901
|
|
2757
|
-
def parse_ledger_entry(self, item, currency: Currency = None):
|
2902
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
2758
2903
|
#
|
2759
2904
|
# privateGetAccountBills, privateGetAccountBillsArchive
|
2760
2905
|
#
|
@@ -2791,45 +2936,36 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2791
2936
|
# "ts": "1597026383085"
|
2792
2937
|
# }
|
2793
2938
|
#
|
2794
|
-
|
2795
|
-
|
2796
|
-
|
2797
|
-
referenceAccount = None
|
2798
|
-
type = self.parse_ledger_entry_type(self.safe_string(item, 'type'))
|
2799
|
-
code = self.safe_currency_code(self.safe_string(item, 'ccy'), currency)
|
2800
|
-
amountString = self.safe_string(item, 'balChg')
|
2801
|
-
amount = self.parse_number(amountString)
|
2939
|
+
currencyId = self.safe_string(item, 'ccy')
|
2940
|
+
code = self.safe_currency_code(currencyId, currency)
|
2941
|
+
currency = self.safe_currency(currencyId, currency)
|
2802
2942
|
timestamp = self.safe_integer(item, 'ts')
|
2803
2943
|
feeCostString = self.safe_string(item, 'fee')
|
2804
2944
|
fee = None
|
2805
2945
|
if feeCostString is not None:
|
2806
2946
|
fee = {
|
2807
|
-
'cost': self.
|
2947
|
+
'cost': self.parse_to_numeric(Precise.string_neg(feeCostString)),
|
2808
2948
|
'currency': code,
|
2809
2949
|
}
|
2810
|
-
before = None
|
2811
|
-
afterString = self.safe_string(item, 'bal')
|
2812
|
-
after = self.parse_number(afterString)
|
2813
|
-
status = 'ok'
|
2814
2950
|
marketId = self.safe_string(item, 'instId')
|
2815
2951
|
symbol = self.safe_symbol(marketId, None, '-')
|
2816
|
-
return {
|
2817
|
-
'id': id,
|
2952
|
+
return self.safe_ledger_entry({
|
2818
2953
|
'info': item,
|
2954
|
+
'id': self.safe_string(item, 'billId'),
|
2819
2955
|
'timestamp': timestamp,
|
2820
2956
|
'datetime': self.iso8601(timestamp),
|
2821
|
-
'account':
|
2822
|
-
'referenceId':
|
2823
|
-
'referenceAccount':
|
2824
|
-
'type': type,
|
2957
|
+
'account': None,
|
2958
|
+
'referenceId': self.safe_string(item, 'ordId'),
|
2959
|
+
'referenceAccount': None,
|
2960
|
+
'type': self.parse_ledger_entry_type(self.safe_string(item, 'type')),
|
2825
2961
|
'currency': code,
|
2826
2962
|
'symbol': symbol,
|
2827
|
-
'amount':
|
2828
|
-
'before':
|
2829
|
-
'after':
|
2830
|
-
'status':
|
2963
|
+
'amount': self.safe_number(item, 'balChg'),
|
2964
|
+
'before': None, # balance before
|
2965
|
+
'after': self.safe_number(item, 'bal'), # balance after
|
2966
|
+
'status': 'ok',
|
2831
2967
|
'fee': fee,
|
2832
|
-
}
|
2968
|
+
}, currency)
|
2833
2969
|
|
2834
2970
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
2835
2971
|
isArray = isinstance(params, list)
|
@@ -2871,7 +3007,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
2871
3007
|
else:
|
2872
3008
|
return self.parse_trading_balance(response)
|
2873
3009
|
|
2874
|
-
def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
3010
|
+
def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
2875
3011
|
if not response:
|
2876
3012
|
return None # fallback to default error handler
|
2877
3013
|
#
|