ccxt 3.0.96__tar.gz → 3.0.98__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.

Potentially problematic release.


This version of ccxt might be problematic. Click here for more details.

Files changed (473) hide show
  1. {ccxt-3.0.96/ccxt.egg-info → ccxt-3.0.98}/PKG-INFO +4 -4
  2. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/__init__.py +1 -1
  3. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/__init__.py +1 -1
  4. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/exchange.py +1 -1
  5. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinex.py +10 -1
  6. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/huobi.py +168 -92
  7. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/phemex.py +2 -2
  8. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/base/exchange.py +2 -2
  9. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinex.py +10 -1
  10. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/huobi.py +168 -92
  11. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/phemex.py +2 -2
  12. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/__init__.py +1 -1
  13. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitfinex2.py +8 -4
  14. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/deribit.py +2 -0
  15. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/test_async.py +3 -5
  16. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/test_sync.py +3 -5
  17. {ccxt-3.0.96 → ccxt-3.0.98/ccxt.egg-info}/PKG-INFO +4 -4
  18. {ccxt-3.0.96 → ccxt-3.0.98}/package.json +1 -1
  19. {ccxt-3.0.96 → ccxt-3.0.98}/LICENSE.txt +0 -0
  20. {ccxt-3.0.96 → ccxt-3.0.98}/MANIFEST.in +0 -0
  21. {ccxt-3.0.96 → ccxt-3.0.98}/README.rst +0 -0
  22. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/__init__.py +0 -0
  23. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/ace.py +0 -0
  24. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/alpaca.py +0 -0
  25. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/ascendex.py +0 -0
  26. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bequant.py +0 -0
  27. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bigone.py +0 -0
  28. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/binance.py +0 -0
  29. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/binancecoinm.py +0 -0
  30. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/binanceus.py +0 -0
  31. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/binanceusdm.py +0 -0
  32. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bit2c.py +0 -0
  33. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitbank.py +0 -0
  34. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitbay.py +0 -0
  35. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitbns.py +0 -0
  36. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitcoincom.py +0 -0
  37. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitfinex.py +0 -0
  38. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitfinex2.py +0 -0
  39. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitflyer.py +0 -0
  40. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitforex.py +0 -0
  41. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitget.py +0 -0
  42. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bithumb.py +0 -0
  43. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitmart.py +0 -0
  44. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitmex.py +0 -0
  45. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitopro.py +0 -0
  46. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitpanda.py +0 -0
  47. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitrue.py +0 -0
  48. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitso.py +0 -0
  49. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitstamp.py +0 -0
  50. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitstamp1.py +0 -0
  51. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bittrex.py +0 -0
  52. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bitvavo.py +0 -0
  53. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bkex.py +0 -0
  54. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bl3p.py +0 -0
  55. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/blockchaincom.py +0 -0
  56. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/btcalpha.py +0 -0
  57. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/btcbox.py +0 -0
  58. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/btcex.py +0 -0
  59. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/btcmarkets.py +0 -0
  60. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/btctradeua.py +0 -0
  61. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/btcturk.py +0 -0
  62. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/bybit.py +0 -0
  63. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/cex.py +0 -0
  64. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinbase.py +0 -0
  65. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinbaseprime.py +0 -0
  66. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinbasepro.py +0 -0
  67. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coincheck.py +0 -0
  68. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinex.py +0 -0
  69. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinfalcon.py +0 -0
  70. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinmate.py +0 -0
  71. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinone.py +0 -0
  72. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinsph.py +0 -0
  73. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/coinspot.py +0 -0
  74. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/cryptocom.py +0 -0
  75. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/currencycom.py +0 -0
  76. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/delta.py +0 -0
  77. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/deribit.py +0 -0
  78. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/digifinex.py +0 -0
  79. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/exmo.py +0 -0
  80. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/fmfwio.py +0 -0
  81. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/gate.py +0 -0
  82. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/gateio.py +0 -0
  83. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/gemini.py +0 -0
  84. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/hitbtc.py +0 -0
  85. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/hitbtc3.py +0 -0
  86. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/hollaex.py +0 -0
  87. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/huobi.py +0 -0
  88. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/huobijp.py +0 -0
  89. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/huobipro.py +0 -0
  90. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/idex.py +0 -0
  91. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/independentreserve.py +0 -0
  92. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/indodax.py +0 -0
  93. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/kraken.py +0 -0
  94. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/krakenfutures.py +0 -0
  95. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/kucoin.py +0 -0
  96. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/kucoinfutures.py +0 -0
  97. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/kuna.py +0 -0
  98. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/latoken.py +0 -0
  99. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/lbank.py +0 -0
  100. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/lbank2.py +0 -0
  101. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/luno.py +0 -0
  102. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/lykke.py +0 -0
  103. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/mercado.py +0 -0
  104. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/mexc.py +0 -0
  105. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/mexc3.py +0 -0
  106. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/ndax.py +0 -0
  107. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/novadax.py +0 -0
  108. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/oceanex.py +0 -0
  109. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/okcoin.py +0 -0
  110. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/okex.py +0 -0
  111. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/okex5.py +0 -0
  112. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/okx.py +0 -0
  113. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/paymium.py +0 -0
  114. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/phemex.py +0 -0
  115. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/poloniex.py +0 -0
  116. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/poloniexfutures.py +0 -0
  117. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/probit.py +0 -0
  118. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/stex.py +0 -0
  119. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/tidex.py +0 -0
  120. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/timex.py +0 -0
  121. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/tokocrypto.py +0 -0
  122. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/upbit.py +0 -0
  123. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/wavesexchange.py +0 -0
  124. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/wazirx.py +0 -0
  125. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/whitebit.py +0 -0
  126. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/woo.py +0 -0
  127. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/xt.py +0 -0
  128. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/yobit.py +0 -0
  129. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/zaif.py +0 -0
  130. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/abstract/zonda.py +0 -0
  131. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/ace.py +0 -0
  132. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/alpaca.py +0 -0
  133. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/ascendex.py +0 -0
  134. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/ace.py +0 -0
  135. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/alpaca.py +0 -0
  136. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/ascendex.py +0 -0
  137. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/__init__.py +0 -0
  138. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/throttler.py +0 -0
  139. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/__init__.py +0 -0
  140. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  141. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/cache.py +0 -0
  142. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/client.py +0 -0
  143. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/fast_client.py +0 -0
  144. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/functions.py +0 -0
  145. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/future.py +0 -0
  146. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/order_book.py +0 -0
  147. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  148. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bequant.py +0 -0
  149. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bigone.py +0 -0
  150. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/binance.py +0 -0
  151. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/binancecoinm.py +0 -0
  152. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/binanceus.py +0 -0
  153. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/binanceusdm.py +0 -0
  154. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bit2c.py +0 -0
  155. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitbank.py +0 -0
  156. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitbay.py +0 -0
  157. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitbns.py +0 -0
  158. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitcoincom.py +0 -0
  159. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitfinex.py +0 -0
  160. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitfinex2.py +0 -0
  161. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitflyer.py +0 -0
  162. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitforex.py +0 -0
  163. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitget.py +0 -0
  164. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bithumb.py +0 -0
  165. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitmart.py +0 -0
  166. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitmex.py +0 -0
  167. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitopro.py +0 -0
  168. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitpanda.py +0 -0
  169. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitrue.py +0 -0
  170. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitso.py +0 -0
  171. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitstamp.py +0 -0
  172. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitstamp1.py +0 -0
  173. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bittrex.py +0 -0
  174. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bitvavo.py +0 -0
  175. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bkex.py +0 -0
  176. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bl3p.py +0 -0
  177. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/blockchaincom.py +0 -0
  178. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/btcalpha.py +0 -0
  179. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/btcbox.py +0 -0
  180. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/btcex.py +0 -0
  181. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/btcmarkets.py +0 -0
  182. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/btctradeua.py +0 -0
  183. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/btcturk.py +0 -0
  184. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/buda.py +0 -0
  185. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/bybit.py +0 -0
  186. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/cex.py +0 -0
  187. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinbase.py +0 -0
  188. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinbaseprime.py +0 -0
  189. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinbasepro.py +0 -0
  190. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coincheck.py +0 -0
  191. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinfalcon.py +0 -0
  192. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinmate.py +0 -0
  193. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinone.py +0 -0
  194. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinsph.py +0 -0
  195. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/coinspot.py +0 -0
  196. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/cryptocom.py +0 -0
  197. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/currencycom.py +0 -0
  198. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/delta.py +0 -0
  199. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/deribit.py +0 -0
  200. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/digifinex.py +0 -0
  201. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/exmo.py +0 -0
  202. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/flowbtc.py +0 -0
  203. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/fmfwio.py +0 -0
  204. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/gate.py +0 -0
  205. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/gateio.py +0 -0
  206. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/gemini.py +0 -0
  207. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/hitbtc.py +0 -0
  208. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/hitbtc3.py +0 -0
  209. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/hollaex.py +0 -0
  210. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/huobijp.py +0 -0
  211. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/huobipro.py +0 -0
  212. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/idex.py +0 -0
  213. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/independentreserve.py +0 -0
  214. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/indodax.py +0 -0
  215. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/itbit.py +0 -0
  216. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/kraken.py +0 -0
  217. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/krakenfutures.py +0 -0
  218. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/kucoin.py +0 -0
  219. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/kucoinfutures.py +0 -0
  220. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/kuna.py +0 -0
  221. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/latoken.py +0 -0
  222. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/lbank.py +0 -0
  223. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/lbank2.py +0 -0
  224. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/luno.py +0 -0
  225. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/lykke.py +0 -0
  226. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/mercado.py +0 -0
  227. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/mexc.py +0 -0
  228. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/mexc3.py +0 -0
  229. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/ndax.py +0 -0
  230. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/novadax.py +0 -0
  231. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/oceanex.py +0 -0
  232. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/okcoin.py +0 -0
  233. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/okex.py +0 -0
  234. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/okex5.py +0 -0
  235. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/okx.py +0 -0
  236. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/paymium.py +0 -0
  237. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/poloniex.py +0 -0
  238. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/poloniexfutures.py +0 -0
  239. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/probit.py +0 -0
  240. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/ripio.py +0 -0
  241. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/stex.py +0 -0
  242. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/tidex.py +0 -0
  243. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/timex.py +0 -0
  244. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/tokocrypto.py +0 -0
  245. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/upbit.py +0 -0
  246. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/wavesexchange.py +0 -0
  247. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/wazirx.py +0 -0
  248. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/whitebit.py +0 -0
  249. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/woo.py +0 -0
  250. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/xt.py +0 -0
  251. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/yobit.py +0 -0
  252. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/zaif.py +0 -0
  253. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/zb.py +0 -0
  254. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/async_support/zonda.py +0 -0
  255. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/base/__init__.py +0 -0
  256. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/base/decimal_to_precision.py +0 -0
  257. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/base/errors.py +0 -0
  258. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/base/precise.py +0 -0
  259. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/base/types.py +0 -0
  260. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bequant.py +0 -0
  261. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bigone.py +0 -0
  262. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/binance.py +0 -0
  263. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/binancecoinm.py +0 -0
  264. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/binanceus.py +0 -0
  265. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/binanceusdm.py +0 -0
  266. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bit2c.py +0 -0
  267. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitbank.py +0 -0
  268. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitbay.py +0 -0
  269. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitbns.py +0 -0
  270. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitcoincom.py +0 -0
  271. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitfinex.py +0 -0
  272. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitfinex2.py +0 -0
  273. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitflyer.py +0 -0
  274. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitforex.py +0 -0
  275. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitget.py +0 -0
  276. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bithumb.py +0 -0
  277. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitmart.py +0 -0
  278. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitmex.py +0 -0
  279. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitopro.py +0 -0
  280. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitpanda.py +0 -0
  281. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitrue.py +0 -0
  282. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitso.py +0 -0
  283. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitstamp.py +0 -0
  284. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitstamp1.py +0 -0
  285. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bittrex.py +0 -0
  286. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bitvavo.py +0 -0
  287. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bkex.py +0 -0
  288. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bl3p.py +0 -0
  289. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/blockchaincom.py +0 -0
  290. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/btcalpha.py +0 -0
  291. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/btcbox.py +0 -0
  292. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/btcex.py +0 -0
  293. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/btcmarkets.py +0 -0
  294. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/btctradeua.py +0 -0
  295. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/btcturk.py +0 -0
  296. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/buda.py +0 -0
  297. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/bybit.py +0 -0
  298. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/cex.py +0 -0
  299. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinbase.py +0 -0
  300. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinbaseprime.py +0 -0
  301. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinbasepro.py +0 -0
  302. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coincheck.py +0 -0
  303. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinfalcon.py +0 -0
  304. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinmate.py +0 -0
  305. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinone.py +0 -0
  306. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinsph.py +0 -0
  307. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/coinspot.py +0 -0
  308. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/cryptocom.py +0 -0
  309. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/currencycom.py +0 -0
  310. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/delta.py +0 -0
  311. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/deribit.py +0 -0
  312. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/digifinex.py +0 -0
  313. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/exmo.py +0 -0
  314. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/flowbtc.py +0 -0
  315. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/fmfwio.py +0 -0
  316. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/gate.py +0 -0
  317. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/gateio.py +0 -0
  318. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/gemini.py +0 -0
  319. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/hitbtc.py +0 -0
  320. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/hitbtc3.py +0 -0
  321. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/hollaex.py +0 -0
  322. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/huobijp.py +0 -0
  323. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/huobipro.py +0 -0
  324. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/idex.py +0 -0
  325. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/independentreserve.py +0 -0
  326. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/indodax.py +0 -0
  327. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/itbit.py +0 -0
  328. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/kraken.py +0 -0
  329. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/krakenfutures.py +0 -0
  330. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/kucoin.py +0 -0
  331. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/kucoinfutures.py +0 -0
  332. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/kuna.py +0 -0
  333. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/latoken.py +0 -0
  334. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/lbank.py +0 -0
  335. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/lbank2.py +0 -0
  336. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/luno.py +0 -0
  337. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/lykke.py +0 -0
  338. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/mercado.py +0 -0
  339. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/mexc.py +0 -0
  340. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/mexc3.py +0 -0
  341. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/ndax.py +0 -0
  342. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/novadax.py +0 -0
  343. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/oceanex.py +0 -0
  344. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/okcoin.py +0 -0
  345. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/okex.py +0 -0
  346. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/okex5.py +0 -0
  347. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/okx.py +0 -0
  348. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/paymium.py +0 -0
  349. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/poloniex.py +0 -0
  350. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/poloniexfutures.py +0 -0
  351. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/alpaca.py +0 -0
  352. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/ascendex.py +0 -0
  353. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bequant.py +0 -0
  354. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/binance.py +0 -0
  355. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/binancecoinm.py +0 -0
  356. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/binanceus.py +0 -0
  357. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/binanceusdm.py +0 -0
  358. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitcoincom.py +0 -0
  359. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitfinex.py +0 -0
  360. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitget.py +0 -0
  361. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitmart.py +0 -0
  362. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitmex.py +0 -0
  363. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitopro.py +0 -0
  364. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitrue.py +0 -0
  365. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitstamp.py +0 -0
  366. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bittrex.py +0 -0
  367. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bitvavo.py +0 -0
  368. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/btcex.py +0 -0
  369. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/bybit.py +0 -0
  370. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/cex.py +0 -0
  371. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/coinbaseprime.py +0 -0
  372. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/coinbasepro.py +0 -0
  373. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/coinex.py +0 -0
  374. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/cryptocom.py +0 -0
  375. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/currencycom.py +0 -0
  376. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/exmo.py +0 -0
  377. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/gate.py +0 -0
  378. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/gateio.py +0 -0
  379. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/gemini.py +0 -0
  380. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/hitbtc.py +0 -0
  381. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/hollaex.py +0 -0
  382. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/huobi.py +0 -0
  383. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/huobijp.py +0 -0
  384. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/huobipro.py +0 -0
  385. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/idex.py +0 -0
  386. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/independentreserve.py +0 -0
  387. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/kraken.py +0 -0
  388. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/krakenfutures.py +0 -0
  389. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/kucoin.py +0 -0
  390. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/kucoinfutures.py +0 -0
  391. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/luno.py +0 -0
  392. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/mexc.py +0 -0
  393. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/mexc3.py +0 -0
  394. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/ndax.py +0 -0
  395. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/okcoin.py +0 -0
  396. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/okex.py +0 -0
  397. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/okx.py +0 -0
  398. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/phemex.py +0 -0
  399. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/probit.py +0 -0
  400. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/ripio.py +0 -0
  401. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/upbit.py +0 -0
  402. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/wazirx.py +0 -0
  403. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/whitebit.py +0 -0
  404. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/woo.py +0 -0
  405. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/pro/zb.py +0 -0
  406. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/probit.py +0 -0
  407. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/ripio.py +0 -0
  408. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/__init__.py +0 -0
  409. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  410. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  411. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  412. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  413. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  414. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  415. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  416. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  417. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  418. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  419. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  420. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  421. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/stex.py +0 -0
  422. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/__init__.py +0 -0
  423. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/__init__.py +0 -0
  424. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_account.py +0 -0
  425. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_balance.py +0 -0
  426. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_borrow_interest.py +0 -0
  427. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_borrow_rate.py +0 -0
  428. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_calculate_fee.py +0 -0
  429. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_crypto.py +0 -0
  430. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_currency.py +0 -0
  431. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_datetime.py +0 -0
  432. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  433. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_deep_extend.py +0 -0
  434. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  435. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  436. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_funding_rate_history.py +0 -0
  437. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_ledger_entry.py +0 -0
  438. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_ledger_item.py +0 -0
  439. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_leverage_tier.py +0 -0
  440. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_margin_modification.py +0 -0
  441. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_market.py +0 -0
  442. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_number.py +0 -0
  443. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_ohlcv.py +0 -0
  444. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_open_interest.py +0 -0
  445. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_order.py +0 -0
  446. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_order_book.py +0 -0
  447. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_position.py +0 -0
  448. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_shared_methods.py +0 -0
  449. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_status.py +0 -0
  450. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_throttle.py +0 -0
  451. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_ticker.py +0 -0
  452. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_trade.py +0 -0
  453. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_trading_fee.py +0 -0
  454. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/test/base/test_transaction.py +0 -0
  455. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/tidex.py +0 -0
  456. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/timex.py +0 -0
  457. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/tokocrypto.py +0 -0
  458. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/upbit.py +0 -0
  459. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/wavesexchange.py +0 -0
  460. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/wazirx.py +0 -0
  461. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/whitebit.py +0 -0
  462. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/woo.py +0 -0
  463. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/xt.py +0 -0
  464. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/yobit.py +0 -0
  465. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/zaif.py +0 -0
  466. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/zb.py +0 -0
  467. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt/zonda.py +0 -0
  468. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt.egg-info/SOURCES.txt +0 -0
  469. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt.egg-info/dependency_links.txt +0 -0
  470. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt.egg-info/requires.txt +0 -0
  471. {ccxt-3.0.96 → ccxt-3.0.98}/ccxt.egg-info/top_level.txt +0 -0
  472. {ccxt-3.0.96 → ccxt-3.0.98}/setup.cfg +0 -0
  473. {ccxt-3.0.96 → ccxt-3.0.98}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 3.0.96
3
+ Version: 3.0.98
4
4
  Summary: A JavaScript / Python / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -231,13 +231,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
231
231
 
232
232
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
233
233
 
234
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.0.96/dist/ccxt.browser.js
235
- * unpkg: https://unpkg.com/ccxt@3.0.96/dist/ccxt.browser.js
234
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@3.0.98/dist/ccxt.browser.js
235
+ * unpkg: https://unpkg.com/ccxt@3.0.98/dist/ccxt.browser.js
236
236
 
237
237
  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.
238
238
 
239
239
  ```HTML
240
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.0.96/dist/ccxt.browser.js"></script>
240
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@3.0.98/dist/ccxt.browser.js"></script>
241
241
  ```
242
242
 
243
243
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '3.0.96'
25
+ __version__ = '3.0.98'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.0.96'
7
+ __version__ = '3.0.98'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '3.0.96'
5
+ __version__ = '3.0.98'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1679,6 +1679,12 @@ class coinex(Exchange, ImplicitAPI):
1679
1679
  async def create_order(self, symbol: str, type, side: OrderSide, amount, price=None, params={}):
1680
1680
  """
1681
1681
  create a trade order
1682
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http017_put_limit
1683
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http018_put_market
1684
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http019_put_limit_stop
1685
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http020_put_market_stop
1686
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http031_market_close
1687
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http030_limit_close
1682
1688
  :param str symbol: unified symbol of the market to create an order in
1683
1689
  :param str type: 'market' or 'limit'
1684
1690
  :param str side: 'buy' or 'sell'
@@ -1692,6 +1698,7 @@ class coinex(Exchange, ImplicitAPI):
1692
1698
  :param str params['timeInForce']: "GTC", "IOC", "FOK", "PO"
1693
1699
  :param bool params.postOnly:
1694
1700
  :param bool params.reduceOnly:
1701
+ :param bool|None params['position_id']: *required for reduce only orders* the position id to reduce
1695
1702
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1696
1703
  """
1697
1704
  await self.load_markets()
@@ -1706,9 +1713,11 @@ class coinex(Exchange, ImplicitAPI):
1706
1713
  positionId = self.safe_integer_2(params, 'position_id', 'positionId') # Required for closing swap positions
1707
1714
  timeInForceRaw = self.safe_string(params, 'timeInForce') # Spot: IOC, FOK, PO, GTC, ... NORMAL(default), MAKER_ONLY
1708
1715
  reduceOnly = self.safe_value(params, 'reduceOnly')
1709
- if reduceOnly is not None:
1716
+ if reduceOnly:
1710
1717
  if market['type'] != 'swap':
1711
1718
  raise InvalidOrder(self.id + ' createOrder() does not support reduceOnly for ' + market['type'] + ' orders, reduceOnly orders are supported for swap markets only')
1719
+ if positionId is None:
1720
+ raise ArgumentsRequired(self.id + ' createOrder() requires a position_id/positionId parameter for reduceOnly orders')
1712
1721
  method = None
1713
1722
  request = {
1714
1723
  'market': market['id'],
@@ -2309,8 +2309,7 @@ class huobi(Exchange, ImplicitAPI):
2309
2309
  # request['end-time'] = self.sum(since, 172800000) # 48 hours window
2310
2310
  method = 'spotPrivateGetV1OrderMatchresults'
2311
2311
  else:
2312
- if symbol is None:
2313
- raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol for ' + marketType + ' orders')
2312
+ self.check_required_symbol('fetchMyTrades', symbol)
2314
2313
  request['contract'] = market['id']
2315
2314
  request['trade_type'] = 0 # 0 all, 1 open long, 2 open short, 3 close short, 4 close long, 5 liquidate long positions, 6 liquidate short positions
2316
2315
  if since is not None:
@@ -3095,8 +3094,7 @@ class huobi(Exchange, ImplicitAPI):
3095
3094
  else:
3096
3095
  request['order-id'] = id
3097
3096
  else:
3098
- if symbol is None:
3099
- raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol for ' + marketType + ' orders')
3097
+ self.check_required_symbol('fetchOrder', symbol)
3100
3098
  request['contract_code'] = market['id']
3101
3099
  if market['linear']:
3102
3100
  marginMode = None
@@ -3266,8 +3264,7 @@ class huobi(Exchange, ImplicitAPI):
3266
3264
  async def fetch_spot_orders_by_states(self, states, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
3267
3265
  method = self.safe_string(self.options, 'fetchOrdersByStatesMethod', 'spot_private_get_v1_order_orders') # spot_private_get_v1_order_history
3268
3266
  if method == 'spot_private_get_v1_order_orders':
3269
- if symbol is None:
3270
- raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
3267
+ self.check_required_symbol('fetchOrders', symbol)
3271
3268
  await self.load_markets()
3272
3269
  market = None
3273
3270
  request = {
@@ -3332,8 +3329,7 @@ class huobi(Exchange, ImplicitAPI):
3332
3329
  return await self.fetch_spot_orders_by_states('filled,partial-canceled,canceled', symbol, since, limit, params)
3333
3330
 
3334
3331
  async def fetch_contract_orders(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
3335
- if symbol is None:
3336
- raise ArgumentsRequired(self.id + ' fetchContractOrders() requires a symbol argument')
3332
+ self.check_required_symbol('fetchContractOrders', symbol)
3337
3333
  await self.load_markets()
3338
3334
  market = self.market(symbol)
3339
3335
  request = {
@@ -3640,8 +3636,7 @@ class huobi(Exchange, ImplicitAPI):
3640
3636
  params = self.omit(params, 'account-id')
3641
3637
  response = await self.spotPrivateGetV1OrderOpenOrders(self.extend(request, params))
3642
3638
  else:
3643
- if symbol is None:
3644
- raise ArgumentsRequired(self.id + ' fetchOpenOrders() requires a symbol for ' + marketType + ' orders')
3639
+ self.check_required_symbol('fetchOpenOrders', symbol)
3645
3640
  if limit is not None:
3646
3641
  request['page_size'] = limit
3647
3642
  request['contract_code'] = market['id']
@@ -4485,6 +4480,8 @@ class huobi(Exchange, ImplicitAPI):
4485
4480
  :param str id: order id
4486
4481
  :param str|None symbol: unified symbol of the market the order was made in
4487
4482
  :param dict params: extra parameters specific to the huobi api endpoint
4483
+ :param bool|None params['stop']: *contract only* if the order is a stop trigger order or not
4484
+ :param bool|None params['stopLossTakeProfit']: *contract only* if the order is a stop-loss or take-profit order
4488
4485
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
4489
4486
  """
4490
4487
  await self.load_markets()
@@ -4505,60 +4502,83 @@ class huobi(Exchange, ImplicitAPI):
4505
4502
  # 'pair': 'BTC-USDT',
4506
4503
  # 'contract_type': 'this_week', # swap, self_week, next_week, quarter, next_ quarter
4507
4504
  }
4508
- method = None
4505
+ response = None
4509
4506
  if marketType == 'spot':
4510
4507
  clientOrderId = self.safe_string_2(params, 'client-order-id', 'clientOrderId')
4511
- method = 'spotPrivatePostV1OrderOrdersOrderIdSubmitcancel'
4512
4508
  if clientOrderId is None:
4513
4509
  request['order-id'] = id
4510
+ response = await self.spotPrivatePostV1OrderOrdersOrderIdSubmitcancel(self.extend(request, params))
4514
4511
  else:
4515
4512
  request['client-order-id'] = clientOrderId
4516
- method = 'spotPrivatePostV1OrderOrdersSubmitCancelClientOrder'
4517
4513
  params = self.omit(params, ['client-order-id', 'clientOrderId'])
4514
+ response = await self.spotPrivatePostV1OrderOrdersSubmitCancelClientOrder(self.extend(request, params))
4518
4515
  else:
4519
- if symbol is None:
4520
- raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol for ' + marketType + ' orders')
4521
- request['contract_code'] = market['id']
4516
+ self.check_required_symbol('cancelOrder', symbol)
4517
+ clientOrderId = self.safe_string_2(params, 'client_order_id', 'clientOrderId')
4518
+ if clientOrderId is None:
4519
+ request['order_id'] = id
4520
+ else:
4521
+ request['client_order_id'] = clientOrderId
4522
+ params = self.omit(params, ['client_order_id', 'clientOrderId'])
4523
+ if market['future']:
4524
+ request['symbol'] = market['settleId']
4525
+ else:
4526
+ request['contract_code'] = market['id']
4527
+ stop = self.safe_value(params, 'stop')
4528
+ stopLossTakeProfit = self.safe_value(params, 'stopLossTakeProfit')
4529
+ params = self.omit(params, ['stop', 'stopLossTakeProfit'])
4522
4530
  if market['linear']:
4523
4531
  marginMode = None
4524
4532
  marginMode, params = self.handle_margin_mode_and_params('cancelOrder', params)
4525
4533
  marginMode = 'cross' if (marginMode is None) else marginMode
4526
4534
  if marginMode == 'isolated':
4527
- method = 'contractPrivatePostLinearSwapApiV1SwapCancel'
4535
+ if stop:
4536
+ response = await self.contractPrivatePostLinearSwapApiV1SwapTriggerCancel(self.extend(request, params))
4537
+ elif stopLossTakeProfit:
4538
+ response = await self.contractPrivatePostLinearSwapApiV1SwapTpslCancel(self.extend(request, params))
4539
+ else:
4540
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCancel(self.extend(request, params))
4528
4541
  elif marginMode == 'cross':
4529
- method = 'contractPrivatePostLinearSwapApiV1SwapCrossCancel'
4542
+ if stop:
4543
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancel(self.extend(request, params))
4544
+ elif stopLossTakeProfit:
4545
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancel(self.extend(request, params))
4546
+ else:
4547
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossCancel(self.extend(request, params))
4530
4548
  elif market['inverse']:
4531
- if market['future']:
4532
- method = 'contractPrivatePostApiV1ContractCancel'
4533
- request['symbol'] = market['settleId']
4534
- elif market['swap']:
4535
- method = 'contractPrivatePostSwapApiV1SwapCancel'
4549
+ if market['swap']:
4550
+ if stop:
4551
+ response = await self.contractPrivatePostSwapApiV1SwapTriggerCancel(self.extend(request, params))
4552
+ elif stopLossTakeProfit:
4553
+ response = await self.contractPrivatePostSwapApiV1SwapTpslCancel(self.extend(request, params))
4554
+ else:
4555
+ response = await self.contractPrivatePostSwapApiV1SwapCancel(self.extend(request, params))
4556
+ elif market['future']:
4557
+ if stop:
4558
+ response = await self.contractPrivatePostApiV1ContractTriggerCancel(self.extend(request, params))
4559
+ elif stopLossTakeProfit:
4560
+ response = await self.contractPrivatePostApiV1ContractTpslCancel(self.extend(request, params))
4561
+ else:
4562
+ response = await self.contractPrivatePostApiV1ContractCancel(self.extend(request, params))
4536
4563
  else:
4537
4564
  raise NotSupported(self.id + ' cancelOrder() does not support ' + marketType + ' markets')
4538
- clientOrderId = self.safe_string_2(params, 'client_order_id', 'clientOrderId')
4539
- if clientOrderId is None:
4540
- request['order_id'] = id
4541
- else:
4542
- request['client_order_id'] = clientOrderId
4543
- params = self.omit(params, ['client_order_id', 'clientOrderId'])
4544
- response = await getattr(self, method)(self.extend(request, params))
4545
4565
  #
4546
4566
  # spot
4547
4567
  #
4548
4568
  # {
4549
- # 'status': 'ok',
4550
- # 'data': '10138899000',
4569
+ # "status": "ok",
4570
+ # "data": "10138899000",
4551
4571
  # }
4552
4572
  #
4553
- # linear swap cross margin
4573
+ # future and swap
4554
4574
  #
4555
4575
  # {
4556
- # "status":"ok",
4557
- # "data":{
4558
- # "errors":[],
4559
- # "successes":"924660854912552960"
4576
+ # "status": "ok",
4577
+ # "data": {
4578
+ # "errors": [],
4579
+ # "successes": "924660854912552960"
4560
4580
  # },
4561
- # "ts":1640504486089
4581
+ # "ts": 1640504486089
4562
4582
  # }
4563
4583
  #
4564
4584
  return self.extend(self.parse_order(response, market), {
@@ -4572,6 +4592,8 @@ class huobi(Exchange, ImplicitAPI):
4572
4592
  :param [str] ids: order ids
4573
4593
  :param str|None symbol: unified market symbol, default is None
4574
4594
  :param dict params: extra parameters specific to the huobi api endpoint
4595
+ :param bool|None params['stop']: *contract only* if the orders are stop trigger orders or not
4596
+ :param bool|None params['stopLossTakeProfit']: *contract only* if the orders are stop-loss or take-profit orders
4575
4597
  :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
4576
4598
  """
4577
4599
  await self.load_markets()
@@ -4582,7 +4604,7 @@ class huobi(Exchange, ImplicitAPI):
4582
4604
  marketType, params = self.handle_market_type_and_params('cancelOrders', market, params)
4583
4605
  request = {
4584
4606
  # spot -----------------------------------------------------------
4585
- # 'order-ids': ids.jsoin(','), # max 50
4607
+ # 'order-ids': ','.join(ids), # max 50
4586
4608
  # 'client-order-ids': ','.join(ids), # max 50
4587
4609
  # contracts ------------------------------------------------------
4588
4610
  # 'order_id': id, # comma separated, max 10
@@ -4590,43 +4612,24 @@ class huobi(Exchange, ImplicitAPI):
4590
4612
  # 'contract_code': market['id'],
4591
4613
  # 'symbol': market['settleId'],
4592
4614
  }
4593
- method = None
4615
+ response = None
4594
4616
  if marketType == 'spot':
4595
4617
  clientOrderIds = self.safe_value_2(params, 'client-order-id', 'clientOrderId')
4596
4618
  clientOrderIds = self.safe_value_2(params, 'client-order-ids', 'clientOrderIds', clientOrderIds)
4597
4619
  if clientOrderIds is None:
4598
4620
  if isinstance(clientOrderIds, str):
4599
- request['order-ids'] = ids
4621
+ request['order-ids'] = [ids]
4600
4622
  else:
4601
- request['order-ids'] = ','.join(ids)
4623
+ request['order-ids'] = ids
4602
4624
  else:
4603
4625
  if isinstance(clientOrderIds, str):
4604
- request['client-order-ids'] = clientOrderIds
4626
+ request['client-order-ids'] = [clientOrderIds]
4605
4627
  else:
4606
- request['client-order-ids'] = ','.join(clientOrderIds)
4628
+ request['client-order-ids'] = clientOrderIds
4607
4629
  params = self.omit(params, ['client-order-id', 'client-order-ids', 'clientOrderId', 'clientOrderIds'])
4608
- method = 'spotPrivatePostV1OrderOrdersBatchcancel'
4630
+ response = await self.spotPrivatePostV1OrderOrdersBatchcancel(self.extend(request, params))
4609
4631
  else:
4610
- if symbol is None:
4611
- raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol for ' + marketType + ' orders')
4612
- marketInner = self.market(symbol)
4613
- request['contract_code'] = marketInner['id']
4614
- if marketInner['linear']:
4615
- marginMode = None
4616
- marginMode, params = self.handle_margin_mode_and_params('cancelOrders', params)
4617
- marginMode = 'cross' if (marginMode is None) else marginMode
4618
- if marginMode == 'isolated':
4619
- method = 'contractPrivatePostLinearSwapApiV1SwapCancel'
4620
- elif marginMode == 'cross':
4621
- method = 'contractPrivatePostLinearSwapApiV1SwapCrossCancel'
4622
- elif marketInner['inverse']:
4623
- if marketInner['future']:
4624
- method = 'contractPrivatePostApiV1ContractCancel'
4625
- request['symbol'] = marketInner['settleId']
4626
- elif marketInner['swap']:
4627
- method = 'contractPrivatePostSwapApiV1SwapCancel'
4628
- else:
4629
- raise NotSupported(self.id + ' cancelOrders() does not support ' + marketType + ' markets')
4632
+ self.check_required_symbol('cancelOrders', symbol)
4630
4633
  clientOrderIds = self.safe_string_2(params, 'client_order_id', 'clientOrderId')
4631
4634
  clientOrderIds = self.safe_string_2(params, 'client_order_ids', 'clientOrderIds', clientOrderIds)
4632
4635
  if clientOrderIds is None:
@@ -4634,7 +4637,48 @@ class huobi(Exchange, ImplicitAPI):
4634
4637
  else:
4635
4638
  request['client_order_id'] = clientOrderIds
4636
4639
  params = self.omit(params, ['client_order_id', 'client_order_ids', 'clientOrderId', 'clientOrderIds'])
4637
- response = await getattr(self, method)(self.extend(request, params))
4640
+ if market['future']:
4641
+ request['symbol'] = market['settleId']
4642
+ else:
4643
+ request['contract_code'] = market['id']
4644
+ stop = self.safe_value(params, 'stop')
4645
+ stopLossTakeProfit = self.safe_value(params, 'stopLossTakeProfit')
4646
+ params = self.omit(params, ['stop', 'stopLossTakeProfit'])
4647
+ if market['linear']:
4648
+ marginMode = None
4649
+ marginMode, params = self.handle_margin_mode_and_params('cancelOrders', params)
4650
+ marginMode = 'cross' if (marginMode is None) else marginMode
4651
+ if marginMode == 'isolated':
4652
+ if stop:
4653
+ response = await self.contractPrivatePostLinearSwapApiV1SwapTriggerCancel(self.extend(request, params))
4654
+ elif stopLossTakeProfit:
4655
+ response = await self.contractPrivatePostLinearSwapApiV1SwapTpslCancel(self.extend(request, params))
4656
+ else:
4657
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCancel(self.extend(request, params))
4658
+ elif marginMode == 'cross':
4659
+ if stop:
4660
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancel(self.extend(request, params))
4661
+ elif stopLossTakeProfit:
4662
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancel(self.extend(request, params))
4663
+ else:
4664
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossCancel(self.extend(request, params))
4665
+ elif market['inverse']:
4666
+ if market['swap']:
4667
+ if stop:
4668
+ response = await self.contractPrivatePostSwapApiV1SwapTriggerCancel(self.extend(request, params))
4669
+ elif stopLossTakeProfit:
4670
+ response = await self.contractPrivatePostSwapApiV1SwapTpslCancel(self.extend(request, params))
4671
+ else:
4672
+ response = await self.contractPrivatePostSwapApiV1SwapCancel(self.extend(request, params))
4673
+ elif market['future']:
4674
+ if stop:
4675
+ response = await self.contractPrivatePostApiV1ContractTriggerCancel(self.extend(request, params))
4676
+ elif stopLossTakeProfit:
4677
+ response = await self.contractPrivatePostApiV1ContractTpslCancel(self.extend(request, params))
4678
+ else:
4679
+ response = await self.contractPrivatePostApiV1ContractCancel(self.extend(request, params))
4680
+ else:
4681
+ raise NotSupported(self.id + ' cancelOrders() does not support ' + marketType + ' markets')
4638
4682
  #
4639
4683
  # spot
4640
4684
  #
@@ -4669,7 +4713,7 @@ class huobi(Exchange, ImplicitAPI):
4669
4713
  # }
4670
4714
  # }
4671
4715
  #
4672
- # contracts
4716
+ # future and swap
4673
4717
  #
4674
4718
  # {
4675
4719
  # "status": "ok",
@@ -4693,6 +4737,8 @@ class huobi(Exchange, ImplicitAPI):
4693
4737
  cancel all open orders
4694
4738
  :param str|None symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
4695
4739
  :param dict params: extra parameters specific to the huobi api endpoint
4740
+ :param bool|None params['stop']: *contract only* if the orders are stop trigger orders or not
4741
+ :param bool|None params['stopLossTakeProfit']: *contract only* if the orders are stop-loss or take-profit orders
4696
4742
  :returns [dict]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
4697
4743
  """
4698
4744
  await self.load_markets()
@@ -4715,34 +4761,56 @@ class huobi(Exchange, ImplicitAPI):
4715
4761
  # 'direction': 'buy': # buy, sell
4716
4762
  # 'offset': 'open', # open, close
4717
4763
  }
4718
- method = None
4764
+ response = None
4719
4765
  if marketType == 'spot':
4720
4766
  if symbol is not None:
4721
- market = self.market(symbol)
4722
4767
  request['symbol'] = market['id']
4723
- method = 'spotPrivatePostV1OrderOrdersBatchCancelOpenOrders'
4768
+ response = await self.spotPrivatePostV1OrderOrdersBatchCancelOpenOrders(self.extend(request, params))
4724
4769
  else:
4725
- if symbol is None:
4726
- raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol for ' + marketType + ' orders')
4727
- marketInner = self.market(symbol)
4728
- request['contract_code'] = marketInner['id']
4729
- if marketInner['linear']:
4770
+ self.check_required_symbol('cancelAllOrders', symbol)
4771
+ if market['future']:
4772
+ request['symbol'] = market['settleId']
4773
+ request['contract_code'] = market['id']
4774
+ stop = self.safe_value(params, 'stop')
4775
+ stopLossTakeProfit = self.safe_value(params, 'stopLossTakeProfit')
4776
+ params = self.omit(params, ['stop', 'stopLossTakeProfit'])
4777
+ if market['linear']:
4730
4778
  marginMode = None
4731
4779
  marginMode, params = self.handle_margin_mode_and_params('cancelAllOrders', params)
4732
4780
  marginMode = 'cross' if (marginMode is None) else marginMode
4733
4781
  if marginMode == 'isolated':
4734
- method = 'contractPrivatePostLinearSwapApiV1SwapCancelallall'
4782
+ if stop:
4783
+ response = await self.contractPrivatePostLinearSwapApiV1SwapTriggerCancelall(self.extend(request, params))
4784
+ elif stopLossTakeProfit:
4785
+ response = await self.contractPrivatePostLinearSwapApiV1SwapTpslCancelall(self.extend(request, params))
4786
+ else:
4787
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCancelall(self.extend(request, params))
4735
4788
  elif marginMode == 'cross':
4736
- method = 'contractPrivatePostLinearSwapApiV1SwapCrossCancelall'
4737
- elif marketInner['inverse']:
4738
- if marketType == 'future':
4739
- method = 'contractPrivatePostApiV1ContractCancelall'
4740
- request['symbol'] = marketInner['settleId']
4741
- elif marketType == 'swap':
4742
- method = 'contractPrivatePostSwapApiV1SwapCancelall'
4743
- else:
4744
- raise NotSupported(self.id + ' cancelAllOrders() does not support ' + marketType + ' markets')
4745
- response = await getattr(self, method)(self.extend(request, params))
4789
+ if stop:
4790
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTriggerCancelall(self.extend(request, params))
4791
+ elif stopLossTakeProfit:
4792
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossTpslCancelall(self.extend(request, params))
4793
+ else:
4794
+ response = await self.contractPrivatePostLinearSwapApiV1SwapCrossCancelall(self.extend(request, params))
4795
+ elif market['inverse']:
4796
+ if market['swap']:
4797
+ if stop:
4798
+ response = await self.contractPrivatePostSwapApiV1SwapTriggerCancelall(self.extend(request, params))
4799
+ elif stopLossTakeProfit:
4800
+ response = await self.contractPrivatePostSwapApiV1SwapTpslCancelall(self.extend(request, params))
4801
+ else:
4802
+ response = await self.contractPrivatePostSwapApiV1SwapCancelall(self.extend(request, params))
4803
+ elif market['future']:
4804
+ if stop:
4805
+ response = await self.contractPrivatePostApiV1ContractTriggerCancelall(self.extend(request, params))
4806
+ elif stopLossTakeProfit:
4807
+ response = await self.contractPrivatePostApiV1ContractTpslCancelall(self.extend(request, params))
4808
+ else:
4809
+ response = await self.contractPrivatePostApiV1ContractCancelall(self.extend(request, params))
4810
+ else:
4811
+ raise NotSupported(self.id + ' cancelAllOrders() does not support ' + marketType + ' markets')
4812
+ #
4813
+ # spot
4746
4814
  #
4747
4815
  # {
4748
4816
  # code: 200,
@@ -4753,6 +4821,17 @@ class huobi(Exchange, ImplicitAPI):
4753
4821
  # }
4754
4822
  # }
4755
4823
  #
4824
+ # future and swap
4825
+ #
4826
+ # {
4827
+ # status: "ok",
4828
+ # data: {
4829
+ # errors: [],
4830
+ # successes: "1104754904426696704"
4831
+ # },
4832
+ # ts: "1683435723755"
4833
+ # }
4834
+ #
4756
4835
  return response
4757
4836
 
4758
4837
  def parse_deposit_address(self, depositAddress, currency=None):
@@ -5354,8 +5433,7 @@ class huobi(Exchange, ImplicitAPI):
5354
5433
  :param dict params: extra parameters specific to the huobi api endpoint
5355
5434
  :returns [dict]: a list of `funding rate structures <https://docs.ccxt.com/en/latest/manual.html?#funding-rate-history-structure>`
5356
5435
  """
5357
- if symbol is None:
5358
- raise ArgumentsRequired(self.id + ' fetchFundingRateHistory() requires a symbol argument')
5436
+ self.check_required_symbol('fetchFundingRateHistory', symbol)
5359
5437
  await self.load_markets()
5360
5438
  market = self.market(symbol)
5361
5439
  request = {
@@ -5859,8 +5937,7 @@ class huobi(Exchange, ImplicitAPI):
5859
5937
  :param dict params: extra parameters specific to the huobi api endpoint
5860
5938
  :returns dict: response from the exchange
5861
5939
  """
5862
- if symbol is None:
5863
- raise ArgumentsRequired(self.id + ' setLeverage() requires a symbol argument')
5940
+ self.check_required_symbol('setLeverage', symbol)
5864
5941
  await self.load_markets()
5865
5942
  market = self.market(symbol)
5866
5943
  marketType, query = self.handle_market_type_and_params('setLeverage', market, params)
@@ -6939,8 +7016,7 @@ class huobi(Exchange, ImplicitAPI):
6939
7016
  marginMode = 'cross' if (marginMode is None) else marginMode
6940
7017
  method = None
6941
7018
  if marginMode == 'isolated':
6942
- if symbol is None:
6943
- raise ArgumentsRequired(self.id + ' borrowMargin() requires a symbol argument for isolated margin')
7019
+ self.check_required_symbol('borrowMargin', symbol)
6944
7020
  market = self.market(symbol)
6945
7021
  request['symbol'] = market['id']
6946
7022
  method = 'privatePostMarginOrders'
@@ -2399,7 +2399,7 @@ class phemex(Exchange, ImplicitAPI):
2399
2399
  :param float amount: how much of currency you want to trade in units of base currency
2400
2400
  :param float|None price: the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders
2401
2401
  :param dict params: extra parameters specific to the phemex api endpoint
2402
- :param str|None params['posSide']: either 'Hedged' or 'OneWay' or 'Merged'
2402
+ :param str|None params['posSide']: either 'Merged' or 'Long' or 'Short'
2403
2403
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2404
2404
  """
2405
2405
  if symbol is None:
@@ -2457,7 +2457,7 @@ class phemex(Exchange, ImplicitAPI):
2457
2457
  :param str id: order id
2458
2458
  :param str symbol: unified symbol of the market the order was made in
2459
2459
  :param dict params: extra parameters specific to the phemex api endpoint
2460
- :param str|None params['posSide']: either 'Hedged' or 'OneWay' or 'Merged'
2460
+ :param str|None params['posSide']: either 'Merged' or 'Long' or 'Short'
2461
2461
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
2462
2462
  """
2463
2463
  if symbol is None:
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '3.0.96'
7
+ __version__ = '3.0.98'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -1429,7 +1429,7 @@ class Exchange(object):
1429
1429
  ohlcvs = []
1430
1430
  (timestamp, open, high, low, close, volume, count) = (0, 1, 2, 3, 4, 5, 6)
1431
1431
  num_trades = len(trades)
1432
- oldest = (num_trades - 1) if limit is None else min(num_trades - 1, limit)
1432
+ oldest = num_trades if limit is None else min(num_trades, limit)
1433
1433
  for i in range(0, oldest):
1434
1434
  trade = trades[i]
1435
1435
  if (since is not None) and (trade['timestamp'] < since):
@@ -1678,6 +1678,12 @@ class coinex(Exchange, ImplicitAPI):
1678
1678
  def create_order(self, symbol: str, type, side: OrderSide, amount, price=None, params={}):
1679
1679
  """
1680
1680
  create a trade order
1681
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http017_put_limit
1682
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http018_put_market
1683
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http019_put_limit_stop
1684
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http020_put_market_stop
1685
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http031_market_close
1686
+ see https://viabtc.github.io/coinex_api_en_doc/futures/#docsfutures001_http030_limit_close
1681
1687
  :param str symbol: unified symbol of the market to create an order in
1682
1688
  :param str type: 'market' or 'limit'
1683
1689
  :param str side: 'buy' or 'sell'
@@ -1691,6 +1697,7 @@ class coinex(Exchange, ImplicitAPI):
1691
1697
  :param str params['timeInForce']: "GTC", "IOC", "FOK", "PO"
1692
1698
  :param bool params.postOnly:
1693
1699
  :param bool params.reduceOnly:
1700
+ :param bool|None params['position_id']: *required for reduce only orders* the position id to reduce
1694
1701
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1695
1702
  """
1696
1703
  self.load_markets()
@@ -1705,9 +1712,11 @@ class coinex(Exchange, ImplicitAPI):
1705
1712
  positionId = self.safe_integer_2(params, 'position_id', 'positionId') # Required for closing swap positions
1706
1713
  timeInForceRaw = self.safe_string(params, 'timeInForce') # Spot: IOC, FOK, PO, GTC, ... NORMAL(default), MAKER_ONLY
1707
1714
  reduceOnly = self.safe_value(params, 'reduceOnly')
1708
- if reduceOnly is not None:
1715
+ if reduceOnly:
1709
1716
  if market['type'] != 'swap':
1710
1717
  raise InvalidOrder(self.id + ' createOrder() does not support reduceOnly for ' + market['type'] + ' orders, reduceOnly orders are supported for swap markets only')
1718
+ if positionId is None:
1719
+ raise ArgumentsRequired(self.id + ' createOrder() requires a position_id/positionId parameter for reduceOnly orders')
1711
1720
  method = None
1712
1721
  request = {
1713
1722
  'market': market['id'],