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
|
@@ -1,125 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
import json
|
|
4
|
-
from asyncio import sleep, ensure_future
|
|
5
|
-
from aiohttp import WSMsgType
|
|
6
|
-
from .functions import milliseconds, iso8601, is_json_encoded_object
|
|
7
|
-
from ccxt.async_support.base.ws.client import Client
|
|
8
|
-
from ccxt.async_support.base.ws.functions import gunzip, inflate
|
|
9
|
-
from ccxt import NetworkError, RequestTimeout, ExchangeClosedByUser
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
class AiohttpClient(Client):
|
|
13
|
-
|
|
14
|
-
proxy = None
|
|
15
|
-
|
|
16
|
-
def closed(self):
|
|
17
|
-
return (self.connection is None) or self.connection.closed
|
|
18
|
-
|
|
19
|
-
def receive(self):
|
|
20
|
-
return self.connection.receive()
|
|
21
|
-
|
|
22
|
-
# helper method for binary and text messages
|
|
23
|
-
def handle_text_or_binary_message(self, data):
|
|
24
|
-
if self.verbose:
|
|
25
|
-
self.log(iso8601(milliseconds()), 'message', data)
|
|
26
|
-
if isinstance(data, bytes):
|
|
27
|
-
data = data.decode()
|
|
28
|
-
decoded = json.loads(data) if is_json_encoded_object(data) else data
|
|
29
|
-
self.on_message_callback(self, decoded)
|
|
30
|
-
|
|
31
|
-
def handle_message(self, message):
|
|
32
|
-
# self.log(iso8601(milliseconds()), message)
|
|
33
|
-
if message.type == WSMsgType.TEXT:
|
|
34
|
-
self.handle_text_or_binary_message(message.data)
|
|
35
|
-
elif message.type == WSMsgType.BINARY:
|
|
36
|
-
data = message.data
|
|
37
|
-
if self.gunzip:
|
|
38
|
-
data = gunzip(data)
|
|
39
|
-
elif self.inflate:
|
|
40
|
-
data = inflate(data)
|
|
41
|
-
self.handle_text_or_binary_message(data)
|
|
42
|
-
# autoping is responsible for automatically replying with pong
|
|
43
|
-
# to a ping incoming from a server, we have to disable autoping
|
|
44
|
-
# with aiohttp's websockets and respond with pong manually
|
|
45
|
-
# otherwise aiohttp's websockets client won't trigger WSMsgType.PONG
|
|
46
|
-
elif message.type == WSMsgType.PING:
|
|
47
|
-
if self.verbose:
|
|
48
|
-
self.log(iso8601(milliseconds()), 'ping', message)
|
|
49
|
-
ensure_future(self.connection.pong(message.data), loop=self.asyncio_loop)
|
|
50
|
-
elif message.type == WSMsgType.PONG:
|
|
51
|
-
self.lastPong = milliseconds()
|
|
52
|
-
if self.verbose:
|
|
53
|
-
self.log(iso8601(milliseconds()), 'pong', message)
|
|
54
|
-
pass
|
|
55
|
-
elif message.type == WSMsgType.CLOSE:
|
|
56
|
-
if self.verbose:
|
|
57
|
-
self.log(iso8601(milliseconds()), 'close', self.closed(), message)
|
|
58
|
-
self.on_close(message.data)
|
|
59
|
-
elif message.type == WSMsgType.CLOSED:
|
|
60
|
-
if self.verbose:
|
|
61
|
-
self.log(iso8601(milliseconds()), 'closed', self.closed(), message)
|
|
62
|
-
self.on_close(1000)
|
|
63
|
-
elif message.type == WSMsgType.ERROR:
|
|
64
|
-
if self.verbose:
|
|
65
|
-
self.log(iso8601(milliseconds()), 'error', message)
|
|
66
|
-
error = NetworkError(str(message))
|
|
67
|
-
self.on_error(error)
|
|
68
|
-
|
|
69
|
-
def create_connection(self, session):
|
|
70
|
-
# autoping is responsible for automatically replying with pong
|
|
71
|
-
# to a ping incoming from a server, we have to disable autoping
|
|
72
|
-
# with aiohttp's websockets and respond with pong manually
|
|
73
|
-
# otherwise aiohttp's websockets client won't trigger WSMsgType.PONG
|
|
74
|
-
# call aenter here to simulate async with otherwise we get the error "await not called with future"
|
|
75
|
-
# if connecting to a non-existent endpoint
|
|
76
|
-
if (self.proxy):
|
|
77
|
-
return session.ws_connect(self.url, autoping=False, autoclose=False, headers=self.options.get('headers'), proxy=self.proxy).__aenter__()
|
|
78
|
-
return session.ws_connect(self.url, autoping=False, autoclose=False, headers=self.options.get('headers')).__aenter__()
|
|
79
|
-
|
|
80
|
-
async def send(self, message):
|
|
81
|
-
if self.verbose:
|
|
82
|
-
self.log(iso8601(milliseconds()), 'sending', message)
|
|
83
|
-
return await self.connection.send_str(message if isinstance(message, str) else json.dumps(message, separators=(',', ':')))
|
|
84
|
-
|
|
85
|
-
async def close(self, code=1000):
|
|
86
|
-
if self.verbose:
|
|
87
|
-
self.log(iso8601(milliseconds()), 'closing', code)
|
|
88
|
-
if not self.closed():
|
|
89
|
-
await self.connection.close()
|
|
90
|
-
# these will end automatically once self.closed() = True
|
|
91
|
-
# so we don't need to cancel them
|
|
92
|
-
if self.ping_looper:
|
|
93
|
-
self.ping_looper.cancel()
|
|
94
|
-
if self.receive_looper:
|
|
95
|
-
self.receive_looper.cancel() # cancel all pending futures stored in self.futures
|
|
96
|
-
for key in self.futures:
|
|
97
|
-
future = self.futures[key]
|
|
98
|
-
if not future.done():
|
|
99
|
-
if future.is_race_future:
|
|
100
|
-
future.cancel() # this is an "internal" future so we want to cancel it silently
|
|
101
|
-
else:
|
|
102
|
-
future.reject(ExchangeClosedByUser('Connection closed by the user'))
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
async def ping_loop(self):
|
|
106
|
-
if self.verbose:
|
|
107
|
-
self.log(iso8601(milliseconds()), 'ping loop')
|
|
108
|
-
while self.keepAlive and not self.closed():
|
|
109
|
-
now = milliseconds()
|
|
110
|
-
self.lastPong = now if self.lastPong is None else self.lastPong
|
|
111
|
-
if (self.lastPong + self.keepAlive * self.maxPingPongMisses) < now:
|
|
112
|
-
self.on_error(RequestTimeout('Connection to ' + self.url + ' timed out due to a ping-pong keepalive missing on time'))
|
|
113
|
-
# the following ping-clause is not necessary with aiohttp's built-in ws
|
|
114
|
-
# since it has a heartbeat option (see create_connection above)
|
|
115
|
-
# however some exchanges require a text-type ping message
|
|
116
|
-
# therefore we need this clause anyway
|
|
117
|
-
else:
|
|
118
|
-
if self.ping:
|
|
119
|
-
try:
|
|
120
|
-
await self.send(self.ping(self))
|
|
121
|
-
except Exception as e:
|
|
122
|
-
self.on_error(e)
|
|
123
|
-
else:
|
|
124
|
-
await self.connection.ping()
|
|
125
|
-
await sleep(self.keepAlive / 1000)
|
|
@@ -1,96 +0,0 @@
|
|
|
1
|
-
"""A faster version of aiohttp's websocket client that uses select and other optimizations"""
|
|
2
|
-
|
|
3
|
-
import asyncio
|
|
4
|
-
import socket
|
|
5
|
-
import collections
|
|
6
|
-
from ccxt.async_support.base.ws.aiohttp_client import AiohttpClient
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
class FastClient(AiohttpClient):
|
|
10
|
-
transport = None
|
|
11
|
-
|
|
12
|
-
def __init__(self, url, on_message_callback, on_error_callback, on_close_callback, on_connected_callback, config={}):
|
|
13
|
-
super(FastClient, self).__init__(url, on_message_callback, on_error_callback, on_close_callback, on_connected_callback, config)
|
|
14
|
-
# instead of using the deque in aiohttp we implement our own for speed
|
|
15
|
-
# https://github.com/aio-libs/aiohttp/blob/1d296d549050aa335ef542421b8b7dad788246d5/aiohttp/streams.py#L534
|
|
16
|
-
self.stack = collections.deque()
|
|
17
|
-
self.callback_scheduled = False
|
|
18
|
-
|
|
19
|
-
def receive_loop(self):
|
|
20
|
-
def handler():
|
|
21
|
-
if not self.stack:
|
|
22
|
-
self.callback_scheduled = False
|
|
23
|
-
return
|
|
24
|
-
message = self.stack.popleft()
|
|
25
|
-
try:
|
|
26
|
-
self.handle_message(message)
|
|
27
|
-
except Exception as error:
|
|
28
|
-
self.reject(error)
|
|
29
|
-
self.asyncio_loop.call_soon(handler)
|
|
30
|
-
|
|
31
|
-
def feed_data(message, size):
|
|
32
|
-
if not self.callback_scheduled:
|
|
33
|
-
self.callback_scheduled = True
|
|
34
|
-
self.asyncio_loop.call_soon(handler)
|
|
35
|
-
self.stack.append(message)
|
|
36
|
-
|
|
37
|
-
def feed_eof():
|
|
38
|
-
if self._close_code == 1000: # OK close
|
|
39
|
-
self.on_close(1000)
|
|
40
|
-
else:
|
|
41
|
-
self.on_error(1006) # ABNORMAL_CLOSURE
|
|
42
|
-
|
|
43
|
-
def wrapper(func):
|
|
44
|
-
def parse_frame(buf):
|
|
45
|
-
while self.stack:
|
|
46
|
-
self.handle_message(self.stack.popleft())
|
|
47
|
-
return func(buf)
|
|
48
|
-
return parse_frame
|
|
49
|
-
|
|
50
|
-
async def close(code=1000, message=b''):
|
|
51
|
-
# this is needed because our other wrappers break the closing process
|
|
52
|
-
# we also don't wait for a response to the close message to speed it up
|
|
53
|
-
# this code is adapted from aiohttp client_ws.py
|
|
54
|
-
_self = self.connection
|
|
55
|
-
if not _self._closed:
|
|
56
|
-
_self._cancel_heartbeat()
|
|
57
|
-
_self._closed = True
|
|
58
|
-
try:
|
|
59
|
-
await _self._writer.close(code, message)
|
|
60
|
-
_self._response.close()
|
|
61
|
-
self._close_code = 1000
|
|
62
|
-
except asyncio.CancelledError:
|
|
63
|
-
_self._response.close()
|
|
64
|
-
_self._close_code = 1006
|
|
65
|
-
raise
|
|
66
|
-
except Exception as exc:
|
|
67
|
-
_self._close_code = 1006
|
|
68
|
-
_self._exception = exc
|
|
69
|
-
return True
|
|
70
|
-
|
|
71
|
-
connection = self.connection._conn
|
|
72
|
-
if connection.closed:
|
|
73
|
-
# connection got terminated after the connection was made and before the receive loop ran
|
|
74
|
-
self.on_close(1006)
|
|
75
|
-
return
|
|
76
|
-
self.transport = connection.transport
|
|
77
|
-
# increase the RCVBUF so that the tcp window size can be larger
|
|
78
|
-
sock = self.transport.get_extra_info('socket')
|
|
79
|
-
current_size = sock.getsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF)
|
|
80
|
-
# 2 mebibytes is a performance value
|
|
81
|
-
new_size = max(current_size, 2097152)
|
|
82
|
-
sock.setsockopt(socket.SOL_SOCKET, socket.SO_RCVBUF, new_size)
|
|
83
|
-
|
|
84
|
-
ws_reader = connection.protocol._payload_parser
|
|
85
|
-
ws_reader.parse_frame = wrapper(ws_reader.parse_frame)
|
|
86
|
-
ws_reader.queue.feed_data = feed_data
|
|
87
|
-
ws_reader.queue.feed_eof = feed_eof
|
|
88
|
-
self.connection.close = close
|
|
89
|
-
# return a future so super class won't complain
|
|
90
|
-
return asyncio.sleep(0)
|
|
91
|
-
|
|
92
|
-
def reset(self, error):
|
|
93
|
-
super(FastClient, self).reset(error)
|
|
94
|
-
self.stack.clear()
|
|
95
|
-
if self.transport:
|
|
96
|
-
self.transport.abort()
|
ccxt/async_support/bitbay.py
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
-
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
-
|
|
6
|
-
from ccxt.async_support.zonda import zonda
|
|
7
|
-
from ccxt.abstract.bitbay import ImplicitAPI
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class bitbay(zonda, ImplicitAPI):
|
|
11
|
-
|
|
12
|
-
def describe(self):
|
|
13
|
-
return self.deep_extend(super(bitbay, self).describe(), {
|
|
14
|
-
'id': 'bitbay',
|
|
15
|
-
'name': 'BitBay',
|
|
16
|
-
'alias': True,
|
|
17
|
-
})
|
ccxt/async_support/bitcoincom.py
DELETED
|
@@ -1,17 +0,0 @@
|
|
|
1
|
-
# -*- coding: utf-8 -*-
|
|
2
|
-
|
|
3
|
-
# PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
|
|
4
|
-
# https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
|
|
5
|
-
|
|
6
|
-
from ccxt.async_support.fmfwio import fmfwio
|
|
7
|
-
from ccxt.abstract.bitcoincom import ImplicitAPI
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
class bitcoincom(fmfwio, ImplicitAPI):
|
|
11
|
-
|
|
12
|
-
def describe(self):
|
|
13
|
-
return self.deep_extend(super(bitcoincom, self).describe(), {
|
|
14
|
-
'id': 'bitcoincom',
|
|
15
|
-
'name': 'Bitcoin.com',
|
|
16
|
-
'alias': True,
|
|
17
|
-
})
|