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/exmo.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from ccxt.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.exmo import ImplicitAPI
|
|
8
8
|
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
|
|
9
|
+
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
10
|
from typing import List
|
|
11
11
|
from ccxt.base.errors import ExchangeError
|
|
12
12
|
from ccxt.base.errors import AuthenticationError
|
|
@@ -25,12 +25,12 @@ from ccxt.base.precise import Precise
|
|
|
25
25
|
|
|
26
26
|
class exmo(Exchange, ImplicitAPI):
|
|
27
27
|
|
|
28
|
-
def describe(self):
|
|
28
|
+
def describe(self) -> Any:
|
|
29
29
|
return self.deep_extend(super(exmo, self).describe(), {
|
|
30
30
|
'id': 'exmo',
|
|
31
31
|
'name': 'EXMO',
|
|
32
32
|
'countries': ['LT'], # Lithuania
|
|
33
|
-
'rateLimit':
|
|
33
|
+
'rateLimit': 100, # 10 requests per 1 second
|
|
34
34
|
'version': 'v1.1',
|
|
35
35
|
'has': {
|
|
36
36
|
'CORS': None,
|
|
@@ -43,6 +43,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
43
43
|
'cancelOrder': True,
|
|
44
44
|
'cancelOrders': False,
|
|
45
45
|
'createDepositAddress': False,
|
|
46
|
+
'createMarketBuyOrder': True,
|
|
47
|
+
'createMarketBuyOrderWithCost': True,
|
|
48
|
+
'createMarketOrderWithCost': True,
|
|
46
49
|
'createOrder': True,
|
|
47
50
|
'createStopLimitOrder': True,
|
|
48
51
|
'createStopMarketOrder': True,
|
|
@@ -54,6 +57,8 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
54
57
|
'fetchCurrencies': True,
|
|
55
58
|
'fetchDeposit': True,
|
|
56
59
|
'fetchDepositAddress': True,
|
|
60
|
+
'fetchDepositAddresses': False,
|
|
61
|
+
'fetchDepositAddressesByNetwork': False,
|
|
57
62
|
'fetchDeposits': True,
|
|
58
63
|
'fetchDepositsWithdrawals': True,
|
|
59
64
|
'fetchDepositWithdrawFee': 'emulated',
|
|
@@ -215,12 +220,74 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
215
220
|
'fillResponseFromRequest': True,
|
|
216
221
|
},
|
|
217
222
|
},
|
|
223
|
+
'features': {
|
|
224
|
+
'spot': {
|
|
225
|
+
'sandbox': False,
|
|
226
|
+
'createOrder': {
|
|
227
|
+
'marginMode': True, # todo revise
|
|
228
|
+
'triggerPrice': True, # todo: endpoint lacks other features
|
|
229
|
+
'triggerPriceType': None,
|
|
230
|
+
'triggerDirection': False,
|
|
231
|
+
'stopLossPrice': False,
|
|
232
|
+
'takeProfitPrice': False,
|
|
233
|
+
'attachedStopLossTakeProfit': None,
|
|
234
|
+
'timeInForce': {
|
|
235
|
+
'IOC': True,
|
|
236
|
+
'FOK': True,
|
|
237
|
+
'PO': True,
|
|
238
|
+
'GTD': True,
|
|
239
|
+
},
|
|
240
|
+
'hedged': False,
|
|
241
|
+
'selfTradePrevention': False,
|
|
242
|
+
'trailing': False,
|
|
243
|
+
'leverage': True,
|
|
244
|
+
'marketBuyByCost': True,
|
|
245
|
+
'marketBuyRequiresPrice': False,
|
|
246
|
+
'iceberg': False,
|
|
247
|
+
},
|
|
248
|
+
'createOrders': None,
|
|
249
|
+
'fetchMyTrades': {
|
|
250
|
+
'marginMode': True,
|
|
251
|
+
'limit': 100,
|
|
252
|
+
'daysBack': None,
|
|
253
|
+
'untilDays': None,
|
|
254
|
+
'symbolRequired': True,
|
|
255
|
+
},
|
|
256
|
+
'fetchOrder': {
|
|
257
|
+
'marginMode': False,
|
|
258
|
+
'trigger': False,
|
|
259
|
+
'trailing': False,
|
|
260
|
+
'symbolRequired': False,
|
|
261
|
+
},
|
|
262
|
+
'fetchOpenOrders': {
|
|
263
|
+
'marginMode': False,
|
|
264
|
+
'limit': None,
|
|
265
|
+
'trigger': False,
|
|
266
|
+
'trailing': False,
|
|
267
|
+
'symbolRequired': False,
|
|
268
|
+
},
|
|
269
|
+
'fetchOrders': None,
|
|
270
|
+
'fetchClosedOrders': None,
|
|
271
|
+
'fetchOHLCV': {
|
|
272
|
+
'limit': 1000, # todo, not in request
|
|
273
|
+
},
|
|
274
|
+
},
|
|
275
|
+
'swap': {
|
|
276
|
+
'linear': None,
|
|
277
|
+
'inverse': None,
|
|
278
|
+
},
|
|
279
|
+
'future': {
|
|
280
|
+
'linear': None,
|
|
281
|
+
'inverse': None,
|
|
282
|
+
},
|
|
283
|
+
},
|
|
218
284
|
'commonCurrencies': {
|
|
219
285
|
'GMT': 'GMT Token',
|
|
220
286
|
},
|
|
221
287
|
'precisionMode': TICK_SIZE,
|
|
222
288
|
'exceptions': {
|
|
223
289
|
'exact': {
|
|
290
|
+
'140333': InvalidOrder, # {"error":{"code":140333,"msg":"The number of characters after the point in the price exceeds the maximum number '8\u003e6'"}}
|
|
224
291
|
'140434': BadRequest,
|
|
225
292
|
'40005': AuthenticationError, # Authorization error, incorrect signature
|
|
226
293
|
'40009': InvalidNonce, #
|
|
@@ -290,7 +357,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
290
357
|
def reduce_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
|
291
358
|
"""
|
|
292
359
|
remove margin from a position
|
|
293
|
-
|
|
360
|
+
|
|
361
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#eebf9f25-0289-4946-9482-89872c738449
|
|
362
|
+
|
|
294
363
|
:param str symbol: unified market symbol
|
|
295
364
|
:param float amount: the amount of margin to remove
|
|
296
365
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -301,7 +370,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
301
370
|
def add_margin(self, symbol: str, amount: float, params={}) -> MarginModification:
|
|
302
371
|
"""
|
|
303
372
|
add margin
|
|
304
|
-
|
|
373
|
+
|
|
374
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#143ef808-79ca-4e49-9e79-a60ea4d8c0e3
|
|
375
|
+
|
|
305
376
|
:param str symbol: unified market symbol
|
|
306
377
|
:param float amount: amount of margin to add
|
|
307
378
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -312,8 +383,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
312
383
|
def fetch_trading_fees(self, params={}) -> TradingFees:
|
|
313
384
|
"""
|
|
314
385
|
fetch the trading fees for multiple markets
|
|
315
|
-
|
|
316
|
-
|
|
386
|
+
|
|
387
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#90927062-256c-4b03-900f-2b99131f9a54
|
|
388
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa
|
|
389
|
+
|
|
317
390
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
318
391
|
:returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
|
|
319
392
|
"""
|
|
@@ -430,9 +503,11 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
430
503
|
|
|
431
504
|
def fetch_transaction_fees(self, codes: Strings = None, params={}):
|
|
432
505
|
"""
|
|
433
|
-
|
|
506
|
+
@deprecated
|
|
434
507
|
please use fetchDepositWithdrawFees instead
|
|
435
|
-
|
|
508
|
+
|
|
509
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2
|
|
510
|
+
|
|
436
511
|
:param str[]|None codes: list of unified currency codes
|
|
437
512
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
438
513
|
:returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
|
|
@@ -500,7 +575,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
500
575
|
def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
|
|
501
576
|
"""
|
|
502
577
|
fetch deposit and withdraw fees
|
|
503
|
-
|
|
578
|
+
|
|
579
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2
|
|
580
|
+
|
|
504
581
|
:param str[]|None codes: list of unified currency codes
|
|
505
582
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
506
583
|
:returns dict: a list of `transaction fees structures <https://docs.ccxt.com/#/?id=fees-structure>`
|
|
@@ -582,13 +659,16 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
582
659
|
def fetch_currencies(self, params={}) -> Currencies:
|
|
583
660
|
"""
|
|
584
661
|
fetches all available currencies on an exchange
|
|
585
|
-
|
|
586
|
-
|
|
662
|
+
|
|
663
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7cdf0ca8-9ff6-4cf3-aa33-bcec83155c49
|
|
664
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4190035d-24b1-453d-833b-37e0a52f88e2
|
|
665
|
+
|
|
587
666
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
588
667
|
:returns dict: an associative dictionary of currencies
|
|
589
668
|
"""
|
|
669
|
+
promises = []
|
|
590
670
|
#
|
|
591
|
-
|
|
671
|
+
promises.append(self.publicGetCurrencyListExtended(params))
|
|
592
672
|
#
|
|
593
673
|
# [
|
|
594
674
|
# {"name":"VLX","description":"Velas"},
|
|
@@ -597,7 +677,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
597
677
|
# {"name":"USD","description":"US Dollar"}
|
|
598
678
|
# ]
|
|
599
679
|
#
|
|
600
|
-
|
|
680
|
+
promises.append(self.publicGetPaymentsProvidersCryptoList(params))
|
|
601
681
|
#
|
|
602
682
|
# {
|
|
603
683
|
# "BTC":[
|
|
@@ -622,83 +702,105 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
622
702
|
# ],
|
|
623
703
|
# }
|
|
624
704
|
#
|
|
705
|
+
responses = promises
|
|
706
|
+
currencyList = responses[0]
|
|
707
|
+
cryptoList = responses[1]
|
|
625
708
|
result: dict = {}
|
|
626
709
|
for i in range(0, len(currencyList)):
|
|
627
710
|
currency = currencyList[i]
|
|
628
711
|
currencyId = self.safe_string(currency, 'name')
|
|
629
|
-
|
|
630
|
-
providers = self.safe_value(cryptoList, currencyId)
|
|
631
|
-
active = False
|
|
712
|
+
code = self.safe_currency_code(currencyId)
|
|
632
713
|
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
|
|
714
|
+
networks = {}
|
|
715
|
+
providers = self.safe_list(cryptoList, currencyId)
|
|
646
716
|
if providers is None:
|
|
647
|
-
active = True
|
|
648
717
|
type = 'fiat'
|
|
649
718
|
else:
|
|
650
719
|
for j in range(0, len(providers)):
|
|
651
720
|
provider = providers[j]
|
|
721
|
+
name = self.safe_string(provider, 'name')
|
|
722
|
+
# get network-id by removing extra things
|
|
723
|
+
networkId = name.replace(currencyId + ' ', '')
|
|
724
|
+
networkId = networkId.replace('(', '')
|
|
725
|
+
replaceChar = ')' # transpiler trick
|
|
726
|
+
networkId = networkId.replace(replaceChar, '')
|
|
727
|
+
networkCode = self.network_id_to_code(networkId)
|
|
728
|
+
if not (networkCode in networks):
|
|
729
|
+
networks[networkCode] = {
|
|
730
|
+
'id': networkId,
|
|
731
|
+
'network': networkCode,
|
|
732
|
+
'active': None,
|
|
733
|
+
'deposit': None,
|
|
734
|
+
'withdraw': None,
|
|
735
|
+
'fee': None,
|
|
736
|
+
'limits': {
|
|
737
|
+
'withdraw': {
|
|
738
|
+
'min': None,
|
|
739
|
+
'max': None,
|
|
740
|
+
},
|
|
741
|
+
'deposit': {
|
|
742
|
+
'min': None,
|
|
743
|
+
'max': None,
|
|
744
|
+
},
|
|
745
|
+
},
|
|
746
|
+
'info': [], # set, because of multiple network sub-entries
|
|
747
|
+
}
|
|
652
748
|
typeInner = self.safe_string(provider, 'type')
|
|
653
749
|
minValue = self.safe_string(provider, 'min')
|
|
654
750
|
maxValue = self.safe_string(provider, 'max')
|
|
655
|
-
|
|
656
|
-
|
|
657
|
-
activeProvider = self.safe_value(provider, 'enabled')
|
|
751
|
+
activeProvider = self.safe_bool(provider, 'enabled')
|
|
752
|
+
networkEntry = networks[networkCode]
|
|
658
753
|
if typeInner == 'deposit':
|
|
659
|
-
|
|
660
|
-
|
|
661
|
-
|
|
662
|
-
depositEnabled = False
|
|
754
|
+
networkEntry['deposit'] = activeProvider
|
|
755
|
+
networkEntry['limits']['deposit']['min'] = minValue
|
|
756
|
+
networkEntry['limits']['deposit']['max'] = maxValue
|
|
663
757
|
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] = {
|
|
758
|
+
networkEntry['withdraw'] = activeProvider
|
|
759
|
+
networkEntry['limits']['withdraw']['min'] = minValue
|
|
760
|
+
networkEntry['limits']['withdraw']['max'] = maxValue
|
|
761
|
+
info = self.safe_list(networkEntry, 'info')
|
|
762
|
+
info.append(provider)
|
|
763
|
+
networkEntry['info'] = info
|
|
764
|
+
networks[networkCode] = networkEntry
|
|
765
|
+
result[code] = self.safe_currency_structure({
|
|
679
766
|
'id': currencyId,
|
|
680
767
|
'code': code,
|
|
681
|
-
'name':
|
|
768
|
+
'name': self.safe_string(currency, 'description'),
|
|
682
769
|
'type': type,
|
|
683
|
-
'active':
|
|
684
|
-
'deposit':
|
|
685
|
-
'withdraw':
|
|
686
|
-
'fee':
|
|
770
|
+
'active': None,
|
|
771
|
+
'deposit': None,
|
|
772
|
+
'withdraw': None,
|
|
773
|
+
'fee': None,
|
|
687
774
|
'precision': self.parse_number('1e-8'),
|
|
688
|
-
'limits':
|
|
689
|
-
|
|
690
|
-
|
|
691
|
-
|
|
775
|
+
'limits': {
|
|
776
|
+
'withdraw': {
|
|
777
|
+
'min': None,
|
|
778
|
+
'max': None,
|
|
779
|
+
},
|
|
780
|
+
'deposit': {
|
|
781
|
+
'min': None,
|
|
782
|
+
'max': None,
|
|
783
|
+
},
|
|
784
|
+
},
|
|
785
|
+
'info': {
|
|
786
|
+
'currency': currency,
|
|
787
|
+
'providers': providers,
|
|
788
|
+
},
|
|
789
|
+
'networks': networks,
|
|
790
|
+
})
|
|
692
791
|
return result
|
|
693
792
|
|
|
694
793
|
def fetch_markets(self, params={}) -> List[Market]:
|
|
695
794
|
"""
|
|
696
795
|
retrieves data on all markets for exmo
|
|
697
|
-
|
|
796
|
+
|
|
797
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#7de7e75c-5833-45a8-b937-c2276d235aaa
|
|
798
|
+
|
|
698
799
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
699
800
|
:returns dict[]: an array of objects representing market data
|
|
700
801
|
"""
|
|
701
|
-
|
|
802
|
+
promises = []
|
|
803
|
+
promises.append(self.publicGetPairSettings(params))
|
|
702
804
|
#
|
|
703
805
|
# {
|
|
704
806
|
# "BTC_USD":{
|
|
@@ -715,8 +817,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
715
817
|
# }
|
|
716
818
|
#
|
|
717
819
|
marginPairsDict: dict = {}
|
|
718
|
-
|
|
719
|
-
|
|
820
|
+
fetchMargin = self.check_required_credentials(False)
|
|
821
|
+
if fetchMargin:
|
|
822
|
+
promises.append(self.privatePostMarginPairList(params))
|
|
720
823
|
#
|
|
721
824
|
# {
|
|
722
825
|
# "pairs": [
|
|
@@ -746,14 +849,18 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
746
849
|
# ]
|
|
747
850
|
# }
|
|
748
851
|
#
|
|
749
|
-
|
|
852
|
+
responses = promises
|
|
853
|
+
spotResponse = responses[0]
|
|
854
|
+
if fetchMargin:
|
|
855
|
+
marginPairs = responses[1]
|
|
856
|
+
pairs = self.safe_list(marginPairs, 'pairs')
|
|
750
857
|
marginPairsDict = self.index_by(pairs, 'name')
|
|
751
|
-
keys = list(
|
|
858
|
+
keys = list(spotResponse.keys())
|
|
752
859
|
result = []
|
|
753
860
|
for i in range(0, len(keys)):
|
|
754
861
|
id = keys[i]
|
|
755
|
-
market =
|
|
756
|
-
marginMarket = self.
|
|
862
|
+
market = spotResponse[id]
|
|
863
|
+
marginMarket = self.safe_dict(marginPairsDict, id)
|
|
757
864
|
symbol = id.replace('_', '/')
|
|
758
865
|
baseId, quoteId = symbol.split('/')
|
|
759
866
|
base = self.safe_currency_code(baseId)
|
|
@@ -818,38 +925,48 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
818
925
|
def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
819
926
|
"""
|
|
820
927
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
821
|
-
|
|
928
|
+
|
|
929
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#65eeb949-74e5-4631-9184-c38387fe53e8
|
|
930
|
+
|
|
822
931
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
823
932
|
:param str timeframe: the length of time each candle represents
|
|
824
933
|
:param int [since]: timestamp in ms of the earliest candle to fetch
|
|
825
934
|
:param int [limit]: the maximum amount of candles to fetch
|
|
826
935
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
936
|
+
:param int [params.until]: timestamp in ms of the latest candle to fetch
|
|
827
937
|
:returns int[][]: A list of candles ordered, open, high, low, close, volume
|
|
828
938
|
"""
|
|
829
939
|
self.load_markets()
|
|
830
940
|
market = self.market(symbol)
|
|
941
|
+
until = self.safe_integer_product(params, 'until', 0.001)
|
|
942
|
+
untilIsDefined = (until is not None)
|
|
831
943
|
request: dict = {
|
|
832
944
|
'symbol': market['id'],
|
|
833
945
|
'resolution': self.safe_string(self.timeframes, timeframe, timeframe),
|
|
834
946
|
}
|
|
835
947
|
maxLimit = 3000
|
|
836
948
|
duration = self.parse_timeframe(timeframe)
|
|
837
|
-
now = self.milliseconds()
|
|
949
|
+
now = self.parse_to_int(self.milliseconds() / 1000)
|
|
838
950
|
if since is None:
|
|
951
|
+
to = min(until, now) if untilIsDefined else now
|
|
839
952
|
if limit is None:
|
|
840
953
|
limit = 1000 # cap default at generous amount
|
|
841
954
|
else:
|
|
842
955
|
limit = min(limit, maxLimit)
|
|
843
|
-
request['from'] =
|
|
844
|
-
request['to'] =
|
|
956
|
+
request['from'] = to - (limit * duration) - 1
|
|
957
|
+
request['to'] = to
|
|
845
958
|
else:
|
|
846
|
-
request['from'] = self.parse_to_int(since / 1000)
|
|
847
|
-
if
|
|
848
|
-
|
|
959
|
+
request['from'] = self.parse_to_int(since / 1000)
|
|
960
|
+
if untilIsDefined:
|
|
961
|
+
request['to'] = min(until, now)
|
|
849
962
|
else:
|
|
850
|
-
limit
|
|
851
|
-
|
|
852
|
-
|
|
963
|
+
if limit is None:
|
|
964
|
+
limit = maxLimit
|
|
965
|
+
else:
|
|
966
|
+
limit = min(limit, maxLimit)
|
|
967
|
+
to = self.sum(since, limit * duration)
|
|
968
|
+
request['to'] = min(to, now)
|
|
969
|
+
params = self.omit(params, 'until')
|
|
853
970
|
response = self.publicGetCandlesHistory(self.extend(request, params))
|
|
854
971
|
#
|
|
855
972
|
# {
|
|
@@ -915,8 +1032,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
915
1032
|
def fetch_balance(self, params={}) -> Balances:
|
|
916
1033
|
"""
|
|
917
1034
|
query for balance and get the amount of funds available for trading or funds locked in orders
|
|
918
|
-
|
|
919
|
-
|
|
1035
|
+
|
|
1036
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#59c5160f-27a1-4d9a-8cfb-7979c7ffaac6
|
|
1037
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8388df7-1f9f-4d41-81c4-5a387d171dc6
|
|
1038
|
+
|
|
920
1039
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
921
1040
|
:param str [params.marginMode]: *isolated* fetches the isolated margin balance
|
|
922
1041
|
:returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
|
|
@@ -959,7 +1078,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
959
1078
|
def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
960
1079
|
"""
|
|
961
1080
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
962
|
-
|
|
1081
|
+
|
|
1082
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871
|
|
1083
|
+
|
|
963
1084
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
964
1085
|
:param int [limit]: the maximum amount of order book entries to return
|
|
965
1086
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -976,10 +1097,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
976
1097
|
result = self.safe_dict(response, market['id'])
|
|
977
1098
|
return self.parse_order_book(result, market['symbol'], None, 'bid', 'ask')
|
|
978
1099
|
|
|
979
|
-
def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
|
|
1100
|
+
def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}) -> OrderBooks:
|
|
980
1101
|
"""
|
|
981
1102
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
|
|
982
|
-
|
|
1103
|
+
|
|
1104
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c60c51a8-e683-4f45-a000-820723d37871
|
|
1105
|
+
|
|
983
1106
|
:param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
|
|
984
1107
|
:param int [limit]: max number of entries per orderbook to return, default is None
|
|
985
1108
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1053,7 +1176,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1053
1176
|
def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
1054
1177
|
"""
|
|
1055
1178
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
1056
|
-
|
|
1179
|
+
|
|
1180
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385
|
|
1181
|
+
|
|
1057
1182
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
1058
1183
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1059
1184
|
:returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -1089,7 +1214,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1089
1214
|
def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
1090
1215
|
"""
|
|
1091
1216
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
1092
|
-
|
|
1217
|
+
|
|
1218
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#4c8e6459-3503-4361-b012-c34bb9f7e385
|
|
1219
|
+
|
|
1093
1220
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
1094
1221
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1095
1222
|
:returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
|
|
@@ -1189,7 +1316,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1189
1316
|
def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
1190
1317
|
"""
|
|
1191
1318
|
get the list of most recent trades for a particular symbol
|
|
1192
|
-
|
|
1319
|
+
|
|
1320
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#5a5a9c0d-cf17-47f6-9d62-6d4404ebd5ac
|
|
1321
|
+
|
|
1193
1322
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
1194
1323
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
1195
1324
|
:param int [limit]: the maximum amount of trades to fetch
|
|
@@ -1230,14 +1359,16 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1230
1359
|
def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
1231
1360
|
"""
|
|
1232
1361
|
fetch all trades made by the user
|
|
1233
|
-
|
|
1234
|
-
|
|
1362
|
+
|
|
1363
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#b8d8d9af-4f46-46a1-939b-ad261d79f452 # spot
|
|
1364
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#f4b1aaf8-399f-403b-ab5e-4926d967a106 # margin
|
|
1365
|
+
|
|
1235
1366
|
:param str symbol: a symbol is required but it can be a single string, or a non-empty array
|
|
1236
1367
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
1237
1368
|
:param int [limit]: *required for margin orders* the maximum number of trades structures to retrieve
|
|
1238
1369
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1239
|
-
|
|
1240
|
-
|
|
1370
|
+
|
|
1371
|
+
EXCHANGE SPECIFIC PARAMETERS
|
|
1241
1372
|
:param int [params.offset]: last deal offset, default = 0
|
|
1242
1373
|
:returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
|
|
1243
1374
|
"""
|
|
@@ -1246,7 +1377,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1246
1377
|
marginMode = None
|
|
1247
1378
|
marginMode, params = self.handle_margin_mode_and_params('fetchMyTrades', params)
|
|
1248
1379
|
if marginMode == 'cross':
|
|
1249
|
-
raise BadRequest(self.id + 'only isolated margin is supported')
|
|
1380
|
+
raise BadRequest(self.id + ' only isolated margin is supported')
|
|
1250
1381
|
self.load_markets()
|
|
1251
1382
|
market = self.market(symbol)
|
|
1252
1383
|
pair = market['id']
|
|
@@ -1319,21 +1450,70 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1319
1450
|
result = self.array_concat(result, trades)
|
|
1320
1451
|
return self.filter_by_since_limit(result, since, limit)
|
|
1321
1452
|
|
|
1453
|
+
def create_market_order_with_cost(self, symbol: str, side: OrderSide, cost: float, params={}):
|
|
1454
|
+
"""
|
|
1455
|
+
create a market order by providing the symbol, side and cost
|
|
1456
|
+
|
|
1457
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1458
|
+
|
|
1459
|
+
:param str symbol: unified symbol of the market to create an order in
|
|
1460
|
+
:param str side: 'buy' or 'sell'
|
|
1461
|
+
:param float cost: how much you want to trade in units of the quote currency
|
|
1462
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1463
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1464
|
+
"""
|
|
1465
|
+
self.load_markets()
|
|
1466
|
+
params = self.extend(params, {'cost': cost})
|
|
1467
|
+
return self.create_order(symbol, 'market', side, cost, None, params)
|
|
1468
|
+
|
|
1469
|
+
def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
|
1470
|
+
"""
|
|
1471
|
+
create a market buy order by providing the symbol and cost
|
|
1472
|
+
|
|
1473
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1474
|
+
|
|
1475
|
+
:param str symbol: unified symbol of the market to create an order in
|
|
1476
|
+
:param float cost: how much you want to trade in units of the quote currency
|
|
1477
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1478
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1479
|
+
"""
|
|
1480
|
+
self.load_markets()
|
|
1481
|
+
params = self.extend(params, {'cost': cost})
|
|
1482
|
+
return self.create_order(symbol, 'market', 'buy', cost, None, params)
|
|
1483
|
+
|
|
1484
|
+
def create_market_sell_order_with_cost(self, symbol: str, cost: float, params={}):
|
|
1485
|
+
"""
|
|
1486
|
+
create a market sell order by providing the symbol and cost
|
|
1487
|
+
|
|
1488
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1489
|
+
|
|
1490
|
+
:param str symbol: unified symbol of the market to create an order in
|
|
1491
|
+
:param float cost: how much you want to trade in units of the quote currency
|
|
1492
|
+
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1493
|
+
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1494
|
+
"""
|
|
1495
|
+
self.load_markets()
|
|
1496
|
+
params = self.extend(params, {'cost': cost})
|
|
1497
|
+
return self.create_order(symbol, 'market', 'sell', cost, None, params)
|
|
1498
|
+
|
|
1322
1499
|
def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
|
1323
1500
|
"""
|
|
1324
1501
|
create a trade order
|
|
1325
|
-
|
|
1326
|
-
|
|
1327
|
-
|
|
1502
|
+
|
|
1503
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#80daa469-ec59-4d0a-b229-6a311d8dd1cd
|
|
1504
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#de6f4321-eeac-468c-87f7-c4ad7062e265 # stop market
|
|
1505
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#3561b86c-9ff1-436e-8e68-ac926b7eb523 # margin
|
|
1506
|
+
|
|
1328
1507
|
:param str symbol: unified symbol of the market to create an order in
|
|
1329
1508
|
:param str type: 'market' or 'limit'
|
|
1330
1509
|
:param str side: 'buy' or 'sell'
|
|
1331
1510
|
: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
|
|
1511
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1333
1512
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1334
|
-
:param float [params.
|
|
1513
|
+
:param float [params.triggerPrice]: the price at which a trigger order is triggered at
|
|
1335
1514
|
:param str [params.timeInForce]: *spot only* 'fok', 'ioc' or 'post_only'
|
|
1336
1515
|
:param boolean [params.postOnly]: *spot only* True for post only orders
|
|
1516
|
+
:param float [params.cost]: *spot only* *market orders only* the cost of the order in the quote currency for market orders
|
|
1337
1517
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1338
1518
|
"""
|
|
1339
1519
|
self.load_markets()
|
|
@@ -1344,11 +1524,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1344
1524
|
if marginMode == 'cross':
|
|
1345
1525
|
raise BadRequest(self.id + ' only supports isolated margin')
|
|
1346
1526
|
isSpot = (marginMode != 'isolated')
|
|
1347
|
-
triggerPrice = self.
|
|
1527
|
+
triggerPrice = self.safe_string_n(params, ['triggerPrice', 'stopPrice', 'stop_price'])
|
|
1528
|
+
cost = self.safe_string(params, 'cost')
|
|
1348
1529
|
request: dict = {
|
|
1349
1530
|
'pair': market['id'],
|
|
1350
1531
|
# 'leverage': 2,
|
|
1351
|
-
'quantity': self.amount_to_precision(market['symbol'], amount),
|
|
1532
|
+
# 'quantity': self.amount_to_precision(market['symbol'], amount),
|
|
1352
1533
|
# spot - buy, sell, market_buy, market_sell, market_buy_total, market_sell_total
|
|
1353
1534
|
# 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
1535
|
# 'stop_price': self.price_to_precision(symbol, stopPrice),
|
|
@@ -1357,6 +1538,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1357
1538
|
# 'client_id': 123, # optional, must be a positive integer
|
|
1358
1539
|
# 'comment': '', # up to 50 latin symbols, whitespaces, underscores
|
|
1359
1540
|
}
|
|
1541
|
+
if cost is None:
|
|
1542
|
+
request['quantity'] = self.amount_to_precision(market['symbol'], amount)
|
|
1543
|
+
else:
|
|
1544
|
+
request['quantity'] = self.cost_to_precision(market['symbol'], cost)
|
|
1360
1545
|
clientOrderId = self.safe_value_2(params, 'client_id', 'clientOrderId')
|
|
1361
1546
|
if clientOrderId is not None:
|
|
1362
1547
|
clientOrderId = self.safe_integer_2(params, 'client_id', 'clientOrderId')
|
|
@@ -1367,7 +1552,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1367
1552
|
leverage = self.safe_number(params, 'leverage')
|
|
1368
1553
|
if not isSpot and (leverage is None):
|
|
1369
1554
|
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'])
|
|
1555
|
+
params = self.omit(params, ['stopPrice', 'stop_price', 'triggerPrice', 'timeInForce', 'client_id', 'clientOrderId', 'cost'])
|
|
1371
1556
|
if price is not None:
|
|
1372
1557
|
request['price'] = self.price_to_precision(market['symbol'], price)
|
|
1373
1558
|
response = None
|
|
@@ -1388,7 +1573,8 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1388
1573
|
if type == 'limit':
|
|
1389
1574
|
request['type'] = side
|
|
1390
1575
|
elif type == 'market':
|
|
1391
|
-
|
|
1576
|
+
marketSuffix = '_total' if (cost is not None) else ''
|
|
1577
|
+
request['type'] = 'market_' + side + marketSuffix
|
|
1392
1578
|
if isPostOnly:
|
|
1393
1579
|
request['exec_type'] = 'post_only'
|
|
1394
1580
|
elif timeInForce is not None:
|
|
@@ -1414,9 +1600,11 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1414
1600
|
def cancel_order(self, id: str, symbol: Str = None, params={}):
|
|
1415
1601
|
"""
|
|
1416
1602
|
cancels an open order
|
|
1417
|
-
|
|
1418
|
-
|
|
1419
|
-
|
|
1603
|
+
|
|
1604
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#1f710d4b-75bc-4b65-ad68-006f863a3f26
|
|
1605
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a4d0aae8-28f7-41ac-94fd-c4030130453d # stop market
|
|
1606
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#705dfec5-2b35-4667-862b-faf54eca6209 # margin
|
|
1607
|
+
|
|
1420
1608
|
:param str id: order id
|
|
1421
1609
|
:param str symbol: not used by exmo cancelOrder()
|
|
1422
1610
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1426,7 +1614,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1426
1614
|
"""
|
|
1427
1615
|
self.load_markets()
|
|
1428
1616
|
request: dict = {}
|
|
1429
|
-
|
|
1617
|
+
trigger = self.safe_value_2(params, 'trigger', 'stop')
|
|
1430
1618
|
params = self.omit(params, ['trigger', 'stop'])
|
|
1431
1619
|
marginMode = None
|
|
1432
1620
|
marginMode, params = self.handle_margin_mode_and_params('cancelOrder', params)
|
|
@@ -1440,7 +1628,7 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1440
1628
|
# {}
|
|
1441
1629
|
#
|
|
1442
1630
|
else:
|
|
1443
|
-
if
|
|
1631
|
+
if trigger:
|
|
1444
1632
|
request['parent_order_id'] = id
|
|
1445
1633
|
response = self.privatePostStopMarketOrderCancel(self.extend(request, params))
|
|
1446
1634
|
#
|
|
@@ -1460,7 +1648,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1460
1648
|
def fetch_order(self, id: str, symbol: Str = None, params={}):
|
|
1461
1649
|
"""
|
|
1462
1650
|
*spot only* fetches information on an order made by the user
|
|
1463
|
-
|
|
1651
|
+
|
|
1652
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459 # spot
|
|
1653
|
+
|
|
1654
|
+
:param str id: order id
|
|
1464
1655
|
:param str symbol: not used by exmo fetchOrder
|
|
1465
1656
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1466
1657
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
@@ -1498,8 +1689,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1498
1689
|
def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
1499
1690
|
"""
|
|
1500
1691
|
fetch all the trades made from a single order
|
|
1501
|
-
|
|
1502
|
-
|
|
1692
|
+
|
|
1693
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#cf27781e-28e5-4b39-a52d-3110f5d22459 # spot
|
|
1694
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#00810661-9119-46c5-aec5-55abe9cb42c7 # margin
|
|
1695
|
+
|
|
1503
1696
|
:param str id: order id
|
|
1504
1697
|
:param str symbol: unified market symbol
|
|
1505
1698
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
@@ -1570,8 +1763,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1570
1763
|
def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
1571
1764
|
"""
|
|
1572
1765
|
fetch all unfilled currently open orders
|
|
1573
|
-
|
|
1574
|
-
|
|
1766
|
+
|
|
1767
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#0e135370-daa4-4689-8acd-b6876dee9ba1 # spot open orders
|
|
1768
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a7cfd4f0-476e-4675-b33f-22a46902f245 # margin
|
|
1769
|
+
|
|
1575
1770
|
:param str symbol: unified market symbol
|
|
1576
1771
|
:param int [since]: the earliest time in ms to fetch open orders for
|
|
1577
1772
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
|
@@ -1804,7 +1999,6 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1804
1999
|
'postOnly': None,
|
|
1805
2000
|
'side': side,
|
|
1806
2001
|
'price': price,
|
|
1807
|
-
'stopPrice': triggerPrice,
|
|
1808
2002
|
'triggerPrice': triggerPrice,
|
|
1809
2003
|
'cost': cost,
|
|
1810
2004
|
'amount': amount,
|
|
@@ -1819,8 +2013,10 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1819
2013
|
def fetch_canceled_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
1820
2014
|
"""
|
|
1821
2015
|
fetches information on multiple canceled orders made by the user
|
|
1822
|
-
|
|
1823
|
-
|
|
2016
|
+
|
|
2017
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#1d2524dd-ae6d-403a-a067-77b50d13fbe5 # margin
|
|
2018
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#a51be1d0-af5f-44e4-99d7-f7b04c6067d0 # spot canceled orders
|
|
2019
|
+
|
|
1824
2020
|
:param str symbol: unified market symbol of the market orders were made in
|
|
1825
2021
|
:param int [since]: timestamp in ms of the earliest order, default is None
|
|
1826
2022
|
:param int [limit]: max number of orders to return, default is None
|
|
@@ -1906,18 +2102,20 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1906
2102
|
def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
|
|
1907
2103
|
"""
|
|
1908
2104
|
*margin only* edit a trade order
|
|
1909
|
-
|
|
2105
|
+
|
|
2106
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#f27ee040-c75f-4b59-b608-d05bd45b7899 # margin
|
|
2107
|
+
|
|
1910
2108
|
:param str id: order id
|
|
1911
2109
|
:param str symbol: unified CCXT market symbol
|
|
1912
2110
|
:param str type: not used by exmo editOrder
|
|
1913
2111
|
:param str side: not used by exmo editOrder
|
|
1914
2112
|
: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
|
|
2113
|
+
:param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1916
2114
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1917
2115
|
:param float [params.triggerPrice]: stop price for stop-market and stop-limit orders
|
|
1918
2116
|
:param str params['marginMode']: must be set to isolated
|
|
1919
|
-
|
|
1920
|
-
|
|
2117
|
+
|
|
2118
|
+
EXCHANGE SPECIFIC PARAMETERS
|
|
1921
2119
|
:param int [params.distance]: distance for trailing stop orders
|
|
1922
2120
|
:param int [params.expire]: expiration timestamp in UTC timezone for the order. order will not be expired if expire is 0
|
|
1923
2121
|
:param str [params.comment]: optional comment for order. up to 50 latin symbols, whitespaces, underscores
|
|
@@ -1943,10 +2141,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1943
2141
|
response = self.privatePostMarginUserOrderUpdate(self.extend(request, params))
|
|
1944
2142
|
return self.parse_order(response)
|
|
1945
2143
|
|
|
1946
|
-
def fetch_deposit_address(self, code: str, params={}):
|
|
2144
|
+
def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
|
1947
2145
|
"""
|
|
1948
2146
|
fetch the deposit address for a currency associated with self account
|
|
1949
|
-
|
|
2147
|
+
|
|
2148
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#c8f9ced9-7ab6-4383-a6a4-bc54469ba60e
|
|
2149
|
+
|
|
1950
2150
|
:param str code: unified currency code
|
|
1951
2151
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1952
2152
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
|
@@ -1970,11 +2170,11 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1970
2170
|
tag = addressAndTag[1]
|
|
1971
2171
|
self.check_address(address)
|
|
1972
2172
|
return {
|
|
2173
|
+
'info': response,
|
|
1973
2174
|
'currency': code,
|
|
2175
|
+
'network': None,
|
|
1974
2176
|
'address': address,
|
|
1975
2177
|
'tag': tag,
|
|
1976
|
-
'network': None,
|
|
1977
|
-
'info': response,
|
|
1978
2178
|
}
|
|
1979
2179
|
|
|
1980
2180
|
def get_market_from_trades(self, trades):
|
|
@@ -1985,10 +2185,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
1985
2185
|
return self.markets[symbols[0]]
|
|
1986
2186
|
return None
|
|
1987
2187
|
|
|
1988
|
-
def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
|
|
2188
|
+
def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
|
|
1989
2189
|
"""
|
|
1990
2190
|
make a withdrawal
|
|
1991
|
-
|
|
2191
|
+
|
|
2192
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#3ab9c34d-ad58-4f87-9c57-2e2ea88a8325
|
|
2193
|
+
|
|
1992
2194
|
:param str code: unified currency code
|
|
1993
2195
|
:param float amount: the amount to withdraw
|
|
1994
2196
|
:param str address: the address to withdraw to
|
|
@@ -2152,7 +2354,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2152
2354
|
def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2153
2355
|
"""
|
|
2154
2356
|
fetch history of deposits and withdrawals
|
|
2155
|
-
|
|
2357
|
+
|
|
2358
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#31e69a33-4849-4e6a-b4b4-6d574238f6a7
|
|
2359
|
+
|
|
2156
2360
|
:param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
|
|
2157
2361
|
:param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
|
|
2158
2362
|
:param int [limit]: max number of deposit/withdrawals to return, default is None
|
|
@@ -2202,7 +2406,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2202
2406
|
def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2203
2407
|
"""
|
|
2204
2408
|
fetch all withdrawals made from an account
|
|
2205
|
-
|
|
2409
|
+
|
|
2410
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2411
|
+
|
|
2206
2412
|
:param str code: unified currency code
|
|
2207
2413
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
|
2208
2414
|
:param int [limit]: the maximum number of withdrawals structures to retrieve
|
|
@@ -2252,7 +2458,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2252
2458
|
def fetch_withdrawal(self, id: str, code: Str = None, params={}):
|
|
2253
2459
|
"""
|
|
2254
2460
|
fetch data on a currency withdrawal via the withdrawal id
|
|
2255
|
-
|
|
2461
|
+
|
|
2462
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2463
|
+
|
|
2256
2464
|
:param str id: withdrawal id
|
|
2257
2465
|
:param str code: unified currency code of the currency withdrawn, default is None
|
|
2258
2466
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -2298,10 +2506,12 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2298
2506
|
first = self.safe_dict(items, 0, {})
|
|
2299
2507
|
return self.parse_transaction(first, currency)
|
|
2300
2508
|
|
|
2301
|
-
def fetch_deposit(self, id
|
|
2509
|
+
def fetch_deposit(self, id: str, code: Str = None, params={}):
|
|
2302
2510
|
"""
|
|
2303
2511
|
fetch information on a deposit
|
|
2304
|
-
|
|
2512
|
+
|
|
2513
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2514
|
+
|
|
2305
2515
|
:param str id: deposit id
|
|
2306
2516
|
:param str code: unified currency code, default is None
|
|
2307
2517
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -2350,7 +2560,9 @@ class exmo(Exchange, ImplicitAPI):
|
|
|
2350
2560
|
def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2351
2561
|
"""
|
|
2352
2562
|
fetch all deposits made to an account
|
|
2353
|
-
|
|
2563
|
+
|
|
2564
|
+
https://documenter.getpostman.com/view/10287440/SzYXWKPi#97f1becd-7aad-4e0e-babe-7bbe09e33706
|
|
2565
|
+
|
|
2354
2566
|
:param str code: unified currency code
|
|
2355
2567
|
:param int [since]: the earliest time in ms to fetch deposits for
|
|
2356
2568
|
:param int [limit]: the maximum number of deposits structures to retrieve
|