ccxt 4.1.69__tar.gz → 4.1.70__tar.gz

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.
Files changed (453) hide show
  1. {ccxt-4.1.69/ccxt.egg-info → ccxt-4.1.70}/PKG-INFO +4 -4
  2. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/__init__.py +1 -1
  3. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/__init__.py +1 -1
  4. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/exchange.py +1 -1
  5. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinex.py +348 -59
  6. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/base/exchange.py +1 -1
  7. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinex.py +348 -59
  8. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/__init__.py +1 -1
  9. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/binance.py +2 -2
  10. {ccxt-4.1.69 → ccxt-4.1.70/ccxt.egg-info}/PKG-INFO +4 -4
  11. {ccxt-4.1.69 → ccxt-4.1.70}/package.json +1 -1
  12. {ccxt-4.1.69 → ccxt-4.1.70}/LICENSE.txt +0 -0
  13. {ccxt-4.1.69 → ccxt-4.1.70}/MANIFEST.in +0 -0
  14. {ccxt-4.1.69 → ccxt-4.1.70}/README.rst +0 -0
  15. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/__init__.py +0 -0
  16. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/ace.py +0 -0
  17. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/alpaca.py +0 -0
  18. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/ascendex.py +0 -0
  19. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bequant.py +0 -0
  20. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bigone.py +0 -0
  21. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/binance.py +0 -0
  22. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/binancecoinm.py +0 -0
  23. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/binanceus.py +0 -0
  24. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/binanceusdm.py +0 -0
  25. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bingx.py +0 -0
  26. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bit2c.py +0 -0
  27. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitbank.py +0 -0
  28. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitbay.py +0 -0
  29. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitbns.py +0 -0
  30. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitcoincom.py +0 -0
  31. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitfinex.py +0 -0
  32. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitfinex2.py +0 -0
  33. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitflyer.py +0 -0
  34. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitforex.py +0 -0
  35. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitget.py +0 -0
  36. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bithumb.py +0 -0
  37. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitmart.py +0 -0
  38. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitmex.py +0 -0
  39. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitopro.py +0 -0
  40. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitpanda.py +0 -0
  41. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitrue.py +0 -0
  42. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitso.py +0 -0
  43. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitstamp.py +0 -0
  44. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bittrex.py +0 -0
  45. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bitvavo.py +0 -0
  46. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bl3p.py +0 -0
  47. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/blockchaincom.py +0 -0
  48. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/btcalpha.py +0 -0
  49. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/btcbox.py +0 -0
  50. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/btcmarkets.py +0 -0
  51. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/btcturk.py +0 -0
  52. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/bybit.py +0 -0
  53. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/cex.py +0 -0
  54. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinbase.py +0 -0
  55. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinbaseprime.py +0 -0
  56. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinbasepro.py +0 -0
  57. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coincheck.py +0 -0
  58. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinex.py +0 -0
  59. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinlist.py +0 -0
  60. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinmate.py +0 -0
  61. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinone.py +0 -0
  62. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinsph.py +0 -0
  63. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/coinspot.py +0 -0
  64. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/cryptocom.py +0 -0
  65. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/currencycom.py +0 -0
  66. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/delta.py +0 -0
  67. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/deribit.py +0 -0
  68. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/digifinex.py +0 -0
  69. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/exmo.py +0 -0
  70. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/fmfwio.py +0 -0
  71. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/gate.py +0 -0
  72. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/gateio.py +0 -0
  73. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/gemini.py +0 -0
  74. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/hitbtc.py +0 -0
  75. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/hitbtc3.py +0 -0
  76. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/hollaex.py +0 -0
  77. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/htx.py +0 -0
  78. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/huobi.py +0 -0
  79. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/huobijp.py +0 -0
  80. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/idex.py +0 -0
  81. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/independentreserve.py +0 -0
  82. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/indodax.py +0 -0
  83. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/kraken.py +0 -0
  84. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/krakenfutures.py +0 -0
  85. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/kucoin.py +0 -0
  86. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/kucoinfutures.py +0 -0
  87. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/kuna.py +0 -0
  88. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/latoken.py +0 -0
  89. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/lbank.py +0 -0
  90. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/luno.py +0 -0
  91. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/lykke.py +0 -0
  92. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/mercado.py +0 -0
  93. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/mexc.py +0 -0
  94. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/ndax.py +0 -0
  95. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/novadax.py +0 -0
  96. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/oceanex.py +0 -0
  97. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/okcoin.py +0 -0
  98. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/okx.py +0 -0
  99. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/p2b.py +0 -0
  100. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/paymium.py +0 -0
  101. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/phemex.py +0 -0
  102. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/poloniex.py +0 -0
  103. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/poloniexfutures.py +0 -0
  104. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/probit.py +0 -0
  105. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/tidex.py +0 -0
  106. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/timex.py +0 -0
  107. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/tokocrypto.py +0 -0
  108. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/upbit.py +0 -0
  109. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/wavesexchange.py +0 -0
  110. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/wazirx.py +0 -0
  111. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/whitebit.py +0 -0
  112. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/woo.py +0 -0
  113. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/yobit.py +0 -0
  114. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/zaif.py +0 -0
  115. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/abstract/zonda.py +0 -0
  116. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/ace.py +0 -0
  117. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/alpaca.py +0 -0
  118. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/ascendex.py +0 -0
  119. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/ace.py +0 -0
  120. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/alpaca.py +0 -0
  121. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/ascendex.py +0 -0
  122. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/__init__.py +0 -0
  123. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/throttler.py +0 -0
  124. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/__init__.py +0 -0
  125. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  126. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/cache.py +0 -0
  127. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/client.py +0 -0
  128. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/fast_client.py +0 -0
  129. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/functions.py +0 -0
  130. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/future.py +0 -0
  131. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/order_book.py +0 -0
  132. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  133. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bequant.py +0 -0
  134. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bigone.py +0 -0
  135. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/binance.py +0 -0
  136. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/binancecoinm.py +0 -0
  137. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/binanceus.py +0 -0
  138. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/binanceusdm.py +0 -0
  139. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bingx.py +0 -0
  140. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bit2c.py +0 -0
  141. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitbank.py +0 -0
  142. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitbay.py +0 -0
  143. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitbns.py +0 -0
  144. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitcoincom.py +0 -0
  145. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitfinex.py +0 -0
  146. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitfinex2.py +0 -0
  147. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitflyer.py +0 -0
  148. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitforex.py +0 -0
  149. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitget.py +0 -0
  150. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bithumb.py +0 -0
  151. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitmart.py +0 -0
  152. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitmex.py +0 -0
  153. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitopro.py +0 -0
  154. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitpanda.py +0 -0
  155. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitrue.py +0 -0
  156. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitso.py +0 -0
  157. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitstamp.py +0 -0
  158. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bittrex.py +0 -0
  159. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bitvavo.py +0 -0
  160. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bl3p.py +0 -0
  161. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/blockchaincom.py +0 -0
  162. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/btcalpha.py +0 -0
  163. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/btcbox.py +0 -0
  164. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/btcmarkets.py +0 -0
  165. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/btcturk.py +0 -0
  166. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/bybit.py +0 -0
  167. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/cex.py +0 -0
  168. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinbase.py +0 -0
  169. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinbaseprime.py +0 -0
  170. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinbasepro.py +0 -0
  171. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coincheck.py +0 -0
  172. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinlist.py +0 -0
  173. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinmate.py +0 -0
  174. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinone.py +0 -0
  175. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinsph.py +0 -0
  176. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/coinspot.py +0 -0
  177. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/cryptocom.py +0 -0
  178. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/currencycom.py +0 -0
  179. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/delta.py +0 -0
  180. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/deribit.py +0 -0
  181. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/digifinex.py +0 -0
  182. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/exmo.py +0 -0
  183. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/flowbtc.py +0 -0
  184. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/fmfwio.py +0 -0
  185. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/gate.py +0 -0
  186. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/gateio.py +0 -0
  187. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/gemini.py +0 -0
  188. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/hitbtc.py +0 -0
  189. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/hitbtc3.py +0 -0
  190. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/hollaex.py +0 -0
  191. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/htx.py +0 -0
  192. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/huobi.py +0 -0
  193. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/huobijp.py +0 -0
  194. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/huobipro.py +0 -0
  195. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/idex.py +0 -0
  196. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/independentreserve.py +0 -0
  197. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/indodax.py +0 -0
  198. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/kraken.py +0 -0
  199. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/krakenfutures.py +0 -0
  200. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/kucoin.py +0 -0
  201. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/kucoinfutures.py +0 -0
  202. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/kuna.py +0 -0
  203. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/latoken.py +0 -0
  204. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/lbank.py +0 -0
  205. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/luno.py +0 -0
  206. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/lykke.py +0 -0
  207. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/mercado.py +0 -0
  208. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/mexc.py +0 -0
  209. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/mexc3.py +0 -0
  210. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/ndax.py +0 -0
  211. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/novadax.py +0 -0
  212. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/oceanex.py +0 -0
  213. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/okcoin.py +0 -0
  214. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/okex.py +0 -0
  215. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/okex5.py +0 -0
  216. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/okx.py +0 -0
  217. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/p2b.py +0 -0
  218. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/paymium.py +0 -0
  219. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/phemex.py +0 -0
  220. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/poloniex.py +0 -0
  221. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/poloniexfutures.py +0 -0
  222. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/probit.py +0 -0
  223. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/tidex.py +0 -0
  224. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/timex.py +0 -0
  225. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/tokocrypto.py +0 -0
  226. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/upbit.py +0 -0
  227. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/wavesexchange.py +0 -0
  228. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/wazirx.py +0 -0
  229. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/whitebit.py +0 -0
  230. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/woo.py +0 -0
  231. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/yobit.py +0 -0
  232. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/zaif.py +0 -0
  233. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/async_support/zonda.py +0 -0
  234. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/base/__init__.py +0 -0
  235. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/base/decimal_to_precision.py +0 -0
  236. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/base/errors.py +0 -0
  237. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/base/precise.py +0 -0
  238. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/base/types.py +0 -0
  239. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bequant.py +0 -0
  240. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bigone.py +0 -0
  241. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/binance.py +0 -0
  242. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/binancecoinm.py +0 -0
  243. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/binanceus.py +0 -0
  244. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/binanceusdm.py +0 -0
  245. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bingx.py +0 -0
  246. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bit2c.py +0 -0
  247. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitbank.py +0 -0
  248. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitbay.py +0 -0
  249. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitbns.py +0 -0
  250. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitcoincom.py +0 -0
  251. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitfinex.py +0 -0
  252. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitfinex2.py +0 -0
  253. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitflyer.py +0 -0
  254. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitforex.py +0 -0
  255. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitget.py +0 -0
  256. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bithumb.py +0 -0
  257. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitmart.py +0 -0
  258. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitmex.py +0 -0
  259. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitopro.py +0 -0
  260. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitpanda.py +0 -0
  261. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitrue.py +0 -0
  262. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitso.py +0 -0
  263. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitstamp.py +0 -0
  264. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bittrex.py +0 -0
  265. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bitvavo.py +0 -0
  266. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bl3p.py +0 -0
  267. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/blockchaincom.py +0 -0
  268. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/btcalpha.py +0 -0
  269. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/btcbox.py +0 -0
  270. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/btcmarkets.py +0 -0
  271. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/btcturk.py +0 -0
  272. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/bybit.py +0 -0
  273. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/cex.py +0 -0
  274. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinbase.py +0 -0
  275. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinbaseprime.py +0 -0
  276. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinbasepro.py +0 -0
  277. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coincheck.py +0 -0
  278. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinlist.py +0 -0
  279. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinmate.py +0 -0
  280. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinone.py +0 -0
  281. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinsph.py +0 -0
  282. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/coinspot.py +0 -0
  283. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/cryptocom.py +0 -0
  284. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/currencycom.py +0 -0
  285. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/delta.py +0 -0
  286. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/deribit.py +0 -0
  287. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/digifinex.py +0 -0
  288. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/exmo.py +0 -0
  289. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/flowbtc.py +0 -0
  290. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/fmfwio.py +0 -0
  291. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/gate.py +0 -0
  292. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/gateio.py +0 -0
  293. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/gemini.py +0 -0
  294. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/hitbtc.py +0 -0
  295. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/hitbtc3.py +0 -0
  296. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/hollaex.py +0 -0
  297. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/htx.py +0 -0
  298. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/huobi.py +0 -0
  299. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/huobijp.py +0 -0
  300. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/huobipro.py +0 -0
  301. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/idex.py +0 -0
  302. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/independentreserve.py +0 -0
  303. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/indodax.py +0 -0
  304. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/kraken.py +0 -0
  305. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/krakenfutures.py +0 -0
  306. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/kucoin.py +0 -0
  307. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/kucoinfutures.py +0 -0
  308. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/kuna.py +0 -0
  309. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/latoken.py +0 -0
  310. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/lbank.py +0 -0
  311. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/luno.py +0 -0
  312. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/lykke.py +0 -0
  313. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/mercado.py +0 -0
  314. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/mexc.py +0 -0
  315. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/mexc3.py +0 -0
  316. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/ndax.py +0 -0
  317. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/novadax.py +0 -0
  318. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/oceanex.py +0 -0
  319. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/okcoin.py +0 -0
  320. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/okex.py +0 -0
  321. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/okex5.py +0 -0
  322. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/okx.py +0 -0
  323. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/p2b.py +0 -0
  324. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/paymium.py +0 -0
  325. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/phemex.py +0 -0
  326. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/poloniex.py +0 -0
  327. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/poloniexfutures.py +0 -0
  328. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/alpaca.py +0 -0
  329. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/ascendex.py +0 -0
  330. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bequant.py +0 -0
  331. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/binancecoinm.py +0 -0
  332. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/binanceus.py +0 -0
  333. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/binanceusdm.py +0 -0
  334. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bingx.py +0 -0
  335. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitcoincom.py +0 -0
  336. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitfinex.py +0 -0
  337. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitfinex2.py +0 -0
  338. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitget.py +0 -0
  339. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitmart.py +0 -0
  340. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitmex.py +0 -0
  341. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitopro.py +0 -0
  342. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitpanda.py +0 -0
  343. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitrue.py +0 -0
  344. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitstamp.py +0 -0
  345. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bittrex.py +0 -0
  346. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bitvavo.py +0 -0
  347. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/blockchaincom.py +0 -0
  348. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/bybit.py +0 -0
  349. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/cex.py +0 -0
  350. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/coinbase.py +0 -0
  351. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/coinbaseprime.py +0 -0
  352. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/coinbasepro.py +0 -0
  353. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/coinex.py +0 -0
  354. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/cryptocom.py +0 -0
  355. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/currencycom.py +0 -0
  356. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/deribit.py +0 -0
  357. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/exmo.py +0 -0
  358. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/gate.py +0 -0
  359. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/gateio.py +0 -0
  360. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/gemini.py +0 -0
  361. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/hitbtc.py +0 -0
  362. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/hollaex.py +0 -0
  363. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/htx.py +0 -0
  364. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/huobi.py +0 -0
  365. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/huobijp.py +0 -0
  366. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/huobipro.py +0 -0
  367. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/idex.py +0 -0
  368. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/independentreserve.py +0 -0
  369. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/kraken.py +0 -0
  370. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/krakenfutures.py +0 -0
  371. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/kucoin.py +0 -0
  372. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/kucoinfutures.py +0 -0
  373. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/luno.py +0 -0
  374. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/mexc.py +0 -0
  375. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/mexc3.py +0 -0
  376. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/ndax.py +0 -0
  377. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/okcoin.py +0 -0
  378. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/okex.py +0 -0
  379. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/okx.py +0 -0
  380. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/phemex.py +0 -0
  381. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/poloniex.py +0 -0
  382. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/poloniexfutures.py +0 -0
  383. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/probit.py +0 -0
  384. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/upbit.py +0 -0
  385. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/wazirx.py +0 -0
  386. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/whitebit.py +0 -0
  387. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/pro/woo.py +0 -0
  388. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/probit.py +0 -0
  389. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/__init__.py +0 -0
  390. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  391. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  392. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  393. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  394. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  395. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  396. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  397. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  398. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  399. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  400. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  401. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  402. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/__init__.py +0 -0
  403. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/__init__.py +0 -0
  404. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_account.py +0 -0
  405. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_balance.py +0 -0
  406. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_borrow_interest.py +0 -0
  407. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_borrow_rate.py +0 -0
  408. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_calculate_fee.py +0 -0
  409. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_crypto.py +0 -0
  410. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_currency.py +0 -0
  411. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_datetime.py +0 -0
  412. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  413. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_deep_extend.py +0 -0
  414. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  415. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  416. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_funding_rate_history.py +0 -0
  417. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_ledger_entry.py +0 -0
  418. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_ledger_item.py +0 -0
  419. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_leverage_tier.py +0 -0
  420. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_margin_modification.py +0 -0
  421. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_market.py +0 -0
  422. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_number.py +0 -0
  423. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_ohlcv.py +0 -0
  424. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_open_interest.py +0 -0
  425. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_order.py +0 -0
  426. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_order_book.py +0 -0
  427. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_position.py +0 -0
  428. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_shared_methods.py +0 -0
  429. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_status.py +0 -0
  430. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_throttle.py +0 -0
  431. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_ticker.py +0 -0
  432. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_trade.py +0 -0
  433. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_trading_fee.py +0 -0
  434. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/base/test_transaction.py +0 -0
  435. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/test_async.py +0 -0
  436. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/test/test_sync.py +0 -0
  437. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/tidex.py +0 -0
  438. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/timex.py +0 -0
  439. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/tokocrypto.py +0 -0
  440. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/upbit.py +0 -0
  441. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/wavesexchange.py +0 -0
  442. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/wazirx.py +0 -0
  443. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/whitebit.py +0 -0
  444. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/woo.py +0 -0
  445. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/yobit.py +0 -0
  446. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/zaif.py +0 -0
  447. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt/zonda.py +0 -0
  448. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt.egg-info/SOURCES.txt +0 -0
  449. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt.egg-info/dependency_links.txt +0 -0
  450. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt.egg-info/requires.txt +0 -0
  451. {ccxt-4.1.69 → ccxt-4.1.70}/ccxt.egg-info/top_level.txt +0 -0
  452. {ccxt-4.1.69 → ccxt-4.1.70}/setup.cfg +0 -0
  453. {ccxt-4.1.69 → ccxt-4.1.70}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.1.69
3
+ Version: 4.1.70
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -224,13 +224,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
224
224
 
225
225
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
226
226
 
227
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.1.69/dist/ccxt.browser.js
228
- * unpkg: https://unpkg.com/ccxt@4.1.69/dist/ccxt.browser.js
227
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.1.70/dist/ccxt.browser.js
228
+ * unpkg: https://unpkg.com/ccxt@4.1.70/dist/ccxt.browser.js
229
229
 
230
230
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
231
231
 
232
232
  ```HTML
233
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.1.69/dist/ccxt.browser.js"></script>
233
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.1.70/dist/ccxt.browser.js"></script>
234
234
  ```
235
235
 
236
236
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.1.69'
25
+ __version__ = '4.1.70'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.69'
7
+ __version__ = '4.1.70'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.1.69'
5
+ __version__ = '4.1.70'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.coinex import ImplicitAPI
8
8
  import asyncio
9
- from ccxt.base.types import Balances, Currency, Int, Market, Order, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currency, Int, Market, Order, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import PermissionDenied
@@ -55,8 +55,10 @@ class coinex(Exchange, ImplicitAPI):
55
55
  'borrowIsolatedMargin': True,
56
56
  'cancelAllOrders': True,
57
57
  'cancelOrder': True,
58
+ 'cancelOrders': True,
58
59
  'createDepositAddress': True,
59
60
  'createOrder': True,
61
+ 'createOrders': True,
60
62
  'createReduceOnlyOrder': True,
61
63
  'editOrder': True,
62
64
  'fetchBalance': True,
@@ -1494,6 +1496,8 @@ class coinex(Exchange, ImplicitAPI):
1494
1496
 
1495
1497
  def parse_order_status(self, status):
1496
1498
  statuses = {
1499
+ 'rejected': 'rejected',
1500
+ 'open': 'open',
1497
1501
  'not_deal': 'open',
1498
1502
  'part_deal': 'open',
1499
1503
  'done': 'closed',
@@ -1527,7 +1531,7 @@ class coinex(Exchange, ImplicitAPI):
1527
1531
  # "client_id": "",
1528
1532
  # }
1529
1533
  #
1530
- # Spot and Margin createOrder, cancelOrder, fetchOrder
1534
+ # Spot and Margin createOrder, createOrders, cancelOrder, cancelOrders, fetchOrder
1531
1535
  #
1532
1536
  # {
1533
1537
  # "amount":"1.5",
@@ -1726,13 +1730,50 @@ class coinex(Exchange, ImplicitAPI):
1726
1730
  # "user_id": 3620173
1727
1731
  # }
1728
1732
  #
1733
+ # swap: cancelOrders
1734
+ #
1735
+ # {
1736
+ # "amount": "0.0005",
1737
+ # "client_id": "x-167673045-b0cee0c584718b65",
1738
+ # "create_time": 1701233683.294231,
1739
+ # "deal_asset_fee": "0.00000000000000000000",
1740
+ # "deal_fee": "0.00000000000000000000",
1741
+ # "deal_profit": "0.00000000000000000000",
1742
+ # "deal_stock": "0.00000000000000000000",
1743
+ # "effect_type": 1,
1744
+ # "fee_asset": "",
1745
+ # "fee_discount": "0.00000000000000000000",
1746
+ # "last_deal_amount": "0.00000000000000000000",
1747
+ # "last_deal_id": 0,
1748
+ # "last_deal_price": "0.00000000000000000000",
1749
+ # "last_deal_role": 0,
1750
+ # "last_deal_time": 0,
1751
+ # "last_deal_type": 0,
1752
+ # "left": "0.0005",
1753
+ # "leverage": "3",
1754
+ # "maker_fee": "0.00030",
1755
+ # "market": "BTCUSDT",
1756
+ # "option": 0,
1757
+ # "order_id": 115940476323,
1758
+ # "position_id": 0,
1759
+ # "position_type": 2,
1760
+ # "price": "25000.00",
1761
+ # "side": 2,
1762
+ # "source": "api.v1",
1763
+ # "stop_id": 0,
1764
+ # "stop_loss_price": "0.00000000000000000000",
1765
+ # "stop_loss_type": 0,
1766
+ # "take_profit_price": "0.00000000000000000000",
1767
+ # "take_profit_type": 0,
1768
+ # "taker_fee": "0.00050",
1769
+ # "target": 0,
1770
+ # "type": 1,
1771
+ # "update_time": 1701233721.718884,
1772
+ # "user_id": 3620173
1773
+ # }
1774
+ #
1775
+ rawStatus = self.safe_string(order, 'status')
1729
1776
  timestamp = self.safe_timestamp(order, 'create_time')
1730
- priceString = self.safe_string(order, 'price')
1731
- costString = self.safe_string(order, 'deal_money')
1732
- amountString = self.safe_string(order, 'amount')
1733
- filledString = self.safe_string(order, 'deal_amount')
1734
- averageString = self.safe_string(order, 'avg_price')
1735
- remainingString = self.safe_string(order, 'left')
1736
1777
  marketId = self.safe_string(order, 'market')
1737
1778
  defaultType = self.safe_string(self.options, 'defaultType')
1738
1779
  orderType = 'swap' if ('source' in order) else defaultType
@@ -1741,7 +1782,6 @@ class coinex(Exchange, ImplicitAPI):
1741
1782
  feeCurrency = self.safe_currency_code(feeCurrencyId)
1742
1783
  if feeCurrency is None:
1743
1784
  feeCurrency = market['quote']
1744
- status = self.parse_order_status(self.safe_string(order, 'status'))
1745
1785
  rawSide = self.safe_integer(order, 'side')
1746
1786
  side: Str = None
1747
1787
  if rawSide == 1:
@@ -1769,21 +1809,23 @@ class coinex(Exchange, ImplicitAPI):
1769
1809
  'datetime': self.iso8601(timestamp),
1770
1810
  'timestamp': timestamp,
1771
1811
  'lastTradeTimestamp': self.safe_timestamp(order, 'update_time'),
1772
- 'status': status,
1812
+ 'status': self.parse_order_status(rawStatus),
1773
1813
  'symbol': market['symbol'],
1774
1814
  'type': type,
1775
1815
  'timeInForce': None,
1776
1816
  'postOnly': None,
1777
1817
  'reduceOnly': None,
1778
1818
  'side': side,
1779
- 'price': priceString,
1819
+ 'price': self.safe_string(order, 'price'),
1780
1820
  'stopPrice': self.safe_string(order, 'stop_price'),
1781
1821
  'triggerPrice': self.safe_string(order, 'stop_price'),
1782
- 'cost': costString,
1783
- 'average': averageString,
1784
- 'amount': amountString,
1785
- 'filled': filledString,
1786
- 'remaining': remainingString,
1822
+ 'takeProfitPrice': self.safe_number(order, 'take_profit_price'),
1823
+ 'stopLossPrice': self.safe_number(order, 'stop_loss_price'),
1824
+ 'cost': self.safe_string(order, 'deal_money'),
1825
+ 'average': self.safe_string(order, 'avg_price'),
1826
+ 'amount': self.safe_string(order, 'amount'),
1827
+ 'filled': self.safe_string(order, 'deal_amount'),
1828
+ 'remaining': self.safe_string(order, 'left'),
1787
1829
  'trades': None,
1788
1830
  'fee': {
1789
1831
  'currency': feeCurrency,
@@ -1792,32 +1834,7 @@ class coinex(Exchange, ImplicitAPI):
1792
1834
  'info': order,
1793
1835
  }, market)
1794
1836
 
1795
- async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount, price=None, params={}):
1796
- """
1797
- create a trade order
1798
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http017_put_limit
1799
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http018_put_market
1800
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http019_put_limit_stop
1801
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http020_put_market_stop
1802
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http031_market_close
1803
- :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http030_limit_close
1804
- :param str symbol: unified symbol of the market to create an order in
1805
- :param str type: 'market' or 'limit'
1806
- :param str side: 'buy' or 'sell'
1807
- :param float amount: how much of currency you want to trade in units of base currency
1808
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1809
- :param dict [params]: extra parameters specific to the exchange API endpoint
1810
- :param float triggerPrice: price at which to triger stop orders
1811
- :param float stopPrice: price at which to triger stop orders
1812
- :param float stopLossPrice: price at which to trigger stop-loss orders
1813
- :param float takeProfitPrice: price at which to trigger take-profit orders
1814
- :param str [params.timeInForce]: "GTC", "IOC", "FOK", "PO"
1815
- :param bool params.postOnly:
1816
- :param bool params.reduceOnly:
1817
- :param bool [params.position_id]: *required for reduce only orders* the position id to reduce
1818
- :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1819
- """
1820
- await self.load_markets()
1837
+ def create_order_request(self, symbol, type, side, amount, price=None, params={}):
1821
1838
  market = self.market(symbol)
1822
1839
  swap = market['swap']
1823
1840
  clientOrderId = self.safe_string_2(params, 'client_id', 'clientOrderId')
@@ -1831,11 +1848,10 @@ class coinex(Exchange, ImplicitAPI):
1831
1848
  timeInForceRaw = self.safe_string(params, 'timeInForce') # Spot: IOC, FOK, PO, GTC, ... NORMAL(default), MAKER_ONLY
1832
1849
  reduceOnly = self.safe_value(params, 'reduceOnly')
1833
1850
  if reduceOnly:
1834
- if market['type'] != 'swap':
1851
+ if not market['swap']:
1835
1852
  raise InvalidOrder(self.id + ' createOrder() does not support reduceOnly for ' + market['type'] + ' orders, reduceOnly orders are supported for swap markets only')
1836
1853
  if positionId is None:
1837
1854
  raise ArgumentsRequired(self.id + ' createOrder() requires a position_id/positionId parameter for reduceOnly orders')
1838
- method = None
1839
1855
  request = {
1840
1856
  'market': market['id'],
1841
1857
  }
@@ -1852,13 +1868,10 @@ class coinex(Exchange, ImplicitAPI):
1852
1868
  raise ArgumentsRequired(self.id + ' createOrder() requires a position_id parameter for stop loss and take profit orders')
1853
1869
  request['position_id'] = positionId
1854
1870
  if stopLossPrice:
1855
- method = 'perpetualPrivatePostPositionStopLoss'
1856
1871
  request['stop_loss_price'] = self.price_to_precision(symbol, stopLossPrice)
1857
1872
  elif takeProfitPrice:
1858
- method = 'perpetualPrivatePostPositionTakeProfit'
1859
1873
  request['take_profit_price'] = self.price_to_precision(symbol, takeProfitPrice)
1860
1874
  else:
1861
- method = 'perpetualPrivatePostOrderPut' + self.capitalize(type)
1862
1875
  requestSide = 2 if (side == 'buy') else 1
1863
1876
  if stopPrice is not None:
1864
1877
  request['stop_price'] = self.price_to_precision(symbol, stopPrice)
@@ -1866,10 +1879,7 @@ class coinex(Exchange, ImplicitAPI):
1866
1879
  request['amount'] = self.amount_to_precision(symbol, amount)
1867
1880
  request['side'] = requestSide
1868
1881
  if type == 'limit':
1869
- method = 'perpetualPrivatePostOrderPutStopLimit'
1870
1882
  request['price'] = self.price_to_precision(symbol, price)
1871
- elif type == 'market':
1872
- method = 'perpetualPrivatePostOrderPutStopMarket'
1873
1883
  request['amount'] = self.amount_to_precision(symbol, amount)
1874
1884
  timeInForce = None
1875
1885
  if (type != 'market') or (stopPrice is not None):
@@ -1885,7 +1895,6 @@ class coinex(Exchange, ImplicitAPI):
1885
1895
  request['effect_type'] = timeInForce # exchange takes 'IOC' and 'FOK'
1886
1896
  if type == 'limit' and stopPrice is None:
1887
1897
  if reduceOnly:
1888
- method = 'perpetualPrivatePostOrderCloseLimit'
1889
1898
  request['position_id'] = positionId
1890
1899
  else:
1891
1900
  request['side'] = requestSide
@@ -1893,13 +1902,11 @@ class coinex(Exchange, ImplicitAPI):
1893
1902
  request['amount'] = self.amount_to_precision(symbol, amount)
1894
1903
  elif type == 'market' and stopPrice is None:
1895
1904
  if reduceOnly:
1896
- method = 'perpetualPrivatePostOrderCloseMarket'
1897
1905
  request['position_id'] = positionId
1898
1906
  else:
1899
1907
  request['side'] = requestSide
1900
1908
  request['amount'] = self.amount_to_precision(symbol, amount)
1901
1909
  else:
1902
- method = 'privatePostOrder' + self.capitalize(type)
1903
1910
  request['type'] = side
1904
1911
  if (type == 'market') and (side == 'buy'):
1905
1912
  if self.options['createMarketBuyOrderRequiresPrice']:
@@ -1919,10 +1926,6 @@ class coinex(Exchange, ImplicitAPI):
1919
1926
  request['price'] = self.price_to_precision(symbol, price)
1920
1927
  if stopPrice is not None:
1921
1928
  request['stop_price'] = self.price_to_precision(symbol, stopPrice)
1922
- if type == 'limit':
1923
- method = 'privatePostOrderStopLimit'
1924
- elif type == 'market':
1925
- method = 'privatePostOrderStopMarket'
1926
1929
  if (type != 'market') or (stopPrice is not None):
1927
1930
  # following options cannot be applied to vanilla market orders(but can be applied to stop-market orders)
1928
1931
  if (timeInForceRaw is not None) or postOnly:
@@ -1940,7 +1943,77 @@ class coinex(Exchange, ImplicitAPI):
1940
1943
  raise BadRequest(self.id + ' createOrder() requires an account_id parameter for margin orders')
1941
1944
  request['account_id'] = accountId
1942
1945
  params = self.omit(params, ['reduceOnly', 'positionId', 'timeInForce', 'postOnly', 'stopPrice', 'triggerPrice', 'stopLossPrice', 'takeProfitPrice'])
1943
- response = await getattr(self, method)(self.extend(request, params))
1946
+ return self.extend(request, params)
1947
+
1948
+ async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount, price=None, params={}):
1949
+ """
1950
+ create a trade order
1951
+ :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http017_put_limit
1952
+ :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http018_put_market
1953
+ :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http019_put_limit_stop
1954
+ :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http020_put_market_stop
1955
+ :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http031_market_close
1956
+ :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http030_limit_close
1957
+ :param str symbol: unified symbol of the market to create an order in
1958
+ :param str type: 'market' or 'limit'
1959
+ :param str side: 'buy' or 'sell'
1960
+ :param float amount: how much you want to trade in units of the base currency
1961
+ :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1962
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1963
+ :param float [params.triggerPrice]: price to trigger stop orders
1964
+ :param float [params.stopLossPrice]: price to trigger stop loss orders
1965
+ :param float [params.takeProfitPrice]: price to trigger take profit orders
1966
+ :param str [params.timeInForce]: 'GTC', 'IOC', 'FOK', 'PO'
1967
+ :param boolean [params.postOnly]: set to True if you wish to make a post only order
1968
+ :param boolean [params.reduceOnly]: *contract only* indicates if self order is to reduce the size of a position
1969
+ :param int [params.position_id]: *required for reduce only orders* the position id to reduce
1970
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1971
+ """
1972
+ await self.load_markets()
1973
+ market = self.market(symbol)
1974
+ reduceOnly = self.safe_value(params, 'reduceOnly')
1975
+ triggerPrice = self.safe_number_2(params, 'stopPrice', 'triggerPrice')
1976
+ stopLossTriggerPrice = self.safe_number(params, 'stopLossPrice')
1977
+ takeProfitTriggerPrice = self.safe_number(params, 'takeProfitPrice')
1978
+ isTriggerOrder = triggerPrice is not None
1979
+ isStopLossTriggerOrder = stopLossTriggerPrice is not None
1980
+ isTakeProfitTriggerOrder = takeProfitTriggerPrice is not None
1981
+ isStopLossOrTakeProfitTrigger = isStopLossTriggerOrder or isTakeProfitTriggerOrder
1982
+ request = self.create_order_request(symbol, type, side, amount, price, params)
1983
+ response = None
1984
+ if market['spot']:
1985
+ if isTriggerOrder:
1986
+ if type == 'limit':
1987
+ response = await self.privatePostOrderStopLimit(request)
1988
+ else:
1989
+ response = await self.privatePostOrderStopMarket(request)
1990
+ else:
1991
+ if type == 'limit':
1992
+ response = await self.privatePostOrderLimit(request)
1993
+ else:
1994
+ response = await self.privatePostOrderMarket(request)
1995
+ else:
1996
+ if isTriggerOrder:
1997
+ if type == 'limit':
1998
+ response = await self.perpetualPrivatePostOrderPutStopLimit(request)
1999
+ else:
2000
+ response = await self.perpetualPrivatePostOrderPutStopMarket(request)
2001
+ elif isStopLossOrTakeProfitTrigger:
2002
+ if isStopLossTriggerOrder:
2003
+ response = await self.perpetualPrivatePostPositionStopLoss(request)
2004
+ elif isTakeProfitTriggerOrder:
2005
+ response = await self.perpetualPrivatePostPositionTakeProfit(request)
2006
+ else:
2007
+ if reduceOnly:
2008
+ if type == 'limit':
2009
+ response = await self.perpetualPrivatePostOrderCloseLimit(request)
2010
+ else:
2011
+ response = await self.perpetualPrivatePostOrderCloseMarket(request)
2012
+ else:
2013
+ if type == 'limit':
2014
+ response = await self.perpetualPrivatePostOrderPutLimit(request)
2015
+ else:
2016
+ response = await self.perpetualPrivatePostOrderPutMarket(request)
1944
2017
  #
1945
2018
  # Spot and Margin
1946
2019
  #
@@ -2018,9 +2091,225 @@ class coinex(Exchange, ImplicitAPI):
2018
2091
  #
2019
2092
  # {"code":0,"data":{"status":"success"},"message":"OK"}
2020
2093
  #
2021
- data = self.safe_value(response, 'data')
2094
+ data = self.safe_value(response, 'data', {})
2022
2095
  return self.parse_order(data, market)
2023
2096
 
2097
+ async def create_orders(self, orders: List[OrderRequest], params={}) -> List[Order]:
2098
+ """
2099
+ create a list of trade orders(all orders should be of the same symbol)
2100
+ :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade002_batch_limit_orders
2101
+ :param array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
2102
+ :param dict [params]: extra parameters specific to the api endpoint
2103
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2104
+ """
2105
+ await self.load_markets()
2106
+ ordersRequests = []
2107
+ symbol = None
2108
+ for i in range(0, len(orders)):
2109
+ rawOrder = orders[i]
2110
+ marketId = self.safe_string(rawOrder, 'symbol')
2111
+ if symbol is None:
2112
+ symbol = marketId
2113
+ else:
2114
+ if symbol != marketId:
2115
+ raise BadRequest(self.id + ' createOrders() requires all orders to have the same symbol')
2116
+ type = self.safe_string(rawOrder, 'type')
2117
+ side = self.safe_string(rawOrder, 'side')
2118
+ amount = self.safe_value(rawOrder, 'amount')
2119
+ price = self.safe_value(rawOrder, 'price')
2120
+ orderParams = self.safe_value(rawOrder, 'params', {})
2121
+ if type != 'limit':
2122
+ raise NotSupported(self.id + ' createOrders() does not support ' + type + ' orders, only limit orders are accepted')
2123
+ orderRequest = self.create_order_request(marketId, type, side, amount, price, orderParams)
2124
+ ordersRequests.append(orderRequest)
2125
+ market = self.market(symbol)
2126
+ if not market['spot']:
2127
+ raise NotSupported(self.id + ' createOrders() does not support ' + market['type'] + ' orders, only spot orders are accepted')
2128
+ request = {
2129
+ 'market': market['id'],
2130
+ 'batch_orders': self.json(ordersRequests),
2131
+ }
2132
+ response = await self.privatePostOrderLimitBatch(request)
2133
+ #
2134
+ # {
2135
+ # "code": 0,
2136
+ # "data": [
2137
+ # {
2138
+ # "code": 0,
2139
+ # "data": {
2140
+ # "amount": "0.0005",
2141
+ # "asset_fee": "0",
2142
+ # "avg_price": "0.00",
2143
+ # "client_id": "x-167673045-d34bfb41242d8fd1",
2144
+ # "create_time": 1701229157,
2145
+ # "deal_amount": "0",
2146
+ # "deal_fee": "0",
2147
+ # "deal_money": "0",
2148
+ # "fee_asset": null,
2149
+ # "fee_discount": "1",
2150
+ # "finished_time": null,
2151
+ # "id": 107745856676,
2152
+ # "left": "0.0005",
2153
+ # "maker_fee_rate": "0.002",
2154
+ # "market": "BTCUSDT",
2155
+ # "money_fee": "0",
2156
+ # "order_type": "limit",
2157
+ # "price": "23000",
2158
+ # "source_id": "",
2159
+ # "status": "not_deal",
2160
+ # "stock_fee": "0",
2161
+ # "taker_fee_rate": "0.002",
2162
+ # "type": "buy"
2163
+ # },
2164
+ # "message": "OK"
2165
+ # },
2166
+ # ],
2167
+ # "message": "Success"
2168
+ # }
2169
+ #
2170
+ data = self.safe_value(response, 'data', [])
2171
+ results = []
2172
+ for i in range(0, len(data)):
2173
+ entry = data[i]
2174
+ status = None
2175
+ code = self.safe_integer(entry, 'code')
2176
+ if code is not None:
2177
+ if code != 0:
2178
+ status = 'rejected'
2179
+ else:
2180
+ status = 'open'
2181
+ item = self.safe_value(entry, 'data', {})
2182
+ item['status'] = status
2183
+ order = self.parse_order(item, market)
2184
+ results.append(order)
2185
+ return results
2186
+
2187
+ async def cancel_orders(self, ids, symbol: Str = None, params={}):
2188
+ """
2189
+ cancel multiple orders
2190
+ :see: https://viabtc.github.io/coinex_api_en_doc/spot/#docsspot003_trade016_batch_cancel_order
2191
+ :see: https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http021-0_cancel_order_batch
2192
+ :param str[] ids: order ids
2193
+ :param str symbol: unified market symbol
2194
+ :param dict [params]: extra parameters specific to the exchange API endpoint
2195
+ :returns dict: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
2196
+ """
2197
+ if symbol is None:
2198
+ raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
2199
+ await self.load_markets()
2200
+ market = self.market(symbol)
2201
+ request = {
2202
+ 'market': market['id'],
2203
+ }
2204
+ idsString = ','.join(ids)
2205
+ response = None
2206
+ if market['spot']:
2207
+ request['batch_ids'] = idsString
2208
+ response = await self.privateDeleteOrderPendingBatch(self.extend(request, params))
2209
+ else:
2210
+ request['order_ids'] = idsString
2211
+ response = await self.perpetualPrivatePostOrderCancelBatch(self.extend(request, params))
2212
+ #
2213
+ # spot
2214
+ #
2215
+ # {
2216
+ # "code": 0,
2217
+ # "data": [
2218
+ # {
2219
+ # "code": 0,
2220
+ # "data": {
2221
+ # "account_id": 0,
2222
+ # "amount": "0.0005",
2223
+ # "asset_fee": "0",
2224
+ # "avg_price": "0.00",
2225
+ # "client_id": "x-167673045-d4e03c38f4d19b4e",
2226
+ # "create_time": 1701229157,
2227
+ # "deal_amount": "0",
2228
+ # "deal_fee": "0",
2229
+ # "deal_money": "0",
2230
+ # "fee_asset": null,
2231
+ # "fee_discount": "1",
2232
+ # "finished_time": 0,
2233
+ # "id": 107745856682,
2234
+ # "left": "0",
2235
+ # "maker_fee_rate": "0.002",
2236
+ # "market": "BTCUSDT",
2237
+ # "money_fee": "0",
2238
+ # "order_type": "limit",
2239
+ # "price": "22000",
2240
+ # "status": "not_deal",
2241
+ # "stock_fee": "0",
2242
+ # "taker_fee_rate": "0.002",
2243
+ # "type": "buy"
2244
+ # },
2245
+ # "message": ""
2246
+ # },
2247
+ # ],
2248
+ # "message": "Success"
2249
+ # }
2250
+ #
2251
+ # swap
2252
+ #
2253
+ # {
2254
+ # "code": 0,
2255
+ # "data": [
2256
+ # {
2257
+ # "code": 0,
2258
+ # "message": "",
2259
+ # "order": {
2260
+ # "amount": "0.0005",
2261
+ # "client_id": "x-167673045-b0cee0c584718b65",
2262
+ # "create_time": 1701233683.294231,
2263
+ # "deal_asset_fee": "0.00000000000000000000",
2264
+ # "deal_fee": "0.00000000000000000000",
2265
+ # "deal_profit": "0.00000000000000000000",
2266
+ # "deal_stock": "0.00000000000000000000",
2267
+ # "effect_type": 1,
2268
+ # "fee_asset": "",
2269
+ # "fee_discount": "0.00000000000000000000",
2270
+ # "last_deal_amount": "0.00000000000000000000",
2271
+ # "last_deal_id": 0,
2272
+ # "last_deal_price": "0.00000000000000000000",
2273
+ # "last_deal_role": 0,
2274
+ # "last_deal_time": 0,
2275
+ # "last_deal_type": 0,
2276
+ # "left": "0.0005",
2277
+ # "leverage": "3",
2278
+ # "maker_fee": "0.00030",
2279
+ # "market": "BTCUSDT",
2280
+ # "option": 0,
2281
+ # "order_id": 115940476323,
2282
+ # "position_id": 0,
2283
+ # "position_type": 2,
2284
+ # "price": "25000.00",
2285
+ # "side": 2,
2286
+ # "source": "api.v1",
2287
+ # "stop_id": 0,
2288
+ # "stop_loss_price": "0.00000000000000000000",
2289
+ # "stop_loss_type": 0,
2290
+ # "take_profit_price": "0.00000000000000000000",
2291
+ # "take_profit_type": 0,
2292
+ # "taker_fee": "0.00050",
2293
+ # "target": 0,
2294
+ # "type": 1,
2295
+ # "update_time": 1701233721.718884,
2296
+ # "user_id": 3620173
2297
+ # }
2298
+ # },
2299
+ # ],
2300
+ # "message": "OK"
2301
+ # }
2302
+ #
2303
+ data = self.safe_value(response, 'data', [])
2304
+ results = []
2305
+ for i in range(0, len(data)):
2306
+ entry = data[i]
2307
+ dataRequest = 'data' if market['spot'] else 'order'
2308
+ item = self.safe_value(entry, dataRequest, {})
2309
+ order = self.parse_order(item, market)
2310
+ results.append(order)
2311
+ return results
2312
+
2024
2313
  async def edit_order(self, id, symbol, type, side, amount=None, price=None, params={}):
2025
2314
  """
2026
2315
  edit a trade order
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.69'
7
+ __version__ = '4.1.70'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10