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/coinsph.py
CHANGED
@@ -6,14 +6,14 @@
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
7
7
|
from ccxt.abstract.coinsph 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
|
9
|
+
from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction
|
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 ArgumentsRequired
|
14
15
|
from ccxt.base.errors import BadRequest
|
15
16
|
from ccxt.base.errors import BadSymbol
|
16
|
-
from ccxt.base.errors import BadResponse
|
17
17
|
from ccxt.base.errors import InsufficientFunds
|
18
18
|
from ccxt.base.errors import InvalidAddress
|
19
19
|
from ccxt.base.errors import InvalidOrder
|
@@ -23,7 +23,7 @@ from ccxt.base.errors import DuplicateOrderId
|
|
23
23
|
from ccxt.base.errors import NotSupported
|
24
24
|
from ccxt.base.errors import RateLimitExceeded
|
25
25
|
from ccxt.base.errors import ExchangeNotAvailable
|
26
|
-
from ccxt.base.errors import
|
26
|
+
from ccxt.base.errors import BadResponse
|
27
27
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
28
28
|
from ccxt.base.precise import Precise
|
29
29
|
|
@@ -108,7 +108,11 @@ class coinsph(Exchange, ImplicitAPI):
|
|
108
108
|
'fetchOrders': False,
|
109
109
|
'fetchOrderTrades': True,
|
110
110
|
'fetchPosition': False,
|
111
|
+
'fetchPositionHistory': False,
|
112
|
+
'fetchPositionMode': False,
|
111
113
|
'fetchPositions': False,
|
114
|
+
'fetchPositionsForSymbol': False,
|
115
|
+
'fetchPositionsHistory': False,
|
112
116
|
'fetchPositionsRisk': False,
|
113
117
|
'fetchPremiumIndexOHLCV': False,
|
114
118
|
'fetchStatus': True,
|
@@ -309,6 +313,72 @@ class coinsph(Exchange, ImplicitAPI):
|
|
309
313
|
'ARB': 'ARBITRUM',
|
310
314
|
},
|
311
315
|
},
|
316
|
+
'features': {
|
317
|
+
'spot': {
|
318
|
+
'sandbox': False,
|
319
|
+
'createOrder': {
|
320
|
+
'marginMode': False,
|
321
|
+
'triggerPrice': True,
|
322
|
+
'triggerPriceType': None,
|
323
|
+
'triggerDirection': False,
|
324
|
+
'stopLossPrice': False, # todo
|
325
|
+
'takeProfitPrice': False, # todo
|
326
|
+
'attachedStopLossTakeProfit': None,
|
327
|
+
'timeInForce': {
|
328
|
+
'IOC': True,
|
329
|
+
'FOK': True,
|
330
|
+
'PO': False,
|
331
|
+
'GTD': False,
|
332
|
+
},
|
333
|
+
'hedged': False,
|
334
|
+
'trailing': False,
|
335
|
+
'leverage': False,
|
336
|
+
'marketBuyByCost': True,
|
337
|
+
'marketBuyRequiresPrice': False,
|
338
|
+
'selfTradePrevention': True, # todo implement
|
339
|
+
'iceberg': False,
|
340
|
+
},
|
341
|
+
'createOrders': None,
|
342
|
+
'fetchMyTrades': {
|
343
|
+
'marginMode': False,
|
344
|
+
'limit': 1000,
|
345
|
+
'daysBack': 100000,
|
346
|
+
'untilDays': 100000, # todo implement
|
347
|
+
},
|
348
|
+
'fetchOrder': {
|
349
|
+
'marginMode': False,
|
350
|
+
'trigger': False,
|
351
|
+
'trailing': False,
|
352
|
+
},
|
353
|
+
'fetchOpenOrders': {
|
354
|
+
'marginMode': False,
|
355
|
+
'limit': None,
|
356
|
+
'trigger': False,
|
357
|
+
'trailing': False,
|
358
|
+
},
|
359
|
+
'fetchOrders': None,
|
360
|
+
'fetchClosedOrders': {
|
361
|
+
'marginMode': False,
|
362
|
+
'limit': 1000,
|
363
|
+
'daysBack': 100000,
|
364
|
+
'daysBackCanceled': 1,
|
365
|
+
'untilDays': 100000,
|
366
|
+
'trigger': False,
|
367
|
+
'trailing': False,
|
368
|
+
},
|
369
|
+
'fetchOHLCV': {
|
370
|
+
'limit': 1000,
|
371
|
+
},
|
372
|
+
},
|
373
|
+
'swap': {
|
374
|
+
'linear': None,
|
375
|
+
'inverse': None,
|
376
|
+
},
|
377
|
+
'future': {
|
378
|
+
'linear': None,
|
379
|
+
'inverse': None,
|
380
|
+
},
|
381
|
+
},
|
312
382
|
# https://coins-docs.github.io/errors/
|
313
383
|
'exceptions': {
|
314
384
|
'exact': {
|
@@ -452,7 +522,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
452
522
|
async def fetch_status(self, params={}):
|
453
523
|
"""
|
454
524
|
the latest known information on the availability of the exchange API
|
455
|
-
|
525
|
+
|
526
|
+
https://coins-docs.github.io/rest-api/#test-connectivity
|
527
|
+
|
456
528
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
457
529
|
:returns dict: a `status structure <https://docs.ccxt.com/#/?id=exchange-status-structure>`
|
458
530
|
"""
|
@@ -468,7 +540,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
468
540
|
async def fetch_time(self, params={}):
|
469
541
|
"""
|
470
542
|
fetches the current integer timestamp in milliseconds from the exchange server
|
471
|
-
|
543
|
+
|
544
|
+
https://coins-docs.github.io/rest-api/#check-server-time
|
545
|
+
|
472
546
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
473
547
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
474
548
|
"""
|
@@ -478,10 +552,12 @@ class coinsph(Exchange, ImplicitAPI):
|
|
478
552
|
#
|
479
553
|
return self.safe_integer(response, 'serverTime')
|
480
554
|
|
481
|
-
async def fetch_markets(self, params={}):
|
555
|
+
async def fetch_markets(self, params={}) -> List[Market]:
|
482
556
|
"""
|
483
557
|
retrieves data on all markets for coinsph
|
484
|
-
|
558
|
+
|
559
|
+
https://coins-docs.github.io/rest-api/#exchange-information
|
560
|
+
|
485
561
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
486
562
|
:returns dict[]: an array of objects representing market data
|
487
563
|
"""
|
@@ -545,7 +621,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
545
621
|
# ]
|
546
622
|
# }
|
547
623
|
#
|
548
|
-
markets = self.
|
624
|
+
markets = self.safe_list(response, 'symbols', [])
|
549
625
|
result = []
|
550
626
|
for i in range(0, len(markets)):
|
551
627
|
market = markets[i]
|
@@ -554,7 +630,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
554
630
|
quoteId = self.safe_string(market, 'quoteAsset')
|
555
631
|
base = self.safe_currency_code(baseId)
|
556
632
|
quote = self.safe_currency_code(quoteId)
|
557
|
-
limits = self.index_by(self.
|
633
|
+
limits = self.index_by(self.safe_list(market, 'filters', []), 'filterType')
|
558
634
|
amountLimits = self.safe_value(limits, 'LOT_SIZE', {})
|
559
635
|
priceLimits = self.safe_value(limits, 'PRICE_FILTER', {})
|
560
636
|
costLimits = self.safe_value(limits, 'NOTIONAL', {})
|
@@ -615,15 +691,17 @@ class coinsph(Exchange, ImplicitAPI):
|
|
615
691
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
616
692
|
"""
|
617
693
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
618
|
-
|
619
|
-
|
620
|
-
|
694
|
+
|
695
|
+
https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
|
696
|
+
https://coins-docs.github.io/rest-api/#symbol-price-ticker
|
697
|
+
https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
|
698
|
+
|
621
699
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
622
700
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
623
701
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
624
702
|
"""
|
625
703
|
await self.load_markets()
|
626
|
-
request = {}
|
704
|
+
request: dict = {}
|
627
705
|
if symbols is not None:
|
628
706
|
ids = []
|
629
707
|
for i in range(0, len(symbols)):
|
@@ -632,7 +710,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
632
710
|
ids.append(id)
|
633
711
|
request['symbols'] = ids
|
634
712
|
defaultMethod = 'publicGetOpenapiQuoteV1Ticker24hr'
|
635
|
-
options = self.
|
713
|
+
options = self.safe_dict(self.options, 'fetchTickers', {})
|
636
714
|
method = self.safe_string(options, 'method', defaultMethod)
|
637
715
|
tickers = None
|
638
716
|
if method == 'publicGetOpenapiQuoteV1TickerPrice':
|
@@ -646,20 +724,22 @@ class coinsph(Exchange, ImplicitAPI):
|
|
646
724
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
647
725
|
"""
|
648
726
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
649
|
-
|
650
|
-
|
651
|
-
|
727
|
+
|
728
|
+
https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
|
729
|
+
https://coins-docs.github.io/rest-api/#symbol-price-ticker
|
730
|
+
https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
|
731
|
+
|
652
732
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
653
733
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
654
734
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
655
735
|
"""
|
656
736
|
await self.load_markets()
|
657
737
|
market = self.market(symbol)
|
658
|
-
request = {
|
738
|
+
request: dict = {
|
659
739
|
'symbol': market['id'],
|
660
740
|
}
|
661
741
|
defaultMethod = 'publicGetOpenapiQuoteV1Ticker24hr'
|
662
|
-
options = self.
|
742
|
+
options = self.safe_dict(self.options, 'fetchTicker', {})
|
663
743
|
method = self.safe_string(options, 'method', defaultMethod)
|
664
744
|
ticker = None
|
665
745
|
if method == 'publicGetOpenapiQuoteV1TickerPrice':
|
@@ -670,7 +750,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
670
750
|
ticker = await self.publicGetOpenapiQuoteV1Ticker24hr(self.extend(request, params))
|
671
751
|
return self.parse_ticker(ticker, market)
|
672
752
|
|
673
|
-
def parse_ticker(self, ticker, market: Market = None) -> Ticker:
|
753
|
+
def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
|
674
754
|
#
|
675
755
|
# publicGetOpenapiQuoteV1Ticker24hr
|
676
756
|
# {
|
@@ -751,7 +831,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
751
831
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
752
832
|
"""
|
753
833
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
754
|
-
|
834
|
+
|
835
|
+
https://coins-docs.github.io/rest-api/#order-book
|
836
|
+
|
755
837
|
:param str symbol: unified symbol of the market to fetch the order book for
|
756
838
|
:param int [limit]: the maximum amount of order book entries to return(default 100, max 200)
|
757
839
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
@@ -759,7 +841,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
759
841
|
"""
|
760
842
|
await self.load_markets()
|
761
843
|
market = self.market(symbol)
|
762
|
-
request = {
|
844
|
+
request: dict = {
|
763
845
|
'symbol': market['id'],
|
764
846
|
}
|
765
847
|
if limit is not None:
|
@@ -785,33 +867,44 @@ class coinsph(Exchange, ImplicitAPI):
|
|
785
867
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
786
868
|
"""
|
787
869
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
788
|
-
|
870
|
+
|
871
|
+
https://coins-docs.github.io/rest-api/#klinecandlestick-data
|
872
|
+
|
789
873
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
790
874
|
:param str timeframe: the length of time each candle represents
|
791
875
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
792
876
|
:param int [limit]: the maximum amount of candles to fetch(default 500, max 1000)
|
793
877
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
878
|
+
:param int [params.until]: timestamp in ms of the latest candle to fetch
|
794
879
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
795
880
|
"""
|
796
881
|
await self.load_markets()
|
797
882
|
market = self.market(symbol)
|
798
883
|
interval = self.safe_string(self.timeframes, timeframe)
|
799
|
-
|
884
|
+
until = self.safe_integer(params, 'until')
|
885
|
+
request: dict = {
|
800
886
|
'symbol': market['id'],
|
801
887
|
'interval': interval,
|
802
888
|
}
|
889
|
+
if limit is None:
|
890
|
+
limit = 1000
|
803
891
|
if since is not None:
|
804
892
|
request['startTime'] = since
|
805
|
-
request['limit'] = 1000
|
806
893
|
# since work properly only when it is "younger" than last "limit" candle
|
807
|
-
if
|
808
|
-
|
809
|
-
request['endTime'] = self.sum(since, duration * (limit - 1))
|
894
|
+
if until is not None:
|
895
|
+
request['endTime'] = until
|
810
896
|
else:
|
811
|
-
|
812
|
-
|
813
|
-
|
814
|
-
request['
|
897
|
+
duration = self.parse_timeframe(timeframe) * 1000
|
898
|
+
endTimeByLimit = self.sum(since, duration * (limit - 1))
|
899
|
+
now = self.milliseconds()
|
900
|
+
request['endTime'] = min(endTimeByLimit, now)
|
901
|
+
elif until is not None:
|
902
|
+
request['endTime'] = until
|
903
|
+
# since work properly only when it is "younger" than last "limit" candle
|
904
|
+
duration = self.parse_timeframe(timeframe) * 1000
|
905
|
+
request['startTime'] = until - (duration * (limit - 1))
|
906
|
+
request['limit'] = limit
|
907
|
+
params = self.omit(params, 'until')
|
815
908
|
response = await self.publicGetOpenapiQuoteV1Klines(self.extend(request, params))
|
816
909
|
#
|
817
910
|
# [
|
@@ -845,7 +938,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
845
938
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
846
939
|
"""
|
847
940
|
get the list of most recent trades for a particular symbol
|
848
|
-
|
941
|
+
|
942
|
+
https://coins-docs.github.io/rest-api/#recent-trades-list
|
943
|
+
|
849
944
|
:param str symbol: unified symbol of the market to fetch trades for
|
850
945
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
851
946
|
:param int [limit]: the maximum amount of trades to fetch(default 500, max 1000)
|
@@ -854,7 +949,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
854
949
|
"""
|
855
950
|
await self.load_markets()
|
856
951
|
market = self.market(symbol)
|
857
|
-
request = {
|
952
|
+
request: dict = {
|
858
953
|
'symbol': market['id'],
|
859
954
|
}
|
860
955
|
if since is not None:
|
@@ -882,7 +977,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
882
977
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
883
978
|
"""
|
884
979
|
fetch all trades made by the user
|
885
|
-
|
980
|
+
|
981
|
+
https://coins-docs.github.io/rest-api/#account-trade-list-user_data
|
982
|
+
|
886
983
|
:param str symbol: unified market symbol
|
887
984
|
:param int [since]: the earliest time in ms to fetch trades for
|
888
985
|
:param int [limit]: the maximum number of trades structures to retrieve(default 500, max 1000)
|
@@ -893,7 +990,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
893
990
|
raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
|
894
991
|
await self.load_markets()
|
895
992
|
market = self.market(symbol)
|
896
|
-
request = {
|
993
|
+
request: dict = {
|
897
994
|
'symbol': market['id'],
|
898
995
|
}
|
899
996
|
if since is not None:
|
@@ -908,7 +1005,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
908
1005
|
async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
909
1006
|
"""
|
910
1007
|
fetch all the trades made from a single order
|
911
|
-
|
1008
|
+
|
1009
|
+
https://coins-docs.github.io/rest-api/#account-trade-list-user_data
|
1010
|
+
|
912
1011
|
:param str id: order id
|
913
1012
|
:param str symbol: unified market symbol
|
914
1013
|
:param int [since]: the earliest time in ms to fetch trades for
|
@@ -918,12 +1017,12 @@ class coinsph(Exchange, ImplicitAPI):
|
|
918
1017
|
"""
|
919
1018
|
if symbol is None:
|
920
1019
|
raise ArgumentsRequired(self.id + ' fetchOrderTrades() requires a symbol argument')
|
921
|
-
request = {
|
1020
|
+
request: dict = {
|
922
1021
|
'orderId': id,
|
923
1022
|
}
|
924
1023
|
return await self.fetch_my_trades(symbol, since, limit, self.extend(request, params))
|
925
1024
|
|
926
|
-
def parse_trade(self, trade, market: Market = None) -> Trade:
|
1025
|
+
def parse_trade(self, trade: dict, market: Market = None) -> Trade:
|
927
1026
|
#
|
928
1027
|
# fetchTrades
|
929
1028
|
# {
|
@@ -978,7 +1077,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
978
1077
|
'cost': feeCost,
|
979
1078
|
'currency': self.safe_currency_code(feeCurrencyId),
|
980
1079
|
}
|
981
|
-
isBuyer = self.
|
1080
|
+
isBuyer = self.safe_bool_2(trade, 'isBuyer', 'isBuyerMaker', None)
|
982
1081
|
side = None
|
983
1082
|
if isBuyer is not None:
|
984
1083
|
side = 'buy' if (isBuyer is True) else 'sell'
|
@@ -1008,7 +1107,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1008
1107
|
async def fetch_balance(self, params={}) -> Balances:
|
1009
1108
|
"""
|
1010
1109
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
1011
|
-
|
1110
|
+
|
1111
|
+
https://coins-docs.github.io/rest-api/#accept-the-quote
|
1112
|
+
|
1012
1113
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1013
1114
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
1014
1115
|
"""
|
@@ -1038,8 +1139,8 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1038
1139
|
return self.parse_balance(response)
|
1039
1140
|
|
1040
1141
|
def parse_balance(self, response) -> Balances:
|
1041
|
-
balances = self.
|
1042
|
-
result = {
|
1142
|
+
balances = self.safe_list(response, 'balances', [])
|
1143
|
+
result: dict = {
|
1043
1144
|
'info': response,
|
1044
1145
|
'timestamp': None,
|
1045
1146
|
'datetime': None,
|
@@ -1057,12 +1158,14 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1057
1158
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
1058
1159
|
"""
|
1059
1160
|
create a trade order
|
1060
|
-
|
1161
|
+
|
1162
|
+
https://coins-docs.github.io/rest-api/#new-order--trade
|
1163
|
+
|
1061
1164
|
:param str symbol: unified symbol of the market to create an order in
|
1062
1165
|
:param str type: 'market', 'limit', 'stop_loss', 'take_profit', 'stop_loss_limit', 'take_profit_limit' or 'limit_maker'
|
1063
1166
|
:param str side: 'buy' or 'sell'
|
1064
1167
|
:param float amount: how much of currency you want to trade in units of base currency
|
1065
|
-
:param float [price]: the price at which the order is to be
|
1168
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
1066
1169
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1067
1170
|
:param float [params.cost]: the quote quantity that can be used alternative for the amount for market buy orders
|
1068
1171
|
:param bool [params.test]: set to True to test an order, no order will be created but the request will be validated
|
@@ -1077,7 +1180,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1077
1180
|
orderType = self.encode_order_type(orderType)
|
1078
1181
|
params = self.omit(params, 'type')
|
1079
1182
|
orderSide = self.encode_order_side(side)
|
1080
|
-
request = {
|
1183
|
+
request: dict = {
|
1081
1184
|
'symbol': market['id'],
|
1082
1185
|
'type': orderType,
|
1083
1186
|
'side': orderSide,
|
@@ -1118,10 +1221,10 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1118
1221
|
quoteAmount = self.cost_to_precision(symbol, amount)
|
1119
1222
|
request['quoteOrderQty'] = quoteAmount
|
1120
1223
|
if orderType == 'STOP_LOSS' or orderType == 'STOP_LOSS_LIMIT' or orderType == 'TAKE_PROFIT' or orderType == 'TAKE_PROFIT_LIMIT':
|
1121
|
-
|
1122
|
-
if
|
1224
|
+
triggerPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
|
1225
|
+
if triggerPrice is None:
|
1123
1226
|
raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice or stopPrice param for stop_loss, take_profit, stop_loss_limit, and take_profit_limit orders')
|
1124
|
-
request['stopPrice'] = self.price_to_precision(symbol,
|
1227
|
+
request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
|
1125
1228
|
request['newOrderRespType'] = newOrderRespType
|
1126
1229
|
params = self.omit(params, 'price', 'stopPrice', 'triggerPrice', 'quantity', 'quoteOrderQty')
|
1127
1230
|
response = None
|
@@ -1161,14 +1264,16 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1161
1264
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
1162
1265
|
"""
|
1163
1266
|
fetches information on an order made by the user
|
1164
|
-
|
1267
|
+
|
1268
|
+
https://coins-docs.github.io/rest-api/#query-order-user_data
|
1269
|
+
|
1165
1270
|
:param int|str id: order id
|
1166
1271
|
:param str symbol: not used by coinsph fetchOrder()
|
1167
1272
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1168
1273
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1169
1274
|
"""
|
1170
1275
|
await self.load_markets()
|
1171
|
-
request = {}
|
1276
|
+
request: dict = {}
|
1172
1277
|
clientOrderId = self.safe_value_2(params, 'origClientOrderId', 'clientOrderId')
|
1173
1278
|
if clientOrderId is not None:
|
1174
1279
|
request['origClientOrderId'] = clientOrderId
|
@@ -1181,7 +1286,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1181
1286
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1182
1287
|
"""
|
1183
1288
|
fetch all unfilled currently open orders
|
1184
|
-
|
1289
|
+
|
1290
|
+
https://coins-docs.github.io/rest-api/#current-open-orders-user_data
|
1291
|
+
|
1185
1292
|
:param str symbol: unified market symbol
|
1186
1293
|
:param int [since]: the earliest time in ms to fetch open orders for
|
1187
1294
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
@@ -1190,7 +1297,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1190
1297
|
"""
|
1191
1298
|
await self.load_markets()
|
1192
1299
|
market = None
|
1193
|
-
request = {}
|
1300
|
+
request: dict = {}
|
1194
1301
|
if symbol is not None:
|
1195
1302
|
market = self.market(symbol)
|
1196
1303
|
request['symbol'] = market['id']
|
@@ -1200,7 +1307,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1200
1307
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
1201
1308
|
"""
|
1202
1309
|
fetches information on multiple closed orders made by the user
|
1203
|
-
|
1310
|
+
|
1311
|
+
https://coins-docs.github.io/rest-api/#history-orders-user_data
|
1312
|
+
|
1204
1313
|
:param str symbol: unified market symbol of the market orders were made in
|
1205
1314
|
:param int [since]: the earliest time in ms to fetch orders for
|
1206
1315
|
:param int [limit]: the maximum number of order structures to retrieve(default 500, max 1000)
|
@@ -1211,7 +1320,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1211
1320
|
raise ArgumentsRequired(self.id + ' fetchClosedOrders() requires a symbol argument')
|
1212
1321
|
await self.load_markets()
|
1213
1322
|
market = self.market(symbol)
|
1214
|
-
request = {
|
1323
|
+
request: dict = {
|
1215
1324
|
'symbol': market['id'],
|
1216
1325
|
}
|
1217
1326
|
if since is not None:
|
@@ -1226,14 +1335,16 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1226
1335
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
1227
1336
|
"""
|
1228
1337
|
cancels an open order
|
1229
|
-
|
1338
|
+
|
1339
|
+
https://coins-docs.github.io/rest-api/#cancel-order-trade
|
1340
|
+
|
1230
1341
|
:param str id: order id
|
1231
1342
|
:param str symbol: not used by coinsph cancelOrder()
|
1232
1343
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1233
1344
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
1234
1345
|
"""
|
1235
1346
|
await self.load_markets()
|
1236
|
-
request = {}
|
1347
|
+
request: dict = {}
|
1237
1348
|
clientOrderId = self.safe_value_2(params, 'origClientOrderId', 'clientOrderId')
|
1238
1349
|
if clientOrderId is not None:
|
1239
1350
|
request['origClientOrderId'] = clientOrderId
|
@@ -1246,7 +1357,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1246
1357
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
1247
1358
|
"""
|
1248
1359
|
cancel open orders of market
|
1249
|
-
|
1360
|
+
|
1361
|
+
https://coins-docs.github.io/rest-api/#cancel-all-open-orders-on-a-symbol-trade
|
1362
|
+
|
1250
1363
|
:param str symbol: unified market symbol
|
1251
1364
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1252
1365
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
@@ -1255,14 +1368,14 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1255
1368
|
raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
|
1256
1369
|
await self.load_markets()
|
1257
1370
|
market = None
|
1258
|
-
request = {}
|
1371
|
+
request: dict = {}
|
1259
1372
|
if symbol is not None:
|
1260
1373
|
market = self.market(symbol)
|
1261
1374
|
request['symbol'] = market['id']
|
1262
1375
|
response = await self.privateDeleteOpenapiV1OpenOrders(self.extend(request, params))
|
1263
1376
|
return self.parse_orders(response, market)
|
1264
1377
|
|
1265
|
-
def parse_order(self, order, market: Market = None) -> Order:
|
1378
|
+
def parse_order(self, order: dict, market: Market = None) -> Order:
|
1266
1379
|
#
|
1267
1380
|
# createOrder POST /openapi/v1/order
|
1268
1381
|
# {
|
@@ -1336,9 +1449,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1336
1449
|
market = self.safe_market(marketId, market)
|
1337
1450
|
timestamp = self.safe_integer_2(order, 'time', 'transactTime')
|
1338
1451
|
trades = self.safe_value(order, 'fills', None)
|
1339
|
-
|
1340
|
-
if Precise.string_eq(
|
1341
|
-
|
1452
|
+
triggerPrice = self.safe_string(order, 'stopPrice')
|
1453
|
+
if Precise.string_eq(triggerPrice, '0'):
|
1454
|
+
triggerPrice = None
|
1342
1455
|
return self.safe_order({
|
1343
1456
|
'id': id,
|
1344
1457
|
'clientOrderId': self.safe_string(order, 'clientOrderId'),
|
@@ -1351,8 +1464,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1351
1464
|
'timeInForce': self.parse_order_time_in_force(self.safe_string(order, 'timeInForce')),
|
1352
1465
|
'side': self.parse_order_side(self.safe_string(order, 'side')),
|
1353
1466
|
'price': self.safe_string(order, 'price'),
|
1354
|
-
'
|
1355
|
-
'triggerPrice': stopPrice,
|
1467
|
+
'triggerPrice': triggerPrice,
|
1356
1468
|
'average': None,
|
1357
1469
|
'amount': self.safe_string(order, 'origQty'),
|
1358
1470
|
'cost': self.safe_string(order, 'cummulativeQuoteQty'),
|
@@ -1365,21 +1477,21 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1365
1477
|
}, market)
|
1366
1478
|
|
1367
1479
|
def parse_order_side(self, status):
|
1368
|
-
statuses = {
|
1480
|
+
statuses: dict = {
|
1369
1481
|
'BUY': 'buy',
|
1370
1482
|
'SELL': 'sell',
|
1371
1483
|
}
|
1372
1484
|
return self.safe_string(statuses, status, status)
|
1373
1485
|
|
1374
1486
|
def encode_order_side(self, status):
|
1375
|
-
statuses = {
|
1487
|
+
statuses: dict = {
|
1376
1488
|
'buy': 'BUY',
|
1377
1489
|
'sell': 'SELL',
|
1378
1490
|
}
|
1379
1491
|
return self.safe_string(statuses, status, status)
|
1380
1492
|
|
1381
1493
|
def parse_order_type(self, status):
|
1382
|
-
statuses = {
|
1494
|
+
statuses: dict = {
|
1383
1495
|
'MARKET': 'market',
|
1384
1496
|
'LIMIT': 'limit',
|
1385
1497
|
'LIMIT_MAKER': 'limit',
|
@@ -1391,7 +1503,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1391
1503
|
return self.safe_string(statuses, status, status)
|
1392
1504
|
|
1393
1505
|
def encode_order_type(self, status):
|
1394
|
-
statuses = {
|
1506
|
+
statuses: dict = {
|
1395
1507
|
'market': 'MARKET',
|
1396
1508
|
'limit': 'LIMIT',
|
1397
1509
|
'limit_maker': 'LIMIT_MAKER',
|
@@ -1402,8 +1514,8 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1402
1514
|
}
|
1403
1515
|
return self.safe_string(statuses, status, status)
|
1404
1516
|
|
1405
|
-
def parse_order_status(self, status):
|
1406
|
-
statuses = {
|
1517
|
+
def parse_order_status(self, status: Str):
|
1518
|
+
statuses: dict = {
|
1407
1519
|
'NEW': 'open',
|
1408
1520
|
'FILLED': 'closed',
|
1409
1521
|
'CANCELED': 'canceled',
|
@@ -1414,24 +1526,26 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1414
1526
|
return self.safe_string(statuses, status, status)
|
1415
1527
|
|
1416
1528
|
def parse_order_time_in_force(self, status):
|
1417
|
-
statuses = {
|
1529
|
+
statuses: dict = {
|
1418
1530
|
'GTC': 'GTC',
|
1419
1531
|
'FOK': 'FOK',
|
1420
1532
|
'IOC': 'IOC',
|
1421
1533
|
}
|
1422
1534
|
return self.safe_string(statuses, status, status)
|
1423
1535
|
|
1424
|
-
async def fetch_trading_fee(self, symbol: str, params={}):
|
1536
|
+
async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
|
1425
1537
|
"""
|
1426
1538
|
fetch the trading fees for a market
|
1427
|
-
|
1539
|
+
|
1540
|
+
https://coins-docs.github.io/rest-api/#trade-fee-user_data
|
1541
|
+
|
1428
1542
|
:param str symbol: unified market symbol
|
1429
1543
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1430
1544
|
:returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
|
1431
1545
|
"""
|
1432
1546
|
await self.load_markets()
|
1433
1547
|
market = self.market(symbol)
|
1434
|
-
request = {
|
1548
|
+
request: dict = {
|
1435
1549
|
'symbol': market['id'],
|
1436
1550
|
}
|
1437
1551
|
response = await self.privateGetOpenapiV1AssetTradeFee(self.extend(request, params))
|
@@ -1444,13 +1558,15 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1444
1558
|
# }
|
1445
1559
|
# ]
|
1446
1560
|
#
|
1447
|
-
tradingFee = self.
|
1561
|
+
tradingFee = self.safe_dict(response, 0, {})
|
1448
1562
|
return self.parse_trading_fee(tradingFee, market)
|
1449
1563
|
|
1450
|
-
async def fetch_trading_fees(self, params={}):
|
1564
|
+
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
1451
1565
|
"""
|
1452
1566
|
fetch the trading fees for multiple markets
|
1453
|
-
|
1567
|
+
|
1568
|
+
https://coins-docs.github.io/rest-api/#trade-fee-user_data
|
1569
|
+
|
1454
1570
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1455
1571
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
1456
1572
|
"""
|
@@ -1470,14 +1586,14 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1470
1586
|
# },
|
1471
1587
|
# ]
|
1472
1588
|
#
|
1473
|
-
result = {}
|
1589
|
+
result: dict = {}
|
1474
1590
|
for i in range(0, len(response)):
|
1475
1591
|
fee = self.parse_trading_fee(response[i])
|
1476
1592
|
symbol = fee['symbol']
|
1477
1593
|
result[symbol] = fee
|
1478
1594
|
return result
|
1479
1595
|
|
1480
|
-
def parse_trading_fee(self, fee, market: Market = None):
|
1596
|
+
def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
|
1481
1597
|
#
|
1482
1598
|
# {
|
1483
1599
|
# "symbol": "ETHUSDT",
|
@@ -1493,12 +1609,16 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1493
1609
|
'symbol': symbol,
|
1494
1610
|
'maker': self.safe_number(fee, 'makerCommission'),
|
1495
1611
|
'taker': self.safe_number(fee, 'takerCommission'),
|
1612
|
+
'percentage': None,
|
1613
|
+
'tierBased': None,
|
1496
1614
|
}
|
1497
1615
|
|
1498
|
-
async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
|
1616
|
+
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
|
1499
1617
|
"""
|
1500
1618
|
make a withdrawal to coins_ph account
|
1501
|
-
|
1619
|
+
|
1620
|
+
https://coins-docs.github.io/rest-api/#withdrawuser_data
|
1621
|
+
|
1502
1622
|
:param str code: unified currency code
|
1503
1623
|
:param float amount: the amount to withdraw
|
1504
1624
|
:param str address: not used by coinsph withdraw()
|
@@ -1516,7 +1636,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1516
1636
|
raise BadRequest(self.id + ' withdraw() require network parameter')
|
1517
1637
|
await self.load_markets()
|
1518
1638
|
currency = self.currency(code)
|
1519
|
-
request = {
|
1639
|
+
request: dict = {
|
1520
1640
|
'coin': currency['id'],
|
1521
1641
|
'amount': self.number_to_string(amount),
|
1522
1642
|
'network': networkId,
|
@@ -1531,7 +1651,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1531
1651
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1532
1652
|
"""
|
1533
1653
|
fetch all deposits made to an account
|
1534
|
-
|
1654
|
+
|
1655
|
+
https://coins-docs.github.io/rest-api/#deposit-history-user_data
|
1656
|
+
|
1535
1657
|
:param str code: unified currency code
|
1536
1658
|
:param int [since]: the earliest time in ms to fetch deposits for
|
1537
1659
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
@@ -1541,7 +1663,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1541
1663
|
# todo: returns an empty array - find out why
|
1542
1664
|
await self.load_markets()
|
1543
1665
|
currency = None
|
1544
|
-
request = {}
|
1666
|
+
request: dict = {}
|
1545
1667
|
if code is not None:
|
1546
1668
|
currency = self.currency(code)
|
1547
1669
|
request['coin'] = currency['id']
|
@@ -1583,7 +1705,9 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1583
1705
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
1584
1706
|
"""
|
1585
1707
|
fetch all withdrawals made from an account
|
1586
|
-
|
1708
|
+
|
1709
|
+
https://coins-docs.github.io/rest-api/#withdraw-history-user_data
|
1710
|
+
|
1587
1711
|
:param str code: unified currency code
|
1588
1712
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
1589
1713
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
@@ -1593,7 +1717,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1593
1717
|
# todo: returns an empty array - find out why
|
1594
1718
|
await self.load_markets()
|
1595
1719
|
currency = None
|
1596
|
-
request = {}
|
1720
|
+
request: dict = {}
|
1597
1721
|
if code is not None:
|
1598
1722
|
currency = self.currency(code)
|
1599
1723
|
request['coin'] = currency['id']
|
@@ -1638,7 +1762,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1638
1762
|
#
|
1639
1763
|
return self.parse_transactions(response, currency, since, limit)
|
1640
1764
|
|
1641
|
-
def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
|
1765
|
+
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
1642
1766
|
#
|
1643
1767
|
# fetchDeposits
|
1644
1768
|
# {
|
@@ -1725,8 +1849,8 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1725
1849
|
'fee': fee,
|
1726
1850
|
}
|
1727
1851
|
|
1728
|
-
def parse_transaction_status(self, status):
|
1729
|
-
statuses = {
|
1852
|
+
def parse_transaction_status(self, status: Str):
|
1853
|
+
statuses: dict = {
|
1730
1854
|
'0': 'pending',
|
1731
1855
|
'1': 'ok',
|
1732
1856
|
'2': 'failed',
|
@@ -1734,10 +1858,12 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1734
1858
|
}
|
1735
1859
|
return self.safe_string(statuses, status, status)
|
1736
1860
|
|
1737
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
1861
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
1738
1862
|
"""
|
1739
1863
|
fetch the deposit address for a currency associated with self account
|
1740
|
-
|
1864
|
+
|
1865
|
+
https://coins-docs.github.io/rest-api/#deposit-address-user_data
|
1866
|
+
|
1741
1867
|
:param str code: unified currency code
|
1742
1868
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
1743
1869
|
:param str [params.network]: network for fetch deposit address
|
@@ -1749,7 +1875,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1749
1875
|
raise BadRequest(self.id + ' fetchDepositAddress() require network parameter')
|
1750
1876
|
await self.load_markets()
|
1751
1877
|
currency = self.currency(code)
|
1752
|
-
request = {
|
1878
|
+
request: dict = {
|
1753
1879
|
'coin': currency['id'],
|
1754
1880
|
'network': networkId,
|
1755
1881
|
}
|
@@ -1764,7 +1890,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1764
1890
|
#
|
1765
1891
|
return self.parse_deposit_address(response, currency)
|
1766
1892
|
|
1767
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
1893
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
1768
1894
|
#
|
1769
1895
|
# {
|
1770
1896
|
# "coin": "ETH",
|
@@ -1775,11 +1901,11 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1775
1901
|
currencyId = self.safe_string(depositAddress, 'coin')
|
1776
1902
|
parsedCurrency = self.safe_currency_code(currencyId, currency)
|
1777
1903
|
return {
|
1904
|
+
'info': depositAddress,
|
1778
1905
|
'currency': parsedCurrency,
|
1906
|
+
'network': None,
|
1779
1907
|
'address': self.safe_string(depositAddress, 'address'),
|
1780
1908
|
'tag': self.safe_string(depositAddress, 'addressTag'),
|
1781
|
-
'network': None,
|
1782
|
-
'info': depositAddress,
|
1783
1909
|
}
|
1784
1910
|
|
1785
1911
|
def url_encode_query(self, query={}):
|
@@ -1832,7 +1958,7 @@ class coinsph(Exchange, ImplicitAPI):
|
|
1832
1958
|
url += '?' + query
|
1833
1959
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
1834
1960
|
|
1835
|
-
def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
|
1961
|
+
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
1836
1962
|
if response is None:
|
1837
1963
|
return None
|
1838
1964
|
responseCode = self.safe_string(response, 'code', None)
|