ccxt 4.0.76__tar.gz → 4.0.78__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 (464) hide show
  1. {ccxt-4.0.76/ccxt.egg-info → ccxt-4.0.78}/PKG-INFO +4 -4
  2. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/__init__.py +1 -1
  3. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bingx.py +1 -1
  4. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/gate.py +24 -0
  5. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/gateio.py +24 -0
  6. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/okex.py +1 -0
  7. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/okex5.py +1 -0
  8. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/okx.py +1 -0
  9. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/__init__.py +1 -1
  10. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/exchange.py +7 -2
  11. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bingx.py +41 -22
  12. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/gate.py +42 -0
  13. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/kucoinfutures.py +1 -1
  14. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/okx.py +1 -0
  15. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/whitebit.py +1 -0
  16. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/base/exchange.py +7 -2
  17. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bingx.py +41 -22
  18. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/gate.py +42 -0
  19. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/kucoinfutures.py +1 -1
  20. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/okx.py +1 -0
  21. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/__init__.py +1 -1
  22. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/okx.py +3 -0
  23. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/test_async.py +8 -3
  24. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/test_sync.py +8 -3
  25. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/whitebit.py +1 -0
  26. {ccxt-4.0.76 → ccxt-4.0.78/ccxt.egg-info}/PKG-INFO +4 -4
  27. {ccxt-4.0.76 → ccxt-4.0.78}/package.json +1 -1
  28. {ccxt-4.0.76 → ccxt-4.0.78}/LICENSE.txt +0 -0
  29. {ccxt-4.0.76 → ccxt-4.0.78}/MANIFEST.in +0 -0
  30. {ccxt-4.0.76 → ccxt-4.0.78}/README.rst +0 -0
  31. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/__init__.py +0 -0
  32. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/ace.py +0 -0
  33. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/alpaca.py +0 -0
  34. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/ascendex.py +0 -0
  35. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bequant.py +0 -0
  36. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bigone.py +0 -0
  37. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/binance.py +0 -0
  38. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/binancecoinm.py +0 -0
  39. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/binanceus.py +0 -0
  40. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/binanceusdm.py +0 -0
  41. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bit2c.py +0 -0
  42. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitbank.py +0 -0
  43. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitbay.py +0 -0
  44. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitbns.py +0 -0
  45. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitcoincom.py +0 -0
  46. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitfinex.py +0 -0
  47. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitfinex2.py +0 -0
  48. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitflyer.py +0 -0
  49. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitforex.py +0 -0
  50. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitget.py +0 -0
  51. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bithumb.py +0 -0
  52. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitmart.py +0 -0
  53. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitmex.py +0 -0
  54. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitopro.py +0 -0
  55. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitpanda.py +0 -0
  56. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitrue.py +0 -0
  57. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitso.py +0 -0
  58. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitstamp.py +0 -0
  59. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitstamp1.py +0 -0
  60. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bittrex.py +0 -0
  61. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bitvavo.py +0 -0
  62. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bkex.py +0 -0
  63. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bl3p.py +0 -0
  64. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/blockchaincom.py +0 -0
  65. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/btcalpha.py +0 -0
  66. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/btcbox.py +0 -0
  67. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/btcmarkets.py +0 -0
  68. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/btctradeua.py +0 -0
  69. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/btcturk.py +0 -0
  70. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/bybit.py +0 -0
  71. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/cex.py +0 -0
  72. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinbase.py +0 -0
  73. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinbaseprime.py +0 -0
  74. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinbasepro.py +0 -0
  75. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coincheck.py +0 -0
  76. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinex.py +0 -0
  77. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinfalcon.py +0 -0
  78. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinmate.py +0 -0
  79. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinone.py +0 -0
  80. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinsph.py +0 -0
  81. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/coinspot.py +0 -0
  82. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/cryptocom.py +0 -0
  83. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/currencycom.py +0 -0
  84. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/delta.py +0 -0
  85. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/deribit.py +0 -0
  86. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/digifinex.py +0 -0
  87. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/exmo.py +0 -0
  88. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/fmfwio.py +0 -0
  89. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/gemini.py +0 -0
  90. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/hitbtc.py +0 -0
  91. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/hitbtc3.py +0 -0
  92. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/hollaex.py +0 -0
  93. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/huobi.py +0 -0
  94. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/huobijp.py +0 -0
  95. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/huobipro.py +0 -0
  96. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/idex.py +0 -0
  97. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/independentreserve.py +0 -0
  98. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/indodax.py +0 -0
  99. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/kraken.py +0 -0
  100. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/krakenfutures.py +0 -0
  101. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/kucoin.py +0 -0
  102. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/kucoinfutures.py +0 -0
  103. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/kuna.py +0 -0
  104. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/latoken.py +0 -0
  105. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/lbank.py +0 -0
  106. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/lbank2.py +0 -0
  107. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/luno.py +0 -0
  108. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/lykke.py +0 -0
  109. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/mercado.py +0 -0
  110. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/mexc.py +0 -0
  111. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/mexc3.py +0 -0
  112. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/ndax.py +0 -0
  113. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/novadax.py +0 -0
  114. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/oceanex.py +0 -0
  115. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/okcoin.py +0 -0
  116. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/paymium.py +0 -0
  117. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/phemex.py +0 -0
  118. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/poloniex.py +0 -0
  119. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/poloniexfutures.py +0 -0
  120. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/probit.py +0 -0
  121. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/tidex.py +0 -0
  122. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/timex.py +0 -0
  123. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/tokocrypto.py +0 -0
  124. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/upbit.py +0 -0
  125. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/wavesexchange.py +0 -0
  126. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/wazirx.py +0 -0
  127. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/whitebit.py +0 -0
  128. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/woo.py +0 -0
  129. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/yobit.py +0 -0
  130. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/zaif.py +0 -0
  131. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/abstract/zonda.py +0 -0
  132. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/ace.py +0 -0
  133. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/alpaca.py +0 -0
  134. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/ascendex.py +0 -0
  135. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/ace.py +0 -0
  136. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/alpaca.py +0 -0
  137. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/ascendex.py +0 -0
  138. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/__init__.py +0 -0
  139. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/throttler.py +0 -0
  140. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/__init__.py +0 -0
  141. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  142. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/cache.py +0 -0
  143. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/client.py +0 -0
  144. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/fast_client.py +0 -0
  145. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/functions.py +0 -0
  146. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/future.py +0 -0
  147. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/order_book.py +0 -0
  148. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  149. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bequant.py +0 -0
  150. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bigone.py +0 -0
  151. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/binance.py +0 -0
  152. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/binancecoinm.py +0 -0
  153. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/binanceus.py +0 -0
  154. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/binanceusdm.py +0 -0
  155. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bit2c.py +0 -0
  156. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitbank.py +0 -0
  157. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitbay.py +0 -0
  158. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitbns.py +0 -0
  159. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitcoincom.py +0 -0
  160. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitfinex.py +0 -0
  161. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitfinex2.py +0 -0
  162. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitflyer.py +0 -0
  163. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitforex.py +0 -0
  164. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitget.py +0 -0
  165. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bithumb.py +0 -0
  166. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitmart.py +0 -0
  167. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitmex.py +0 -0
  168. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitopro.py +0 -0
  169. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitpanda.py +0 -0
  170. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitrue.py +0 -0
  171. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitso.py +0 -0
  172. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitstamp.py +0 -0
  173. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitstamp1.py +0 -0
  174. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bittrex.py +0 -0
  175. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bitvavo.py +0 -0
  176. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bkex.py +0 -0
  177. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bl3p.py +0 -0
  178. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/blockchaincom.py +0 -0
  179. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/btcalpha.py +0 -0
  180. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/btcbox.py +0 -0
  181. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/btcmarkets.py +0 -0
  182. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/btctradeua.py +0 -0
  183. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/btcturk.py +0 -0
  184. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/bybit.py +0 -0
  185. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/cex.py +0 -0
  186. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinbase.py +0 -0
  187. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinbaseprime.py +0 -0
  188. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinbasepro.py +0 -0
  189. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coincheck.py +0 -0
  190. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinex.py +0 -0
  191. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinfalcon.py +0 -0
  192. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinmate.py +0 -0
  193. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinone.py +0 -0
  194. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinsph.py +0 -0
  195. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/coinspot.py +0 -0
  196. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/cryptocom.py +0 -0
  197. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/currencycom.py +0 -0
  198. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/delta.py +0 -0
  199. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/deribit.py +0 -0
  200. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/digifinex.py +0 -0
  201. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/exmo.py +0 -0
  202. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/flowbtc.py +0 -0
  203. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/fmfwio.py +0 -0
  204. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/gateio.py +0 -0
  205. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/gemini.py +0 -0
  206. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/hitbtc.py +0 -0
  207. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/hitbtc3.py +0 -0
  208. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/hollaex.py +0 -0
  209. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/huobi.py +0 -0
  210. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/huobijp.py +0 -0
  211. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/huobipro.py +0 -0
  212. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/idex.py +0 -0
  213. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/independentreserve.py +0 -0
  214. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/indodax.py +0 -0
  215. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/kraken.py +0 -0
  216. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/krakenfutures.py +0 -0
  217. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/kucoin.py +0 -0
  218. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/kuna.py +0 -0
  219. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/latoken.py +0 -0
  220. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/lbank.py +0 -0
  221. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/lbank2.py +0 -0
  222. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/luno.py +0 -0
  223. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/lykke.py +0 -0
  224. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/mercado.py +0 -0
  225. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/mexc.py +0 -0
  226. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/mexc3.py +0 -0
  227. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/ndax.py +0 -0
  228. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/novadax.py +0 -0
  229. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/oceanex.py +0 -0
  230. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/okcoin.py +0 -0
  231. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/okex.py +0 -0
  232. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/okex5.py +0 -0
  233. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/paymium.py +0 -0
  234. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/phemex.py +0 -0
  235. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/poloniex.py +0 -0
  236. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/poloniexfutures.py +0 -0
  237. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/probit.py +0 -0
  238. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/tidex.py +0 -0
  239. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/timex.py +0 -0
  240. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/tokocrypto.py +0 -0
  241. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/upbit.py +0 -0
  242. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/wavesexchange.py +0 -0
  243. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/wazirx.py +0 -0
  244. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/woo.py +0 -0
  245. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/yobit.py +0 -0
  246. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/zaif.py +0 -0
  247. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/async_support/zonda.py +0 -0
  248. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/base/__init__.py +0 -0
  249. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/base/decimal_to_precision.py +0 -0
  250. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/base/errors.py +0 -0
  251. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/base/precise.py +0 -0
  252. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/base/types.py +0 -0
  253. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bequant.py +0 -0
  254. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bigone.py +0 -0
  255. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/binance.py +0 -0
  256. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/binancecoinm.py +0 -0
  257. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/binanceus.py +0 -0
  258. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/binanceusdm.py +0 -0
  259. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bit2c.py +0 -0
  260. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitbank.py +0 -0
  261. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitbay.py +0 -0
  262. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitbns.py +0 -0
  263. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitcoincom.py +0 -0
  264. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitfinex.py +0 -0
  265. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitfinex2.py +0 -0
  266. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitflyer.py +0 -0
  267. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitforex.py +0 -0
  268. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitget.py +0 -0
  269. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bithumb.py +0 -0
  270. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitmart.py +0 -0
  271. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitmex.py +0 -0
  272. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitopro.py +0 -0
  273. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitpanda.py +0 -0
  274. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitrue.py +0 -0
  275. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitso.py +0 -0
  276. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitstamp.py +0 -0
  277. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitstamp1.py +0 -0
  278. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bittrex.py +0 -0
  279. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bitvavo.py +0 -0
  280. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bkex.py +0 -0
  281. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bl3p.py +0 -0
  282. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/blockchaincom.py +0 -0
  283. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/btcalpha.py +0 -0
  284. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/btcbox.py +0 -0
  285. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/btcmarkets.py +0 -0
  286. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/btctradeua.py +0 -0
  287. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/btcturk.py +0 -0
  288. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/bybit.py +0 -0
  289. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/cex.py +0 -0
  290. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinbase.py +0 -0
  291. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinbaseprime.py +0 -0
  292. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinbasepro.py +0 -0
  293. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coincheck.py +0 -0
  294. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinex.py +0 -0
  295. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinfalcon.py +0 -0
  296. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinmate.py +0 -0
  297. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinone.py +0 -0
  298. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinsph.py +0 -0
  299. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/coinspot.py +0 -0
  300. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/cryptocom.py +0 -0
  301. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/currencycom.py +0 -0
  302. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/delta.py +0 -0
  303. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/deribit.py +0 -0
  304. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/digifinex.py +0 -0
  305. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/exmo.py +0 -0
  306. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/flowbtc.py +0 -0
  307. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/fmfwio.py +0 -0
  308. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/gateio.py +0 -0
  309. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/gemini.py +0 -0
  310. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/hitbtc.py +0 -0
  311. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/hitbtc3.py +0 -0
  312. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/hollaex.py +0 -0
  313. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/huobi.py +0 -0
  314. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/huobijp.py +0 -0
  315. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/huobipro.py +0 -0
  316. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/idex.py +0 -0
  317. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/independentreserve.py +0 -0
  318. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/indodax.py +0 -0
  319. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/kraken.py +0 -0
  320. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/krakenfutures.py +0 -0
  321. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/kucoin.py +0 -0
  322. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/kuna.py +0 -0
  323. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/latoken.py +0 -0
  324. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/lbank.py +0 -0
  325. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/lbank2.py +0 -0
  326. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/luno.py +0 -0
  327. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/lykke.py +0 -0
  328. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/mercado.py +0 -0
  329. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/mexc.py +0 -0
  330. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/mexc3.py +0 -0
  331. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/ndax.py +0 -0
  332. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/novadax.py +0 -0
  333. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/oceanex.py +0 -0
  334. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/okcoin.py +0 -0
  335. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/okex.py +0 -0
  336. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/okex5.py +0 -0
  337. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/paymium.py +0 -0
  338. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/phemex.py +0 -0
  339. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/poloniex.py +0 -0
  340. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/poloniexfutures.py +0 -0
  341. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/alpaca.py +0 -0
  342. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/ascendex.py +0 -0
  343. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bequant.py +0 -0
  344. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/binance.py +0 -0
  345. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/binancecoinm.py +0 -0
  346. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/binanceus.py +0 -0
  347. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/binanceusdm.py +0 -0
  348. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitcoincom.py +0 -0
  349. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitfinex.py +0 -0
  350. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitfinex2.py +0 -0
  351. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitget.py +0 -0
  352. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitmart.py +0 -0
  353. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitmex.py +0 -0
  354. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitopro.py +0 -0
  355. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitpanda.py +0 -0
  356. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitrue.py +0 -0
  357. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitstamp.py +0 -0
  358. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bittrex.py +0 -0
  359. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bitvavo.py +0 -0
  360. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/blockchaincom.py +0 -0
  361. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/btcex.py +0 -0
  362. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/bybit.py +0 -0
  363. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/cex.py +0 -0
  364. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/coinbase.py +0 -0
  365. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/coinbaseprime.py +0 -0
  366. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/coinbasepro.py +0 -0
  367. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/coinex.py +0 -0
  368. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/cryptocom.py +0 -0
  369. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/currencycom.py +0 -0
  370. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/deribit.py +0 -0
  371. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/exmo.py +0 -0
  372. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/gate.py +0 -0
  373. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/gateio.py +0 -0
  374. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/gemini.py +0 -0
  375. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/hitbtc.py +0 -0
  376. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/hollaex.py +0 -0
  377. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/huobi.py +0 -0
  378. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/huobijp.py +0 -0
  379. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/huobipro.py +0 -0
  380. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/idex.py +0 -0
  381. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/independentreserve.py +0 -0
  382. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/kraken.py +0 -0
  383. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/krakenfutures.py +0 -0
  384. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/kucoin.py +0 -0
  385. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/kucoinfutures.py +0 -0
  386. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/luno.py +0 -0
  387. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/mexc.py +0 -0
  388. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/mexc3.py +0 -0
  389. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/ndax.py +0 -0
  390. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/okcoin.py +0 -0
  391. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/okex.py +0 -0
  392. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/phemex.py +0 -0
  393. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/poloniex.py +0 -0
  394. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/poloniexfutures.py +0 -0
  395. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/probit.py +0 -0
  396. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/ripio.py +0 -0
  397. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/upbit.py +0 -0
  398. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/wazirx.py +0 -0
  399. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/whitebit.py +0 -0
  400. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/woo.py +0 -0
  401. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/pro/zb.py +0 -0
  402. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/probit.py +0 -0
  403. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/__init__.py +0 -0
  404. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  405. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  406. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  407. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  408. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  409. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  410. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  411. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  412. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  413. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  414. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  415. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  416. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/__init__.py +0 -0
  417. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/__init__.py +0 -0
  418. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_account.py +0 -0
  419. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_balance.py +0 -0
  420. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_borrow_interest.py +0 -0
  421. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_borrow_rate.py +0 -0
  422. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_calculate_fee.py +0 -0
  423. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_crypto.py +0 -0
  424. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_currency.py +0 -0
  425. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_datetime.py +0 -0
  426. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  427. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_deep_extend.py +0 -0
  428. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  429. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  430. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_funding_rate_history.py +0 -0
  431. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_ledger_entry.py +0 -0
  432. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_ledger_item.py +0 -0
  433. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_leverage_tier.py +0 -0
  434. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_margin_modification.py +0 -0
  435. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_market.py +0 -0
  436. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_number.py +0 -0
  437. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_ohlcv.py +0 -0
  438. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_open_interest.py +0 -0
  439. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_order.py +0 -0
  440. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_order_book.py +0 -0
  441. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_position.py +0 -0
  442. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_shared_methods.py +0 -0
  443. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_status.py +0 -0
  444. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_throttle.py +0 -0
  445. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_ticker.py +0 -0
  446. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_trade.py +0 -0
  447. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_trading_fee.py +0 -0
  448. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/test/base/test_transaction.py +0 -0
  449. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/tidex.py +0 -0
  450. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/timex.py +0 -0
  451. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/tokocrypto.py +0 -0
  452. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/upbit.py +0 -0
  453. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/wavesexchange.py +0 -0
  454. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/wazirx.py +0 -0
  455. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/woo.py +0 -0
  456. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/yobit.py +0 -0
  457. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/zaif.py +0 -0
  458. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt/zonda.py +0 -0
  459. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt.egg-info/SOURCES.txt +0 -0
  460. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt.egg-info/dependency_links.txt +0 -0
  461. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt.egg-info/requires.txt +0 -0
  462. {ccxt-4.0.76 → ccxt-4.0.78}/ccxt.egg-info/top_level.txt +0 -0
  463. {ccxt-4.0.76 → ccxt-4.0.78}/setup.cfg +0 -0
  464. {ccxt-4.0.76 → ccxt-4.0.78}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.0.76
3
+ Version: 4.0.78
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
@@ -228,13 +228,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
228
228
 
229
229
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
230
230
 
231
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.76/dist/ccxt.browser.js
232
- * unpkg: https://unpkg.com/ccxt@4.0.76/dist/ccxt.browser.js
231
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.78/dist/ccxt.browser.js
232
+ * unpkg: https://unpkg.com/ccxt@4.0.78/dist/ccxt.browser.js
233
233
 
234
234
  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.
235
235
 
236
236
  ```HTML
237
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.76/dist/ccxt.browser.js"></script>
237
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.78/dist/ccxt.browser.js"></script>
238
238
  ```
239
239
 
240
240
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.0.76'
25
+ __version__ = '4.0.78'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -6,11 +6,11 @@ class ImplicitAPI:
6
6
  spot_v1_public_get_market_trades = spotV1PublicGetMarketTrades = Entry('market/trades', ['spot', 'v1', 'public'], 'GET', {'cost': 3})
7
7
  spot_v1_public_get_market_depth = spotV1PublicGetMarketDepth = Entry('market/depth', ['spot', 'v1', 'public'], 'GET', {'cost': 3})
8
8
  spot_v1_public_get_market_kline = spotV1PublicGetMarketKline = Entry('market/kline', ['spot', 'v1', 'public'], 'GET', {'cost': 3})
9
+ spot_v1_public_get_ticker_24hr = spotV1PublicGetTicker24hr = Entry('ticker/24hr', ['spot', 'v1', 'public'], 'GET', {'cost': 1})
9
10
  spot_v1_private_get_trade_query = spotV1PrivateGetTradeQuery = Entry('trade/query', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
10
11
  spot_v1_private_get_trade_openorders = spotV1PrivateGetTradeOpenOrders = Entry('trade/openOrders', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
11
12
  spot_v1_private_get_trade_historyorders = spotV1PrivateGetTradeHistoryOrders = Entry('trade/historyOrders', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
12
13
  spot_v1_private_get_account_balance = spotV1PrivateGetAccountBalance = Entry('account/balance', ['spot', 'v1', 'private'], 'GET', {'cost': 3})
13
- spot_v1_private_get_ticker_24hr = spotV1PrivateGetTicker24hr = Entry('ticker/24hr', ['spot', 'v1', 'private'], 'GET', {'cost': 1})
14
14
  spot_v1_private_post_trade_order = spotV1PrivatePostTradeOrder = Entry('trade/order', ['spot', 'v1', 'private'], 'POST', {'cost': 3})
15
15
  spot_v1_private_post_trade_cancel = spotV1PrivatePostTradeCancel = Entry('trade/cancel', ['spot', 'v1', 'private'], 'POST', {'cost': 3})
16
16
  spot_v1_private_post_trade_batchorders = spotV1PrivatePostTradeBatchOrders = Entry('trade/batchOrders', ['spot', 'v1', 'private'], 'POST', {'cost': 3})
@@ -80,6 +80,19 @@ class ImplicitAPI:
80
80
  private_subaccounts_post_sub_accounts_user_id_unlock = privateSubAccountsPostSubAccountsUserIdUnlock = Entry('sub_accounts/{user_id}/unlock', ['private', 'subAccounts'], 'POST', {'cost': 1})
81
81
  private_subaccounts_put_sub_accounts_user_id_keys_key = privateSubAccountsPutSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'PUT', {'cost': 1})
82
82
  private_subaccounts_delete_sub_accounts_user_id_keys_key = privateSubAccountsDeleteSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'DELETE', {'cost': 1})
83
+ private_portfolio_get_accounts = privatePortfolioGetAccounts = Entry('accounts', ['private', 'portfolio'], 'GET', {'cost': 1.5})
84
+ private_portfolio_get_account_mode = privatePortfolioGetAccountMode = Entry('account_mode', ['private', 'portfolio'], 'GET', {'cost': 1.5})
85
+ private_portfolio_get_borrowable = privatePortfolioGetBorrowable = Entry('borrowable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
86
+ private_portfolio_get_transferable = privatePortfolioGetTransferable = Entry('transferable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
87
+ private_portfolio_get_loans = privatePortfolioGetLoans = Entry('loans', ['private', 'portfolio'], 'GET', {'cost': 1.5})
88
+ private_portfolio_get_loan_records = privatePortfolioGetLoanRecords = Entry('loan_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
89
+ private_portfolio_get_interest_records = privatePortfolioGetInterestRecords = Entry('interest_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
90
+ private_portfolio_get_spot_orders = privatePortfolioGetSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'GET', {'cost': 1.5})
91
+ private_portfolio_get_spot_orders_order_id = privatePortfolioGetSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'GET', {'cost': 1.5})
92
+ private_portfolio_post_loans = privatePortfolioPostLoans = Entry('loans', ['private', 'portfolio'], 'POST', {'cost': 1.5})
93
+ private_portfolio_post_spot_orders = privatePortfolioPostSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'POST', {'cost': 1.5})
94
+ private_portfolio_delete_spot_orders_order_id = privatePortfolioDeleteSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'DELETE', {'cost': 1.5})
95
+ private_portfolio_patch_spot_orders_order_id = privatePortfolioPatchSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'PATCH', {'cost': 1.5})
83
96
  private_spot_get_fee = privateSpotGetFee = Entry('fee', ['private', 'spot'], 'GET', {'cost': 1})
84
97
  private_spot_get_batch_fee = privateSpotGetBatchFee = Entry('batch_fee', ['private', 'spot'], 'GET', {'cost': 1})
85
98
  private_spot_get_accounts = privateSpotGetAccounts = Entry('accounts', ['private', 'spot'], 'GET', {'cost': 1})
@@ -213,10 +226,21 @@ class ImplicitAPI:
213
226
  private_earn_get_uni_interest_records = privateEarnGetUniInterestRecords = Entry('uni/interest_records', ['private', 'earn'], 'GET', {'cost': 1.5})
214
227
  private_earn_post_uni_lends = privateEarnPostUniLends = Entry('uni/lends', ['private', 'earn'], 'POST', {'cost': 1.5})
215
228
  private_earn_patch_uni_lends = privateEarnPatchUniLends = Entry('uni/lends', ['private', 'earn'], 'PATCH', {'cost': 1.5})
229
+ private_loan_get_collateral_orders = privateLoanGetCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'GET', {'cost': 1.5})
230
+ private_loan_get_collateral_orders_order_id = privateLoanGetCollateralOrdersOrderId = Entry('collateral/orders/{order_id}', ['private', 'loan'], 'GET', {'cost': 1.5})
231
+ private_loan_get_collateral_repay_records = privateLoanGetCollateralRepayRecords = Entry('collateral/repay_records', ['private', 'loan'], 'GET', {'cost': 1.5})
232
+ private_loan_get_collateral_collaterals = privateLoanGetCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'GET', {'cost': 1.5})
233
+ private_loan_get_collateral_total_amount = privateLoanGetCollateralTotalAmount = Entry('collateral/total_amount', ['private', 'loan'], 'GET', {'cost': 1.5})
234
+ private_loan_get_collateral_ltv = privateLoanGetCollateralLtv = Entry('collateral/ltv', ['private', 'loan'], 'GET', {'cost': 1.5})
235
+ private_loan_get_collateral_currencies = privateLoanGetCollateralCurrencies = Entry('collateral/currencies', ['private', 'loan'], 'GET', {'cost': 1.5})
236
+ private_loan_post_collateral_orders = privateLoanPostCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'POST', {'cost': 1.5})
237
+ private_loan_post_collateral_repay = privateLoanPostCollateralRepay = Entry('collateral/repay', ['private', 'loan'], 'POST', {'cost': 1.5})
238
+ private_loan_post_collateral_collaterals = privateLoanPostCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'POST', {'cost': 1.5})
216
239
  private_account_get_detail = privateAccountGetDetail = Entry('detail', ['private', 'account'], 'GET', {'cost': 1.5})
217
240
  private_account_get_stp_groups = privateAccountGetStpGroups = Entry('stp_groups', ['private', 'account'], 'GET', {'cost': 1.5})
218
241
  private_account_get_stp_groups_stp_id_users = privateAccountGetStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'GET', {'cost': 1.5})
219
242
  private_account_post_stp_groups = privateAccountPostStpGroups = Entry('stp_groups', ['private', 'account'], 'POST', {'cost': 1.5})
220
243
  private_account_post_stp_groups_stp_id_users = privateAccountPostStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'POST', {'cost': 1.5})
244
+ private_account_delete_stp_groups_stp_id_users = privateAccountDeleteStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'DELETE', {'cost': 1.5})
221
245
  private_rebate_get_agency_transaction_history = privateRebateGetAgencyTransactionHistory = Entry('agency/transaction_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
222
246
  private_rebate_get_agency_commission_history = privateRebateGetAgencyCommissionHistory = Entry('agency/commission_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
@@ -80,6 +80,19 @@ class ImplicitAPI:
80
80
  private_subaccounts_post_sub_accounts_user_id_unlock = privateSubAccountsPostSubAccountsUserIdUnlock = Entry('sub_accounts/{user_id}/unlock', ['private', 'subAccounts'], 'POST', {'cost': 1})
81
81
  private_subaccounts_put_sub_accounts_user_id_keys_key = privateSubAccountsPutSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'PUT', {'cost': 1})
82
82
  private_subaccounts_delete_sub_accounts_user_id_keys_key = privateSubAccountsDeleteSubAccountsUserIdKeysKey = Entry('sub_accounts/{user_id}/keys/{key}', ['private', 'subAccounts'], 'DELETE', {'cost': 1})
83
+ private_portfolio_get_accounts = privatePortfolioGetAccounts = Entry('accounts', ['private', 'portfolio'], 'GET', {'cost': 1.5})
84
+ private_portfolio_get_account_mode = privatePortfolioGetAccountMode = Entry('account_mode', ['private', 'portfolio'], 'GET', {'cost': 1.5})
85
+ private_portfolio_get_borrowable = privatePortfolioGetBorrowable = Entry('borrowable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
86
+ private_portfolio_get_transferable = privatePortfolioGetTransferable = Entry('transferable', ['private', 'portfolio'], 'GET', {'cost': 1.5})
87
+ private_portfolio_get_loans = privatePortfolioGetLoans = Entry('loans', ['private', 'portfolio'], 'GET', {'cost': 1.5})
88
+ private_portfolio_get_loan_records = privatePortfolioGetLoanRecords = Entry('loan_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
89
+ private_portfolio_get_interest_records = privatePortfolioGetInterestRecords = Entry('interest_records', ['private', 'portfolio'], 'GET', {'cost': 1.5})
90
+ private_portfolio_get_spot_orders = privatePortfolioGetSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'GET', {'cost': 1.5})
91
+ private_portfolio_get_spot_orders_order_id = privatePortfolioGetSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'GET', {'cost': 1.5})
92
+ private_portfolio_post_loans = privatePortfolioPostLoans = Entry('loans', ['private', 'portfolio'], 'POST', {'cost': 1.5})
93
+ private_portfolio_post_spot_orders = privatePortfolioPostSpotOrders = Entry('spot/orders', ['private', 'portfolio'], 'POST', {'cost': 1.5})
94
+ private_portfolio_delete_spot_orders_order_id = privatePortfolioDeleteSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'DELETE', {'cost': 1.5})
95
+ private_portfolio_patch_spot_orders_order_id = privatePortfolioPatchSpotOrdersOrderId = Entry('spot/orders/{order_id}', ['private', 'portfolio'], 'PATCH', {'cost': 1.5})
83
96
  private_spot_get_fee = privateSpotGetFee = Entry('fee', ['private', 'spot'], 'GET', {'cost': 1})
84
97
  private_spot_get_batch_fee = privateSpotGetBatchFee = Entry('batch_fee', ['private', 'spot'], 'GET', {'cost': 1})
85
98
  private_spot_get_accounts = privateSpotGetAccounts = Entry('accounts', ['private', 'spot'], 'GET', {'cost': 1})
@@ -213,10 +226,21 @@ class ImplicitAPI:
213
226
  private_earn_get_uni_interest_records = privateEarnGetUniInterestRecords = Entry('uni/interest_records', ['private', 'earn'], 'GET', {'cost': 1.5})
214
227
  private_earn_post_uni_lends = privateEarnPostUniLends = Entry('uni/lends', ['private', 'earn'], 'POST', {'cost': 1.5})
215
228
  private_earn_patch_uni_lends = privateEarnPatchUniLends = Entry('uni/lends', ['private', 'earn'], 'PATCH', {'cost': 1.5})
229
+ private_loan_get_collateral_orders = privateLoanGetCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'GET', {'cost': 1.5})
230
+ private_loan_get_collateral_orders_order_id = privateLoanGetCollateralOrdersOrderId = Entry('collateral/orders/{order_id}', ['private', 'loan'], 'GET', {'cost': 1.5})
231
+ private_loan_get_collateral_repay_records = privateLoanGetCollateralRepayRecords = Entry('collateral/repay_records', ['private', 'loan'], 'GET', {'cost': 1.5})
232
+ private_loan_get_collateral_collaterals = privateLoanGetCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'GET', {'cost': 1.5})
233
+ private_loan_get_collateral_total_amount = privateLoanGetCollateralTotalAmount = Entry('collateral/total_amount', ['private', 'loan'], 'GET', {'cost': 1.5})
234
+ private_loan_get_collateral_ltv = privateLoanGetCollateralLtv = Entry('collateral/ltv', ['private', 'loan'], 'GET', {'cost': 1.5})
235
+ private_loan_get_collateral_currencies = privateLoanGetCollateralCurrencies = Entry('collateral/currencies', ['private', 'loan'], 'GET', {'cost': 1.5})
236
+ private_loan_post_collateral_orders = privateLoanPostCollateralOrders = Entry('collateral/orders', ['private', 'loan'], 'POST', {'cost': 1.5})
237
+ private_loan_post_collateral_repay = privateLoanPostCollateralRepay = Entry('collateral/repay', ['private', 'loan'], 'POST', {'cost': 1.5})
238
+ private_loan_post_collateral_collaterals = privateLoanPostCollateralCollaterals = Entry('collateral/collaterals', ['private', 'loan'], 'POST', {'cost': 1.5})
216
239
  private_account_get_detail = privateAccountGetDetail = Entry('detail', ['private', 'account'], 'GET', {'cost': 1.5})
217
240
  private_account_get_stp_groups = privateAccountGetStpGroups = Entry('stp_groups', ['private', 'account'], 'GET', {'cost': 1.5})
218
241
  private_account_get_stp_groups_stp_id_users = privateAccountGetStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'GET', {'cost': 1.5})
219
242
  private_account_post_stp_groups = privateAccountPostStpGroups = Entry('stp_groups', ['private', 'account'], 'POST', {'cost': 1.5})
220
243
  private_account_post_stp_groups_stp_id_users = privateAccountPostStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'POST', {'cost': 1.5})
244
+ private_account_delete_stp_groups_stp_id_users = privateAccountDeleteStpGroupsStpIdUsers = Entry('stp_groups/{stp_id}/users', ['private', 'account'], 'DELETE', {'cost': 1.5})
221
245
  private_rebate_get_agency_transaction_history = privateRebateGetAgencyTransactionHistory = Entry('agency/transaction_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
222
246
  private_rebate_get_agency_commission_history = privateRebateGetAgencyCommissionHistory = Entry('agency/commission_history', ['private', 'rebate'], 'GET', {'cost': 1.5})
@@ -60,6 +60,7 @@ class ImplicitAPI:
60
60
  public_get_tradingbot_grid_ai_param = publicGetTradingBotGridAiParam = Entry('tradingBot/grid/ai-param', 'public', 'GET', {'cost': 1})
61
61
  public_get_tradingbot_grid_min_investment = publicGetTradingBotGridMinInvestment = Entry('tradingBot/grid/min-investment', 'public', 'GET', {'cost': 1})
62
62
  public_get_tradingbot_public_rsi_back_testing = publicGetTradingBotPublicRsiBackTesting = Entry('tradingBot/public/rsi-back-testing', 'public', 'GET', {'cost': 1})
63
+ public_get_asset_exchange_list = publicGetAssetExchangeList = Entry('asset/exchange-list', 'public', 'GET', {'cost': 1.6666666666666667})
63
64
  public_get_finance_savings_lending_rate_summary = publicGetFinanceSavingsLendingRateSummary = Entry('finance/savings/lending-rate-summary', 'public', 'GET', {'cost': 1.6666666666666667})
64
65
  public_get_finance_savings_lending_rate_history = publicGetFinanceSavingsLendingRateHistory = Entry('finance/savings/lending-rate-history', 'public', 'GET', {'cost': 1.6666666666666667})
65
66
  public_get_finance_sfp_dcd_products = publicGetFinanceSfpDcdProducts = Entry('finance/sfp/dcd/products', 'public', 'GET', {'cost': 0.6666666666666666})
@@ -60,6 +60,7 @@ class ImplicitAPI:
60
60
  public_get_tradingbot_grid_ai_param = publicGetTradingBotGridAiParam = Entry('tradingBot/grid/ai-param', 'public', 'GET', {'cost': 1})
61
61
  public_get_tradingbot_grid_min_investment = publicGetTradingBotGridMinInvestment = Entry('tradingBot/grid/min-investment', 'public', 'GET', {'cost': 1})
62
62
  public_get_tradingbot_public_rsi_back_testing = publicGetTradingBotPublicRsiBackTesting = Entry('tradingBot/public/rsi-back-testing', 'public', 'GET', {'cost': 1})
63
+ public_get_asset_exchange_list = publicGetAssetExchangeList = Entry('asset/exchange-list', 'public', 'GET', {'cost': 1.6666666666666667})
63
64
  public_get_finance_savings_lending_rate_summary = publicGetFinanceSavingsLendingRateSummary = Entry('finance/savings/lending-rate-summary', 'public', 'GET', {'cost': 1.6666666666666667})
64
65
  public_get_finance_savings_lending_rate_history = publicGetFinanceSavingsLendingRateHistory = Entry('finance/savings/lending-rate-history', 'public', 'GET', {'cost': 1.6666666666666667})
65
66
  public_get_finance_sfp_dcd_products = publicGetFinanceSfpDcdProducts = Entry('finance/sfp/dcd/products', 'public', 'GET', {'cost': 0.6666666666666666})
@@ -60,6 +60,7 @@ class ImplicitAPI:
60
60
  public_get_tradingbot_grid_ai_param = publicGetTradingBotGridAiParam = Entry('tradingBot/grid/ai-param', 'public', 'GET', {'cost': 1})
61
61
  public_get_tradingbot_grid_min_investment = publicGetTradingBotGridMinInvestment = Entry('tradingBot/grid/min-investment', 'public', 'GET', {'cost': 1})
62
62
  public_get_tradingbot_public_rsi_back_testing = publicGetTradingBotPublicRsiBackTesting = Entry('tradingBot/public/rsi-back-testing', 'public', 'GET', {'cost': 1})
63
+ public_get_asset_exchange_list = publicGetAssetExchangeList = Entry('asset/exchange-list', 'public', 'GET', {'cost': 1.6666666666666667})
63
64
  public_get_finance_savings_lending_rate_summary = publicGetFinanceSavingsLendingRateSummary = Entry('finance/savings/lending-rate-summary', 'public', 'GET', {'cost': 1.6666666666666667})
64
65
  public_get_finance_savings_lending_rate_history = publicGetFinanceSavingsLendingRateHistory = Entry('finance/savings/lending-rate-history', 'public', 'GET', {'cost': 1.6666666666666667})
65
66
  public_get_finance_sfp_dcd_products = publicGetFinanceSfpDcdProducts = Entry('finance/sfp/dcd/products', 'public', 'GET', {'cost': 0.6666666666666666})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.76'
7
+ __version__ = '4.0.78'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.0.76'
5
+ __version__ = '4.0.78'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -2446,10 +2446,15 @@ class Exchange(BaseExchange):
2446
2446
  networkItem = self.safe_value(networks, networkCode, {})
2447
2447
  precision = self.safe_value(networkItem, 'precision', precision)
2448
2448
  if precision is None:
2449
- return fee
2449
+ return self.forceString(fee)
2450
2450
  else:
2451
2451
  return self.decimal_to_precision(fee, ROUND, precision, self.precisionMode, self.paddingMode)
2452
2452
 
2453
+ def force_string(self, value):
2454
+ if not isinstance(value, str):
2455
+ return self.number_to_string(value)
2456
+ return value
2457
+
2453
2458
  def is_tick_precision(self):
2454
2459
  return self.precisionMode == TICK_SIZE
2455
2460
 
@@ -108,6 +108,7 @@ class bingx(Exchange, ImplicitAPI):
108
108
  'market/trades': 3,
109
109
  'market/depth': 3,
110
110
  'market/kline': 3,
111
+ 'ticker/24hr': 1,
111
112
  },
112
113
  },
113
114
  'private': {
@@ -116,7 +117,6 @@ class bingx(Exchange, ImplicitAPI):
116
117
  'trade/openOrders': 3,
117
118
  'trade/historyOrders': 3,
118
119
  'account/balance': 3,
119
- 'ticker/24hr': 1,
120
120
  },
121
121
  'post': {
122
122
  'trade/order': 3,
@@ -274,6 +274,7 @@ class bingx(Exchange, ImplicitAPI):
274
274
  '500': ExchangeError,
275
275
  '504': ExchangeError,
276
276
  '100001': AuthenticationError,
277
+ '100412': AuthenticationError,
277
278
  '100202': InsufficientFunds,
278
279
  '100400': BadRequest,
279
280
  '100440': ExchangeError,
@@ -1070,9 +1071,9 @@ class bingx(Exchange, ImplicitAPI):
1070
1071
  }
1071
1072
  response = None
1072
1073
  if market['spot']:
1073
- response = await self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1074
+ response = await self.spotV1PublicGetTicker24hr(self.extend(request, params))
1074
1075
  else:
1075
- response = await self.spotV1PublicGetCommonSymbols(self.extend(request, params))
1076
+ response = await self.swapV2PublicGetQuoteTicker(self.extend(request, params))
1076
1077
  #
1077
1078
  # {
1078
1079
  # "code": 0,
@@ -1094,7 +1095,8 @@ class bingx(Exchange, ImplicitAPI):
1094
1095
  # }
1095
1096
  #
1096
1097
  data = self.safe_value(response, 'data')
1097
- return self.parse_ticker(data, market)
1098
+ ticker = self.safe_value(data, 0, data)
1099
+ return self.parse_ticker(ticker, market)
1098
1100
 
1099
1101
  async def fetch_tickers(self, symbols: Optional[List[str]] = None, params={}):
1100
1102
  """
@@ -1105,13 +1107,18 @@ class bingx(Exchange, ImplicitAPI):
1105
1107
  :returns dict: a dictionary of `ticker structures <https://github.com/ccxt/ccxt/wiki/Manual#ticker-structure>`
1106
1108
  """
1107
1109
  await self.load_markets()
1110
+ market = None
1108
1111
  if symbols is not None:
1109
1112
  symbols = self.market_symbols(symbols)
1110
1113
  firstSymbol = self.safe_string(symbols, 0)
1111
1114
  market = self.market(firstSymbol)
1112
- if not market['swap']:
1113
- raise BadRequest(self.id + ' fetchTicker is only supported for swap markets.')
1114
- response = await self.swapV2PublicGetQuoteTicker(params)
1115
+ type = None
1116
+ type, params = self.handle_market_type_and_params('fetchTickers', market, params)
1117
+ response = None
1118
+ if type == 'spot':
1119
+ response = await self.spotV1PublicGetTicker24hr(params)
1120
+ else:
1121
+ response = await self.swapV2PublicGetQuoteTicker(params)
1115
1122
  #
1116
1123
  # {
1117
1124
  # "code": 0,
@@ -1138,6 +1145,20 @@ class bingx(Exchange, ImplicitAPI):
1138
1145
  return self.parse_tickers(tickers, symbols)
1139
1146
 
1140
1147
  def parse_ticker(self, ticker, market=None):
1148
+ #
1149
+ # spot
1150
+ # {
1151
+ # symbol: 'BTC-USDT',
1152
+ # openPrice: '26032.08',
1153
+ # highPrice: '26178.86',
1154
+ # lowPrice: '25968.18',
1155
+ # lastPrice: '26113.60',
1156
+ # volume: '1161.79',
1157
+ # quoteVolume: '30288466.44',
1158
+ # openTime: '1693081020762',
1159
+ # closeTime: '1693167420762'
1160
+ # }
1161
+ # swap
1141
1162
  #
1142
1163
  # {
1143
1164
  # "symbol": "BTC-USDT",
@@ -1155,15 +1176,15 @@ class bingx(Exchange, ImplicitAPI):
1155
1176
  # }
1156
1177
  #
1157
1178
  marketId = self.safe_string(ticker, 'symbol')
1158
- defaultType = self.safe_string(self.options, 'defaultType', 'swap')
1159
- symbol = self.safe_symbol(marketId, market, '-', defaultType)
1179
+ change = self.safe_string(ticker, 'priceChange')
1180
+ type = 'spot' if (change is None) else 'swap'
1181
+ symbol = self.safe_symbol(marketId, market, None, type)
1160
1182
  open = self.safe_string(ticker, 'openPrice')
1161
1183
  high = self.safe_string(ticker, 'highPrice')
1162
1184
  low = self.safe_string(ticker, 'lowPrice')
1163
1185
  close = self.safe_string(ticker, 'lastPrice')
1164
1186
  quoteVolume = self.safe_string(ticker, 'quoteVolume')
1165
1187
  baseVolume = self.safe_string(ticker, 'volume')
1166
- change = self.safe_string(ticker, 'chapriceChangenge')
1167
1188
  percentage = self.safe_string(ticker, 'priceChangePercent')
1168
1189
  ts = self.safe_integer(ticker, 'closeTime')
1169
1190
  datetime = self.iso8601(ts)
@@ -2671,25 +2692,21 @@ class bingx(Exchange, ImplicitAPI):
2671
2692
  self.parse_transaction(data)
2672
2693
 
2673
2694
  def parse_params(self, params):
2674
- result = ''
2675
2695
  sortedParams = self.keysort(params)
2676
2696
  keys = list(sortedParams.keys())
2677
2697
  for i in range(0, len(keys)):
2678
2698
  key = keys[i]
2679
- if i > 0:
2680
- result += '&'
2681
2699
  value = sortedParams[key]
2682
2700
  if isinstance(value, list):
2683
- result += key + '=['
2701
+ arrStr = '['
2684
2702
  for j in range(0, len(value)):
2685
2703
  arrayElement = value[j]
2686
2704
  if j > 0:
2687
- result += ','
2688
- result += str(arrayElement)
2689
- result += ']'
2690
- else:
2691
- result += key + '=' + str(value)
2692
- return result
2705
+ arrStr += ','
2706
+ arrStr += str(arrayElement)
2707
+ arrStr += ']'
2708
+ sortedParams[key] = arrStr
2709
+ return sortedParams
2693
2710
 
2694
2711
  def sign(self, path, section='public', method='GET', params={}, headers=None, body=None):
2695
2712
  type = section[0]
@@ -2706,13 +2723,15 @@ class bingx(Exchange, ImplicitAPI):
2706
2723
  params = self.omit(params, self.extract_params(path))
2707
2724
  params = self.keysort(params)
2708
2725
  if access == 'public':
2726
+ params['timestamp'] = self.nonce()
2709
2727
  if params:
2710
2728
  url += '?' + self.urlencode(params)
2711
2729
  elif access == 'private':
2712
2730
  self.check_required_credentials()
2713
2731
  params['timestamp'] = self.nonce()
2714
- query = self.parse_params(params)
2715
- signature = self.hmac(self.encode(query), self.encode(self.secret), hashlib.sha256)
2732
+ parsedParams = self.parse_params(params)
2733
+ query = self.urlencode(parsedParams)
2734
+ signature = self.hmac(self.encode(self.rawencode(parsedParams)), self.encode(self.secret), hashlib.sha256)
2716
2735
  if params:
2717
2736
  query = '?' + query + '&'
2718
2737
  else:
@@ -298,6 +298,29 @@ class gate(Exchange, ImplicitAPI):
298
298
  'sub_accounts/{user_id}/keys/{key}': 1,
299
299
  },
300
300
  },
301
+ 'portfolio': {
302
+ 'get': {
303
+ 'accounts': 1.5,
304
+ 'account_mode': 1.5,
305
+ 'borrowable': 1.5,
306
+ 'transferable': 1.5,
307
+ 'loans': 1.5,
308
+ 'loan_records': 1.5,
309
+ 'interest_records': 1.5,
310
+ 'spot/orders': 1.5,
311
+ 'spot/orders/{order_id}': 1.5,
312
+ },
313
+ 'post': {
314
+ 'loans': 1.5,
315
+ 'spot/orders': 1.5,
316
+ },
317
+ 'delete': {
318
+ 'spot/orders/{order_id}': 1.5,
319
+ },
320
+ 'patch': {
321
+ 'spot/orders/{order_id}': 1.5,
322
+ },
323
+ },
301
324
  'spot': {
302
325
  'get': {
303
326
  'fee': 1,
@@ -491,6 +514,22 @@ class gate(Exchange, ImplicitAPI):
491
514
  'uni/lends': 1.5,
492
515
  },
493
516
  },
517
+ 'loan': {
518
+ 'get': {
519
+ 'collateral/orders': 1.5,
520
+ 'collateral/orders/{order_id}': 1.5,
521
+ 'collateral/repay_records': 1.5,
522
+ 'collateral/collaterals': 1.5,
523
+ 'collateral/total_amount': 1.5,
524
+ 'collateral/ltv': 1.5,
525
+ 'collateral/currencies': 1.5,
526
+ },
527
+ 'post': {
528
+ 'collateral/orders': 1.5,
529
+ 'collateral/repay': 1.5,
530
+ 'collateral/collaterals': 1.5,
531
+ },
532
+ },
494
533
  'account': {
495
534
  'get': {
496
535
  'detail': 1.5,
@@ -501,6 +540,9 @@ class gate(Exchange, ImplicitAPI):
501
540
  'stp_groups': 1.5,
502
541
  'stp_groups/{stp_id}/users': 1.5,
503
542
  },
543
+ 'delete': {
544
+ 'stp_groups/{stp_id}/users': 1.5,
545
+ },
504
546
  },
505
547
  'rebate': {
506
548
  'get': {
@@ -1098,7 +1098,7 @@ class kucoinfutures(kucoin, ImplicitAPI):
1098
1098
  'size': preciseAmount,
1099
1099
  'leverage': 1,
1100
1100
  }
1101
- triggerPrice, stopLossPrice, takeProfitPrice = self.handleTriggerPrices(params)
1101
+ triggerPrice, stopLossPrice, takeProfitPrice = self.handle_trigger_prices(params)
1102
1102
  params = self.omit(params, ['stopLossPrice', 'takeProfitPrice', 'triggerPrice', 'stopPrice'])
1103
1103
  if triggerPrice:
1104
1104
  request['stop'] = 'up' if (side == 'buy') else 'down'
@@ -246,6 +246,7 @@ class okx(Exchange, ImplicitAPI):
246
246
  'tradingBot/grid/ai-param': 1,
247
247
  'tradingBot/grid/min-investment': 1,
248
248
  'tradingBot/public/rsi-back-testing': 1,
249
+ 'asset/exchange-list': 5 / 3,
249
250
  'finance/savings/lending-rate-summary': 5 / 3,
250
251
  'finance/savings/lending-rate-history': 5 / 3,
251
252
  # public broker
@@ -268,6 +268,7 @@ class whitebit(Exchange, ImplicitAPI):
268
268
  '422': OrderNotFound, # {"response":null,"status":422,"errors":{"orderId":["Finished order id 1295772653 not found on your account"]},"notification":null,"warning":"Finished order id 1295772653 not found on your account","_token":null}
269
269
  },
270
270
  'broad': {
271
+ 'This action is unauthorized': PermissionDenied, # {"code":2,"message":"This action is unauthorized. Enable your key in API settings"}
271
272
  'Given amount is less than min amount': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Given amount is less than min amount 200000"],"total":["Total is less than 5.05"]}}
272
273
  'Total is less than': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Given amount is less than min amount 200000"],"total":["Total is less than 5.05"]}}
273
274
  'fee must be no less than': InvalidOrder, # {"code":0,"message":"Validation failed","errors":{"amount":["Total amount + fee must be no less than 5.05505"]}}
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.76'
7
+ __version__ = '4.0.78'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -3626,10 +3626,15 @@ class Exchange(object):
3626
3626
  networkItem = self.safe_value(networks, networkCode, {})
3627
3627
  precision = self.safe_value(networkItem, 'precision', precision)
3628
3628
  if precision is None:
3629
- return fee
3629
+ return self.forceString(fee)
3630
3630
  else:
3631
3631
  return self.decimal_to_precision(fee, ROUND, precision, self.precisionMode, self.paddingMode)
3632
3632
 
3633
+ def force_string(self, value):
3634
+ if not isinstance(value, str):
3635
+ return self.number_to_string(value)
3636
+ return value
3637
+
3633
3638
  def is_tick_precision(self):
3634
3639
  return self.precisionMode == TICK_SIZE
3635
3640