ccxt-ir 4.3.46.0.2__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 +9 -9
- 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 +10 -10
- 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.2.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.2.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
- 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.2.dist-info/RECORD +0 -772
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/pro/woo.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Balances, Int, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
9
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
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.precise import Precise
|
|
|
16
16
|
|
|
17
17
|
class woo(ccxt.async_support.woo):
|
|
18
18
|
|
|
19
|
-
def describe(self):
|
|
19
|
+
def describe(self) -> Any:
|
|
20
20
|
return self.deep_extend(super(woo, self).describe(), {
|
|
21
21
|
'has': {
|
|
22
22
|
'ws': True,
|
|
@@ -27,20 +27,22 @@ class woo(ccxt.async_support.woo):
|
|
|
27
27
|
'watchOrders': True,
|
|
28
28
|
'watchTicker': True,
|
|
29
29
|
'watchTickers': True,
|
|
30
|
+
'watchBidsAsks': True,
|
|
30
31
|
'watchTrades': True,
|
|
32
|
+
'watchTradesForSymbols': False,
|
|
31
33
|
'watchPositions': True,
|
|
32
34
|
},
|
|
33
35
|
'urls': {
|
|
34
36
|
'api': {
|
|
35
37
|
'ws': {
|
|
36
|
-
'public': 'wss://wss.
|
|
37
|
-
'private': 'wss://wss.
|
|
38
|
+
'public': 'wss://wss.woox.io/ws/stream',
|
|
39
|
+
'private': 'wss://wss.woox.io/v2/ws/private/stream',
|
|
38
40
|
},
|
|
39
41
|
},
|
|
40
42
|
'test': {
|
|
41
43
|
'ws': {
|
|
42
|
-
'public': 'wss://wss.staging.
|
|
43
|
-
'private': 'wss://wss.staging.
|
|
44
|
+
'public': 'wss://wss.staging.woox.io/ws/stream',
|
|
45
|
+
'private': 'wss://wss.staging.woox.io/v2/ws/private/stream',
|
|
44
46
|
},
|
|
45
47
|
},
|
|
46
48
|
},
|
|
@@ -79,7 +81,8 @@ class woo(ccxt.async_support.woo):
|
|
|
79
81
|
return newValue
|
|
80
82
|
|
|
81
83
|
async def watch_public(self, messageHash, message):
|
|
82
|
-
|
|
84
|
+
urlUid = '/' + self.uid if (self.uid) else ''
|
|
85
|
+
url = self.urls['api']['ws']['public'] + urlUid
|
|
83
86
|
requestId = self.request_id(url)
|
|
84
87
|
subscribe: dict = {
|
|
85
88
|
'id': requestId,
|
|
@@ -89,32 +92,50 @@ class woo(ccxt.async_support.woo):
|
|
|
89
92
|
|
|
90
93
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
91
94
|
"""
|
|
92
|
-
|
|
95
|
+
|
|
96
|
+
https://docs.woox.io/#orderbookupdate
|
|
97
|
+
https://docs.woox.io/#orderbook
|
|
98
|
+
|
|
93
99
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
94
100
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
95
101
|
:param int [limit]: the maximum amount of order book entries to return.
|
|
96
102
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
103
|
+
:param str [params.method]: either(default) 'orderbook' or 'orderbookupdate', default is 'orderbook'
|
|
97
104
|
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
|
98
105
|
"""
|
|
99
106
|
await self.load_markets()
|
|
100
|
-
|
|
107
|
+
method = None
|
|
108
|
+
method, params = self.handle_option_and_params(params, 'watchOrderBook', 'method', 'orderbook')
|
|
101
109
|
market = self.market(symbol)
|
|
102
|
-
topic = market['id'] + '@' +
|
|
110
|
+
topic = market['id'] + '@' + method
|
|
111
|
+
urlUid = '/' + self.uid if (self.uid) else ''
|
|
112
|
+
url = self.urls['api']['ws']['public'] + urlUid
|
|
113
|
+
requestId = self.request_id(url)
|
|
103
114
|
request: dict = {
|
|
104
115
|
'event': 'subscribe',
|
|
105
116
|
'topic': topic,
|
|
117
|
+
'id': requestId,
|
|
106
118
|
}
|
|
107
|
-
|
|
108
|
-
|
|
119
|
+
subscription: dict = {
|
|
120
|
+
'id': str(requestId),
|
|
121
|
+
'name': method,
|
|
122
|
+
'symbol': symbol,
|
|
123
|
+
'limit': limit,
|
|
124
|
+
'params': params,
|
|
125
|
+
}
|
|
126
|
+
if method == 'orderbookupdate':
|
|
127
|
+
subscription['method'] = self.handle_order_book_subscription
|
|
128
|
+
orderbook = await self.watch(url, topic, self.extend(request, params), topic, subscription)
|
|
109
129
|
return orderbook.limit()
|
|
110
130
|
|
|
111
131
|
def handle_order_book(self, client: Client, message):
|
|
112
132
|
#
|
|
113
133
|
# {
|
|
114
|
-
# "topic": "PERP_BTC_USDT@
|
|
115
|
-
# "ts":
|
|
134
|
+
# "topic": "PERP_BTC_USDT@orderbookupdate",
|
|
135
|
+
# "ts": 1722500373999,
|
|
116
136
|
# "data": {
|
|
117
137
|
# "symbol": "PERP_BTC_USDT",
|
|
138
|
+
# "prevTs": 1722500373799,
|
|
118
139
|
# "bids": [
|
|
119
140
|
# [
|
|
120
141
|
# 0.30891,
|
|
@@ -135,13 +156,89 @@ class woo(ccxt.async_support.woo):
|
|
|
135
156
|
market = self.safe_market(marketId)
|
|
136
157
|
symbol = market['symbol']
|
|
137
158
|
topic = self.safe_string(message, 'topic')
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
159
|
+
method = self.safe_string(topic.split('@'), 1)
|
|
160
|
+
if method == 'orderbookupdate':
|
|
161
|
+
if not (symbol in self.orderbooks):
|
|
162
|
+
return
|
|
163
|
+
orderbook = self.orderbooks[symbol]
|
|
164
|
+
timestamp = self.safe_integer(orderbook, 'timestamp')
|
|
165
|
+
if timestamp is None:
|
|
166
|
+
orderbook.cache.append(message)
|
|
167
|
+
else:
|
|
168
|
+
try:
|
|
169
|
+
ts = self.safe_integer(message, 'ts')
|
|
170
|
+
if ts > timestamp:
|
|
171
|
+
self.handle_order_book_message(client, message, orderbook)
|
|
172
|
+
client.resolve(orderbook, topic)
|
|
173
|
+
except Exception as e:
|
|
174
|
+
del self.orderbooks[symbol]
|
|
175
|
+
del client.subscriptions[topic]
|
|
176
|
+
client.reject(e, topic)
|
|
177
|
+
else:
|
|
178
|
+
if not (symbol in self.orderbooks):
|
|
179
|
+
defaultLimit = self.safe_integer(self.options, 'watchOrderBookLimit', 1000)
|
|
180
|
+
subscription = client.subscriptions[topic]
|
|
181
|
+
limit = self.safe_integer(subscription, 'limit', defaultLimit)
|
|
182
|
+
self.orderbooks[symbol] = self.order_book({}, limit)
|
|
183
|
+
orderbook = self.orderbooks[symbol]
|
|
184
|
+
timestamp = self.safe_integer(message, 'ts')
|
|
185
|
+
snapshot = self.parse_order_book(data, symbol, timestamp, 'bids', 'asks')
|
|
186
|
+
orderbook.reset(snapshot)
|
|
187
|
+
client.resolve(orderbook, topic)
|
|
188
|
+
|
|
189
|
+
def handle_order_book_subscription(self, client: Client, message, subscription):
|
|
190
|
+
defaultLimit = self.safe_integer(self.options, 'watchOrderBookLimit', 1000)
|
|
191
|
+
limit = self.safe_integer(subscription, 'limit', defaultLimit)
|
|
192
|
+
symbol = self.safe_string(subscription, 'symbol') # watchOrderBook
|
|
193
|
+
if symbol in self.orderbooks:
|
|
194
|
+
del self.orderbooks[symbol]
|
|
195
|
+
self.orderbooks[symbol] = self.order_book({}, limit)
|
|
196
|
+
self.spawn(self.fetch_order_book_snapshot, client, message, subscription)
|
|
197
|
+
|
|
198
|
+
async def fetch_order_book_snapshot(self, client, message, subscription):
|
|
199
|
+
symbol = self.safe_string(subscription, 'symbol')
|
|
200
|
+
messageHash = self.safe_string(message, 'topic')
|
|
201
|
+
try:
|
|
202
|
+
defaultLimit = self.safe_integer(self.options, 'watchOrderBookLimit', 1000)
|
|
203
|
+
limit = self.safe_integer(subscription, 'limit', defaultLimit)
|
|
204
|
+
params = self.safe_value(subscription, 'params')
|
|
205
|
+
snapshot = await self.fetch_rest_order_book_safe(symbol, limit, params)
|
|
206
|
+
if self.safe_value(self.orderbooks, symbol) is None:
|
|
207
|
+
# if the orderbook is dropped before the snapshot is received
|
|
208
|
+
return
|
|
209
|
+
orderbook = self.orderbooks[symbol]
|
|
210
|
+
orderbook.reset(snapshot)
|
|
211
|
+
messages = orderbook.cache
|
|
212
|
+
for i in range(0, len(messages)):
|
|
213
|
+
messageItem = messages[i]
|
|
214
|
+
ts = self.safe_integer(messageItem, 'ts')
|
|
215
|
+
if ts < orderbook['timestamp']:
|
|
216
|
+
continue
|
|
217
|
+
else:
|
|
218
|
+
self.handle_order_book_message(client, messageItem, orderbook)
|
|
219
|
+
self.orderbooks[symbol] = orderbook
|
|
220
|
+
client.resolve(orderbook, messageHash)
|
|
221
|
+
except Exception as e:
|
|
222
|
+
del client.subscriptions[messageHash]
|
|
223
|
+
client.reject(e, messageHash)
|
|
224
|
+
|
|
225
|
+
def handle_order_book_message(self, client: Client, message, orderbook):
|
|
226
|
+
data = self.safe_dict(message, 'data')
|
|
227
|
+
self.handle_deltas(orderbook['asks'], self.safe_value(data, 'asks', []))
|
|
228
|
+
self.handle_deltas(orderbook['bids'], self.safe_value(data, 'bids', []))
|
|
141
229
|
timestamp = self.safe_integer(message, 'ts')
|
|
142
|
-
|
|
143
|
-
orderbook.
|
|
144
|
-
|
|
230
|
+
orderbook['timestamp'] = timestamp
|
|
231
|
+
orderbook['datetime'] = self.iso8601(timestamp)
|
|
232
|
+
return orderbook
|
|
233
|
+
|
|
234
|
+
def handle_delta(self, bookside, delta):
|
|
235
|
+
price = self.safe_float_2(delta, 'price', 0)
|
|
236
|
+
amount = self.safe_float_2(delta, 'quantity', 1)
|
|
237
|
+
bookside.store(price, amount)
|
|
238
|
+
|
|
239
|
+
def handle_deltas(self, bookside, deltas):
|
|
240
|
+
for i in range(0, len(deltas)):
|
|
241
|
+
self.handle_delta(bookside, deltas[i])
|
|
145
242
|
|
|
146
243
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
147
244
|
"""
|
|
@@ -229,7 +326,9 @@ class woo(ccxt.async_support.woo):
|
|
|
229
326
|
|
|
230
327
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
231
328
|
"""
|
|
232
|
-
|
|
329
|
+
|
|
330
|
+
https://docs.woox.io/#24h-tickers
|
|
331
|
+
|
|
233
332
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
234
333
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
235
334
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -289,10 +388,81 @@ class woo(ccxt.async_support.woo):
|
|
|
289
388
|
result.append(ticker)
|
|
290
389
|
client.resolve(result, topic)
|
|
291
390
|
|
|
391
|
+
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
|
392
|
+
"""
|
|
393
|
+
|
|
394
|
+
https://docs.woox.io/#bbos
|
|
395
|
+
|
|
396
|
+
watches best bid & ask for symbols
|
|
397
|
+
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
398
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
399
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
400
|
+
"""
|
|
401
|
+
await self.load_markets()
|
|
402
|
+
symbols = self.market_symbols(symbols, None, False)
|
|
403
|
+
name = 'bbos'
|
|
404
|
+
topic = name
|
|
405
|
+
request: dict = {
|
|
406
|
+
'event': 'subscribe',
|
|
407
|
+
'topic': topic,
|
|
408
|
+
}
|
|
409
|
+
message = self.extend(request, params)
|
|
410
|
+
tickers = await self.watch_public(topic, message)
|
|
411
|
+
if self.newUpdates:
|
|
412
|
+
return tickers
|
|
413
|
+
return self.filter_by_array(self.bidsasks, 'symbol', symbols)
|
|
414
|
+
|
|
415
|
+
def handle_bid_ask(self, client: Client, message):
|
|
416
|
+
#
|
|
417
|
+
# {
|
|
418
|
+
# "topic": "bbos",
|
|
419
|
+
# "ts": 1618822376000,
|
|
420
|
+
# "data": [
|
|
421
|
+
# {
|
|
422
|
+
# "symbol": "SPOT_FIL_USDT",
|
|
423
|
+
# "ask": 159.0318,
|
|
424
|
+
# "askSize": 370.43,
|
|
425
|
+
# "bid": 158.9158,
|
|
426
|
+
# "bidSize": 16
|
|
427
|
+
# }
|
|
428
|
+
# ]
|
|
429
|
+
# }
|
|
430
|
+
#
|
|
431
|
+
topic = self.safe_string(message, 'topic')
|
|
432
|
+
data = self.safe_list(message, 'data', [])
|
|
433
|
+
timestamp = self.safe_integer(message, 'ts')
|
|
434
|
+
result: dict = {}
|
|
435
|
+
for i in range(0, len(data)):
|
|
436
|
+
ticker = self.safe_dict(data, i)
|
|
437
|
+
ticker['ts'] = timestamp
|
|
438
|
+
parsedTicker = self.parse_ws_bid_ask(ticker)
|
|
439
|
+
symbol = parsedTicker['symbol']
|
|
440
|
+
self.bidsasks[symbol] = parsedTicker
|
|
441
|
+
result[symbol] = parsedTicker
|
|
442
|
+
client.resolve(result, topic)
|
|
443
|
+
|
|
444
|
+
def parse_ws_bid_ask(self, ticker, market=None):
|
|
445
|
+
marketId = self.safe_string(ticker, 'symbol')
|
|
446
|
+
market = self.safe_market(marketId, market)
|
|
447
|
+
symbol = self.safe_string(market, 'symbol')
|
|
448
|
+
timestamp = self.safe_integer(ticker, 'ts')
|
|
449
|
+
return self.safe_ticker({
|
|
450
|
+
'symbol': symbol,
|
|
451
|
+
'timestamp': timestamp,
|
|
452
|
+
'datetime': self.iso8601(timestamp),
|
|
453
|
+
'ask': self.safe_string(ticker, 'ask'),
|
|
454
|
+
'askVolume': self.safe_string(ticker, 'askSize'),
|
|
455
|
+
'bid': self.safe_string(ticker, 'bid'),
|
|
456
|
+
'bidVolume': self.safe_string(ticker, 'bidSize'),
|
|
457
|
+
'info': ticker,
|
|
458
|
+
}, market)
|
|
459
|
+
|
|
292
460
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
293
461
|
"""
|
|
294
462
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
295
|
-
|
|
463
|
+
|
|
464
|
+
https://docs.woox.io/#k-line
|
|
465
|
+
|
|
296
466
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
297
467
|
:param str timeframe: the length of time each candle represents
|
|
298
468
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
@@ -363,12 +533,14 @@ class woo(ccxt.async_support.woo):
|
|
|
363
533
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
364
534
|
"""
|
|
365
535
|
watches information on multiple trades made in a market
|
|
366
|
-
|
|
536
|
+
|
|
537
|
+
https://docs.woox.io/#trade
|
|
538
|
+
|
|
367
539
|
:param str symbol: unified market symbol of the market trades were made in
|
|
368
540
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
369
541
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
370
542
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
371
|
-
:returns dict[]: a list of
|
|
543
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
372
544
|
"""
|
|
373
545
|
await self.load_markets()
|
|
374
546
|
market = self.market(symbol)
|
|
@@ -456,7 +628,7 @@ class woo(ccxt.async_support.woo):
|
|
|
456
628
|
marketId = self.safe_string(trade, 'symbol')
|
|
457
629
|
market = self.safe_market(marketId, market)
|
|
458
630
|
symbol = market['symbol']
|
|
459
|
-
price = self.
|
|
631
|
+
price = self.safe_string_2(trade, 'executedPrice', 'price')
|
|
460
632
|
amount = self.safe_string_2(trade, 'executedQuantity', 'size')
|
|
461
633
|
cost = Precise.string_mul(price, amount)
|
|
462
634
|
side = self.safe_string_lower(trade, 'side')
|
|
@@ -492,7 +664,7 @@ class woo(ccxt.async_support.woo):
|
|
|
492
664
|
def check_required_uid(self, error=True):
|
|
493
665
|
if not self.uid:
|
|
494
666
|
if error:
|
|
495
|
-
raise AuthenticationError(self.id + ' requires `uid` credential')
|
|
667
|
+
raise AuthenticationError(self.id + ' requires `uid` credential(woox calls it `application_id`)')
|
|
496
668
|
else:
|
|
497
669
|
return False
|
|
498
670
|
return True
|
|
@@ -518,7 +690,7 @@ class woo(ccxt.async_support.woo):
|
|
|
518
690
|
},
|
|
519
691
|
}
|
|
520
692
|
message = self.extend(request, params)
|
|
521
|
-
self.watch(url, messageHash, message, messageHash)
|
|
693
|
+
self.watch(url, messageHash, message, messageHash, message)
|
|
522
694
|
return await future
|
|
523
695
|
|
|
524
696
|
async def watch_private(self, messageHash, message, params={}):
|
|
@@ -543,8 +715,10 @@ class woo(ccxt.async_support.woo):
|
|
|
543
715
|
|
|
544
716
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
545
717
|
"""
|
|
546
|
-
|
|
547
|
-
|
|
718
|
+
|
|
719
|
+
https://docs.woox.io/#executionreport
|
|
720
|
+
https://docs.woox.io/#algoexecutionreportv2
|
|
721
|
+
|
|
548
722
|
watches information on multiple orders made by the user
|
|
549
723
|
:param str symbol: unified market symbol of the market orders were made in
|
|
550
724
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
@@ -574,8 +748,10 @@ class woo(ccxt.async_support.woo):
|
|
|
574
748
|
|
|
575
749
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
576
750
|
"""
|
|
577
|
-
|
|
578
|
-
|
|
751
|
+
|
|
752
|
+
https://docs.woox.io/#executionreport
|
|
753
|
+
https://docs.woox.io/#algoexecutionreportv2
|
|
754
|
+
|
|
579
755
|
watches information on multiple trades made by the user
|
|
580
756
|
:param str symbol: unified market symbol of the market orders were made in
|
|
581
757
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
@@ -638,9 +814,10 @@ class woo(ccxt.async_support.woo):
|
|
|
638
814
|
'cost': self.safe_string(order, 'totalFee'),
|
|
639
815
|
'currency': self.safe_string(order, 'feeAsset'),
|
|
640
816
|
}
|
|
817
|
+
priceString = self.safe_string(order, 'price')
|
|
641
818
|
price = self.safe_number(order, 'price')
|
|
642
819
|
avgPrice = self.safe_number(order, 'avgPrice')
|
|
643
|
-
if (
|
|
820
|
+
if Precise.string_eq(priceString, '0') and (avgPrice is not None):
|
|
644
821
|
price = avgPrice
|
|
645
822
|
amount = self.safe_float(order, 'quantity')
|
|
646
823
|
side = self.safe_string_lower(order, 'side')
|
|
@@ -671,7 +848,7 @@ class woo(ccxt.async_support.woo):
|
|
|
671
848
|
'triggerPrice': None,
|
|
672
849
|
'amount': amount,
|
|
673
850
|
'cost': None,
|
|
674
|
-
'average':
|
|
851
|
+
'average': avgPrice,
|
|
675
852
|
'filled': filled,
|
|
676
853
|
'remaining': remaining,
|
|
677
854
|
'status': status,
|
|
@@ -796,9 +973,13 @@ class woo(ccxt.async_support.woo):
|
|
|
796
973
|
|
|
797
974
|
async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
|
|
798
975
|
"""
|
|
799
|
-
|
|
976
|
+
|
|
977
|
+
https://docs.woox.io/#position-push
|
|
978
|
+
|
|
800
979
|
watch all open positions
|
|
801
980
|
:param str[]|None symbols: list of unified market symbols
|
|
981
|
+
@param since
|
|
982
|
+
@param limit
|
|
802
983
|
:param dict params: extra parameters specific to the exchange API endpoint
|
|
803
984
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
|
|
804
985
|
"""
|
|
@@ -815,7 +996,7 @@ class woo(ccxt.async_support.woo):
|
|
|
815
996
|
client = self.client(url)
|
|
816
997
|
self.set_positions_cache(client, symbols)
|
|
817
998
|
fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
|
|
818
|
-
awaitPositionsSnapshot = self.
|
|
999
|
+
awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
|
|
819
1000
|
if fetchPositionsSnapshot and awaitPositionsSnapshot and self.positions is None:
|
|
820
1001
|
snapshot = await client.future('fetchPositionsSnapshot')
|
|
821
1002
|
return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
|
|
@@ -898,7 +1079,9 @@ class woo(ccxt.async_support.woo):
|
|
|
898
1079
|
|
|
899
1080
|
async def watch_balance(self, params={}) -> Balances:
|
|
900
1081
|
"""
|
|
901
|
-
|
|
1082
|
+
|
|
1083
|
+
https://docs.woox.io/#balance
|
|
1084
|
+
|
|
902
1085
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
903
1086
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
904
1087
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
@@ -963,7 +1146,7 @@ class woo(ccxt.async_support.woo):
|
|
|
963
1146
|
self.balance = self.safe_balance(self.balance)
|
|
964
1147
|
client.resolve(self.balance, 'balance')
|
|
965
1148
|
|
|
966
|
-
def handle_error_message(self, client: Client, message):
|
|
1149
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
967
1150
|
#
|
|
968
1151
|
# {"id":"1","event":"subscribe","success":false,"ts":1710780997216,"errorMsg":"Auth is needed."}
|
|
969
1152
|
#
|
|
@@ -996,6 +1179,7 @@ class woo(ccxt.async_support.woo):
|
|
|
996
1179
|
'pong': self.handle_pong,
|
|
997
1180
|
'subscribe': self.handle_subscribe,
|
|
998
1181
|
'orderbook': self.handle_order_book,
|
|
1182
|
+
'orderbookupdate': self.handle_order_book,
|
|
999
1183
|
'ticker': self.handle_ticker,
|
|
1000
1184
|
'tickers': self.handle_tickers,
|
|
1001
1185
|
'kline': self.handle_ohlcv,
|
|
@@ -1005,6 +1189,7 @@ class woo(ccxt.async_support.woo):
|
|
|
1005
1189
|
'trade': self.handle_trade,
|
|
1006
1190
|
'balance': self.handle_balance,
|
|
1007
1191
|
'position': self.handle_positions,
|
|
1192
|
+
'bbos': self.handle_bid_ask,
|
|
1008
1193
|
}
|
|
1009
1194
|
event = self.safe_string(message, 'event')
|
|
1010
1195
|
method = self.safe_value(methods, event)
|
|
@@ -1054,6 +1239,12 @@ class woo(ccxt.async_support.woo):
|
|
|
1054
1239
|
# "ts": 1657117712212
|
|
1055
1240
|
# }
|
|
1056
1241
|
#
|
|
1242
|
+
id = self.safe_string(message, 'id')
|
|
1243
|
+
subscriptionsById = self.index_by(client.subscriptions, 'id')
|
|
1244
|
+
subscription = self.safe_value(subscriptionsById, id, {})
|
|
1245
|
+
method = self.safe_value(subscription, 'method')
|
|
1246
|
+
if method is not None:
|
|
1247
|
+
method(client, message, subscription)
|
|
1057
1248
|
return message
|
|
1058
1249
|
|
|
1059
1250
|
def handle_auth(self, client: Client, message):
|