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/async_support/hollaex.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.hollaex import ImplicitAPI
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
|
|
9
|
+
from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, OrderBooks, Trade, TradingFees, Transaction
|
|
10
10
|
from typing import List
|
|
11
11
|
from ccxt.base.errors import AuthenticationError
|
|
12
12
|
from ccxt.base.errors import ArgumentsRequired
|
|
@@ -15,13 +15,14 @@ from ccxt.base.errors import InsufficientFunds
|
|
|
15
15
|
from ccxt.base.errors import OrderNotFound
|
|
16
16
|
from ccxt.base.errors import OrderImmediatelyFillable
|
|
17
17
|
from ccxt.base.errors import NetworkError
|
|
18
|
+
from ccxt.base.errors import InvalidNonce
|
|
18
19
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
|
19
20
|
from ccxt.base.precise import Precise
|
|
20
21
|
|
|
21
22
|
|
|
22
23
|
class hollaex(Exchange, ImplicitAPI):
|
|
23
24
|
|
|
24
|
-
def describe(self):
|
|
25
|
+
def describe(self) -> Any:
|
|
25
26
|
return self.deep_extend(super(hollaex, self).describe(), {
|
|
26
27
|
'id': 'hollaex',
|
|
27
28
|
'name': 'HollaEx',
|
|
@@ -59,6 +60,7 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
59
60
|
'fetchCurrencies': True,
|
|
60
61
|
'fetchDepositAddress': 'emulated',
|
|
61
62
|
'fetchDepositAddresses': True,
|
|
63
|
+
'fetchDepositAddressesByNetwork': False,
|
|
62
64
|
'fetchDeposits': True,
|
|
63
65
|
'fetchFundingHistory': False,
|
|
64
66
|
'fetchFundingRate': False,
|
|
@@ -173,6 +175,84 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
173
175
|
},
|
|
174
176
|
},
|
|
175
177
|
},
|
|
178
|
+
'features': {
|
|
179
|
+
'spot': {
|
|
180
|
+
'sandbox': True,
|
|
181
|
+
'createOrder': {
|
|
182
|
+
'marginMode': False,
|
|
183
|
+
'triggerPrice': True,
|
|
184
|
+
'triggerPriceType': None,
|
|
185
|
+
'triggerDirection': False,
|
|
186
|
+
'stopLossPrice': False, # todo
|
|
187
|
+
'takeProfitPrice': False, # todo
|
|
188
|
+
'attachedStopLossTakeProfit': None,
|
|
189
|
+
'timeInForce': {
|
|
190
|
+
'IOC': False,
|
|
191
|
+
'FOK': False,
|
|
192
|
+
'PO': True,
|
|
193
|
+
'GTD': False,
|
|
194
|
+
},
|
|
195
|
+
'hedged': False,
|
|
196
|
+
'selfTradePrevention': False,
|
|
197
|
+
'trailing': False,
|
|
198
|
+
'leverage': False,
|
|
199
|
+
'marketBuyByCost': False,
|
|
200
|
+
'marketBuyRequiresPrice': False,
|
|
201
|
+
'iceberg': False,
|
|
202
|
+
},
|
|
203
|
+
'createOrders': None,
|
|
204
|
+
'fetchMyTrades': {
|
|
205
|
+
'marginMode': False,
|
|
206
|
+
'limit': 100,
|
|
207
|
+
'daysBack': 100000,
|
|
208
|
+
'untilDays': 100000, # todo implement
|
|
209
|
+
'symbolRequired': False,
|
|
210
|
+
},
|
|
211
|
+
'fetchOrder': {
|
|
212
|
+
'marginMode': False,
|
|
213
|
+
'trigger': False,
|
|
214
|
+
'trailing': False,
|
|
215
|
+
'symbolRequired': False,
|
|
216
|
+
},
|
|
217
|
+
'fetchOpenOrders': {
|
|
218
|
+
'marginMode': False,
|
|
219
|
+
'limit': 100,
|
|
220
|
+
'trigger': False,
|
|
221
|
+
'trailing': False,
|
|
222
|
+
'symbolRequired': False,
|
|
223
|
+
},
|
|
224
|
+
'fetchOrders': {
|
|
225
|
+
'marginMode': False,
|
|
226
|
+
'limit': 100,
|
|
227
|
+
'daysBack': 100000, # todo
|
|
228
|
+
'untilDays': 100000, # todo
|
|
229
|
+
'trigger': False,
|
|
230
|
+
'trailing': False,
|
|
231
|
+
'symbolRequired': False,
|
|
232
|
+
},
|
|
233
|
+
'fetchClosedOrders': {
|
|
234
|
+
'marginMode': False,
|
|
235
|
+
'limit': 100,
|
|
236
|
+
'daysBack': 100000, # todo
|
|
237
|
+
'daysBackCanceled': 1, # todo
|
|
238
|
+
'untilDays': 100000, # todo
|
|
239
|
+
'trigger': False,
|
|
240
|
+
'trailing': False,
|
|
241
|
+
'symbolRequired': False,
|
|
242
|
+
},
|
|
243
|
+
'fetchOHLCV': {
|
|
244
|
+
'limit': 1000, # todo: no limit in request
|
|
245
|
+
},
|
|
246
|
+
},
|
|
247
|
+
'swap': {
|
|
248
|
+
'linear': None,
|
|
249
|
+
'inverse': None,
|
|
250
|
+
},
|
|
251
|
+
'future': {
|
|
252
|
+
'linear': None,
|
|
253
|
+
'inverse': None,
|
|
254
|
+
},
|
|
255
|
+
},
|
|
176
256
|
'fees': {
|
|
177
257
|
'trading': {
|
|
178
258
|
'tierBased': True,
|
|
@@ -183,6 +263,7 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
183
263
|
},
|
|
184
264
|
'exceptions': {
|
|
185
265
|
'broad': {
|
|
266
|
+
'API request is expired': InvalidNonce,
|
|
186
267
|
'Invalid token': AuthenticationError,
|
|
187
268
|
'Order not found': OrderNotFound,
|
|
188
269
|
'Insufficient balance': InsufficientFunds,
|
|
@@ -213,13 +294,23 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
213
294
|
'BNB': 'bnb',
|
|
214
295
|
'MATIC': 'matic',
|
|
215
296
|
},
|
|
297
|
+
'networksById': {
|
|
298
|
+
'eth': 'ERC20',
|
|
299
|
+
'ETH': 'ERC20',
|
|
300
|
+
'ERC20': 'ERC20',
|
|
301
|
+
'trx': 'TRC20',
|
|
302
|
+
'TRX': 'TRC20',
|
|
303
|
+
'TRC20': 'TRC20',
|
|
304
|
+
},
|
|
216
305
|
},
|
|
217
306
|
})
|
|
218
307
|
|
|
219
308
|
async def fetch_markets(self, params={}) -> List[Market]:
|
|
220
309
|
"""
|
|
221
310
|
retrieves data on all markets for hollaex
|
|
222
|
-
|
|
311
|
+
|
|
312
|
+
https://apidocs.hollaex.com/#constants
|
|
313
|
+
|
|
223
314
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
224
315
|
:returns dict[]: an array of objects representing market data
|
|
225
316
|
"""
|
|
@@ -332,72 +423,123 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
332
423
|
async def fetch_currencies(self, params={}) -> Currencies:
|
|
333
424
|
"""
|
|
334
425
|
fetches all available currencies on an exchange
|
|
335
|
-
|
|
426
|
+
|
|
427
|
+
https://apidocs.hollaex.com/#constants
|
|
428
|
+
|
|
336
429
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
337
430
|
:returns dict: an associative dictionary of currencies
|
|
338
431
|
"""
|
|
339
432
|
response = await self.publicGetConstants(params)
|
|
340
433
|
#
|
|
341
|
-
#
|
|
342
|
-
#
|
|
343
|
-
#
|
|
344
|
-
#
|
|
345
|
-
#
|
|
346
|
-
#
|
|
347
|
-
#
|
|
348
|
-
#
|
|
349
|
-
#
|
|
350
|
-
#
|
|
351
|
-
#
|
|
352
|
-
#
|
|
353
|
-
#
|
|
354
|
-
#
|
|
355
|
-
#
|
|
356
|
-
#
|
|
357
|
-
#
|
|
358
|
-
#
|
|
359
|
-
#
|
|
360
|
-
#
|
|
361
|
-
#
|
|
362
|
-
#
|
|
363
|
-
#
|
|
364
|
-
#
|
|
365
|
-
#
|
|
366
|
-
#
|
|
367
|
-
#
|
|
368
|
-
#
|
|
369
|
-
#
|
|
370
|
-
#
|
|
434
|
+
# {
|
|
435
|
+
# "coins": {
|
|
436
|
+
# "usdt": {
|
|
437
|
+
# "id": "6",
|
|
438
|
+
# "fullname": "USD Tether",
|
|
439
|
+
# "symbol": "usdt",
|
|
440
|
+
# "active": True,
|
|
441
|
+
# "verified": True,
|
|
442
|
+
# "allow_deposit": True,
|
|
443
|
+
# "allow_withdrawal": True,
|
|
444
|
+
# "withdrawal_fee": "20",
|
|
445
|
+
# "min": "1",
|
|
446
|
+
# "max": "10000000",
|
|
447
|
+
# "increment_unit": "0.0001",
|
|
448
|
+
# "logo": "https://hollaex-resources.s3.ap-southeast-1.amazonaws.com/icons/usdt.svg",
|
|
449
|
+
# "code": "usdt",
|
|
450
|
+
# "is_public": True,
|
|
451
|
+
# "meta": {
|
|
452
|
+
# "color": "#27a17a",
|
|
453
|
+
# "website": "https://tether.to",
|
|
454
|
+
# "explorer": "https://blockchair.com/tether",
|
|
455
|
+
# "decimal_points": "6"
|
|
456
|
+
# },
|
|
457
|
+
# "estimated_price": "1",
|
|
458
|
+
# "description": "<p>Tether(USDT) is a stablecoin pegged 1:1 to the US dollar. It is a digital currency that aims to maintain its value while allowing for fast and secure transfer of funds. It was the first stablecoin, and is the most widely used due stablecoin due to its stability and low volatility compared to other cryptocurrencies. It was launched in 2014 by Tether Limited.</p>",
|
|
459
|
+
# "type": "blockchain",
|
|
460
|
+
# "network": "eth,trx,bnb,matic",
|
|
461
|
+
# "standard": "",
|
|
462
|
+
# "issuer": "HollaEx",
|
|
463
|
+
# "withdrawal_fees": {
|
|
464
|
+
# "bnb": {
|
|
465
|
+
# "value": "0.8",
|
|
466
|
+
# "active": True,
|
|
467
|
+
# "symbol": "usdt"
|
|
468
|
+
# },
|
|
469
|
+
# "eth": {
|
|
470
|
+
# "value": "1.5",
|
|
471
|
+
# "active": True,
|
|
472
|
+
# "symbol": "usdt"
|
|
473
|
+
# },
|
|
474
|
+
# "trx": {
|
|
475
|
+
# "value": "4",
|
|
476
|
+
# "active": True,
|
|
477
|
+
# "symbol": "usdt"
|
|
478
|
+
# },
|
|
479
|
+
# "matic": {
|
|
480
|
+
# "value": "0.3",
|
|
481
|
+
# "active": True,
|
|
482
|
+
# "symbol": "usdt"
|
|
483
|
+
# }
|
|
484
|
+
# },
|
|
485
|
+
# "display_name": null,
|
|
486
|
+
# "deposit_fees": null,
|
|
487
|
+
# "is_risky": False,
|
|
488
|
+
# "market_cap": "144568098696.29",
|
|
489
|
+
# "category": "stable",
|
|
490
|
+
# "created_at": "2019-08-09T10:45:43.367Z",
|
|
491
|
+
# "updated_at": "2025-03-25T17:12:37.970Z",
|
|
492
|
+
# "created_by": "168",
|
|
493
|
+
# "owner_id": "1"
|
|
494
|
+
# },
|
|
371
495
|
# },
|
|
372
496
|
# "network":"https://api.hollaex.network"
|
|
373
497
|
# }
|
|
374
498
|
#
|
|
375
|
-
coins = self.
|
|
499
|
+
coins = self.safe_dict(response, 'coins', {})
|
|
376
500
|
keys = list(coins.keys())
|
|
377
501
|
result: dict = {}
|
|
378
502
|
for i in range(0, len(keys)):
|
|
379
503
|
key = keys[i]
|
|
380
504
|
currency = coins[key]
|
|
381
505
|
id = self.safe_string(currency, 'symbol')
|
|
382
|
-
numericId = self.safe_integer(currency, 'id')
|
|
383
506
|
code = self.safe_currency_code(id)
|
|
384
|
-
|
|
385
|
-
|
|
386
|
-
|
|
387
|
-
|
|
388
|
-
|
|
389
|
-
|
|
390
|
-
|
|
391
|
-
|
|
507
|
+
withdrawalLimits = self.safe_list(currency, 'withdrawal_limits', [])
|
|
508
|
+
rawType = self.safe_string(currency, 'type')
|
|
509
|
+
type = 'crypto' if (rawType == 'blockchain') else 'other'
|
|
510
|
+
rawNetworks = self.safe_dict(currency, 'withdrawal_fees', {})
|
|
511
|
+
networks = {}
|
|
512
|
+
networkIds = list(rawNetworks.keys())
|
|
513
|
+
for j in range(0, len(networkIds)):
|
|
514
|
+
networkId = networkIds[j]
|
|
515
|
+
networkEntry = self.safe_dict(rawNetworks, networkId)
|
|
516
|
+
networkCode = self.network_id_to_code(networkId)
|
|
517
|
+
networks[networkCode] = {
|
|
518
|
+
'id': networkId,
|
|
519
|
+
'network': networkCode,
|
|
520
|
+
'active': self.safe_bool(networkEntry, 'active'),
|
|
521
|
+
'deposit': None,
|
|
522
|
+
'withdraw': None,
|
|
523
|
+
'fee': self.safe_number(networkEntry, 'value'),
|
|
524
|
+
'precision': None,
|
|
525
|
+
'limits': {
|
|
526
|
+
'withdraw': {
|
|
527
|
+
'min': None,
|
|
528
|
+
'max': None,
|
|
529
|
+
},
|
|
530
|
+
},
|
|
531
|
+
'info': networkEntry,
|
|
532
|
+
}
|
|
533
|
+
result[code] = self.safe_currency_structure({
|
|
392
534
|
'id': id,
|
|
393
|
-
'numericId':
|
|
535
|
+
'numericId': self.safe_integer(currency, 'id'),
|
|
394
536
|
'code': code,
|
|
395
537
|
'info': currency,
|
|
396
|
-
'name':
|
|
397
|
-
'active': active,
|
|
398
|
-
'deposit':
|
|
399
|
-
'withdraw':
|
|
400
|
-
'fee':
|
|
538
|
+
'name': self.safe_string(currency, 'fullname'),
|
|
539
|
+
'active': self.safe_bool(currency, 'active'),
|
|
540
|
+
'deposit': self.safe_bool(currency, 'allow_deposit'),
|
|
541
|
+
'withdraw': self.safe_bool(currency, 'allow_withdrawal'),
|
|
542
|
+
'fee': self.safe_number(currency, 'withdrawal_fee'),
|
|
401
543
|
'precision': self.safe_number(currency, 'increment_unit'),
|
|
402
544
|
'limits': {
|
|
403
545
|
'amount': {
|
|
@@ -409,14 +551,17 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
409
551
|
'max': self.safe_value(withdrawalLimits, 0),
|
|
410
552
|
},
|
|
411
553
|
},
|
|
412
|
-
'networks':
|
|
413
|
-
|
|
554
|
+
'networks': networks,
|
|
555
|
+
'type': type,
|
|
556
|
+
})
|
|
414
557
|
return result
|
|
415
558
|
|
|
416
|
-
async def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
|
|
559
|
+
async def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}) -> OrderBooks:
|
|
417
560
|
"""
|
|
418
561
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
|
|
419
|
-
|
|
562
|
+
|
|
563
|
+
https://apidocs.hollaex.com/#orderbooks
|
|
564
|
+
|
|
420
565
|
:param str[]|None symbols: not used by hollaex fetchOrderBooks()
|
|
421
566
|
:param int [limit]: not used by hollaex fetchOrderBooks()
|
|
422
567
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -437,7 +582,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
437
582
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
438
583
|
"""
|
|
439
584
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
440
|
-
|
|
585
|
+
|
|
586
|
+
https://apidocs.hollaex.com/#orderbook
|
|
587
|
+
|
|
441
588
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
442
589
|
:param int [limit]: the maximum amount of order book entries to return
|
|
443
590
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -475,7 +622,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
475
622
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
476
623
|
"""
|
|
477
624
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
478
|
-
|
|
625
|
+
|
|
626
|
+
https://apidocs.hollaex.com/#ticker
|
|
627
|
+
|
|
479
628
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
480
629
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
481
630
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -502,7 +651,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
502
651
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
503
652
|
"""
|
|
504
653
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
505
|
-
|
|
654
|
+
|
|
655
|
+
https://apidocs.hollaex.com/#tickers
|
|
656
|
+
|
|
506
657
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
507
658
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
508
659
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -597,7 +748,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
597
748
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
598
749
|
"""
|
|
599
750
|
get the list of most recent trades for a particular symbol
|
|
600
|
-
|
|
751
|
+
|
|
752
|
+
https://apidocs.hollaex.com/#trades
|
|
753
|
+
|
|
601
754
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
602
755
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
603
756
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -645,7 +798,8 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
645
798
|
# "price":0.147411,
|
|
646
799
|
# "timestamp":"2022-01-26T17:53:34.650Z",
|
|
647
800
|
# "order_id":"cba78ecb-4187-4da2-9d2f-c259aa693b5a",
|
|
648
|
-
# "fee":0.01031877,
|
|
801
|
+
# "fee":0.01031877,
|
|
802
|
+
# "fee_coin":"usdt"
|
|
649
803
|
# }
|
|
650
804
|
#
|
|
651
805
|
marketId = self.safe_string(trade, 'symbol')
|
|
@@ -658,11 +812,12 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
658
812
|
priceString = self.safe_string(trade, 'price')
|
|
659
813
|
amountString = self.safe_string(trade, 'size')
|
|
660
814
|
feeCostString = self.safe_string(trade, 'fee')
|
|
815
|
+
feeCoin = self.safe_string(trade, 'fee_coin')
|
|
661
816
|
fee = None
|
|
662
817
|
if feeCostString is not None:
|
|
663
818
|
fee = {
|
|
664
819
|
'cost': feeCostString,
|
|
665
|
-
'currency':
|
|
820
|
+
'currency': self.safe_currency_code(feeCoin),
|
|
666
821
|
}
|
|
667
822
|
return self.safe_trade({
|
|
668
823
|
'info': trade,
|
|
@@ -683,7 +838,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
683
838
|
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
|
684
839
|
"""
|
|
685
840
|
fetch the trading fees for multiple markets
|
|
686
|
-
|
|
841
|
+
|
|
842
|
+
https://apidocs.hollaex.com/#tiers
|
|
843
|
+
|
|
687
844
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
688
845
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
|
689
846
|
"""
|
|
@@ -739,13 +896,16 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
739
896
|
|
|
740
897
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
741
898
|
"""
|
|
742
|
-
|
|
743
|
-
|
|
899
|
+
hollaex has large gaps between candles, so it's recommended to specify since
|
|
900
|
+
|
|
901
|
+
https://apidocs.hollaex.com/#chart
|
|
902
|
+
|
|
744
903
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
745
904
|
:param str timeframe: the length of time each candle represents
|
|
746
905
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
747
|
-
:param int [limit]: the maximum amount of candles to fetch
|
|
906
|
+
:param int [limit]: the maximum amount of candles to fetch(max 500)
|
|
748
907
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
908
|
+
:param int [params.until]: timestamp in ms of the latest candle to fetch
|
|
749
909
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
|
750
910
|
"""
|
|
751
911
|
await self.load_markets()
|
|
@@ -754,22 +914,25 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
754
914
|
'symbol': market['id'],
|
|
755
915
|
'resolution': self.safe_string(self.timeframes, timeframe, timeframe),
|
|
756
916
|
}
|
|
757
|
-
|
|
758
|
-
|
|
759
|
-
|
|
760
|
-
|
|
761
|
-
|
|
762
|
-
|
|
763
|
-
|
|
764
|
-
|
|
765
|
-
|
|
766
|
-
|
|
767
|
-
|
|
768
|
-
|
|
769
|
-
|
|
770
|
-
|
|
771
|
-
|
|
772
|
-
|
|
917
|
+
paginate = False
|
|
918
|
+
maxLimit = 500
|
|
919
|
+
paginate, params = self.handle_option_and_params(params, 'fetchOHLCV', 'paginate', paginate)
|
|
920
|
+
if paginate:
|
|
921
|
+
return await self.fetch_paginated_call_deterministic('fetchOHLCV', symbol, since, limit, timeframe, params, maxLimit)
|
|
922
|
+
until = self.safe_integer(params, 'until')
|
|
923
|
+
timeDelta = self.parse_timeframe(timeframe) * maxLimit * 1000
|
|
924
|
+
start = since
|
|
925
|
+
now = self.milliseconds()
|
|
926
|
+
if until is None and start is None:
|
|
927
|
+
until = now
|
|
928
|
+
start = until - timeDelta
|
|
929
|
+
elif until is None:
|
|
930
|
+
until = now # the exchange has not a lot of trades, so if we count until by limit and limit is small, it may return empty result
|
|
931
|
+
elif start is None:
|
|
932
|
+
start = until - timeDelta
|
|
933
|
+
request['from'] = self.parse_to_int(start / 1000) # convert to seconds
|
|
934
|
+
request['to'] = self.parse_to_int(until / 1000) # convert to seconds
|
|
935
|
+
params = self.omit(params, 'until')
|
|
773
936
|
response = await self.publicGetChart(self.extend(request, params))
|
|
774
937
|
#
|
|
775
938
|
# [
|
|
@@ -827,7 +990,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
827
990
|
async def fetch_balance(self, params={}) -> Balances:
|
|
828
991
|
"""
|
|
829
992
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
|
830
|
-
|
|
993
|
+
|
|
994
|
+
https://apidocs.hollaex.com/#get-balance
|
|
995
|
+
|
|
831
996
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
832
997
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
833
998
|
"""
|
|
@@ -850,7 +1015,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
850
1015
|
async def fetch_open_order(self, id: str, symbol: Str = None, params={}):
|
|
851
1016
|
"""
|
|
852
1017
|
fetch an open order by it's id
|
|
853
|
-
|
|
1018
|
+
|
|
1019
|
+
https://apidocs.hollaex.com/#get-order
|
|
1020
|
+
|
|
854
1021
|
:param str id: order id
|
|
855
1022
|
:param str symbol: not used by hollaex fetchOpenOrder()
|
|
856
1023
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -890,7 +1057,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
890
1057
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
891
1058
|
"""
|
|
892
1059
|
fetch all unfilled currently open orders
|
|
893
|
-
|
|
1060
|
+
|
|
1061
|
+
https://apidocs.hollaex.com/#get-all-orders
|
|
1062
|
+
|
|
894
1063
|
:param str symbol: unified market symbol
|
|
895
1064
|
:param int [since]: the earliest time in ms to fetch open orders for
|
|
896
1065
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
|
@@ -905,7 +1074,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
905
1074
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
906
1075
|
"""
|
|
907
1076
|
fetches information on multiple closed orders made by the user
|
|
908
|
-
|
|
1077
|
+
|
|
1078
|
+
https://apidocs.hollaex.com/#get-all-orders
|
|
1079
|
+
|
|
909
1080
|
:param str symbol: unified market symbol of the market orders were made in
|
|
910
1081
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
911
1082
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -920,7 +1091,10 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
920
1091
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
|
921
1092
|
"""
|
|
922
1093
|
fetches information on an order made by the user
|
|
923
|
-
|
|
1094
|
+
|
|
1095
|
+
https://apidocs.hollaex.com/#get-order
|
|
1096
|
+
|
|
1097
|
+
:param str id:
|
|
924
1098
|
:param str symbol: unified symbol of the market the order was made in
|
|
925
1099
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
926
1100
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
@@ -960,7 +1134,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
960
1134
|
async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
961
1135
|
"""
|
|
962
1136
|
fetches information on multiple orders made by the user
|
|
963
|
-
|
|
1137
|
+
|
|
1138
|
+
https://apidocs.hollaex.com/#get-all-orders
|
|
1139
|
+
|
|
964
1140
|
:param str symbol: unified market symbol of the market orders were made in
|
|
965
1141
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
966
1142
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
@@ -1066,7 +1242,6 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1066
1242
|
type = self.safe_string(order, 'type')
|
|
1067
1243
|
side = self.safe_string(order, 'side')
|
|
1068
1244
|
price = self.safe_string(order, 'price')
|
|
1069
|
-
stopPrice = self.safe_string(order, 'stop')
|
|
1070
1245
|
amount = self.safe_string(order, 'size')
|
|
1071
1246
|
filled = self.safe_string(order, 'filled')
|
|
1072
1247
|
status = self.parse_order_status(self.safe_string(order, 'status'))
|
|
@@ -1085,8 +1260,7 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1085
1260
|
'postOnly': postOnly,
|
|
1086
1261
|
'side': side,
|
|
1087
1262
|
'price': price,
|
|
1088
|
-
'
|
|
1089
|
-
'triggerPrice': stopPrice,
|
|
1263
|
+
'triggerPrice': self.safe_string(order, 'stop'),
|
|
1090
1264
|
'amount': amount,
|
|
1091
1265
|
'filled': filled,
|
|
1092
1266
|
'remaining': None,
|
|
@@ -1100,12 +1274,14 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1100
1274
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
|
1101
1275
|
"""
|
|
1102
1276
|
create a trade order
|
|
1103
|
-
|
|
1277
|
+
|
|
1278
|
+
https://apidocs.hollaex.com/#create-order
|
|
1279
|
+
|
|
1104
1280
|
:param str symbol: unified symbol of the market to create an order in
|
|
1105
1281
|
:param str type: 'market' or 'limit'
|
|
1106
1282
|
:param str side: 'buy' or 'sell'
|
|
1107
1283
|
:param float amount: how much of currency you want to trade in units of base currency
|
|
1108
|
-
:param float [price]: the price at which the order is to be
|
|
1284
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1109
1285
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1110
1286
|
:param float [params.triggerPrice]: the price at which a trigger order is triggered at
|
|
1111
1287
|
:param bool [params.postOnly]: if True, the order will only be posted to the order book and not executed immediately
|
|
@@ -1113,25 +1289,23 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1113
1289
|
"""
|
|
1114
1290
|
await self.load_markets()
|
|
1115
1291
|
market = self.market(symbol)
|
|
1116
|
-
convertedAmount = float(self.amount_to_precision(symbol, amount))
|
|
1117
1292
|
request: dict = {
|
|
1118
1293
|
'symbol': market['id'],
|
|
1119
1294
|
'side': side,
|
|
1120
|
-
'size': self.
|
|
1295
|
+
'size': self.amount_to_precision(symbol, amount),
|
|
1121
1296
|
'type': type,
|
|
1122
1297
|
# 'stop': float(self.price_to_precision(symbol, stopPrice)),
|
|
1123
1298
|
# 'meta': {}, # other options such
|
|
1124
1299
|
}
|
|
1125
|
-
|
|
1300
|
+
triggerPrice = self.safe_number_n(params, ['triggerPrice', 'stopPrice', 'stop'])
|
|
1126
1301
|
meta = self.safe_value(params, 'meta', {})
|
|
1127
1302
|
exchangeSpecificParam = self.safe_bool(meta, 'post_only', False)
|
|
1128
1303
|
isMarketOrder = type == 'market'
|
|
1129
1304
|
postOnly = self.is_post_only(isMarketOrder, exchangeSpecificParam, params)
|
|
1130
1305
|
if not isMarketOrder:
|
|
1131
|
-
|
|
1132
|
-
|
|
1133
|
-
|
|
1134
|
-
request['stop'] = self.normalize_number_if_needed(float(self.price_to_precision(symbol, stopPrice)))
|
|
1306
|
+
request['price'] = self.price_to_precision(symbol, price)
|
|
1307
|
+
if triggerPrice is not None:
|
|
1308
|
+
request['stop'] = self.price_to_precision(symbol, triggerPrice)
|
|
1135
1309
|
if postOnly:
|
|
1136
1310
|
request['meta'] = {'post_only': True}
|
|
1137
1311
|
params = self.omit(params, ['postOnly', 'timeInForce', 'stopPrice', 'triggerPrice', 'stop'])
|
|
@@ -1164,7 +1338,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1164
1338
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
|
1165
1339
|
"""
|
|
1166
1340
|
cancels an open order
|
|
1167
|
-
|
|
1341
|
+
|
|
1342
|
+
https://apidocs.hollaex.com/#cancel-order
|
|
1343
|
+
|
|
1168
1344
|
:param str id: order id
|
|
1169
1345
|
:param str symbol: unified symbol of the market the order was made in
|
|
1170
1346
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1193,7 +1369,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1193
1369
|
async def cancel_all_orders(self, symbol: Str = None, params={}):
|
|
1194
1370
|
"""
|
|
1195
1371
|
cancel all open orders in a market
|
|
1196
|
-
|
|
1372
|
+
|
|
1373
|
+
https://apidocs.hollaex.com/#cancel-all-orders
|
|
1374
|
+
|
|
1197
1375
|
:param str symbol: unified market symbol of the market to cancel orders in
|
|
1198
1376
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1199
1377
|
:returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
|
@@ -1226,7 +1404,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1226
1404
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
1227
1405
|
"""
|
|
1228
1406
|
fetch all trades made by the user
|
|
1229
|
-
|
|
1407
|
+
|
|
1408
|
+
https://apidocs.hollaex.com/#get-trades
|
|
1409
|
+
|
|
1230
1410
|
:param str symbol: unified market symbol
|
|
1231
1411
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
1232
1412
|
:param int [limit]: the maximum number of trades structures to retrieve
|
|
@@ -1270,7 +1450,7 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1270
1450
|
data = self.safe_list(response, 'data', [])
|
|
1271
1451
|
return self.parse_trades(data, market, since, limit)
|
|
1272
1452
|
|
|
1273
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
|
1453
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
|
1274
1454
|
#
|
|
1275
1455
|
# {
|
|
1276
1456
|
# "currency":"usdt",
|
|
@@ -1292,17 +1472,19 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1292
1472
|
currency = self.safe_currency(currencyId, currency)
|
|
1293
1473
|
network = self.safe_string(depositAddress, 'network')
|
|
1294
1474
|
return {
|
|
1475
|
+
'info': depositAddress,
|
|
1295
1476
|
'currency': currency['code'],
|
|
1477
|
+
'network': network,
|
|
1296
1478
|
'address': address,
|
|
1297
1479
|
'tag': tag,
|
|
1298
|
-
'network': network,
|
|
1299
|
-
'info': depositAddress,
|
|
1300
1480
|
}
|
|
1301
1481
|
|
|
1302
|
-
async def fetch_deposit_addresses(self, codes: Strings = None, params={}):
|
|
1482
|
+
async def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
|
|
1303
1483
|
"""
|
|
1304
1484
|
fetch deposit addresses for multiple currencies and chain types
|
|
1305
|
-
|
|
1485
|
+
|
|
1486
|
+
https://apidocs.hollaex.com/#get-user
|
|
1487
|
+
|
|
1306
1488
|
:param str[]|None codes: list of unified currency codes, default is None
|
|
1307
1489
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1308
1490
|
:returns dict: a list of `address structures <https://docs.ccxt.com/#/?id=address-structure>`
|
|
@@ -1363,7 +1545,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1363
1545
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
1364
1546
|
"""
|
|
1365
1547
|
fetch all deposits made to an account
|
|
1366
|
-
|
|
1548
|
+
|
|
1549
|
+
https://apidocs.hollaex.com/#get-deposits
|
|
1550
|
+
|
|
1367
1551
|
:param str code: unified currency code
|
|
1368
1552
|
:param int [since]: the earliest time in ms to fetch deposits for
|
|
1369
1553
|
:param int [limit]: the maximum number of deposits structures to retrieve
|
|
@@ -1418,7 +1602,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1418
1602
|
async def fetch_withdrawal(self, id: str, code: Str = None, params={}):
|
|
1419
1603
|
"""
|
|
1420
1604
|
fetch data on a currency withdrawal via the withdrawal id
|
|
1421
|
-
|
|
1605
|
+
|
|
1606
|
+
https://apidocs.hollaex.com/#get-withdrawals
|
|
1607
|
+
|
|
1422
1608
|
:param str id: withdrawal id
|
|
1423
1609
|
:param str code: unified currency code of the currency withdrawn, default is None
|
|
1424
1610
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1463,7 +1649,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1463
1649
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
1464
1650
|
"""
|
|
1465
1651
|
fetch all withdrawals made from an account
|
|
1466
|
-
|
|
1652
|
+
|
|
1653
|
+
https://apidocs.hollaex.com/#get-withdrawals
|
|
1654
|
+
|
|
1467
1655
|
:param str code: unified currency code
|
|
1468
1656
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
|
1469
1657
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
|
@@ -1610,10 +1798,12 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1610
1798
|
'fee': fee,
|
|
1611
1799
|
}
|
|
1612
1800
|
|
|
1613
|
-
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
|
|
1801
|
+
async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
|
|
1614
1802
|
"""
|
|
1615
1803
|
make a withdrawal
|
|
1616
|
-
|
|
1804
|
+
|
|
1805
|
+
https://apidocs.hollaex.com/#withdrawal
|
|
1806
|
+
|
|
1617
1807
|
:param str code: unified currency code
|
|
1618
1808
|
:param float amount: the amount to withdraw
|
|
1619
1809
|
:param str address: the address to withdraw to
|
|
@@ -1717,7 +1907,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1717
1907
|
async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
|
1718
1908
|
"""
|
|
1719
1909
|
fetch deposit and withdraw fees
|
|
1720
|
-
|
|
1910
|
+
|
|
1911
|
+
https://apidocs.hollaex.com/#constants
|
|
1912
|
+
|
|
1721
1913
|
:param str[]|None codes: list of unified currency codes
|
|
1722
1914
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1723
1915
|
:returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
|
|
@@ -1758,14 +1950,9 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1758
1950
|
# "network":"https://api.hollaex.network"
|
|
1759
1951
|
# }
|
|
1760
1952
|
#
|
|
1761
|
-
coins = self.
|
|
1953
|
+
coins = self.safe_dict(response, 'coins', {})
|
|
1762
1954
|
return self.parse_deposit_withdraw_fees(coins, codes, 'symbol')
|
|
1763
1955
|
|
|
1764
|
-
def normalize_number_if_needed(self, number):
|
|
1765
|
-
if self.is_round_number(number):
|
|
1766
|
-
number = int(number)
|
|
1767
|
-
return number
|
|
1768
|
-
|
|
1769
1956
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
1770
1957
|
query = self.omit(params, self.extract_params(path))
|
|
1771
1958
|
path = '/' + self.version + '/' + self.implode_params(path, params)
|
|
@@ -1793,13 +1980,14 @@ class hollaex(Exchange, ImplicitAPI):
|
|
|
1793
1980
|
return {'url': url, 'method': method, 'body': body, 'headers': headers}
|
|
1794
1981
|
|
|
1795
1982
|
def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
|
|
1983
|
+
# {"message": "Invalid token"}
|
|
1796
1984
|
if response is None:
|
|
1797
1985
|
return None
|
|
1798
1986
|
if (code >= 400) and (code <= 503):
|
|
1799
1987
|
#
|
|
1800
1988
|
# {"message": "Invalid token"}
|
|
1801
1989
|
#
|
|
1802
|
-
# different errors return the same code eg
|
|
1990
|
+
# different errors return the same code eg
|
|
1803
1991
|
#
|
|
1804
1992
|
# {"message":"Error 1001 - Order rejected. Order could not be submitted order was set to a post only order."}
|
|
1805
1993
|
#
|