ccxt 4.1.66__tar.gz → 4.1.68__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 (453) hide show
  1. {ccxt-4.1.66/ccxt.egg-info → ccxt-4.1.68}/PKG-INFO +4 -4
  2. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/__init__.py +1 -1
  3. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/__init__.py +1 -1
  4. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/exchange.py +2 -2
  5. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bingx.py +1 -0
  6. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bybit.py +2 -2
  7. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinbase.py +1 -1
  8. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/gate.py +199 -2
  9. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/base/exchange.py +12 -5
  10. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/base/types.py +1 -0
  11. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bingx.py +1 -0
  12. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bybit.py +2 -2
  13. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinbase.py +1 -1
  14. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/gate.py +199 -2
  15. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/__init__.py +1 -1
  16. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/binance.py +1 -1
  17. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/phemex.py +1 -1
  18. {ccxt-4.1.66 → ccxt-4.1.68/ccxt.egg-info}/PKG-INFO +4 -4
  19. {ccxt-4.1.66 → ccxt-4.1.68}/package.json +1 -1
  20. {ccxt-4.1.66 → ccxt-4.1.68}/LICENSE.txt +0 -0
  21. {ccxt-4.1.66 → ccxt-4.1.68}/MANIFEST.in +0 -0
  22. {ccxt-4.1.66 → ccxt-4.1.68}/README.rst +0 -0
  23. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/__init__.py +0 -0
  24. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/ace.py +0 -0
  25. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/alpaca.py +0 -0
  26. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/ascendex.py +0 -0
  27. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bequant.py +0 -0
  28. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bigone.py +0 -0
  29. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/binance.py +0 -0
  30. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/binancecoinm.py +0 -0
  31. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/binanceus.py +0 -0
  32. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/binanceusdm.py +0 -0
  33. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bingx.py +0 -0
  34. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bit2c.py +0 -0
  35. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitbank.py +0 -0
  36. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitbay.py +0 -0
  37. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitbns.py +0 -0
  38. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitcoincom.py +0 -0
  39. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitfinex.py +0 -0
  40. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitfinex2.py +0 -0
  41. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitflyer.py +0 -0
  42. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitforex.py +0 -0
  43. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitget.py +0 -0
  44. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bithumb.py +0 -0
  45. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitmart.py +0 -0
  46. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitmex.py +0 -0
  47. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitopro.py +0 -0
  48. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitpanda.py +0 -0
  49. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitrue.py +0 -0
  50. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitso.py +0 -0
  51. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitstamp.py +0 -0
  52. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bittrex.py +0 -0
  53. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bitvavo.py +0 -0
  54. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bl3p.py +0 -0
  55. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/blockchaincom.py +0 -0
  56. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/btcalpha.py +0 -0
  57. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/btcbox.py +0 -0
  58. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/btcmarkets.py +0 -0
  59. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/btcturk.py +0 -0
  60. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/bybit.py +0 -0
  61. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/cex.py +0 -0
  62. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinbase.py +0 -0
  63. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinbaseprime.py +0 -0
  64. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinbasepro.py +0 -0
  65. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coincheck.py +0 -0
  66. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinex.py +0 -0
  67. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinlist.py +0 -0
  68. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinmate.py +0 -0
  69. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinone.py +0 -0
  70. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinsph.py +0 -0
  71. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/coinspot.py +0 -0
  72. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/cryptocom.py +0 -0
  73. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/currencycom.py +0 -0
  74. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/delta.py +0 -0
  75. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/deribit.py +0 -0
  76. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/digifinex.py +0 -0
  77. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/exmo.py +0 -0
  78. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/fmfwio.py +0 -0
  79. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/gate.py +0 -0
  80. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/gateio.py +0 -0
  81. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/gemini.py +0 -0
  82. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/hitbtc.py +0 -0
  83. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/hitbtc3.py +0 -0
  84. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/hollaex.py +0 -0
  85. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/htx.py +0 -0
  86. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/huobi.py +0 -0
  87. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/huobijp.py +0 -0
  88. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/idex.py +0 -0
  89. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/independentreserve.py +0 -0
  90. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/indodax.py +0 -0
  91. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/kraken.py +0 -0
  92. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/krakenfutures.py +0 -0
  93. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/kucoin.py +0 -0
  94. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/kucoinfutures.py +0 -0
  95. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/kuna.py +0 -0
  96. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/latoken.py +0 -0
  97. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/lbank.py +0 -0
  98. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/luno.py +0 -0
  99. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/lykke.py +0 -0
  100. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/mercado.py +0 -0
  101. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/mexc.py +0 -0
  102. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/ndax.py +0 -0
  103. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/novadax.py +0 -0
  104. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/oceanex.py +0 -0
  105. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/okcoin.py +0 -0
  106. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/okx.py +0 -0
  107. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/p2b.py +0 -0
  108. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/paymium.py +0 -0
  109. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/phemex.py +0 -0
  110. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/poloniex.py +0 -0
  111. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/poloniexfutures.py +0 -0
  112. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/probit.py +0 -0
  113. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/tidex.py +0 -0
  114. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/timex.py +0 -0
  115. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/tokocrypto.py +0 -0
  116. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/upbit.py +0 -0
  117. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/wavesexchange.py +0 -0
  118. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/wazirx.py +0 -0
  119. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/whitebit.py +0 -0
  120. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/woo.py +0 -0
  121. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/yobit.py +0 -0
  122. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/zaif.py +0 -0
  123. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/abstract/zonda.py +0 -0
  124. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/ace.py +0 -0
  125. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/alpaca.py +0 -0
  126. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/ascendex.py +0 -0
  127. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/ace.py +0 -0
  128. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/alpaca.py +0 -0
  129. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/ascendex.py +0 -0
  130. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/__init__.py +0 -0
  131. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/throttler.py +0 -0
  132. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/__init__.py +0 -0
  133. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  134. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/cache.py +0 -0
  135. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/client.py +0 -0
  136. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/fast_client.py +0 -0
  137. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/functions.py +0 -0
  138. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/future.py +0 -0
  139. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/order_book.py +0 -0
  140. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  141. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bequant.py +0 -0
  142. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bigone.py +0 -0
  143. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/binance.py +0 -0
  144. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/binancecoinm.py +0 -0
  145. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/binanceus.py +0 -0
  146. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/binanceusdm.py +0 -0
  147. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bit2c.py +0 -0
  148. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitbank.py +0 -0
  149. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitbay.py +0 -0
  150. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitbns.py +0 -0
  151. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitcoincom.py +0 -0
  152. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitfinex.py +0 -0
  153. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitfinex2.py +0 -0
  154. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitflyer.py +0 -0
  155. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitforex.py +0 -0
  156. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitget.py +0 -0
  157. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bithumb.py +0 -0
  158. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitmart.py +0 -0
  159. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitmex.py +0 -0
  160. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitopro.py +0 -0
  161. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitpanda.py +0 -0
  162. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitrue.py +0 -0
  163. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitso.py +0 -0
  164. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitstamp.py +0 -0
  165. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bittrex.py +0 -0
  166. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bitvavo.py +0 -0
  167. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/bl3p.py +0 -0
  168. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/blockchaincom.py +0 -0
  169. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/btcalpha.py +0 -0
  170. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/btcbox.py +0 -0
  171. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/btcmarkets.py +0 -0
  172. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/btcturk.py +0 -0
  173. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/cex.py +0 -0
  174. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinbaseprime.py +0 -0
  175. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinbasepro.py +0 -0
  176. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coincheck.py +0 -0
  177. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinex.py +0 -0
  178. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinlist.py +0 -0
  179. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinmate.py +0 -0
  180. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinone.py +0 -0
  181. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinsph.py +0 -0
  182. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/coinspot.py +0 -0
  183. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/cryptocom.py +0 -0
  184. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/currencycom.py +0 -0
  185. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/delta.py +0 -0
  186. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/deribit.py +0 -0
  187. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/digifinex.py +0 -0
  188. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/exmo.py +0 -0
  189. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/flowbtc.py +0 -0
  190. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/fmfwio.py +0 -0
  191. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/gateio.py +0 -0
  192. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/gemini.py +0 -0
  193. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/hitbtc.py +0 -0
  194. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/hitbtc3.py +0 -0
  195. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/hollaex.py +0 -0
  196. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/htx.py +0 -0
  197. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/huobi.py +0 -0
  198. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/huobijp.py +0 -0
  199. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/huobipro.py +0 -0
  200. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/idex.py +0 -0
  201. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/independentreserve.py +0 -0
  202. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/indodax.py +0 -0
  203. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/kraken.py +0 -0
  204. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/krakenfutures.py +0 -0
  205. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/kucoin.py +0 -0
  206. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/kucoinfutures.py +0 -0
  207. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/kuna.py +0 -0
  208. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/latoken.py +0 -0
  209. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/lbank.py +0 -0
  210. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/luno.py +0 -0
  211. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/lykke.py +0 -0
  212. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/mercado.py +0 -0
  213. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/mexc.py +0 -0
  214. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/mexc3.py +0 -0
  215. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/ndax.py +0 -0
  216. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/novadax.py +0 -0
  217. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/oceanex.py +0 -0
  218. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/okcoin.py +0 -0
  219. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/okex.py +0 -0
  220. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/okex5.py +0 -0
  221. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/okx.py +0 -0
  222. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/p2b.py +0 -0
  223. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/paymium.py +0 -0
  224. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/phemex.py +0 -0
  225. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/poloniex.py +0 -0
  226. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/poloniexfutures.py +0 -0
  227. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/probit.py +0 -0
  228. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/tidex.py +0 -0
  229. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/timex.py +0 -0
  230. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/tokocrypto.py +0 -0
  231. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/upbit.py +0 -0
  232. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/wavesexchange.py +0 -0
  233. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/wazirx.py +0 -0
  234. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/whitebit.py +0 -0
  235. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/woo.py +0 -0
  236. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/yobit.py +0 -0
  237. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/zaif.py +0 -0
  238. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/async_support/zonda.py +0 -0
  239. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/base/__init__.py +0 -0
  240. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/base/decimal_to_precision.py +0 -0
  241. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/base/errors.py +0 -0
  242. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/base/precise.py +0 -0
  243. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bequant.py +0 -0
  244. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bigone.py +0 -0
  245. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/binance.py +0 -0
  246. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/binancecoinm.py +0 -0
  247. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/binanceus.py +0 -0
  248. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/binanceusdm.py +0 -0
  249. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bit2c.py +0 -0
  250. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitbank.py +0 -0
  251. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitbay.py +0 -0
  252. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitbns.py +0 -0
  253. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitcoincom.py +0 -0
  254. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitfinex.py +0 -0
  255. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitfinex2.py +0 -0
  256. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitflyer.py +0 -0
  257. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitforex.py +0 -0
  258. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitget.py +0 -0
  259. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bithumb.py +0 -0
  260. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitmart.py +0 -0
  261. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitmex.py +0 -0
  262. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitopro.py +0 -0
  263. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitpanda.py +0 -0
  264. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitrue.py +0 -0
  265. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitso.py +0 -0
  266. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitstamp.py +0 -0
  267. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bittrex.py +0 -0
  268. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bitvavo.py +0 -0
  269. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/bl3p.py +0 -0
  270. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/blockchaincom.py +0 -0
  271. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/btcalpha.py +0 -0
  272. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/btcbox.py +0 -0
  273. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/btcmarkets.py +0 -0
  274. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/btcturk.py +0 -0
  275. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/cex.py +0 -0
  276. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinbaseprime.py +0 -0
  277. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinbasepro.py +0 -0
  278. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coincheck.py +0 -0
  279. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinex.py +0 -0
  280. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinlist.py +0 -0
  281. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinmate.py +0 -0
  282. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinone.py +0 -0
  283. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinsph.py +0 -0
  284. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/coinspot.py +0 -0
  285. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/cryptocom.py +0 -0
  286. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/currencycom.py +0 -0
  287. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/delta.py +0 -0
  288. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/deribit.py +0 -0
  289. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/digifinex.py +0 -0
  290. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/exmo.py +0 -0
  291. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/flowbtc.py +0 -0
  292. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/fmfwio.py +0 -0
  293. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/gateio.py +0 -0
  294. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/gemini.py +0 -0
  295. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/hitbtc.py +0 -0
  296. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/hitbtc3.py +0 -0
  297. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/hollaex.py +0 -0
  298. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/htx.py +0 -0
  299. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/huobi.py +0 -0
  300. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/huobijp.py +0 -0
  301. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/huobipro.py +0 -0
  302. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/idex.py +0 -0
  303. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/independentreserve.py +0 -0
  304. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/indodax.py +0 -0
  305. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/kraken.py +0 -0
  306. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/krakenfutures.py +0 -0
  307. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/kucoin.py +0 -0
  308. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/kucoinfutures.py +0 -0
  309. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/kuna.py +0 -0
  310. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/latoken.py +0 -0
  311. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/lbank.py +0 -0
  312. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/luno.py +0 -0
  313. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/lykke.py +0 -0
  314. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/mercado.py +0 -0
  315. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/mexc.py +0 -0
  316. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/mexc3.py +0 -0
  317. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/ndax.py +0 -0
  318. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/novadax.py +0 -0
  319. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/oceanex.py +0 -0
  320. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/okcoin.py +0 -0
  321. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/okex.py +0 -0
  322. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/okex5.py +0 -0
  323. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/okx.py +0 -0
  324. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/p2b.py +0 -0
  325. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/paymium.py +0 -0
  326. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/phemex.py +0 -0
  327. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/poloniex.py +0 -0
  328. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/poloniexfutures.py +0 -0
  329. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/alpaca.py +0 -0
  330. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/ascendex.py +0 -0
  331. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bequant.py +0 -0
  332. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/binancecoinm.py +0 -0
  333. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/binanceus.py +0 -0
  334. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/binanceusdm.py +0 -0
  335. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bingx.py +0 -0
  336. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitcoincom.py +0 -0
  337. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitfinex.py +0 -0
  338. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitfinex2.py +0 -0
  339. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitget.py +0 -0
  340. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitmart.py +0 -0
  341. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitmex.py +0 -0
  342. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitopro.py +0 -0
  343. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitpanda.py +0 -0
  344. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitrue.py +0 -0
  345. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitstamp.py +0 -0
  346. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bittrex.py +0 -0
  347. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bitvavo.py +0 -0
  348. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/blockchaincom.py +0 -0
  349. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/bybit.py +0 -0
  350. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/cex.py +0 -0
  351. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/coinbase.py +0 -0
  352. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/coinbaseprime.py +0 -0
  353. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/coinbasepro.py +0 -0
  354. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/coinex.py +0 -0
  355. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/cryptocom.py +0 -0
  356. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/currencycom.py +0 -0
  357. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/deribit.py +0 -0
  358. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/exmo.py +0 -0
  359. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/gate.py +0 -0
  360. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/gateio.py +0 -0
  361. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/gemini.py +0 -0
  362. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/hitbtc.py +0 -0
  363. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/hollaex.py +0 -0
  364. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/htx.py +0 -0
  365. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/huobi.py +0 -0
  366. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/huobijp.py +0 -0
  367. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/huobipro.py +0 -0
  368. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/idex.py +0 -0
  369. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/independentreserve.py +0 -0
  370. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/kraken.py +0 -0
  371. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/krakenfutures.py +0 -0
  372. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/kucoin.py +0 -0
  373. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/kucoinfutures.py +0 -0
  374. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/luno.py +0 -0
  375. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/mexc.py +0 -0
  376. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/mexc3.py +0 -0
  377. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/ndax.py +0 -0
  378. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/okcoin.py +0 -0
  379. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/okex.py +0 -0
  380. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/okx.py +0 -0
  381. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/poloniex.py +0 -0
  382. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/poloniexfutures.py +0 -0
  383. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/probit.py +0 -0
  384. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/upbit.py +0 -0
  385. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/wazirx.py +0 -0
  386. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/whitebit.py +0 -0
  387. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/pro/woo.py +0 -0
  388. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/probit.py +0 -0
  389. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/__init__.py +0 -0
  390. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  391. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  392. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  393. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  394. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  395. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  396. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  397. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  398. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  399. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  400. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  401. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  402. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/__init__.py +0 -0
  403. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/__init__.py +0 -0
  404. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_account.py +0 -0
  405. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_balance.py +0 -0
  406. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_borrow_interest.py +0 -0
  407. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_borrow_rate.py +0 -0
  408. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_calculate_fee.py +0 -0
  409. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_crypto.py +0 -0
  410. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_currency.py +0 -0
  411. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_datetime.py +0 -0
  412. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  413. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_deep_extend.py +0 -0
  414. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  415. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  416. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_funding_rate_history.py +0 -0
  417. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_ledger_entry.py +0 -0
  418. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_ledger_item.py +0 -0
  419. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_leverage_tier.py +0 -0
  420. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_margin_modification.py +0 -0
  421. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_market.py +0 -0
  422. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_number.py +0 -0
  423. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_ohlcv.py +0 -0
  424. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_open_interest.py +0 -0
  425. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_order.py +0 -0
  426. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_order_book.py +0 -0
  427. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_position.py +0 -0
  428. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_shared_methods.py +0 -0
  429. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_status.py +0 -0
  430. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_throttle.py +0 -0
  431. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_ticker.py +0 -0
  432. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_trade.py +0 -0
  433. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_trading_fee.py +0 -0
  434. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/base/test_transaction.py +0 -0
  435. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/test_async.py +0 -0
  436. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/test/test_sync.py +0 -0
  437. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/tidex.py +0 -0
  438. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/timex.py +0 -0
  439. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/tokocrypto.py +0 -0
  440. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/upbit.py +0 -0
  441. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/wavesexchange.py +0 -0
  442. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/wazirx.py +0 -0
  443. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/whitebit.py +0 -0
  444. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/woo.py +0 -0
  445. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/yobit.py +0 -0
  446. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/zaif.py +0 -0
  447. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt/zonda.py +0 -0
  448. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt.egg-info/SOURCES.txt +0 -0
  449. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt.egg-info/dependency_links.txt +0 -0
  450. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt.egg-info/requires.txt +0 -0
  451. {ccxt-4.1.66 → ccxt-4.1.68}/ccxt.egg-info/top_level.txt +0 -0
  452. {ccxt-4.1.66 → ccxt-4.1.68}/setup.cfg +0 -0
  453. {ccxt-4.1.66 → ccxt-4.1.68}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.1.66
3
+ Version: 4.1.68
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 130+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -224,13 +224,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
224
224
 
225
225
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
226
226
 
227
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.1.66/dist/ccxt.browser.js
228
- * unpkg: https://unpkg.com/ccxt@4.1.66/dist/ccxt.browser.js
227
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.1.68/dist/ccxt.browser.js
228
+ * unpkg: https://unpkg.com/ccxt@4.1.68/dist/ccxt.browser.js
229
229
 
230
230
  CDNs are not updated in real-time and may have delays. Defaulting to the most recent version without specifying the version number is not recommended. Please, keep in mind that we are not responsible for the correct operation of those CDN servers.
231
231
 
232
232
  ```HTML
233
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.1.66/dist/ccxt.browser.js"></script>
233
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.1.68/dist/ccxt.browser.js"></script>
234
234
  ```
235
235
 
236
236
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.1.66'
25
+ __version__ = '4.1.68'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.66'
7
+ __version__ = '4.1.68'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.1.66'
5
+ __version__ = '4.1.68'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -746,7 +746,7 @@ class Exchange(BaseExchange):
746
746
  raise NotSupported(self.id + ' watchPositions() is not supported yet')
747
747
 
748
748
  async def watch_position_for_symbols(self, symbols: List[str] = None, since: Int = None, limit: Int = None, params={}):
749
- return self.watchPositions(symbols, since, limit, params)
749
+ return await self.watchPositions(symbols, since, limit, params)
750
750
 
751
751
  async def fetch_positions_for_symbol(self, symbol: str, params={}):
752
752
  """
@@ -89,6 +89,7 @@ class bingx(Exchange, ImplicitAPI):
89
89
  'user': 'https://open-api.{hostname}/openApi',
90
90
  'subAccount': 'https://open-api.{hostname}/openApi',
91
91
  'account': 'https://open-api.{hostname}/openApi',
92
+ 'copyTrading': 'https://open-api.{hostname}/openApi',
92
93
  },
93
94
  'www': 'https://bingx.com/',
94
95
  'doc': 'https://bingx-api.github.io/docs/',
@@ -2057,8 +2057,8 @@ class bybit(Exchange, ImplicitAPI):
2057
2057
  parsedSymbols.append(market['symbol'])
2058
2058
  request = {
2059
2059
  # 'symbol': market['id'],
2060
- # 'baseCoin': '', Base coin. For option only
2061
- # 'expDate': '', Expiry date. e.g., 25DEC22. For option only
2060
+ # 'baseCoin': '', # Base coin. For option only
2061
+ # 'expDate': '', # Expiry date. e.g., 25DEC22. For option only
2062
2062
  }
2063
2063
  type = None
2064
2064
  type, params = self.handle_market_type_and_params('fetchTickers', market, params)
@@ -1541,7 +1541,7 @@ class coinbase(Exchange, ImplicitAPI):
1541
1541
  """
1542
1542
  await self.load_markets()
1543
1543
  request = {
1544
- 'limit': 100,
1544
+ 'limit': 250,
1545
1545
  }
1546
1546
  response = None
1547
1547
  isV3 = self.safe_value(params, 'v3', False)
@@ -572,8 +572,6 @@ class gate(Exchange, ImplicitAPI):
572
572
  'AXIS': 'Axis DeFi',
573
573
  'BIFI': 'Bitcoin File',
574
574
  'BOX': 'DefiBox',
575
- 'BTCBEAR': 'BEAR',
576
- 'BTCBULL': 'BULL',
577
575
  'BYN': 'BeyondFi',
578
576
  'EGG': 'Goose Finance',
579
577
  'GTC': 'Game.com', # conflict with Gitcoin and Gastrocoin
@@ -869,6 +867,7 @@ class gate(Exchange, ImplicitAPI):
869
867
  'AUTO_TRIGGER_PRICE_LESS_LAST': InvalidOrder, # {"label":"AUTO_TRIGGER_PRICE_LESS_LAST","message":"invalid argument: Trigger.Price must < last_price"}
870
868
  'AUTO_TRIGGER_PRICE_GREATE_LAST': InvalidOrder, # {"label":"AUTO_TRIGGER_PRICE_GREATE_LAST","message":"invalid argument: Trigger.Price must > last_price"}
871
869
  'POSITION_HOLDING': BadRequest,
870
+ 'USER_LOAN_EXCEEDED': BadRequest, # {"label":"USER_LOAN_EXCEEDED","message":"Max loan amount per user would be exceeded"}
872
871
  },
873
872
  'broad': {},
874
873
  },
@@ -5265,6 +5264,204 @@ class gate(Exchange, ImplicitAPI):
5265
5264
  floor = cap
5266
5265
  return tiers
5267
5266
 
5267
+ async def repay_margin(self, code: str, amount, symbol: Str = None, params={}):
5268
+ """
5269
+ repay borrowed margin and interest
5270
+ :see: https://www.gate.io/docs/apiv4/en/#repay-cross-margin-loan
5271
+ :see: https://www.gate.io/docs/apiv4/en/#repay-a-loan
5272
+ :param str code: unified currency code of the currency to repay
5273
+ :param float amount: the amount to repay
5274
+ :param str symbol: unified market symbol, required for isolated margin
5275
+ :param dict [params]: extra parameters specific to the exchange API endpoint
5276
+ :param str [params.mode]: 'all' or 'partial' payment mode, extra parameter required for isolated margin
5277
+ :param str [params.id]: '34267567' loan id, extra parameter required for isolated margin
5278
+ :returns dict: a `margin loan structure <https://docs.ccxt.com/#/?id=margin-loan-structure>`
5279
+ """
5280
+ marginMode = None
5281
+ marginMode, params = self.handle_option_and_params(params, 'repayMargin', 'marginMode')
5282
+ self.check_required_argument('repayMargin', marginMode, 'marginMode', ['cross', 'isolated'])
5283
+ self.check_required_margin_argument('repayMargin', symbol, marginMode)
5284
+ await self.load_markets()
5285
+ currency = self.currency(code)
5286
+ request = {
5287
+ 'currency': currency['id'].upper(),
5288
+ 'amount': self.currency_to_precision(code, amount),
5289
+ }
5290
+ response = None
5291
+ if (marginMode == 'cross') and (symbol is None):
5292
+ response = await self.privateMarginPostCrossRepayments(self.extend(request, params))
5293
+ elif (marginMode == 'isolated') or (symbol is not None):
5294
+ if symbol is None:
5295
+ raise BadRequest(self.id + ' repayMargin() requires a symbol argument for isolated margin')
5296
+ market = self.market(symbol)
5297
+ request['currency_pair'] = market['id']
5298
+ request['type'] = 'repay'
5299
+ response = await self.privateMarginPostUniLoans(self.extend(request, params))
5300
+ #
5301
+ # Cross
5302
+ #
5303
+ # [
5304
+ # {
5305
+ # "id": "17",
5306
+ # "create_time": 1620381696159,
5307
+ # "update_time": 1620381696159,
5308
+ # "currency": "EOS",
5309
+ # "amount": "110.553635",
5310
+ # "text": "web",
5311
+ # "status": 2,
5312
+ # "repaid": "110.506649705159",
5313
+ # "repaid_interest": "0.046985294841",
5314
+ # "unpaid_interest": "0.0000074393366667"
5315
+ # }
5316
+ # ]
5317
+ #
5318
+ # Isolated
5319
+ #
5320
+ # {
5321
+ # "id": "34267567",
5322
+ # "create_time": "1656394778",
5323
+ # "expire_time": "1657258778",
5324
+ # "status": "finished",
5325
+ # "side": "borrow",
5326
+ # "currency": "USDT",
5327
+ # "rate": "0.0002",
5328
+ # "amount": "100",
5329
+ # "days": 10,
5330
+ # "auto_renew": False,
5331
+ # "currency_pair": "LTC_USDT",
5332
+ # "left": "0",
5333
+ # "repaid": "100",
5334
+ # "paid_interest": "0.003333333333",
5335
+ # "unpaid_interest": "0"
5336
+ # }
5337
+ #
5338
+ if marginMode == 'cross':
5339
+ response = response[0]
5340
+ return self.parse_margin_loan(response, currency)
5341
+
5342
+ async def borrow_margin(self, code: str, amount, symbol: Str = None, params={}):
5343
+ """
5344
+ create a loan to borrow margin
5345
+ :see: https://www.gate.io/docs/apiv4/en/#create-a-cross-margin-borrow-loan
5346
+ :see: https://www.gate.io/docs/developers/apiv4/en/#marginuni
5347
+ :param str code: unified currency code of the currency to borrow
5348
+ :param float amount: the amount to borrow
5349
+ :param str symbol: unified market symbol, required for isolated margin
5350
+ :param dict [params]: extra parameters specific to the exchange API endpoint
5351
+ :param str [params.rate]: '0.0002' or '0.002' extra parameter required for isolated margin
5352
+ :returns dict: a `margin loan structure <https://docs.ccxt.com/#/?id=margin-loan-structure>`
5353
+ """
5354
+ marginMode = None
5355
+ marginMode, params = self.handle_option_and_params(params, 'borrowMargin', 'marginMode')
5356
+ self.check_required_argument('borrowMargin', marginMode, 'marginMode', ['cross', 'isolated'])
5357
+ self.check_required_margin_argument('borrowMargin', symbol, marginMode)
5358
+ await self.load_markets()
5359
+ currency = self.currency(code)
5360
+ request = {
5361
+ 'currency': currency['id'].upper(),
5362
+ 'amount': self.currency_to_precision(code, amount),
5363
+ }
5364
+ response = None
5365
+ if (marginMode == 'cross') and (symbol is None):
5366
+ response = await self.privateMarginPostCrossLoans(self.extend(request, params))
5367
+ elif (marginMode == 'isolated') or (symbol is not None):
5368
+ if symbol is None:
5369
+ raise BadRequest(self.id + ' borrowMargin() requires a symbol argument for isolated margin')
5370
+ market = self.market(symbol)
5371
+ request['currency_pair'] = market['id']
5372
+ request['type'] = 'borrow'
5373
+ response = await self.privateMarginPostUniLoans(self.extend(request, params))
5374
+ #
5375
+ # Cross
5376
+ #
5377
+ # {
5378
+ # "id": "17",
5379
+ # "create_time": 1620381696159,
5380
+ # "update_time": 1620381696159,
5381
+ # "currency": "EOS",
5382
+ # "amount": "110.553635",
5383
+ # "text": "web",
5384
+ # "status": 2,
5385
+ # "repaid": "110.506649705159",
5386
+ # "repaid_interest": "0.046985294841",
5387
+ # "unpaid_interest": "0.0000074393366667"
5388
+ # }
5389
+ #
5390
+ # Isolated
5391
+ #
5392
+ # {
5393
+ # "id": "34267567",
5394
+ # "create_time": "1656394778",
5395
+ # "expire_time": "1657258778",
5396
+ # "status": "loaned",
5397
+ # "side": "borrow",
5398
+ # "currency": "USDT",
5399
+ # "rate": "0.0002",
5400
+ # "amount": "100",
5401
+ # "days": 10,
5402
+ # "auto_renew": False,
5403
+ # "currency_pair": "LTC_USDT",
5404
+ # "left": "0",
5405
+ # "repaid": "0",
5406
+ # "paid_interest": "0",
5407
+ # "unpaid_interest": "0.003333333333"
5408
+ # }
5409
+ #
5410
+ return self.parse_margin_loan(response, currency)
5411
+
5412
+ def parse_margin_loan(self, info, currency: Currency = None):
5413
+ #
5414
+ # Cross
5415
+ #
5416
+ # {
5417
+ # "id": "17",
5418
+ # "create_time": 1620381696159,
5419
+ # "update_time": 1620381696159,
5420
+ # "currency": "EOS",
5421
+ # "amount": "110.553635",
5422
+ # "text": "web",
5423
+ # "status": 2,
5424
+ # "repaid": "110.506649705159",
5425
+ # "repaid_interest": "0.046985294841",
5426
+ # "unpaid_interest": "0.0000074393366667"
5427
+ # }
5428
+ #
5429
+ # Isolated
5430
+ #
5431
+ # {
5432
+ # "id": "34267567",
5433
+ # "create_time": "1656394778",
5434
+ # "expire_time": "1657258778",
5435
+ # "status": "loaned",
5436
+ # "side": "borrow",
5437
+ # "currency": "USDT",
5438
+ # "rate": "0.0002",
5439
+ # "amount": "100",
5440
+ # "days": 10,
5441
+ # "auto_renew": False,
5442
+ # "currency_pair": "LTC_USDT",
5443
+ # "left": "0",
5444
+ # "repaid": "0",
5445
+ # "paid_interest": "0",
5446
+ # "unpaid_interest": "0.003333333333"
5447
+ # }
5448
+ #
5449
+ marginMode = self.safe_string_2(self.options, 'defaultMarginMode', 'marginMode', 'cross')
5450
+ timestamp = self.safe_integer(info, 'create_time')
5451
+ if marginMode == 'isolated':
5452
+ timestamp = self.safe_timestamp(info, 'create_time')
5453
+ currencyId = self.safe_string(info, 'currency')
5454
+ marketId = self.safe_string(info, 'currency_pair')
5455
+ return {
5456
+ 'id': self.safe_integer(info, 'id'),
5457
+ 'currency': self.safe_currency_code(currencyId, currency),
5458
+ 'amount': self.safe_number(info, 'amount'),
5459
+ 'symbol': self.safe_symbol(marketId, None, '_', 'margin'),
5460
+ 'timestamp': timestamp,
5461
+ 'datetime': self.iso8601(timestamp),
5462
+ 'info': info,
5463
+ }
5464
+
5268
5465
  def sign(self, path, api=[], method='GET', params={}, headers=None, body=None):
5269
5466
  authentication = api[0] # public, private
5270
5467
  type = api[1] # spot, margin, future, delivery
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.66'
7
+ __version__ = '4.1.68'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -564,7 +564,7 @@ class Exchange(object):
564
564
  proxies['http'] = socksProxy
565
565
  proxies['https'] = socksProxy
566
566
  proxyAgentSet = proxies is not None
567
- self.checkConflictingProxies(proxyAgentSet, proxyUrl)
567
+ self.check_conflicting_proxies(proxyAgentSet, proxyUrl)
568
568
  # specifically for async-python, there is ".proxies" property maintained
569
569
  if (self.proxies is not None):
570
570
  if (proxyAgentSet or proxyUrl):
@@ -1989,7 +1989,7 @@ class Exchange(object):
1989
1989
  def parse_markets(self, markets):
1990
1990
  result = []
1991
1991
  for i in range(0, len(markets)):
1992
- result.append(self.parseMarket(markets[i]))
1992
+ result.append(self.parse_market(markets[i]))
1993
1993
  return result
1994
1994
 
1995
1995
  def parse_ticker(self, ticker: object, market: Market = None):
@@ -2192,6 +2192,7 @@ class Exchange(object):
2192
2192
  'contract': None,
2193
2193
  'linear': None,
2194
2194
  'inverse': None,
2195
+ 'subType': None,
2195
2196
  'taker': None,
2196
2197
  'maker': None,
2197
2198
  'contractSize': None,
@@ -2260,6 +2261,12 @@ class Exchange(object):
2260
2261
  'precision': self.precision,
2261
2262
  'limits': self.limits,
2262
2263
  }, self.fees['trading'], value)
2264
+ if market['linear']:
2265
+ market['subType'] = 'linear'
2266
+ elif market['inverse']:
2267
+ market['subType'] = 'inverse'
2268
+ else:
2269
+ market['subType'] = None
2263
2270
  values.append(market)
2264
2271
  self.markets = self.index_by(values, 'symbol')
2265
2272
  marketsSortedBySymbol = self.keysort(self.markets)
@@ -2825,7 +2832,7 @@ class Exchange(object):
2825
2832
  'bidVolume': self.safe_number(ticker, 'bidVolume'),
2826
2833
  'ask': self.parse_number(self.omit_zero(self.safe_number(ticker, 'ask'))),
2827
2834
  'askVolume': self.safe_number(ticker, 'askVolume'),
2828
- 'high': self.parse_number(self.omit_zero(self.safe_string(ticker, 'high"'))),
2835
+ 'high': self.parse_number(self.omit_zero(self.safe_string(ticker, 'high'))),
2829
2836
  'low': self.parse_number(self.omit_zero(self.safe_number(ticker, 'low'))),
2830
2837
  'open': self.parse_number(self.omit_zero(self.parse_number(open))),
2831
2838
  'close': self.parse_number(self.omit_zero(self.parse_number(close))),
@@ -4331,7 +4338,7 @@ class Exchange(object):
4331
4338
  message += ', one of ' + '(' + messageOptions + ')'
4332
4339
  raise ArgumentsRequired(message)
4333
4340
 
4334
- def check_required_margin_argument(self, methodName: str, symbol: str, marginMode: str):
4341
+ def check_required_margin_argument(self, methodName: str, symbol: Str, marginMode: str):
4335
4342
  """
4336
4343
  * @ignore
4337
4344
  :param str symbol: unified symbol of the market
@@ -267,6 +267,7 @@ class MarketInterface(TypedDict):
267
267
  quoteId: Str
268
268
  active: Bool
269
269
  type: Str
270
+ subType: Str
270
271
  spot: bool
271
272
  margin: bool
272
273
  swap: bool
@@ -88,6 +88,7 @@ class bingx(Exchange, ImplicitAPI):
88
88
  'user': 'https://open-api.{hostname}/openApi',
89
89
  'subAccount': 'https://open-api.{hostname}/openApi',
90
90
  'account': 'https://open-api.{hostname}/openApi',
91
+ 'copyTrading': 'https://open-api.{hostname}/openApi',
91
92
  },
92
93
  'www': 'https://bingx.com/',
93
94
  'doc': 'https://bingx-api.github.io/docs/',
@@ -2056,8 +2056,8 @@ class bybit(Exchange, ImplicitAPI):
2056
2056
  parsedSymbols.append(market['symbol'])
2057
2057
  request = {
2058
2058
  # 'symbol': market['id'],
2059
- # 'baseCoin': '', Base coin. For option only
2060
- # 'expDate': '', Expiry date. e.g., 25DEC22. For option only
2059
+ # 'baseCoin': '', # Base coin. For option only
2060
+ # 'expDate': '', # Expiry date. e.g., 25DEC22. For option only
2061
2061
  }
2062
2062
  type = None
2063
2063
  type, params = self.handle_market_type_and_params('fetchTickers', market, params)
@@ -1541,7 +1541,7 @@ class coinbase(Exchange, ImplicitAPI):
1541
1541
  """
1542
1542
  self.load_markets()
1543
1543
  request = {
1544
- 'limit': 100,
1544
+ 'limit': 250,
1545
1545
  }
1546
1546
  response = None
1547
1547
  isV3 = self.safe_value(params, 'v3', False)
@@ -571,8 +571,6 @@ class gate(Exchange, ImplicitAPI):
571
571
  'AXIS': 'Axis DeFi',
572
572
  'BIFI': 'Bitcoin File',
573
573
  'BOX': 'DefiBox',
574
- 'BTCBEAR': 'BEAR',
575
- 'BTCBULL': 'BULL',
576
574
  'BYN': 'BeyondFi',
577
575
  'EGG': 'Goose Finance',
578
576
  'GTC': 'Game.com', # conflict with Gitcoin and Gastrocoin
@@ -868,6 +866,7 @@ class gate(Exchange, ImplicitAPI):
868
866
  'AUTO_TRIGGER_PRICE_LESS_LAST': InvalidOrder, # {"label":"AUTO_TRIGGER_PRICE_LESS_LAST","message":"invalid argument: Trigger.Price must < last_price"}
869
867
  'AUTO_TRIGGER_PRICE_GREATE_LAST': InvalidOrder, # {"label":"AUTO_TRIGGER_PRICE_GREATE_LAST","message":"invalid argument: Trigger.Price must > last_price"}
870
868
  'POSITION_HOLDING': BadRequest,
869
+ 'USER_LOAN_EXCEEDED': BadRequest, # {"label":"USER_LOAN_EXCEEDED","message":"Max loan amount per user would be exceeded"}
871
870
  },
872
871
  'broad': {},
873
872
  },
@@ -5264,6 +5263,204 @@ class gate(Exchange, ImplicitAPI):
5264
5263
  floor = cap
5265
5264
  return tiers
5266
5265
 
5266
+ def repay_margin(self, code: str, amount, symbol: Str = None, params={}):
5267
+ """
5268
+ repay borrowed margin and interest
5269
+ :see: https://www.gate.io/docs/apiv4/en/#repay-cross-margin-loan
5270
+ :see: https://www.gate.io/docs/apiv4/en/#repay-a-loan
5271
+ :param str code: unified currency code of the currency to repay
5272
+ :param float amount: the amount to repay
5273
+ :param str symbol: unified market symbol, required for isolated margin
5274
+ :param dict [params]: extra parameters specific to the exchange API endpoint
5275
+ :param str [params.mode]: 'all' or 'partial' payment mode, extra parameter required for isolated margin
5276
+ :param str [params.id]: '34267567' loan id, extra parameter required for isolated margin
5277
+ :returns dict: a `margin loan structure <https://docs.ccxt.com/#/?id=margin-loan-structure>`
5278
+ """
5279
+ marginMode = None
5280
+ marginMode, params = self.handle_option_and_params(params, 'repayMargin', 'marginMode')
5281
+ self.check_required_argument('repayMargin', marginMode, 'marginMode', ['cross', 'isolated'])
5282
+ self.check_required_margin_argument('repayMargin', symbol, marginMode)
5283
+ self.load_markets()
5284
+ currency = self.currency(code)
5285
+ request = {
5286
+ 'currency': currency['id'].upper(),
5287
+ 'amount': self.currency_to_precision(code, amount),
5288
+ }
5289
+ response = None
5290
+ if (marginMode == 'cross') and (symbol is None):
5291
+ response = self.privateMarginPostCrossRepayments(self.extend(request, params))
5292
+ elif (marginMode == 'isolated') or (symbol is not None):
5293
+ if symbol is None:
5294
+ raise BadRequest(self.id + ' repayMargin() requires a symbol argument for isolated margin')
5295
+ market = self.market(symbol)
5296
+ request['currency_pair'] = market['id']
5297
+ request['type'] = 'repay'
5298
+ response = self.privateMarginPostUniLoans(self.extend(request, params))
5299
+ #
5300
+ # Cross
5301
+ #
5302
+ # [
5303
+ # {
5304
+ # "id": "17",
5305
+ # "create_time": 1620381696159,
5306
+ # "update_time": 1620381696159,
5307
+ # "currency": "EOS",
5308
+ # "amount": "110.553635",
5309
+ # "text": "web",
5310
+ # "status": 2,
5311
+ # "repaid": "110.506649705159",
5312
+ # "repaid_interest": "0.046985294841",
5313
+ # "unpaid_interest": "0.0000074393366667"
5314
+ # }
5315
+ # ]
5316
+ #
5317
+ # Isolated
5318
+ #
5319
+ # {
5320
+ # "id": "34267567",
5321
+ # "create_time": "1656394778",
5322
+ # "expire_time": "1657258778",
5323
+ # "status": "finished",
5324
+ # "side": "borrow",
5325
+ # "currency": "USDT",
5326
+ # "rate": "0.0002",
5327
+ # "amount": "100",
5328
+ # "days": 10,
5329
+ # "auto_renew": False,
5330
+ # "currency_pair": "LTC_USDT",
5331
+ # "left": "0",
5332
+ # "repaid": "100",
5333
+ # "paid_interest": "0.003333333333",
5334
+ # "unpaid_interest": "0"
5335
+ # }
5336
+ #
5337
+ if marginMode == 'cross':
5338
+ response = response[0]
5339
+ return self.parse_margin_loan(response, currency)
5340
+
5341
+ def borrow_margin(self, code: str, amount, symbol: Str = None, params={}):
5342
+ """
5343
+ create a loan to borrow margin
5344
+ :see: https://www.gate.io/docs/apiv4/en/#create-a-cross-margin-borrow-loan
5345
+ :see: https://www.gate.io/docs/developers/apiv4/en/#marginuni
5346
+ :param str code: unified currency code of the currency to borrow
5347
+ :param float amount: the amount to borrow
5348
+ :param str symbol: unified market symbol, required for isolated margin
5349
+ :param dict [params]: extra parameters specific to the exchange API endpoint
5350
+ :param str [params.rate]: '0.0002' or '0.002' extra parameter required for isolated margin
5351
+ :returns dict: a `margin loan structure <https://docs.ccxt.com/#/?id=margin-loan-structure>`
5352
+ """
5353
+ marginMode = None
5354
+ marginMode, params = self.handle_option_and_params(params, 'borrowMargin', 'marginMode')
5355
+ self.check_required_argument('borrowMargin', marginMode, 'marginMode', ['cross', 'isolated'])
5356
+ self.check_required_margin_argument('borrowMargin', symbol, marginMode)
5357
+ self.load_markets()
5358
+ currency = self.currency(code)
5359
+ request = {
5360
+ 'currency': currency['id'].upper(),
5361
+ 'amount': self.currency_to_precision(code, amount),
5362
+ }
5363
+ response = None
5364
+ if (marginMode == 'cross') and (symbol is None):
5365
+ response = self.privateMarginPostCrossLoans(self.extend(request, params))
5366
+ elif (marginMode == 'isolated') or (symbol is not None):
5367
+ if symbol is None:
5368
+ raise BadRequest(self.id + ' borrowMargin() requires a symbol argument for isolated margin')
5369
+ market = self.market(symbol)
5370
+ request['currency_pair'] = market['id']
5371
+ request['type'] = 'borrow'
5372
+ response = self.privateMarginPostUniLoans(self.extend(request, params))
5373
+ #
5374
+ # Cross
5375
+ #
5376
+ # {
5377
+ # "id": "17",
5378
+ # "create_time": 1620381696159,
5379
+ # "update_time": 1620381696159,
5380
+ # "currency": "EOS",
5381
+ # "amount": "110.553635",
5382
+ # "text": "web",
5383
+ # "status": 2,
5384
+ # "repaid": "110.506649705159",
5385
+ # "repaid_interest": "0.046985294841",
5386
+ # "unpaid_interest": "0.0000074393366667"
5387
+ # }
5388
+ #
5389
+ # Isolated
5390
+ #
5391
+ # {
5392
+ # "id": "34267567",
5393
+ # "create_time": "1656394778",
5394
+ # "expire_time": "1657258778",
5395
+ # "status": "loaned",
5396
+ # "side": "borrow",
5397
+ # "currency": "USDT",
5398
+ # "rate": "0.0002",
5399
+ # "amount": "100",
5400
+ # "days": 10,
5401
+ # "auto_renew": False,
5402
+ # "currency_pair": "LTC_USDT",
5403
+ # "left": "0",
5404
+ # "repaid": "0",
5405
+ # "paid_interest": "0",
5406
+ # "unpaid_interest": "0.003333333333"
5407
+ # }
5408
+ #
5409
+ return self.parse_margin_loan(response, currency)
5410
+
5411
+ def parse_margin_loan(self, info, currency: Currency = None):
5412
+ #
5413
+ # Cross
5414
+ #
5415
+ # {
5416
+ # "id": "17",
5417
+ # "create_time": 1620381696159,
5418
+ # "update_time": 1620381696159,
5419
+ # "currency": "EOS",
5420
+ # "amount": "110.553635",
5421
+ # "text": "web",
5422
+ # "status": 2,
5423
+ # "repaid": "110.506649705159",
5424
+ # "repaid_interest": "0.046985294841",
5425
+ # "unpaid_interest": "0.0000074393366667"
5426
+ # }
5427
+ #
5428
+ # Isolated
5429
+ #
5430
+ # {
5431
+ # "id": "34267567",
5432
+ # "create_time": "1656394778",
5433
+ # "expire_time": "1657258778",
5434
+ # "status": "loaned",
5435
+ # "side": "borrow",
5436
+ # "currency": "USDT",
5437
+ # "rate": "0.0002",
5438
+ # "amount": "100",
5439
+ # "days": 10,
5440
+ # "auto_renew": False,
5441
+ # "currency_pair": "LTC_USDT",
5442
+ # "left": "0",
5443
+ # "repaid": "0",
5444
+ # "paid_interest": "0",
5445
+ # "unpaid_interest": "0.003333333333"
5446
+ # }
5447
+ #
5448
+ marginMode = self.safe_string_2(self.options, 'defaultMarginMode', 'marginMode', 'cross')
5449
+ timestamp = self.safe_integer(info, 'create_time')
5450
+ if marginMode == 'isolated':
5451
+ timestamp = self.safe_timestamp(info, 'create_time')
5452
+ currencyId = self.safe_string(info, 'currency')
5453
+ marketId = self.safe_string(info, 'currency_pair')
5454
+ return {
5455
+ 'id': self.safe_integer(info, 'id'),
5456
+ 'currency': self.safe_currency_code(currencyId, currency),
5457
+ 'amount': self.safe_number(info, 'amount'),
5458
+ 'symbol': self.safe_symbol(marketId, None, '_', 'margin'),
5459
+ 'timestamp': timestamp,
5460
+ 'datetime': self.iso8601(timestamp),
5461
+ 'info': info,
5462
+ }
5463
+
5267
5464
  def sign(self, path, api=[], method='GET', params={}, headers=None, body=None):
5268
5465
  authentication = api[0] # public, private
5269
5466
  type = api[1] # spot, margin, future, delivery
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.1.66'
7
+ __version__ = '4.1.68'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10