ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +39 -35
- ccxt/abantether.py +8 -8
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/apex.py +31 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +106 -48
- ccxt/abstract/binancecoinm.py +106 -48
- ccxt/abstract/binanceus.py +141 -83
- ccxt/abstract/binanceusdm.py +106 -48
- ccxt/abstract/bingx.py +50 -1
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +67 -0
- ccxt/abstract/bitmart.py +19 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitrue.py +68 -68
- ccxt/abstract/bitstamp.py +1 -0
- ccxt/abstract/blofin.py +30 -0
- ccxt/abstract/btcbox.py +2 -0
- ccxt/abstract/bybit.py +28 -13
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbaseexchange.py +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/cryptocom.py +16 -0
- ccxt/abstract/cryptomus.py +20 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/derive.py +117 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/foxbit.py +26 -0
- ccxt/abstract/gate.py +19 -0
- ccxt/abstract/gateio.py +19 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hibachi.py +26 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +1 -0
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +10 -0
- ccxt/abstract/kucoinfutures.py +18 -0
- ccxt/abstract/lbank.py +2 -1
- ccxt/abstract/luno.py +1 -0
- ccxt/abstract/mexc.py +2 -0
- ccxt/abstract/modetrade.py +119 -0
- ccxt/abstract/myokx.py +349 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +25 -0
- ccxt/abstract/okxus.py +349 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/paradex.py +23 -0
- ccxt/abstract/phemex.py +2 -0
- ccxt/abstract/poloniex.py +36 -0
- ccxt/abstract/tradeogre.py +3 -1
- ccxt/abstract/upbit.py +51 -34
- ccxt/abstract/whitebit.py +16 -0
- ccxt/abstract/woo.py +64 -6
- ccxt/abstract/xt.py +10 -5
- ccxt/afratether.py +7 -7
- ccxt/alpaca.py +828 -51
- ccxt/apex.py +1875 -0
- ccxt/arzinja.py +7 -7
- ccxt/arzplus.py +9 -9
- ccxt/ascendex.py +501 -306
- ccxt/async_support/__init__.py +39 -35
- ccxt/async_support/abantether.py +8 -8
- ccxt/async_support/afratether.py +9 -9
- ccxt/async_support/alpaca.py +828 -51
- ccxt/async_support/apex.py +1875 -0
- ccxt/async_support/arzinja.py +10 -10
- ccxt/async_support/arzplus.py +12 -12
- ccxt/async_support/ascendex.py +502 -306
- ccxt/async_support/base/exchange.py +303 -89
- ccxt/async_support/base/ws/cache.py +9 -3
- ccxt/async_support/base/ws/client.py +173 -38
- ccxt/async_support/base/ws/future.py +25 -37
- ccxt/async_support/bequant.py +5 -3
- ccxt/async_support/bigone.py +279 -144
- ccxt/async_support/binance.py +2347 -1158
- ccxt/async_support/binancecoinm.py +9 -3
- ccxt/async_support/binanceus.py +17 -3
- ccxt/async_support/binanceusdm.py +9 -4
- ccxt/async_support/bingx.py +2962 -920
- ccxt/async_support/bit2c.py +147 -27
- ccxt/async_support/bitbank.py +151 -23
- ccxt/async_support/bitbns.py +104 -30
- ccxt/async_support/bitfinex.py +3291 -1113
- ccxt/async_support/bitflyer.py +202 -27
- ccxt/async_support/bitget.py +3683 -1538
- ccxt/async_support/bithumb.py +195 -38
- ccxt/async_support/bitimen.py +12 -12
- ccxt/async_support/bitir.py +38 -38
- ccxt/async_support/bitmart.py +1288 -350
- ccxt/async_support/bitmex.py +260 -75
- ccxt/async_support/bitopro.py +262 -62
- ccxt/async_support/bitpin.py +17 -16
- ccxt/async_support/bitrue.py +459 -290
- ccxt/async_support/bitso.py +199 -54
- ccxt/async_support/bitstamp.py +230 -96
- ccxt/async_support/bitteam.py +167 -25
- ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
- ccxt/async_support/bitvavo.py +213 -49
- ccxt/async_support/blockchaincom.py +160 -46
- ccxt/async_support/blofin.py +502 -120
- ccxt/async_support/btcalpha.py +169 -31
- ccxt/async_support/btcbox.py +292 -23
- ccxt/async_support/btcmarkets.py +211 -58
- ccxt/async_support/btcturk.py +161 -38
- ccxt/async_support/bybit.py +1775 -1030
- ccxt/async_support/cex.py +1440 -1303
- ccxt/async_support/coinbase.py +724 -212
- ccxt/async_support/coinbaseadvanced.py +2 -1
- ccxt/async_support/coinbaseexchange.py +388 -89
- ccxt/async_support/coinbaseinternational.py +412 -57
- ccxt/async_support/coincatch.py +177 -78
- ccxt/async_support/coincheck.py +135 -19
- ccxt/async_support/coinex.py +606 -232
- ccxt/async_support/coinmate.py +189 -63
- ccxt/async_support/coinmetro.py +195 -54
- ccxt/async_support/coinone.py +158 -51
- ccxt/async_support/coinsph.py +336 -61
- ccxt/async_support/coinspot.py +151 -52
- ccxt/async_support/cryptocom.py +661 -111
- ccxt/async_support/cryptomus.py +1137 -0
- ccxt/async_support/defx.py +2071 -0
- ccxt/async_support/delta.py +299 -99
- ccxt/async_support/deribit.py +348 -126
- ccxt/async_support/derive.py +2572 -0
- ccxt/async_support/digifinex.py +430 -214
- ccxt/async_support/ellipx.py +2029 -0
- ccxt/async_support/eterex.py +10 -10
- ccxt/async_support/excoino.py +31 -31
- ccxt/async_support/exir.py +14 -14
- ccxt/async_support/exmo.py +344 -131
- ccxt/async_support/exnovin.py +10 -10
- ccxt/async_support/farhadexchange.py +12 -12
- ccxt/async_support/fmfwio.py +2 -1
- ccxt/async_support/foxbit.py +1935 -0
- ccxt/async_support/gate.py +1351 -529
- ccxt/async_support/gateio.py +2 -1
- ccxt/async_support/gemini.py +144 -39
- ccxt/async_support/hashkey.py +152 -109
- ccxt/async_support/hibachi.py +2080 -0
- ccxt/async_support/hitbtc.py +395 -167
- ccxt/async_support/hitobit.py +12 -12
- ccxt/async_support/hollaex.py +307 -119
- ccxt/async_support/htx.py +851 -383
- ccxt/async_support/huobi.py +2 -1
- ccxt/async_support/hyperliquid.py +1848 -536
- ccxt/async_support/independentreserve.py +288 -15
- ccxt/async_support/indodax.py +190 -33
- ccxt/async_support/jibitex.py +12 -12
- ccxt/async_support/kraken.py +795 -351
- ccxt/async_support/krakenfutures.py +214 -62
- ccxt/async_support/kucoin.py +715 -396
- ccxt/async_support/kucoinfutures.py +652 -89
- ccxt/async_support/latoken.py +217 -113
- ccxt/async_support/lbank.py +425 -97
- ccxt/async_support/luno.py +382 -35
- ccxt/async_support/mercado.py +113 -6
- ccxt/async_support/mexc.py +874 -437
- ccxt/async_support/modetrade.py +2818 -0
- ccxt/async_support/myokx.py +54 -0
- ccxt/async_support/ndax.py +221 -64
- ccxt/async_support/nobitex.py +31 -37
- ccxt/async_support/novadax.py +190 -34
- ccxt/async_support/oceanex.py +217 -28
- ccxt/async_support/okcoin.py +253 -145
- ccxt/async_support/okexchange.py +11 -11
- ccxt/async_support/okx.py +1088 -351
- ccxt/async_support/okxus.py +54 -0
- ccxt/async_support/ompfinex.py +25 -24
- ccxt/async_support/onetrading.py +213 -392
- ccxt/async_support/oxfun.py +245 -166
- ccxt/async_support/p2b.py +151 -29
- ccxt/async_support/paradex.py +562 -49
- ccxt/async_support/paymium.py +82 -19
- ccxt/async_support/phemex.py +713 -172
- ccxt/async_support/poloniex.py +1602 -283
- ccxt/async_support/probit.py +224 -95
- ccxt/async_support/ramzinex.py +30 -27
- ccxt/async_support/sarmayex.py +9 -9
- ccxt/async_support/sarrafex.py +13 -13
- ccxt/async_support/tabdeal.py +14 -13
- ccxt/async_support/tetherland.py +9 -9
- ccxt/async_support/timex.py +210 -51
- ccxt/async_support/tokocrypto.py +167 -47
- ccxt/async_support/tradeogre.py +266 -31
- ccxt/async_support/twox.py +9 -9
- ccxt/async_support/ubitex.py +12 -12
- ccxt/async_support/upbit.py +568 -165
- ccxt/async_support/vertex.py +160 -32
- ccxt/async_support/wallex.py +12 -12
- ccxt/async_support/wavesexchange.py +165 -30
- ccxt/async_support/whitebit.py +975 -127
- ccxt/async_support/woo.py +1918 -1016
- ccxt/async_support/woofipro.py +433 -141
- ccxt/async_support/xt.py +649 -193
- ccxt/async_support/yobit.py +195 -70
- ccxt/async_support/zaif.py +91 -15
- ccxt/async_support/zonda.py +151 -36
- ccxt/base/decimal_to_precision.py +14 -10
- ccxt/base/errors.py +49 -18
- ccxt/base/exchange.py +1556 -450
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +114 -6
- ccxt/bequant.py +5 -3
- ccxt/bigone.py +279 -144
- ccxt/binance.py +2347 -1158
- ccxt/binancecoinm.py +9 -3
- ccxt/binanceus.py +17 -3
- ccxt/binanceusdm.py +9 -4
- ccxt/bingx.py +2962 -920
- ccxt/bit2c.py +147 -27
- ccxt/bitbank.py +151 -23
- ccxt/bitbns.py +104 -30
- ccxt/bitfinex.py +3290 -1113
- ccxt/bitflyer.py +202 -27
- ccxt/bitget.py +3683 -1538
- ccxt/bithumb.py +194 -38
- ccxt/bitimen.py +9 -9
- ccxt/bitir.py +35 -35
- ccxt/bitmart.py +1288 -350
- ccxt/bitmex.py +260 -75
- ccxt/bitopro.py +262 -62
- ccxt/bitpin.py +15 -14
- ccxt/bitrue.py +459 -290
- ccxt/bitso.py +199 -54
- ccxt/bitstamp.py +230 -96
- ccxt/bitteam.py +167 -25
- ccxt/{huobijp.py → bittrade.py} +158 -30
- ccxt/bitvavo.py +213 -49
- ccxt/blockchaincom.py +160 -46
- ccxt/blofin.py +502 -120
- ccxt/btcalpha.py +169 -31
- ccxt/btcbox.py +291 -23
- ccxt/btcmarkets.py +211 -58
- ccxt/btcturk.py +161 -38
- ccxt/bybit.py +1775 -1030
- ccxt/cex.py +1439 -1303
- ccxt/coinbase.py +724 -212
- ccxt/coinbaseadvanced.py +2 -1
- ccxt/coinbaseexchange.py +388 -89
- ccxt/coinbaseinternational.py +412 -57
- ccxt/coincatch.py +177 -78
- ccxt/coincheck.py +135 -19
- ccxt/coinex.py +606 -232
- ccxt/coinmate.py +189 -63
- ccxt/coinmetro.py +194 -54
- ccxt/coinone.py +158 -51
- ccxt/coinsph.py +336 -61
- ccxt/coinspot.py +151 -52
- ccxt/cryptocom.py +661 -111
- ccxt/cryptomus.py +1137 -0
- ccxt/defx.py +2070 -0
- ccxt/delta.py +299 -99
- ccxt/deribit.py +348 -126
- ccxt/derive.py +2571 -0
- ccxt/digifinex.py +430 -214
- ccxt/ellipx.py +2029 -0
- ccxt/eterex.py +7 -7
- ccxt/excoino.py +29 -29
- ccxt/exir.py +11 -11
- ccxt/exmo.py +343 -131
- ccxt/exnovin.py +8 -8
- ccxt/farhadexchange.py +10 -10
- ccxt/fmfwio.py +2 -1
- ccxt/foxbit.py +1935 -0
- ccxt/gate.py +1351 -529
- ccxt/gateio.py +2 -1
- ccxt/gemini.py +144 -39
- ccxt/hashkey.py +152 -109
- ccxt/hibachi.py +2079 -0
- ccxt/hitbtc.py +395 -167
- ccxt/hitobit.py +9 -9
- ccxt/hollaex.py +307 -119
- ccxt/htx.py +851 -383
- ccxt/huobi.py +2 -1
- ccxt/hyperliquid.py +1848 -536
- ccxt/independentreserve.py +287 -15
- ccxt/indodax.py +190 -33
- ccxt/jibitex.py +9 -9
- ccxt/kraken.py +794 -351
- ccxt/krakenfutures.py +214 -62
- ccxt/kucoin.py +715 -396
- ccxt/kucoinfutures.py +652 -89
- ccxt/latoken.py +217 -113
- ccxt/lbank.py +425 -97
- ccxt/luno.py +382 -35
- ccxt/mercado.py +113 -6
- ccxt/mexc.py +873 -437
- ccxt/modetrade.py +2818 -0
- ccxt/myokx.py +54 -0
- ccxt/ndax.py +221 -64
- ccxt/nobitex.py +29 -35
- ccxt/novadax.py +190 -34
- ccxt/oceanex.py +217 -28
- ccxt/okcoin.py +253 -145
- ccxt/okexchange.py +9 -9
- ccxt/okx.py +1088 -351
- ccxt/okxus.py +54 -0
- ccxt/ompfinex.py +22 -21
- ccxt/onetrading.py +213 -392
- ccxt/oxfun.py +245 -166
- ccxt/p2b.py +151 -29
- ccxt/paradex.py +562 -49
- ccxt/paymium.py +82 -19
- ccxt/phemex.py +712 -172
- ccxt/poloniex.py +1601 -283
- ccxt/pro/__init__.py +76 -17
- ccxt/pro/alpaca.py +21 -6
- ccxt/pro/apex.py +984 -0
- ccxt/pro/ascendex.py +58 -10
- ccxt/pro/bequant.py +6 -1
- ccxt/pro/binance.py +728 -156
- ccxt/pro/binancecoinm.py +6 -2
- ccxt/pro/binanceus.py +8 -4
- ccxt/pro/binanceusdm.py +7 -2
- ccxt/pro/bingx.py +333 -142
- ccxt/pro/bitfinex.py +727 -262
- ccxt/pro/bitget.py +570 -79
- ccxt/pro/bithumb.py +20 -6
- ccxt/pro/bitmart.py +216 -87
- ccxt/pro/bitmex.py +47 -9
- ccxt/pro/bitopro.py +26 -14
- ccxt/pro/bitrue.py +22 -22
- ccxt/pro/bitstamp.py +54 -21
- ccxt/pro/{huobijp.py → bittrade.py} +7 -6
- ccxt/pro/bitvavo.py +191 -67
- ccxt/pro/blockchaincom.py +21 -8
- ccxt/pro/blofin.py +9 -1
- ccxt/pro/bybit.py +632 -245
- ccxt/pro/cex.py +59 -24
- ccxt/pro/coinbase.py +102 -73
- ccxt/pro/coinbaseadvanced.py +2 -1
- ccxt/pro/coinbaseexchange.py +8 -8
- ccxt/pro/coinbaseinternational.py +181 -25
- ccxt/pro/coincatch.py +6 -7
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -665
- ccxt/pro/coinone.py +16 -9
- ccxt/pro/cryptocom.py +448 -45
- ccxt/pro/defx.py +831 -0
- ccxt/pro/deribit.py +150 -14
- ccxt/pro/derive.py +704 -0
- ccxt/pro/exmo.py +239 -6
- ccxt/pro/gate.py +623 -65
- ccxt/pro/gateio.py +2 -1
- ccxt/pro/gemini.py +27 -11
- ccxt/pro/hashkey.py +2 -2
- ccxt/pro/hitbtc.py +196 -91
- ccxt/pro/hollaex.py +23 -7
- ccxt/pro/htx.py +51 -14
- ccxt/pro/huobi.py +2 -1
- ccxt/pro/hyperliquid.py +591 -27
- ccxt/pro/independentreserve.py +9 -6
- ccxt/pro/kraken.py +640 -320
- ccxt/pro/krakenfutures.py +62 -35
- ccxt/pro/kucoin.py +267 -46
- ccxt/pro/kucoinfutures.py +165 -21
- ccxt/pro/lbank.py +102 -21
- ccxt/pro/luno.py +12 -8
- ccxt/pro/mexc.py +877 -111
- ccxt/pro/modetrade.py +1271 -0
- ccxt/pro/myokx.py +38 -0
- ccxt/pro/ndax.py +15 -2
- ccxt/pro/okcoin.py +23 -4
- ccxt/pro/okx.py +573 -98
- ccxt/pro/okxus.py +38 -0
- ccxt/pro/onetrading.py +30 -13
- ccxt/pro/oxfun.py +131 -27
- ccxt/pro/p2b.py +88 -22
- ccxt/pro/paradex.py +3 -3
- ccxt/pro/phemex.py +75 -21
- ccxt/pro/poloniex.py +124 -41
- ccxt/pro/probit.py +87 -80
- ccxt/pro/tradeogre.py +272 -0
- ccxt/pro/upbit.py +152 -12
- ccxt/pro/vertex.py +8 -3
- ccxt/pro/whitebit.py +58 -5
- ccxt/pro/woo.py +228 -37
- ccxt/pro/woofipro.py +106 -18
- ccxt/pro/xt.py +111 -5
- ccxt/probit.py +224 -95
- ccxt/protobuf/__init__.py +0 -0
- ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
- ccxt/protobuf/mexc/__init__.py +0 -0
- ccxt/ramzinex.py +28 -25
- ccxt/sarmayex.py +7 -7
- ccxt/sarrafex.py +10 -10
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/tabdeal.py +12 -11
- ccxt/test/tests_async.py +261 -57
- ccxt/test/tests_helpers.py +1 -3
- ccxt/test/tests_init.py +4 -3
- ccxt/test/tests_sync.py +261 -57
- ccxt/tetherland.py +7 -7
- ccxt/timex.py +210 -51
- ccxt/tokocrypto.py +167 -47
- ccxt/tradeogre.py +266 -31
- ccxt/twox.py +7 -7
- ccxt/ubitex.py +9 -9
- ccxt/upbit.py +568 -165
- ccxt/vertex.py +160 -32
- ccxt/wallex.py +9 -9
- ccxt/wavesexchange.py +165 -30
- ccxt/whitebit.py +975 -127
- ccxt/woo.py +1917 -1016
- ccxt/woofipro.py +432 -141
- ccxt/xt.py +649 -193
- ccxt/yobit.py +194 -70
- ccxt/zaif.py +91 -15
- ccxt/zonda.py +151 -36
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
- ccxt_ir-4.5.0.dist-info/RECORD +743 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
- ccxt/__test__.py +0 -7
- ccxt/abstract/ace.py +0 -15
- ccxt/abstract/bitbay.py +0 -53
- ccxt/abstract/bitcoincom.py +0 -115
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/bitpanda.py +0 -35
- ccxt/abstract/bl3p.py +0 -19
- ccxt/abstract/coinlist.py +0 -54
- ccxt/abstract/currencycom.py +0 -68
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/abstract/idex.py +0 -26
- ccxt/abstract/kuna.py +0 -182
- ccxt/abstract/lykke.py +0 -29
- ccxt/abstract/poloniexfutures.py +0 -48
- ccxt/abstract/wazirx.py +0 -30
- ccxt/ace.py +0 -1012
- ccxt/async_support/ace.py +0 -1012
- ccxt/async_support/base/ws/aiohttp_client.py +0 -125
- ccxt/async_support/base/ws/fast_client.py +0 -96
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitcoincom.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3552
- ccxt/async_support/bitpanda.py +0 -16
- ccxt/async_support/bl3p.py +0 -485
- ccxt/async_support/coinlist.py +0 -2243
- ccxt/async_support/currencycom.py +0 -1950
- ccxt/async_support/hitbtc3.py +0 -16
- ccxt/async_support/idex.py +0 -1766
- ccxt/async_support/kuna.py +0 -1841
- ccxt/async_support/lykke.py +0 -1270
- ccxt/async_support/poloniexfutures.py +0 -1717
- ccxt/async_support/wazirx.py +0 -1224
- ccxt/bitbay.py +0 -17
- ccxt/bitcoincom.py +0 -17
- ccxt/bitfinex2.py +0 -3552
- ccxt/bitpanda.py +0 -16
- ccxt/bl3p.py +0 -485
- ccxt/coinlist.py +0 -2243
- ccxt/currencycom.py +0 -1950
- ccxt/hitbtc3.py +0 -16
- ccxt/idex.py +0 -1766
- ccxt/kuna.py +0 -1841
- ccxt/lykke.py +0 -1270
- ccxt/poloniexfutures.py +0 -1717
- ccxt/pro/bitcoincom.py +0 -34
- ccxt/pro/bitfinex2.py +0 -1083
- ccxt/pro/bitpanda.py +0 -15
- ccxt/pro/currencycom.py +0 -536
- ccxt/pro/idex.py +0 -672
- ccxt/pro/poloniexfutures.py +0 -990
- ccxt/pro/wazirx.py +0 -749
- ccxt/test/base/__init__.py +0 -29
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -109
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -31
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_liquidation.py +0 -50
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -193
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -33
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -69
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -353
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -92
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt/test/test_async.py +0 -1649
- ccxt/test/test_sync.py +0 -1648
- ccxt/wazirx.py +0 -1224
- ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/async_support/bitrue.py
CHANGED
|
@@ -8,7 +8,7 @@ from ccxt.abstract.bitrue import ImplicitAPI
|
|
|
8
8
|
import asyncio
|
|
9
9
|
import hashlib
|
|
10
10
|
import json
|
|
11
|
-
from ccxt.base.types import Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
|
11
|
+
from ccxt.base.types import Any, Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
|
12
12
|
from typing import List
|
|
13
13
|
from ccxt.base.errors import ExchangeError
|
|
14
14
|
from ccxt.base.errors import AuthenticationError
|
|
@@ -34,12 +34,12 @@ from ccxt.base.precise import Precise
|
|
|
34
34
|
|
|
35
35
|
class bitrue(Exchange, ImplicitAPI):
|
|
36
36
|
|
|
37
|
-
def describe(self):
|
|
37
|
+
def describe(self) -> Any:
|
|
38
38
|
return self.deep_extend(super(bitrue, self).describe(), {
|
|
39
39
|
'id': 'bitrue',
|
|
40
40
|
'name': 'Bitrue',
|
|
41
41
|
'countries': ['SG'], # Singapore, Malta
|
|
42
|
-
'rateLimit':
|
|
42
|
+
'rateLimit': 10,
|
|
43
43
|
'certified': False,
|
|
44
44
|
'version': 'v1',
|
|
45
45
|
'pro': True,
|
|
@@ -51,19 +51,32 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
51
51
|
'swap': True,
|
|
52
52
|
'future': False,
|
|
53
53
|
'option': False,
|
|
54
|
+
'addMargin': False,
|
|
55
|
+
'borrowCrossMargin': False,
|
|
56
|
+
'borrowIsolatedMargin': False,
|
|
57
|
+
'borrowMargin': False,
|
|
54
58
|
'cancelAllOrders': True,
|
|
55
59
|
'cancelOrder': True,
|
|
60
|
+
'closeAllPositions': False,
|
|
61
|
+
'closePosition': False,
|
|
56
62
|
'createMarketBuyOrderWithCost': True,
|
|
57
63
|
'createMarketOrderWithCost': False,
|
|
58
64
|
'createMarketSellOrderWithCost': False,
|
|
59
65
|
'createOrder': True,
|
|
66
|
+
'createOrderWithTakeProfitAndStopLoss': False,
|
|
67
|
+
'createOrderWithTakeProfitAndStopLossWs': False,
|
|
68
|
+
'createReduceOnlyOrder': True,
|
|
60
69
|
'createStopLimitOrder': True,
|
|
61
70
|
'createStopMarketOrder': True,
|
|
62
71
|
'createStopOrder': True,
|
|
63
72
|
'fetchBalance': True,
|
|
64
73
|
'fetchBidsAsks': True,
|
|
74
|
+
'fetchBorrowInterest': False,
|
|
75
|
+
'fetchBorrowRate': False,
|
|
65
76
|
'fetchBorrowRateHistories': False,
|
|
66
77
|
'fetchBorrowRateHistory': False,
|
|
78
|
+
'fetchBorrowRates': False,
|
|
79
|
+
'fetchBorrowRatesPerSymbol': False,
|
|
67
80
|
'fetchClosedOrders': True,
|
|
68
81
|
'fetchCrossBorrowRate': False,
|
|
69
82
|
'fetchCrossBorrowRates': False,
|
|
@@ -73,18 +86,51 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
73
86
|
'fetchDepositsWithdrawals': False,
|
|
74
87
|
'fetchDepositWithdrawFee': 'emulated',
|
|
75
88
|
'fetchDepositWithdrawFees': True,
|
|
89
|
+
'fetchFundingHistory': False,
|
|
90
|
+
'fetchFundingInterval': False,
|
|
91
|
+
'fetchFundingIntervals': False,
|
|
76
92
|
'fetchFundingRate': False,
|
|
93
|
+
'fetchFundingRateHistory': False,
|
|
94
|
+
'fetchFundingRates': False,
|
|
95
|
+
'fetchGreeks': False,
|
|
96
|
+
'fetchIndexOHLCV': False,
|
|
77
97
|
'fetchIsolatedBorrowRate': False,
|
|
78
98
|
'fetchIsolatedBorrowRates': False,
|
|
99
|
+
'fetchIsolatedPositions': False,
|
|
100
|
+
'fetchLeverage': False,
|
|
101
|
+
'fetchLeverages': False,
|
|
102
|
+
'fetchLeverageTiers': False,
|
|
103
|
+
'fetchLiquidations': False,
|
|
104
|
+
'fetchLongShortRatio': False,
|
|
105
|
+
'fetchLongShortRatioHistory': False,
|
|
106
|
+
'fetchMarginAdjustmentHistory': False,
|
|
79
107
|
'fetchMarginMode': False,
|
|
108
|
+
'fetchMarginModes': False,
|
|
109
|
+
'fetchMarketLeverageTiers': False,
|
|
80
110
|
'fetchMarkets': True,
|
|
111
|
+
'fetchMarkOHLCV': False,
|
|
112
|
+
'fetchMarkPrices': False,
|
|
113
|
+
'fetchMyLiquidations': False,
|
|
114
|
+
'fetchMySettlementHistory': False,
|
|
81
115
|
'fetchMyTrades': True,
|
|
82
116
|
'fetchOHLCV': True,
|
|
117
|
+
'fetchOpenInterest': False,
|
|
118
|
+
'fetchOpenInterestHistory': False,
|
|
119
|
+
'fetchOpenInterests': False,
|
|
83
120
|
'fetchOpenOrders': True,
|
|
121
|
+
'fetchOption': False,
|
|
122
|
+
'fetchOptionChain': False,
|
|
84
123
|
'fetchOrder': True,
|
|
85
124
|
'fetchOrderBook': True,
|
|
86
125
|
'fetchOrders': False,
|
|
126
|
+
'fetchPosition': False,
|
|
127
|
+
'fetchPositionHistory': False,
|
|
87
128
|
'fetchPositionMode': False,
|
|
129
|
+
'fetchPositions': False,
|
|
130
|
+
'fetchPositionsHistory': False,
|
|
131
|
+
'fetchPositionsRisk': False,
|
|
132
|
+
'fetchPremiumIndexOHLCV': False,
|
|
133
|
+
'fetchSettlementHistory': False,
|
|
88
134
|
'fetchStatus': True,
|
|
89
135
|
'fetchTicker': True,
|
|
90
136
|
'fetchTickers': True,
|
|
@@ -95,9 +141,15 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
95
141
|
'fetchTransactionFees': False,
|
|
96
142
|
'fetchTransactions': False,
|
|
97
143
|
'fetchTransfers': True,
|
|
144
|
+
'fetchVolatilityHistory': False,
|
|
98
145
|
'fetchWithdrawals': True,
|
|
146
|
+
'reduceMargin': False,
|
|
147
|
+
'repayCrossMargin': False,
|
|
148
|
+
'repayIsolatedMargin': False,
|
|
99
149
|
'setLeverage': True,
|
|
100
150
|
'setMargin': True,
|
|
151
|
+
'setMarginMode': False,
|
|
152
|
+
'setPositionMode': False,
|
|
101
153
|
'transfer': True,
|
|
102
154
|
'withdraw': True,
|
|
103
155
|
},
|
|
@@ -113,7 +165,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
113
165
|
'1w': '1W',
|
|
114
166
|
},
|
|
115
167
|
'urls': {
|
|
116
|
-
'logo': 'https://
|
|
168
|
+
'logo': 'https://github.com/user-attachments/assets/67abe346-1273-461a-bd7c-42fa32907c8e',
|
|
117
169
|
'api': {
|
|
118
170
|
'spot': 'https://www.bitrue.com/api',
|
|
119
171
|
'fapi': 'https://fapi.bitrue.com/fapi',
|
|
@@ -128,56 +180,62 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
128
180
|
],
|
|
129
181
|
'fees': 'https://bitrue.zendesk.com/hc/en-001/articles/4405479952537',
|
|
130
182
|
},
|
|
183
|
+
# from spotV1PublicGetExchangeInfo:
|
|
184
|
+
# general 25000 weight in 1 minute per IP. = 416.66 per second a weight of 0.24 for 1
|
|
185
|
+
# orders 750 weight in 6 seconds per IP. = 125 per second a weight of 0.8 for 1
|
|
186
|
+
# orders 200 weight in 10 seconds per User. = 20 per second a weight of 5 for 1
|
|
187
|
+
# withdraw 3000 weight in 1 hour per User. = 0.833 per second a weight of 120 for 1
|
|
188
|
+
# withdraw 1000 weight in 1 day per User. = 0.011574 per second a weight of 8640 for 1
|
|
131
189
|
'api': {
|
|
132
190
|
'spot': {
|
|
133
191
|
'kline': {
|
|
134
192
|
'public': {
|
|
135
193
|
'get': {
|
|
136
|
-
'public.json':
|
|
137
|
-
'public{currency}.json':
|
|
194
|
+
'public.json': 0.24,
|
|
195
|
+
'public{currency}.json': 0.24,
|
|
138
196
|
},
|
|
139
197
|
},
|
|
140
198
|
},
|
|
141
199
|
'v1': {
|
|
142
200
|
'public': {
|
|
143
201
|
'get': {
|
|
144
|
-
'ping':
|
|
145
|
-
'time':
|
|
146
|
-
'exchangeInfo':
|
|
147
|
-
'depth': {'cost': 1, 'byLimit': [[100,
|
|
148
|
-
'trades':
|
|
149
|
-
'historicalTrades':
|
|
150
|
-
'aggTrades':
|
|
151
|
-
'ticker/24hr': {'cost':
|
|
152
|
-
'ticker/price':
|
|
153
|
-
'ticker/bookTicker':
|
|
154
|
-
'market/kline':
|
|
202
|
+
'ping': 0.24,
|
|
203
|
+
'time': 0.24,
|
|
204
|
+
'exchangeInfo': 0.24,
|
|
205
|
+
'depth': {'cost': 1, 'byLimit': [[100, 0.24], [500, 1.2], [1000, 2.4]]},
|
|
206
|
+
'trades': 0.24,
|
|
207
|
+
'historicalTrades': 1.2,
|
|
208
|
+
'aggTrades': 0.24,
|
|
209
|
+
'ticker/24hr': {'cost': 0.24, 'noSymbol': 9.6},
|
|
210
|
+
'ticker/price': 0.24,
|
|
211
|
+
'ticker/bookTicker': 0.24,
|
|
212
|
+
'market/kline': 0.24,
|
|
155
213
|
},
|
|
156
214
|
},
|
|
157
215
|
'private': {
|
|
158
216
|
'get': {
|
|
159
|
-
'order':
|
|
160
|
-
'openOrders':
|
|
161
|
-
'allOrders':
|
|
162
|
-
'account':
|
|
163
|
-
'myTrades':
|
|
164
|
-
'etf/net-value/{symbol}':
|
|
165
|
-
'withdraw/history':
|
|
166
|
-
'deposit/history':
|
|
217
|
+
'order': 5,
|
|
218
|
+
'openOrders': 5,
|
|
219
|
+
'allOrders': 25,
|
|
220
|
+
'account': 25,
|
|
221
|
+
'myTrades': 25,
|
|
222
|
+
'etf/net-value/{symbol}': 0.24,
|
|
223
|
+
'withdraw/history': 120,
|
|
224
|
+
'deposit/history': 120,
|
|
167
225
|
},
|
|
168
226
|
'post': {
|
|
169
|
-
'order':
|
|
170
|
-
'withdraw/commit':
|
|
227
|
+
'order': 5,
|
|
228
|
+
'withdraw/commit': 120,
|
|
171
229
|
},
|
|
172
230
|
'delete': {
|
|
173
|
-
'order':
|
|
231
|
+
'order': 5,
|
|
174
232
|
},
|
|
175
233
|
},
|
|
176
234
|
},
|
|
177
235
|
'v2': {
|
|
178
236
|
'private': {
|
|
179
237
|
'get': {
|
|
180
|
-
'myTrades':
|
|
238
|
+
'myTrades': 1.2,
|
|
181
239
|
},
|
|
182
240
|
},
|
|
183
241
|
},
|
|
@@ -186,34 +244,34 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
186
244
|
'v1': {
|
|
187
245
|
'public': {
|
|
188
246
|
'get': {
|
|
189
|
-
'ping':
|
|
190
|
-
'time':
|
|
191
|
-
'contracts':
|
|
192
|
-
'depth':
|
|
193
|
-
'ticker':
|
|
194
|
-
'klines':
|
|
247
|
+
'ping': 0.24,
|
|
248
|
+
'time': 0.24,
|
|
249
|
+
'contracts': 0.24,
|
|
250
|
+
'depth': 0.24,
|
|
251
|
+
'ticker': 0.24,
|
|
252
|
+
'klines': 0.24,
|
|
195
253
|
},
|
|
196
254
|
},
|
|
197
255
|
},
|
|
198
256
|
'v2': {
|
|
199
257
|
'private': {
|
|
200
258
|
'get': {
|
|
201
|
-
'myTrades':
|
|
202
|
-
'openOrders':
|
|
203
|
-
'order':
|
|
204
|
-
'account':
|
|
205
|
-
'leverageBracket':
|
|
206
|
-
'commissionRate':
|
|
207
|
-
'futures_transfer_history':
|
|
208
|
-
'forceOrdersHistory':
|
|
259
|
+
'myTrades': 5,
|
|
260
|
+
'openOrders': 5,
|
|
261
|
+
'order': 5,
|
|
262
|
+
'account': 5,
|
|
263
|
+
'leverageBracket': 5,
|
|
264
|
+
'commissionRate': 5,
|
|
265
|
+
'futures_transfer_history': 5,
|
|
266
|
+
'forceOrdersHistory': 5,
|
|
209
267
|
},
|
|
210
268
|
'post': {
|
|
211
|
-
'positionMargin':
|
|
212
|
-
'level_edit':
|
|
213
|
-
'cancel':
|
|
214
|
-
'order':
|
|
215
|
-
'allOpenOrders':
|
|
216
|
-
'futures_transfer':
|
|
269
|
+
'positionMargin': 5,
|
|
270
|
+
'level_edit': 5,
|
|
271
|
+
'cancel': 5,
|
|
272
|
+
'order': 25,
|
|
273
|
+
'allOpenOrders': 5,
|
|
274
|
+
'futures_transfer': 5,
|
|
217
275
|
},
|
|
218
276
|
},
|
|
219
277
|
},
|
|
@@ -222,34 +280,34 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
222
280
|
'v1': {
|
|
223
281
|
'public': {
|
|
224
282
|
'get': {
|
|
225
|
-
'ping':
|
|
226
|
-
'time':
|
|
227
|
-
'contracts':
|
|
228
|
-
'depth':
|
|
229
|
-
'ticker':
|
|
230
|
-
'klines':
|
|
283
|
+
'ping': 0.24,
|
|
284
|
+
'time': 0.24,
|
|
285
|
+
'contracts': 0.24,
|
|
286
|
+
'depth': 0.24,
|
|
287
|
+
'ticker': 0.24,
|
|
288
|
+
'klines': 0.24,
|
|
231
289
|
},
|
|
232
290
|
},
|
|
233
291
|
},
|
|
234
292
|
'v2': {
|
|
235
293
|
'private': {
|
|
236
294
|
'get': {
|
|
237
|
-
'myTrades':
|
|
238
|
-
'openOrders':
|
|
239
|
-
'order':
|
|
240
|
-
'account':
|
|
241
|
-
'leverageBracket':
|
|
242
|
-
'commissionRate':
|
|
243
|
-
'futures_transfer_history':
|
|
244
|
-
'forceOrdersHistory':
|
|
295
|
+
'myTrades': 5,
|
|
296
|
+
'openOrders': 5,
|
|
297
|
+
'order': 5,
|
|
298
|
+
'account': 5,
|
|
299
|
+
'leverageBracket': 5,
|
|
300
|
+
'commissionRate': 5,
|
|
301
|
+
'futures_transfer_history': 5,
|
|
302
|
+
'forceOrdersHistory': 5,
|
|
245
303
|
},
|
|
246
304
|
'post': {
|
|
247
|
-
'positionMargin':
|
|
248
|
-
'level_edit':
|
|
249
|
-
'cancel':
|
|
250
|
-
'order':
|
|
251
|
-
'allOpenOrders':
|
|
252
|
-
'futures_transfer':
|
|
305
|
+
'positionMargin': 5,
|
|
306
|
+
'level_edit': 5,
|
|
307
|
+
'cancel': 5,
|
|
308
|
+
'order': 5,
|
|
309
|
+
'allOpenOrders': 5,
|
|
310
|
+
'futures_transfer': 5,
|
|
253
311
|
},
|
|
254
312
|
},
|
|
255
313
|
},
|
|
@@ -337,14 +395,13 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
337
395
|
# exchange-specific options
|
|
338
396
|
'options': {
|
|
339
397
|
'createMarketBuyOrderRequiresPrice': True,
|
|
340
|
-
'fetchMarkets':
|
|
341
|
-
'spot',
|
|
342
|
-
|
|
343
|
-
'inverse',
|
|
344
|
-
],
|
|
398
|
+
'fetchMarkets': {
|
|
399
|
+
'types': ['spot', 'linear', 'inverse'],
|
|
400
|
+
},
|
|
345
401
|
# 'fetchTradesMethod': 'publicGetAggTrades', # publicGetTrades, publicGetHistoricalTrades
|
|
346
402
|
'fetchMyTradesMethod': 'v2PrivateGetMyTrades', # spotV1PrivateGetMyTrades
|
|
347
403
|
'hasAlreadyAuthenticatedSuccessfully': False,
|
|
404
|
+
'currencyToPrecisionRoundingMode': TRUNCATE,
|
|
348
405
|
'recvWindow': 5 * 1000, # 5 sec, binance default
|
|
349
406
|
'timeDifference': 0, # the difference between system clock and Binance clock
|
|
350
407
|
'adjustForTimeDifference': False, # controls the adjustment logic upon instantiation
|
|
@@ -356,6 +413,67 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
356
413
|
'networks': {
|
|
357
414
|
'ERC20': 'ETH',
|
|
358
415
|
'TRC20': 'TRX',
|
|
416
|
+
'AETERNITY': 'Aeternity',
|
|
417
|
+
'AION': 'AION',
|
|
418
|
+
'ALGO': 'Algorand',
|
|
419
|
+
'ASK': 'ASK',
|
|
420
|
+
'ATOM': 'ATOM',
|
|
421
|
+
'AVAXC': 'AVAX C-Chain',
|
|
422
|
+
'BCH': 'BCH',
|
|
423
|
+
'BEP2': 'BEP2',
|
|
424
|
+
'BEP20': 'BEP20',
|
|
425
|
+
'Bitcoin': 'Bitcoin',
|
|
426
|
+
'BRP20': 'BRP20',
|
|
427
|
+
'ADA': 'Cardano',
|
|
428
|
+
'CASINOCOIN': 'CasinoCoin',
|
|
429
|
+
'CASINOCOIN-XRPL': 'CasinoCoin XRPL',
|
|
430
|
+
'CONTENTOS': 'Contentos',
|
|
431
|
+
'DASH': 'Dash',
|
|
432
|
+
'DECOIN': 'Decoin',
|
|
433
|
+
'DFI': 'DeFiChain',
|
|
434
|
+
'DGB': 'DGB',
|
|
435
|
+
'DIVI': 'Divi',
|
|
436
|
+
'DOGE': 'dogecoin',
|
|
437
|
+
'EOS': 'EOS',
|
|
438
|
+
'ETC': 'ETC',
|
|
439
|
+
'FILECOIN': 'Filecoin',
|
|
440
|
+
'FREETON': 'FREETON',
|
|
441
|
+
'HBAR': 'HBAR',
|
|
442
|
+
'HEDERA': 'Hedera Hashgraph',
|
|
443
|
+
'HRC20': 'HRC20',
|
|
444
|
+
'ICON': 'ICON',
|
|
445
|
+
'ICP': 'ICP',
|
|
446
|
+
'IGNIS': 'Ignis',
|
|
447
|
+
'INTERNETCOMPUTER': 'Internet Computer',
|
|
448
|
+
'IOTA': 'IOTA',
|
|
449
|
+
'KAVA': 'KAVA',
|
|
450
|
+
'KSM': 'KSM',
|
|
451
|
+
'LTC': 'LiteCoin',
|
|
452
|
+
'LUNA': 'Luna',
|
|
453
|
+
'MATIC': 'MATIC',
|
|
454
|
+
'MOBILECOIN': 'Mobile Coin',
|
|
455
|
+
'MONACOIN': 'MonaCoin',
|
|
456
|
+
'XMR': 'Monero',
|
|
457
|
+
'NEM': 'NEM',
|
|
458
|
+
'NEP5': 'NEP5',
|
|
459
|
+
'OMNI': 'OMNI',
|
|
460
|
+
'PAC': 'PAC',
|
|
461
|
+
'DOT': 'Polkadot',
|
|
462
|
+
'RAVEN': 'Ravencoin',
|
|
463
|
+
'SAFEX': 'Safex',
|
|
464
|
+
'SOL': 'SOLANA',
|
|
465
|
+
'SGB': 'Songbird',
|
|
466
|
+
'XML': 'Stellar Lumens',
|
|
467
|
+
'XYM': 'Symbol',
|
|
468
|
+
'XTZ': 'Tezos',
|
|
469
|
+
'theta': 'theta',
|
|
470
|
+
'THETA': 'THETA',
|
|
471
|
+
'VECHAIN': 'VeChain',
|
|
472
|
+
'WANCHAIN': 'Wanchain',
|
|
473
|
+
'XINFIN': 'XinFin Network',
|
|
474
|
+
'XRP': 'XRP',
|
|
475
|
+
'XRPL': 'XRPL',
|
|
476
|
+
'ZIL': 'ZIL',
|
|
359
477
|
},
|
|
360
478
|
'defaultType': 'spot',
|
|
361
479
|
'timeframes': {
|
|
@@ -395,7 +513,96 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
395
513
|
'MIM': 'MIM Swarm',
|
|
396
514
|
},
|
|
397
515
|
'precisionMode': TICK_SIZE,
|
|
398
|
-
|
|
516
|
+
'features': {
|
|
517
|
+
'default': {
|
|
518
|
+
'sandbox': False,
|
|
519
|
+
'createOrder': {
|
|
520
|
+
'marginMode': False,
|
|
521
|
+
'triggerPrice': True,
|
|
522
|
+
'triggerPriceType': None,
|
|
523
|
+
'triggerDirection': None,
|
|
524
|
+
'stopLossPrice': False, # todo
|
|
525
|
+
'takeProfitPrice': False, # todo
|
|
526
|
+
'attachedStopLossTakeProfit': None,
|
|
527
|
+
'timeInForce': {
|
|
528
|
+
'IOC': True,
|
|
529
|
+
'FOK': True,
|
|
530
|
+
'PO': True,
|
|
531
|
+
'GTD': False,
|
|
532
|
+
},
|
|
533
|
+
'hedged': False,
|
|
534
|
+
'trailing': False,
|
|
535
|
+
'leverage': False,
|
|
536
|
+
'marketBuyRequiresPrice': True, # todo revise
|
|
537
|
+
'marketBuyByCost': True,
|
|
538
|
+
'selfTradePrevention': False,
|
|
539
|
+
'iceberg': True, # todo implement
|
|
540
|
+
},
|
|
541
|
+
'createOrders': None,
|
|
542
|
+
'fetchMyTrades': {
|
|
543
|
+
'marginMode': False,
|
|
544
|
+
'limit': 1000,
|
|
545
|
+
'daysBack': 100000,
|
|
546
|
+
'untilDays': 100000,
|
|
547
|
+
'symbolRequired': True,
|
|
548
|
+
},
|
|
549
|
+
'fetchOrder': {
|
|
550
|
+
'marginMode': False,
|
|
551
|
+
'trigger': False,
|
|
552
|
+
'trailing': False,
|
|
553
|
+
'symbolRequired': True,
|
|
554
|
+
},
|
|
555
|
+
'fetchOpenOrders': {
|
|
556
|
+
'marginMode': False,
|
|
557
|
+
'limit': None,
|
|
558
|
+
'trigger': False,
|
|
559
|
+
'trailing': False,
|
|
560
|
+
'symbolRequired': True,
|
|
561
|
+
},
|
|
562
|
+
'fetchOrders': None,
|
|
563
|
+
'fetchClosedOrders': {
|
|
564
|
+
'marginMode': False,
|
|
565
|
+
'limit': 1000,
|
|
566
|
+
'daysBack': 90,
|
|
567
|
+
'daysBackCanceled': 1,
|
|
568
|
+
'untilDays': 90,
|
|
569
|
+
'trigger': False,
|
|
570
|
+
'trailing': False,
|
|
571
|
+
'symbolRequired': True,
|
|
572
|
+
},
|
|
573
|
+
'fetchOHLCV': {
|
|
574
|
+
'limit': 1440,
|
|
575
|
+
},
|
|
576
|
+
},
|
|
577
|
+
'spot': {
|
|
578
|
+
'extends': 'default',
|
|
579
|
+
},
|
|
580
|
+
'forDerivatives': {
|
|
581
|
+
'extends': 'default',
|
|
582
|
+
'createOrder': {
|
|
583
|
+
'marginMode': True,
|
|
584
|
+
'leverage': True,
|
|
585
|
+
'marketBuyRequiresPrice': False,
|
|
586
|
+
'marketBuyByCost': False,
|
|
587
|
+
},
|
|
588
|
+
'fetchOHLCV': {
|
|
589
|
+
'limit': 300,
|
|
590
|
+
},
|
|
591
|
+
'fetchClosedOrders': None,
|
|
592
|
+
},
|
|
593
|
+
'swap': {
|
|
594
|
+
'linear': {
|
|
595
|
+
'extends': 'forDerivatives',
|
|
596
|
+
},
|
|
597
|
+
'inverse': {
|
|
598
|
+
'extends': 'forDerivatives',
|
|
599
|
+
},
|
|
600
|
+
},
|
|
601
|
+
'future': {
|
|
602
|
+
'linear': None,
|
|
603
|
+
'inverse': None,
|
|
604
|
+
},
|
|
605
|
+
},
|
|
399
606
|
'exceptions': {
|
|
400
607
|
'exact': {
|
|
401
608
|
'System is under maintenance.': OnMaintenance, # {"code":1,"msg":"System is under maintenance."}
|
|
@@ -467,26 +674,22 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
467
674
|
'-4051': InsufficientFunds, # {"code":-4051,"msg":"Isolated balance insufficient."}
|
|
468
675
|
},
|
|
469
676
|
'broad': {
|
|
677
|
+
'Insufficient account balance': InsufficientFunds, # {"code":-2010,"msg":"Insufficient account balance.","data":null}
|
|
470
678
|
'has no operation privilege': PermissionDenied,
|
|
471
679
|
'MAX_POSITION': InvalidOrder, # {"code":-2010,"msg":"Filter failure: MAX_POSITION"}
|
|
472
680
|
},
|
|
473
681
|
},
|
|
474
682
|
})
|
|
475
683
|
|
|
476
|
-
def currency_to_precision(self, code, fee, networkCode=None):
|
|
477
|
-
# info is available in currencies only if the user has configured his api keys
|
|
478
|
-
if self.safe_value(self.currencies[code], 'precision') is not None:
|
|
479
|
-
return self.decimal_to_precision(fee, TRUNCATE, self.currencies[code]['precision'], self.precisionMode, self.paddingMode)
|
|
480
|
-
else:
|
|
481
|
-
return self.number_to_string(fee)
|
|
482
|
-
|
|
483
684
|
def nonce(self):
|
|
484
685
|
return self.milliseconds() - self.options['timeDifference']
|
|
485
686
|
|
|
486
687
|
async def fetch_status(self, params={}):
|
|
487
688
|
"""
|
|
488
689
|
the latest known information on the availability of the exchange API
|
|
489
|
-
|
|
690
|
+
|
|
691
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#test-connectivity
|
|
692
|
+
|
|
490
693
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
491
694
|
:returns dict: a `status structure <https://docs.ccxt.com/#/?id=exchange-status-structure>`
|
|
492
695
|
"""
|
|
@@ -507,10 +710,12 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
507
710
|
'info': response,
|
|
508
711
|
}
|
|
509
712
|
|
|
510
|
-
async def fetch_time(self, params={}):
|
|
713
|
+
async def fetch_time(self, params={}) -> Int:
|
|
511
714
|
"""
|
|
512
715
|
fetches the current integer timestamp in milliseconds from the exchange server
|
|
513
|
-
|
|
716
|
+
|
|
717
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#check-server-time
|
|
718
|
+
|
|
514
719
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
515
720
|
:returns int: the current integer timestamp in milliseconds from the exchange server
|
|
516
721
|
"""
|
|
@@ -522,77 +727,6 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
522
727
|
#
|
|
523
728
|
return self.safe_integer(response, 'serverTime')
|
|
524
729
|
|
|
525
|
-
def safe_network(self, networkId):
|
|
526
|
-
uppercaseNetworkId = networkId.upper()
|
|
527
|
-
networksById: dict = {
|
|
528
|
-
'Aeternity': 'Aeternity',
|
|
529
|
-
'AION': 'AION',
|
|
530
|
-
'Algorand': 'Algorand',
|
|
531
|
-
'ASK': 'ASK',
|
|
532
|
-
'ATOM': 'ATOM',
|
|
533
|
-
'AVAX C-Chain': 'AVAX C-Chain',
|
|
534
|
-
'bch': 'bch',
|
|
535
|
-
'BCH': 'BCH',
|
|
536
|
-
'BEP2': 'BEP2',
|
|
537
|
-
'BEP20': 'BEP20',
|
|
538
|
-
'Bitcoin': 'Bitcoin',
|
|
539
|
-
'BRP20': 'BRP20',
|
|
540
|
-
'Cardano': 'ADA',
|
|
541
|
-
'CasinoCoin': 'CasinoCoin',
|
|
542
|
-
'CasinoCoin XRPL': 'CasinoCoin XRPL',
|
|
543
|
-
'Contentos': 'Contentos',
|
|
544
|
-
'Dash': 'Dash',
|
|
545
|
-
'Decoin': 'Decoin',
|
|
546
|
-
'DeFiChain': 'DeFiChain',
|
|
547
|
-
'DGB': 'DGB',
|
|
548
|
-
'Divi': 'Divi',
|
|
549
|
-
'dogecoin': 'DOGE',
|
|
550
|
-
'EOS': 'EOS',
|
|
551
|
-
'ERC20': 'ERC20',
|
|
552
|
-
'ETC': 'ETC',
|
|
553
|
-
'Filecoin': 'Filecoin',
|
|
554
|
-
'FREETON': 'FREETON',
|
|
555
|
-
'HBAR': 'HBAR',
|
|
556
|
-
'Hedera Hashgraph': 'Hedera Hashgraph',
|
|
557
|
-
'HRC20': 'HRC20',
|
|
558
|
-
'ICON': 'ICON',
|
|
559
|
-
'ICP': 'ICP',
|
|
560
|
-
'Ignis': 'Ignis',
|
|
561
|
-
'Internet Computer': 'Internet Computer',
|
|
562
|
-
'IOTA': 'IOTA',
|
|
563
|
-
'KAVA': 'KAVA',
|
|
564
|
-
'KSM': 'KSM',
|
|
565
|
-
'LiteCoin': 'LiteCoin',
|
|
566
|
-
'Luna': 'Luna',
|
|
567
|
-
'MATIC': 'MATIC',
|
|
568
|
-
'Mobile Coin': 'Mobile Coin',
|
|
569
|
-
'MonaCoin': 'MonaCoin',
|
|
570
|
-
'Monero': 'Monero',
|
|
571
|
-
'NEM': 'NEM',
|
|
572
|
-
'NEP5': 'NEP5',
|
|
573
|
-
'OMNI': 'OMNI',
|
|
574
|
-
'PAC': 'PAC',
|
|
575
|
-
'Polkadot': 'Polkadot',
|
|
576
|
-
'Ravencoin': 'Ravencoin',
|
|
577
|
-
'Safex': 'Safex',
|
|
578
|
-
'SOLANA': 'SOL',
|
|
579
|
-
'Songbird': 'Songbird',
|
|
580
|
-
'Stellar Lumens': 'Stellar Lumens',
|
|
581
|
-
'Symbol': 'Symbol',
|
|
582
|
-
'Tezos': 'XTZ',
|
|
583
|
-
'theta': 'theta',
|
|
584
|
-
'THETA': 'THETA',
|
|
585
|
-
'TRC20': 'TRC20',
|
|
586
|
-
'VeChain': 'VeChain',
|
|
587
|
-
'VECHAIN': 'VECHAIN',
|
|
588
|
-
'Wanchain': 'Wanchain',
|
|
589
|
-
'XinFin Network': 'XinFin Network',
|
|
590
|
-
'XRP': 'XRP',
|
|
591
|
-
'XRPL': 'XRPL',
|
|
592
|
-
'ZIL': 'ZIL',
|
|
593
|
-
}
|
|
594
|
-
return self.safe_string_2(networksById, networkId, uppercaseNetworkId, networkId)
|
|
595
|
-
|
|
596
730
|
async def fetch_currencies(self, params={}) -> Currencies:
|
|
597
731
|
"""
|
|
598
732
|
fetches all available currencies on an exchange
|
|
@@ -647,86 +781,78 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
647
781
|
# }
|
|
648
782
|
#
|
|
649
783
|
result: dict = {}
|
|
650
|
-
coins = self.
|
|
784
|
+
coins = self.safe_list(response, 'coins', [])
|
|
651
785
|
for i in range(0, len(coins)):
|
|
652
786
|
currency = coins[i]
|
|
653
787
|
id = self.safe_string(currency, 'coin')
|
|
654
788
|
name = self.safe_string(currency, 'coinFulName')
|
|
655
789
|
code = self.safe_currency_code(id)
|
|
656
|
-
|
|
657
|
-
withdraw = None
|
|
658
|
-
minWithdrawString = None
|
|
659
|
-
maxWithdrawString = None
|
|
660
|
-
minWithdrawFeeString = None
|
|
661
|
-
networkDetails = self.safe_value(currency, 'chainDetail', [])
|
|
790
|
+
networkDetails = self.safe_list(currency, 'chainDetail', [])
|
|
662
791
|
networks: dict = {}
|
|
663
792
|
for j in range(0, len(networkDetails)):
|
|
664
793
|
entry = networkDetails[j]
|
|
665
794
|
networkId = self.safe_string(entry, 'chain')
|
|
666
795
|
network = self.network_id_to_code(networkId, code)
|
|
667
|
-
enableDeposit = self.safe_value(entry, 'enableDeposit')
|
|
668
|
-
deposit = enableDeposit if (enableDeposit) else deposit
|
|
669
|
-
enableWithdraw = self.safe_value(entry, 'enableWithdraw')
|
|
670
|
-
withdraw = enableWithdraw if (enableWithdraw) else withdraw
|
|
671
|
-
networkWithdrawFeeString = self.safe_string(entry, 'withdrawFee')
|
|
672
|
-
if networkWithdrawFeeString is not None:
|
|
673
|
-
minWithdrawFeeString = networkWithdrawFeeString if (minWithdrawFeeString is None) else Precise.string_min(networkWithdrawFeeString, minWithdrawFeeString)
|
|
674
|
-
networkMinWithdrawString = self.safe_string(entry, 'minWithdraw')
|
|
675
|
-
if networkMinWithdrawString is not None:
|
|
676
|
-
minWithdrawString = networkMinWithdrawString if (minWithdrawString is None) else Precise.string_min(networkMinWithdrawString, minWithdrawString)
|
|
677
|
-
networkMaxWithdrawString = self.safe_string(entry, 'maxWithdraw')
|
|
678
|
-
if networkMaxWithdrawString is not None:
|
|
679
|
-
maxWithdrawString = networkMaxWithdrawString if (maxWithdrawString is None) else Precise.string_max(networkMaxWithdrawString, maxWithdrawString)
|
|
680
796
|
networks[network] = {
|
|
681
797
|
'info': entry,
|
|
682
798
|
'id': networkId,
|
|
683
799
|
'network': network,
|
|
684
|
-
'deposit': enableDeposit,
|
|
685
|
-
'withdraw': enableWithdraw,
|
|
686
|
-
'active':
|
|
687
|
-
'fee': self.
|
|
800
|
+
'deposit': self.safe_bool(entry, 'enableDeposit'),
|
|
801
|
+
'withdraw': self.safe_bool(entry, 'enableWithdraw'),
|
|
802
|
+
'active': None,
|
|
803
|
+
'fee': self.safe_number(entry, 'withdrawFee'),
|
|
688
804
|
'precision': None,
|
|
689
805
|
'limits': {
|
|
690
806
|
'withdraw': {
|
|
691
|
-
'min': self.
|
|
692
|
-
'max': self.
|
|
807
|
+
'min': self.safe_number(entry, 'minWithdraw'),
|
|
808
|
+
'max': self.safe_number(entry, 'maxWithdraw'),
|
|
693
809
|
},
|
|
694
810
|
},
|
|
695
811
|
}
|
|
696
|
-
result[code] = {
|
|
812
|
+
result[code] = self.safe_currency_structure({
|
|
697
813
|
'id': id,
|
|
698
814
|
'name': name,
|
|
699
815
|
'code': code,
|
|
700
816
|
'precision': None,
|
|
701
817
|
'info': currency,
|
|
702
|
-
'active':
|
|
703
|
-
'deposit':
|
|
704
|
-
'withdraw':
|
|
818
|
+
'active': None,
|
|
819
|
+
'deposit': None,
|
|
820
|
+
'withdraw': None,
|
|
705
821
|
'networks': networks,
|
|
706
|
-
'fee':
|
|
707
|
-
|
|
822
|
+
'fee': None,
|
|
823
|
+
'fees': None,
|
|
824
|
+
'type': 'crypto',
|
|
708
825
|
'limits': {
|
|
709
826
|
'withdraw': {
|
|
710
|
-
'min':
|
|
711
|
-
'max':
|
|
827
|
+
'min': None,
|
|
828
|
+
'max': None,
|
|
712
829
|
},
|
|
713
830
|
},
|
|
714
|
-
}
|
|
831
|
+
})
|
|
715
832
|
return result
|
|
716
833
|
|
|
717
834
|
async def fetch_markets(self, params={}) -> List[Market]:
|
|
718
835
|
"""
|
|
719
836
|
retrieves data on all markets for bitrue
|
|
720
|
-
|
|
721
|
-
|
|
722
|
-
|
|
837
|
+
|
|
838
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#exchangeInfo_endpoint
|
|
839
|
+
https://www.bitrue.com/api-docs#current-open-contract
|
|
840
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#current-open-contract
|
|
841
|
+
|
|
723
842
|
:param dict [params]: extra parameters specific to the exchange api endpoint
|
|
724
843
|
:returns dict[]: an array of objects representing market data
|
|
725
844
|
"""
|
|
726
845
|
promisesRaw = []
|
|
727
|
-
|
|
728
|
-
|
|
729
|
-
|
|
846
|
+
types = None
|
|
847
|
+
defaultTypes = ['spot', 'linear', 'inverse']
|
|
848
|
+
fetchMarketsOptions = self.safe_dict(self.options, 'fetchMarkets')
|
|
849
|
+
if fetchMarketsOptions is not None:
|
|
850
|
+
types = self.safe_list(fetchMarketsOptions, 'types', defaultTypes)
|
|
851
|
+
else:
|
|
852
|
+
# for backward-compatibility
|
|
853
|
+
types = self.safe_list(self.options, 'fetchMarkets', defaultTypes)
|
|
854
|
+
for i in range(0, len(types)):
|
|
855
|
+
marketType = types[i]
|
|
730
856
|
if marketType == 'spot':
|
|
731
857
|
promisesRaw.append(self.spotV1PublicGetExchangeInfo(params))
|
|
732
858
|
elif marketType == 'linear':
|
|
@@ -842,11 +968,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
842
968
|
symbol = base + '/' + quote
|
|
843
969
|
if settle is not None:
|
|
844
970
|
symbol += ':' + settle
|
|
845
|
-
filters = self.
|
|
971
|
+
filters = self.safe_list(market, 'filters', [])
|
|
846
972
|
filtersByType = self.index_by(filters, 'filterType')
|
|
847
973
|
status = self.safe_string(market, 'status')
|
|
848
|
-
priceFilter = self.
|
|
849
|
-
amountFilter = self.
|
|
974
|
+
priceFilter = self.safe_dict(filtersByType, 'PRICE_FILTER', {})
|
|
975
|
+
amountFilter = self.safe_dict(filtersByType, 'LOT_SIZE', {})
|
|
850
976
|
defaultPricePrecision = self.safe_string(market, 'pricePrecision')
|
|
851
977
|
defaultAmountPrecision = self.safe_string(market, 'quantityPrecision')
|
|
852
978
|
pricePrecision = self.safe_string(priceFilter, 'priceScale', defaultPricePrecision)
|
|
@@ -976,9 +1102,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
976
1102
|
async def fetch_balance(self, params={}) -> Balances:
|
|
977
1103
|
"""
|
|
978
1104
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
1105
|
+
|
|
1106
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#account-information-user_data
|
|
1107
|
+
https://www.bitrue.com/api-docs#account-information-v2-user_data-hmac-sha256
|
|
1108
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#account-information-v2-user_data-hmac-sha256
|
|
1109
|
+
|
|
982
1110
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
983
1111
|
:param str [params.type]: 'future', 'delivery', 'spot', 'swap'
|
|
984
1112
|
:param str [params.subType]: 'linear', 'inverse'
|
|
@@ -994,7 +1122,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
994
1122
|
if type == 'swap':
|
|
995
1123
|
if subType is not None and subType == 'inverse':
|
|
996
1124
|
response = await self.dapiV2PrivateGetAccount(params)
|
|
997
|
-
result = self.
|
|
1125
|
+
result = self.safe_dict(response, 'data', {})
|
|
998
1126
|
#
|
|
999
1127
|
# {
|
|
1000
1128
|
# "code":"0",
|
|
@@ -1027,7 +1155,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1027
1155
|
#
|
|
1028
1156
|
else:
|
|
1029
1157
|
response = await self.fapiV2PrivateGetAccount(params)
|
|
1030
|
-
result = self.
|
|
1158
|
+
result = self.safe_dict(response, 'data', {})
|
|
1031
1159
|
#
|
|
1032
1160
|
# {
|
|
1033
1161
|
# "code":"0",
|
|
@@ -1083,9 +1211,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1083
1211
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
1084
1212
|
"""
|
|
1085
1213
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
1086
|
-
|
|
1087
|
-
|
|
1088
|
-
|
|
1214
|
+
|
|
1215
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#order-book
|
|
1216
|
+
https://www.bitrue.com/api-docs#order-book
|
|
1217
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#order-book
|
|
1218
|
+
|
|
1089
1219
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
1090
1220
|
:param int [limit]: the maximum amount of order book entries to return
|
|
1091
1221
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1142,7 +1272,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1142
1272
|
# "time": 1699338305000
|
|
1143
1273
|
# }
|
|
1144
1274
|
#
|
|
1145
|
-
timestamp = self.
|
|
1275
|
+
timestamp = self.safe_integer_2(response, 'time', 'lastUpdateId')
|
|
1146
1276
|
orderbook = self.parse_order_book(response, symbol, timestamp)
|
|
1147
1277
|
orderbook['nonce'] = self.safe_integer(response, 'lastUpdateId')
|
|
1148
1278
|
return orderbook
|
|
@@ -1217,9 +1347,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1217
1347
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
1218
1348
|
"""
|
|
1219
1349
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
1220
|
-
|
|
1221
|
-
|
|
1222
|
-
|
|
1350
|
+
|
|
1351
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#24hr-ticker-price-change-statistics
|
|
1352
|
+
https://www.bitrue.com/api-docs#ticker
|
|
1353
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#ticker
|
|
1354
|
+
|
|
1223
1355
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
1224
1356
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1225
1357
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -1242,7 +1374,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1242
1374
|
'symbol': market['id'],
|
|
1243
1375
|
}
|
|
1244
1376
|
response = await self.spotV1PublicGetTicker24hr(self.extend(request, params))
|
|
1245
|
-
data = self.
|
|
1377
|
+
data = self.safe_dict(response, 0, {})
|
|
1246
1378
|
else:
|
|
1247
1379
|
raise NotSupported(self.id + ' fetchTicker only support spot & swap markets')
|
|
1248
1380
|
#
|
|
@@ -1288,23 +1420,25 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1288
1420
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
1289
1421
|
"""
|
|
1290
1422
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
|
|
1423
|
+
|
|
1424
|
+
https://www.bitrue.com/api_docs_includes_file/spot/index.html#kline-data
|
|
1425
|
+
https://www.bitrue.com/api_docs_includes_file/futures/index.html#kline-candlestick-data
|
|
1426
|
+
|
|
1294
1427
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
1295
1428
|
:param str timeframe: the length of time each candle represents
|
|
1296
1429
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
1297
1430
|
:param int [limit]: the maximum amount of candles to fetch
|
|
1298
1431
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1432
|
+
:param int [params.until]: the latest time in ms to fetch transfers for
|
|
1299
1433
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
|
1300
1434
|
"""
|
|
1301
1435
|
await self.load_markets()
|
|
1302
1436
|
market = self.market(symbol)
|
|
1303
|
-
timeframes = self.
|
|
1437
|
+
timeframes = self.safe_dict(self.options, 'timeframes', {})
|
|
1304
1438
|
response = None
|
|
1305
1439
|
data = None
|
|
1306
1440
|
if market['swap']:
|
|
1307
|
-
timeframesFuture = self.
|
|
1441
|
+
timeframesFuture = self.safe_dict(timeframes, 'future', {})
|
|
1308
1442
|
request: dict = {
|
|
1309
1443
|
'contractName': market['id'],
|
|
1310
1444
|
# 1min / 5min / 15min / 30min / 1h / 1day / 1week / 1month
|
|
@@ -1318,7 +1452,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1318
1452
|
response = await self.dapiV1PublicGetKlines(self.extend(request, params))
|
|
1319
1453
|
data = response
|
|
1320
1454
|
elif market['spot']:
|
|
1321
|
-
timeframesSpot = self.
|
|
1455
|
+
timeframesSpot = self.safe_dict(timeframes, 'spot', {})
|
|
1322
1456
|
request: dict = {
|
|
1323
1457
|
'symbol': market['id'],
|
|
1324
1458
|
# 1m / 5m / 15m / 30m / 1H / 2H / 4H / 12H / 1D / 1W
|
|
@@ -1326,10 +1460,12 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1326
1460
|
}
|
|
1327
1461
|
if limit is not None:
|
|
1328
1462
|
request['limit'] = limit
|
|
1329
|
-
|
|
1330
|
-
|
|
1463
|
+
until = self.safe_integer(params, 'until')
|
|
1464
|
+
if until is not None:
|
|
1465
|
+
params = self.omit(params, 'until')
|
|
1466
|
+
request['fromIdx'] = until
|
|
1331
1467
|
response = await self.spotV1PublicGetMarketKline(self.extend(request, params))
|
|
1332
|
-
data = self.
|
|
1468
|
+
data = self.safe_list(response, 'data', [])
|
|
1333
1469
|
else:
|
|
1334
1470
|
raise NotSupported(self.id + ' fetchOHLCV only support spot & swap markets')
|
|
1335
1471
|
#
|
|
@@ -1406,9 +1542,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1406
1542
|
async def fetch_bids_asks(self, symbols: Strings = None, params={}):
|
|
1407
1543
|
"""
|
|
1408
1544
|
fetches the bid and ask price and volume for multiple markets
|
|
1409
|
-
|
|
1410
|
-
|
|
1411
|
-
|
|
1545
|
+
|
|
1546
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#symbol-order-book-ticker
|
|
1547
|
+
https://www.bitrue.com/api-docs#ticker
|
|
1548
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#ticker
|
|
1549
|
+
|
|
1412
1550
|
:param str[]|None symbols: unified symbols of the markets to fetch the bids and asks for, all markets are returned if not assigned
|
|
1413
1551
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1414
1552
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -1464,9 +1602,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1464
1602
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
1465
1603
|
"""
|
|
1466
1604
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
1467
|
-
|
|
1468
|
-
|
|
1469
|
-
|
|
1605
|
+
|
|
1606
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#24hr-ticker-price-change-statistics
|
|
1607
|
+
https://www.bitrue.com/api-docs#ticker
|
|
1608
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#ticker
|
|
1609
|
+
|
|
1470
1610
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
1471
1611
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1472
1612
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -1536,8 +1676,8 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1536
1676
|
# https://github.com/ccxt/ccxt/issues/13856
|
|
1537
1677
|
tickers: dict = {}
|
|
1538
1678
|
for i in range(0, len(data)):
|
|
1539
|
-
ticker = self.
|
|
1540
|
-
market = self.
|
|
1679
|
+
ticker = self.safe_dict(data, i, {})
|
|
1680
|
+
market = self.safe_market(self.safe_string(ticker, 'symbol'))
|
|
1541
1681
|
tickers[market['id']] = ticker
|
|
1542
1682
|
return self.parse_tickers(tickers, symbols)
|
|
1543
1683
|
|
|
@@ -1598,8 +1738,8 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1598
1738
|
orderId = self.safe_string(trade, 'orderId')
|
|
1599
1739
|
id = self.safe_string_2(trade, 'id', 'tradeId')
|
|
1600
1740
|
side = None
|
|
1601
|
-
buyerMaker = self.
|
|
1602
|
-
isBuyer = self.
|
|
1741
|
+
buyerMaker = self.safe_bool(trade, 'isBuyerMaker') # ignore "m" until Bitrue fixes api
|
|
1742
|
+
isBuyer = self.safe_bool(trade, 'isBuyer')
|
|
1603
1743
|
if buyerMaker is not None:
|
|
1604
1744
|
side = 'sell' if buyerMaker else 'buy'
|
|
1605
1745
|
if isBuyer is not None:
|
|
@@ -1611,7 +1751,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1611
1751
|
'currency': self.safe_currency_code(self.safe_string(trade, 'commissionAssert')),
|
|
1612
1752
|
}
|
|
1613
1753
|
takerOrMaker = None
|
|
1614
|
-
isMaker = self.
|
|
1754
|
+
isMaker = self.safe_bool(trade, 'isMaker')
|
|
1615
1755
|
if isMaker is not None:
|
|
1616
1756
|
takerOrMaker = 'maker' if isMaker else 'taker'
|
|
1617
1757
|
return self.safe_trade({
|
|
@@ -1633,7 +1773,9 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1633
1773
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
1634
1774
|
"""
|
|
1635
1775
|
get the list of most recent trades for a particular symbol
|
|
1636
|
-
|
|
1776
|
+
|
|
1777
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#recent-trades-list
|
|
1778
|
+
|
|
1637
1779
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
1638
1780
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
1639
1781
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -1764,14 +1906,13 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1764
1906
|
id = self.safe_string(order, 'orderId')
|
|
1765
1907
|
type = self.safe_string_lower(order, 'type')
|
|
1766
1908
|
side = self.safe_string_lower(order, 'side')
|
|
1767
|
-
fills = self.
|
|
1909
|
+
fills = self.safe_list(order, 'fills', [])
|
|
1768
1910
|
clientOrderId = self.safe_string(order, 'clientOrderId')
|
|
1769
1911
|
timeInForce = self.safe_string(order, 'timeInForce')
|
|
1770
1912
|
postOnly = (type == 'limit_maker') or (timeInForce == 'GTX') or (type == 'post_only')
|
|
1771
1913
|
if type == 'limit_maker':
|
|
1772
1914
|
type = 'limit'
|
|
1773
|
-
|
|
1774
|
-
stopPrice = self.parse_number(self.omit_zero(stopPriceString))
|
|
1915
|
+
triggerPrice = self.parse_number(self.omit_zero(self.safe_string(order, 'stopPrice')))
|
|
1775
1916
|
return self.safe_order({
|
|
1776
1917
|
'info': order,
|
|
1777
1918
|
'id': id,
|
|
@@ -1785,8 +1926,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1785
1926
|
'postOnly': postOnly,
|
|
1786
1927
|
'side': side,
|
|
1787
1928
|
'price': price,
|
|
1788
|
-
'
|
|
1789
|
-
'triggerPrice': stopPrice,
|
|
1929
|
+
'triggerPrice': triggerPrice,
|
|
1790
1930
|
'amount': amount,
|
|
1791
1931
|
'cost': cost,
|
|
1792
1932
|
'average': average,
|
|
@@ -1800,8 +1940,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1800
1940
|
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
|
1801
1941
|
"""
|
|
1802
1942
|
create a market buy order by providing the symbol and cost
|
|
1803
|
-
|
|
1804
|
-
|
|
1943
|
+
|
|
1944
|
+
https://www.bitrue.com/api-docs#new-order-trade-hmac-sha256
|
|
1945
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#new-order-trade-hmac-sha256
|
|
1946
|
+
|
|
1805
1947
|
:param str symbol: unified symbol of the market to create an order in
|
|
1806
1948
|
:param float cost: how much you want to trade in units of the quote currency
|
|
1807
1949
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1817,14 +1959,15 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1817
1959
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
|
1818
1960
|
"""
|
|
1819
1961
|
create a trade order
|
|
1820
|
-
|
|
1821
|
-
|
|
1822
|
-
|
|
1962
|
+
|
|
1963
|
+
https://www.bitrue.com/api_docs_includes_file/spot/index.html#new-order-trade
|
|
1964
|
+
https://www.bitrue.com/api_docs_includes_file/futures/index.html#new-order-trade-hmac-sha256
|
|
1965
|
+
|
|
1823
1966
|
:param str symbol: unified symbol of the market to create an order in
|
|
1824
1967
|
:param str type: 'market' or 'limit'
|
|
1825
1968
|
:param str side: 'buy' or 'sell'
|
|
1826
1969
|
:param float amount: how much of currency you want to trade in units of base currency
|
|
1827
|
-
:param float [price]: the price at which the order is to be
|
|
1970
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1828
1971
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1829
1972
|
:param float [params.triggerPrice]: *spot only* the price at which a trigger order is triggered at
|
|
1830
1973
|
:param str [params.clientOrderId]: a unique id for the order, automatically generated if not sent
|
|
@@ -1832,7 +1975,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1832
1975
|
:param str [params.timeInForce]: 'fok', 'ioc' or 'po'
|
|
1833
1976
|
:param bool [params.postOnly]: default False
|
|
1834
1977
|
:param bool [params.reduceOnly]: default False
|
|
1835
|
-
|
|
1978
|
+
EXCHANGE SPECIFIC PARAMETERS
|
|
1836
1979
|
:param decimal [params.icebergQty]:
|
|
1837
1980
|
:param long [params.recvWindow]:
|
|
1838
1981
|
:param float [params.cost]: *swap market buy only* the quote quantity that can be used alternative for the amount
|
|
@@ -1894,7 +2037,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1894
2037
|
response = await self.fapiV2PrivatePostOrder(self.extend(request, params))
|
|
1895
2038
|
elif market['inverse']:
|
|
1896
2039
|
response = await self.dapiV2PrivatePostOrder(self.extend(request, params))
|
|
1897
|
-
data = self.
|
|
2040
|
+
data = self.safe_dict(response, 'data', {})
|
|
1898
2041
|
elif market['spot']:
|
|
1899
2042
|
request['symbol'] = market['id']
|
|
1900
2043
|
request['quantity'] = self.amount_to_precision(symbol, amount)
|
|
@@ -1905,10 +2048,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1905
2048
|
if clientOrderId is not None:
|
|
1906
2049
|
params = self.omit(params, ['newClientOrderId', 'clientOrderId'])
|
|
1907
2050
|
request['newClientOrderId'] = clientOrderId
|
|
1908
|
-
|
|
1909
|
-
if
|
|
2051
|
+
triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
|
|
2052
|
+
if triggerPrice is not None:
|
|
1910
2053
|
params = self.omit(params, ['triggerPrice', 'stopPrice'])
|
|
1911
|
-
request['stopPrice'] = self.price_to_precision(symbol,
|
|
2054
|
+
request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
|
|
1912
2055
|
response = await self.spotV1PrivatePostOrder(self.extend(request, params))
|
|
1913
2056
|
data = response
|
|
1914
2057
|
else:
|
|
@@ -1939,9 +2082,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1939
2082
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
|
1940
2083
|
"""
|
|
1941
2084
|
fetches information on an order made by the user
|
|
1942
|
-
|
|
1943
|
-
|
|
1944
|
-
|
|
2085
|
+
|
|
2086
|
+
https://www.bitrue.com/api_docs_includes_file/spot/index.html#query-order-user_data
|
|
2087
|
+
https://www.bitrue.com/api_docs_includes_file/futures/index.html#query-order-user_data-hmac-sha256
|
|
2088
|
+
|
|
2089
|
+
:param str id: the order id
|
|
1945
2090
|
:param str symbol: unified symbol of the market the order was made in
|
|
1946
2091
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1947
2092
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
@@ -1968,7 +2113,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
1968
2113
|
response = await self.fapiV2PrivateGetOrder(self.extend(request, params))
|
|
1969
2114
|
elif market['inverse']:
|
|
1970
2115
|
response = await self.dapiV2PrivateGetOrder(self.extend(request, params))
|
|
1971
|
-
data = self.
|
|
2116
|
+
data = self.safe_dict(response, 'data', {})
|
|
1972
2117
|
elif market['spot']:
|
|
1973
2118
|
request['orderId'] = id # spot market id is mandatory
|
|
1974
2119
|
request['symbol'] = market['id']
|
|
@@ -2024,7 +2169,9 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2024
2169
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
2025
2170
|
"""
|
|
2026
2171
|
fetches information on multiple closed orders made by the user
|
|
2027
|
-
|
|
2172
|
+
|
|
2173
|
+
https://www.bitrue.com/api_docs_includes_file/spot/index.html#all-orders-user_data
|
|
2174
|
+
|
|
2028
2175
|
:param str symbol: unified market symbol of the market orders were made in
|
|
2029
2176
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
2030
2177
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -2076,9 +2223,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2076
2223
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
2077
2224
|
"""
|
|
2078
2225
|
fetch all unfilled currently open orders
|
|
2079
|
-
|
|
2080
|
-
|
|
2081
|
-
|
|
2226
|
+
|
|
2227
|
+
https://www.bitrue.com/api_docs_includes_file/spot/index.html#current-open-orders-user_data
|
|
2228
|
+
https://www.bitrue.com/api_docs_includes_file/futures/index.html#cancel-all-open-orders-trade-hmac-sha256
|
|
2229
|
+
|
|
2082
2230
|
:param str symbol: unified market symbol
|
|
2083
2231
|
:param int [since]: the earliest time in ms to fetch open orders for
|
|
2084
2232
|
:param int [limit]: the maximum number of open order structures to retrieve
|
|
@@ -2098,7 +2246,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2098
2246
|
response = await self.fapiV2PrivateGetOpenOrders(self.extend(request, params))
|
|
2099
2247
|
elif market['inverse']:
|
|
2100
2248
|
response = await self.dapiV2PrivateGetOpenOrders(self.extend(request, params))
|
|
2101
|
-
data = self.
|
|
2249
|
+
data = self.safe_list(response, 'data', [])
|
|
2102
2250
|
elif market['spot']:
|
|
2103
2251
|
request['symbol'] = market['id']
|
|
2104
2252
|
response = await self.spotV1PrivateGetOpenOrders(self.extend(request, params))
|
|
@@ -2156,9 +2304,11 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2156
2304
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
|
2157
2305
|
"""
|
|
2158
2306
|
cancels an open order
|
|
2159
|
-
|
|
2160
|
-
|
|
2161
|
-
|
|
2307
|
+
|
|
2308
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#cancel-order-trade
|
|
2309
|
+
https://www.bitrue.com/api-docs#cancel-order-trade-hmac-sha256
|
|
2310
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#cancel-order-trade-hmac-sha256
|
|
2311
|
+
|
|
2162
2312
|
:param str id: order id
|
|
2163
2313
|
:param str symbol: unified symbol of the market the order was made in
|
|
2164
2314
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -2186,7 +2336,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2186
2336
|
response = await self.fapiV2PrivatePostCancel(self.extend(request, params))
|
|
2187
2337
|
elif market['inverse']:
|
|
2188
2338
|
response = await self.dapiV2PrivatePostCancel(self.extend(request, params))
|
|
2189
|
-
data = self.
|
|
2339
|
+
data = self.safe_dict(response, 'data', {})
|
|
2190
2340
|
elif market['spot']:
|
|
2191
2341
|
request['symbol'] = market['id']
|
|
2192
2342
|
response = await self.spotV1PrivateDeleteOrder(self.extend(request, params))
|
|
@@ -2218,8 +2368,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2218
2368
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
|
2219
2369
|
"""
|
|
2220
2370
|
cancel all open orders in a market
|
|
2221
|
-
|
|
2222
|
-
|
|
2371
|
+
|
|
2372
|
+
https://www.bitrue.com/api-docs#cancel-all-open-orders-trade-hmac-sha256
|
|
2373
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#cancel-all-open-orders-trade-hmac-sha256
|
|
2374
|
+
|
|
2223
2375
|
:param str symbol: unified market symbol of the market to cancel orders in
|
|
2224
2376
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
2225
2377
|
:param str [params.marginMode]: 'cross' or 'isolated', for spot margin trading
|
|
@@ -2237,7 +2389,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2237
2389
|
response = await self.fapiV2PrivatePostAllOpenOrders(self.extend(request, params))
|
|
2238
2390
|
elif market['inverse']:
|
|
2239
2391
|
response = await self.dapiV2PrivatePostAllOpenOrders(self.extend(request, params))
|
|
2240
|
-
data = self.
|
|
2392
|
+
data = self.safe_list(response, 'data', [])
|
|
2241
2393
|
else:
|
|
2242
2394
|
raise NotSupported(self.id + ' cancelAllOrders only support future markets')
|
|
2243
2395
|
#
|
|
@@ -2254,9 +2406,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2254
2406
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
2255
2407
|
"""
|
|
2256
2408
|
fetch all trades made by the user
|
|
2257
|
-
|
|
2258
|
-
|
|
2259
|
-
|
|
2409
|
+
|
|
2410
|
+
https://www.bitrue.com/api_docs_includes_file/spot/index.html#account-trade-list-user_data
|
|
2411
|
+
https://www.bitrue.com/api_docs_includes_file/futures/index.html#account-trade-list-user_data-hmac-sha256
|
|
2412
|
+
|
|
2260
2413
|
:param str symbol: unified market symbol
|
|
2261
2414
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
2262
2415
|
:param int [limit]: the maximum number of trades structures to retrieve
|
|
@@ -2282,7 +2435,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2282
2435
|
response = await self.fapiV2PrivateGetMyTrades(self.extend(request, params))
|
|
2283
2436
|
elif market['inverse']:
|
|
2284
2437
|
response = await self.dapiV2PrivateGetMyTrades(self.extend(request, params))
|
|
2285
|
-
data = self.
|
|
2438
|
+
data = self.safe_list(response, 'data', [])
|
|
2286
2439
|
elif market['spot']:
|
|
2287
2440
|
request['symbol'] = market['id']
|
|
2288
2441
|
response = await self.spotV2PrivateGetMyTrades(self.extend(request, params))
|
|
@@ -2339,7 +2492,9 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2339
2492
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2340
2493
|
"""
|
|
2341
2494
|
fetch all deposits made to an account
|
|
2342
|
-
|
|
2495
|
+
|
|
2496
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#deposit-history--withdraw_data
|
|
2497
|
+
|
|
2343
2498
|
:param str code: unified currency code
|
|
2344
2499
|
:param int [since]: the earliest time in ms to fetch deposits for
|
|
2345
2500
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
|
@@ -2406,7 +2561,9 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2406
2561
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2407
2562
|
"""
|
|
2408
2563
|
fetch all withdrawals made from an account
|
|
2409
|
-
|
|
2564
|
+
|
|
2565
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#withdraw-history--withdraw_data
|
|
2566
|
+
|
|
2410
2567
|
:param str code: unified currency code
|
|
2411
2568
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
|
2412
2569
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
|
@@ -2469,7 +2626,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2469
2626
|
'6': 'canceled',
|
|
2470
2627
|
},
|
|
2471
2628
|
}
|
|
2472
|
-
statuses = self.
|
|
2629
|
+
statuses = self.safe_dict(statusesByType, type, {})
|
|
2473
2630
|
return self.safe_string(statuses, status, status)
|
|
2474
2631
|
|
|
2475
2632
|
def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
|
|
@@ -2592,10 +2749,12 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2592
2749
|
'fee': fee,
|
|
2593
2750
|
}
|
|
2594
2751
|
|
|
2595
|
-
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
|
|
2752
|
+
async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
|
|
2596
2753
|
"""
|
|
2597
2754
|
make a withdrawal
|
|
2598
|
-
|
|
2755
|
+
|
|
2756
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#withdraw-commit--withdraw_data
|
|
2757
|
+
|
|
2599
2758
|
:param str code: unified currency code
|
|
2600
2759
|
:param float amount: the amount to withdraw
|
|
2601
2760
|
:param str address: the address to withdraw to
|
|
@@ -2650,7 +2809,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2650
2809
|
# "chainDetail": [[Object]]
|
|
2651
2810
|
# }
|
|
2652
2811
|
#
|
|
2653
|
-
chainDetails = self.
|
|
2812
|
+
chainDetails = self.safe_list(fee, 'chainDetail', [])
|
|
2654
2813
|
chainDetailLength = len(chainDetails)
|
|
2655
2814
|
result: dict = {
|
|
2656
2815
|
'info': fee,
|
|
@@ -2682,7 +2841,9 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2682
2841
|
async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
|
2683
2842
|
"""
|
|
2684
2843
|
fetch deposit and withdraw fees
|
|
2685
|
-
|
|
2844
|
+
|
|
2845
|
+
https://github.com/Bitrue-exchange/Spot-official-api-docs#exchangeInfo_endpoint
|
|
2846
|
+
|
|
2686
2847
|
:param str[]|None codes: list of unified currency codes
|
|
2687
2848
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
2688
2849
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
|
@@ -2728,11 +2889,13 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2728
2889
|
'status': 'ok',
|
|
2729
2890
|
}
|
|
2730
2891
|
|
|
2731
|
-
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) ->
|
|
2892
|
+
async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
|
|
2732
2893
|
"""
|
|
2733
2894
|
fetch a history of internal transfers made on an account
|
|
2734
|
-
|
|
2735
|
-
|
|
2895
|
+
|
|
2896
|
+
https://www.bitrue.com/api-docs#get-future-account-transfer-history-list-user_data-hmac-sha256
|
|
2897
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#get-future-account-transfer-history-list-user_data-hmac-sha256
|
|
2898
|
+
|
|
2736
2899
|
:param str code: unified currency code of the currency transferred
|
|
2737
2900
|
:param int [since]: the earliest time in ms to fetch transfers for
|
|
2738
2901
|
:param int [limit]: the maximum number of transfers structures to retrieve
|
|
@@ -2780,8 +2943,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2780
2943
|
async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
|
2781
2944
|
"""
|
|
2782
2945
|
transfer currency internally between wallets on the same account
|
|
2783
|
-
|
|
2784
|
-
|
|
2946
|
+
|
|
2947
|
+
https://www.bitrue.com/api-docs#new-future-account-transfer-user_data-hmac-sha256
|
|
2948
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#user-commission-rate-user_data-hmac-sha256
|
|
2949
|
+
|
|
2785
2950
|
:param str code: unified currency code
|
|
2786
2951
|
:param float amount: amount to transfer
|
|
2787
2952
|
:param str fromAccount: account to transfer from
|
|
@@ -2791,7 +2956,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2791
2956
|
"""
|
|
2792
2957
|
await self.load_markets()
|
|
2793
2958
|
currency = self.currency(code)
|
|
2794
|
-
accountTypes = self.
|
|
2959
|
+
accountTypes = self.safe_dict(self.options, 'accountsByType', {})
|
|
2795
2960
|
fromId = self.safe_string(accountTypes, fromAccount, fromAccount)
|
|
2796
2961
|
toId = self.safe_string(accountTypes, toAccount, toAccount)
|
|
2797
2962
|
request: dict = {
|
|
@@ -2810,11 +2975,13 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2810
2975
|
data = self.safe_dict(response, 'data', {})
|
|
2811
2976
|
return self.parse_transfer(data, currency)
|
|
2812
2977
|
|
|
2813
|
-
async def set_leverage(self, leverage:
|
|
2978
|
+
async def set_leverage(self, leverage: int, symbol: Str = None, params={}):
|
|
2814
2979
|
"""
|
|
2815
2980
|
set the level of leverage for a market
|
|
2816
|
-
|
|
2817
|
-
|
|
2981
|
+
|
|
2982
|
+
https://www.bitrue.com/api-docs#change-initial-leverage-trade-hmac-sha256
|
|
2983
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#change-initial-leverage-trade-hmac-sha256
|
|
2984
|
+
|
|
2818
2985
|
:param float leverage: the rate of leverage
|
|
2819
2986
|
:param str symbol: unified market symbol
|
|
2820
2987
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -2865,8 +3032,10 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2865
3032
|
async def set_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
|
2866
3033
|
"""
|
|
2867
3034
|
Either adds or reduces margin in an isolated position in order to set the margin to a specific value
|
|
2868
|
-
|
|
2869
|
-
|
|
3035
|
+
|
|
3036
|
+
https://www.bitrue.com/api-docs#modify-isolated-position-margin-trade-hmac-sha256
|
|
3037
|
+
https://www.bitrue.com/api_docs_includes_file/delivery.html#modify-isolated-position-margin-trade-hmac-sha256
|
|
3038
|
+
|
|
2870
3039
|
:param str symbol: unified market symbol of the market to set margin in
|
|
2871
3040
|
:param float amount: the amount to set the margin to
|
|
2872
3041
|
:param dict [params]: parameters specific to the exchange API endpoint
|
|
@@ -2899,7 +3068,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2899
3068
|
version = self.safe_string(api, 1)
|
|
2900
3069
|
access = self.safe_string(api, 2)
|
|
2901
3070
|
url = None
|
|
2902
|
-
if type == 'api' and version == 'kline':
|
|
3071
|
+
if (type == 'api' and version == 'kline') or (type == 'open' and path.find('listenKey') >= 0):
|
|
2903
3072
|
url = self.urls['api'][type]
|
|
2904
3073
|
else:
|
|
2905
3074
|
url = self.urls['api'][type] + '/' + version
|
|
@@ -2908,7 +3077,7 @@ class bitrue(Exchange, ImplicitAPI):
|
|
|
2908
3077
|
if access == 'private':
|
|
2909
3078
|
self.check_required_credentials()
|
|
2910
3079
|
recvWindow = self.safe_integer(self.options, 'recvWindow', 5000)
|
|
2911
|
-
if type == 'spot':
|
|
3080
|
+
if type == 'spot' or type == 'open':
|
|
2912
3081
|
query = self.urlencode(self.extend({
|
|
2913
3082
|
'timestamp': self.nonce(),
|
|
2914
3083
|
'recvWindow': recvWindow,
|