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/woofipro.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, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
|
|
8
|
-
from ccxt.base.types import Balances, Int, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
8
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, 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 AuthenticationError
|
|
@@ -15,7 +15,7 @@ from ccxt.base.precise import Precise
|
|
|
15
15
|
|
|
16
16
|
class woofipro(ccxt.async_support.woofipro):
|
|
17
17
|
|
|
18
|
-
def describe(self):
|
|
18
|
+
def describe(self) -> Any:
|
|
19
19
|
return self.deep_extend(super(woofipro, self).describe(), {
|
|
20
20
|
'has': {
|
|
21
21
|
'ws': True,
|
|
@@ -26,7 +26,9 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
26
26
|
'watchOrders': True,
|
|
27
27
|
'watchTicker': True,
|
|
28
28
|
'watchTickers': True,
|
|
29
|
+
'watchBidsAsks': True,
|
|
29
30
|
'watchTrades': True,
|
|
31
|
+
'watchTradesForSymbols': False,
|
|
30
32
|
'watchPositions': True,
|
|
31
33
|
},
|
|
32
34
|
'urls': {
|
|
@@ -92,7 +94,9 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
92
94
|
|
|
93
95
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
94
96
|
"""
|
|
95
|
-
|
|
97
|
+
|
|
98
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/orderbook
|
|
99
|
+
|
|
96
100
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
97
101
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
98
102
|
:param int [limit]: the maximum amount of order book entries to return.
|
|
@@ -148,7 +152,9 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
148
152
|
|
|
149
153
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
150
154
|
"""
|
|
151
|
-
|
|
155
|
+
|
|
156
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/24-hour-ticker
|
|
157
|
+
|
|
152
158
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
153
159
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
154
160
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -233,7 +239,9 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
233
239
|
|
|
234
240
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
235
241
|
"""
|
|
236
|
-
|
|
242
|
+
|
|
243
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/24-hour-tickers
|
|
244
|
+
|
|
237
245
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
238
246
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
239
247
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -283,10 +291,76 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
283
291
|
result.append(ticker)
|
|
284
292
|
client.resolve(result, topic)
|
|
285
293
|
|
|
294
|
+
async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
|
|
295
|
+
"""
|
|
296
|
+
|
|
297
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/bbos
|
|
298
|
+
|
|
299
|
+
watches best bid & ask for symbols
|
|
300
|
+
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
301
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
302
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
303
|
+
"""
|
|
304
|
+
await self.load_markets()
|
|
305
|
+
symbols = self.market_symbols(symbols)
|
|
306
|
+
name = 'bbos'
|
|
307
|
+
topic = name
|
|
308
|
+
request: dict = {
|
|
309
|
+
'event': 'subscribe',
|
|
310
|
+
'topic': topic,
|
|
311
|
+
}
|
|
312
|
+
message = self.extend(request, params)
|
|
313
|
+
tickers = await self.watch_public(topic, message)
|
|
314
|
+
return self.filter_by_array(tickers, 'symbol', symbols)
|
|
315
|
+
|
|
316
|
+
def handle_bid_ask(self, client: Client, message):
|
|
317
|
+
#
|
|
318
|
+
# {
|
|
319
|
+
# "topic": "bbos",
|
|
320
|
+
# "ts": 1726212495000,
|
|
321
|
+
# "data": [
|
|
322
|
+
# {
|
|
323
|
+
# "symbol": "PERP_WOO_USDC",
|
|
324
|
+
# "ask": 0.16570,
|
|
325
|
+
# "askSize": 4224,
|
|
326
|
+
# "bid": 0.16553,
|
|
327
|
+
# "bidSize": 6645
|
|
328
|
+
# }
|
|
329
|
+
# ]
|
|
330
|
+
# }
|
|
331
|
+
#
|
|
332
|
+
topic = self.safe_string(message, 'topic')
|
|
333
|
+
data = self.safe_list(message, 'data', [])
|
|
334
|
+
timestamp = self.safe_integer(message, 'ts')
|
|
335
|
+
result = []
|
|
336
|
+
for i in range(0, len(data)):
|
|
337
|
+
ticker = self.parse_ws_bid_ask(self.extend(data[i], {'ts': timestamp}))
|
|
338
|
+
self.tickers[ticker['symbol']] = ticker
|
|
339
|
+
result.append(ticker)
|
|
340
|
+
client.resolve(result, topic)
|
|
341
|
+
|
|
342
|
+
def parse_ws_bid_ask(self, ticker, market=None):
|
|
343
|
+
marketId = self.safe_string(ticker, 'symbol')
|
|
344
|
+
market = self.safe_market(marketId, market)
|
|
345
|
+
symbol = self.safe_string(market, 'symbol')
|
|
346
|
+
timestamp = self.safe_integer(ticker, 'ts')
|
|
347
|
+
return self.safe_ticker({
|
|
348
|
+
'symbol': symbol,
|
|
349
|
+
'timestamp': timestamp,
|
|
350
|
+
'datetime': self.iso8601(timestamp),
|
|
351
|
+
'ask': self.safe_string(ticker, 'ask'),
|
|
352
|
+
'askVolume': self.safe_string(ticker, 'askSize'),
|
|
353
|
+
'bid': self.safe_string(ticker, 'bid'),
|
|
354
|
+
'bidVolume': self.safe_string(ticker, 'bidSize'),
|
|
355
|
+
'info': ticker,
|
|
356
|
+
}, market)
|
|
357
|
+
|
|
286
358
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
287
359
|
"""
|
|
288
360
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
289
|
-
|
|
361
|
+
|
|
362
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/k-line
|
|
363
|
+
|
|
290
364
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
291
365
|
:param str timeframe: the length of time each candle represents
|
|
292
366
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
@@ -358,12 +432,14 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
358
432
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
359
433
|
"""
|
|
360
434
|
watches information on multiple trades made in a market
|
|
361
|
-
|
|
435
|
+
|
|
436
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/trade
|
|
437
|
+
|
|
362
438
|
:param str symbol: unified market symbol of the market trades were made in
|
|
363
439
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
364
440
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
365
441
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
366
|
-
:returns dict[]: a list of
|
|
442
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
367
443
|
"""
|
|
368
444
|
await self.load_markets()
|
|
369
445
|
market = self.market(symbol)
|
|
@@ -552,8 +628,10 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
552
628
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
553
629
|
"""
|
|
554
630
|
watches information on multiple orders made by the user
|
|
555
|
-
|
|
556
|
-
|
|
631
|
+
|
|
632
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/execution-report
|
|
633
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/algo-execution-report
|
|
634
|
+
|
|
557
635
|
:param str symbol: unified market symbol of the market orders were made in
|
|
558
636
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
559
637
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -583,8 +661,10 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
583
661
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
584
662
|
"""
|
|
585
663
|
watches information on multiple trades made by the user
|
|
586
|
-
|
|
587
|
-
|
|
664
|
+
|
|
665
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/execution-report
|
|
666
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/algo-execution-report
|
|
667
|
+
|
|
588
668
|
:param str symbol: unified market symbol of the market orders were made in
|
|
589
669
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
590
670
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -686,9 +766,10 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
686
766
|
'cost': self.safe_string(order, 'totalFee'),
|
|
687
767
|
'currency': self.safe_string(order, 'feeAsset'),
|
|
688
768
|
}
|
|
769
|
+
priceString = self.safe_string(order, 'price')
|
|
689
770
|
price = self.safe_number(order, 'price')
|
|
690
771
|
avgPrice = self.safe_number(order, 'avgPrice')
|
|
691
|
-
if (
|
|
772
|
+
if Precise.string_eq(priceString, '0') and (avgPrice is not None):
|
|
692
773
|
price = avgPrice
|
|
693
774
|
amount = self.safe_string(order, 'quantity')
|
|
694
775
|
side = self.safe_string_lower(order, 'side')
|
|
@@ -846,9 +927,13 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
846
927
|
|
|
847
928
|
async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
|
|
848
929
|
"""
|
|
849
|
-
|
|
930
|
+
|
|
931
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/position-push
|
|
932
|
+
|
|
850
933
|
watch all open positions
|
|
851
|
-
:param str[]
|
|
934
|
+
:param str[] [symbols]: list of unified market symbols
|
|
935
|
+
@param since timestamp in ms of the earliest position to fetch
|
|
936
|
+
@param limit the maximum number of positions to fetch
|
|
852
937
|
:param dict params: extra parameters specific to the exchange API endpoint
|
|
853
938
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
|
|
854
939
|
"""
|
|
@@ -865,7 +950,7 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
865
950
|
client = self.client(url)
|
|
866
951
|
self.set_positions_cache(client, symbols)
|
|
867
952
|
fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
|
|
868
|
-
awaitPositionsSnapshot = self.
|
|
953
|
+
awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
|
|
869
954
|
if fetchPositionsSnapshot and awaitPositionsSnapshot and self.positions is None:
|
|
870
955
|
snapshot = await client.future('fetchPositionsSnapshot')
|
|
871
956
|
return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
|
|
@@ -1026,7 +1111,9 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
1026
1111
|
async def watch_balance(self, params={}) -> Balances:
|
|
1027
1112
|
"""
|
|
1028
1113
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
1029
|
-
|
|
1114
|
+
|
|
1115
|
+
https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/balance
|
|
1116
|
+
|
|
1030
1117
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1031
1118
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
1032
1119
|
"""
|
|
@@ -1089,7 +1176,7 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
1089
1176
|
self.balance = self.safe_balance(self.balance)
|
|
1090
1177
|
client.resolve(self.balance, 'balance')
|
|
1091
1178
|
|
|
1092
|
-
def handle_error_message(self, client: Client, message):
|
|
1179
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1093
1180
|
#
|
|
1094
1181
|
# {"id":"1","event":"subscribe","success":false,"ts":1710780997216,"errorMsg":"Auth is needed."}
|
|
1095
1182
|
#
|
|
@@ -1131,6 +1218,7 @@ class woofipro(ccxt.async_support.woofipro):
|
|
|
1131
1218
|
'algoexecutionreport': self.handle_order_update,
|
|
1132
1219
|
'position': self.handle_positions,
|
|
1133
1220
|
'balance': self.handle_balance,
|
|
1221
|
+
'bbos': self.handle_bid_ask,
|
|
1134
1222
|
}
|
|
1135
1223
|
event = self.safe_string(message, 'event')
|
|
1136
1224
|
method = self.safe_value(methods, event)
|
ccxt/pro/xt.py
CHANGED
|
@@ -4,15 +4,15 @@
|
|
|
4
4
|
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
5
|
|
|
6
6
|
import ccxt.async_support
|
|
7
|
-
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
|
|
8
|
-
from ccxt.base.types import Balances, Int, Market, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
|
|
7
|
+
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
|
|
8
|
+
from ccxt.base.types import Any, Balances, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
9
9
|
from ccxt.async_support.base.ws.client import Client
|
|
10
10
|
from typing import List
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class xt(ccxt.async_support.xt):
|
|
14
14
|
|
|
15
|
-
def describe(self):
|
|
15
|
+
def describe(self) -> Any:
|
|
16
16
|
return self.deep_extend(super(xt, self).describe(), {
|
|
17
17
|
'has': {
|
|
18
18
|
'ws': True,
|
|
@@ -25,7 +25,7 @@ class xt(ccxt.async_support.xt):
|
|
|
25
25
|
'watchBalance': True,
|
|
26
26
|
'watchOrders': True,
|
|
27
27
|
'watchMyTrades': True,
|
|
28
|
-
'watchPositions':
|
|
28
|
+
'watchPositions': True,
|
|
29
29
|
},
|
|
30
30
|
'urls': {
|
|
31
31
|
'api': {
|
|
@@ -45,6 +45,11 @@ class xt(ccxt.async_support.xt):
|
|
|
45
45
|
'watchTickers': {
|
|
46
46
|
'method': 'tickers', # agg_tickers(contract only)
|
|
47
47
|
},
|
|
48
|
+
'watchPositions': {
|
|
49
|
+
'type': 'swap',
|
|
50
|
+
'fetchPositionsSnapshot': True,
|
|
51
|
+
'awaitPositionsSnapshot': True,
|
|
52
|
+
},
|
|
48
53
|
},
|
|
49
54
|
'streaming': {
|
|
50
55
|
'keepAlive': 20000,
|
|
@@ -70,7 +75,7 @@ class xt(ccxt.async_support.xt):
|
|
|
70
75
|
if not isContract:
|
|
71
76
|
url = url + '/private'
|
|
72
77
|
client = self.client(url)
|
|
73
|
-
token = self.
|
|
78
|
+
token = self.safe_string(client.subscriptions, 'token')
|
|
74
79
|
if token is None:
|
|
75
80
|
if isContract:
|
|
76
81
|
response = await self.privateLinearGetFutureUserV1UserListenKey()
|
|
@@ -352,6 +357,106 @@ class xt(ccxt.async_support.xt):
|
|
|
352
357
|
name = 'balance'
|
|
353
358
|
return await self.subscribe(name, 'private', 'watchBalance', None, None, params)
|
|
354
359
|
|
|
360
|
+
async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
|
|
361
|
+
"""
|
|
362
|
+
|
|
363
|
+
https://doc.xt.com/#futures_user_websocket_v2position
|
|
364
|
+
|
|
365
|
+
watch all open positions
|
|
366
|
+
:param str[]|None symbols: list of unified market symbols
|
|
367
|
+
:param number [since]: since timestamp
|
|
368
|
+
:param number [limit]: limit
|
|
369
|
+
:param dict params: extra parameters specific to the exchange API endpoint
|
|
370
|
+
:returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
|
|
371
|
+
"""
|
|
372
|
+
await self.load_markets()
|
|
373
|
+
url = self.urls['api']['ws']['contract'] + '/' + 'user'
|
|
374
|
+
client = self.client(url)
|
|
375
|
+
self.set_positions_cache(client)
|
|
376
|
+
fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
|
|
377
|
+
awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
|
|
378
|
+
cache = self.positions
|
|
379
|
+
if fetchPositionsSnapshot and awaitPositionsSnapshot and self.is_empty(cache):
|
|
380
|
+
snapshot = await client.future('fetchPositionsSnapshot')
|
|
381
|
+
return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
|
|
382
|
+
name = 'position'
|
|
383
|
+
newPositions = await self.subscribe(name, 'private', 'watchPositions', None, None, params)
|
|
384
|
+
if self.newUpdates:
|
|
385
|
+
return newPositions
|
|
386
|
+
return self.filter_by_symbols_since_limit(cache, symbols, since, limit, True)
|
|
387
|
+
|
|
388
|
+
def set_positions_cache(self, client: Client):
|
|
389
|
+
if self.positions is None:
|
|
390
|
+
self.positions = ArrayCacheBySymbolBySide()
|
|
391
|
+
fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot')
|
|
392
|
+
if fetchPositionsSnapshot:
|
|
393
|
+
messageHash = 'fetchPositionsSnapshot'
|
|
394
|
+
if not (messageHash in client.futures):
|
|
395
|
+
client.future(messageHash)
|
|
396
|
+
self.spawn(self.load_positions_snapshot, client, messageHash)
|
|
397
|
+
|
|
398
|
+
async def load_positions_snapshot(self, client, messageHash):
|
|
399
|
+
positions = await self.fetch_positions(None)
|
|
400
|
+
self.positions = ArrayCacheBySymbolBySide()
|
|
401
|
+
cache = self.positions
|
|
402
|
+
for i in range(0, len(positions)):
|
|
403
|
+
position = positions[i]
|
|
404
|
+
contracts = self.safe_number(position, 'contracts', 0)
|
|
405
|
+
if contracts > 0:
|
|
406
|
+
cache.append(position)
|
|
407
|
+
# don't remove the future from the .futures cache
|
|
408
|
+
future = client.futures[messageHash]
|
|
409
|
+
future.resolve(cache)
|
|
410
|
+
client.resolve(cache, 'position::contract')
|
|
411
|
+
|
|
412
|
+
def handle_position(self, client, message):
|
|
413
|
+
#
|
|
414
|
+
# {
|
|
415
|
+
# topic: 'position',
|
|
416
|
+
# event: 'position',
|
|
417
|
+
# data: {
|
|
418
|
+
# accountId: 245296,
|
|
419
|
+
# accountType: 0,
|
|
420
|
+
# symbol: 'eth_usdt',
|
|
421
|
+
# contractType: 'PERPETUAL',
|
|
422
|
+
# positionType: 'CROSSED',
|
|
423
|
+
# positionSide: 'LONG',
|
|
424
|
+
# positionSize: '1',
|
|
425
|
+
# closeOrderSize: '0',
|
|
426
|
+
# availableCloseSize: '1',
|
|
427
|
+
# realizedProfit: '-0.0121',
|
|
428
|
+
# entryPrice: '2637.87',
|
|
429
|
+
# openOrderSize: '1',
|
|
430
|
+
# isolatedMargin: '2.63787',
|
|
431
|
+
# openOrderMarginFrozen: '2.78832014',
|
|
432
|
+
# underlyingType: 'U_BASED',
|
|
433
|
+
# leverage: 10,
|
|
434
|
+
# welfareAccount: False,
|
|
435
|
+
# profitFixedLatest: {},
|
|
436
|
+
# closeProfit: '0.0000',
|
|
437
|
+
# totalFee: '-0.0158',
|
|
438
|
+
# totalFundFee: '0.0037',
|
|
439
|
+
# markPrice: '2690.96'
|
|
440
|
+
# }
|
|
441
|
+
# }
|
|
442
|
+
#
|
|
443
|
+
if self.positions is None:
|
|
444
|
+
self.positions = ArrayCacheBySymbolBySide()
|
|
445
|
+
cache = self.positions
|
|
446
|
+
data = self.safe_dict(message, 'data', {})
|
|
447
|
+
position = self.parse_position(data)
|
|
448
|
+
cache.append(position)
|
|
449
|
+
messageHashes = self.find_message_hashes(client, 'position::contract')
|
|
450
|
+
for i in range(0, len(messageHashes)):
|
|
451
|
+
messageHash = messageHashes[i]
|
|
452
|
+
parts = messageHash.split('::')
|
|
453
|
+
symbolsString = parts[1]
|
|
454
|
+
symbols = symbolsString.split(',')
|
|
455
|
+
positions = self.filter_by_array([position], 'symbol', symbols, False)
|
|
456
|
+
if not self.is_empty(positions):
|
|
457
|
+
client.resolve(positions, messageHash)
|
|
458
|
+
client.resolve([position], 'position::contract')
|
|
459
|
+
|
|
355
460
|
def handle_ticker(self, client: Client, message: dict):
|
|
356
461
|
#
|
|
357
462
|
# spot
|
|
@@ -1036,6 +1141,7 @@ class xt(ccxt.async_support.xt):
|
|
|
1036
1141
|
'agg_tickers': self.handle_tickers,
|
|
1037
1142
|
'balance': self.handle_balance,
|
|
1038
1143
|
'order': self.handle_order,
|
|
1144
|
+
'position': self.handle_position,
|
|
1039
1145
|
}
|
|
1040
1146
|
method = self.safe_value(methods, topic)
|
|
1041
1147
|
if topic == 'trade':
|