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/coinbaseexchange.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 Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
|
|
9
|
+
from ccxt.base.types import Any, Bool, Int, Order, OrderBook, 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
|
|
@@ -18,7 +18,7 @@ from ccxt.base.errors import BadSymbol
|
|
|
18
18
|
|
|
19
19
|
class coinbaseexchange(ccxt.async_support.coinbaseexchange):
|
|
20
20
|
|
|
21
|
-
def describe(self):
|
|
21
|
+
def describe(self) -> Any:
|
|
22
22
|
return self.deep_extend(super(coinbaseexchange, self).describe(), {
|
|
23
23
|
'has': {
|
|
24
24
|
'ws': True,
|
|
@@ -163,7 +163,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
|
|
|
163
163
|
async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
164
164
|
"""
|
|
165
165
|
get the list of most recent trades for a particular symbol
|
|
166
|
-
:param str
|
|
166
|
+
:param str[] symbols: unified symbol of the market to fetch trades for
|
|
167
167
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
168
168
|
:param int [limit]: the maximum amount of trades to fetch
|
|
169
169
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -189,7 +189,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
|
|
|
189
189
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
190
190
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
191
191
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
192
|
-
:returns dict[]: a list of
|
|
192
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
193
193
|
"""
|
|
194
194
|
if symbol is None:
|
|
195
195
|
raise ArgumentsRequired(self.id + ' watchMyTrades() requires a symbol argument')
|
|
@@ -203,14 +203,14 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
|
|
|
203
203
|
limit = trades.getLimit(symbol, limit)
|
|
204
204
|
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
|
205
205
|
|
|
206
|
-
async def watch_my_trades_for_symbols(self, symbols:
|
|
206
|
+
async def watch_my_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
207
207
|
"""
|
|
208
208
|
watches information on multiple trades made by the user
|
|
209
209
|
:param str[] symbols: unified symbol of the market to fetch trades for
|
|
210
210
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
211
211
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
212
212
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
213
|
-
:returns dict[]: a list of
|
|
213
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
214
214
|
"""
|
|
215
215
|
symbols = self.market_symbols(symbols, None, False)
|
|
216
216
|
await self.load_markets()
|
|
@@ -224,7 +224,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
|
|
|
224
224
|
limit = trades.getLimit(tradeSymbol, limit)
|
|
225
225
|
return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
|
|
226
226
|
|
|
227
|
-
async def watch_orders_for_symbols(self, symbols:
|
|
227
|
+
async def watch_orders_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
228
228
|
"""
|
|
229
229
|
watches information on multiple orders made by the user
|
|
230
230
|
:param str[] symbols: unified symbol of the market to fetch orders for
|
|
@@ -841,7 +841,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
|
|
|
841
841
|
#
|
|
842
842
|
return message
|
|
843
843
|
|
|
844
|
-
def handle_error_message(self, client: Client, message):
|
|
844
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
845
845
|
#
|
|
846
846
|
# {
|
|
847
847
|
# "type": "error",
|
|
@@ -4,9 +4,9 @@
|
|
|
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
|
|
7
|
+
from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheByTimestamp
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Int, Market, OrderBook, Strings, Ticker, FundingRate, FundingRates, Trade
|
|
9
|
+
from ccxt.base.types import Any, Bool, Int, Market, OrderBook, Strings, Ticker, Tickers, FundingRate, FundingRates, 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 NotSupported
|
|
|
16
16
|
|
|
17
17
|
class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
18
18
|
|
|
19
|
-
def describe(self):
|
|
19
|
+
def describe(self) -> Any:
|
|
20
20
|
return self.deep_extend(super(coinbaseinternational, self).describe(), {
|
|
21
21
|
'has': {
|
|
22
22
|
'ws': True,
|
|
@@ -27,12 +27,12 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
27
27
|
'watchTicker': True,
|
|
28
28
|
'watchBalance': False,
|
|
29
29
|
'watchMyTrades': False,
|
|
30
|
-
'watchOHLCV':
|
|
30
|
+
'watchOHLCV': True,
|
|
31
31
|
'watchOHLCVForSymbols': False,
|
|
32
32
|
'watchOrders': False,
|
|
33
33
|
'watchOrdersForSymbols': False,
|
|
34
34
|
'watchPositions': False,
|
|
35
|
-
'watchTickers':
|
|
35
|
+
'watchTickers': True,
|
|
36
36
|
'createOrderWs': False,
|
|
37
37
|
'editOrderWs': False,
|
|
38
38
|
'cancelOrderWs': False,
|
|
@@ -58,6 +58,14 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
58
58
|
'tradesLimit': 1000,
|
|
59
59
|
'ordersLimit': 1000,
|
|
60
60
|
'myTradesLimit': 1000,
|
|
61
|
+
'timeframes': {
|
|
62
|
+
'1m': 'CANDLES_ONE_MINUTE',
|
|
63
|
+
'5m': 'CANDLES_FIVE_MINUTES',
|
|
64
|
+
'30m': 'CANDLES_THIRTY_MINUTES',
|
|
65
|
+
'1h': 'CANDLES_ONE_HOUR',
|
|
66
|
+
'2h': 'CANDLES_TWO_HOURS',
|
|
67
|
+
'1d': 'CANDLES_ONE_DAY',
|
|
68
|
+
},
|
|
61
69
|
},
|
|
62
70
|
'exceptions': {
|
|
63
71
|
'exact': {
|
|
@@ -68,26 +76,32 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
68
76
|
|
|
69
77
|
async def subscribe(self, name: str, symbols: Strings = None, params={}):
|
|
70
78
|
"""
|
|
71
|
-
|
|
79
|
+
@ignore
|
|
72
80
|
subscribes to a websocket channel
|
|
73
|
-
|
|
81
|
+
|
|
82
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
|
|
83
|
+
|
|
74
84
|
:param str name: the name of the channel
|
|
75
85
|
:param str[] [symbols]: unified market symbol
|
|
76
86
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
77
87
|
:returns dict: subscription to a websocket channel
|
|
78
88
|
"""
|
|
89
|
+
await self.load_markets()
|
|
79
90
|
self.check_required_credentials()
|
|
80
91
|
market = None
|
|
81
92
|
messageHash = name
|
|
82
|
-
productIds =
|
|
93
|
+
productIds = None
|
|
83
94
|
if symbols is None:
|
|
84
|
-
symbols = self.
|
|
95
|
+
symbols = self.get_active_symbols()
|
|
85
96
|
symbolsLength = len(symbols)
|
|
97
|
+
messageHashes = []
|
|
86
98
|
if symbolsLength > 1:
|
|
87
99
|
parsedSymbols = self.market_symbols(symbols)
|
|
88
100
|
marketIds = self.market_ids(parsedSymbols)
|
|
89
101
|
productIds = marketIds
|
|
90
|
-
|
|
102
|
+
for i in range(0, len(parsedSymbols)):
|
|
103
|
+
messageHashes.append(name + '::' + parsedSymbols[i])
|
|
104
|
+
# messageHash = messageHash + '::' + ','.join(parsedSymbols)
|
|
91
105
|
elif symbolsLength == 1:
|
|
92
106
|
market = self.market(symbols[0])
|
|
93
107
|
messageHash = name + '::' + market['symbol']
|
|
@@ -100,25 +114,32 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
100
114
|
signature = self.hmac(self.encode(auth), self.base64_to_binary(self.secret), hashlib.sha256, 'base64')
|
|
101
115
|
subscribe: dict = {
|
|
102
116
|
'type': 'SUBSCRIBE',
|
|
103
|
-
'product_ids': productIds,
|
|
117
|
+
# 'product_ids': productIds,
|
|
104
118
|
'channels': [name],
|
|
105
119
|
'time': timestamp,
|
|
106
120
|
'key': self.apiKey,
|
|
107
121
|
'passphrase': self.password,
|
|
108
122
|
'signature': signature,
|
|
109
123
|
}
|
|
124
|
+
if productIds is not None:
|
|
125
|
+
subscribe['product_ids'] = productIds
|
|
126
|
+
if symbolsLength > 1:
|
|
127
|
+
return await self.watch_multiple(url, messageHashes, self.extend(subscribe, params), messageHashes)
|
|
110
128
|
return await self.watch(url, messageHash, self.extend(subscribe, params), messageHash)
|
|
111
129
|
|
|
112
130
|
async def subscribe_multiple(self, name: str, symbols: Strings = None, params={}):
|
|
113
131
|
"""
|
|
114
|
-
|
|
132
|
+
@ignore
|
|
115
133
|
subscribes to a websocket channel using watchMultiple
|
|
116
|
-
|
|
134
|
+
|
|
135
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
|
|
136
|
+
|
|
117
137
|
:param str name: the name of the channel
|
|
118
|
-
:param string|str[] [
|
|
138
|
+
:param string|str[] [symbols]: unified market symbol
|
|
119
139
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
120
140
|
:returns dict: subscription to a websocket channel
|
|
121
141
|
"""
|
|
142
|
+
await self.load_markets()
|
|
122
143
|
self.check_required_credentials()
|
|
123
144
|
if self.is_empty(symbols):
|
|
124
145
|
symbols = self.symbols
|
|
@@ -151,21 +172,27 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
151
172
|
async def watch_funding_rate(self, symbol: str, params={}) -> FundingRate:
|
|
152
173
|
"""
|
|
153
174
|
watch the current funding rate
|
|
154
|
-
|
|
175
|
+
|
|
176
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
|
|
177
|
+
|
|
155
178
|
:param str symbol: unified market symbol
|
|
156
179
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
157
180
|
:returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
|
|
158
181
|
"""
|
|
182
|
+
await self.load_markets()
|
|
159
183
|
return await self.subscribe('RISK', [symbol], params)
|
|
160
184
|
|
|
161
185
|
async def watch_funding_rates(self, symbols: List[str], params={}) -> FundingRates:
|
|
162
186
|
"""
|
|
163
187
|
watch the funding rate for multiple markets
|
|
164
|
-
|
|
188
|
+
|
|
189
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
|
|
190
|
+
|
|
165
191
|
:param str[]|None symbols: list of unified market symbols
|
|
166
192
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
167
193
|
:returns dict: a dictionary of `funding rates structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexe by market symbols
|
|
168
194
|
"""
|
|
195
|
+
await self.load_markets()
|
|
169
196
|
fundingRate = await self.subscribe_multiple('RISK', symbols, params)
|
|
170
197
|
symbol = self.safe_string(fundingRate, 'symbol')
|
|
171
198
|
if self.newUpdates:
|
|
@@ -177,15 +204,50 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
177
204
|
async def watch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
178
205
|
"""
|
|
179
206
|
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
180
|
-
|
|
207
|
+
|
|
208
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
|
|
209
|
+
|
|
181
210
|
:param str [symbol]: unified symbol of the market to fetch the ticker for
|
|
182
211
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
212
|
+
:param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'LEVEL1'
|
|
183
213
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
184
214
|
"""
|
|
215
|
+
await self.load_markets()
|
|
185
216
|
channel = None
|
|
186
217
|
channel, params = self.handle_option_and_params(params, 'watchTicker', 'channel', 'LEVEL1')
|
|
187
218
|
return await self.subscribe(channel, [symbol], params)
|
|
188
219
|
|
|
220
|
+
def get_active_symbols(self):
|
|
221
|
+
symbols = self.symbols
|
|
222
|
+
output = []
|
|
223
|
+
for i in range(0, len(symbols)):
|
|
224
|
+
symbol = symbols[i]
|
|
225
|
+
market = self.markets[symbol]
|
|
226
|
+
if market['active']:
|
|
227
|
+
output.append(symbol)
|
|
228
|
+
return output
|
|
229
|
+
|
|
230
|
+
async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
231
|
+
"""
|
|
232
|
+
watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
233
|
+
|
|
234
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
|
|
235
|
+
|
|
236
|
+
:param str[] [symbols]: unified symbol of the market to fetch the ticker for
|
|
237
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
238
|
+
:param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'INSTLEVEL1UMENTS'
|
|
239
|
+
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
240
|
+
"""
|
|
241
|
+
await self.load_markets()
|
|
242
|
+
channel = None
|
|
243
|
+
channel, params = self.handle_option_and_params(params, 'watchTickers', 'channel', 'LEVEL1')
|
|
244
|
+
ticker = await self.subscribe(channel, symbols, params)
|
|
245
|
+
if self.newUpdates:
|
|
246
|
+
result: dict = {}
|
|
247
|
+
result[ticker['symbol']] = ticker
|
|
248
|
+
return result
|
|
249
|
+
return self.filter_by_array(self.tickers, 'symbol', symbols)
|
|
250
|
+
|
|
189
251
|
def handle_instrument(self, client: Client, message):
|
|
190
252
|
#
|
|
191
253
|
# {
|
|
@@ -243,6 +305,33 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
243
305
|
# "channel":"INSTRUMENTS",
|
|
244
306
|
# "type":"SNAPSHOT"
|
|
245
307
|
# }
|
|
308
|
+
# instruments
|
|
309
|
+
# {
|
|
310
|
+
# sequence: 0,
|
|
311
|
+
# instrument_type: 'PERP',
|
|
312
|
+
# instrument_mode: 'standard',
|
|
313
|
+
# base_asset_name: 'BTC',
|
|
314
|
+
# quote_asset_name: 'USDC',
|
|
315
|
+
# base_increment: '0.0001',
|
|
316
|
+
# quote_increment: '0.1',
|
|
317
|
+
# avg_daily_quantity: '502.8845',
|
|
318
|
+
# avg_daily_volume: '3.1495242961566668E7',
|
|
319
|
+
# total30_day_quantity: '15086.535',
|
|
320
|
+
# total30_day_volume: '9.44857288847E8',
|
|
321
|
+
# total24_hour_quantity: '5.0',
|
|
322
|
+
# total24_hour_volume: '337016.5',
|
|
323
|
+
# base_imf: '0.1',
|
|
324
|
+
# min_quantity: '0.0001',
|
|
325
|
+
# position_size_limit: '800',
|
|
326
|
+
# funding_interval: '3600000000000',
|
|
327
|
+
# trading_state: 'trading',
|
|
328
|
+
# last_updated_time: '2024-07-30T15:00:00Z',
|
|
329
|
+
# default_initial_margin: '0.2',
|
|
330
|
+
# base_asset_multiplier: '1.0',
|
|
331
|
+
# channel: 'INSTRUMENTS',
|
|
332
|
+
# type: 'SNAPSHOT',
|
|
333
|
+
# time: '2024-07-30T15:26:56.766Z',
|
|
334
|
+
# }
|
|
246
335
|
#
|
|
247
336
|
marketId = self.safe_string(ticker, 'product_id')
|
|
248
337
|
datetime = self.safe_string(ticker, 'time')
|
|
@@ -265,8 +354,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
265
354
|
'change': None,
|
|
266
355
|
'percentage': None,
|
|
267
356
|
'average': None,
|
|
268
|
-
'baseVolume': self.
|
|
269
|
-
'quoteVolume': self.
|
|
357
|
+
'baseVolume': self.safe_string_2(ticker, 'total_24_hour_quantity', 'total24_hour_quantity'),
|
|
358
|
+
'quoteVolume': self.safe_string_2(ticker, 'total_24_hour_volume', 'total24_hour_volume'),
|
|
270
359
|
})
|
|
271
360
|
|
|
272
361
|
def handle_ticker(self, client: Client, message):
|
|
@@ -338,10 +427,71 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
338
427
|
'previousClose': None,
|
|
339
428
|
})
|
|
340
429
|
|
|
430
|
+
async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
431
|
+
"""
|
|
432
|
+
watches historical candlestick data containing the open, high, low, close price, and the volume of a market
|
|
433
|
+
|
|
434
|
+
https://docs.cdp.coinbase.com/intx/docs/websocket-channels#candles-channel
|
|
435
|
+
|
|
436
|
+
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
437
|
+
:param str timeframe: the length of time each candle represents
|
|
438
|
+
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
439
|
+
:param int [limit]: the maximum amount of candles to fetch
|
|
440
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
441
|
+
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
|
442
|
+
"""
|
|
443
|
+
await self.load_markets()
|
|
444
|
+
market = self.market(symbol)
|
|
445
|
+
symbol = market['symbol']
|
|
446
|
+
options = self.safe_dict(self.options, 'timeframes', {})
|
|
447
|
+
interval = self.safe_string(options, timeframe, timeframe)
|
|
448
|
+
ohlcv = await self.subscribe(interval, [symbol], params)
|
|
449
|
+
if self.newUpdates:
|
|
450
|
+
limit = ohlcv.getLimit(symbol, limit)
|
|
451
|
+
return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
|
|
452
|
+
|
|
453
|
+
def handle_ohlcv(self, client: Client, message):
|
|
454
|
+
#
|
|
455
|
+
# {
|
|
456
|
+
# "sequence": 0,
|
|
457
|
+
# "product_id": "BTC-PERP",
|
|
458
|
+
# "channel": "CANDLES_ONE_MINUTE",
|
|
459
|
+
# "type": "SNAPSHOT",
|
|
460
|
+
# "candles": [
|
|
461
|
+
# {
|
|
462
|
+
# "time": "2023-05-10T14:58:47.000Z",
|
|
463
|
+
# "low": "28787.8",
|
|
464
|
+
# "high": "28788.8",
|
|
465
|
+
# "open": "28788.8",
|
|
466
|
+
# "close": "28787.8",
|
|
467
|
+
# "volume": "0.466"
|
|
468
|
+
# },
|
|
469
|
+
# ]
|
|
470
|
+
# }
|
|
471
|
+
#
|
|
472
|
+
messageHash = self.safe_string(message, 'channel')
|
|
473
|
+
marketId = self.safe_string(message, 'product_id')
|
|
474
|
+
market = self.safe_market(marketId)
|
|
475
|
+
symbol = market['symbol']
|
|
476
|
+
timeframe = self.find_timeframe(messageHash)
|
|
477
|
+
self.ohlcvs[symbol] = self.safe_value(self.ohlcvs, symbol, {})
|
|
478
|
+
if self.safe_value(self.ohlcvs[symbol], timeframe) is None:
|
|
479
|
+
limit = self.safe_integer(self.options, 'OHLCVLimit', 1000)
|
|
480
|
+
self.ohlcvs[symbol][timeframe] = ArrayCacheByTimestamp(limit)
|
|
481
|
+
stored = self.ohlcvs[symbol][timeframe]
|
|
482
|
+
data = self.safe_list(message, 'candles', [])
|
|
483
|
+
for i in range(0, len(data)):
|
|
484
|
+
tick = data[i]
|
|
485
|
+
parsed = self.parse_ohlcv(tick, market)
|
|
486
|
+
stored.append(parsed)
|
|
487
|
+
client.resolve(stored, messageHash + '::' + symbol)
|
|
488
|
+
|
|
341
489
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
342
490
|
"""
|
|
343
491
|
get the list of most recent trades for a particular symbol
|
|
344
|
-
|
|
492
|
+
|
|
493
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
|
|
494
|
+
|
|
345
495
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
346
496
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
347
497
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -430,7 +580,9 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
430
580
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
431
581
|
"""
|
|
432
582
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
433
|
-
|
|
583
|
+
|
|
584
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
|
|
585
|
+
|
|
434
586
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
435
587
|
:param int [limit]: the maximum amount of order book entries to return
|
|
436
588
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -441,8 +593,10 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
441
593
|
async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
|
|
442
594
|
"""
|
|
443
595
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
444
|
-
|
|
445
|
-
|
|
596
|
+
|
|
597
|
+
https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
|
|
598
|
+
|
|
599
|
+
:param str[] symbols:
|
|
446
600
|
:param int [limit]: the maximum amount of order book entries to return
|
|
447
601
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
448
602
|
:returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
|
|
@@ -575,7 +729,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
575
729
|
self.fundingRates[fundingRate['symbol']] = fundingRate
|
|
576
730
|
client.resolve(fundingRate, channel + '::' + fundingRate['symbol'])
|
|
577
731
|
|
|
578
|
-
def handle_error_message(self, client: Client, message):
|
|
732
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
579
733
|
#
|
|
580
734
|
# {
|
|
581
735
|
# message: 'Failed to subscribe',
|
|
@@ -601,7 +755,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
601
755
|
def handle_message(self, client, message):
|
|
602
756
|
if self.handle_error_message(client, message):
|
|
603
757
|
return
|
|
604
|
-
channel = self.safe_string(message, 'channel')
|
|
758
|
+
channel = self.safe_string(message, 'channel', '')
|
|
605
759
|
methods: dict = {
|
|
606
760
|
'SUBSCRIPTIONS': self.handle_subscription_status,
|
|
607
761
|
'INSTRUMENTS': self.handle_instrument,
|
|
@@ -615,6 +769,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
|
|
|
615
769
|
if type == 'error':
|
|
616
770
|
errorMessage = self.safe_string(message, 'message')
|
|
617
771
|
raise ExchangeError(errorMessage)
|
|
772
|
+
if channel.find('CANDLES') > -1:
|
|
773
|
+
self.handle_ohlcv(client, message)
|
|
618
774
|
method = self.safe_value(methods, channel)
|
|
619
775
|
if method is not None:
|
|
620
776
|
method(client, message)
|
ccxt/pro/coincatch.py
CHANGED
|
@@ -6,10 +6,9 @@
|
|
|
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, Bool, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
|
|
9
|
+
from ccxt.base.types import Any, Balances, Bool, Int, Market, 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
|
-
from typing import Any
|
|
13
12
|
from ccxt.base.errors import ExchangeError
|
|
14
13
|
from ccxt.base.errors import AuthenticationError
|
|
15
14
|
from ccxt.base.errors import ArgumentsRequired
|
|
@@ -23,7 +22,7 @@ from ccxt.base.precise import Precise
|
|
|
23
22
|
|
|
24
23
|
class coincatch(ccxt.async_support.coincatch):
|
|
25
24
|
|
|
26
|
-
def describe(self):
|
|
25
|
+
def describe(self) -> Any:
|
|
27
26
|
return self.deep_extend(super(coincatch, self).describe(), {
|
|
28
27
|
'has': {
|
|
29
28
|
'ws': True,
|
|
@@ -1299,7 +1298,7 @@ class coincatch(ccxt.async_support.coincatch):
|
|
|
1299
1298
|
'info': position,
|
|
1300
1299
|
})
|
|
1301
1300
|
|
|
1302
|
-
def handle_error_message(self, client: Client, message):
|
|
1301
|
+
def handle_error_message(self, client: Client, message) -> Bool:
|
|
1303
1302
|
#
|
|
1304
1303
|
# {event: "error", code: 30001, msg: "Channel does not exist"}
|
|
1305
1304
|
#
|
|
@@ -1403,7 +1402,7 @@ class coincatch(ccxt.async_support.coincatch):
|
|
|
1403
1402
|
del client.subscriptions[subMessageHash]
|
|
1404
1403
|
if messageHash in client.subscriptions:
|
|
1405
1404
|
del client.subscriptions[messageHash]
|
|
1406
|
-
error = UnsubscribeError(self.id + 'orderbook ' + symbol)
|
|
1405
|
+
error = UnsubscribeError(self.id + ' orderbook ' + symbol)
|
|
1407
1406
|
client.reject(error, subMessageHash)
|
|
1408
1407
|
client.resolve(True, messageHash)
|
|
1409
1408
|
|
|
@@ -1422,7 +1421,7 @@ class coincatch(ccxt.async_support.coincatch):
|
|
|
1422
1421
|
del client.subscriptions[subMessageHash]
|
|
1423
1422
|
if messageHash in client.subscriptions:
|
|
1424
1423
|
del client.subscriptions[messageHash]
|
|
1425
|
-
error = UnsubscribeError(self.id + 'trades ' + symbol)
|
|
1424
|
+
error = UnsubscribeError(self.id + ' trades ' + symbol)
|
|
1426
1425
|
client.reject(error, subMessageHash)
|
|
1427
1426
|
client.resolve(True, messageHash)
|
|
1428
1427
|
|
|
@@ -1441,7 +1440,7 @@ class coincatch(ccxt.async_support.coincatch):
|
|
|
1441
1440
|
del client.subscriptions[subMessageHash]
|
|
1442
1441
|
if messageHash in client.subscriptions:
|
|
1443
1442
|
del client.subscriptions[messageHash]
|
|
1444
|
-
error = UnsubscribeError(self.id + 'ticker ' + symbol)
|
|
1443
|
+
error = UnsubscribeError(self.id + ' ticker ' + symbol)
|
|
1445
1444
|
client.reject(error, subMessageHash)
|
|
1446
1445
|
client.resolve(True, messageHash)
|
|
1447
1446
|
|
ccxt/pro/coincheck.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
|
|
8
|
-
from ccxt.base.types import Int, Market, OrderBook, Trade
|
|
8
|
+
from ccxt.base.types import Any, Int, Market, OrderBook, 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
|
|
@@ -13,13 +13,14 @@ from ccxt.base.errors import AuthenticationError
|
|
|
13
13
|
|
|
14
14
|
class coincheck(ccxt.async_support.coincheck):
|
|
15
15
|
|
|
16
|
-
def describe(self):
|
|
16
|
+
def describe(self) -> Any:
|
|
17
17
|
return self.deep_extend(super(coincheck, self).describe(), {
|
|
18
18
|
'has': {
|
|
19
19
|
'ws': True,
|
|
20
20
|
'watchOrderBook': True,
|
|
21
21
|
'watchOrders': False,
|
|
22
22
|
'watchTrades': True,
|
|
23
|
+
'watchTradesForSymbols': False,
|
|
23
24
|
'watchOHLCV': False,
|
|
24
25
|
'watchTicker': False,
|
|
25
26
|
'watchTickers': False,
|
|
@@ -50,7 +51,9 @@ class coincheck(ccxt.async_support.coincheck):
|
|
|
50
51
|
async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
51
52
|
"""
|
|
52
53
|
watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
53
|
-
|
|
54
|
+
|
|
55
|
+
https://coincheck.com/documents/exchange/api#websocket-order-book
|
|
56
|
+
|
|
54
57
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
55
58
|
:param int [limit]: the maximum amount of order book entries to return
|
|
56
59
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -106,12 +109,14 @@ class coincheck(ccxt.async_support.coincheck):
|
|
|
106
109
|
async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
107
110
|
"""
|
|
108
111
|
watches information on multiple trades made in a market
|
|
109
|
-
|
|
112
|
+
|
|
113
|
+
https://coincheck.com/documents/exchange/api#websocket-trades
|
|
114
|
+
|
|
110
115
|
:param str symbol: unified market symbol of the market trades were made in
|
|
111
116
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
112
117
|
:param int [limit]: the maximum number of trade structures to retrieve
|
|
113
118
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
114
|
-
:returns dict[]: a list of
|
|
119
|
+
:returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
115
120
|
"""
|
|
116
121
|
await self.load_markets()
|
|
117
122
|
market = self.market(symbol)
|
|
@@ -157,7 +162,7 @@ class coincheck(ccxt.async_support.coincheck):
|
|
|
157
162
|
messageHash = 'trade:' + symbol
|
|
158
163
|
client.resolve(stored, messageHash)
|
|
159
164
|
|
|
160
|
-
def parse_ws_trade(self, trade, market: Market = None) -> Trade:
|
|
165
|
+
def parse_ws_trade(self, trade: dict, market: Market = None) -> Trade:
|
|
161
166
|
#
|
|
162
167
|
# [
|
|
163
168
|
# "1663318663", # transaction timestamp(unix time)
|