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