ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__py2.py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- ccxt/__init__.py +39 -35
- ccxt/abantether.py +8 -8
- ccxt/abstract/alpaca.py +4 -0
- ccxt/abstract/apex.py +31 -0
- ccxt/abstract/bigone.py +1 -1
- ccxt/abstract/binance.py +106 -48
- ccxt/abstract/binancecoinm.py +106 -48
- ccxt/abstract/binanceus.py +141 -83
- ccxt/abstract/binanceusdm.py +106 -48
- ccxt/abstract/bingx.py +50 -1
- ccxt/abstract/bitbank.py +5 -0
- ccxt/abstract/bitfinex.py +136 -65
- ccxt/abstract/bitflyer.py +1 -0
- ccxt/abstract/bitget.py +67 -0
- ccxt/abstract/bitmart.py +19 -1
- ccxt/abstract/bitopro.py +1 -0
- ccxt/abstract/bitrue.py +68 -68
- ccxt/abstract/bitstamp.py +1 -0
- ccxt/abstract/blofin.py +30 -0
- ccxt/abstract/btcbox.py +2 -0
- ccxt/abstract/bybit.py +28 -13
- ccxt/abstract/cex.py +28 -29
- ccxt/abstract/coinbaseexchange.py +1 -0
- ccxt/abstract/coinbaseinternational.py +1 -1
- ccxt/abstract/cryptocom.py +16 -0
- ccxt/abstract/cryptomus.py +20 -0
- ccxt/abstract/defx.py +69 -0
- ccxt/abstract/deribit.py +1 -0
- ccxt/abstract/derive.py +117 -0
- ccxt/abstract/digifinex.py +1 -0
- ccxt/abstract/ellipx.py +25 -0
- ccxt/abstract/foxbit.py +26 -0
- ccxt/abstract/gate.py +19 -0
- ccxt/abstract/gateio.py +19 -0
- ccxt/abstract/gemini.py +1 -0
- ccxt/abstract/hibachi.py +26 -0
- ccxt/abstract/hyperliquid.py +1 -1
- ccxt/abstract/independentreserve.py +6 -0
- ccxt/abstract/kraken.py +1 -0
- ccxt/abstract/krakenfutures.py +4 -0
- ccxt/abstract/kucoin.py +10 -0
- ccxt/abstract/kucoinfutures.py +18 -0
- ccxt/abstract/lbank.py +2 -1
- ccxt/abstract/luno.py +1 -0
- ccxt/abstract/mexc.py +2 -0
- ccxt/abstract/modetrade.py +119 -0
- ccxt/abstract/myokx.py +349 -0
- ccxt/abstract/oceanex.py +5 -0
- ccxt/abstract/okx.py +25 -0
- ccxt/abstract/okxus.py +349 -0
- ccxt/abstract/onetrading.py +0 -12
- ccxt/abstract/paradex.py +23 -0
- ccxt/abstract/phemex.py +2 -0
- ccxt/abstract/poloniex.py +36 -0
- ccxt/abstract/tradeogre.py +3 -1
- ccxt/abstract/upbit.py +51 -34
- ccxt/abstract/whitebit.py +16 -0
- ccxt/abstract/woo.py +64 -6
- ccxt/abstract/xt.py +10 -5
- ccxt/afratether.py +7 -7
- ccxt/alpaca.py +828 -51
- ccxt/apex.py +1875 -0
- ccxt/arzinja.py +7 -7
- ccxt/arzplus.py +9 -9
- ccxt/ascendex.py +501 -306
- ccxt/async_support/__init__.py +39 -35
- ccxt/async_support/abantether.py +8 -8
- ccxt/async_support/afratether.py +9 -9
- ccxt/async_support/alpaca.py +828 -51
- ccxt/async_support/apex.py +1875 -0
- ccxt/async_support/arzinja.py +10 -10
- ccxt/async_support/arzplus.py +12 -12
- ccxt/async_support/ascendex.py +502 -306
- ccxt/async_support/base/exchange.py +303 -89
- ccxt/async_support/base/ws/cache.py +9 -3
- ccxt/async_support/base/ws/client.py +173 -38
- ccxt/async_support/base/ws/future.py +25 -37
- ccxt/async_support/bequant.py +5 -3
- ccxt/async_support/bigone.py +279 -144
- ccxt/async_support/binance.py +2347 -1158
- ccxt/async_support/binancecoinm.py +9 -3
- ccxt/async_support/binanceus.py +17 -3
- ccxt/async_support/binanceusdm.py +9 -4
- ccxt/async_support/bingx.py +2962 -920
- ccxt/async_support/bit2c.py +147 -27
- ccxt/async_support/bitbank.py +151 -23
- ccxt/async_support/bitbns.py +104 -30
- ccxt/async_support/bitfinex.py +3291 -1113
- ccxt/async_support/bitflyer.py +202 -27
- ccxt/async_support/bitget.py +3683 -1538
- ccxt/async_support/bithumb.py +195 -38
- ccxt/async_support/bitimen.py +12 -12
- ccxt/async_support/bitir.py +38 -38
- ccxt/async_support/bitmart.py +1288 -350
- ccxt/async_support/bitmex.py +260 -75
- ccxt/async_support/bitopro.py +262 -62
- ccxt/async_support/bitpin.py +17 -16
- ccxt/async_support/bitrue.py +459 -290
- ccxt/async_support/bitso.py +199 -54
- ccxt/async_support/bitstamp.py +230 -96
- ccxt/async_support/bitteam.py +167 -25
- ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
- ccxt/async_support/bitvavo.py +213 -49
- ccxt/async_support/blockchaincom.py +160 -46
- ccxt/async_support/blofin.py +502 -120
- ccxt/async_support/btcalpha.py +169 -31
- ccxt/async_support/btcbox.py +292 -23
- ccxt/async_support/btcmarkets.py +211 -58
- ccxt/async_support/btcturk.py +161 -38
- ccxt/async_support/bybit.py +1775 -1030
- ccxt/async_support/cex.py +1440 -1303
- ccxt/async_support/coinbase.py +724 -212
- ccxt/async_support/coinbaseadvanced.py +2 -1
- ccxt/async_support/coinbaseexchange.py +388 -89
- ccxt/async_support/coinbaseinternational.py +412 -57
- ccxt/async_support/coincatch.py +177 -78
- ccxt/async_support/coincheck.py +135 -19
- ccxt/async_support/coinex.py +606 -232
- ccxt/async_support/coinmate.py +189 -63
- ccxt/async_support/coinmetro.py +195 -54
- ccxt/async_support/coinone.py +158 -51
- ccxt/async_support/coinsph.py +336 -61
- ccxt/async_support/coinspot.py +151 -52
- ccxt/async_support/cryptocom.py +661 -111
- ccxt/async_support/cryptomus.py +1137 -0
- ccxt/async_support/defx.py +2071 -0
- ccxt/async_support/delta.py +299 -99
- ccxt/async_support/deribit.py +348 -126
- ccxt/async_support/derive.py +2572 -0
- ccxt/async_support/digifinex.py +430 -214
- ccxt/async_support/ellipx.py +2029 -0
- ccxt/async_support/eterex.py +10 -10
- ccxt/async_support/excoino.py +31 -31
- ccxt/async_support/exir.py +14 -14
- ccxt/async_support/exmo.py +344 -131
- ccxt/async_support/exnovin.py +10 -10
- ccxt/async_support/farhadexchange.py +12 -12
- ccxt/async_support/fmfwio.py +2 -1
- ccxt/async_support/foxbit.py +1935 -0
- ccxt/async_support/gate.py +1351 -529
- ccxt/async_support/gateio.py +2 -1
- ccxt/async_support/gemini.py +144 -39
- ccxt/async_support/hashkey.py +152 -109
- ccxt/async_support/hibachi.py +2080 -0
- ccxt/async_support/hitbtc.py +395 -167
- ccxt/async_support/hitobit.py +12 -12
- ccxt/async_support/hollaex.py +307 -119
- ccxt/async_support/htx.py +851 -383
- ccxt/async_support/huobi.py +2 -1
- ccxt/async_support/hyperliquid.py +1848 -536
- ccxt/async_support/independentreserve.py +288 -15
- ccxt/async_support/indodax.py +190 -33
- ccxt/async_support/jibitex.py +12 -12
- ccxt/async_support/kraken.py +795 -351
- ccxt/async_support/krakenfutures.py +214 -62
- ccxt/async_support/kucoin.py +715 -396
- ccxt/async_support/kucoinfutures.py +652 -89
- ccxt/async_support/latoken.py +217 -113
- ccxt/async_support/lbank.py +425 -97
- ccxt/async_support/luno.py +382 -35
- ccxt/async_support/mercado.py +113 -6
- ccxt/async_support/mexc.py +874 -437
- ccxt/async_support/modetrade.py +2818 -0
- ccxt/async_support/myokx.py +54 -0
- ccxt/async_support/ndax.py +221 -64
- ccxt/async_support/nobitex.py +31 -37
- ccxt/async_support/novadax.py +190 -34
- ccxt/async_support/oceanex.py +217 -28
- ccxt/async_support/okcoin.py +253 -145
- ccxt/async_support/okexchange.py +11 -11
- ccxt/async_support/okx.py +1088 -351
- ccxt/async_support/okxus.py +54 -0
- ccxt/async_support/ompfinex.py +25 -24
- ccxt/async_support/onetrading.py +213 -392
- ccxt/async_support/oxfun.py +245 -166
- ccxt/async_support/p2b.py +151 -29
- ccxt/async_support/paradex.py +562 -49
- ccxt/async_support/paymium.py +82 -19
- ccxt/async_support/phemex.py +713 -172
- ccxt/async_support/poloniex.py +1602 -283
- ccxt/async_support/probit.py +224 -95
- ccxt/async_support/ramzinex.py +30 -27
- ccxt/async_support/sarmayex.py +9 -9
- ccxt/async_support/sarrafex.py +13 -13
- ccxt/async_support/tabdeal.py +14 -13
- ccxt/async_support/tetherland.py +9 -9
- ccxt/async_support/timex.py +210 -51
- ccxt/async_support/tokocrypto.py +167 -47
- ccxt/async_support/tradeogre.py +266 -31
- ccxt/async_support/twox.py +9 -9
- ccxt/async_support/ubitex.py +12 -12
- ccxt/async_support/upbit.py +568 -165
- ccxt/async_support/vertex.py +160 -32
- ccxt/async_support/wallex.py +12 -12
- ccxt/async_support/wavesexchange.py +165 -30
- ccxt/async_support/whitebit.py +975 -127
- ccxt/async_support/woo.py +1918 -1016
- ccxt/async_support/woofipro.py +433 -141
- ccxt/async_support/xt.py +649 -193
- ccxt/async_support/yobit.py +195 -70
- ccxt/async_support/zaif.py +91 -15
- ccxt/async_support/zonda.py +151 -36
- ccxt/base/decimal_to_precision.py +14 -10
- ccxt/base/errors.py +49 -18
- ccxt/base/exchange.py +1556 -450
- ccxt/base/precise.py +10 -0
- ccxt/base/types.py +114 -6
- ccxt/bequant.py +5 -3
- ccxt/bigone.py +279 -144
- ccxt/binance.py +2347 -1158
- ccxt/binancecoinm.py +9 -3
- ccxt/binanceus.py +17 -3
- ccxt/binanceusdm.py +9 -4
- ccxt/bingx.py +2962 -920
- ccxt/bit2c.py +147 -27
- ccxt/bitbank.py +151 -23
- ccxt/bitbns.py +104 -30
- ccxt/bitfinex.py +3290 -1113
- ccxt/bitflyer.py +202 -27
- ccxt/bitget.py +3683 -1538
- ccxt/bithumb.py +194 -38
- ccxt/bitimen.py +9 -9
- ccxt/bitir.py +35 -35
- ccxt/bitmart.py +1288 -350
- ccxt/bitmex.py +260 -75
- ccxt/bitopro.py +262 -62
- ccxt/bitpin.py +15 -14
- ccxt/bitrue.py +459 -290
- ccxt/bitso.py +199 -54
- ccxt/bitstamp.py +230 -96
- ccxt/bitteam.py +167 -25
- ccxt/{huobijp.py → bittrade.py} +158 -30
- ccxt/bitvavo.py +213 -49
- ccxt/blockchaincom.py +160 -46
- ccxt/blofin.py +502 -120
- ccxt/btcalpha.py +169 -31
- ccxt/btcbox.py +291 -23
- ccxt/btcmarkets.py +211 -58
- ccxt/btcturk.py +161 -38
- ccxt/bybit.py +1775 -1030
- ccxt/cex.py +1439 -1303
- ccxt/coinbase.py +724 -212
- ccxt/coinbaseadvanced.py +2 -1
- ccxt/coinbaseexchange.py +388 -89
- ccxt/coinbaseinternational.py +412 -57
- ccxt/coincatch.py +177 -78
- ccxt/coincheck.py +135 -19
- ccxt/coinex.py +606 -232
- ccxt/coinmate.py +189 -63
- ccxt/coinmetro.py +194 -54
- ccxt/coinone.py +158 -51
- ccxt/coinsph.py +336 -61
- ccxt/coinspot.py +151 -52
- ccxt/cryptocom.py +661 -111
- ccxt/cryptomus.py +1137 -0
- ccxt/defx.py +2070 -0
- ccxt/delta.py +299 -99
- ccxt/deribit.py +348 -126
- ccxt/derive.py +2571 -0
- ccxt/digifinex.py +430 -214
- ccxt/ellipx.py +2029 -0
- ccxt/eterex.py +7 -7
- ccxt/excoino.py +29 -29
- ccxt/exir.py +11 -11
- ccxt/exmo.py +343 -131
- ccxt/exnovin.py +8 -8
- ccxt/farhadexchange.py +10 -10
- ccxt/fmfwio.py +2 -1
- ccxt/foxbit.py +1935 -0
- ccxt/gate.py +1351 -529
- ccxt/gateio.py +2 -1
- ccxt/gemini.py +144 -39
- ccxt/hashkey.py +152 -109
- ccxt/hibachi.py +2079 -0
- ccxt/hitbtc.py +395 -167
- ccxt/hitobit.py +9 -9
- ccxt/hollaex.py +307 -119
- ccxt/htx.py +851 -383
- ccxt/huobi.py +2 -1
- ccxt/hyperliquid.py +1848 -536
- ccxt/independentreserve.py +287 -15
- ccxt/indodax.py +190 -33
- ccxt/jibitex.py +9 -9
- ccxt/kraken.py +794 -351
- ccxt/krakenfutures.py +214 -62
- ccxt/kucoin.py +715 -396
- ccxt/kucoinfutures.py +652 -89
- ccxt/latoken.py +217 -113
- ccxt/lbank.py +425 -97
- ccxt/luno.py +382 -35
- ccxt/mercado.py +113 -6
- ccxt/mexc.py +873 -437
- ccxt/modetrade.py +2818 -0
- ccxt/myokx.py +54 -0
- ccxt/ndax.py +221 -64
- ccxt/nobitex.py +29 -35
- ccxt/novadax.py +190 -34
- ccxt/oceanex.py +217 -28
- ccxt/okcoin.py +253 -145
- ccxt/okexchange.py +9 -9
- ccxt/okx.py +1088 -351
- ccxt/okxus.py +54 -0
- ccxt/ompfinex.py +22 -21
- ccxt/onetrading.py +213 -392
- ccxt/oxfun.py +245 -166
- ccxt/p2b.py +151 -29
- ccxt/paradex.py +562 -49
- ccxt/paymium.py +82 -19
- ccxt/phemex.py +712 -172
- ccxt/poloniex.py +1601 -283
- ccxt/pro/__init__.py +76 -17
- ccxt/pro/alpaca.py +21 -6
- ccxt/pro/apex.py +984 -0
- ccxt/pro/ascendex.py +58 -10
- ccxt/pro/bequant.py +6 -1
- ccxt/pro/binance.py +728 -156
- ccxt/pro/binancecoinm.py +6 -2
- ccxt/pro/binanceus.py +8 -4
- ccxt/pro/binanceusdm.py +7 -2
- ccxt/pro/bingx.py +333 -142
- ccxt/pro/bitfinex.py +727 -262
- ccxt/pro/bitget.py +570 -79
- ccxt/pro/bithumb.py +20 -6
- ccxt/pro/bitmart.py +216 -87
- ccxt/pro/bitmex.py +47 -9
- ccxt/pro/bitopro.py +26 -14
- ccxt/pro/bitrue.py +22 -22
- ccxt/pro/bitstamp.py +54 -21
- ccxt/pro/{huobijp.py → bittrade.py} +7 -6
- ccxt/pro/bitvavo.py +191 -67
- ccxt/pro/blockchaincom.py +21 -8
- ccxt/pro/blofin.py +9 -1
- ccxt/pro/bybit.py +632 -245
- ccxt/pro/cex.py +59 -24
- ccxt/pro/coinbase.py +102 -73
- ccxt/pro/coinbaseadvanced.py +2 -1
- ccxt/pro/coinbaseexchange.py +8 -8
- ccxt/pro/coinbaseinternational.py +181 -25
- ccxt/pro/coincatch.py +6 -7
- ccxt/pro/coincheck.py +11 -6
- ccxt/pro/coinex.py +967 -665
- ccxt/pro/coinone.py +16 -9
- ccxt/pro/cryptocom.py +448 -45
- ccxt/pro/defx.py +831 -0
- ccxt/pro/deribit.py +150 -14
- ccxt/pro/derive.py +704 -0
- ccxt/pro/exmo.py +239 -6
- ccxt/pro/gate.py +623 -65
- ccxt/pro/gateio.py +2 -1
- ccxt/pro/gemini.py +27 -11
- ccxt/pro/hashkey.py +2 -2
- ccxt/pro/hitbtc.py +196 -91
- ccxt/pro/hollaex.py +23 -7
- ccxt/pro/htx.py +51 -14
- ccxt/pro/huobi.py +2 -1
- ccxt/pro/hyperliquid.py +591 -27
- ccxt/pro/independentreserve.py +9 -6
- ccxt/pro/kraken.py +640 -320
- ccxt/pro/krakenfutures.py +62 -35
- ccxt/pro/kucoin.py +267 -46
- ccxt/pro/kucoinfutures.py +165 -21
- ccxt/pro/lbank.py +102 -21
- ccxt/pro/luno.py +12 -8
- ccxt/pro/mexc.py +877 -111
- ccxt/pro/modetrade.py +1271 -0
- ccxt/pro/myokx.py +38 -0
- ccxt/pro/ndax.py +15 -2
- ccxt/pro/okcoin.py +23 -4
- ccxt/pro/okx.py +573 -98
- ccxt/pro/okxus.py +38 -0
- ccxt/pro/onetrading.py +30 -13
- ccxt/pro/oxfun.py +131 -27
- ccxt/pro/p2b.py +88 -22
- ccxt/pro/paradex.py +3 -3
- ccxt/pro/phemex.py +75 -21
- ccxt/pro/poloniex.py +124 -41
- ccxt/pro/probit.py +87 -80
- ccxt/pro/tradeogre.py +272 -0
- ccxt/pro/upbit.py +152 -12
- ccxt/pro/vertex.py +8 -3
- ccxt/pro/whitebit.py +58 -5
- ccxt/pro/woo.py +228 -37
- ccxt/pro/woofipro.py +106 -18
- ccxt/pro/xt.py +111 -5
- ccxt/probit.py +224 -95
- ccxt/protobuf/__init__.py +0 -0
- ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
- ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
- ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
- ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
- ccxt/protobuf/mexc/__init__.py +0 -0
- ccxt/ramzinex.py +28 -25
- ccxt/sarmayex.py +7 -7
- ccxt/sarrafex.py +10 -10
- ccxt/static_dependencies/__init__.py +1 -1
- ccxt/static_dependencies/lark/py.typed +0 -0
- ccxt/static_dependencies/marshmallow/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
- ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
- ccxt/tabdeal.py +12 -11
- ccxt/test/tests_async.py +261 -57
- ccxt/test/tests_helpers.py +1 -3
- ccxt/test/tests_init.py +4 -3
- ccxt/test/tests_sync.py +261 -57
- ccxt/tetherland.py +7 -7
- ccxt/timex.py +210 -51
- ccxt/tokocrypto.py +167 -47
- ccxt/tradeogre.py +266 -31
- ccxt/twox.py +7 -7
- ccxt/ubitex.py +9 -9
- ccxt/upbit.py +568 -165
- ccxt/vertex.py +160 -32
- ccxt/wallex.py +9 -9
- ccxt/wavesexchange.py +165 -30
- ccxt/whitebit.py +975 -127
- ccxt/woo.py +1917 -1016
- ccxt/woofipro.py +432 -141
- ccxt/xt.py +649 -193
- ccxt/yobit.py +194 -70
- ccxt/zaif.py +91 -15
- ccxt/zonda.py +151 -36
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
- ccxt_ir-4.5.0.dist-info/RECORD +743 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
- ccxt/__test__.py +0 -7
- ccxt/abstract/ace.py +0 -15
- ccxt/abstract/bitbay.py +0 -53
- ccxt/abstract/bitcoincom.py +0 -115
- ccxt/abstract/bitfinex2.py +0 -139
- ccxt/abstract/bitpanda.py +0 -35
- ccxt/abstract/bl3p.py +0 -19
- ccxt/abstract/coinlist.py +0 -54
- ccxt/abstract/currencycom.py +0 -68
- ccxt/abstract/hitbtc3.py +0 -115
- ccxt/abstract/idex.py +0 -26
- ccxt/abstract/kuna.py +0 -182
- ccxt/abstract/lykke.py +0 -29
- ccxt/abstract/poloniexfutures.py +0 -48
- ccxt/abstract/wazirx.py +0 -30
- ccxt/ace.py +0 -1012
- ccxt/async_support/ace.py +0 -1012
- ccxt/async_support/base/ws/aiohttp_client.py +0 -125
- ccxt/async_support/base/ws/fast_client.py +0 -96
- ccxt/async_support/bitbay.py +0 -17
- ccxt/async_support/bitcoincom.py +0 -17
- ccxt/async_support/bitfinex2.py +0 -3552
- ccxt/async_support/bitpanda.py +0 -16
- ccxt/async_support/bl3p.py +0 -485
- ccxt/async_support/coinlist.py +0 -2243
- ccxt/async_support/currencycom.py +0 -1950
- ccxt/async_support/hitbtc3.py +0 -16
- ccxt/async_support/idex.py +0 -1766
- ccxt/async_support/kuna.py +0 -1841
- ccxt/async_support/lykke.py +0 -1270
- ccxt/async_support/poloniexfutures.py +0 -1717
- ccxt/async_support/wazirx.py +0 -1224
- ccxt/bitbay.py +0 -17
- ccxt/bitcoincom.py +0 -17
- ccxt/bitfinex2.py +0 -3552
- ccxt/bitpanda.py +0 -16
- ccxt/bl3p.py +0 -485
- ccxt/coinlist.py +0 -2243
- ccxt/currencycom.py +0 -1950
- ccxt/hitbtc3.py +0 -16
- ccxt/idex.py +0 -1766
- ccxt/kuna.py +0 -1841
- ccxt/lykke.py +0 -1270
- ccxt/poloniexfutures.py +0 -1717
- ccxt/pro/bitcoincom.py +0 -34
- ccxt/pro/bitfinex2.py +0 -1083
- ccxt/pro/bitpanda.py +0 -15
- ccxt/pro/currencycom.py +0 -536
- ccxt/pro/idex.py +0 -672
- ccxt/pro/poloniexfutures.py +0 -990
- ccxt/pro/wazirx.py +0 -749
- ccxt/test/base/__init__.py +0 -29
- ccxt/test/base/test_account.py +0 -26
- ccxt/test/base/test_balance.py +0 -56
- ccxt/test/base/test_borrow_interest.py +0 -35
- ccxt/test/base/test_borrow_rate.py +0 -32
- ccxt/test/base/test_calculate_fee.py +0 -51
- ccxt/test/base/test_crypto.py +0 -127
- ccxt/test/base/test_currency.py +0 -76
- ccxt/test/base/test_datetime.py +0 -109
- ccxt/test/base/test_decimal_to_precision.py +0 -392
- ccxt/test/base/test_deep_extend.py +0 -68
- ccxt/test/base/test_deposit_withdrawal.py +0 -50
- ccxt/test/base/test_exchange_datetime_functions.py +0 -76
- ccxt/test/base/test_funding_rate_history.py +0 -29
- ccxt/test/base/test_last_price.py +0 -31
- ccxt/test/base/test_ledger_entry.py +0 -45
- ccxt/test/base/test_ledger_item.py +0 -48
- ccxt/test/base/test_leverage_tier.py +0 -33
- ccxt/test/base/test_liquidation.py +0 -50
- ccxt/test/base/test_margin_mode.py +0 -24
- ccxt/test/base/test_margin_modification.py +0 -35
- ccxt/test/base/test_market.py +0 -193
- ccxt/test/base/test_number.py +0 -411
- ccxt/test/base/test_ohlcv.py +0 -33
- ccxt/test/base/test_open_interest.py +0 -32
- ccxt/test/base/test_order.py +0 -64
- ccxt/test/base/test_order_book.py +0 -69
- ccxt/test/base/test_position.py +0 -60
- ccxt/test/base/test_shared_methods.py +0 -353
- ccxt/test/base/test_status.py +0 -24
- ccxt/test/base/test_throttle.py +0 -126
- ccxt/test/base/test_ticker.py +0 -92
- ccxt/test/base/test_trade.py +0 -47
- ccxt/test/base/test_trading_fee.py +0 -26
- ccxt/test/base/test_transaction.py +0 -39
- ccxt/test/test_async.py +0 -1649
- ccxt/test/test_sync.py +0 -1648
- ccxt/wazirx.py +0 -1224
- ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
- /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/async_support/exmo.py
CHANGED
|
@@ -5,8 +5,9 @@
|
|
|
5
5
|
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.exmo import ImplicitAPI
|
|
8
|
+
import asyncio
|
|
8
9
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
|
|
10
|
+
from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, MarginModification, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, OrderBooks, Trade, TradingFees, Transaction
|
|
10
11
|
from typing import List
|
|
11
12
|
from ccxt.base.errors import ExchangeError
|
|
12
13
|
from ccxt.base.errors import AuthenticationError
|
|
@@ -25,12 +26,12 @@ from ccxt.base.precise import Precise
|
|
|
25
26
|
|
|
26
27
|
class exmo(Exchange, ImplicitAPI):
|
|
27
28
|
|
|
28
|
-
def describe(self):
|
|
29
|
+
def describe(self) -> Any:
|
|
29
30
|
return self.deep_extend(super(exmo, self).describe(), {
|
|
30
31
|
'id': 'exmo',
|
|
31
32
|
'name': 'EXMO',
|
|
32
33
|
'countries': ['LT'], # Lithuania
|
|
33
|
-
'rateLimit':
|
|
34
|
+
'rateLimit': 100, # 10 requests per 1 second
|
|
34
35
|
'version': 'v1.1',
|
|
35
36
|
'has': {
|
|
36
37
|
'CORS': None,
|
|
@@ -43,6 +44,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
43
44
|
'cancelOrder': True,
|
|
44
45
|
'cancelOrders': False,
|
|
45
46
|
'createDepositAddress': False,
|
|
47
|
+
'createMarketBuyOrder': True,
|
|
48
|
+
'createMarketBuyOrderWithCost': True,
|
|
49
|
+
'createMarketOrderWithCost': True,
|
|
46
50
|
'createOrder': True,
|
|
47
51
|
'createStopLimitOrder': True,
|
|
48
52
|
'createStopMarketOrder': True,
|
|
@@ -54,6 +58,8 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
54
58
|
'fetchCurrencies': True,
|
|
55
59
|
'fetchDeposit': True,
|
|
56
60
|
'fetchDepositAddress': True,
|
|
61
|
+
'fetchDepositAddresses': False,
|
|
62
|
+
'fetchDepositAddressesByNetwork': False,
|
|
57
63
|
'fetchDeposits': True,
|
|
58
64
|
'fetchDepositsWithdrawals': True,
|
|
59
65
|
'fetchDepositWithdrawFee': 'emulated',
|
|
@@ -215,12 +221,74 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
215
221
|
'fillResponseFromRequest': True,
|
|
216
222
|
},
|
|
217
223
|
},
|
|
224
|
+
'features': {
|
|
225
|
+
'spot': {
|
|
226
|
+
'sandbox': False,
|
|
227
|
+
'createOrder': {
|
|
228
|
+
'marginMode': True, # todo revise
|
|
229
|
+
'triggerPrice': True, # todo: endpoint lacks other features
|
|
230
|
+
'triggerPriceType': None,
|
|
231
|
+
'triggerDirection': False,
|
|
232
|
+
'stopLossPrice': False,
|
|
233
|
+
'takeProfitPrice': False,
|
|
234
|
+
'attachedStopLossTakeProfit': None,
|
|
235
|
+
'timeInForce': {
|
|
236
|
+
'IOC': True,
|
|
237
|
+
'FOK': True,
|
|
238
|
+
'PO': True,
|
|
239
|
+
'GTD': True,
|
|
240
|
+
},
|
|
241
|
+
'hedged': False,
|
|
242
|
+
'selfTradePrevention': False,
|
|
243
|
+
'trailing': False,
|
|
244
|
+
'leverage': True,
|
|
245
|
+
'marketBuyByCost': True,
|
|
246
|
+
'marketBuyRequiresPrice': False,
|
|
247
|
+
'iceberg': False,
|
|
248
|
+
},
|
|
249
|
+
'createOrders': None,
|
|
250
|
+
'fetchMyTrades': {
|
|
251
|
+
'marginMode': True,
|
|
252
|
+
'limit': 100,
|
|
253
|
+
'daysBack': None,
|
|
254
|
+
'untilDays': None,
|
|
255
|
+
'symbolRequired': True,
|
|
256
|
+
},
|
|
257
|
+
'fetchOrder': {
|
|
258
|
+
'marginMode': False,
|
|
259
|
+
'trigger': False,
|
|
260
|
+
'trailing': False,
|
|
261
|
+
'symbolRequired': False,
|
|
262
|
+
},
|
|
263
|
+
'fetchOpenOrders': {
|
|
264
|
+
'marginMode': False,
|
|
265
|
+
'limit': None,
|
|
266
|
+
'trigger': False,
|
|
267
|
+
'trailing': False,
|
|
268
|
+
'symbolRequired': False,
|
|
269
|
+
},
|
|
270
|
+
'fetchOrders': None,
|
|
271
|
+
'fetchClosedOrders': None,
|
|
272
|
+
'fetchOHLCV': {
|
|
273
|
+
'limit': 1000, # todo, not in request
|
|
274
|
+
},
|
|
275
|
+
},
|
|
276
|
+
'swap': {
|
|
277
|
+
'linear': None,
|
|
278
|
+
'inverse': None,
|
|
279
|
+
},
|
|
280
|
+
'future': {
|
|
281
|
+
'linear': None,
|
|
282
|
+
'inverse': None,
|
|
283
|
+
},
|
|
284
|
+
},
|
|
218
285
|
'commonCurrencies': {
|
|
219
286
|
'GMT': 'GMT Token',
|
|
220
287
|
},
|
|
221
288
|
'precisionMode': TICK_SIZE,
|
|
222
289
|
'exceptions': {
|
|
223
290
|
'exact': {
|
|
291
|
+
'140333': InvalidOrder, # {"error":{"code":140333,"msg":"The number of characters after the point in the price exceeds the maximum number '8\u003e6'"}}
|
|
224
292
|
'140434': BadRequest,
|
|
225
293
|
'40005': AuthenticationError, # Authorization error, incorrect signature
|
|
226
294
|
'40009': InvalidNonce, #
|
|
@@ -290,7 +358,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
290
358
|
async def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
|
291
359
|
"""
|
|
292
360
|
remove margin from a position
|
|
293
|
-
|
|
361
|
+
|
|
362
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#eebf9f25-0289-4946-9482-89872c738449
|
|
363
|
+
|
|
294
364
|
:param str symbol: unified market symbol
|
|
295
365
|
:param float amount: the amount of margin to remove
|
|
296
366
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -301,7 +371,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
301
371
|
async def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
|
302
372
|
"""
|
|
303
373
|
add margin
|
|
304
|
-
|
|
374
|
+
|
|
375
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#143ef808-79ca-4e49-9e79-a60ea4d8c0e3
|
|
376
|
+
|
|
305
377
|
:param str symbol: unified market symbol
|
|
306
378
|
:param float amount: amount of margin to add
|
|
307
379
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -312,8 +384,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
312
384
|
async def fetch_trading_fees(self, params={}) -> TradingFees:
|
|
313
385
|
"""
|
|
314
386
|
fetch the trading fees for multiple markets
|
|
315
|
-
|
|
316
|
-
|
|
387
|
+
|
|
388
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#90927062-256c-4b03-900f-2b99131f9a54
|
|
389
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa
|
|
390
|
+
|
|
317
391
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
318
392
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
|
319
393
|
"""
|
|
@@ -430,9 +504,11 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
430
504
|
|
|
431
505
|
async def fetch_transaction_fees(self, codes: Strings = None, params={}):
|
|
432
506
|
"""
|
|
433
|
-
|
|
507
|
+
@deprecated
|
|
434
508
|
please use fetchDepositWithdrawFees instead
|
|
435
|
-
|
|
509
|
+
|
|
510
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2
|
|
511
|
+
|
|
436
512
|
:param str[]|None codes: list of unified currency codes
|
|
437
513
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
438
514
|
:returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
|
|
@@ -500,7 +576,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
500
576
|
async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
|
501
577
|
"""
|
|
502
578
|
fetch deposit and withdraw fees
|
|
503
|
-
|
|
579
|
+
|
|
580
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2
|
|
581
|
+
|
|
504
582
|
:param str[]|None codes: list of unified currency codes
|
|
505
583
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
506
584
|
:returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
|
|
@@ -582,13 +660,16 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
582
660
|
async def fetch_currencies(self, params={}) -> Currencies:
|
|
583
661
|
"""
|
|
584
662
|
fetches all available currencies on an exchange
|
|
585
|
-
|
|
586
|
-
|
|
663
|
+
|
|
664
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7cdf0ca8-9ff6-4cf3-aa33-bcec83155c49
|
|
665
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2
|
|
666
|
+
|
|
587
667
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
588
668
|
:returns dict: an associative dictionary of currencies
|
|
589
669
|
"""
|
|
670
|
+
promises = []
|
|
590
671
|
#
|
|
591
|
-
|
|
672
|
+
promises.append(self.publicGetCurrencyListExtended(params))
|
|
592
673
|
#
|
|
593
674
|
# [
|
|
594
675
|
# {"name":"VLX","description":"Velas"},
|
|
@@ -597,7 +678,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
597
678
|
# {"name":"USD","description":"US Dollar"}
|
|
598
679
|
# ]
|
|
599
680
|
#
|
|
600
|
-
|
|
681
|
+
promises.append(self.publicGetPaymentsProvidersCryptoList(params))
|
|
601
682
|
#
|
|
602
683
|
# {
|
|
603
684
|
# "BTC":[
|
|
@@ -622,83 +703,105 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
622
703
|
# ],
|
|
623
704
|
# }
|
|
624
705
|
#
|
|
706
|
+
responses = await asyncio.gather(*promises)
|
|
707
|
+
currencyList = responses[0]
|
|
708
|
+
cryptoList = responses[1]
|
|
625
709
|
result: dict = {}
|
|
626
710
|
for i in range(0, len(currencyList)):
|
|
627
711
|
currency = currencyList[i]
|
|
628
712
|
currencyId = self.safe_string(currency, 'name')
|
|
629
|
-
|
|
630
|
-
providers = self.safe_value(cryptoList, currencyId)
|
|
631
|
-
active = False
|
|
713
|
+
code = self.safe_currency_code(currencyId)
|
|
632
714
|
type = 'crypto'
|
|
633
|
-
|
|
634
|
-
|
|
635
|
-
'min': None,
|
|
636
|
-
'max': None,
|
|
637
|
-
},
|
|
638
|
-
'withdraw': {
|
|
639
|
-
'min': None,
|
|
640
|
-
'max': None,
|
|
641
|
-
},
|
|
642
|
-
}
|
|
643
|
-
fee = None
|
|
644
|
-
depositEnabled = None
|
|
645
|
-
withdrawEnabled = None
|
|
715
|
+
networks = {}
|
|
716
|
+
providers = self.safe_list(cryptoList, currencyId)
|
|
646
717
|
if providers is None:
|
|
647
|
-
active = True
|
|
648
718
|
type = 'fiat'
|
|
649
719
|
else:
|
|
650
720
|
for j in range(0, len(providers)):
|
|
651
721
|
provider = providers[j]
|
|
722
|
+
name = self.safe_string(provider, 'name')
|
|
723
|
+
# get network-id by removing extra things
|
|
724
|
+
networkId = name.replace(currencyId + ' ', '')
|
|
725
|
+
networkId = networkId.replace('(', '')
|
|
726
|
+
replaceChar = ')' # transpiler trick
|
|
727
|
+
networkId = networkId.replace(replaceChar, '')
|
|
728
|
+
networkCode = self.network_id_to_code(networkId)
|
|
729
|
+
if not (networkCode in networks):
|
|
730
|
+
networks[networkCode] = {
|
|
731
|
+
'id': networkId,
|
|
732
|
+
'network': networkCode,
|
|
733
|
+
'active': None,
|
|
734
|
+
'deposit': None,
|
|
735
|
+
'withdraw': None,
|
|
736
|
+
'fee': None,
|
|
737
|
+
'limits': {
|
|
738
|
+
'withdraw': {
|
|
739
|
+
'min': None,
|
|
740
|
+
'max': None,
|
|
741
|
+
},
|
|
742
|
+
'deposit': {
|
|
743
|
+
'min': None,
|
|
744
|
+
'max': None,
|
|
745
|
+
},
|
|
746
|
+
},
|
|
747
|
+
'info': [], # set, because of multiple network sub-entries
|
|
748
|
+
}
|
|
652
749
|
typeInner = self.safe_string(provider, 'type')
|
|
653
750
|
minValue = self.safe_string(provider, 'min')
|
|
654
751
|
maxValue = self.safe_string(provider, 'max')
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
activeProvider = self.safe_value(provider, 'enabled')
|
|
752
|
+
activeProvider = self.safe_bool(provider, 'enabled')
|
|
753
|
+
networkEntry = networks[networkCode]
|
|
658
754
|
if typeInner == 'deposit':
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
depositEnabled = False
|
|
755
|
+
networkEntry['deposit'] = activeProvider
|
|
756
|
+
networkEntry['limits']['deposit']['min'] = minValue
|
|
757
|
+
networkEntry['limits']['deposit']['max'] = maxValue
|
|
663
758
|
elif typeInner == 'withdraw':
|
|
664
|
-
|
|
665
|
-
|
|
666
|
-
|
|
667
|
-
|
|
668
|
-
|
|
669
|
-
|
|
670
|
-
|
|
671
|
-
|
|
672
|
-
limits[typeInner]['min'] = minValue
|
|
673
|
-
limits[typeInner]['max'] = maxValue
|
|
674
|
-
if typeInner == 'withdraw':
|
|
675
|
-
commissionDesc = self.safe_string(provider, 'commission_desc')
|
|
676
|
-
fee = self.parse_fixed_float_value(commissionDesc)
|
|
677
|
-
code = self.safe_currency_code(currencyId)
|
|
678
|
-
result[code] = {
|
|
759
|
+
networkEntry['withdraw'] = activeProvider
|
|
760
|
+
networkEntry['limits']['withdraw']['min'] = minValue
|
|
761
|
+
networkEntry['limits']['withdraw']['max'] = maxValue
|
|
762
|
+
info = self.safe_list(networkEntry, 'info')
|
|
763
|
+
info.append(provider)
|
|
764
|
+
networkEntry['info'] = info
|
|
765
|
+
networks[networkCode] = networkEntry
|
|
766
|
+
result[code] = self.safe_currency_structure({
|
|
679
767
|
'id': currencyId,
|
|
680
768
|
'code': code,
|
|
681
|
-
'name':
|
|
769
|
+
'name': self.safe_string(currency, 'description'),
|
|
682
770
|
'type': type,
|
|
683
|
-
'active':
|
|
684
|
-
'deposit':
|
|
685
|
-
'withdraw':
|
|
686
|
-
'fee':
|
|
771
|
+
'active': None,
|
|
772
|
+
'deposit': None,
|
|
773
|
+
'withdraw': None,
|
|
774
|
+
'fee': None,
|
|
687
775
|
'precision': self.parse_number('1e-8'),
|
|
688
|
-
'limits':
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
776
|
+
'limits': {
|
|
777
|
+
'withdraw': {
|
|
778
|
+
'min': None,
|
|
779
|
+
'max': None,
|
|
780
|
+
},
|
|
781
|
+
'deposit': {
|
|
782
|
+
'min': None,
|
|
783
|
+
'max': None,
|
|
784
|
+
},
|
|
785
|
+
},
|
|
786
|
+
'info': {
|
|
787
|
+
'currency': currency,
|
|
788
|
+
'providers': providers,
|
|
789
|
+
},
|
|
790
|
+
'networks': networks,
|
|
791
|
+
})
|
|
692
792
|
return result
|
|
693
793
|
|
|
694
794
|
async def fetch_markets(self, params={}) -> List[Market]:
|
|
695
795
|
"""
|
|
696
796
|
retrieves data on all markets for exmo
|
|
697
|
-
|
|
797
|
+
|
|
798
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa
|
|
799
|
+
|
|
698
800
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
699
801
|
:returns dict[]: an array of objects representing market data
|
|
700
802
|
"""
|
|
701
|
-
|
|
803
|
+
promises = []
|
|
804
|
+
promises.append(self.publicGetPairSettings(params))
|
|
702
805
|
#
|
|
703
806
|
# {
|
|
704
807
|
# "BTC_USD":{
|
|
@@ -715,8 +818,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
715
818
|
# }
|
|
716
819
|
#
|
|
717
820
|
marginPairsDict: dict = {}
|
|
718
|
-
|
|
719
|
-
|
|
821
|
+
fetchMargin = self.check_required_credentials(False)
|
|
822
|
+
if fetchMargin:
|
|
823
|
+
promises.append(self.privatePostMarginPairList(params))
|
|
720
824
|
#
|
|
721
825
|
# {
|
|
722
826
|
# "pairs": [
|
|
@@ -746,14 +850,18 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
746
850
|
# ]
|
|
747
851
|
# }
|
|
748
852
|
#
|
|
749
|
-
|
|
853
|
+
responses = await asyncio.gather(*promises)
|
|
854
|
+
spotResponse = responses[0]
|
|
855
|
+
if fetchMargin:
|
|
856
|
+
marginPairs = responses[1]
|
|
857
|
+
pairs = self.safe_list(marginPairs, 'pairs')
|
|
750
858
|
marginPairsDict = self.index_by(pairs, 'name')
|
|
751
|
-
keys = list(
|
|
859
|
+
keys = list(spotResponse.keys())
|
|
752
860
|
result = []
|
|
753
861
|
for i in range(0, len(keys)):
|
|
754
862
|
id = keys[i]
|
|
755
|
-
market =
|
|
756
|
-
marginMarket = self.
|
|
863
|
+
market = spotResponse[id]
|
|
864
|
+
marginMarket = self.safe_dict(marginPairsDict, id)
|
|
757
865
|
symbol = id.replace('_', '/')
|
|
758
866
|
baseId, quoteId = symbol.split('/')
|
|
759
867
|
base = self.safe_currency_code(baseId)
|
|
@@ -818,38 +926,48 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
818
926
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
819
927
|
"""
|
|
820
928
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
821
|
-
|
|
929
|
+
|
|
930
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#65eeb949-74e5-4631-9184-c38387fe53e8
|
|
931
|
+
|
|
822
932
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
823
933
|
:param str timeframe: the length of time each candle represents
|
|
824
934
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
825
935
|
:param int [limit]: the maximum amount of candles to fetch
|
|
826
936
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
937
|
+
:param int [params.until]: timestamp in ms of the latest candle to fetch
|
|
827
938
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
|
828
939
|
"""
|
|
829
940
|
await self.load_markets()
|
|
830
941
|
market = self.market(symbol)
|
|
942
|
+
until = self.safe_integer_product(params, 'until', 0.001)
|
|
943
|
+
untilIsDefined = (until is not None)
|
|
831
944
|
request: dict = {
|
|
832
945
|
'symbol': market['id'],
|
|
833
946
|
'resolution': self.safe_string(self.timeframes, timeframe, timeframe),
|
|
834
947
|
}
|
|
835
948
|
maxLimit = 3000
|
|
836
949
|
duration = self.parse_timeframe(timeframe)
|
|
837
|
-
now = self.milliseconds()
|
|
950
|
+
now = self.parse_to_int(self.milliseconds() / 1000)
|
|
838
951
|
if since is None:
|
|
952
|
+
to = min(until, now) if untilIsDefined else now
|
|
839
953
|
if limit is None:
|
|
840
954
|
limit = 1000 # cap default at generous amount
|
|
841
955
|
else:
|
|
842
956
|
limit = min(limit, maxLimit)
|
|
843
|
-
request['from'] =
|
|
844
|
-
request['to'] =
|
|
957
|
+
request['from'] = to - (limit * duration) - 1
|
|
958
|
+
request['to'] = to
|
|
845
959
|
else:
|
|
846
|
-
request['from'] = self.parse_to_int(since / 1000)
|
|
847
|
-
if
|
|
848
|
-
|
|
960
|
+
request['from'] = self.parse_to_int(since / 1000)
|
|
961
|
+
if untilIsDefined:
|
|
962
|
+
request['to'] = min(until, now)
|
|
849
963
|
else:
|
|
850
|
-
limit
|
|
851
|
-
|
|
852
|
-
|
|
964
|
+
if limit is None:
|
|
965
|
+
limit = maxLimit
|
|
966
|
+
else:
|
|
967
|
+
limit = min(limit, maxLimit)
|
|
968
|
+
to = self.sum(since, limit * duration)
|
|
969
|
+
request['to'] = min(to, now)
|
|
970
|
+
params = self.omit(params, 'until')
|
|
853
971
|
response = await self.publicGetCandlesHistory(self.extend(request, params))
|
|
854
972
|
#
|
|
855
973
|
# {
|
|
@@ -915,8 +1033,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
915
1033
|
async def fetch_balance(self, params={}) -> Balances:
|
|
916
1034
|
"""
|
|
917
1035
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
|
918
|
-
|
|
919
|
-
|
|
1036
|
+
|
|
1037
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#59c5160f-27a1-4d9a-8cfb-7979c7ffaac6
|
|
1038
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8388df7-1f9f-4d41-81c4-5a387d171dc6
|
|
1039
|
+
|
|
920
1040
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
921
1041
|
:param str [params.marginMode]: *isolated* fetches the isolated margin balance
|
|
922
1042
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
@@ -959,7 +1079,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
959
1079
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
960
1080
|
"""
|
|
961
1081
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
962
|
-
|
|
1082
|
+
|
|
1083
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871
|
|
1084
|
+
|
|
963
1085
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
964
1086
|
:param int [limit]: the maximum amount of order book entries to return
|
|
965
1087
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -976,10 +1098,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
976
1098
|
result = self.safe_dict(response, market['id'])
|
|
977
1099
|
return self.parse_order_book(result, market['symbol'], None, 'bid', 'ask')
|
|
978
1100
|
|
|
979
|
-
async def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
|
|
1101
|
+
async def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}) -> OrderBooks:
|
|
980
1102
|
"""
|
|
981
1103
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
|
|
982
|
-
|
|
1104
|
+
|
|
1105
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871
|
|
1106
|
+
|
|
983
1107
|
:param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
|
|
984
1108
|
:param int [limit]: max number of entries per orderbook to return, default is None
|
|
985
1109
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1053,7 +1177,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1053
1177
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
1054
1178
|
"""
|
|
1055
1179
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
1056
|
-
|
|
1180
|
+
|
|
1181
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385
|
|
1182
|
+
|
|
1057
1183
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
1058
1184
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1059
1185
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -1089,7 +1215,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1089
1215
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
1090
1216
|
"""
|
|
1091
1217
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
1092
|
-
|
|
1218
|
+
|
|
1219
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385
|
|
1220
|
+
|
|
1093
1221
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
1094
1222
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1095
1223
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -1189,7 +1317,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1189
1317
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
1190
1318
|
"""
|
|
1191
1319
|
get the list of most recent trades for a particular symbol
|
|
1192
|
-
|
|
1320
|
+
|
|
1321
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#5a5a9c0d-cf17-47f6-9d62-6d4404ebd5ac
|
|
1322
|
+
|
|
1193
1323
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
1194
1324
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
1195
1325
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -1230,14 +1360,16 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1230
1360
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
1231
1361
|
"""
|
|
1232
1362
|
fetch all trades made by the user
|
|
1233
|
-
|
|
1234
|
-
|
|
1363
|
+
|
|
1364
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#b8d8d9af-4f46-46a1-939b-ad261d79f452 # spot
|
|
1365
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#f4b1aaf8-399f-403b-ab5e-4926d967a106 # margin
|
|
1366
|
+
|
|
1235
1367
|
:param str symbol: a symbol is required but it can be a single string, or a non-empty array
|
|
1236
1368
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
1237
1369
|
:param int [limit]: *required for margin orders* the maximum number of trades structures to retrieve
|
|
1238
1370
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1239
|
-
|
|
1240
|
-
|
|
1371
|
+
|
|
1372
|
+
EXCHANGE SPECIFIC PARAMETERS
|
|
1241
1373
|
:param int [params.offset]: last deal offset, default = 0
|
|
1242
1374
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
1243
1375
|
"""
|
|
@@ -1246,7 +1378,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1246
1378
|
marginMode = None
|
|
1247
1379
|
marginMode, params = self.handle_margin_mode_and_params('fetchMyTrades', params)
|
|
1248
1380
|
if marginMode == 'cross':
|
|
1249
|
-
raise BadRequest(self.id + 'only isolated margin is supported')
|
|
1381
|
+
raise BadRequest(self.id + ' only isolated margin is supported')
|
|
1250
1382
|
await self.load_markets()
|
|
1251
1383
|
market = self.market(symbol)
|
|
1252
1384
|
pair = market['id']
|
|
@@ -1319,21 +1451,70 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1319
1451
|
result = self.array_concat(result, trades)
|
|
1320
1452
|
return self.filter_by_since_limit(result, since, limit)
|
|
1321
1453
|
|
|
1454
|
+
async def create_market_order_with_cost(self, symbol: str, side: OrderSide, cost: float, params={}):
|
|
1455
|
+
"""
|
|
1456
|
+
create a market order by providing the symbol, side and cost
|
|
1457
|
+
|
|
1458
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1459
|
+
|
|
1460
|
+
:param str symbol: unified symbol of the market to create an order in
|
|
1461
|
+
:param str side: 'buy' or 'sell'
|
|
1462
|
+
:param float cost: how much you want to trade in units of the quote currency
|
|
1463
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1464
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1465
|
+
"""
|
|
1466
|
+
await self.load_markets()
|
|
1467
|
+
params = self.extend(params, {'cost': cost})
|
|
1468
|
+
return await self.create_order(symbol, 'market', side, cost, None, params)
|
|
1469
|
+
|
|
1470
|
+
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
|
1471
|
+
"""
|
|
1472
|
+
create a market buy order by providing the symbol and cost
|
|
1473
|
+
|
|
1474
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1475
|
+
|
|
1476
|
+
:param str symbol: unified symbol of the market to create an order in
|
|
1477
|
+
:param float cost: how much you want to trade in units of the quote currency
|
|
1478
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1479
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1480
|
+
"""
|
|
1481
|
+
await self.load_markets()
|
|
1482
|
+
params = self.extend(params, {'cost': cost})
|
|
1483
|
+
return await self.create_order(symbol, 'market', 'buy', cost, None, params)
|
|
1484
|
+
|
|
1485
|
+
async def create_market_sell_order_with_cost(self, symbol: str, cost: float, params={}):
|
|
1486
|
+
"""
|
|
1487
|
+
create a market sell order by providing the symbol and cost
|
|
1488
|
+
|
|
1489
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1490
|
+
|
|
1491
|
+
:param str symbol: unified symbol of the market to create an order in
|
|
1492
|
+
:param float cost: how much you want to trade in units of the quote currency
|
|
1493
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1494
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1495
|
+
"""
|
|
1496
|
+
await self.load_markets()
|
|
1497
|
+
params = self.extend(params, {'cost': cost})
|
|
1498
|
+
return await self.create_order(symbol, 'market', 'sell', cost, None, params)
|
|
1499
|
+
|
|
1322
1500
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
|
1323
1501
|
"""
|
|
1324
1502
|
create a trade order
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1503
|
+
|
|
1504
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1505
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#de6f4321-eeac-468c-87f7-c4ad7062e265 # stop market
|
|
1506
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#3561b86c-9ff1-436e-8e68-ac926b7eb523 # margin
|
|
1507
|
+
|
|
1328
1508
|
:param str symbol: unified symbol of the market to create an order in
|
|
1329
1509
|
:param str type: 'market' or 'limit'
|
|
1330
1510
|
:param str side: 'buy' or 'sell'
|
|
1331
1511
|
:param float amount: how much of currency you want to trade in units of base currency
|
|
1332
|
-
:param float [price]: the price at which the order is to be
|
|
1512
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1333
1513
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1334
|
-
:param float [params.
|
|
1514
|
+
:param float [params.triggerPrice]: the price at which a trigger order is triggered at
|
|
1335
1515
|
:param str [params.timeInForce]: *spot only* 'fok', 'ioc' or 'post_only'
|
|
1336
1516
|
:param boolean [params.postOnly]: *spot only* True for post only orders
|
|
1517
|
+
:param float [params.cost]: *spot only* *market orders only* the cost of the order in the quote currency for market orders
|
|
1337
1518
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1338
1519
|
"""
|
|
1339
1520
|
await self.load_markets()
|
|
@@ -1344,11 +1525,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1344
1525
|
if marginMode == 'cross':
|
|
1345
1526
|
raise BadRequest(self.id + ' only supports isolated margin')
|
|
1346
1527
|
isSpot = (marginMode != 'isolated')
|
|
1347
|
-
triggerPrice = self.
|
|
1528
|
+
triggerPrice = self.safe_string_n(params, ['triggerPrice', 'stopPrice', 'stop_price'])
|
|
1529
|
+
cost = self.safe_string(params, 'cost')
|
|
1348
1530
|
request: dict = {
|
|
1349
1531
|
'pair': market['id'],
|
|
1350
1532
|
# 'leverage': 2,
|
|
1351
|
-
'quantity': self.amount_to_precision(market['symbol'], amount),
|
|
1533
|
+
# 'quantity': self.amount_to_precision(market['symbol'], amount),
|
|
1352
1534
|
# spot - buy, sell, market_buy, market_sell, market_buy_total, market_sell_total
|
|
1353
1535
|
# margin - limit_buy, limit_sell, market_buy, market_sell, stop_buy, stop_sell, stop_limit_buy, stop_limit_sell, trailing_stop_buy, trailing_stop_sell
|
|
1354
1536
|
# 'stop_price': self.price_to_precision(symbol, stopPrice),
|
|
@@ -1357,6 +1539,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1357
1539
|
# 'client_id': 123, # optional, must be a positive integer
|
|
1358
1540
|
# 'comment': '', # up to 50 latin symbols, whitespaces, underscores
|
|
1359
1541
|
}
|
|
1542
|
+
if cost is None:
|
|
1543
|
+
request['quantity'] = self.amount_to_precision(market['symbol'], amount)
|
|
1544
|
+
else:
|
|
1545
|
+
request['quantity'] = self.cost_to_precision(market['symbol'], cost)
|
|
1360
1546
|
clientOrderId = self.safe_value_2(params, 'client_id', 'clientOrderId')
|
|
1361
1547
|
if clientOrderId is not None:
|
|
1362
1548
|
clientOrderId = self.safe_integer_2(params, 'client_id', 'clientOrderId')
|
|
@@ -1367,7 +1553,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1367
1553
|
leverage = self.safe_number(params, 'leverage')
|
|
1368
1554
|
if not isSpot and (leverage is None):
|
|
1369
1555
|
raise ArgumentsRequired(self.id + ' createOrder requires an extra param params["leverage"] for margin orders')
|
|
1370
|
-
params = self.omit(params, ['stopPrice', 'stop_price', 'triggerPrice', 'timeInForce', 'client_id', 'clientOrderId'])
|
|
1556
|
+
params = self.omit(params, ['stopPrice', 'stop_price', 'triggerPrice', 'timeInForce', 'client_id', 'clientOrderId', 'cost'])
|
|
1371
1557
|
if price is not None:
|
|
1372
1558
|
request['price'] = self.price_to_precision(market['symbol'], price)
|
|
1373
1559
|
response = None
|
|
@@ -1388,7 +1574,8 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1388
1574
|
if type == 'limit':
|
|
1389
1575
|
request['type'] = side
|
|
1390
1576
|
elif type == 'market':
|
|
1391
|
-
|
|
1577
|
+
marketSuffix = '_total' if (cost is not None) else ''
|
|
1578
|
+
request['type'] = 'market_' + side + marketSuffix
|
|
1392
1579
|
if isPostOnly:
|
|
1393
1580
|
request['exec_type'] = 'post_only'
|
|
1394
1581
|
elif timeInForce is not None:
|
|
@@ -1414,9 +1601,11 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1414
1601
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
|
1415
1602
|
"""
|
|
1416
1603
|
cancels an open order
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1604
|
+
|
|
1605
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#1f710d4b-75bc-4b65-ad68-006f863a3f26
|
|
1606
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a4d0aae8-28f7-41ac-94fd-c4030130453d # stop market
|
|
1607
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#705dfec5-2b35-4667-862b-faf54eca6209 # margin
|
|
1608
|
+
|
|
1420
1609
|
:param str id: order id
|
|
1421
1610
|
:param str symbol: not used by exmo cancelOrder()
|
|
1422
1611
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1426,7 +1615,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1426
1615
|
"""
|
|
1427
1616
|
await self.load_markets()
|
|
1428
1617
|
request: dict = {}
|
|
1429
|
-
|
|
1618
|
+
trigger = self.safe_value_2(params, 'trigger', 'stop')
|
|
1430
1619
|
params = self.omit(params, ['trigger', 'stop'])
|
|
1431
1620
|
marginMode = None
|
|
1432
1621
|
marginMode, params = self.handle_margin_mode_and_params('cancelOrder', params)
|
|
@@ -1440,7 +1629,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1440
1629
|
# {}
|
|
1441
1630
|
#
|
|
1442
1631
|
else:
|
|
1443
|
-
if
|
|
1632
|
+
if trigger:
|
|
1444
1633
|
request['parent_order_id'] = id
|
|
1445
1634
|
response = await self.privatePostStopMarketOrderCancel(self.extend(request, params))
|
|
1446
1635
|
#
|
|
@@ -1460,7 +1649,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1460
1649
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
|
1461
1650
|
"""
|
|
1462
1651
|
*spot only* fetches information on an order made by the user
|
|
1463
|
-
|
|
1652
|
+
|
|
1653
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459 # spot
|
|
1654
|
+
|
|
1655
|
+
:param str id: order id
|
|
1464
1656
|
:param str symbol: not used by exmo fetchOrder
|
|
1465
1657
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1466
1658
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
@@ -1498,8 +1690,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1498
1690
|
async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
1499
1691
|
"""
|
|
1500
1692
|
fetch all the trades made from a single order
|
|
1501
|
-
|
|
1502
|
-
|
|
1693
|
+
|
|
1694
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459 # spot
|
|
1695
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#00810661-9119-46c5-aec5-55abe9cb42c7 # margin
|
|
1696
|
+
|
|
1503
1697
|
:param str id: order id
|
|
1504
1698
|
:param str symbol: unified market symbol
|
|
1505
1699
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
@@ -1570,8 +1764,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1570
1764
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
1571
1765
|
"""
|
|
1572
1766
|
fetch all unfilled currently open orders
|
|
1573
|
-
|
|
1574
|
-
|
|
1767
|
+
|
|
1768
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#0e135370-daa4-4689-8acd-b6876dee9ba1 # spot open orders
|
|
1769
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a7cfd4f0-476e-4675-b33f-22a46902f245 # margin
|
|
1770
|
+
|
|
1575
1771
|
:param str symbol: unified market symbol
|
|
1576
1772
|
:param int [since]: the earliest time in ms to fetch open orders for
|
|
1577
1773
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
|
@@ -1804,7 +2000,6 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1804
2000
|
'postOnly': None,
|
|
1805
2001
|
'side': side,
|
|
1806
2002
|
'price': price,
|
|
1807
|
-
'stopPrice': triggerPrice,
|
|
1808
2003
|
'triggerPrice': triggerPrice,
|
|
1809
2004
|
'cost': cost,
|
|
1810
2005
|
'amount': amount,
|
|
@@ -1819,8 +2014,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1819
2014
|
async def fetch_canceled_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
1820
2015
|
"""
|
|
1821
2016
|
fetches information on multiple canceled orders made by the user
|
|
1822
|
-
|
|
1823
|
-
|
|
2017
|
+
|
|
2018
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#1d2524dd-ae6d-403a-a067-77b50d13fbe5 # margin
|
|
2019
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a51be1d0-af5f-44e4-99d7-f7b04c6067d0 # spot canceled orders
|
|
2020
|
+
|
|
1824
2021
|
:param str symbol: unified market symbol of the market orders were made in
|
|
1825
2022
|
:param int [since]: timestamp in ms of the earliest order, default is None
|
|
1826
2023
|
:param int [limit]: max number of orders to return, default is None
|
|
@@ -1906,18 +2103,20 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1906
2103
|
async def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
|
|
1907
2104
|
"""
|
|
1908
2105
|
*margin only* edit a trade order
|
|
1909
|
-
|
|
2106
|
+
|
|
2107
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#f27ee040-c75f-4b59-b608-d05bd45b7899 # margin
|
|
2108
|
+
|
|
1910
2109
|
:param str id: order id
|
|
1911
2110
|
:param str symbol: unified CCXT market symbol
|
|
1912
2111
|
:param str type: not used by exmo editOrder
|
|
1913
2112
|
:param str side: not used by exmo editOrder
|
|
1914
2113
|
:param float [amount]: how much of the currency you want to trade in units of the base currency
|
|
1915
|
-
:param float [price]: the price at which the order is to be
|
|
2114
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1916
2115
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1917
2116
|
:param float [params.triggerPrice]: stop price for stop-market and stop-limit orders
|
|
1918
2117
|
:param str params['marginMode']: must be set to isolated
|
|
1919
|
-
|
|
1920
|
-
|
|
2118
|
+
|
|
2119
|
+
EXCHANGE SPECIFIC PARAMETERS
|
|
1921
2120
|
:param int [params.distance]: distance for trailing stop orders
|
|
1922
2121
|
:param int [params.expire]: expiration timestamp in UTC timezone for the order. order will not be expired if expire is 0
|
|
1923
2122
|
:param str [params.comment]: optional comment for order. up to 50 latin symbols, whitespaces, underscores
|
|
@@ -1943,10 +2142,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1943
2142
|
response = await self.privatePostMarginUserOrderUpdate(self.extend(request, params))
|
|
1944
2143
|
return self.parse_order(response)
|
|
1945
2144
|
|
|
1946
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
|
2145
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
|
1947
2146
|
"""
|
|
1948
2147
|
fetch the deposit address for a currency associated with self account
|
|
1949
|
-
|
|
2148
|
+
|
|
2149
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8f9ced9-7ab6-4383-a6a4-bc54469ba60e
|
|
2150
|
+
|
|
1950
2151
|
:param str code: unified currency code
|
|
1951
2152
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1952
2153
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
|
@@ -1970,11 +2171,11 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1970
2171
|
tag = addressAndTag[1]
|
|
1971
2172
|
self.check_address(address)
|
|
1972
2173
|
return {
|
|
2174
|
+
'info': response,
|
|
1973
2175
|
'currency': code,
|
|
2176
|
+
'network': None,
|
|
1974
2177
|
'address': address,
|
|
1975
2178
|
'tag': tag,
|
|
1976
|
-
'network': None,
|
|
1977
|
-
'info': response,
|
|
1978
2179
|
}
|
|
1979
2180
|
|
|
1980
2181
|
def get_market_from_trades(self, trades):
|
|
@@ -1985,10 +2186,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1985
2186
|
return self.markets[symbols[0]]
|
|
1986
2187
|
return None
|
|
1987
2188
|
|
|
1988
|
-
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
|
|
2189
|
+
async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
|
|
1989
2190
|
"""
|
|
1990
2191
|
make a withdrawal
|
|
1991
|
-
|
|
2192
|
+
|
|
2193
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#3ab9c34d-ad58-4f87-9c57-2e2ea88a8325
|
|
2194
|
+
|
|
1992
2195
|
:param str code: unified currency code
|
|
1993
2196
|
:param float amount: the amount to withdraw
|
|
1994
2197
|
:param str address: the address to withdraw to
|
|
@@ -2152,7 +2355,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2152
2355
|
async def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2153
2356
|
"""
|
|
2154
2357
|
fetch history of deposits and withdrawals
|
|
2155
|
-
|
|
2358
|
+
|
|
2359
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#31e69a33-4849-4e6a-b4b4-6d574238f6a7
|
|
2360
|
+
|
|
2156
2361
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
|
2157
2362
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
|
2158
2363
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
|
@@ -2202,7 +2407,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2202
2407
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2203
2408
|
"""
|
|
2204
2409
|
fetch all withdrawals made from an account
|
|
2205
|
-
|
|
2410
|
+
|
|
2411
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2412
|
+
|
|
2206
2413
|
:param str code: unified currency code
|
|
2207
2414
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
|
2208
2415
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
|
@@ -2252,7 +2459,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2252
2459
|
async def fetch_withdrawal(self, id: str, code: Str = None, params={}):
|
|
2253
2460
|
"""
|
|
2254
2461
|
fetch data on a currency withdrawal via the withdrawal id
|
|
2255
|
-
|
|
2462
|
+
|
|
2463
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2464
|
+
|
|
2256
2465
|
:param str id: withdrawal id
|
|
2257
2466
|
:param str code: unified currency code of the currency withdrawn, default is None
|
|
2258
2467
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -2298,10 +2507,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2298
2507
|
first = self.safe_dict(items, 0, {})
|
|
2299
2508
|
return self.parse_transaction(first, currency)
|
|
2300
2509
|
|
|
2301
|
-
async def fetch_deposit(self, id
|
|
2510
|
+
async def fetch_deposit(self, id: str, code: Str = None, params={}):
|
|
2302
2511
|
"""
|
|
2303
2512
|
fetch information on a deposit
|
|
2304
|
-
|
|
2513
|
+
|
|
2514
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2515
|
+
|
|
2305
2516
|
:param str id: deposit id
|
|
2306
2517
|
:param str code: unified currency code, default is None
|
|
2307
2518
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -2350,7 +2561,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2350
2561
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2351
2562
|
"""
|
|
2352
2563
|
fetch all deposits made to an account
|
|
2353
|
-
|
|
2564
|
+
|
|
2565
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2566
|
+
|
|
2354
2567
|
:param str code: unified currency code
|
|
2355
2568
|
:param int [since]: the earliest time in ms to fetch deposits for
|
|
2356
2569
|
:param int [limit]: the maximum number of deposits structures to retrieve
|