ccxt 4.1.68__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.68/ccxt.egg-info → ccxt-4.1.70}/PKG-INFO +4 -4
  2. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/__init__.py +1 -1
  3. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/phemex.py +8 -0
  4. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/ascendex.py +69 -68
  5. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/__init__.py +1 -1
  6. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/ascendex.py +69 -68
  7. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/exchange.py +1 -1
  8. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinex.py +348 -59
  9. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/phemex.py +14 -2
  10. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/base/exchange.py +1 -1
  11. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinex.py +348 -59
  12. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/phemex.py +14 -2
  13. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/__init__.py +1 -1
  14. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/binance.py +2 -2
  15. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/htx.py +3 -2
  16. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/test_async.py +51 -29
  17. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/test_sync.py +51 -29
  18. {ccxt-4.1.68 → ccxt-4.1.70/ccxt.egg-info}/PKG-INFO +4 -4
  19. {ccxt-4.1.68 → ccxt-4.1.70}/package.json +1 -1
  20. {ccxt-4.1.68 → ccxt-4.1.70}/setup.py +1 -1
  21. {ccxt-4.1.68 → ccxt-4.1.70}/LICENSE.txt +0 -0
  22. {ccxt-4.1.68 → ccxt-4.1.70}/MANIFEST.in +0 -0
  23. {ccxt-4.1.68 → ccxt-4.1.70}/README.rst +0 -0
  24. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/__init__.py +0 -0
  25. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/ace.py +0 -0
  26. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/alpaca.py +0 -0
  27. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/ascendex.py +0 -0
  28. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bequant.py +0 -0
  29. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bigone.py +0 -0
  30. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/binance.py +0 -0
  31. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/binancecoinm.py +0 -0
  32. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/binanceus.py +0 -0
  33. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/binanceusdm.py +0 -0
  34. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bingx.py +0 -0
  35. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bit2c.py +0 -0
  36. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitbank.py +0 -0
  37. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitbay.py +0 -0
  38. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitbns.py +0 -0
  39. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitcoincom.py +0 -0
  40. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitfinex.py +0 -0
  41. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitfinex2.py +0 -0
  42. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitflyer.py +0 -0
  43. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitforex.py +0 -0
  44. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitget.py +0 -0
  45. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bithumb.py +0 -0
  46. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitmart.py +0 -0
  47. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitmex.py +0 -0
  48. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitopro.py +0 -0
  49. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitpanda.py +0 -0
  50. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitrue.py +0 -0
  51. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitso.py +0 -0
  52. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitstamp.py +0 -0
  53. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bittrex.py +0 -0
  54. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bitvavo.py +0 -0
  55. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bl3p.py +0 -0
  56. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/blockchaincom.py +0 -0
  57. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/btcalpha.py +0 -0
  58. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/btcbox.py +0 -0
  59. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/btcmarkets.py +0 -0
  60. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/btcturk.py +0 -0
  61. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/bybit.py +0 -0
  62. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/cex.py +0 -0
  63. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinbase.py +0 -0
  64. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinbaseprime.py +0 -0
  65. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinbasepro.py +0 -0
  66. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coincheck.py +0 -0
  67. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinex.py +0 -0
  68. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinlist.py +0 -0
  69. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinmate.py +0 -0
  70. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinone.py +0 -0
  71. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinsph.py +0 -0
  72. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/coinspot.py +0 -0
  73. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/cryptocom.py +0 -0
  74. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/currencycom.py +0 -0
  75. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/delta.py +0 -0
  76. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/deribit.py +0 -0
  77. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/digifinex.py +0 -0
  78. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/exmo.py +0 -0
  79. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/fmfwio.py +0 -0
  80. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/gate.py +0 -0
  81. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/gateio.py +0 -0
  82. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/gemini.py +0 -0
  83. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/hitbtc.py +0 -0
  84. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/hitbtc3.py +0 -0
  85. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/hollaex.py +0 -0
  86. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/htx.py +0 -0
  87. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/huobi.py +0 -0
  88. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/huobijp.py +0 -0
  89. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/idex.py +0 -0
  90. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/independentreserve.py +0 -0
  91. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/indodax.py +0 -0
  92. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/kraken.py +0 -0
  93. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/krakenfutures.py +0 -0
  94. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/kucoin.py +0 -0
  95. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/kucoinfutures.py +0 -0
  96. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/kuna.py +0 -0
  97. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/latoken.py +0 -0
  98. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/lbank.py +0 -0
  99. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/luno.py +0 -0
  100. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/lykke.py +0 -0
  101. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/mercado.py +0 -0
  102. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/mexc.py +0 -0
  103. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/ndax.py +0 -0
  104. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/novadax.py +0 -0
  105. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/oceanex.py +0 -0
  106. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/okcoin.py +0 -0
  107. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/okx.py +0 -0
  108. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/p2b.py +0 -0
  109. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/paymium.py +0 -0
  110. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/poloniex.py +0 -0
  111. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/poloniexfutures.py +0 -0
  112. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/probit.py +0 -0
  113. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/tidex.py +0 -0
  114. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/timex.py +0 -0
  115. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/tokocrypto.py +0 -0
  116. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/upbit.py +0 -0
  117. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/wavesexchange.py +0 -0
  118. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/wazirx.py +0 -0
  119. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/whitebit.py +0 -0
  120. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/woo.py +0 -0
  121. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/yobit.py +0 -0
  122. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/zaif.py +0 -0
  123. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/abstract/zonda.py +0 -0
  124. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/ace.py +0 -0
  125. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/alpaca.py +0 -0
  126. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/ace.py +0 -0
  127. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/alpaca.py +0 -0
  128. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/__init__.py +0 -0
  129. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/throttler.py +0 -0
  130. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/__init__.py +0 -0
  131. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  132. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/cache.py +0 -0
  133. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/client.py +0 -0
  134. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/fast_client.py +0 -0
  135. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/functions.py +0 -0
  136. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/future.py +0 -0
  137. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/order_book.py +0 -0
  138. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  139. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bequant.py +0 -0
  140. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bigone.py +0 -0
  141. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/binance.py +0 -0
  142. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/binancecoinm.py +0 -0
  143. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/binanceus.py +0 -0
  144. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/binanceusdm.py +0 -0
  145. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bingx.py +0 -0
  146. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bit2c.py +0 -0
  147. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitbank.py +0 -0
  148. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitbay.py +0 -0
  149. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitbns.py +0 -0
  150. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitcoincom.py +0 -0
  151. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitfinex.py +0 -0
  152. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitfinex2.py +0 -0
  153. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitflyer.py +0 -0
  154. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitforex.py +0 -0
  155. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitget.py +0 -0
  156. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bithumb.py +0 -0
  157. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitmart.py +0 -0
  158. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitmex.py +0 -0
  159. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitopro.py +0 -0
  160. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitpanda.py +0 -0
  161. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitrue.py +0 -0
  162. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitso.py +0 -0
  163. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitstamp.py +0 -0
  164. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bittrex.py +0 -0
  165. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bitvavo.py +0 -0
  166. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bl3p.py +0 -0
  167. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/blockchaincom.py +0 -0
  168. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/btcalpha.py +0 -0
  169. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/btcbox.py +0 -0
  170. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/btcmarkets.py +0 -0
  171. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/btcturk.py +0 -0
  172. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/bybit.py +0 -0
  173. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/cex.py +0 -0
  174. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinbase.py +0 -0
  175. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinbaseprime.py +0 -0
  176. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinbasepro.py +0 -0
  177. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coincheck.py +0 -0
  178. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinlist.py +0 -0
  179. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinmate.py +0 -0
  180. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinone.py +0 -0
  181. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinsph.py +0 -0
  182. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/coinspot.py +0 -0
  183. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/cryptocom.py +0 -0
  184. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/currencycom.py +0 -0
  185. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/delta.py +0 -0
  186. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/deribit.py +0 -0
  187. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/digifinex.py +0 -0
  188. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/exmo.py +0 -0
  189. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/flowbtc.py +0 -0
  190. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/fmfwio.py +0 -0
  191. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/gate.py +0 -0
  192. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/gateio.py +0 -0
  193. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/gemini.py +0 -0
  194. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/hitbtc.py +0 -0
  195. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/hitbtc3.py +0 -0
  196. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/hollaex.py +0 -0
  197. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/htx.py +0 -0
  198. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/huobi.py +0 -0
  199. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/huobijp.py +0 -0
  200. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/huobipro.py +0 -0
  201. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/idex.py +0 -0
  202. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/independentreserve.py +0 -0
  203. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/indodax.py +0 -0
  204. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/kraken.py +0 -0
  205. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/krakenfutures.py +0 -0
  206. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/kucoin.py +0 -0
  207. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/kucoinfutures.py +0 -0
  208. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/kuna.py +0 -0
  209. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/latoken.py +0 -0
  210. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/lbank.py +0 -0
  211. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/luno.py +0 -0
  212. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/lykke.py +0 -0
  213. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/mercado.py +0 -0
  214. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/mexc.py +0 -0
  215. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/mexc3.py +0 -0
  216. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/ndax.py +0 -0
  217. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/novadax.py +0 -0
  218. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/oceanex.py +0 -0
  219. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/okcoin.py +0 -0
  220. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/okex.py +0 -0
  221. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/okex5.py +0 -0
  222. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/okx.py +0 -0
  223. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/p2b.py +0 -0
  224. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/paymium.py +0 -0
  225. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/poloniex.py +0 -0
  226. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/poloniexfutures.py +0 -0
  227. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/probit.py +0 -0
  228. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/tidex.py +0 -0
  229. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/timex.py +0 -0
  230. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/tokocrypto.py +0 -0
  231. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/upbit.py +0 -0
  232. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/wavesexchange.py +0 -0
  233. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/wazirx.py +0 -0
  234. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/whitebit.py +0 -0
  235. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/woo.py +0 -0
  236. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/yobit.py +0 -0
  237. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/zaif.py +0 -0
  238. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/async_support/zonda.py +0 -0
  239. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/base/__init__.py +0 -0
  240. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/base/decimal_to_precision.py +0 -0
  241. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/base/errors.py +0 -0
  242. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/base/precise.py +0 -0
  243. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/base/types.py +0 -0
  244. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bequant.py +0 -0
  245. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bigone.py +0 -0
  246. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/binance.py +0 -0
  247. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/binancecoinm.py +0 -0
  248. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/binanceus.py +0 -0
  249. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/binanceusdm.py +0 -0
  250. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bingx.py +0 -0
  251. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bit2c.py +0 -0
  252. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitbank.py +0 -0
  253. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitbay.py +0 -0
  254. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitbns.py +0 -0
  255. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitcoincom.py +0 -0
  256. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitfinex.py +0 -0
  257. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitfinex2.py +0 -0
  258. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitflyer.py +0 -0
  259. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitforex.py +0 -0
  260. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitget.py +0 -0
  261. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bithumb.py +0 -0
  262. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitmart.py +0 -0
  263. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitmex.py +0 -0
  264. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitopro.py +0 -0
  265. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitpanda.py +0 -0
  266. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitrue.py +0 -0
  267. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitso.py +0 -0
  268. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitstamp.py +0 -0
  269. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bittrex.py +0 -0
  270. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bitvavo.py +0 -0
  271. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bl3p.py +0 -0
  272. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/blockchaincom.py +0 -0
  273. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/btcalpha.py +0 -0
  274. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/btcbox.py +0 -0
  275. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/btcmarkets.py +0 -0
  276. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/btcturk.py +0 -0
  277. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/bybit.py +0 -0
  278. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/cex.py +0 -0
  279. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinbase.py +0 -0
  280. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinbaseprime.py +0 -0
  281. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinbasepro.py +0 -0
  282. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coincheck.py +0 -0
  283. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinlist.py +0 -0
  284. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinmate.py +0 -0
  285. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinone.py +0 -0
  286. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinsph.py +0 -0
  287. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/coinspot.py +0 -0
  288. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/cryptocom.py +0 -0
  289. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/currencycom.py +0 -0
  290. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/delta.py +0 -0
  291. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/deribit.py +0 -0
  292. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/digifinex.py +0 -0
  293. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/exmo.py +0 -0
  294. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/flowbtc.py +0 -0
  295. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/fmfwio.py +0 -0
  296. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/gate.py +0 -0
  297. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/gateio.py +0 -0
  298. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/gemini.py +0 -0
  299. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/hitbtc.py +0 -0
  300. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/hitbtc3.py +0 -0
  301. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/hollaex.py +0 -0
  302. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/htx.py +0 -0
  303. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/huobi.py +0 -0
  304. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/huobijp.py +0 -0
  305. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/huobipro.py +0 -0
  306. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/idex.py +0 -0
  307. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/independentreserve.py +0 -0
  308. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/indodax.py +0 -0
  309. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/kraken.py +0 -0
  310. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/krakenfutures.py +0 -0
  311. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/kucoin.py +0 -0
  312. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/kucoinfutures.py +0 -0
  313. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/kuna.py +0 -0
  314. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/latoken.py +0 -0
  315. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/lbank.py +0 -0
  316. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/luno.py +0 -0
  317. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/lykke.py +0 -0
  318. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/mercado.py +0 -0
  319. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/mexc.py +0 -0
  320. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/mexc3.py +0 -0
  321. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/ndax.py +0 -0
  322. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/novadax.py +0 -0
  323. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/oceanex.py +0 -0
  324. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/okcoin.py +0 -0
  325. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/okex.py +0 -0
  326. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/okex5.py +0 -0
  327. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/okx.py +0 -0
  328. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/p2b.py +0 -0
  329. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/paymium.py +0 -0
  330. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/poloniex.py +0 -0
  331. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/poloniexfutures.py +0 -0
  332. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/alpaca.py +0 -0
  333. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/ascendex.py +0 -0
  334. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bequant.py +0 -0
  335. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/binancecoinm.py +0 -0
  336. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/binanceus.py +0 -0
  337. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/binanceusdm.py +0 -0
  338. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bingx.py +0 -0
  339. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitcoincom.py +0 -0
  340. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitfinex.py +0 -0
  341. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitfinex2.py +0 -0
  342. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitget.py +0 -0
  343. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitmart.py +0 -0
  344. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitmex.py +0 -0
  345. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitopro.py +0 -0
  346. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitpanda.py +0 -0
  347. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitrue.py +0 -0
  348. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitstamp.py +0 -0
  349. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bittrex.py +0 -0
  350. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bitvavo.py +0 -0
  351. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/blockchaincom.py +0 -0
  352. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/bybit.py +0 -0
  353. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/cex.py +0 -0
  354. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/coinbase.py +0 -0
  355. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/coinbaseprime.py +0 -0
  356. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/coinbasepro.py +0 -0
  357. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/coinex.py +0 -0
  358. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/cryptocom.py +0 -0
  359. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/currencycom.py +0 -0
  360. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/deribit.py +0 -0
  361. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/exmo.py +0 -0
  362. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/gate.py +0 -0
  363. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/gateio.py +0 -0
  364. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/gemini.py +0 -0
  365. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/hitbtc.py +0 -0
  366. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/hollaex.py +0 -0
  367. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/huobi.py +0 -0
  368. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/huobijp.py +0 -0
  369. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/huobipro.py +0 -0
  370. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/idex.py +0 -0
  371. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/independentreserve.py +0 -0
  372. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/kraken.py +0 -0
  373. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/krakenfutures.py +0 -0
  374. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/kucoin.py +0 -0
  375. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/kucoinfutures.py +0 -0
  376. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/luno.py +0 -0
  377. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/mexc.py +0 -0
  378. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/mexc3.py +0 -0
  379. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/ndax.py +0 -0
  380. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/okcoin.py +0 -0
  381. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/okex.py +0 -0
  382. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/okx.py +0 -0
  383. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/phemex.py +0 -0
  384. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/poloniex.py +0 -0
  385. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/poloniexfutures.py +0 -0
  386. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/probit.py +0 -0
  387. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/upbit.py +0 -0
  388. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/wazirx.py +0 -0
  389. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/whitebit.py +0 -0
  390. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/pro/woo.py +0 -0
  391. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/probit.py +0 -0
  392. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/__init__.py +0 -0
  393. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  394. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  395. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  396. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  397. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  398. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  399. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  400. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  401. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  402. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  403. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  404. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  405. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/__init__.py +0 -0
  406. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/__init__.py +0 -0
  407. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_account.py +0 -0
  408. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_balance.py +0 -0
  409. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_borrow_interest.py +0 -0
  410. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_borrow_rate.py +0 -0
  411. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_calculate_fee.py +0 -0
  412. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_crypto.py +0 -0
  413. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_currency.py +0 -0
  414. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_datetime.py +0 -0
  415. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  416. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_deep_extend.py +0 -0
  417. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  418. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  419. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_funding_rate_history.py +0 -0
  420. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_ledger_entry.py +0 -0
  421. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_ledger_item.py +0 -0
  422. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_leverage_tier.py +0 -0
  423. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_margin_modification.py +0 -0
  424. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_market.py +0 -0
  425. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_number.py +0 -0
  426. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_ohlcv.py +0 -0
  427. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_open_interest.py +0 -0
  428. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_order.py +0 -0
  429. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_order_book.py +0 -0
  430. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_position.py +0 -0
  431. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_shared_methods.py +0 -0
  432. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_status.py +0 -0
  433. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_throttle.py +0 -0
  434. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_ticker.py +0 -0
  435. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_trade.py +0 -0
  436. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_trading_fee.py +0 -0
  437. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/test/base/test_transaction.py +0 -0
  438. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/tidex.py +0 -0
  439. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/timex.py +0 -0
  440. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/tokocrypto.py +0 -0
  441. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/upbit.py +0 -0
  442. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/wavesexchange.py +0 -0
  443. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/wazirx.py +0 -0
  444. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/whitebit.py +0 -0
  445. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/woo.py +0 -0
  446. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/yobit.py +0 -0
  447. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/zaif.py +0 -0
  448. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt/zonda.py +0 -0
  449. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt.egg-info/SOURCES.txt +0 -0
  450. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt.egg-info/dependency_links.txt +0 -0
  451. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt.egg-info/requires.txt +1 -1
  452. {ccxt-4.1.68 → ccxt-4.1.70}/ccxt.egg-info/top_level.txt +0 -0
  453. {ccxt-4.1.68 → ccxt-4.1.70}/setup.cfg +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.1.68
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.68/dist/ccxt.browser.js
228
- * unpkg: https://unpkg.com/ccxt@4.1.68/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.68/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.68'
25
+ __version__ = '4.1.70'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -14,6 +14,7 @@ class ImplicitAPI:
14
14
  public_get_md_trade = publicGetMdTrade = Entry('md/trade', 'public', 'GET', {'cost': 5})
15
15
  public_get_md_spot_ticker_24hr = publicGetMdSpotTicker24hr = Entry('md/spot/ticker/24hr', 'public', 'GET', {'cost': 5})
16
16
  public_get_exchange_public_cfg_chain_settings = publicGetExchangePublicCfgChainSettings = Entry('exchange/public/cfg/chain-settings', 'public', 'GET', {'cost': 5})
17
+ v1_get_md_fullbook = v1GetMdFullbook = Entry('md/fullbook', 'v1', 'GET', {'cost': 5})
17
18
  v1_get_md_orderbook = v1GetMdOrderbook = Entry('md/orderbook', 'v1', 'GET', {'cost': 5})
18
19
  v1_get_md_trade = v1GetMdTrade = Entry('md/trade', 'v1', 'GET', {'cost': 5})
19
20
  v1_get_md_ticker_24hr = v1GetMdTicker24hr = Entry('md/ticker/24hr', 'v1', 'GET', {'cost': 5})
@@ -55,6 +56,11 @@ class ImplicitAPI:
55
56
  private_get_phemex_user_users_children = privateGetPhemexUserUsersChildren = Entry('phemex-user/users/children', 'private', 'GET', {'cost': 5})
56
57
  private_get_phemex_user_wallets_v2_depositaddress = privateGetPhemexUserWalletsV2DepositAddress = Entry('phemex-user/wallets/v2/depositAddress', 'private', 'GET', {'cost': 5})
57
58
  private_get_phemex_user_wallets_tradeaccountdetail = privateGetPhemexUserWalletsTradeAccountDetail = Entry('phemex-user/wallets/tradeAccountDetail', 'private', 'GET', {'cost': 5})
59
+ private_get_phemex_deposit_wallets_api_depositaddress = privateGetPhemexDepositWalletsApiDepositAddress = Entry('phemex-deposit/wallets/api/depositAddress', 'private', 'GET', {'cost': 5})
60
+ private_get_phemex_deposit_wallets_api_deposithist = privateGetPhemexDepositWalletsApiDepositHist = Entry('phemex-deposit/wallets/api/depositHist', 'private', 'GET', {'cost': 5})
61
+ private_get_phemex_deposit_wallets_api_chaincfg = privateGetPhemexDepositWalletsApiChainCfg = Entry('phemex-deposit/wallets/api/chainCfg', 'private', 'GET', {'cost': 5})
62
+ private_get_phemex_withdraw_wallets_api_withdrawhist = privateGetPhemexWithdrawWalletsApiWithdrawHist = Entry('phemex-withdraw/wallets/api/withdrawHist', 'private', 'GET', {'cost': 5})
63
+ private_get_phemex_withdraw_wallets_api_asset_info = privateGetPhemexWithdrawWalletsApiAssetInfo = Entry('phemex-withdraw/wallets/api/asset/info', 'private', 'GET', {'cost': 5})
58
64
  private_get_phemex_user_order_closedpositionlist = privateGetPhemexUserOrderClosedPositionList = Entry('phemex-user/order/closedPositionList', 'private', 'GET', {'cost': 5})
59
65
  private_get_exchange_margins_transfer = privateGetExchangeMarginsTransfer = Entry('exchange/margins/transfer', 'private', 'GET', {'cost': 5})
60
66
  private_get_exchange_wallets_confirm_withdraw = privateGetExchangeWalletsConfirmWithdraw = Entry('exchange/wallets/confirm/withdraw', 'private', 'GET', {'cost': 5})
@@ -87,6 +93,8 @@ class ImplicitAPI:
87
93
  private_post_assets_futures_sub_accounts_transfer = privatePostAssetsFuturesSubAccountsTransfer = Entry('assets/futures/sub-accounts/transfer', 'private', 'POST', {'cost': 5})
88
94
  private_post_assets_universal_transfer = privatePostAssetsUniversalTransfer = Entry('assets/universal-transfer', 'private', 'POST', {'cost': 5})
89
95
  private_post_assets_convert = privatePostAssetsConvert = Entry('assets/convert', 'private', 'POST', {'cost': 5})
96
+ private_post_phemex_withdraw_wallets_api_createwithdraw = privatePostPhemexWithdrawWalletsApiCreateWithdraw = Entry('phemex-withdraw/wallets/api/createWithdraw', 'private', 'POST', {'cost': 5})
97
+ private_post_phemex_withdraw_wallets_api_cancelwithdraw = privatePostPhemexWithdrawWalletsApiCancelWithdraw = Entry('phemex-withdraw/wallets/api/cancelWithdraw', 'private', 'POST', {'cost': 5})
90
98
  private_put_spot_orders_create = privatePutSpotOrdersCreate = Entry('spot/orders/create', 'private', 'PUT', {'cost': 1})
91
99
  private_put_spot_orders = privatePutSpotOrders = Entry('spot/orders', 'private', 'PUT', {'cost': 1})
92
100
  private_put_orders_replace = privatePutOrdersReplace = Entry('orders/replace', 'private', 'PUT', {'cost': 1})
@@ -270,7 +270,7 @@ class ascendex(Exchange, ImplicitAPI):
270
270
  'account-category': 'cash', # 'cash', 'margin', 'futures' # obsolete
271
271
  'account-group': None,
272
272
  'fetchClosedOrders': {
273
- 'method': 'v2PrivateDataGetOrderHist', # 'v1PrivateAccountGroupGetAccountCategoryOrderHistCurrent'
273
+ 'method': 'v2PrivateDataGetOrderHist', # 'v1PrivateAccountCategoryGetOrderHistCurrent'
274
274
  },
275
275
  'defaultType': 'spot', # 'spot', 'margin', 'swap'
276
276
  'accountsByType': {
@@ -792,6 +792,9 @@ class ascendex(Exchange, ImplicitAPI):
792
792
  def fetch_balance(self, params={}) -> Balances:
793
793
  """
794
794
  query for balance and get the amount of funds available for trading or funds locked in orders
795
+ :see: https://ascendex.github.io/ascendex-pro-api/#cash-account-balance
796
+ :see: https://ascendex.github.io/ascendex-pro-api/#margin-account-balance
797
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
795
798
  :param dict [params]: extra parameters specific to the exchange API endpoint
796
799
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
797
800
  """
@@ -802,8 +805,7 @@ class ascendex(Exchange, ImplicitAPI):
802
805
  marketType, query = self.handle_market_type_and_params('fetchBalance', None, params)
803
806
  isMargin = self.safe_value(params, 'margin', False)
804
807
  marketType = 'margin' if isMargin else marketType
805
- params = self.omit(params, 'margin')
806
- options = self.safe_value(self.options, 'fetchBalance', {})
808
+ query = self.omit(query, 'margin')
807
809
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
808
810
  accountCategory = self.safe_string(accountsByType, marketType, 'cash')
809
811
  account = self.safe_value(self.accounts, 0, {})
@@ -811,15 +813,15 @@ class ascendex(Exchange, ImplicitAPI):
811
813
  request = {
812
814
  'account-group': accountGroup,
813
815
  }
814
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryGetBalance')
815
- method = self.get_supported_mapping(marketType, {
816
- 'spot': defaultMethod,
817
- 'margin': defaultMethod,
818
- 'swap': 'v2PrivateAccountGroupGetFuturesPosition',
819
- })
820
816
  if (accountCategory == 'cash') or (accountCategory == 'margin'):
821
817
  request['account-category'] = accountCategory
822
- response = getattr(self, method)(self.extend(request, query))
818
+ response = None
819
+ if (marketType == 'spot') or (marketType == 'margin'):
820
+ response = self.v1PrivateAccountCategoryGetBalance(self.extend(request, query))
821
+ elif marketType == 'swap':
822
+ response = self.v2PrivateAccountGroupGetFuturesPosition(self.extend(request, query))
823
+ else:
824
+ raise NotSupported(self.id + ' fetchBalance() is not currently supported for ' + marketType + ' markets')
823
825
  #
824
826
  # cash
825
827
  #
@@ -1675,6 +1677,8 @@ class ascendex(Exchange, ImplicitAPI):
1675
1677
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1676
1678
  """
1677
1679
  fetches information on an order made by the user
1680
+ :see: https://ascendex.github.io/ascendex-pro-api/#query-order
1681
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#query-order-by-id
1678
1682
  :param str symbol: unified symbol of the market the order was made in
1679
1683
  :param dict [params]: extra parameters specific to the exchange API endpoint
1680
1684
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1685,7 +1689,6 @@ class ascendex(Exchange, ImplicitAPI):
1685
1689
  if symbol is not None:
1686
1690
  market = self.market(symbol)
1687
1691
  type, query = self.handle_market_type_and_params('fetchOrder', market, params)
1688
- options = self.safe_value(self.options, 'fetchOrder', {})
1689
1692
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
1690
1693
  accountCategory = self.safe_string(accountsByType, type, 'cash')
1691
1694
  account = self.safe_value(self.accounts, 0, {})
@@ -1695,18 +1698,14 @@ class ascendex(Exchange, ImplicitAPI):
1695
1698
  'account-category': accountCategory,
1696
1699
  'orderId': id,
1697
1700
  }
1698
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryGetOrderStatus')
1699
- method = self.get_supported_mapping(type, {
1700
- 'spot': defaultMethod,
1701
- 'margin': defaultMethod,
1702
- 'swap': 'v2PrivateAccountGroupGetFuturesOrderStatus',
1703
- })
1704
- if method == 'v1PrivateAccountCategoryGetOrderStatus':
1705
- if accountCategory is not None:
1706
- request['category'] = accountCategory
1707
- else:
1701
+ response = None
1702
+ if (type == 'spot') or (type == 'margin'):
1703
+ response = self.v1PrivateAccountCategoryGetOrderStatus(self.extend(request, query))
1704
+ elif type == 'swap':
1708
1705
  request['account-category'] = accountCategory
1709
- response = getattr(self, method)(self.extend(request, query))
1706
+ response = self.v2PrivateAccountGroupGetFuturesOrderStatus(self.extend(request, query))
1707
+ else:
1708
+ raise NotSupported(self.id + ' fetchOrder() is not currently supported for ' + type + ' markets')
1710
1709
  #
1711
1710
  # AccountCategoryGetOrderStatus
1712
1711
  #
@@ -1780,6 +1779,8 @@ class ascendex(Exchange, ImplicitAPI):
1780
1779
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1781
1780
  """
1782
1781
  fetch all unfilled currently open orders
1782
+ :see: https://ascendex.github.io/ascendex-pro-api/#list-open-orders
1783
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#list-open-orders
1783
1784
  :param str symbol: unified market symbol
1784
1785
  :param int [since]: the earliest time in ms to fetch open orders for
1785
1786
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1801,19 +1802,14 @@ class ascendex(Exchange, ImplicitAPI):
1801
1802
  'account-group': accountGroup,
1802
1803
  'account-category': accountCategory,
1803
1804
  }
1804
- options = self.safe_value(self.options, 'fetchOpenOrders', {})
1805
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryGetOrderOpen')
1806
- method = self.get_supported_mapping(type, {
1807
- 'spot': defaultMethod,
1808
- 'margin': defaultMethod,
1809
- 'swap': 'v2PrivateAccountGroupGetFuturesOrderOpen',
1810
- })
1811
- if method == 'v1PrivateAccountCategoryGetOrderOpen':
1812
- if accountCategory is not None:
1813
- request['category'] = accountCategory
1814
- else:
1805
+ response = None
1806
+ if (type == 'spot') or (type == 'margin'):
1807
+ response = self.v1PrivateAccountCategoryGetOrderOpen(self.extend(request, query))
1808
+ elif type == 'swap':
1815
1809
  request['account-category'] = accountCategory
1816
- response = getattr(self, method)(self.extend(request, query))
1810
+ response = self.v2PrivateAccountGroupGetFuturesOrderOpen(self.extend(request, query))
1811
+ else:
1812
+ raise NotSupported(self.id + ' fetchOpenOrders() is not currently supported for ' + type + ' markets')
1817
1813
  #
1818
1814
  # AccountCategoryGetOrderOpen
1819
1815
  #
@@ -1895,6 +1891,7 @@ class ascendex(Exchange, ImplicitAPI):
1895
1891
  """
1896
1892
  fetches information on multiple closed orders made by the user
1897
1893
  :see: https://ascendex.github.io/ascendex-pro-api/#list-history-orders-v2
1894
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#list-current-history-orders
1898
1895
  :param str symbol: unified market symbol of the market orders were made in
1899
1896
  :param int [since]: the earliest time in ms to fetch orders for
1900
1897
  :param int [limit]: the maximum number of orde structures to retrieve
@@ -1907,7 +1904,6 @@ class ascendex(Exchange, ImplicitAPI):
1907
1904
  account = self.safe_value(self.accounts, 0, {})
1908
1905
  accountGroup = self.safe_value(account, 'id')
1909
1906
  request = {
1910
- 'account-group': accountGroup,
1911
1907
  # 'category': accountCategory,
1912
1908
  # 'symbol': market['id'],
1913
1909
  # 'orderType': 'market', # optional, string
@@ -1930,22 +1926,33 @@ class ascendex(Exchange, ImplicitAPI):
1930
1926
  'margin': defaultMethod,
1931
1927
  'swap': 'v2PrivateAccountGroupGetFuturesOrderHistCurrent',
1932
1928
  })
1929
+ if since is not None:
1930
+ request['startTime'] = since
1931
+ until = self.safe_string(params, 'until')
1932
+ if until is not None:
1933
+ request['endTime'] = until
1933
1934
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
1934
1935
  accountCategory = self.safe_string(accountsByType, type, 'cash') # margin, futures
1935
- if method == 'v2PrivateDataGetOrderHist':
1936
+ response = None
1937
+ if method == 'v1PrivateAccountCategoryGetOrderHistCurrent':
1938
+ request['account-group'] = accountGroup
1939
+ request['account-category'] = accountCategory
1940
+ if limit is not None:
1941
+ request['limit'] = limit
1942
+ response = self.v1PrivateAccountCategoryGetOrderHistCurrent(self.extend(request, query))
1943
+ elif method == 'v2PrivateDataGetOrderHist':
1936
1944
  request['account'] = accountCategory
1937
1945
  if limit is not None:
1938
1946
  request['limit'] = limit
1939
- else:
1947
+ response = self.v2PrivateDataGetOrderHist(self.extend(request, query))
1948
+ elif method == 'v2PrivateAccountGroupGetFuturesOrderHistCurrent':
1949
+ request['account-group'] = accountGroup
1940
1950
  request['account-category'] = accountCategory
1941
1951
  if limit is not None:
1942
1952
  request['pageSize'] = limit
1943
- if since is not None:
1944
- request['startTime'] = since
1945
- until = self.safe_string(params, 'until')
1946
- if until is not None:
1947
- request['endTime'] = until
1948
- response = getattr(self, method)(self.extend(request, query))
1953
+ response = self.v2PrivateAccountGroupGetFuturesOrderHistCurrent(self.extend(request, query))
1954
+ else:
1955
+ raise NotSupported(self.id + ' fetchClosedOrders() is not currently supported for ' + type + ' markets')
1949
1956
  #
1950
1957
  # accountCategoryGetOrderHistCurrent
1951
1958
  #
@@ -2046,6 +2053,8 @@ class ascendex(Exchange, ImplicitAPI):
2046
2053
  def cancel_order(self, id: str, symbol: Str = None, params={}):
2047
2054
  """
2048
2055
  cancels an open order
2056
+ :see: https://ascendex.github.io/ascendex-pro-api/#cancel-order
2057
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#cancel-order
2049
2058
  :param str id: order id
2050
2059
  :param str symbol: unified symbol of the market the order was made in
2051
2060
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2057,7 +2066,6 @@ class ascendex(Exchange, ImplicitAPI):
2057
2066
  self.load_accounts()
2058
2067
  market = self.market(symbol)
2059
2068
  type, query = self.handle_market_type_and_params('cancelOrder', market, params)
2060
- options = self.safe_value(self.options, 'cancelOrder', {})
2061
2069
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
2062
2070
  accountCategory = self.safe_string(accountsByType, type, 'cash')
2063
2071
  account = self.safe_value(self.accounts, 0, {})
@@ -2069,24 +2077,20 @@ class ascendex(Exchange, ImplicitAPI):
2069
2077
  'time': self.milliseconds(),
2070
2078
  'id': 'foobar',
2071
2079
  }
2072
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryDeleteOrder')
2073
- method = self.get_supported_mapping(type, {
2074
- 'spot': defaultMethod,
2075
- 'margin': defaultMethod,
2076
- 'swap': 'v2PrivateAccountGroupDeleteFuturesOrder',
2077
- })
2078
- if method == 'v1PrivateAccountCategoryDeleteOrder':
2079
- if accountCategory is not None:
2080
- request['category'] = accountCategory
2081
- else:
2082
- request['account-category'] = accountCategory
2083
2080
  clientOrderId = self.safe_string_2(params, 'clientOrderId', 'id')
2084
2081
  if clientOrderId is None:
2085
2082
  request['orderId'] = id
2086
2083
  else:
2087
2084
  request['id'] = clientOrderId
2088
2085
  params = self.omit(params, ['clientOrderId', 'id'])
2089
- response = getattr(self, method)(self.extend(request, query))
2086
+ response = None
2087
+ if (type == 'spot') or (type == 'margin'):
2088
+ response = self.v1PrivateAccountCategoryDeleteOrder(self.extend(request, query))
2089
+ elif type == 'swap':
2090
+ request['account-category'] = accountCategory
2091
+ response = self.v2PrivateAccountGroupDeleteFuturesOrder(self.extend(request, query))
2092
+ else:
2093
+ raise NotSupported(self.id + ' cancelOrder() is not currently supported for ' + type + ' markets')
2090
2094
  #
2091
2095
  # AccountCategoryDeleteOrder
2092
2096
  #
@@ -2157,6 +2161,8 @@ class ascendex(Exchange, ImplicitAPI):
2157
2161
  def cancel_all_orders(self, symbol: Str = None, params={}):
2158
2162
  """
2159
2163
  cancel all open orders
2164
+ :see: https://ascendex.github.io/ascendex-pro-api/#cancel-all-orders
2165
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#cancel-all-open-orders
2160
2166
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
2161
2167
  :param dict [params]: extra parameters specific to the exchange API endpoint
2162
2168
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -2167,7 +2173,6 @@ class ascendex(Exchange, ImplicitAPI):
2167
2173
  if symbol is not None:
2168
2174
  market = self.market(symbol)
2169
2175
  type, query = self.handle_market_type_and_params('cancelAllOrders', market, params)
2170
- options = self.safe_value(self.options, 'cancelAllOrders', {})
2171
2176
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
2172
2177
  accountCategory = self.safe_string(accountsByType, type, 'cash')
2173
2178
  account = self.safe_value(self.accounts, 0, {})
@@ -2179,18 +2184,14 @@ class ascendex(Exchange, ImplicitAPI):
2179
2184
  }
2180
2185
  if symbol is not None:
2181
2186
  request['symbol'] = market['id']
2182
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryDeleteOrderAll')
2183
- method = self.get_supported_mapping(type, {
2184
- 'spot': defaultMethod,
2185
- 'margin': defaultMethod,
2186
- 'swap': 'v2PrivateAccountGroupDeleteFuturesOrderAll',
2187
- })
2188
- if method == 'v1PrivateAccountCategoryDeleteOrderAll':
2189
- if accountCategory is not None:
2190
- request['category'] = accountCategory
2191
- else:
2187
+ response = None
2188
+ if (type == 'spot') or (type == 'margin'):
2189
+ response = self.v1PrivateAccountCategoryDeleteOrderAll(self.extend(request, query))
2190
+ elif type == 'swap':
2192
2191
  request['account-category'] = accountCategory
2193
- response = getattr(self, method)(self.extend(request, query))
2192
+ response = self.v2PrivateAccountGroupDeleteFuturesOrderAll(self.extend(request, query))
2193
+ else:
2194
+ raise NotSupported(self.id + ' cancelAllOrders() is not currently supported for ' + type + ' markets')
2194
2195
  #
2195
2196
  # AccountCategoryDeleteOrderAll
2196
2197
  #
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.68'
7
+ __version__ = '4.1.70'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -270,7 +270,7 @@ class ascendex(Exchange, ImplicitAPI):
270
270
  'account-category': 'cash', # 'cash', 'margin', 'futures' # obsolete
271
271
  'account-group': None,
272
272
  'fetchClosedOrders': {
273
- 'method': 'v2PrivateDataGetOrderHist', # 'v1PrivateAccountGroupGetAccountCategoryOrderHistCurrent'
273
+ 'method': 'v2PrivateDataGetOrderHist', # 'v1PrivateAccountCategoryGetOrderHistCurrent'
274
274
  },
275
275
  'defaultType': 'spot', # 'spot', 'margin', 'swap'
276
276
  'accountsByType': {
@@ -792,6 +792,9 @@ class ascendex(Exchange, ImplicitAPI):
792
792
  async def fetch_balance(self, params={}) -> Balances:
793
793
  """
794
794
  query for balance and get the amount of funds available for trading or funds locked in orders
795
+ :see: https://ascendex.github.io/ascendex-pro-api/#cash-account-balance
796
+ :see: https://ascendex.github.io/ascendex-pro-api/#margin-account-balance
797
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#position
795
798
  :param dict [params]: extra parameters specific to the exchange API endpoint
796
799
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
797
800
  """
@@ -802,8 +805,7 @@ class ascendex(Exchange, ImplicitAPI):
802
805
  marketType, query = self.handle_market_type_and_params('fetchBalance', None, params)
803
806
  isMargin = self.safe_value(params, 'margin', False)
804
807
  marketType = 'margin' if isMargin else marketType
805
- params = self.omit(params, 'margin')
806
- options = self.safe_value(self.options, 'fetchBalance', {})
808
+ query = self.omit(query, 'margin')
807
809
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
808
810
  accountCategory = self.safe_string(accountsByType, marketType, 'cash')
809
811
  account = self.safe_value(self.accounts, 0, {})
@@ -811,15 +813,15 @@ class ascendex(Exchange, ImplicitAPI):
811
813
  request = {
812
814
  'account-group': accountGroup,
813
815
  }
814
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryGetBalance')
815
- method = self.get_supported_mapping(marketType, {
816
- 'spot': defaultMethod,
817
- 'margin': defaultMethod,
818
- 'swap': 'v2PrivateAccountGroupGetFuturesPosition',
819
- })
820
816
  if (accountCategory == 'cash') or (accountCategory == 'margin'):
821
817
  request['account-category'] = accountCategory
822
- response = await getattr(self, method)(self.extend(request, query))
818
+ response = None
819
+ if (marketType == 'spot') or (marketType == 'margin'):
820
+ response = await self.v1PrivateAccountCategoryGetBalance(self.extend(request, query))
821
+ elif marketType == 'swap':
822
+ response = await self.v2PrivateAccountGroupGetFuturesPosition(self.extend(request, query))
823
+ else:
824
+ raise NotSupported(self.id + ' fetchBalance() is not currently supported for ' + marketType + ' markets')
823
825
  #
824
826
  # cash
825
827
  #
@@ -1675,6 +1677,8 @@ class ascendex(Exchange, ImplicitAPI):
1675
1677
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1676
1678
  """
1677
1679
  fetches information on an order made by the user
1680
+ :see: https://ascendex.github.io/ascendex-pro-api/#query-order
1681
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#query-order-by-id
1678
1682
  :param str symbol: unified symbol of the market the order was made in
1679
1683
  :param dict [params]: extra parameters specific to the exchange API endpoint
1680
1684
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1685,7 +1689,6 @@ class ascendex(Exchange, ImplicitAPI):
1685
1689
  if symbol is not None:
1686
1690
  market = self.market(symbol)
1687
1691
  type, query = self.handle_market_type_and_params('fetchOrder', market, params)
1688
- options = self.safe_value(self.options, 'fetchOrder', {})
1689
1692
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
1690
1693
  accountCategory = self.safe_string(accountsByType, type, 'cash')
1691
1694
  account = self.safe_value(self.accounts, 0, {})
@@ -1695,18 +1698,14 @@ class ascendex(Exchange, ImplicitAPI):
1695
1698
  'account-category': accountCategory,
1696
1699
  'orderId': id,
1697
1700
  }
1698
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryGetOrderStatus')
1699
- method = self.get_supported_mapping(type, {
1700
- 'spot': defaultMethod,
1701
- 'margin': defaultMethod,
1702
- 'swap': 'v2PrivateAccountGroupGetFuturesOrderStatus',
1703
- })
1704
- if method == 'v1PrivateAccountCategoryGetOrderStatus':
1705
- if accountCategory is not None:
1706
- request['category'] = accountCategory
1707
- else:
1701
+ response = None
1702
+ if (type == 'spot') or (type == 'margin'):
1703
+ response = await self.v1PrivateAccountCategoryGetOrderStatus(self.extend(request, query))
1704
+ elif type == 'swap':
1708
1705
  request['account-category'] = accountCategory
1709
- response = await getattr(self, method)(self.extend(request, query))
1706
+ response = await self.v2PrivateAccountGroupGetFuturesOrderStatus(self.extend(request, query))
1707
+ else:
1708
+ raise NotSupported(self.id + ' fetchOrder() is not currently supported for ' + type + ' markets')
1710
1709
  #
1711
1710
  # AccountCategoryGetOrderStatus
1712
1711
  #
@@ -1780,6 +1779,8 @@ class ascendex(Exchange, ImplicitAPI):
1780
1779
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1781
1780
  """
1782
1781
  fetch all unfilled currently open orders
1782
+ :see: https://ascendex.github.io/ascendex-pro-api/#list-open-orders
1783
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#list-open-orders
1783
1784
  :param str symbol: unified market symbol
1784
1785
  :param int [since]: the earliest time in ms to fetch open orders for
1785
1786
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1801,19 +1802,14 @@ class ascendex(Exchange, ImplicitAPI):
1801
1802
  'account-group': accountGroup,
1802
1803
  'account-category': accountCategory,
1803
1804
  }
1804
- options = self.safe_value(self.options, 'fetchOpenOrders', {})
1805
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryGetOrderOpen')
1806
- method = self.get_supported_mapping(type, {
1807
- 'spot': defaultMethod,
1808
- 'margin': defaultMethod,
1809
- 'swap': 'v2PrivateAccountGroupGetFuturesOrderOpen',
1810
- })
1811
- if method == 'v1PrivateAccountCategoryGetOrderOpen':
1812
- if accountCategory is not None:
1813
- request['category'] = accountCategory
1814
- else:
1805
+ response = None
1806
+ if (type == 'spot') or (type == 'margin'):
1807
+ response = await self.v1PrivateAccountCategoryGetOrderOpen(self.extend(request, query))
1808
+ elif type == 'swap':
1815
1809
  request['account-category'] = accountCategory
1816
- response = await getattr(self, method)(self.extend(request, query))
1810
+ response = await self.v2PrivateAccountGroupGetFuturesOrderOpen(self.extend(request, query))
1811
+ else:
1812
+ raise NotSupported(self.id + ' fetchOpenOrders() is not currently supported for ' + type + ' markets')
1817
1813
  #
1818
1814
  # AccountCategoryGetOrderOpen
1819
1815
  #
@@ -1895,6 +1891,7 @@ class ascendex(Exchange, ImplicitAPI):
1895
1891
  """
1896
1892
  fetches information on multiple closed orders made by the user
1897
1893
  :see: https://ascendex.github.io/ascendex-pro-api/#list-history-orders-v2
1894
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#list-current-history-orders
1898
1895
  :param str symbol: unified market symbol of the market orders were made in
1899
1896
  :param int [since]: the earliest time in ms to fetch orders for
1900
1897
  :param int [limit]: the maximum number of orde structures to retrieve
@@ -1907,7 +1904,6 @@ class ascendex(Exchange, ImplicitAPI):
1907
1904
  account = self.safe_value(self.accounts, 0, {})
1908
1905
  accountGroup = self.safe_value(account, 'id')
1909
1906
  request = {
1910
- 'account-group': accountGroup,
1911
1907
  # 'category': accountCategory,
1912
1908
  # 'symbol': market['id'],
1913
1909
  # 'orderType': 'market', # optional, string
@@ -1930,22 +1926,33 @@ class ascendex(Exchange, ImplicitAPI):
1930
1926
  'margin': defaultMethod,
1931
1927
  'swap': 'v2PrivateAccountGroupGetFuturesOrderHistCurrent',
1932
1928
  })
1929
+ if since is not None:
1930
+ request['startTime'] = since
1931
+ until = self.safe_string(params, 'until')
1932
+ if until is not None:
1933
+ request['endTime'] = until
1933
1934
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
1934
1935
  accountCategory = self.safe_string(accountsByType, type, 'cash') # margin, futures
1935
- if method == 'v2PrivateDataGetOrderHist':
1936
+ response = None
1937
+ if method == 'v1PrivateAccountCategoryGetOrderHistCurrent':
1938
+ request['account-group'] = accountGroup
1939
+ request['account-category'] = accountCategory
1940
+ if limit is not None:
1941
+ request['limit'] = limit
1942
+ response = await self.v1PrivateAccountCategoryGetOrderHistCurrent(self.extend(request, query))
1943
+ elif method == 'v2PrivateDataGetOrderHist':
1936
1944
  request['account'] = accountCategory
1937
1945
  if limit is not None:
1938
1946
  request['limit'] = limit
1939
- else:
1947
+ response = await self.v2PrivateDataGetOrderHist(self.extend(request, query))
1948
+ elif method == 'v2PrivateAccountGroupGetFuturesOrderHistCurrent':
1949
+ request['account-group'] = accountGroup
1940
1950
  request['account-category'] = accountCategory
1941
1951
  if limit is not None:
1942
1952
  request['pageSize'] = limit
1943
- if since is not None:
1944
- request['startTime'] = since
1945
- until = self.safe_string(params, 'until')
1946
- if until is not None:
1947
- request['endTime'] = until
1948
- response = await getattr(self, method)(self.extend(request, query))
1953
+ response = await self.v2PrivateAccountGroupGetFuturesOrderHistCurrent(self.extend(request, query))
1954
+ else:
1955
+ raise NotSupported(self.id + ' fetchClosedOrders() is not currently supported for ' + type + ' markets')
1949
1956
  #
1950
1957
  # accountCategoryGetOrderHistCurrent
1951
1958
  #
@@ -2046,6 +2053,8 @@ class ascendex(Exchange, ImplicitAPI):
2046
2053
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
2047
2054
  """
2048
2055
  cancels an open order
2056
+ :see: https://ascendex.github.io/ascendex-pro-api/#cancel-order
2057
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#cancel-order
2049
2058
  :param str id: order id
2050
2059
  :param str symbol: unified symbol of the market the order was made in
2051
2060
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2057,7 +2066,6 @@ class ascendex(Exchange, ImplicitAPI):
2057
2066
  await self.load_accounts()
2058
2067
  market = self.market(symbol)
2059
2068
  type, query = self.handle_market_type_and_params('cancelOrder', market, params)
2060
- options = self.safe_value(self.options, 'cancelOrder', {})
2061
2069
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
2062
2070
  accountCategory = self.safe_string(accountsByType, type, 'cash')
2063
2071
  account = self.safe_value(self.accounts, 0, {})
@@ -2069,24 +2077,20 @@ class ascendex(Exchange, ImplicitAPI):
2069
2077
  'time': self.milliseconds(),
2070
2078
  'id': 'foobar',
2071
2079
  }
2072
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryDeleteOrder')
2073
- method = self.get_supported_mapping(type, {
2074
- 'spot': defaultMethod,
2075
- 'margin': defaultMethod,
2076
- 'swap': 'v2PrivateAccountGroupDeleteFuturesOrder',
2077
- })
2078
- if method == 'v1PrivateAccountCategoryDeleteOrder':
2079
- if accountCategory is not None:
2080
- request['category'] = accountCategory
2081
- else:
2082
- request['account-category'] = accountCategory
2083
2080
  clientOrderId = self.safe_string_2(params, 'clientOrderId', 'id')
2084
2081
  if clientOrderId is None:
2085
2082
  request['orderId'] = id
2086
2083
  else:
2087
2084
  request['id'] = clientOrderId
2088
2085
  params = self.omit(params, ['clientOrderId', 'id'])
2089
- response = await getattr(self, method)(self.extend(request, query))
2086
+ response = None
2087
+ if (type == 'spot') or (type == 'margin'):
2088
+ response = await self.v1PrivateAccountCategoryDeleteOrder(self.extend(request, query))
2089
+ elif type == 'swap':
2090
+ request['account-category'] = accountCategory
2091
+ response = await self.v2PrivateAccountGroupDeleteFuturesOrder(self.extend(request, query))
2092
+ else:
2093
+ raise NotSupported(self.id + ' cancelOrder() is not currently supported for ' + type + ' markets')
2090
2094
  #
2091
2095
  # AccountCategoryDeleteOrder
2092
2096
  #
@@ -2157,6 +2161,8 @@ class ascendex(Exchange, ImplicitAPI):
2157
2161
  async def cancel_all_orders(self, symbol: Str = None, params={}):
2158
2162
  """
2159
2163
  cancel all open orders
2164
+ :see: https://ascendex.github.io/ascendex-pro-api/#cancel-all-orders
2165
+ :see: https://ascendex.github.io/ascendex-futures-pro-api-v2/#cancel-all-open-orders
2160
2166
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
2161
2167
  :param dict [params]: extra parameters specific to the exchange API endpoint
2162
2168
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -2167,7 +2173,6 @@ class ascendex(Exchange, ImplicitAPI):
2167
2173
  if symbol is not None:
2168
2174
  market = self.market(symbol)
2169
2175
  type, query = self.handle_market_type_and_params('cancelAllOrders', market, params)
2170
- options = self.safe_value(self.options, 'cancelAllOrders', {})
2171
2176
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
2172
2177
  accountCategory = self.safe_string(accountsByType, type, 'cash')
2173
2178
  account = self.safe_value(self.accounts, 0, {})
@@ -2179,18 +2184,14 @@ class ascendex(Exchange, ImplicitAPI):
2179
2184
  }
2180
2185
  if symbol is not None:
2181
2186
  request['symbol'] = market['id']
2182
- defaultMethod = self.safe_string(options, 'method', 'v1PrivateAccountCategoryDeleteOrderAll')
2183
- method = self.get_supported_mapping(type, {
2184
- 'spot': defaultMethod,
2185
- 'margin': defaultMethod,
2186
- 'swap': 'v2PrivateAccountGroupDeleteFuturesOrderAll',
2187
- })
2188
- if method == 'v1PrivateAccountCategoryDeleteOrderAll':
2189
- if accountCategory is not None:
2190
- request['category'] = accountCategory
2191
- else:
2187
+ response = None
2188
+ if (type == 'spot') or (type == 'margin'):
2189
+ response = await self.v1PrivateAccountCategoryDeleteOrderAll(self.extend(request, query))
2190
+ elif type == 'swap':
2192
2191
  request['account-category'] = accountCategory
2193
- response = await getattr(self, method)(self.extend(request, query))
2192
+ response = await self.v2PrivateAccountGroupDeleteFuturesOrderAll(self.extend(request, query))
2193
+ else:
2194
+ raise NotSupported(self.id + ' cancelAllOrders() is not currently supported for ' + type + ' markets')
2194
2195
  #
2195
2196
  # AccountCategoryDeleteOrderAll
2196
2197
  #
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.1.68'
5
+ __version__ = '4.1.70'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8