ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.1__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 +8 -8
- 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 +10 -10
- 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 +32 -38
- 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 +32 -27
- 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 +34 -30
- ccxt/async_support/sarmayex.py +9 -9
- ccxt/async_support/sarrafex.py +13 -13
- ccxt/async_support/tabdeal.py +15 -14
- 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 +30 -36
- 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 +29 -24
- 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 +32 -28
- 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 +13 -12
- 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.1.dist-info}/METADATA +225 -73
- ccxt_ir-4.5.1.dist-info/RECORD +743 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.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.1.dist-info/licenses}/LICENSE.txt +0 -0
- {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/top_level.txt +0 -0
ccxt/async_support/okcoin.py
CHANGED
|
@@ -6,7 +6,7 @@
|
|
|
6
6
|
from ccxt.async_support.base.exchange import Exchange
|
|
7
7
|
from ccxt.abstract.okcoin import ImplicitAPI
|
|
8
8
|
import hashlib
|
|
9
|
-
from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
|
9
|
+
from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
|
|
10
10
|
from typing import List
|
|
11
11
|
from ccxt.base.errors import ExchangeError
|
|
12
12
|
from ccxt.base.errors import AuthenticationError
|
|
@@ -20,7 +20,6 @@ from ccxt.base.errors import InsufficientFunds
|
|
|
20
20
|
from ccxt.base.errors import InvalidAddress
|
|
21
21
|
from ccxt.base.errors import InvalidOrder
|
|
22
22
|
from ccxt.base.errors import OrderNotFound
|
|
23
|
-
from ccxt.base.errors import CancelPending
|
|
24
23
|
from ccxt.base.errors import NotSupported
|
|
25
24
|
from ccxt.base.errors import NetworkError
|
|
26
25
|
from ccxt.base.errors import RateLimitExceeded
|
|
@@ -28,13 +27,14 @@ from ccxt.base.errors import ExchangeNotAvailable
|
|
|
28
27
|
from ccxt.base.errors import OnMaintenance
|
|
29
28
|
from ccxt.base.errors import InvalidNonce
|
|
30
29
|
from ccxt.base.errors import RequestTimeout
|
|
30
|
+
from ccxt.base.errors import CancelPending
|
|
31
31
|
from ccxt.base.decimal_to_precision import TICK_SIZE
|
|
32
32
|
from ccxt.base.precise import Precise
|
|
33
33
|
|
|
34
34
|
|
|
35
35
|
class okcoin(Exchange, ImplicitAPI):
|
|
36
36
|
|
|
37
|
-
def describe(self):
|
|
37
|
+
def describe(self) -> Any:
|
|
38
38
|
return self.deep_extend(super(okcoin, self).describe(), {
|
|
39
39
|
'id': 'okcoin',
|
|
40
40
|
'name': 'OKCoin',
|
|
@@ -56,6 +56,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
56
56
|
'createMarketOrderWithCost': False,
|
|
57
57
|
'createMarketSellOrderWithCost': False,
|
|
58
58
|
'createOrder': True,
|
|
59
|
+
'createPostOnlyOrder': True,
|
|
60
|
+
'createReduceOnlyOrder': True,
|
|
61
|
+
'createStopLimitOrder': True,
|
|
62
|
+
'createStopMarketOrder': True,
|
|
63
|
+
'createStopOrder': True,
|
|
64
|
+
'createTriggerOrder': True,
|
|
59
65
|
'fetchBalance': True,
|
|
60
66
|
'fetchBorrowInterest': False,
|
|
61
67
|
'fetchBorrowRate': False,
|
|
@@ -66,10 +72,13 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
66
72
|
'fetchClosedOrders': True,
|
|
67
73
|
'fetchCurrencies': True, # see below
|
|
68
74
|
'fetchDepositAddress': True,
|
|
75
|
+
'fetchDepositAddresses': False,
|
|
76
|
+
'fetchDepositAddressesByNetwork': False,
|
|
69
77
|
'fetchDeposits': True,
|
|
70
78
|
'fetchFundingHistory': False,
|
|
71
79
|
'fetchFundingRate': False,
|
|
72
80
|
'fetchFundingRateHistory': False,
|
|
81
|
+
'fetchFundingRates': False,
|
|
73
82
|
'fetchLedger': True,
|
|
74
83
|
'fetchMarkets': True,
|
|
75
84
|
'fetchMyTrades': True,
|
|
@@ -217,6 +226,87 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
217
226
|
},
|
|
218
227
|
},
|
|
219
228
|
},
|
|
229
|
+
'features': {
|
|
230
|
+
'spot': {
|
|
231
|
+
'sandbox': False,
|
|
232
|
+
'createOrder': {
|
|
233
|
+
'marginMode': True,
|
|
234
|
+
'triggerPrice': True,
|
|
235
|
+
'triggerDirection': True, # todo
|
|
236
|
+
'triggerPriceType': {
|
|
237
|
+
'last': True,
|
|
238
|
+
'mark': False,
|
|
239
|
+
'index': False,
|
|
240
|
+
},
|
|
241
|
+
'stopLossPrice': True, # todo revise trigger
|
|
242
|
+
'takeProfitPrice': True, # todo revise trigger
|
|
243
|
+
'attachedStopLossTakeProfit': {
|
|
244
|
+
'triggerPriceType': {
|
|
245
|
+
'last': True,
|
|
246
|
+
'mark': False,
|
|
247
|
+
'index': False,
|
|
248
|
+
},
|
|
249
|
+
'price': True,
|
|
250
|
+
},
|
|
251
|
+
'timeInForce': {
|
|
252
|
+
'IOC': True,
|
|
253
|
+
'FOK': True,
|
|
254
|
+
'PO': True,
|
|
255
|
+
'GTD': False,
|
|
256
|
+
},
|
|
257
|
+
'hedged': False,
|
|
258
|
+
'trailing': True, # todo
|
|
259
|
+
'leverage': False,
|
|
260
|
+
'marketBuyByCost': True,
|
|
261
|
+
'marketBuyRequiresPrice': True,
|
|
262
|
+
'selfTradePrevention': False,
|
|
263
|
+
'iceberg': True, # todo
|
|
264
|
+
},
|
|
265
|
+
'createOrders': None, # todo
|
|
266
|
+
'fetchMyTrades': {
|
|
267
|
+
'marginMode': False,
|
|
268
|
+
'limit': 100,
|
|
269
|
+
'daysBack': 90,
|
|
270
|
+
'untilDays': 90, # todo
|
|
271
|
+
'symbolRequired': False,
|
|
272
|
+
},
|
|
273
|
+
'fetchOrder': {
|
|
274
|
+
'marginMode': False,
|
|
275
|
+
'trigger': True,
|
|
276
|
+
'trailing': True, # todo
|
|
277
|
+
'symbolRequired': True,
|
|
278
|
+
},
|
|
279
|
+
'fetchOpenOrders': {
|
|
280
|
+
'marginMode': False,
|
|
281
|
+
'limit': 100,
|
|
282
|
+
'trigger': True,
|
|
283
|
+
'trailing': True,
|
|
284
|
+
'symbolRequired': False,
|
|
285
|
+
},
|
|
286
|
+
'fetchOrders': None,
|
|
287
|
+
'fetchClosedOrders': {
|
|
288
|
+
'marginMode': False,
|
|
289
|
+
'limit': 100,
|
|
290
|
+
'daysBack': 90, # todo
|
|
291
|
+
'daysBackCanceled': 1 / 12, # todo: possible more with history endpoint
|
|
292
|
+
'untilDays': 90, # todo
|
|
293
|
+
'trigger': True,
|
|
294
|
+
'trailing': True,
|
|
295
|
+
'symbolRequired': False,
|
|
296
|
+
},
|
|
297
|
+
'fetchOHLCV': {
|
|
298
|
+
'limit': 100, # 300 is only possible for 'recent' 1440 candles, which does not make much sense
|
|
299
|
+
},
|
|
300
|
+
},
|
|
301
|
+
'swap': {
|
|
302
|
+
'linear': None,
|
|
303
|
+
'inverse': None,
|
|
304
|
+
},
|
|
305
|
+
'future': {
|
|
306
|
+
'linear': None,
|
|
307
|
+
'inverse': None,
|
|
308
|
+
},
|
|
309
|
+
},
|
|
220
310
|
'fees': {
|
|
221
311
|
'trading': {
|
|
222
312
|
'taker': 0.002,
|
|
@@ -598,6 +688,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
598
688
|
'defaultNetwork': 'ERC20',
|
|
599
689
|
'networks': {
|
|
600
690
|
'ERC20': 'Ethereum',
|
|
691
|
+
'BTC': 'Bitcoin',
|
|
692
|
+
'OMNI': 'Omni',
|
|
693
|
+
'TRC20': 'TRON',
|
|
601
694
|
},
|
|
602
695
|
},
|
|
603
696
|
'commonCurrencies': {
|
|
@@ -614,7 +707,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
614
707
|
},
|
|
615
708
|
})
|
|
616
709
|
|
|
617
|
-
async def fetch_time(self, params={}):
|
|
710
|
+
async def fetch_time(self, params={}) -> Int:
|
|
618
711
|
"""
|
|
619
712
|
fetches the current integer timestamp in milliseconds from the exchange server
|
|
620
713
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -622,16 +715,26 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
622
715
|
"""
|
|
623
716
|
response = await self.publicGetPublicTime(params)
|
|
624
717
|
#
|
|
625
|
-
#
|
|
626
|
-
#
|
|
627
|
-
#
|
|
628
|
-
#
|
|
718
|
+
# {
|
|
719
|
+
# "code": "0",
|
|
720
|
+
# "data":
|
|
721
|
+
# [
|
|
722
|
+
# {
|
|
723
|
+
# "ts": "1737379360033"
|
|
724
|
+
# }
|
|
725
|
+
# ],
|
|
726
|
+
# "msg": ""
|
|
727
|
+
# }
|
|
629
728
|
#
|
|
630
|
-
|
|
729
|
+
data = self.safe_list(response, 'data')
|
|
730
|
+
timestamp = self.safe_dict(data, 0)
|
|
731
|
+
return self.safe_integer(timestamp, 'ts')
|
|
631
732
|
|
|
632
733
|
async def fetch_markets(self, params={}) -> List[Market]:
|
|
633
734
|
"""
|
|
634
|
-
|
|
735
|
+
|
|
736
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-public-data-get-instruments
|
|
737
|
+
|
|
635
738
|
retrieves data on all markets for okcoin
|
|
636
739
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
637
740
|
:returns dict[]: an array of objects representing market data
|
|
@@ -725,14 +828,6 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
725
828
|
'info': market,
|
|
726
829
|
})
|
|
727
830
|
|
|
728
|
-
def safe_network(self, networkId):
|
|
729
|
-
networksById: dict = {
|
|
730
|
-
'Bitcoin': 'BTC',
|
|
731
|
-
'Omni': 'OMNI',
|
|
732
|
-
'TRON': 'TRC20',
|
|
733
|
-
}
|
|
734
|
-
return self.safe_string(networksById, networkId, networkId)
|
|
735
|
-
|
|
736
831
|
async def fetch_currencies(self, params={}) -> Currencies:
|
|
737
832
|
"""
|
|
738
833
|
fetches all available currencies on an exchange
|
|
@@ -745,47 +840,30 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
745
840
|
return None
|
|
746
841
|
else:
|
|
747
842
|
response = await self.privateGetAssetCurrencies(params)
|
|
748
|
-
data = self.
|
|
843
|
+
data = self.safe_list(response, 'data', [])
|
|
749
844
|
result: dict = {}
|
|
750
845
|
dataByCurrencyId = self.group_by(data, 'ccy')
|
|
751
846
|
currencyIds = list(dataByCurrencyId.keys())
|
|
752
847
|
for i in range(0, len(currencyIds)):
|
|
753
848
|
currencyId = currencyIds[i]
|
|
754
|
-
|
|
755
|
-
code = currency['code']
|
|
849
|
+
code = self.safe_currency_code(currencyId)
|
|
756
850
|
chains = dataByCurrencyId[currencyId]
|
|
757
851
|
networks: dict = {}
|
|
758
|
-
currencyActive = False
|
|
759
|
-
depositEnabled = False
|
|
760
|
-
withdrawEnabled = False
|
|
761
|
-
maxPrecision = None
|
|
762
852
|
for j in range(0, len(chains)):
|
|
763
853
|
chain = chains[j]
|
|
764
|
-
canDeposit = self.safe_value(chain, 'canDep')
|
|
765
|
-
depositEnabled = canDeposit if (canDeposit) else depositEnabled
|
|
766
|
-
canWithdraw = self.safe_value(chain, 'canWd')
|
|
767
|
-
withdrawEnabled = canWithdraw if (canWithdraw) else withdrawEnabled
|
|
768
|
-
canInternal = self.safe_value(chain, 'canInternal')
|
|
769
|
-
active = True if (canDeposit and canWithdraw and canInternal) else False
|
|
770
|
-
currencyActive = active if (active) else currencyActive
|
|
771
854
|
networkId = self.safe_string(chain, 'chain')
|
|
772
855
|
if (networkId is not None) and (networkId.find('-') >= 0):
|
|
773
856
|
parts = networkId.split('-')
|
|
774
857
|
chainPart = self.safe_string(parts, 1, networkId)
|
|
775
|
-
networkCode = self.
|
|
776
|
-
precision = self.parse_precision(self.safe_string(chain, 'wdTickSz'))
|
|
777
|
-
if maxPrecision is None:
|
|
778
|
-
maxPrecision = precision
|
|
779
|
-
else:
|
|
780
|
-
maxPrecision = Precise.string_min(maxPrecision, precision)
|
|
858
|
+
networkCode = self.network_id_to_code(chainPart)
|
|
781
859
|
networks[networkCode] = {
|
|
782
860
|
'id': networkId,
|
|
783
861
|
'network': networkCode,
|
|
784
|
-
'active':
|
|
785
|
-
'deposit':
|
|
786
|
-
'withdraw':
|
|
862
|
+
'active': None,
|
|
863
|
+
'deposit': self.safe_bool(chain, 'canDep'),
|
|
864
|
+
'withdraw': self.safe_bool(chain, 'canWd'),
|
|
787
865
|
'fee': self.safe_number(chain, 'minFee'),
|
|
788
|
-
'precision': self.parse_number(
|
|
866
|
+
'precision': self.parse_number(self.parse_precision(self.safe_string(chain, 'wdTickSz'))),
|
|
789
867
|
'limits': {
|
|
790
868
|
'withdraw': {
|
|
791
869
|
'min': self.safe_number(chain, 'minWd'),
|
|
@@ -795,16 +873,16 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
795
873
|
'info': chain,
|
|
796
874
|
}
|
|
797
875
|
firstChain = self.safe_value(chains, 0)
|
|
798
|
-
result[code] = {
|
|
876
|
+
result[code] = self.safe_currency_structure({
|
|
799
877
|
'info': chains,
|
|
800
878
|
'code': code,
|
|
801
879
|
'id': currencyId,
|
|
802
880
|
'name': self.safe_string(firstChain, 'name'),
|
|
803
|
-
'active':
|
|
804
|
-
'deposit':
|
|
805
|
-
'withdraw':
|
|
881
|
+
'active': None,
|
|
882
|
+
'deposit': None,
|
|
883
|
+
'withdraw': None,
|
|
806
884
|
'fee': None,
|
|
807
|
-
'precision':
|
|
885
|
+
'precision': None,
|
|
808
886
|
'limits': {
|
|
809
887
|
'amount': {
|
|
810
888
|
'min': None,
|
|
@@ -812,12 +890,14 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
812
890
|
},
|
|
813
891
|
},
|
|
814
892
|
'networks': networks,
|
|
815
|
-
}
|
|
893
|
+
})
|
|
816
894
|
return result
|
|
817
895
|
|
|
818
896
|
async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
|
|
819
897
|
"""
|
|
820
|
-
|
|
898
|
+
|
|
899
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-order-book
|
|
900
|
+
|
|
821
901
|
fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
|
|
822
902
|
:param str symbol: unified symbol of the market to fetch the order book for
|
|
823
903
|
:param int [limit]: the maximum amount of order book entries to return
|
|
@@ -916,7 +996,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
916
996
|
|
|
917
997
|
async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
|
|
918
998
|
"""
|
|
919
|
-
|
|
999
|
+
|
|
1000
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-ticker
|
|
1001
|
+
|
|
920
1002
|
fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
|
|
921
1003
|
:param str symbol: unified symbol of the market to fetch the ticker for
|
|
922
1004
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -960,7 +1042,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
960
1042
|
|
|
961
1043
|
async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
|
|
962
1044
|
"""
|
|
963
|
-
|
|
1045
|
+
|
|
1046
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-tickers
|
|
1047
|
+
|
|
964
1048
|
fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
|
|
965
1049
|
:param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
|
|
966
1050
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1049,8 +1133,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1049
1133
|
|
|
1050
1134
|
async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
|
|
1051
1135
|
"""
|
|
1052
|
-
|
|
1053
|
-
|
|
1136
|
+
|
|
1137
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades
|
|
1138
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades-history
|
|
1139
|
+
|
|
1054
1140
|
get the list of most recent trades for a particular symbol
|
|
1055
1141
|
:param str symbol: unified symbol of the market to fetch trades for
|
|
1056
1142
|
:param int [since]: timestamp in ms of the earliest trade to fetch
|
|
@@ -1100,8 +1186,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1100
1186
|
|
|
1101
1187
|
async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
|
|
1102
1188
|
"""
|
|
1103
|
-
|
|
1104
|
-
|
|
1189
|
+
|
|
1190
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks
|
|
1191
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks-history
|
|
1192
|
+
|
|
1105
1193
|
fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
|
|
1106
1194
|
:param str symbol: unified symbol of the market to fetch OHLCV data for
|
|
1107
1195
|
:param str timeframe: the length of time each candle represents
|
|
@@ -1274,7 +1362,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1274
1362
|
async def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
|
|
1275
1363
|
"""
|
|
1276
1364
|
create a market buy order by providing the symbol and cost
|
|
1277
|
-
|
|
1365
|
+
|
|
1366
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
|
|
1367
|
+
|
|
1278
1368
|
:param str symbol: unified symbol of the market to create an order in
|
|
1279
1369
|
:param float cost: how much you want to trade in units of the quote currency
|
|
1280
1370
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1290,16 +1380,18 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1290
1380
|
|
|
1291
1381
|
async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
|
|
1292
1382
|
"""
|
|
1293
|
-
|
|
1294
|
-
|
|
1295
|
-
|
|
1296
|
-
|
|
1383
|
+
|
|
1384
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
|
|
1385
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-algo-order
|
|
1386
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-multiple-orders
|
|
1387
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
|
|
1388
|
+
|
|
1297
1389
|
create a trade order
|
|
1298
1390
|
:param str symbol: unified symbol of the market to create an order in
|
|
1299
1391
|
:param str type: 'market' or 'limit'
|
|
1300
1392
|
:param str side: 'buy' or 'sell'
|
|
1301
1393
|
:param float amount: how much of currency you want to trade in units of base currency
|
|
1302
|
-
:param float price: the price at which the order is to be
|
|
1394
|
+
:param float price: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
|
|
1303
1395
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1304
1396
|
:param bool [params.reduceOnly]: MARGIN orders only, or swap/future orders in net mode
|
|
1305
1397
|
:param bool [params.postOnly]: True to place a post only order
|
|
@@ -1454,7 +1546,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1454
1546
|
if stopLossDefined:
|
|
1455
1547
|
stopLossTriggerPrice = self.safe_value_n(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx'])
|
|
1456
1548
|
if stopLossTriggerPrice is None:
|
|
1457
|
-
raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"]
|
|
1549
|
+
raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order')
|
|
1458
1550
|
request['slTriggerPx'] = self.price_to_precision(symbol, stopLossTriggerPrice)
|
|
1459
1551
|
stopLossLimitPrice = self.safe_value_n(stopLoss, ['price', 'stopLossPrice', 'slOrdPx'])
|
|
1460
1552
|
stopLossOrderType = self.safe_string(stopLoss, 'type')
|
|
@@ -1465,7 +1557,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1465
1557
|
raise InvalidOrder(self.id + ' createOrder() params["stopLoss"]["type"] must be either "limit" or "market"')
|
|
1466
1558
|
elif stopLossLimitOrderType:
|
|
1467
1559
|
if stopLossLimitPrice is None:
|
|
1468
|
-
raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"]
|
|
1560
|
+
raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order')
|
|
1469
1561
|
else:
|
|
1470
1562
|
request['slOrdPx'] = self.price_to_precision(symbol, stopLossLimitPrice)
|
|
1471
1563
|
elif stopLossOrderType == 'market':
|
|
@@ -1538,25 +1630,27 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1538
1630
|
|
|
1539
1631
|
async def cancel_order(self, id: str, symbol: Str = None, params={}):
|
|
1540
1632
|
"""
|
|
1541
|
-
|
|
1542
|
-
|
|
1543
|
-
|
|
1633
|
+
|
|
1634
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-order
|
|
1635
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
|
|
1636
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
|
|
1637
|
+
|
|
1544
1638
|
cancels an open order
|
|
1545
1639
|
:param str id: order id
|
|
1546
1640
|
:param str symbol: unified symbol of the market the order was made in
|
|
1547
1641
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1548
|
-
:param bool [params.
|
|
1642
|
+
:param bool [params.trigger]: True if cancel trigger or conditional orders
|
|
1549
1643
|
:param bool [params.advanced]: True if canceling advanced orders only
|
|
1550
1644
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1551
1645
|
"""
|
|
1552
1646
|
if symbol is None:
|
|
1553
1647
|
raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
|
|
1554
1648
|
await self.load_markets()
|
|
1555
|
-
|
|
1649
|
+
trigger = self.safe_value_2(params, 'stop', 'trigger')
|
|
1556
1650
|
advanced = self.safe_value(params, 'advanced')
|
|
1557
|
-
if
|
|
1651
|
+
if trigger or advanced:
|
|
1558
1652
|
orderInner = await self.cancel_orders([id], symbol, params)
|
|
1559
|
-
return self.
|
|
1653
|
+
return self.safe_dict(orderInner, 0)
|
|
1560
1654
|
market = self.market(symbol)
|
|
1561
1655
|
request: dict = {
|
|
1562
1656
|
'instId': market['id'],
|
|
@@ -1577,7 +1671,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1577
1671
|
|
|
1578
1672
|
def parse_ids(self, ids):
|
|
1579
1673
|
"""
|
|
1580
|
-
|
|
1674
|
+
@ignore
|
|
1581
1675
|
:param string[]|str ids: order ids
|
|
1582
1676
|
:returns str[]: list of order ids
|
|
1583
1677
|
"""
|
|
@@ -1589,9 +1683,11 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1589
1683
|
async def cancel_orders(self, ids, symbol: Str = None, params={}):
|
|
1590
1684
|
"""
|
|
1591
1685
|
cancel multiple orders
|
|
1592
|
-
|
|
1593
|
-
|
|
1594
|
-
|
|
1686
|
+
|
|
1687
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-multiple-orders
|
|
1688
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
|
|
1689
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
|
|
1690
|
+
|
|
1595
1691
|
:param str[] ids: order ids
|
|
1596
1692
|
:param str symbol: unified market symbol
|
|
1597
1693
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
@@ -1600,7 +1696,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1600
1696
|
if symbol is None:
|
|
1601
1697
|
raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
|
|
1602
1698
|
await self.load_markets()
|
|
1603
|
-
|
|
1699
|
+
trigger = self.safe_value_2(params, 'stop', 'trigger')
|
|
1604
1700
|
advanced = self.safe_value(params, 'advanced')
|
|
1605
1701
|
params = self.omit(params, ['stop', 'trigger', 'advanced'])
|
|
1606
1702
|
market = self.market(symbol)
|
|
@@ -1616,7 +1712,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1616
1712
|
'instId': market['id'],
|
|
1617
1713
|
})
|
|
1618
1714
|
for i in range(0, len(ids)):
|
|
1619
|
-
if
|
|
1715
|
+
if trigger or advanced:
|
|
1620
1716
|
request.append({
|
|
1621
1717
|
'algoId': ids[i],
|
|
1622
1718
|
'instId': market['id'],
|
|
@@ -1633,7 +1729,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1633
1729
|
'clOrdId': clientOrderIds[i],
|
|
1634
1730
|
})
|
|
1635
1731
|
response = None
|
|
1636
|
-
if
|
|
1732
|
+
if trigger:
|
|
1637
1733
|
response = await self.privatePostTradeCancelAlgos(request)
|
|
1638
1734
|
elif advanced:
|
|
1639
1735
|
response = await self.privatePostTradeCancelAdvanceAlgos(request)
|
|
@@ -1825,7 +1921,6 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1825
1921
|
clientOrderId = None # fix empty clientOrderId string
|
|
1826
1922
|
stopLossPrice = self.safe_number_2(order, 'slTriggerPx', 'slOrdPx')
|
|
1827
1923
|
takeProfitPrice = self.safe_number_2(order, 'tpTriggerPx', 'tpOrdPx')
|
|
1828
|
-
stopPrice = self.safe_number_n(order, ['triggerPx', 'moveTriggerPx'])
|
|
1829
1924
|
reduceOnlyRaw = self.safe_string(order, 'reduceOnly')
|
|
1830
1925
|
reduceOnly = False
|
|
1831
1926
|
if reduceOnly is not None:
|
|
@@ -1846,8 +1941,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1846
1941
|
'price': price,
|
|
1847
1942
|
'stopLossPrice': stopLossPrice,
|
|
1848
1943
|
'takeProfitPrice': takeProfitPrice,
|
|
1849
|
-
'
|
|
1850
|
-
'triggerPrice': stopPrice,
|
|
1944
|
+
'triggerPrice': self.safe_number_n(order, ['triggerPx', 'moveTriggerPx']),
|
|
1851
1945
|
'average': average,
|
|
1852
1946
|
'cost': cost,
|
|
1853
1947
|
'amount': amount,
|
|
@@ -1861,9 +1955,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1861
1955
|
|
|
1862
1956
|
async def fetch_order(self, id: str, symbol: Str = None, params={}):
|
|
1863
1957
|
"""
|
|
1864
|
-
|
|
1865
|
-
|
|
1958
|
+
|
|
1959
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-details
|
|
1960
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
|
|
1961
|
+
|
|
1866
1962
|
fetches information on an order made by the user
|
|
1963
|
+
:param str id: order id
|
|
1867
1964
|
:param str symbol: unified symbol of the market the order was made in
|
|
1868
1965
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1869
1966
|
:returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
|
@@ -1878,8 +1975,8 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1878
1975
|
# 'ordId': id,
|
|
1879
1976
|
}
|
|
1880
1977
|
clientOrderId = self.safe_string_2(params, 'clOrdId', 'clientOrderId')
|
|
1881
|
-
|
|
1882
|
-
if
|
|
1978
|
+
trigger = self.safe_value_2(params, 'stop', 'trigger')
|
|
1979
|
+
if trigger:
|
|
1883
1980
|
if clientOrderId is not None:
|
|
1884
1981
|
request['algoClOrdId'] = clientOrderId
|
|
1885
1982
|
else:
|
|
@@ -1891,7 +1988,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1891
1988
|
request['ordId'] = id
|
|
1892
1989
|
query = self.omit(params, ['clientOrderId', 'stop', 'trigger'])
|
|
1893
1990
|
response = None
|
|
1894
|
-
if
|
|
1991
|
+
if trigger:
|
|
1895
1992
|
response = await self.privateGetTradeOrderAlgo(self.extend(request, query))
|
|
1896
1993
|
else:
|
|
1897
1994
|
response = await self.privateGetTradeOrder(self.extend(request, query))
|
|
@@ -1901,14 +1998,16 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1901
1998
|
|
|
1902
1999
|
async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
1903
2000
|
"""
|
|
1904
|
-
|
|
1905
|
-
|
|
2001
|
+
|
|
2002
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-list
|
|
2003
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
|
|
2004
|
+
|
|
1906
2005
|
fetch all unfilled currently open orders
|
|
1907
2006
|
:param str symbol: unified market symbol
|
|
1908
2007
|
:param int [since]: the earliest time in ms to fetch open orders for
|
|
1909
2008
|
:param int [limit]: the maximum number of open orders structures to retrieve
|
|
1910
2009
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1911
|
-
:param bool [params.
|
|
2010
|
+
:param bool [params.trigger]: True if fetching trigger or conditional orders
|
|
1912
2011
|
:param str [params.ordType]: "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
|
|
1913
2012
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1914
2013
|
"""
|
|
@@ -1928,12 +2027,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1928
2027
|
if limit is not None:
|
|
1929
2028
|
request['limit'] = limit # default 100, max 100
|
|
1930
2029
|
ordType = self.safe_string(params, 'ordType')
|
|
1931
|
-
|
|
1932
|
-
if
|
|
2030
|
+
trigger = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
|
|
2031
|
+
if trigger and (ordType is None):
|
|
1933
2032
|
request['ordType'] = 'trigger' # default to trigger
|
|
1934
2033
|
params = self.omit(params, ['stop'])
|
|
1935
2034
|
response = None
|
|
1936
|
-
if
|
|
2035
|
+
if trigger:
|
|
1937
2036
|
response = await self.privateGetTradeOrdersAlgoPending(self.extend(request, params))
|
|
1938
2037
|
else:
|
|
1939
2038
|
response = await self.privateGetTradeOrdersPending(self.extend(request, params))
|
|
@@ -1942,15 +2041,17 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1942
2041
|
|
|
1943
2042
|
async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
|
|
1944
2043
|
"""
|
|
1945
|
-
|
|
1946
|
-
|
|
1947
|
-
|
|
2044
|
+
|
|
2045
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-history
|
|
2046
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-3-months
|
|
2047
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-7-days
|
|
2048
|
+
|
|
1948
2049
|
fetches information on multiple closed orders made by the user
|
|
1949
2050
|
:param str symbol: unified market symbol of the market orders were made in
|
|
1950
2051
|
:param int [since]: the earliest time in ms to fetch orders for
|
|
1951
2052
|
:param int [limit]: the maximum number of order structures to retrieve
|
|
1952
2053
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
1953
|
-
:param bool [params.
|
|
2054
|
+
:param bool [params.trigger]: True if fetching trigger or conditional orders
|
|
1954
2055
|
:param str [params.ordType]: "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
|
|
1955
2056
|
:returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
|
|
1956
2057
|
"""
|
|
@@ -1963,12 +2064,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
1963
2064
|
market = self.market(symbol)
|
|
1964
2065
|
request['instId'] = market['id']
|
|
1965
2066
|
ordType = self.safe_string(params, 'ordType')
|
|
1966
|
-
|
|
1967
|
-
if
|
|
2067
|
+
trigger = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
|
|
2068
|
+
if trigger and (ordType is None):
|
|
1968
2069
|
request['ordType'] = 'trigger' # default to trigger
|
|
1969
2070
|
params = self.omit(params, ['stop'])
|
|
1970
2071
|
response = None
|
|
1971
|
-
if
|
|
2072
|
+
if trigger:
|
|
1972
2073
|
response = await self.privateGetTradeOrdersAlgoHistory(self.extend(request, params))
|
|
1973
2074
|
else:
|
|
1974
2075
|
method = None
|
|
@@ -2021,7 +2122,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2021
2122
|
data = self.safe_list(response, 'data', [])
|
|
2022
2123
|
return self.parse_orders(data, market, since, limit)
|
|
2023
2124
|
|
|
2024
|
-
def parse_deposit_address(self, depositAddress, currency: Currency = None):
|
|
2125
|
+
def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
|
|
2025
2126
|
#
|
|
2026
2127
|
# {
|
|
2027
2128
|
# "addr": "okbtothemoon",
|
|
@@ -2104,17 +2205,19 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2104
2205
|
#
|
|
2105
2206
|
self.check_address(address)
|
|
2106
2207
|
return {
|
|
2208
|
+
'info': depositAddress,
|
|
2107
2209
|
'currency': code,
|
|
2210
|
+
'network': network,
|
|
2108
2211
|
'address': address,
|
|
2109
2212
|
'tag': tag,
|
|
2110
|
-
'network': network,
|
|
2111
|
-
'info': depositAddress,
|
|
2112
2213
|
}
|
|
2113
2214
|
|
|
2114
|
-
async def fetch_deposit_address(self, code: str, params={}):
|
|
2215
|
+
async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
|
|
2115
2216
|
"""
|
|
2116
2217
|
fetch the deposit address for a currency associated with self account
|
|
2117
|
-
|
|
2218
|
+
|
|
2219
|
+
https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
|
|
2220
|
+
|
|
2118
2221
|
:param str code: unified currency code
|
|
2119
2222
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
2120
2223
|
:returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
|
|
@@ -2130,10 +2233,12 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2130
2233
|
raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find ' + networkCode + ' deposit address for ' + code)
|
|
2131
2234
|
return result
|
|
2132
2235
|
|
|
2133
|
-
async def fetch_deposit_addresses_by_network(self, code: str, params={}):
|
|
2236
|
+
async def fetch_deposit_addresses_by_network(self, code: str, params={}) -> List[DepositAddress]:
|
|
2134
2237
|
"""
|
|
2135
2238
|
fetch a dictionary of addresses for a currency, indexed by network
|
|
2136
|
-
|
|
2239
|
+
|
|
2240
|
+
https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
|
|
2241
|
+
|
|
2137
2242
|
:param str code: unified currency code of the currency for the deposit address
|
|
2138
2243
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
2139
2244
|
:returns dict: a dictionary of `address structures <https://docs.ccxt.com/#/?id=address-structure>` indexed by the network
|
|
@@ -2172,7 +2277,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2172
2277
|
|
|
2173
2278
|
async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
|
|
2174
2279
|
"""
|
|
2175
|
-
|
|
2280
|
+
|
|
2281
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-funds-transfer
|
|
2282
|
+
|
|
2176
2283
|
transfer currency internally between wallets on the same account
|
|
2177
2284
|
:param str code: unified currency code
|
|
2178
2285
|
:param float amount: amount to transfer
|
|
@@ -2309,9 +2416,11 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2309
2416
|
}
|
|
2310
2417
|
return self.safe_string(statuses, status, status)
|
|
2311
2418
|
|
|
2312
|
-
async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
|
|
2419
|
+
async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
|
|
2313
2420
|
"""
|
|
2314
|
-
|
|
2421
|
+
|
|
2422
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-withdrawal
|
|
2423
|
+
|
|
2315
2424
|
make a withdrawal
|
|
2316
2425
|
:param str code: unified currency code
|
|
2317
2426
|
:param float amount: the amount to withdraw
|
|
@@ -2365,7 +2474,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2365
2474
|
|
|
2366
2475
|
async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2367
2476
|
"""
|
|
2368
|
-
|
|
2477
|
+
|
|
2478
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-deposit-history
|
|
2479
|
+
|
|
2369
2480
|
fetch all deposits made to an account
|
|
2370
2481
|
:param str code: unified currency code
|
|
2371
2482
|
:param int [since]: the earliest time in ms to fetch deposits for
|
|
@@ -2434,7 +2545,9 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2434
2545
|
|
|
2435
2546
|
async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
|
|
2436
2547
|
"""
|
|
2437
|
-
|
|
2548
|
+
|
|
2549
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-withdrawal-history
|
|
2550
|
+
|
|
2438
2551
|
fetch all withdrawals made from an account
|
|
2439
2552
|
:param str code: unified currency code
|
|
2440
2553
|
:param int [since]: the earliest time in ms to fetch withdrawals for
|
|
@@ -2625,8 +2738,10 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2625
2738
|
|
|
2626
2739
|
async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
2627
2740
|
"""
|
|
2628
|
-
|
|
2629
|
-
|
|
2741
|
+
|
|
2742
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-days
|
|
2743
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-months
|
|
2744
|
+
|
|
2630
2745
|
fetch all trades made by the user
|
|
2631
2746
|
:param str symbol: unified market symbol
|
|
2632
2747
|
:param int [since]: the earliest time in ms to fetch trades for
|
|
@@ -2673,17 +2788,19 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2673
2788
|
}
|
|
2674
2789
|
return await self.fetch_my_trades(symbol, since, limit, self.extend(request, params))
|
|
2675
2790
|
|
|
2676
|
-
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
|
|
2791
|
+
async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
|
|
2677
2792
|
"""
|
|
2678
|
-
|
|
2679
|
-
|
|
2680
|
-
|
|
2681
|
-
|
|
2682
|
-
|
|
2793
|
+
fetch the history of changes, actions done by the user or operations that altered the balance of the user
|
|
2794
|
+
|
|
2795
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-funding-asset-bills-details
|
|
2796
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days
|
|
2797
|
+
https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months
|
|
2798
|
+
|
|
2799
|
+
:param str [code]: unified currency code, default is None
|
|
2683
2800
|
:param int [since]: timestamp in ms of the earliest ledger entry, default is None
|
|
2684
|
-
:param int [limit]: max number of ledger
|
|
2801
|
+
:param int [limit]: max number of ledger entries to return, default is None
|
|
2685
2802
|
:param dict [params]: extra parameters specific to the exchange API endpoint
|
|
2686
|
-
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger
|
|
2803
|
+
:returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
|
|
2687
2804
|
"""
|
|
2688
2805
|
await self.load_markets()
|
|
2689
2806
|
method = None
|
|
@@ -2781,7 +2898,7 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2781
2898
|
}
|
|
2782
2899
|
return self.safe_string(types, type, type)
|
|
2783
2900
|
|
|
2784
|
-
def parse_ledger_entry(self, item: dict, currency: Currency = None):
|
|
2901
|
+
def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
|
|
2785
2902
|
#
|
|
2786
2903
|
# privateGetAccountBills, privateGetAccountBillsArchive
|
|
2787
2904
|
#
|
|
@@ -2818,45 +2935,36 @@ class okcoin(Exchange, ImplicitAPI):
|
|
|
2818
2935
|
# "ts": "1597026383085"
|
|
2819
2936
|
# }
|
|
2820
2937
|
#
|
|
2821
|
-
|
|
2822
|
-
|
|
2823
|
-
|
|
2824
|
-
referenceAccount = None
|
|
2825
|
-
type = self.parse_ledger_entry_type(self.safe_string(item, 'type'))
|
|
2826
|
-
code = self.safe_currency_code(self.safe_string(item, 'ccy'), currency)
|
|
2827
|
-
amountString = self.safe_string(item, 'balChg')
|
|
2828
|
-
amount = self.parse_number(amountString)
|
|
2938
|
+
currencyId = self.safe_string(item, 'ccy')
|
|
2939
|
+
code = self.safe_currency_code(currencyId, currency)
|
|
2940
|
+
currency = self.safe_currency(currencyId, currency)
|
|
2829
2941
|
timestamp = self.safe_integer(item, 'ts')
|
|
2830
2942
|
feeCostString = self.safe_string(item, 'fee')
|
|
2831
2943
|
fee = None
|
|
2832
2944
|
if feeCostString is not None:
|
|
2833
2945
|
fee = {
|
|
2834
|
-
'cost': self.
|
|
2946
|
+
'cost': self.parse_to_numeric(Precise.string_neg(feeCostString)),
|
|
2835
2947
|
'currency': code,
|
|
2836
2948
|
}
|
|
2837
|
-
before = None
|
|
2838
|
-
afterString = self.safe_string(item, 'bal')
|
|
2839
|
-
after = self.parse_number(afterString)
|
|
2840
|
-
status = 'ok'
|
|
2841
2949
|
marketId = self.safe_string(item, 'instId')
|
|
2842
2950
|
symbol = self.safe_symbol(marketId, None, '-')
|
|
2843
|
-
return {
|
|
2844
|
-
'id': id,
|
|
2951
|
+
return self.safe_ledger_entry({
|
|
2845
2952
|
'info': item,
|
|
2953
|
+
'id': self.safe_string(item, 'billId'),
|
|
2846
2954
|
'timestamp': timestamp,
|
|
2847
2955
|
'datetime': self.iso8601(timestamp),
|
|
2848
|
-
'account':
|
|
2849
|
-
'referenceId':
|
|
2850
|
-
'referenceAccount':
|
|
2851
|
-
'type': type,
|
|
2956
|
+
'account': None,
|
|
2957
|
+
'referenceId': self.safe_string(item, 'ordId'),
|
|
2958
|
+
'referenceAccount': None,
|
|
2959
|
+
'type': self.parse_ledger_entry_type(self.safe_string(item, 'type')),
|
|
2852
2960
|
'currency': code,
|
|
2853
2961
|
'symbol': symbol,
|
|
2854
|
-
'amount':
|
|
2855
|
-
'before':
|
|
2856
|
-
'after':
|
|
2857
|
-
'status':
|
|
2962
|
+
'amount': self.safe_number(item, 'balChg'),
|
|
2963
|
+
'before': None, # balance before
|
|
2964
|
+
'after': self.safe_number(item, 'bal'), # balance after
|
|
2965
|
+
'status': 'ok',
|
|
2858
2966
|
'fee': fee,
|
|
2859
|
-
}
|
|
2967
|
+
}, currency)
|
|
2860
2968
|
|
|
2861
2969
|
def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
|
|
2862
2970
|
isArray = isinstance(params, list)
|