ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__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 +39 -35
- ccxt/abantether.py +8 -8
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/apex.py +31 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +106 -48
- ccxt/abstract/binancecoinm.py +106 -48
- ccxt/abstract/binanceus.py +141 -83
- ccxt/abstract/binanceusdm.py +106 -48
- ccxt/abstract/bingx.py +50 -1
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +67 -0
- ccxt/abstract/bitmart.py +19 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitrue.py +68 -68
- ccxt/abstract/bitstamp.py +1 -0
- ccxt/abstract/blofin.py +30 -0
- ccxt/abstract/btcbox.py +2 -0
- ccxt/abstract/bybit.py +28 -13
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbaseexchange.py +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/cryptocom.py +16 -0
- ccxt/abstract/cryptomus.py +20 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/derive.py +117 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/foxbit.py +26 -0
- ccxt/abstract/gate.py +19 -0
- ccxt/abstract/gateio.py +19 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hibachi.py +26 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +1 -0
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +10 -0
- ccxt/abstract/kucoinfutures.py +18 -0
- ccxt/abstract/lbank.py +2 -1
- ccxt/abstract/luno.py +1 -0
- ccxt/abstract/mexc.py +2 -0
- ccxt/abstract/modetrade.py +119 -0
- ccxt/abstract/myokx.py +349 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +25 -0
- ccxt/abstract/okxus.py +349 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/paradex.py +23 -0
- ccxt/abstract/phemex.py +2 -0
- ccxt/abstract/poloniex.py +36 -0
- ccxt/abstract/tradeogre.py +3 -1
- ccxt/abstract/upbit.py +51 -34
- ccxt/abstract/whitebit.py +16 -0
- ccxt/abstract/woo.py +64 -6
- ccxt/abstract/xt.py +10 -5
- ccxt/afratether.py +7 -7
- ccxt/alpaca.py +828 -51
- ccxt/apex.py +1875 -0
- ccxt/arzinja.py +7 -7
- ccxt/arzplus.py +9 -9
- ccxt/ascendex.py +501 -306
- ccxt/async_support/__init__.py +39 -35
- ccxt/async_support/abantether.py +8 -8
- ccxt/async_support/afratether.py +9 -9
- ccxt/async_support/alpaca.py +828 -51
- ccxt/async_support/apex.py +1875 -0
- ccxt/async_support/arzinja.py +10 -10
- ccxt/async_support/arzplus.py +12 -12
- ccxt/async_support/ascendex.py +502 -306
- ccxt/async_support/base/exchange.py +303 -89
- ccxt/async_support/base/ws/cache.py +9 -3
- ccxt/async_support/base/ws/client.py +173 -38
- ccxt/async_support/base/ws/future.py +25 -37
- ccxt/async_support/bequant.py +5 -3
- ccxt/async_support/bigone.py +279 -144
- ccxt/async_support/binance.py +2347 -1158
- ccxt/async_support/binancecoinm.py +9 -3
- ccxt/async_support/binanceus.py +17 -3
- ccxt/async_support/binanceusdm.py +9 -4
- ccxt/async_support/bingx.py +2962 -920
- ccxt/async_support/bit2c.py +147 -27
- ccxt/async_support/bitbank.py +151 -23
- ccxt/async_support/bitbns.py +104 -30
- ccxt/async_support/bitfinex.py +3291 -1113
- ccxt/async_support/bitflyer.py +202 -27
- ccxt/async_support/bitget.py +3683 -1538
- ccxt/async_support/bithumb.py +195 -38
- ccxt/async_support/bitimen.py +12 -12
- ccxt/async_support/bitir.py +38 -38
- ccxt/async_support/bitmart.py +1288 -350
- ccxt/async_support/bitmex.py +260 -75
- ccxt/async_support/bitopro.py +262 -62
- ccxt/async_support/bitpin.py +17 -16
- ccxt/async_support/bitrue.py +459 -290
- ccxt/async_support/bitso.py +199 -54
- ccxt/async_support/bitstamp.py +230 -96
- ccxt/async_support/bitteam.py +167 -25
- ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
- ccxt/async_support/bitvavo.py +213 -49
- ccxt/async_support/blockchaincom.py +160 -46
- ccxt/async_support/blofin.py +502 -120
- ccxt/async_support/btcalpha.py +169 -31
- ccxt/async_support/btcbox.py +292 -23
- ccxt/async_support/btcmarkets.py +211 -58
- ccxt/async_support/btcturk.py +161 -38
- ccxt/async_support/bybit.py +1775 -1030
- ccxt/async_support/cex.py +1440 -1303
- ccxt/async_support/coinbase.py +724 -212
- ccxt/async_support/coinbaseadvanced.py +2 -1
- ccxt/async_support/coinbaseexchange.py +388 -89
- ccxt/async_support/coinbaseinternational.py +412 -57
- ccxt/async_support/coincatch.py +177 -78
- ccxt/async_support/coincheck.py +135 -19
- ccxt/async_support/coinex.py +606 -232
- ccxt/async_support/coinmate.py +189 -63
- ccxt/async_support/coinmetro.py +195 -54
- ccxt/async_support/coinone.py +158 -51
- ccxt/async_support/coinsph.py +336 -61
- ccxt/async_support/coinspot.py +151 -52
- ccxt/async_support/cryptocom.py +661 -111
- ccxt/async_support/cryptomus.py +1137 -0
- ccxt/async_support/defx.py +2071 -0
- ccxt/async_support/delta.py +299 -99
- ccxt/async_support/deribit.py +348 -126
- ccxt/async_support/derive.py +2572 -0
- ccxt/async_support/digifinex.py +430 -214
- ccxt/async_support/ellipx.py +2029 -0
- ccxt/async_support/eterex.py +10 -10
- ccxt/async_support/excoino.py +31 -31
- ccxt/async_support/exir.py +14 -14
- ccxt/async_support/exmo.py +344 -131
- ccxt/async_support/exnovin.py +10 -10
- ccxt/async_support/farhadexchange.py +12 -12
- ccxt/async_support/fmfwio.py +2 -1
- ccxt/async_support/foxbit.py +1935 -0
- ccxt/async_support/gate.py +1351 -529
- ccxt/async_support/gateio.py +2 -1
- ccxt/async_support/gemini.py +144 -39
- ccxt/async_support/hashkey.py +152 -109
- ccxt/async_support/hibachi.py +2080 -0
- ccxt/async_support/hitbtc.py +395 -167
- ccxt/async_support/hitobit.py +12 -12
- ccxt/async_support/hollaex.py +307 -119
- ccxt/async_support/htx.py +851 -383
- ccxt/async_support/huobi.py +2 -1
- ccxt/async_support/hyperliquid.py +1848 -536
- ccxt/async_support/independentreserve.py +288 -15
- ccxt/async_support/indodax.py +190 -33
- ccxt/async_support/jibitex.py +12 -12
- ccxt/async_support/kraken.py +795 -351
- ccxt/async_support/krakenfutures.py +214 -62
- ccxt/async_support/kucoin.py +715 -396
- ccxt/async_support/kucoinfutures.py +652 -89
- ccxt/async_support/latoken.py +217 -113
- ccxt/async_support/lbank.py +425 -97
- ccxt/async_support/luno.py +382 -35
- ccxt/async_support/mercado.py +113 -6
- ccxt/async_support/mexc.py +874 -437
- ccxt/async_support/modetrade.py +2818 -0
- ccxt/async_support/myokx.py +54 -0
- ccxt/async_support/ndax.py +221 -64
- ccxt/async_support/nobitex.py +31 -37
- ccxt/async_support/novadax.py +190 -34
- ccxt/async_support/oceanex.py +217 -28
- ccxt/async_support/okcoin.py +253 -145
- ccxt/async_support/okexchange.py +11 -11
- ccxt/async_support/okx.py +1088 -351
- ccxt/async_support/okxus.py +54 -0
- ccxt/async_support/ompfinex.py +25 -24
- ccxt/async_support/onetrading.py +213 -392
- ccxt/async_support/oxfun.py +245 -166
- ccxt/async_support/p2b.py +151 -29
- ccxt/async_support/paradex.py +562 -49
- ccxt/async_support/paymium.py +82 -19
- ccxt/async_support/phemex.py +713 -172
- ccxt/async_support/poloniex.py +1602 -283
- ccxt/async_support/probit.py +224 -95
- ccxt/async_support/ramzinex.py +30 -27
- ccxt/async_support/sarmayex.py +9 -9
- ccxt/async_support/sarrafex.py +13 -13
- ccxt/async_support/tabdeal.py +14 -13
- ccxt/async_support/tetherland.py +9 -9
- ccxt/async_support/timex.py +210 -51
- ccxt/async_support/tokocrypto.py +167 -47
- ccxt/async_support/tradeogre.py +266 -31
- ccxt/async_support/twox.py +9 -9
- ccxt/async_support/ubitex.py +12 -12
- ccxt/async_support/upbit.py +568 -165
- ccxt/async_support/vertex.py +160 -32
- ccxt/async_support/wallex.py +12 -12
- ccxt/async_support/wavesexchange.py +165 -30
- ccxt/async_support/whitebit.py +975 -127
- ccxt/async_support/woo.py +1918 -1016
- ccxt/async_support/woofipro.py +433 -141
- ccxt/async_support/xt.py +649 -193
- ccxt/async_support/yobit.py +195 -70
- ccxt/async_support/zaif.py +91 -15
- ccxt/async_support/zonda.py +151 -36
- ccxt/base/decimal_to_precision.py +14 -10
- ccxt/base/errors.py +49 -18
- ccxt/base/exchange.py +1556 -450
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +114 -6
- ccxt/bequant.py +5 -3
- ccxt/bigone.py +279 -144
- ccxt/binance.py +2347 -1158
- ccxt/binancecoinm.py +9 -3
- ccxt/binanceus.py +17 -3
- ccxt/binanceusdm.py +9 -4
- ccxt/bingx.py +2962 -920
- ccxt/bit2c.py +147 -27
- ccxt/bitbank.py +151 -23
- ccxt/bitbns.py +104 -30
- ccxt/bitfinex.py +3290 -1113
- ccxt/bitflyer.py +202 -27
- ccxt/bitget.py +3683 -1538
- ccxt/bithumb.py +194 -38
- ccxt/bitimen.py +9 -9
- ccxt/bitir.py +35 -35
- ccxt/bitmart.py +1288 -350
- ccxt/bitmex.py +260 -75
- ccxt/bitopro.py +262 -62
- ccxt/bitpin.py +15 -14
- ccxt/bitrue.py +459 -290
- ccxt/bitso.py +199 -54
- ccxt/bitstamp.py +230 -96
- ccxt/bitteam.py +167 -25
- ccxt/{huobijp.py → bittrade.py} +158 -30
- ccxt/bitvavo.py +213 -49
- ccxt/blockchaincom.py +160 -46
- ccxt/blofin.py +502 -120
- ccxt/btcalpha.py +169 -31
- ccxt/btcbox.py +291 -23
- ccxt/btcmarkets.py +211 -58
- ccxt/btcturk.py +161 -38
- ccxt/bybit.py +1775 -1030
- ccxt/cex.py +1439 -1303
- ccxt/coinbase.py +724 -212
- ccxt/coinbaseadvanced.py +2 -1
- ccxt/coinbaseexchange.py +388 -89
- ccxt/coinbaseinternational.py +412 -57
- ccxt/coincatch.py +177 -78
- ccxt/coincheck.py +135 -19
- ccxt/coinex.py +606 -232
- ccxt/coinmate.py +189 -63
- ccxt/coinmetro.py +194 -54
- ccxt/coinone.py +158 -51
- ccxt/coinsph.py +336 -61
- ccxt/coinspot.py +151 -52
- ccxt/cryptocom.py +661 -111
- ccxt/cryptomus.py +1137 -0
- ccxt/defx.py +2070 -0
- ccxt/delta.py +299 -99
- ccxt/deribit.py +348 -126
- ccxt/derive.py +2571 -0
- ccxt/digifinex.py +430 -214
- ccxt/ellipx.py +2029 -0
- ccxt/eterex.py +7 -7
- ccxt/excoino.py +29 -29
- ccxt/exir.py +11 -11
- ccxt/exmo.py +343 -131
- ccxt/exnovin.py +8 -8
- ccxt/farhadexchange.py +10 -10
- ccxt/fmfwio.py +2 -1
- ccxt/foxbit.py +1935 -0
- ccxt/gate.py +1351 -529
- ccxt/gateio.py +2 -1
- ccxt/gemini.py +144 -39
- ccxt/hashkey.py +152 -109
- ccxt/hibachi.py +2079 -0
- ccxt/hitbtc.py +395 -167
- ccxt/hitobit.py +9 -9
- ccxt/hollaex.py +307 -119
- ccxt/htx.py +851 -383
- ccxt/huobi.py +2 -1
- ccxt/hyperliquid.py +1848 -536
- ccxt/independentreserve.py +287 -15
- ccxt/indodax.py +190 -33
- ccxt/jibitex.py +9 -9
- ccxt/kraken.py +794 -351
- ccxt/krakenfutures.py +214 -62
- ccxt/kucoin.py +715 -396
- ccxt/kucoinfutures.py +652 -89
- ccxt/latoken.py +217 -113
- ccxt/lbank.py +425 -97
- ccxt/luno.py +382 -35
- ccxt/mercado.py +113 -6
- ccxt/mexc.py +873 -437
- ccxt/modetrade.py +2818 -0
- ccxt/myokx.py +54 -0
- ccxt/ndax.py +221 -64
- ccxt/nobitex.py +29 -35
- ccxt/novadax.py +190 -34
- ccxt/oceanex.py +217 -28
- ccxt/okcoin.py +253 -145
- ccxt/okexchange.py +9 -9
- ccxt/okx.py +1088 -351
- ccxt/okxus.py +54 -0
- ccxt/ompfinex.py +22 -21
- ccxt/onetrading.py +213 -392
- ccxt/oxfun.py +245 -166
- ccxt/p2b.py +151 -29
- ccxt/paradex.py +562 -49
- ccxt/paymium.py +82 -19
- ccxt/phemex.py +712 -172
- ccxt/poloniex.py +1601 -283
- ccxt/pro/__init__.py +76 -17
- ccxt/pro/alpaca.py +21 -6
- ccxt/pro/apex.py +984 -0
- ccxt/pro/ascendex.py +58 -10
- ccxt/pro/bequant.py +6 -1
- ccxt/pro/binance.py +728 -156
- ccxt/pro/binancecoinm.py +6 -2
- ccxt/pro/binanceus.py +8 -4
- ccxt/pro/binanceusdm.py +7 -2
- ccxt/pro/bingx.py +333 -142
- ccxt/pro/bitfinex.py +727 -262
- ccxt/pro/bitget.py +570 -79
- ccxt/pro/bithumb.py +20 -6
- ccxt/pro/bitmart.py +216 -87
- ccxt/pro/bitmex.py +47 -9
- ccxt/pro/bitopro.py +26 -14
- ccxt/pro/bitrue.py +22 -22
- ccxt/pro/bitstamp.py +54 -21
- ccxt/pro/{huobijp.py → bittrade.py} +7 -6
- ccxt/pro/bitvavo.py +191 -67
- ccxt/pro/blockchaincom.py +21 -8
- ccxt/pro/blofin.py +9 -1
- ccxt/pro/bybit.py +632 -245
- ccxt/pro/cex.py +59 -24
- ccxt/pro/coinbase.py +102 -73
- ccxt/pro/coinbaseadvanced.py +2 -1
- ccxt/pro/coinbaseexchange.py +8 -8
- ccxt/pro/coinbaseinternational.py +181 -25
- ccxt/pro/coincatch.py +6 -7
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -665
- ccxt/pro/coinone.py +16 -9
- ccxt/pro/cryptocom.py +448 -45
- ccxt/pro/defx.py +831 -0
- ccxt/pro/deribit.py +150 -14
- ccxt/pro/derive.py +704 -0
- ccxt/pro/exmo.py +239 -6
- ccxt/pro/gate.py +623 -65
- ccxt/pro/gateio.py +2 -1
- ccxt/pro/gemini.py +27 -11
- ccxt/pro/hashkey.py +2 -2
- ccxt/pro/hitbtc.py +196 -91
- ccxt/pro/hollaex.py +23 -7
- ccxt/pro/htx.py +51 -14
- ccxt/pro/huobi.py +2 -1
- ccxt/pro/hyperliquid.py +591 -27
- ccxt/pro/independentreserve.py +9 -6
- ccxt/pro/kraken.py +640 -320
- ccxt/pro/krakenfutures.py +62 -35
- ccxt/pro/kucoin.py +267 -46
- ccxt/pro/kucoinfutures.py +165 -21
- ccxt/pro/lbank.py +102 -21
- ccxt/pro/luno.py +12 -8
- ccxt/pro/mexc.py +877 -111
- ccxt/pro/modetrade.py +1271 -0
- ccxt/pro/myokx.py +38 -0
- ccxt/pro/ndax.py +15 -2
- ccxt/pro/okcoin.py +23 -4
- ccxt/pro/okx.py +573 -98
- ccxt/pro/okxus.py +38 -0
- ccxt/pro/onetrading.py +30 -13
- ccxt/pro/oxfun.py +131 -27
- ccxt/pro/p2b.py +88 -22
- ccxt/pro/paradex.py +3 -3
- ccxt/pro/phemex.py +75 -21
- ccxt/pro/poloniex.py +124 -41
- ccxt/pro/probit.py +87 -80
- ccxt/pro/tradeogre.py +272 -0
- ccxt/pro/upbit.py +152 -12
- ccxt/pro/vertex.py +8 -3
- ccxt/pro/whitebit.py +58 -5
- ccxt/pro/woo.py +228 -37
- ccxt/pro/woofipro.py +106 -18
- ccxt/pro/xt.py +111 -5
- ccxt/probit.py +224 -95
- ccxt/protobuf/__init__.py +0 -0
- ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
- ccxt/protobuf/mexc/__init__.py +0 -0
- ccxt/ramzinex.py +28 -25
- ccxt/sarmayex.py +7 -7
- ccxt/sarrafex.py +10 -10
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/tabdeal.py +12 -11
- ccxt/test/tests_async.py +261 -57
- ccxt/test/tests_helpers.py +1 -3
- ccxt/test/tests_init.py +4 -3
- ccxt/test/tests_sync.py +261 -57
- ccxt/tetherland.py +7 -7
- ccxt/timex.py +210 -51
- ccxt/tokocrypto.py +167 -47
- ccxt/tradeogre.py +266 -31
- ccxt/twox.py +7 -7
- ccxt/ubitex.py +9 -9
- ccxt/upbit.py +568 -165
- ccxt/vertex.py +160 -32
- ccxt/wallex.py +9 -9
- ccxt/wavesexchange.py +165 -30
- ccxt/whitebit.py +975 -127
- ccxt/woo.py +1917 -1016
- ccxt/woofipro.py +432 -141
- ccxt/xt.py +649 -193
- ccxt/yobit.py +194 -70
- ccxt/zaif.py +91 -15
- ccxt/zonda.py +151 -36
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
- ccxt_ir-4.5.0.dist-info/RECORD +743 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
- ccxt/__test__.py +0 -7
- ccxt/abstract/ace.py +0 -15
- ccxt/abstract/bitbay.py +0 -53
- ccxt/abstract/bitcoincom.py +0 -115
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/bitpanda.py +0 -35
- ccxt/abstract/bl3p.py +0 -19
- ccxt/abstract/coinlist.py +0 -54
- ccxt/abstract/currencycom.py +0 -68
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/abstract/idex.py +0 -26
- ccxt/abstract/kuna.py +0 -182
- ccxt/abstract/lykke.py +0 -29
- ccxt/abstract/poloniexfutures.py +0 -48
- ccxt/abstract/wazirx.py +0 -30
- ccxt/ace.py +0 -1012
- ccxt/async_support/ace.py +0 -1012
- ccxt/async_support/base/ws/aiohttp_client.py +0 -125
- ccxt/async_support/base/ws/fast_client.py +0 -96
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitcoincom.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3552
- ccxt/async_support/bitpanda.py +0 -16
- ccxt/async_support/bl3p.py +0 -485
- ccxt/async_support/coinlist.py +0 -2243
- ccxt/async_support/currencycom.py +0 -1950
- ccxt/async_support/hitbtc3.py +0 -16
- ccxt/async_support/idex.py +0 -1766
- ccxt/async_support/kuna.py +0 -1841
- ccxt/async_support/lykke.py +0 -1270
- ccxt/async_support/poloniexfutures.py +0 -1717
- ccxt/async_support/wazirx.py +0 -1224
- ccxt/bitbay.py +0 -17
- ccxt/bitcoincom.py +0 -17
- ccxt/bitfinex2.py +0 -3552
- ccxt/bitpanda.py +0 -16
- ccxt/bl3p.py +0 -485
- ccxt/coinlist.py +0 -2243
- ccxt/currencycom.py +0 -1950
- ccxt/hitbtc3.py +0 -16
- ccxt/idex.py +0 -1766
- ccxt/kuna.py +0 -1841
- ccxt/lykke.py +0 -1270
- ccxt/poloniexfutures.py +0 -1717
- ccxt/pro/bitcoincom.py +0 -34
- ccxt/pro/bitfinex2.py +0 -1083
- ccxt/pro/bitpanda.py +0 -15
- ccxt/pro/currencycom.py +0 -536
- ccxt/pro/idex.py +0 -672
- ccxt/pro/poloniexfutures.py +0 -990
- ccxt/pro/wazirx.py +0 -749
- ccxt/test/base/__init__.py +0 -29
- 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 -109
- 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 -31
- 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_liquidation.py +0 -50
- 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 -193
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -33
- 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 -69
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -353
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -92
- 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/test/test_async.py +0 -1649
- ccxt/test/test_sync.py +0 -1648
- ccxt/wazirx.py +0 -1224
- ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/pro/bitvavo.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Balances, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees
|
|
9
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
|
|
10
10
|
from ccxt.async_support.base.ws.client import Client
|
|
11
11
|
from typing import List
|
|
12
12
|
from ccxt.base.errors import ExchangeError
|
|
@@ -16,7 +16,7 @@ from ccxt.base.errors import ArgumentsRequired
|
|
|
16
16
|
|
|
17
17
|
class bitvavo(ccxt.async_support.bitvavo):
|
|
18
18
|
|
|
19
|
-
def describe(self):
|
|
19
|
+
def describe(self) -> Any:
|
|
20
20
|
return self.deep_extend(super(bitvavo, self).describe(), {
|
|
21
21
|
'has': {
|
|
22
22
|
'ws': True,
|
|
@@ -25,6 +25,8 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
25
25
|
'watchOrderBook': True,
|
|
26
26
|
'watchTrades': True,
|
|
27
27
|
'watchTicker': True,
|
|
28
|
+
'watchTickers': True,
|
|
29
|
+
'watchBidsAsks': True,
|
|
28
30
|
'watchOHLCV': True,
|
|
29
31
|
'watchOrders': True,
|
|
30
32
|
'watchMyTrades': True,
|
|
@@ -85,15 +87,55 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
85
87
|
message = self.extend(request, params)
|
|
86
88
|
return await self.watch(url, messageHash, message, messageHash)
|
|
87
89
|
|
|
90
|
+
async def watch_public_multiple(self, methodName, channelName: str, symbols, params={}):
|
|
91
|
+
await self.load_markets()
|
|
92
|
+
symbols = self.market_symbols(symbols)
|
|
93
|
+
messageHashes = [methodName]
|
|
94
|
+
args = []
|
|
95
|
+
for i in range(0, len(symbols)):
|
|
96
|
+
market = self.market(symbols[i])
|
|
97
|
+
args.append(market['id'])
|
|
98
|
+
url = self.urls['api']['ws']
|
|
99
|
+
request: dict = {
|
|
100
|
+
'action': 'subscribe',
|
|
101
|
+
'channels': [
|
|
102
|
+
{
|
|
103
|
+
'name': channelName,
|
|
104
|
+
'markets': args,
|
|
105
|
+
},
|
|
106
|
+
],
|
|
107
|
+
}
|
|
108
|
+
message = self.extend(request, params)
|
|
109
|
+
return await self.watch_multiple(url, messageHashes, message, messageHashes)
|
|
110
|
+
|
|
88
111
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
89
112
|
"""
|
|
90
113
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
114
|
+
|
|
115
|
+
https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
|
|
116
|
+
|
|
91
117
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
92
118
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
93
119
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
94
120
|
"""
|
|
95
121
|
return await self.watch_public('ticker24h', symbol, params)
|
|
96
122
|
|
|
123
|
+
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
124
|
+
"""
|
|
125
|
+
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
126
|
+
|
|
127
|
+
https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
|
|
128
|
+
|
|
129
|
+
:param str[] [symbols]: unified symbol of the market to fetch the ticker for
|
|
130
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
131
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
132
|
+
"""
|
|
133
|
+
await self.load_markets()
|
|
134
|
+
symbols = self.market_symbols(symbols, None, False)
|
|
135
|
+
channel = 'ticker24h'
|
|
136
|
+
tickers = await self.watch_public_multiple(channel, channel, symbols, params)
|
|
137
|
+
return self.filter_by_array(tickers, 'symbol', symbols)
|
|
138
|
+
|
|
97
139
|
def handle_ticker(self, client: Client, message):
|
|
98
140
|
#
|
|
99
141
|
# {
|
|
@@ -116,8 +158,10 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
116
158
|
# ]
|
|
117
159
|
# }
|
|
118
160
|
#
|
|
161
|
+
self.handle_bid_ask(client, message)
|
|
119
162
|
event = self.safe_string(message, 'event')
|
|
120
163
|
tickers = self.safe_value(message, 'data', [])
|
|
164
|
+
result = []
|
|
121
165
|
for i in range(0, len(tickers)):
|
|
122
166
|
data = tickers[i]
|
|
123
167
|
marketId = self.safe_string(data, 'market')
|
|
@@ -126,8 +170,55 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
126
170
|
ticker = self.parse_ticker(data, market)
|
|
127
171
|
symbol = ticker['symbol']
|
|
128
172
|
self.tickers[symbol] = ticker
|
|
173
|
+
result.append(ticker)
|
|
129
174
|
client.resolve(ticker, messageHash)
|
|
130
|
-
|
|
175
|
+
client.resolve(result, event)
|
|
176
|
+
|
|
177
|
+
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
|
178
|
+
"""
|
|
179
|
+
watches best bid & ask for symbols
|
|
180
|
+
|
|
181
|
+
https://docs.bitvavo.com/#tag/Market-data-subscription-WebSocket/paths/~1subscribeTicker24h/post
|
|
182
|
+
|
|
183
|
+
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
184
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
185
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
186
|
+
"""
|
|
187
|
+
await self.load_markets()
|
|
188
|
+
symbols = self.market_symbols(symbols, None, False)
|
|
189
|
+
channel = 'ticker24h'
|
|
190
|
+
tickers = await self.watch_public_multiple('bidask', channel, symbols, params)
|
|
191
|
+
return self.filter_by_array(tickers, 'symbol', symbols)
|
|
192
|
+
|
|
193
|
+
def handle_bid_ask(self, client: Client, message):
|
|
194
|
+
event = 'bidask'
|
|
195
|
+
tickers = self.safe_value(message, 'data', [])
|
|
196
|
+
result = []
|
|
197
|
+
for i in range(0, len(tickers)):
|
|
198
|
+
data = tickers[i]
|
|
199
|
+
ticker = self.parse_ws_bid_ask(data)
|
|
200
|
+
symbol = ticker['symbol']
|
|
201
|
+
self.bidsasks[symbol] = ticker
|
|
202
|
+
result.append(ticker)
|
|
203
|
+
messageHash = event + ':' + symbol
|
|
204
|
+
client.resolve(ticker, messageHash)
|
|
205
|
+
client.resolve(result, event)
|
|
206
|
+
|
|
207
|
+
def parse_ws_bid_ask(self, ticker, market=None):
|
|
208
|
+
marketId = self.safe_string(ticker, 'market')
|
|
209
|
+
market = self.safe_market(marketId, None, '-')
|
|
210
|
+
symbol = self.safe_string(market, 'symbol')
|
|
211
|
+
timestamp = self.safe_integer(ticker, 'timestamp')
|
|
212
|
+
return self.safe_ticker({
|
|
213
|
+
'symbol': symbol,
|
|
214
|
+
'timestamp': timestamp,
|
|
215
|
+
'datetime': self.iso8601(timestamp),
|
|
216
|
+
'ask': self.safe_number(ticker, 'ask'),
|
|
217
|
+
'askVolume': self.safe_number(ticker, 'askSize'),
|
|
218
|
+
'bid': self.safe_number(ticker, 'bid'),
|
|
219
|
+
'bidVolume': self.safe_number(ticker, 'bidSize'),
|
|
220
|
+
'info': ticker,
|
|
221
|
+
}, market)
|
|
131
222
|
|
|
132
223
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
133
224
|
"""
|
|
@@ -215,10 +306,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
215
306
|
# ]
|
|
216
307
|
# }
|
|
217
308
|
#
|
|
218
|
-
action = self.safe_string(message, 'action')
|
|
219
309
|
response = self.safe_value(message, 'response')
|
|
220
310
|
ohlcv = self.parse_ohlcvs(response, None, None, None)
|
|
221
|
-
messageHash = self.
|
|
311
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
222
312
|
client.resolve(ohlcv, messageHash)
|
|
223
313
|
|
|
224
314
|
def handle_ohlcv(self, client: Client, message):
|
|
@@ -476,7 +566,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
476
566
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
477
567
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
478
568
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
479
|
-
:returns dict[]: a list of
|
|
569
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
480
570
|
"""
|
|
481
571
|
if symbol is None:
|
|
482
572
|
raise ArgumentsRequired(self.id + ' watchMyTrades() requires a symbol argument')
|
|
@@ -505,12 +595,14 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
505
595
|
async def create_order_ws(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
|
|
506
596
|
"""
|
|
507
597
|
create a trade order
|
|
508
|
-
|
|
598
|
+
|
|
599
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1order/post
|
|
600
|
+
|
|
509
601
|
:param str symbol: unified symbol of the market to create an order in
|
|
510
602
|
:param str type: 'market' or 'limit'
|
|
511
603
|
:param str side: 'buy' or 'sell'
|
|
512
604
|
:param float amount: how much of currency you want to trade in units of base currency
|
|
513
|
-
:param float price: the price at which the order is to be
|
|
605
|
+
:param float price: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
514
606
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
|
515
607
|
:param str [params.timeInForce]: "GTC", "IOC", or "PO"
|
|
516
608
|
:param float [params.stopPrice]: The price at which a trigger order is triggered at
|
|
@@ -533,13 +625,15 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
533
625
|
async def edit_order_ws(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}) -> Order:
|
|
534
626
|
"""
|
|
535
627
|
edit a trade order
|
|
536
|
-
|
|
628
|
+
|
|
629
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1order/put
|
|
630
|
+
|
|
537
631
|
:param str id: cancel order id
|
|
538
632
|
:param str symbol: unified symbol of the market to create an order in
|
|
539
633
|
:param str type: 'market' or 'limit'
|
|
540
634
|
:param str side: 'buy' or 'sell'
|
|
541
635
|
:param float [amount]: how much of currency you want to trade in units of base currency
|
|
542
|
-
:param float [price]: the price at which the order is to be
|
|
636
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
543
637
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
|
544
638
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
545
639
|
"""
|
|
@@ -550,7 +644,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
550
644
|
|
|
551
645
|
async def cancel_order_ws(self, id: str, symbol: Str = None, params={}):
|
|
552
646
|
"""
|
|
553
|
-
|
|
647
|
+
|
|
648
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1order/delete
|
|
649
|
+
|
|
554
650
|
cancels an open order
|
|
555
651
|
:param str id: order id
|
|
556
652
|
:param str symbol: unified symbol of the market the order was made in
|
|
@@ -564,7 +660,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
564
660
|
|
|
565
661
|
async def cancel_all_orders_ws(self, symbol: Str = None, params={}):
|
|
566
662
|
"""
|
|
567
|
-
|
|
663
|
+
|
|
664
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1orders/delete
|
|
665
|
+
|
|
568
666
|
cancel all open orders
|
|
569
667
|
:param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
|
|
570
668
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
|
@@ -588,20 +686,24 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
588
686
|
# }]
|
|
589
687
|
# }
|
|
590
688
|
#
|
|
591
|
-
action = self.safe_string(message, 'action')
|
|
592
|
-
response = self.
|
|
593
|
-
firstRawOrder = self.safe_value(response, 0, {})
|
|
594
|
-
marketId = self.safe_string(firstRawOrder, 'market')
|
|
689
|
+
# action = self.safe_string(message, 'action')
|
|
690
|
+
response = self.safe_list(message, 'response')
|
|
691
|
+
# firstRawOrder = self.safe_value(response, 0, {})
|
|
692
|
+
# marketId = self.safe_string(firstRawOrder, 'market')
|
|
595
693
|
orders = self.parse_orders(response)
|
|
596
|
-
messageHash = self.build_message_hash(action, {'market': marketId})
|
|
597
|
-
client.resolve(orders, messageHash)
|
|
598
|
-
messageHash = self.build_message_hash(action, message)
|
|
694
|
+
# messageHash = self.build_message_hash(action, {'market': marketId})
|
|
695
|
+
# client.resolve(orders, messageHash)
|
|
696
|
+
# messageHash = self.build_message_hash(action, message)
|
|
697
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
599
698
|
client.resolve(orders, messageHash)
|
|
600
699
|
|
|
601
700
|
async def fetch_order_ws(self, id: str, symbol: Str = None, params={}) -> Order:
|
|
602
701
|
"""
|
|
603
|
-
|
|
702
|
+
|
|
703
|
+
https://docs.bitvavo.com/#tag/General/paths/~1assets/get
|
|
704
|
+
|
|
604
705
|
fetches information on an order made by the user
|
|
706
|
+
:param str id: the order id
|
|
605
707
|
:param str symbol: unified symbol of the market the order was made in
|
|
606
708
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
|
607
709
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
@@ -619,7 +721,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
619
721
|
|
|
620
722
|
async def fetch_orders_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
621
723
|
"""
|
|
622
|
-
|
|
724
|
+
|
|
725
|
+
https://docs.bitvavo.com/#tag/Orders/paths/~1orders/get
|
|
726
|
+
|
|
623
727
|
fetches information on multiple orders made by the user
|
|
624
728
|
:param str symbol: unified market symbol of the market orders were made in
|
|
625
729
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
@@ -635,12 +739,19 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
635
739
|
orders = await self.watch_request('privateGetOrders', request)
|
|
636
740
|
return self.filter_by_symbol_since_limit(orders, symbol, since, limit)
|
|
637
741
|
|
|
742
|
+
def request_id(self):
|
|
743
|
+
ts = str(self.milliseconds())
|
|
744
|
+
randomNumber = self.rand_number(4)
|
|
745
|
+
randomPart = str(randomNumber)
|
|
746
|
+
return int(ts + randomPart)
|
|
747
|
+
|
|
638
748
|
async def watch_request(self, action, request):
|
|
749
|
+
messageHash = self.request_id()
|
|
750
|
+
messageHashStr = str(messageHash)
|
|
639
751
|
request['action'] = action
|
|
640
|
-
|
|
641
|
-
self.check_message_hash_does_not_exist(messageHash)
|
|
752
|
+
request['requestId'] = messageHash
|
|
642
753
|
url = self.urls['api']['ws']
|
|
643
|
-
return await self.watch(url,
|
|
754
|
+
return await self.watch(url, messageHashStr, request, messageHashStr)
|
|
644
755
|
|
|
645
756
|
async def fetch_open_orders_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
646
757
|
"""
|
|
@@ -665,7 +776,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
665
776
|
|
|
666
777
|
async def fetch_my_trades_ws(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
667
778
|
"""
|
|
668
|
-
|
|
779
|
+
|
|
780
|
+
https://docs.bitvavo.com/#tag/Trades
|
|
781
|
+
|
|
669
782
|
fetch all trades made by the user
|
|
670
783
|
:param str symbol: unified market symbol
|
|
671
784
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
@@ -703,12 +816,12 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
703
816
|
# }
|
|
704
817
|
#
|
|
705
818
|
#
|
|
706
|
-
action = self.safe_string(message, 'action')
|
|
707
|
-
response = self.
|
|
708
|
-
|
|
709
|
-
marketId = self.safe_string(firstRawTrade, 'market')
|
|
819
|
+
# action = self.safe_string(message, 'action')
|
|
820
|
+
response = self.safe_list(message, 'response')
|
|
821
|
+
# marketId = self.safe_string(firstRawTrade, 'market')
|
|
710
822
|
trades = self.parse_trades(response, None, None, None)
|
|
711
|
-
messageHash = self.build_message_hash(action, {'market': marketId})
|
|
823
|
+
# messageHash = self.build_message_hash(action, {'market': marketId})
|
|
824
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
712
825
|
client.resolve(trades, messageHash)
|
|
713
826
|
|
|
714
827
|
async def withdraw_ws(self, code: str, amount, address, tag=None, params={}):
|
|
@@ -739,15 +852,18 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
739
852
|
# }
|
|
740
853
|
# }
|
|
741
854
|
#
|
|
742
|
-
action = self.safe_string(message, 'action')
|
|
743
|
-
messageHash = self.build_message_hash(action, message)
|
|
855
|
+
# action = self.safe_string(message, 'action')
|
|
856
|
+
# messageHash = self.build_message_hash(action, message)
|
|
857
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
744
858
|
response = self.safe_value(message, 'response')
|
|
745
859
|
withdraw = self.parse_transaction(response)
|
|
746
860
|
client.resolve(withdraw, messageHash)
|
|
747
861
|
|
|
748
862
|
async def fetch_withdrawals_ws(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
749
863
|
"""
|
|
750
|
-
|
|
864
|
+
|
|
865
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1withdrawalHistory/get
|
|
866
|
+
|
|
751
867
|
fetch all withdrawals made from an account
|
|
752
868
|
:param str code: unified currency code
|
|
753
869
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
|
@@ -777,15 +893,18 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
777
893
|
# ]
|
|
778
894
|
# }
|
|
779
895
|
#
|
|
780
|
-
action = self.safe_string(message, 'action')
|
|
781
|
-
messageHash = self.build_message_hash(action, message)
|
|
782
|
-
response = self.
|
|
896
|
+
# action = self.safe_string(message, 'action')
|
|
897
|
+
# messageHash = self.build_message_hash(action, message)
|
|
898
|
+
response = self.safe_list(message, 'response')
|
|
899
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
783
900
|
withdrawals = self.parse_transactions(response, None, None, None, {'type': 'withdrawal'})
|
|
784
901
|
client.resolve(withdrawals, messageHash)
|
|
785
902
|
|
|
786
903
|
async def fetch_ohlcv_ws(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
787
904
|
"""
|
|
788
|
-
|
|
905
|
+
|
|
906
|
+
https://docs.bitvavo.com/#tag/Market-Data/paths/~1{market}~1candles/get
|
|
907
|
+
|
|
789
908
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
790
909
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
791
910
|
:param str timeframe: the length of time each candle represents
|
|
@@ -802,7 +921,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
802
921
|
|
|
803
922
|
async def fetch_deposits_ws(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
804
923
|
"""
|
|
805
|
-
|
|
924
|
+
|
|
925
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1depositHistory/get
|
|
926
|
+
|
|
806
927
|
fetch all deposits made to an account
|
|
807
928
|
:param str code: unified currency code
|
|
808
929
|
:param int [since]: the earliest time in ms to fetch deposits for
|
|
@@ -832,15 +953,16 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
832
953
|
# ]
|
|
833
954
|
# }
|
|
834
955
|
#
|
|
835
|
-
action = self.safe_string(message, 'action')
|
|
836
|
-
messageHash = self.build_message_hash(action, message)
|
|
837
956
|
response = self.safe_value(message, 'response')
|
|
838
957
|
deposits = self.parse_transactions(response, None, None, None, {'type': 'deposit'})
|
|
958
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
839
959
|
client.resolve(deposits, messageHash)
|
|
840
960
|
|
|
841
961
|
async def fetch_trading_fees_ws(self, params={}) -> TradingFees:
|
|
842
962
|
"""
|
|
843
|
-
|
|
963
|
+
|
|
964
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1account/get
|
|
965
|
+
|
|
844
966
|
fetch the trading fees for multiple markets
|
|
845
967
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
|
846
968
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
|
@@ -851,7 +973,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
851
973
|
|
|
852
974
|
async def fetch_markets_ws(self, params={}):
|
|
853
975
|
"""
|
|
854
|
-
|
|
976
|
+
|
|
977
|
+
https://docs.bitvavo.com/#tag/General/paths/~1markets/get
|
|
978
|
+
|
|
855
979
|
retrieves data on all markets for bitvavo
|
|
856
980
|
:param dict [params]: extra parameters specific to the exchange api endpoint
|
|
857
981
|
:returns dict[]: an array of objects representing market data
|
|
@@ -860,7 +984,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
860
984
|
|
|
861
985
|
async def fetch_currencies_ws(self, params={}):
|
|
862
986
|
"""
|
|
863
|
-
|
|
987
|
+
|
|
988
|
+
https://docs.bitvavo.com/#tag/General/paths/~1assets/get
|
|
989
|
+
|
|
864
990
|
fetches all available currencies on an exchange
|
|
865
991
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
|
866
992
|
:returns dict: an associative dictionary of currencies
|
|
@@ -889,10 +1015,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
889
1015
|
# ]
|
|
890
1016
|
# }
|
|
891
1017
|
#
|
|
892
|
-
|
|
893
|
-
messageHash = self.build_message_hash(action, message)
|
|
1018
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
894
1019
|
response = self.safe_value(message, 'response')
|
|
895
|
-
currencies = self.
|
|
1020
|
+
currencies = self.parse_currencies(response)
|
|
896
1021
|
client.resolve(currencies, messageHash)
|
|
897
1022
|
|
|
898
1023
|
def handle_trading_fees(self, client, message):
|
|
@@ -908,15 +1033,16 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
908
1033
|
# }
|
|
909
1034
|
# }
|
|
910
1035
|
#
|
|
911
|
-
|
|
912
|
-
messageHash = self.build_message_hash(action, message)
|
|
1036
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
913
1037
|
response = self.safe_value(message, 'response')
|
|
914
1038
|
fees = self.parse_trading_fees(response)
|
|
915
1039
|
client.resolve(fees, messageHash)
|
|
916
1040
|
|
|
917
1041
|
async def fetch_balance_ws(self, params={}) -> Balances:
|
|
918
1042
|
"""
|
|
919
|
-
|
|
1043
|
+
|
|
1044
|
+
https://docs.bitvavo.com/#tag/Account/paths/~1balance/get
|
|
1045
|
+
|
|
920
1046
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
|
921
1047
|
:param dict [params]: extra parameters specific to the bitvavo api endpoint
|
|
922
1048
|
:returns dict: a `balance structure <https://docs.ccxt.com/en/latest/manual.html?#balance-structure>`
|
|
@@ -938,8 +1064,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
938
1064
|
# ]
|
|
939
1065
|
# }
|
|
940
1066
|
#
|
|
941
|
-
|
|
942
|
-
messageHash = self.build_message_hash(action, message)
|
|
1067
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
943
1068
|
response = self.safe_value(message, 'response', [])
|
|
944
1069
|
balance = self.parse_balance(response)
|
|
945
1070
|
client.resolve(balance, messageHash)
|
|
@@ -973,10 +1098,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
973
1098
|
# }
|
|
974
1099
|
# }
|
|
975
1100
|
#
|
|
976
|
-
action = self.safe_string(message, 'action')
|
|
977
1101
|
response = self.safe_value(message, 'response', {})
|
|
978
1102
|
order = self.parse_order(response)
|
|
979
|
-
messageHash = self.
|
|
1103
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
980
1104
|
client.resolve(order, messageHash)
|
|
981
1105
|
|
|
982
1106
|
def handle_markets(self, client: Client, message):
|
|
@@ -999,10 +1123,9 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
999
1123
|
# ]
|
|
1000
1124
|
# }
|
|
1001
1125
|
#
|
|
1002
|
-
action = self.safe_string(message, 'action')
|
|
1003
1126
|
response = self.safe_value(message, 'response', {})
|
|
1004
1127
|
markets = self.parse_markets(response)
|
|
1005
|
-
messageHash = self.
|
|
1128
|
+
messageHash = self.safe_string(message, 'requestId')
|
|
1006
1129
|
client.resolve(markets, messageHash)
|
|
1007
1130
|
|
|
1008
1131
|
def build_message_hash(self, action, params={}):
|
|
@@ -1019,15 +1142,6 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
1019
1142
|
messageHash = method(action, params)
|
|
1020
1143
|
return messageHash
|
|
1021
1144
|
|
|
1022
|
-
def check_message_hash_does_not_exist(self, messageHash):
|
|
1023
|
-
supressMultipleWsRequestsError = self.safe_bool(self.options, 'supressMultipleWsRequestsError', False)
|
|
1024
|
-
if not supressMultipleWsRequestsError:
|
|
1025
|
-
client = self.safe_value(self.clients, self.urls['api']['ws'])
|
|
1026
|
-
if client is not None:
|
|
1027
|
-
future = self.safe_value(client.futures, messageHash)
|
|
1028
|
-
if future is not None:
|
|
1029
|
-
raise ExchangeError(self.id + ' a similar request with messageHash ' + messageHash + ' is already pending, you must wait for a response, or turn off self error by setting supressMultipleWsRequestsError in the options to True')
|
|
1030
|
-
|
|
1031
1145
|
def action_and_market_message_hash(self, action, params={}):
|
|
1032
1146
|
symbol = self.safe_string(params, 'market', '')
|
|
1033
1147
|
return action + symbol
|
|
@@ -1163,7 +1277,7 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
1163
1277
|
if messageHash in client.subscriptions:
|
|
1164
1278
|
del client.subscriptions[messageHash]
|
|
1165
1279
|
|
|
1166
|
-
def handle_error_message(self, client: Client, message):
|
|
1280
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1167
1281
|
#
|
|
1168
1282
|
# {
|
|
1169
1283
|
# action: 'privateCreateOrder',
|
|
@@ -1171,19 +1285,29 @@ class bitvavo(ccxt.async_support.bitvavo):
|
|
|
1171
1285
|
# errorCode: 217,
|
|
1172
1286
|
# error: 'Minimum order size in quote currency is 5 EUR or 0.001 BTC.'
|
|
1173
1287
|
# }
|
|
1288
|
+
# {
|
|
1289
|
+
# action: 'privateCreateOrder',
|
|
1290
|
+
# requestId: '17317539426571916',
|
|
1291
|
+
# market: 'USDT-EUR',
|
|
1292
|
+
# errorCode: 216,
|
|
1293
|
+
# error: 'You do not have sufficient balance to complete self operation.'
|
|
1294
|
+
# }
|
|
1174
1295
|
#
|
|
1175
1296
|
error = self.safe_string(message, 'error')
|
|
1176
1297
|
code = self.safe_integer(error, 'errorCode')
|
|
1177
1298
|
action = self.safe_string(message, 'action')
|
|
1178
|
-
|
|
1299
|
+
buildMessage = self.build_message_hash(action, message)
|
|
1300
|
+
messageHash = self.safe_string(message, 'requestId', buildMessage)
|
|
1179
1301
|
rejected = False
|
|
1180
1302
|
try:
|
|
1181
|
-
self.handle_errors(code, error, client.url,
|
|
1303
|
+
self.handle_errors(code, error, client.url, '', {}, error, message, {}, {})
|
|
1182
1304
|
except Exception as e:
|
|
1183
1305
|
rejected = True
|
|
1184
1306
|
client.reject(e, messageHash)
|
|
1185
1307
|
if not rejected:
|
|
1186
1308
|
client.reject(message, messageHash)
|
|
1309
|
+
return True
|
|
1310
|
+
return None
|
|
1187
1311
|
|
|
1188
1312
|
def handle_message(self, client: Client, message):
|
|
1189
1313
|
#
|
ccxt/pro/blockchaincom.py
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
|
|
8
|
-
from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Ticker, Trade
|
|
8
|
+
from ccxt.base.types import Any, Balances, Int, Order, OrderBook, Str, Ticker, Trade
|
|
9
9
|
from ccxt.async_support.base.ws.client import Client
|
|
10
10
|
from typing import List
|
|
11
11
|
from ccxt.base.errors import ExchangeError
|
|
@@ -15,7 +15,7 @@ from ccxt.base.errors import NotSupported
|
|
|
15
15
|
|
|
16
16
|
class blockchaincom(ccxt.async_support.blockchaincom):
|
|
17
17
|
|
|
18
|
-
def describe(self):
|
|
18
|
+
def describe(self) -> Any:
|
|
19
19
|
return self.deep_extend(super(blockchaincom, self).describe(), {
|
|
20
20
|
'has': {
|
|
21
21
|
'ws': True,
|
|
@@ -23,6 +23,7 @@ class blockchaincom(ccxt.async_support.blockchaincom):
|
|
|
23
23
|
'watchTicker': True,
|
|
24
24
|
'watchTickers': False,
|
|
25
25
|
'watchTrades': True,
|
|
26
|
+
'watchTradesForSymbols': False,
|
|
26
27
|
'watchMyTrades': False,
|
|
27
28
|
'watchOrders': True,
|
|
28
29
|
'watchOrderBook': True,
|
|
@@ -60,7 +61,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
|
|
|
60
61
|
async def watch_balance(self, params={}) -> Balances:
|
|
61
62
|
"""
|
|
62
63
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
63
|
-
|
|
64
|
+
|
|
65
|
+
https://exchange.blockchain.com/api/#balances
|
|
66
|
+
|
|
64
67
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
65
68
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
66
69
|
"""
|
|
@@ -124,7 +127,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
|
|
|
124
127
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
125
128
|
"""
|
|
126
129
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market.
|
|
127
|
-
|
|
130
|
+
|
|
131
|
+
https://exchange.blockchain.com/api/#prices
|
|
132
|
+
|
|
128
133
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
129
134
|
:param str timeframe: the length of time each candle represents. Allows '1m', '5m', '15m', '1h', '6h' '1d'. Can only watch one timeframe per symbol.
|
|
130
135
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
@@ -196,7 +201,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
|
|
|
196
201
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
197
202
|
"""
|
|
198
203
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
199
|
-
|
|
204
|
+
|
|
205
|
+
https://exchange.blockchain.com/api/#ticker
|
|
206
|
+
|
|
200
207
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
201
208
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
202
209
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -298,7 +305,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
|
|
|
298
305
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
299
306
|
"""
|
|
300
307
|
get the list of most recent trades for a particular symbol
|
|
301
|
-
|
|
308
|
+
|
|
309
|
+
https://exchange.blockchain.com/api/#trades
|
|
310
|
+
|
|
302
311
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
303
312
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
304
313
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -393,7 +402,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
|
|
|
393
402
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
394
403
|
"""
|
|
395
404
|
watches information on multiple orders made by the user
|
|
396
|
-
|
|
405
|
+
|
|
406
|
+
https://exchange.blockchain.com/api/#mass-order-status-request-ordermassstatusrequest
|
|
407
|
+
|
|
397
408
|
:param str symbol: unified market symbol of the market orders were made in
|
|
398
409
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
399
410
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -596,7 +607,9 @@ class blockchaincom(ccxt.async_support.blockchaincom):
|
|
|
596
607
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
597
608
|
"""
|
|
598
609
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
599
|
-
|
|
610
|
+
|
|
611
|
+
https://exchange.blockchain.com/api/#l2-order-book
|
|
612
|
+
|
|
600
613
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
601
614
|
:param int [limit]: the maximum amount of order book entries to return
|
|
602
615
|
:param dictConstructor [params]: extra parameters specific to the exchange API endpoint
|
ccxt/pro/blofin.py
CHANGED
|
@@ -16,7 +16,7 @@ from ccxt.base.errors import NotSupported
|
|
|
16
16
|
|
|
17
17
|
class blofin(ccxt.async_support.blofin):
|
|
18
18
|
|
|
19
|
-
def describe(self):
|
|
19
|
+
def describe(self) -> Any:
|
|
20
20
|
return self.deep_extend(super(blofin, self).describe(), {
|
|
21
21
|
'has': {
|
|
22
22
|
'ws': True,
|
|
@@ -42,6 +42,14 @@ class blofin(ccxt.async_support.blofin):
|
|
|
42
42
|
},
|
|
43
43
|
},
|
|
44
44
|
},
|
|
45
|
+
'test': {
|
|
46
|
+
'ws': {
|
|
47
|
+
'swap': {
|
|
48
|
+
'public': 'wss://demo-trading-openapi.blofin.com/ws/public',
|
|
49
|
+
'private': 'wss://demo-trading-openapi.blofin.com/ws/private',
|
|
50
|
+
},
|
|
51
|
+
},
|
|
52
|
+
},
|
|
45
53
|
},
|
|
46
54
|
'options': {
|
|
47
55
|
'defaultType': 'swap',
|