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/bitmex.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, Liquidation, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
9
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Liquidation, 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.errors import RateLimitExceeded
|
|
|
16
16
|
|
|
17
17
|
class bitmex(ccxt.async_support.bitmex):
|
|
18
18
|
|
|
19
|
-
def describe(self):
|
|
19
|
+
def describe(self) -> Any:
|
|
20
20
|
return self.deep_extend(super(bitmex, self).describe(), {
|
|
21
21
|
'has': {
|
|
22
22
|
'ws': True,
|
|
@@ -66,6 +66,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
66
66
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
67
67
|
"""
|
|
68
68
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
69
|
+
|
|
70
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
71
|
+
|
|
69
72
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
70
73
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
71
74
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -78,6 +81,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
78
81
|
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
79
82
|
"""
|
|
80
83
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
|
|
84
|
+
|
|
85
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
86
|
+
|
|
81
87
|
:param str[] symbols: unified symbol of the market to fetch the ticker for
|
|
82
88
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
83
89
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -357,7 +363,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
357
363
|
async def watch_liquidations(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Liquidation]:
|
|
358
364
|
"""
|
|
359
365
|
watch the public liquidations of a trading pair
|
|
360
|
-
|
|
366
|
+
|
|
367
|
+
https://www.bitmex.com/app/wsAPI#Liquidation
|
|
368
|
+
|
|
361
369
|
:param str symbol: unified CCXT market symbol
|
|
362
370
|
:param int [since]: the earliest time in ms to fetch liquidations for
|
|
363
371
|
:param int [limit]: the maximum number of liquidation structures to retrieve
|
|
@@ -366,11 +374,13 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
366
374
|
"""
|
|
367
375
|
return self.watch_liquidations_for_symbols([symbol], since, limit, params)
|
|
368
376
|
|
|
369
|
-
async def watch_liquidations_for_symbols(self, symbols: List[str]
|
|
377
|
+
async def watch_liquidations_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Liquidation]:
|
|
370
378
|
"""
|
|
371
379
|
watch the public liquidations of a trading pair
|
|
372
|
-
|
|
373
|
-
|
|
380
|
+
|
|
381
|
+
https://www.bitmex.com/app/wsAPI#Liquidation
|
|
382
|
+
|
|
383
|
+
:param str[] symbols:
|
|
374
384
|
:param int [since]: the earliest time in ms to fetch liquidations for
|
|
375
385
|
:param int [limit]: the maximum number of liquidation structures to retrieve
|
|
376
386
|
:param dict [params]: exchange specific parameters for the bitmex api endpoint
|
|
@@ -449,6 +459,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
449
459
|
async def watch_balance(self, params={}) -> Balances:
|
|
450
460
|
"""
|
|
451
461
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
462
|
+
|
|
463
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
464
|
+
|
|
452
465
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
453
466
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
454
467
|
"""
|
|
@@ -651,6 +664,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
651
664
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
652
665
|
"""
|
|
653
666
|
get the list of most recent trades for a particular symbol
|
|
667
|
+
|
|
668
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
669
|
+
|
|
654
670
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
655
671
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
656
672
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -697,9 +713,13 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
697
713
|
|
|
698
714
|
async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
|
|
699
715
|
"""
|
|
700
|
-
:see: https://www.bitmex.com/app/wsAPI
|
|
701
716
|
watch all open positions
|
|
717
|
+
|
|
718
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
719
|
+
|
|
702
720
|
:param str[]|None symbols: list of unified market symbols
|
|
721
|
+
:param int [since]: the earliest time in ms to watch positions for
|
|
722
|
+
:param int [limit]: the maximum number of positions to retrieve
|
|
703
723
|
:param dict params: extra parameters specific to the exchange API endpoint
|
|
704
724
|
:returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
|
|
705
725
|
"""
|
|
@@ -894,6 +914,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
894
914
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
895
915
|
"""
|
|
896
916
|
watches information on multiple orders made by the user
|
|
917
|
+
|
|
918
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
919
|
+
|
|
897
920
|
:param str symbol: unified market symbol of the market orders were made in
|
|
898
921
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
899
922
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -1100,11 +1123,14 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
1100
1123
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
1101
1124
|
"""
|
|
1102
1125
|
watches information on multiple trades made by the user
|
|
1126
|
+
|
|
1127
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
1128
|
+
|
|
1103
1129
|
:param str symbol: unified market symbol of the market trades were made in
|
|
1104
1130
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
1105
1131
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
1106
1132
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1107
|
-
:returns dict[]: a list of
|
|
1133
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
1108
1134
|
"""
|
|
1109
1135
|
await self.load_markets()
|
|
1110
1136
|
await self.authenticate()
|
|
@@ -1209,6 +1235,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
1209
1235
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
1210
1236
|
"""
|
|
1211
1237
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
1238
|
+
|
|
1239
|
+
https://www.bitmex.com/app/wsAPI#OrderBookL2
|
|
1240
|
+
|
|
1212
1241
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
1213
1242
|
:param int [limit]: the maximum amount of order book entries to return
|
|
1214
1243
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1219,6 +1248,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
1219
1248
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
|
1220
1249
|
"""
|
|
1221
1250
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
1251
|
+
|
|
1252
|
+
https://www.bitmex.com/app/wsAPI#OrderBookL2
|
|
1253
|
+
|
|
1222
1254
|
:param str[] symbols: unified array of symbols
|
|
1223
1255
|
:param int [limit]: the maximum amount of order book entries to return
|
|
1224
1256
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1255,6 +1287,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
1255
1287
|
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
1256
1288
|
"""
|
|
1257
1289
|
get the list of most recent trades for a list of symbols
|
|
1290
|
+
|
|
1291
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
1292
|
+
|
|
1258
1293
|
:param str[] symbols: unified symbol of the market to fetch trades for
|
|
1259
1294
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
1260
1295
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -1288,6 +1323,9 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
1288
1323
|
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
1289
1324
|
"""
|
|
1290
1325
|
watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
1326
|
+
|
|
1327
|
+
https://www.bitmex.com/app/wsAPI#Subscriptions
|
|
1328
|
+
|
|
1291
1329
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
1292
1330
|
:param str timeframe: the length of time each candle represents
|
|
1293
1331
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
@@ -1558,7 +1596,7 @@ class bitmex(ccxt.async_support.bitmex):
|
|
|
1558
1596
|
#
|
|
1559
1597
|
return message
|
|
1560
1598
|
|
|
1561
|
-
def handle_error_message(self, client: Client, message):
|
|
1599
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1562
1600
|
#
|
|
1563
1601
|
# generic error format
|
|
1564
1602
|
#
|
ccxt/pro/bitopro.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Balances, Int, Market, OrderBook, Str, Ticker, Trade
|
|
9
|
+
from ccxt.base.types import Any, Balances, Int, Market, OrderBook, Str, Ticker, 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
|
|
@@ -14,7 +14,7 @@ from ccxt.base.errors import ExchangeError
|
|
|
14
14
|
|
|
15
15
|
class bitopro(ccxt.async_support.bitopro):
|
|
16
16
|
|
|
17
|
-
def describe(self):
|
|
17
|
+
def describe(self) -> Any:
|
|
18
18
|
return self.deep_extend(super(bitopro, self).describe(), {
|
|
19
19
|
'has': {
|
|
20
20
|
'ws': True,
|
|
@@ -26,6 +26,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
26
26
|
'watchTicker': True,
|
|
27
27
|
'watchTickers': False,
|
|
28
28
|
'watchTrades': True,
|
|
29
|
+
'watchTradesForSymbols': False,
|
|
29
30
|
},
|
|
30
31
|
'urls': {
|
|
31
32
|
'ws': {
|
|
@@ -57,7 +58,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
57
58
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
58
59
|
"""
|
|
59
60
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
60
|
-
|
|
61
|
+
|
|
62
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/order_book_stream.md
|
|
63
|
+
|
|
61
64
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
62
65
|
:param int [limit]: the maximum amount of order book entries to return
|
|
63
66
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -74,7 +77,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
74
77
|
if limit is None:
|
|
75
78
|
endPart = market['id']
|
|
76
79
|
else:
|
|
77
|
-
endPart = market['id'] + ':' + limit
|
|
80
|
+
endPart = market['id'] + ':' + self.number_to_string(limit)
|
|
78
81
|
orderbook = await self.watch_public('order-books', messageHash, endPart)
|
|
79
82
|
return orderbook.limit()
|
|
80
83
|
|
|
@@ -116,7 +119,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
116
119
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
117
120
|
"""
|
|
118
121
|
get the list of most recent trades for a particular symbol
|
|
119
|
-
|
|
122
|
+
|
|
123
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/trade_stream.md
|
|
124
|
+
|
|
120
125
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
121
126
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
122
127
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -171,12 +176,14 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
171
176
|
async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
172
177
|
"""
|
|
173
178
|
watches information on multiple trades made by the user
|
|
174
|
-
|
|
179
|
+
|
|
180
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/private/matches_stream.md
|
|
181
|
+
|
|
175
182
|
:param str symbol: unified market symbol of the market trades were made in
|
|
176
183
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
177
184
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
178
185
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
179
|
-
:returns dict[]: a list of
|
|
186
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
180
187
|
"""
|
|
181
188
|
self.check_required_credentials()
|
|
182
189
|
await self.load_markets()
|
|
@@ -231,7 +238,7 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
231
238
|
client.resolve(trades, messageHash)
|
|
232
239
|
client.resolve(trades, messageHash + ':' + symbol)
|
|
233
240
|
|
|
234
|
-
def parse_ws_trade(self, trade, market: Market = None) -> Trade:
|
|
241
|
+
def parse_ws_trade(self, trade: dict, market: Market = None) -> Trade:
|
|
235
242
|
#
|
|
236
243
|
# {
|
|
237
244
|
# "base": "usdt",
|
|
@@ -303,7 +310,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
303
310
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
304
311
|
"""
|
|
305
312
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
306
|
-
|
|
313
|
+
|
|
314
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/public/ticker_stream.md
|
|
315
|
+
|
|
307
316
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
308
317
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
309
318
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -334,15 +343,16 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
334
343
|
# }
|
|
335
344
|
#
|
|
336
345
|
marketId = self.safe_string(message, 'pair')
|
|
337
|
-
market
|
|
346
|
+
# market-ids are lowercase in REST API and uppercase in WS API
|
|
347
|
+
market = self.safe_market(marketId.lower(), None, '_')
|
|
338
348
|
symbol = market['symbol']
|
|
339
349
|
event = self.safe_string(message, 'event')
|
|
340
350
|
messageHash = event + ':' + symbol
|
|
341
|
-
result = self.parse_ticker(message)
|
|
351
|
+
result = self.parse_ticker(message, market)
|
|
352
|
+
result['symbol'] = self.safe_string(market, 'symbol') # symbol returned from REST's parseTicker is distorted for WS, so re-set it from market object
|
|
342
353
|
timestamp = self.safe_integer(message, 'timestamp')
|
|
343
|
-
datetime = self.safe_string(message, 'datetime')
|
|
344
354
|
result['timestamp'] = timestamp
|
|
345
|
-
result['datetime'] = datetime
|
|
355
|
+
result['datetime'] = self.iso8601(timestamp) # we shouldn't set "datetime" string provided by server, values are obviously wrong offset from UTC
|
|
346
356
|
self.tickers[symbol] = result
|
|
347
357
|
client.resolve(result, messageHash)
|
|
348
358
|
|
|
@@ -381,7 +391,9 @@ class bitopro(ccxt.async_support.bitopro):
|
|
|
381
391
|
async def watch_balance(self, params={}) -> Balances:
|
|
382
392
|
"""
|
|
383
393
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
384
|
-
|
|
394
|
+
|
|
395
|
+
https://github.com/bitoex/bitopro-offical-api-docs/blob/master/ws/private/user_balance_stream.md
|
|
396
|
+
|
|
385
397
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
386
398
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
387
399
|
"""
|
ccxt/pro/bitrue.py
CHANGED
|
@@ -5,14 +5,14 @@
|
|
|
5
5
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCacheBySymbolById
|
|
8
|
-
from ccxt.base.types import Balances, Int, Order, OrderBook, Str
|
|
8
|
+
from ccxt.base.types import Any, Balances, Int, Order, OrderBook, Str
|
|
9
9
|
from ccxt.async_support.base.ws.client import Client
|
|
10
10
|
from typing import List
|
|
11
11
|
|
|
12
12
|
|
|
13
13
|
class bitrue(ccxt.async_support.bitrue):
|
|
14
14
|
|
|
15
|
-
def describe(self):
|
|
15
|
+
def describe(self) -> Any:
|
|
16
16
|
return self.deep_extend(super(bitrue, self).describe(), {
|
|
17
17
|
'has': {
|
|
18
18
|
'ws': True,
|
|
@@ -36,15 +36,17 @@ class bitrue(ccxt.async_support.bitrue):
|
|
|
36
36
|
},
|
|
37
37
|
'api': {
|
|
38
38
|
'open': {
|
|
39
|
-
'
|
|
40
|
-
'
|
|
41
|
-
'
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
'
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
'
|
|
39
|
+
'v1': {
|
|
40
|
+
'private': {
|
|
41
|
+
'post': {
|
|
42
|
+
'poseidon/api/v1/listenKey': 1,
|
|
43
|
+
},
|
|
44
|
+
'put': {
|
|
45
|
+
'poseidon/api/v1/listenKey/{listenKey}': 1,
|
|
46
|
+
},
|
|
47
|
+
'delete': {
|
|
48
|
+
'poseidon/api/v1/listenKey/{listenKey}': 1,
|
|
49
|
+
},
|
|
48
50
|
},
|
|
49
51
|
},
|
|
50
52
|
},
|
|
@@ -60,7 +62,9 @@ class bitrue(ccxt.async_support.bitrue):
|
|
|
60
62
|
async def watch_balance(self, params={}) -> Balances:
|
|
61
63
|
"""
|
|
62
64
|
watch balance and get the amount of funds available for trading or funds locked in orders
|
|
63
|
-
|
|
65
|
+
|
|
66
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#balance-update
|
|
67
|
+
|
|
64
68
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
65
69
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
66
70
|
"""
|
|
@@ -166,8 +170,10 @@ class bitrue(ccxt.async_support.bitrue):
|
|
|
166
170
|
async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
167
171
|
"""
|
|
168
172
|
watches information on user orders
|
|
169
|
-
|
|
170
|
-
|
|
173
|
+
|
|
174
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#order-update
|
|
175
|
+
|
|
176
|
+
:param str symbol:
|
|
171
177
|
:param int [since]: timestamp in ms of the earliest order
|
|
172
178
|
:param int [limit]: the maximum amount of orders to return
|
|
173
179
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -401,13 +407,7 @@ class bitrue(ccxt.async_support.bitrue):
|
|
|
401
407
|
async def authenticate(self, params={}):
|
|
402
408
|
listenKey = self.safe_value(self.options, 'listenKey')
|
|
403
409
|
if listenKey is None:
|
|
404
|
-
response =
|
|
405
|
-
try:
|
|
406
|
-
response = await self.openPrivatePostPoseidonApiV1ListenKey(params)
|
|
407
|
-
except Exception as error:
|
|
408
|
-
self.options['listenKey'] = None
|
|
409
|
-
self.options['listenKeyUrl'] = None
|
|
410
|
-
return None
|
|
410
|
+
response = await self.openV1PrivatePostPoseidonApiV1ListenKey(params)
|
|
411
411
|
#
|
|
412
412
|
# {
|
|
413
413
|
# "msg": "succ",
|
|
@@ -431,7 +431,7 @@ class bitrue(ccxt.async_support.bitrue):
|
|
|
431
431
|
'listenKey': listenKey,
|
|
432
432
|
}
|
|
433
433
|
try:
|
|
434
|
-
await self.
|
|
434
|
+
await self.openV1PrivatePutPoseidonApiV1ListenKeyListenKey(self.extend(request, params))
|
|
435
435
|
#
|
|
436
436
|
# ಠ_ಠ
|
|
437
437
|
# {
|
ccxt/pro/bitstamp.py
CHANGED
|
@@ -5,22 +5,24 @@
|
|
|
5
5
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
|
|
8
|
-
from ccxt.base.types import Int, Order, OrderBook, Str, Trade
|
|
8
|
+
from ccxt.base.types import Any, Bool, Int, Order, OrderBook, Str, 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
|
|
12
12
|
from ccxt.base.errors import ArgumentsRequired
|
|
13
|
+
from ccxt.base.precise import Precise
|
|
13
14
|
|
|
14
15
|
|
|
15
16
|
class bitstamp(ccxt.async_support.bitstamp):
|
|
16
17
|
|
|
17
|
-
def describe(self):
|
|
18
|
+
def describe(self) -> Any:
|
|
18
19
|
return self.deep_extend(super(bitstamp, self).describe(), {
|
|
19
20
|
'has': {
|
|
20
21
|
'ws': True,
|
|
21
22
|
'watchOrderBook': True,
|
|
22
23
|
'watchOrders': True,
|
|
23
24
|
'watchTrades': True,
|
|
25
|
+
'watchTradesForSymbols': False,
|
|
24
26
|
'watchOHLCV': False,
|
|
25
27
|
'watchTicker': False,
|
|
26
28
|
'watchTickers': False,
|
|
@@ -295,6 +297,7 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
295
297
|
# "price_str":"1000.00"
|
|
296
298
|
# },
|
|
297
299
|
# "channel":"private-my_orders_ltcusd-4848701",
|
|
300
|
+
# "event": "order_deleted" # field only present for cancelOrder
|
|
298
301
|
# }
|
|
299
302
|
#
|
|
300
303
|
channel = self.safe_string(message, 'channel')
|
|
@@ -306,29 +309,58 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
306
309
|
subscription = self.safe_value(client.subscriptions, channel)
|
|
307
310
|
symbol = self.safe_string(subscription, 'symbol')
|
|
308
311
|
market = self.market(symbol)
|
|
312
|
+
order['event'] = self.safe_string(message, 'event')
|
|
309
313
|
parsed = self.parse_ws_order(order, market)
|
|
310
314
|
stored.append(parsed)
|
|
311
315
|
client.resolve(self.orders, channel)
|
|
312
316
|
|
|
313
317
|
def parse_ws_order(self, order, market=None):
|
|
314
318
|
#
|
|
315
|
-
#
|
|
316
|
-
# "id":"
|
|
317
|
-
# "id_str":"
|
|
318
|
-
# "order_type":
|
|
319
|
-
# "
|
|
320
|
-
# "
|
|
321
|
-
# "
|
|
322
|
-
# "
|
|
323
|
-
# "
|
|
324
|
-
# "
|
|
319
|
+
# {
|
|
320
|
+
# "id": "1894876776091648",
|
|
321
|
+
# "id_str": "1894876776091648",
|
|
322
|
+
# "order_type": 0,
|
|
323
|
+
# "order_subtype": 0,
|
|
324
|
+
# "datetime": "1751451375",
|
|
325
|
+
# "microtimestamp": "1751451375070000",
|
|
326
|
+
# "amount": 1.1,
|
|
327
|
+
# "amount_str": "1.10000000",
|
|
328
|
+
# "amount_traded": "0",
|
|
329
|
+
# "amount_at_create": "1.10000000",
|
|
330
|
+
# "price": 10.23,
|
|
331
|
+
# "price_str": "10.23",
|
|
332
|
+
# "is_liquidation": False,
|
|
333
|
+
# "trade_account_id": 0
|
|
325
334
|
# }
|
|
326
335
|
#
|
|
327
336
|
id = self.safe_string(order, 'id_str')
|
|
328
|
-
|
|
337
|
+
orderTypeRaw = self.safe_string_lower(order, 'order_type')
|
|
338
|
+
side = 'sell' if (orderTypeRaw == '1') else 'buy'
|
|
339
|
+
orderSubTypeRaw = self.safe_string_lower(order, 'order_subtype') # https://www.bitstamp.net/websocket/v2/#:~:text=order_subtype
|
|
340
|
+
orderType: Str = None
|
|
341
|
+
timeInForce: Str = None
|
|
342
|
+
if orderSubTypeRaw == '0':
|
|
343
|
+
orderType = 'limit'
|
|
344
|
+
elif orderSubTypeRaw == '2':
|
|
345
|
+
orderType = 'market'
|
|
346
|
+
elif orderSubTypeRaw == '4':
|
|
347
|
+
orderType = 'limit'
|
|
348
|
+
timeInForce = 'IOC'
|
|
349
|
+
elif orderSubTypeRaw == '6':
|
|
350
|
+
orderType = 'limit'
|
|
351
|
+
timeInForce = 'FOK'
|
|
352
|
+
elif orderSubTypeRaw == '8':
|
|
353
|
+
orderType = 'limit'
|
|
354
|
+
timeInForce = 'GTD'
|
|
329
355
|
price = self.safe_string(order, 'price_str')
|
|
330
356
|
amount = self.safe_string(order, 'amount_str')
|
|
331
|
-
|
|
357
|
+
filled = self.safe_string(order, 'amount_traded')
|
|
358
|
+
event = self.safe_string(order, 'event')
|
|
359
|
+
status = None
|
|
360
|
+
if Precise.string_eq(filled, amount):
|
|
361
|
+
status = 'closed'
|
|
362
|
+
elif event == 'order_deleted':
|
|
363
|
+
status = 'canceled'
|
|
332
364
|
timestamp = self.safe_timestamp(order, 'datetime')
|
|
333
365
|
market = self.safe_market(None, market)
|
|
334
366
|
symbol = market['symbol']
|
|
@@ -340,8 +372,8 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
340
372
|
'timestamp': timestamp,
|
|
341
373
|
'datetime': self.iso8601(timestamp),
|
|
342
374
|
'lastTradeTimestamp': None,
|
|
343
|
-
'type':
|
|
344
|
-
'timeInForce':
|
|
375
|
+
'type': orderType,
|
|
376
|
+
'timeInForce': timeInForce,
|
|
345
377
|
'postOnly': None,
|
|
346
378
|
'side': side,
|
|
347
379
|
'price': price,
|
|
@@ -350,9 +382,9 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
350
382
|
'amount': amount,
|
|
351
383
|
'cost': None,
|
|
352
384
|
'average': None,
|
|
353
|
-
'filled':
|
|
385
|
+
'filled': filled,
|
|
354
386
|
'remaining': None,
|
|
355
|
-
'status':
|
|
387
|
+
'status': status,
|
|
356
388
|
'fee': None,
|
|
357
389
|
'trades': None,
|
|
358
390
|
}, market)
|
|
@@ -416,6 +448,7 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
416
448
|
# "price_str":"1000.00"
|
|
417
449
|
# },
|
|
418
450
|
# "channel":"private-my_orders_ltcusd-4848701",
|
|
451
|
+
# "event": "order_deleted" # field only present for cancelOrder
|
|
419
452
|
# }
|
|
420
453
|
#
|
|
421
454
|
channel = self.safe_string(message, 'channel')
|
|
@@ -431,7 +464,7 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
431
464
|
method = methods[key]
|
|
432
465
|
method(client, message)
|
|
433
466
|
|
|
434
|
-
def handle_error_message(self, client: Client, message):
|
|
467
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
435
468
|
# {
|
|
436
469
|
# "event": "bts:error",
|
|
437
470
|
# "channel": '',
|
|
@@ -443,7 +476,7 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
443
476
|
data = self.safe_value(message, 'data', {})
|
|
444
477
|
code = self.safe_number(data, 'code')
|
|
445
478
|
self.throw_exactly_matched_exception(self.exceptions['exact'], code, feedback)
|
|
446
|
-
return
|
|
479
|
+
return True
|
|
447
480
|
|
|
448
481
|
def handle_message(self, client: Client, message):
|
|
449
482
|
if not self.handle_error_message(client, message):
|
|
@@ -501,7 +534,7 @@ class bitstamp(ccxt.async_support.bitstamp):
|
|
|
501
534
|
#
|
|
502
535
|
sessionToken = self.safe_string(response, 'token')
|
|
503
536
|
if sessionToken is not None:
|
|
504
|
-
userId = self.
|
|
537
|
+
userId = self.safe_string(response, 'user_id')
|
|
505
538
|
validity = self.safe_integer_product(response, 'valid_sec', 1000)
|
|
506
539
|
self.options['expiresIn'] = self.sum(time, validity)
|
|
507
540
|
self.options['userId'] = userId
|
|
@@ -5,22 +5,23 @@
|
|
|
5
5
|
|
|
6
6
|
import ccxt.async_support
|
|
7
7
|
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheByTimestamp
|
|
8
|
-
from ccxt.base.types import Int, OrderBook, Ticker, Trade
|
|
8
|
+
from ccxt.base.types import Any, Bool, Int, OrderBook, 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
|
|
12
12
|
|
|
13
13
|
|
|
14
|
-
class
|
|
14
|
+
class bittrade(ccxt.async_support.bittrade):
|
|
15
15
|
|
|
16
|
-
def describe(self):
|
|
17
|
-
return self.deep_extend(super(
|
|
16
|
+
def describe(self) -> Any:
|
|
17
|
+
return self.deep_extend(super(bittrade, self).describe(), {
|
|
18
18
|
'has': {
|
|
19
19
|
'ws': True,
|
|
20
20
|
'watchOrderBook': True,
|
|
21
21
|
'watchTickers': False, # for now
|
|
22
22
|
'watchTicker': True,
|
|
23
23
|
'watchTrades': True,
|
|
24
|
+
'watchTradesForSymbols': False,
|
|
24
25
|
'watchBalance': False, # for now
|
|
25
26
|
'watchOHLCV': True,
|
|
26
27
|
},
|
|
@@ -520,7 +521,7 @@ class huobijp(ccxt.async_support.huobijp):
|
|
|
520
521
|
def handle_ping(self, client: Client, message):
|
|
521
522
|
self.spawn(self.pong, client, message)
|
|
522
523
|
|
|
523
|
-
def handle_error_message(self, client: Client, message):
|
|
524
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
524
525
|
#
|
|
525
526
|
# {
|
|
526
527
|
# "ts": 1586323747018,
|
|
@@ -555,7 +556,7 @@ class huobijp(ccxt.async_support.huobijp):
|
|
|
555
556
|
#
|
|
556
557
|
# ________________________
|
|
557
558
|
#
|
|
558
|
-
# sometimes
|
|
559
|
+
# sometimes bittrade responds with half of a JSON response like
|
|
559
560
|
#
|
|
560
561
|
# " {"ch":"market.ethbtc.m "
|
|
561
562
|
#
|