ccxt 4.0.72__tar.gz → 4.0.73__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 (465) hide show
  1. {ccxt-4.0.72/ccxt.egg-info → ccxt-4.0.73}/PKG-INFO +4 -4
  2. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/__init__.py +1 -1
  3. ccxt-4.0.73/ccxt/abstract/lbank2.py +61 -0
  4. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/__init__.py +1 -1
  5. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/exchange.py +8 -2
  6. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/binance.py +95 -2
  7. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bybit.py +92 -0
  8. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/cryptocom.py +1 -0
  9. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/delta.py +1 -0
  10. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/deribit.py +1 -0
  11. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/gate.py +175 -0
  12. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/lbank2.py +507 -185
  13. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/okx.py +1 -0
  14. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/base/exchange.py +8 -2
  15. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/binance.py +95 -2
  16. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bybit.py +92 -0
  17. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/cryptocom.py +1 -0
  18. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/delta.py +1 -0
  19. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/deribit.py +1 -0
  20. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/gate.py +175 -0
  21. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/lbank2.py +506 -185
  22. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/okx.py +1 -0
  23. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/__init__.py +1 -1
  24. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitmex.py +7 -6
  25. {ccxt-4.0.72 → ccxt-4.0.73/ccxt.egg-info}/PKG-INFO +4 -4
  26. {ccxt-4.0.72 → ccxt-4.0.73}/package.json +1 -1
  27. ccxt-4.0.72/ccxt/abstract/lbank2.py +0 -57
  28. {ccxt-4.0.72 → ccxt-4.0.73}/LICENSE.txt +0 -0
  29. {ccxt-4.0.72 → ccxt-4.0.73}/MANIFEST.in +0 -0
  30. {ccxt-4.0.72 → ccxt-4.0.73}/README.rst +0 -0
  31. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/__init__.py +0 -0
  32. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/ace.py +0 -0
  33. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/alpaca.py +0 -0
  34. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/ascendex.py +0 -0
  35. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bequant.py +0 -0
  36. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bigone.py +0 -0
  37. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/binance.py +0 -0
  38. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/binancecoinm.py +0 -0
  39. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/binanceus.py +0 -0
  40. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/binanceusdm.py +0 -0
  41. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bingx.py +0 -0
  42. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bit2c.py +0 -0
  43. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitbank.py +0 -0
  44. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitbay.py +0 -0
  45. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitbns.py +0 -0
  46. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitcoincom.py +0 -0
  47. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitfinex.py +0 -0
  48. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitfinex2.py +0 -0
  49. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitflyer.py +0 -0
  50. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitforex.py +0 -0
  51. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitget.py +0 -0
  52. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bithumb.py +0 -0
  53. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitmart.py +0 -0
  54. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitmex.py +0 -0
  55. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitopro.py +0 -0
  56. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitpanda.py +0 -0
  57. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitrue.py +0 -0
  58. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitso.py +0 -0
  59. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitstamp.py +0 -0
  60. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitstamp1.py +0 -0
  61. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bittrex.py +0 -0
  62. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bitvavo.py +0 -0
  63. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bkex.py +0 -0
  64. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bl3p.py +0 -0
  65. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/blockchaincom.py +0 -0
  66. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/btcalpha.py +0 -0
  67. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/btcbox.py +0 -0
  68. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/btcmarkets.py +0 -0
  69. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/btctradeua.py +0 -0
  70. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/btcturk.py +0 -0
  71. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/bybit.py +0 -0
  72. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/cex.py +0 -0
  73. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinbase.py +0 -0
  74. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinbaseprime.py +0 -0
  75. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinbasepro.py +0 -0
  76. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coincheck.py +0 -0
  77. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinex.py +0 -0
  78. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinfalcon.py +0 -0
  79. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinmate.py +0 -0
  80. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinone.py +0 -0
  81. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinsph.py +0 -0
  82. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/coinspot.py +0 -0
  83. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/cryptocom.py +0 -0
  84. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/currencycom.py +0 -0
  85. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/delta.py +0 -0
  86. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/deribit.py +0 -0
  87. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/digifinex.py +0 -0
  88. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/exmo.py +0 -0
  89. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/fmfwio.py +0 -0
  90. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/gate.py +0 -0
  91. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/gateio.py +0 -0
  92. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/gemini.py +0 -0
  93. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/hitbtc.py +0 -0
  94. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/hitbtc3.py +0 -0
  95. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/hollaex.py +0 -0
  96. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/huobi.py +0 -0
  97. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/huobijp.py +0 -0
  98. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/huobipro.py +0 -0
  99. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/idex.py +0 -0
  100. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/independentreserve.py +0 -0
  101. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/indodax.py +0 -0
  102. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/kraken.py +0 -0
  103. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/krakenfutures.py +0 -0
  104. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/kucoin.py +0 -0
  105. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/kucoinfutures.py +0 -0
  106. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/kuna.py +0 -0
  107. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/latoken.py +0 -0
  108. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/lbank.py +0 -0
  109. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/luno.py +0 -0
  110. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/lykke.py +0 -0
  111. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/mercado.py +0 -0
  112. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/mexc.py +0 -0
  113. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/mexc3.py +0 -0
  114. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/ndax.py +0 -0
  115. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/novadax.py +0 -0
  116. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/oceanex.py +0 -0
  117. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/okcoin.py +0 -0
  118. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/okex.py +0 -0
  119. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/okex5.py +0 -0
  120. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/okx.py +0 -0
  121. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/paymium.py +0 -0
  122. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/phemex.py +0 -0
  123. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/poloniex.py +0 -0
  124. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/poloniexfutures.py +0 -0
  125. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/probit.py +0 -0
  126. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/tidex.py +0 -0
  127. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/timex.py +0 -0
  128. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/tokocrypto.py +0 -0
  129. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/upbit.py +0 -0
  130. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/wavesexchange.py +0 -0
  131. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/wazirx.py +0 -0
  132. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/whitebit.py +0 -0
  133. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/woo.py +0 -0
  134. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/yobit.py +0 -0
  135. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/zaif.py +0 -0
  136. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/abstract/zonda.py +0 -0
  137. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/ace.py +0 -0
  138. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/alpaca.py +0 -0
  139. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/ascendex.py +0 -0
  140. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/ace.py +0 -0
  141. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/alpaca.py +0 -0
  142. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/ascendex.py +0 -0
  143. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/__init__.py +0 -0
  144. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/throttler.py +0 -0
  145. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/__init__.py +0 -0
  146. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  147. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/cache.py +0 -0
  148. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/client.py +0 -0
  149. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/fast_client.py +0 -0
  150. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/functions.py +0 -0
  151. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/future.py +0 -0
  152. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/order_book.py +0 -0
  153. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  154. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bequant.py +0 -0
  155. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bigone.py +0 -0
  156. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/binancecoinm.py +0 -0
  157. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/binanceus.py +0 -0
  158. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/binanceusdm.py +0 -0
  159. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bingx.py +0 -0
  160. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bit2c.py +0 -0
  161. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitbank.py +0 -0
  162. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitbay.py +0 -0
  163. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitbns.py +0 -0
  164. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitcoincom.py +0 -0
  165. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitfinex.py +0 -0
  166. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitfinex2.py +0 -0
  167. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitflyer.py +0 -0
  168. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitforex.py +0 -0
  169. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitget.py +0 -0
  170. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bithumb.py +0 -0
  171. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitmart.py +0 -0
  172. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitmex.py +0 -0
  173. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitopro.py +0 -0
  174. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitpanda.py +0 -0
  175. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitrue.py +0 -0
  176. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitso.py +0 -0
  177. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitstamp.py +0 -0
  178. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitstamp1.py +0 -0
  179. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bittrex.py +0 -0
  180. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bitvavo.py +0 -0
  181. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bkex.py +0 -0
  182. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/bl3p.py +0 -0
  183. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/blockchaincom.py +0 -0
  184. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/btcalpha.py +0 -0
  185. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/btcbox.py +0 -0
  186. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/btcmarkets.py +0 -0
  187. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/btctradeua.py +0 -0
  188. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/btcturk.py +0 -0
  189. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/cex.py +0 -0
  190. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinbase.py +0 -0
  191. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinbaseprime.py +0 -0
  192. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinbasepro.py +0 -0
  193. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coincheck.py +0 -0
  194. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinex.py +0 -0
  195. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinfalcon.py +0 -0
  196. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinmate.py +0 -0
  197. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinone.py +0 -0
  198. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinsph.py +0 -0
  199. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/coinspot.py +0 -0
  200. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/currencycom.py +0 -0
  201. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/digifinex.py +0 -0
  202. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/exmo.py +0 -0
  203. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/flowbtc.py +0 -0
  204. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/fmfwio.py +0 -0
  205. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/gateio.py +0 -0
  206. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/gemini.py +0 -0
  207. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/hitbtc.py +0 -0
  208. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/hitbtc3.py +0 -0
  209. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/hollaex.py +0 -0
  210. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/huobi.py +0 -0
  211. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/huobijp.py +0 -0
  212. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/huobipro.py +0 -0
  213. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/idex.py +0 -0
  214. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/independentreserve.py +0 -0
  215. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/indodax.py +0 -0
  216. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/kraken.py +0 -0
  217. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/krakenfutures.py +0 -0
  218. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/kucoin.py +0 -0
  219. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/kucoinfutures.py +0 -0
  220. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/kuna.py +0 -0
  221. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/latoken.py +0 -0
  222. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/lbank.py +0 -0
  223. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/luno.py +0 -0
  224. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/lykke.py +0 -0
  225. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/mercado.py +0 -0
  226. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/mexc.py +0 -0
  227. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/mexc3.py +0 -0
  228. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/ndax.py +0 -0
  229. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/novadax.py +0 -0
  230. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/oceanex.py +0 -0
  231. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/okcoin.py +0 -0
  232. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/okex.py +0 -0
  233. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/okex5.py +0 -0
  234. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/paymium.py +0 -0
  235. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/phemex.py +0 -0
  236. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/poloniex.py +0 -0
  237. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/poloniexfutures.py +0 -0
  238. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/probit.py +0 -0
  239. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/tidex.py +0 -0
  240. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/timex.py +0 -0
  241. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/tokocrypto.py +0 -0
  242. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/upbit.py +0 -0
  243. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/wavesexchange.py +0 -0
  244. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/wazirx.py +0 -0
  245. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/whitebit.py +0 -0
  246. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/woo.py +0 -0
  247. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/yobit.py +0 -0
  248. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/zaif.py +0 -0
  249. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/async_support/zonda.py +0 -0
  250. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/base/__init__.py +0 -0
  251. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/base/decimal_to_precision.py +0 -0
  252. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/base/errors.py +0 -0
  253. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/base/precise.py +0 -0
  254. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/base/types.py +0 -0
  255. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bequant.py +0 -0
  256. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bigone.py +0 -0
  257. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/binancecoinm.py +0 -0
  258. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/binanceus.py +0 -0
  259. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/binanceusdm.py +0 -0
  260. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bingx.py +0 -0
  261. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bit2c.py +0 -0
  262. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitbank.py +0 -0
  263. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitbay.py +0 -0
  264. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitbns.py +0 -0
  265. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitcoincom.py +0 -0
  266. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitfinex.py +0 -0
  267. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitfinex2.py +0 -0
  268. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitflyer.py +0 -0
  269. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitforex.py +0 -0
  270. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitget.py +0 -0
  271. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bithumb.py +0 -0
  272. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitmart.py +0 -0
  273. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitmex.py +0 -0
  274. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitopro.py +0 -0
  275. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitpanda.py +0 -0
  276. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitrue.py +0 -0
  277. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitso.py +0 -0
  278. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitstamp.py +0 -0
  279. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitstamp1.py +0 -0
  280. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bittrex.py +0 -0
  281. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bitvavo.py +0 -0
  282. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bkex.py +0 -0
  283. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/bl3p.py +0 -0
  284. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/blockchaincom.py +0 -0
  285. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/btcalpha.py +0 -0
  286. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/btcbox.py +0 -0
  287. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/btcmarkets.py +0 -0
  288. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/btctradeua.py +0 -0
  289. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/btcturk.py +0 -0
  290. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/cex.py +0 -0
  291. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinbase.py +0 -0
  292. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinbaseprime.py +0 -0
  293. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinbasepro.py +0 -0
  294. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coincheck.py +0 -0
  295. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinex.py +0 -0
  296. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinfalcon.py +0 -0
  297. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinmate.py +0 -0
  298. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinone.py +0 -0
  299. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinsph.py +0 -0
  300. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/coinspot.py +0 -0
  301. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/currencycom.py +0 -0
  302. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/digifinex.py +0 -0
  303. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/exmo.py +0 -0
  304. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/flowbtc.py +0 -0
  305. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/fmfwio.py +0 -0
  306. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/gateio.py +0 -0
  307. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/gemini.py +0 -0
  308. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/hitbtc.py +0 -0
  309. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/hitbtc3.py +0 -0
  310. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/hollaex.py +0 -0
  311. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/huobi.py +0 -0
  312. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/huobijp.py +0 -0
  313. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/huobipro.py +0 -0
  314. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/idex.py +0 -0
  315. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/independentreserve.py +0 -0
  316. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/indodax.py +0 -0
  317. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/kraken.py +0 -0
  318. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/krakenfutures.py +0 -0
  319. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/kucoin.py +0 -0
  320. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/kucoinfutures.py +0 -0
  321. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/kuna.py +0 -0
  322. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/latoken.py +0 -0
  323. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/lbank.py +0 -0
  324. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/luno.py +0 -0
  325. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/lykke.py +0 -0
  326. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/mercado.py +0 -0
  327. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/mexc.py +0 -0
  328. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/mexc3.py +0 -0
  329. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/ndax.py +0 -0
  330. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/novadax.py +0 -0
  331. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/oceanex.py +0 -0
  332. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/okcoin.py +0 -0
  333. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/okex.py +0 -0
  334. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/okex5.py +0 -0
  335. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/paymium.py +0 -0
  336. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/phemex.py +0 -0
  337. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/poloniex.py +0 -0
  338. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/poloniexfutures.py +0 -0
  339. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/alpaca.py +0 -0
  340. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/ascendex.py +0 -0
  341. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bequant.py +0 -0
  342. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/binance.py +0 -0
  343. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/binancecoinm.py +0 -0
  344. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/binanceus.py +0 -0
  345. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/binanceusdm.py +0 -0
  346. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitcoincom.py +0 -0
  347. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitfinex.py +0 -0
  348. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitfinex2.py +0 -0
  349. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitget.py +0 -0
  350. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitmart.py +0 -0
  351. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitopro.py +0 -0
  352. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitpanda.py +0 -0
  353. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitrue.py +0 -0
  354. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitstamp.py +0 -0
  355. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bittrex.py +0 -0
  356. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bitvavo.py +0 -0
  357. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/blockchaincom.py +0 -0
  358. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/btcex.py +0 -0
  359. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/bybit.py +0 -0
  360. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/cex.py +0 -0
  361. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/coinbase.py +0 -0
  362. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/coinbaseprime.py +0 -0
  363. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/coinbasepro.py +0 -0
  364. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/coinex.py +0 -0
  365. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/cryptocom.py +0 -0
  366. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/currencycom.py +0 -0
  367. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/deribit.py +0 -0
  368. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/exmo.py +0 -0
  369. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/gate.py +0 -0
  370. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/gateio.py +0 -0
  371. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/gemini.py +0 -0
  372. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/hitbtc.py +0 -0
  373. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/hollaex.py +0 -0
  374. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/huobi.py +0 -0
  375. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/huobijp.py +0 -0
  376. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/huobipro.py +0 -0
  377. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/idex.py +0 -0
  378. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/independentreserve.py +0 -0
  379. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/kraken.py +0 -0
  380. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/krakenfutures.py +0 -0
  381. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/kucoin.py +0 -0
  382. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/kucoinfutures.py +0 -0
  383. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/luno.py +0 -0
  384. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/mexc.py +0 -0
  385. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/mexc3.py +0 -0
  386. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/ndax.py +0 -0
  387. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/okcoin.py +0 -0
  388. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/okex.py +0 -0
  389. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/okx.py +0 -0
  390. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/phemex.py +0 -0
  391. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/poloniex.py +0 -0
  392. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/poloniexfutures.py +0 -0
  393. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/probit.py +0 -0
  394. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/ripio.py +0 -0
  395. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/upbit.py +0 -0
  396. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/wazirx.py +0 -0
  397. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/whitebit.py +0 -0
  398. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/woo.py +0 -0
  399. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/pro/zb.py +0 -0
  400. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/probit.py +0 -0
  401. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/__init__.py +0 -0
  402. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  403. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  404. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  405. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  406. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  407. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  408. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  409. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  410. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  411. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  412. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  413. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  414. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/__init__.py +0 -0
  415. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/__init__.py +0 -0
  416. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_account.py +0 -0
  417. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_balance.py +0 -0
  418. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_borrow_interest.py +0 -0
  419. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_borrow_rate.py +0 -0
  420. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_calculate_fee.py +0 -0
  421. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_crypto.py +0 -0
  422. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_currency.py +0 -0
  423. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_datetime.py +0 -0
  424. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  425. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_deep_extend.py +0 -0
  426. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  427. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  428. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_funding_rate_history.py +0 -0
  429. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_ledger_entry.py +0 -0
  430. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_ledger_item.py +0 -0
  431. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_leverage_tier.py +0 -0
  432. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_margin_modification.py +0 -0
  433. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_market.py +0 -0
  434. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_number.py +0 -0
  435. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_ohlcv.py +0 -0
  436. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_open_interest.py +0 -0
  437. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_order.py +0 -0
  438. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_order_book.py +0 -0
  439. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_position.py +0 -0
  440. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_shared_methods.py +0 -0
  441. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_status.py +0 -0
  442. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_throttle.py +0 -0
  443. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_ticker.py +0 -0
  444. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_trade.py +0 -0
  445. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_trading_fee.py +0 -0
  446. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/base/test_transaction.py +0 -0
  447. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/test_async.py +0 -0
  448. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/test/test_sync.py +0 -0
  449. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/tidex.py +0 -0
  450. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/timex.py +0 -0
  451. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/tokocrypto.py +0 -0
  452. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/upbit.py +0 -0
  453. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/wavesexchange.py +0 -0
  454. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/wazirx.py +0 -0
  455. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/whitebit.py +0 -0
  456. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/woo.py +0 -0
  457. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/yobit.py +0 -0
  458. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/zaif.py +0 -0
  459. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt/zonda.py +0 -0
  460. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt.egg-info/SOURCES.txt +0 -0
  461. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt.egg-info/dependency_links.txt +0 -0
  462. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt.egg-info/requires.txt +0 -0
  463. {ccxt-4.0.72 → ccxt-4.0.73}/ccxt.egg-info/top_level.txt +0 -0
  464. {ccxt-4.0.72 → ccxt-4.0.73}/setup.cfg +0 -0
  465. {ccxt-4.0.72 → ccxt-4.0.73}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.0.72
3
+ Version: 4.0.73
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.72/dist/ccxt.browser.js
232
- * unpkg: https://unpkg.com/ccxt@4.0.72/dist/ccxt.browser.js
231
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.0.73/dist/ccxt.browser.js
232
+ * unpkg: https://unpkg.com/ccxt@4.0.73/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.72/dist/ccxt.browser.js"></script>
237
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.0.73/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.72'
25
+ __version__ = '4.0.73'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -0,0 +1,61 @@
1
+ from ccxt.base.types import Entry
2
+
3
+
4
+ class ImplicitAPI:
5
+ spot_public_get_currencypairs = spotPublicGetCurrencyPairs = Entry('currencyPairs', ['spot', 'public'], 'GET', {'cost': 2.5})
6
+ spot_public_get_accuracy = spotPublicGetAccuracy = Entry('accuracy', ['spot', 'public'], 'GET', {'cost': 2.5})
7
+ spot_public_get_usdtocny = spotPublicGetUsdToCny = Entry('usdToCny', ['spot', 'public'], 'GET', {'cost': 2.5})
8
+ spot_public_get_withdrawconfigs = spotPublicGetWithdrawConfigs = Entry('withdrawConfigs', ['spot', 'public'], 'GET', {'cost': 2.5})
9
+ spot_public_get_timestamp = spotPublicGetTimestamp = Entry('timestamp', ['spot', 'public'], 'GET', {'cost': 2.5})
10
+ spot_public_get_ticker_24hr = spotPublicGetTicker24hr = Entry('ticker/24hr', ['spot', 'public'], 'GET', {'cost': 2.5})
11
+ spot_public_get_ticker = spotPublicGetTicker = Entry('ticker', ['spot', 'public'], 'GET', {'cost': 2.5})
12
+ spot_public_get_depth = spotPublicGetDepth = Entry('depth', ['spot', 'public'], 'GET', {'cost': 2.5})
13
+ spot_public_get_incrdepth = spotPublicGetIncrDepth = Entry('incrDepth', ['spot', 'public'], 'GET', {'cost': 2.5})
14
+ spot_public_get_trades = spotPublicGetTrades = Entry('trades', ['spot', 'public'], 'GET', {'cost': 2.5})
15
+ spot_public_get_kline = spotPublicGetKline = Entry('kline', ['spot', 'public'], 'GET', {'cost': 2.5})
16
+ spot_public_get_supplement_system_ping = spotPublicGetSupplementSystemPing = Entry('supplement/system_ping', ['spot', 'public'], 'GET', {'cost': 2.5})
17
+ spot_public_get_supplement_incrdepth = spotPublicGetSupplementIncrDepth = Entry('supplement/incrDepth', ['spot', 'public'], 'GET', {'cost': 2.5})
18
+ spot_public_get_supplement_trades = spotPublicGetSupplementTrades = Entry('supplement/trades', ['spot', 'public'], 'GET', {'cost': 2.5})
19
+ spot_public_get_supplement_ticker_price = spotPublicGetSupplementTickerPrice = Entry('supplement/ticker/price', ['spot', 'public'], 'GET', {'cost': 2.5})
20
+ spot_public_get_supplement_ticker_bookticker = spotPublicGetSupplementTickerBookTicker = Entry('supplement/ticker/bookTicker', ['spot', 'public'], 'GET', {'cost': 2.5})
21
+ spot_public_post_supplement_system_status = spotPublicPostSupplementSystemStatus = Entry('supplement/system_status', ['spot', 'public'], 'POST', {'cost': 2.5})
22
+ spot_private_post_user_info = spotPrivatePostUserInfo = Entry('user_info', ['spot', 'private'], 'POST', {'cost': 2.5})
23
+ spot_private_post_subscribe_get_key = spotPrivatePostSubscribeGetKey = Entry('subscribe/get_key', ['spot', 'private'], 'POST', {'cost': 2.5})
24
+ spot_private_post_subscribe_refresh_key = spotPrivatePostSubscribeRefreshKey = Entry('subscribe/refresh_key', ['spot', 'private'], 'POST', {'cost': 2.5})
25
+ spot_private_post_subscribe_destroy_key = spotPrivatePostSubscribeDestroyKey = Entry('subscribe/destroy_key', ['spot', 'private'], 'POST', {'cost': 2.5})
26
+ spot_private_post_get_deposit_address = spotPrivatePostGetDepositAddress = Entry('get_deposit_address', ['spot', 'private'], 'POST', {'cost': 2.5})
27
+ spot_private_post_deposit_history = spotPrivatePostDepositHistory = Entry('deposit_history', ['spot', 'private'], 'POST', {'cost': 2.5})
28
+ spot_private_post_create_order = spotPrivatePostCreateOrder = Entry('create_order', ['spot', 'private'], 'POST', {'cost': 1})
29
+ spot_private_post_batch_create_order = spotPrivatePostBatchCreateOrder = Entry('batch_create_order', ['spot', 'private'], 'POST', {'cost': 1})
30
+ spot_private_post_cancel_order = spotPrivatePostCancelOrder = Entry('cancel_order', ['spot', 'private'], 'POST', {'cost': 1})
31
+ spot_private_post_cancel_clientorders = spotPrivatePostCancelClientOrders = Entry('cancel_clientOrders', ['spot', 'private'], 'POST', {'cost': 1})
32
+ spot_private_post_orders_info = spotPrivatePostOrdersInfo = Entry('orders_info', ['spot', 'private'], 'POST', {'cost': 2.5})
33
+ spot_private_post_orders_info_history = spotPrivatePostOrdersInfoHistory = Entry('orders_info_history', ['spot', 'private'], 'POST', {'cost': 2.5})
34
+ spot_private_post_order_transaction_detail = spotPrivatePostOrderTransactionDetail = Entry('order_transaction_detail', ['spot', 'private'], 'POST', {'cost': 2.5})
35
+ spot_private_post_transaction_history = spotPrivatePostTransactionHistory = Entry('transaction_history', ['spot', 'private'], 'POST', {'cost': 2.5})
36
+ spot_private_post_orders_info_no_deal = spotPrivatePostOrdersInfoNoDeal = Entry('orders_info_no_deal', ['spot', 'private'], 'POST', {'cost': 2.5})
37
+ spot_private_post_withdraw = spotPrivatePostWithdraw = Entry('withdraw', ['spot', 'private'], 'POST', {'cost': 2.5})
38
+ spot_private_post_withdrawcancel = spotPrivatePostWithdrawCancel = Entry('withdrawCancel', ['spot', 'private'], 'POST', {'cost': 2.5})
39
+ spot_private_post_withdraws = spotPrivatePostWithdraws = Entry('withdraws', ['spot', 'private'], 'POST', {'cost': 2.5})
40
+ spot_private_post_supplement_user_info = spotPrivatePostSupplementUserInfo = Entry('supplement/user_info', ['spot', 'private'], 'POST', {'cost': 2.5})
41
+ spot_private_post_supplement_withdraw = spotPrivatePostSupplementWithdraw = Entry('supplement/withdraw', ['spot', 'private'], 'POST', {'cost': 2.5})
42
+ spot_private_post_supplement_deposit_history = spotPrivatePostSupplementDepositHistory = Entry('supplement/deposit_history', ['spot', 'private'], 'POST', {'cost': 2.5})
43
+ spot_private_post_supplement_withdraws = spotPrivatePostSupplementWithdraws = Entry('supplement/withdraws', ['spot', 'private'], 'POST', {'cost': 2.5})
44
+ spot_private_post_supplement_get_deposit_address = spotPrivatePostSupplementGetDepositAddress = Entry('supplement/get_deposit_address', ['spot', 'private'], 'POST', {'cost': 2.5})
45
+ spot_private_post_supplement_asset_detail = spotPrivatePostSupplementAssetDetail = Entry('supplement/asset_detail', ['spot', 'private'], 'POST', {'cost': 2.5})
46
+ spot_private_post_supplement_customer_trade_fee = spotPrivatePostSupplementCustomerTradeFee = Entry('supplement/customer_trade_fee', ['spot', 'private'], 'POST', {'cost': 2.5})
47
+ spot_private_post_supplement_api_restrictions = spotPrivatePostSupplementApiRestrictions = Entry('supplement/api_Restrictions', ['spot', 'private'], 'POST', {'cost': 2.5})
48
+ spot_private_post_supplement_system_ping = spotPrivatePostSupplementSystemPing = Entry('supplement/system_ping', ['spot', 'private'], 'POST', {'cost': 2.5})
49
+ spot_private_post_supplement_create_order_test = spotPrivatePostSupplementCreateOrderTest = Entry('supplement/create_order_test', ['spot', 'private'], 'POST', {'cost': 1})
50
+ spot_private_post_supplement_create_order = spotPrivatePostSupplementCreateOrder = Entry('supplement/create_order', ['spot', 'private'], 'POST', {'cost': 1})
51
+ spot_private_post_supplement_cancel_order = spotPrivatePostSupplementCancelOrder = Entry('supplement/cancel_order', ['spot', 'private'], 'POST', {'cost': 1})
52
+ spot_private_post_supplement_cancel_order_by_symbol = spotPrivatePostSupplementCancelOrderBySymbol = Entry('supplement/cancel_order_by_symbol', ['spot', 'private'], 'POST', {'cost': 1})
53
+ spot_private_post_supplement_orders_info = spotPrivatePostSupplementOrdersInfo = Entry('supplement/orders_info', ['spot', 'private'], 'POST', {'cost': 2.5})
54
+ spot_private_post_supplement_orders_info_no_deal = spotPrivatePostSupplementOrdersInfoNoDeal = Entry('supplement/orders_info_no_deal', ['spot', 'private'], 'POST', {'cost': 2.5})
55
+ spot_private_post_supplement_orders_info_history = spotPrivatePostSupplementOrdersInfoHistory = Entry('supplement/orders_info_history', ['spot', 'private'], 'POST', {'cost': 2.5})
56
+ spot_private_post_supplement_user_info_account = spotPrivatePostSupplementUserInfoAccount = Entry('supplement/user_info_account', ['spot', 'private'], 'POST', {'cost': 2.5})
57
+ spot_private_post_supplement_transaction_history = spotPrivatePostSupplementTransactionHistory = Entry('supplement/transaction_history', ['spot', 'private'], 'POST', {'cost': 2.5})
58
+ contract_public_get_cfd_openapi_v1_pub_gettime = contractPublicGetCfdOpenApiV1PubGetTime = Entry('cfd/openApi/v1/pub/getTime', ['contract', 'public'], 'GET', {'cost': 2.5})
59
+ contract_public_get_cfd_openapi_v1_pub_instrument = contractPublicGetCfdOpenApiV1PubInstrument = Entry('cfd/openApi/v1/pub/instrument', ['contract', 'public'], 'GET', {'cost': 2.5})
60
+ contract_public_get_cfd_openapi_v1_pub_marketdata = contractPublicGetCfdOpenApiV1PubMarketData = Entry('cfd/openApi/v1/pub/marketData', ['contract', 'public'], 'GET', {'cost': 2.5})
61
+ contract_public_get_cfd_openapi_v1_pub_marketorder = contractPublicGetCfdOpenApiV1PubMarketOrder = Entry('cfd/openApi/v1/pub/marketOrder', ['contract', 'public'], 'GET', {'cost': 2.5})
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.0.72'
7
+ __version__ = '4.0.73'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.0.72'
5
+ __version__ = '4.0.73'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -743,7 +743,7 @@ class Exchange(BaseExchange):
743
743
  raise NotSupported(self.id + ' parseWsOrderTrade() is not supported yet')
744
744
 
745
745
  def parse_ws_ohlcv(self, ohlcv, market=None):
746
- raise NotSupported(self.id + ' parseWsOHLCV() is not supported yet')
746
+ return self.parse_ohlcv(ohlcv, market)
747
747
 
748
748
  async def fetch_funding_rates(self, symbols: Optional[List[str]] = None, params={}):
749
749
  raise NotSupported(self.id + ' fetchFundingRates() is not supported yet')
@@ -2967,6 +2967,12 @@ class Exchange(BaseExchange):
2967
2967
  market = self.market(firstMarket)
2968
2968
  return market
2969
2969
 
2970
+ def parse_ws_ohlcvs(self, ohlcvs: List[object], market: Optional[Any] = None, timeframe: str = '1m', since: Optional[int] = None, limit: Optional[int] = None):
2971
+ results = []
2972
+ for i in range(0, len(ohlcvs)):
2973
+ results.append(self.parse_ws_ohlcv(ohlcvs[i], market))
2974
+ return results
2975
+
2970
2976
  async def fetch_transactions(self, code: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
2971
2977
  """
2972
2978
  * @deprecated
@@ -103,6 +103,7 @@ class binance(Exchange, ImplicitAPI):
103
103
  'fetchMarketLeverageTiers': 'emulated',
104
104
  'fetchMarkets': True,
105
105
  'fetchMarkOHLCV': True,
106
+ 'fetchMySettlementHistory': True,
106
107
  'fetchMyTrades': True,
107
108
  'fetchOHLCV': True,
108
109
  'fetchOpenInterest': True,
@@ -7176,7 +7177,57 @@ class binance(Exchange, ImplicitAPI):
7176
7177
  sorted = self.sort_by(settlements, 'timestamp')
7177
7178
  return self.filter_by_symbol_since_limit(sorted, symbol, since, limit)
7178
7179
 
7180
+ async def fetch_my_settlement_history(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
7181
+ """
7182
+ fetches historical settlement records of the user
7183
+ see https://binance-docs.github.io/apidocs/voptions/en/#user-exercise-record-user_data
7184
+ :param str symbol: unified market symbol of the settlement history
7185
+ :param int [since]: timestamp in ms
7186
+ :param int [limit]: number of records
7187
+ :param dict [params]: exchange specific params
7188
+ :returns dict[]: a list of [settlement history objects]
7189
+ """
7190
+ await self.load_markets()
7191
+ market = None if (symbol is None) else self.market(symbol)
7192
+ type = None
7193
+ type, params = self.handle_market_type_and_params('fetchMySettlementHistory', market, params)
7194
+ if type != 'option':
7195
+ raise NotSupported(self.id + ' fetchMySettlementHistory() supports option markets only')
7196
+ request = {}
7197
+ if symbol is not None:
7198
+ request['symbol'] = market['id']
7199
+ if since is not None:
7200
+ request['startTime'] = since
7201
+ if limit is not None:
7202
+ request['limit'] = limit
7203
+ response = await self.eapiPrivateGetExerciseRecord(self.extend(request, params))
7204
+ #
7205
+ # [
7206
+ # {
7207
+ # "id": "1125899906842897036",
7208
+ # "currency": "USDT",
7209
+ # "symbol": "BTC-230728-30000-C",
7210
+ # "exercisePrice": "30000.00000000",
7211
+ # "markPrice": "29160.71284993",
7212
+ # "quantity": "1.00000000",
7213
+ # "amount": "0.00000000",
7214
+ # "fee": "0.00000000",
7215
+ # "createDate": 1690531200000,
7216
+ # "priceScale": 0,
7217
+ # "quantityScale": 2,
7218
+ # "optionSide": "CALL",
7219
+ # "positionSide": "LONG",
7220
+ # "quoteAsset": "USDT"
7221
+ # }
7222
+ # ]
7223
+ #
7224
+ settlements = self.parse_settlements(response, market)
7225
+ sorted = self.sort_by(settlements, 'timestamp')
7226
+ return self.filter_by_symbol_since_limit(sorted, market['symbol'], since, limit)
7227
+
7179
7228
  def parse_settlement(self, settlement, market):
7229
+ #
7230
+ # fetchSettlementHistory
7180
7231
  #
7181
7232
  # {
7182
7233
  # "symbol": "ETH-230223-1900-P",
@@ -7186,17 +7237,38 @@ class binance(Exchange, ImplicitAPI):
7186
7237
  # "strikeResult": "REALISTIC_VALUE_STRICKEN"
7187
7238
  # }
7188
7239
  #
7189
- timestamp = self.safe_integer(settlement, 'expiryDate')
7240
+ # fetchMySettlementHistory
7241
+ #
7242
+ # {
7243
+ # "id": "1125899906842897036",
7244
+ # "currency": "USDT",
7245
+ # "symbol": "BTC-230728-30000-C",
7246
+ # "exercisePrice": "30000.00000000",
7247
+ # "markPrice": "29160.71284993",
7248
+ # "quantity": "1.00000000",
7249
+ # "amount": "0.00000000",
7250
+ # "fee": "0.00000000",
7251
+ # "createDate": 1690531200000,
7252
+ # "priceScale": 0,
7253
+ # "quantityScale": 2,
7254
+ # "optionSide": "CALL",
7255
+ # "positionSide": "LONG",
7256
+ # "quoteAsset": "USDT"
7257
+ # }
7258
+ #
7259
+ timestamp = self.safe_integer_2(settlement, 'expiryDate', 'createDate')
7190
7260
  marketId = self.safe_string(settlement, 'symbol')
7191
7261
  return {
7192
7262
  'info': settlement,
7193
7263
  'symbol': self.safe_symbol(marketId, market),
7194
- 'price': self.safe_number(settlement, 'realStrikePrice'),
7264
+ 'price': self.safe_number_2(settlement, 'realStrikePrice', 'exercisePrice'),
7195
7265
  'timestamp': timestamp,
7196
7266
  'datetime': self.iso8601(timestamp),
7197
7267
  }
7198
7268
 
7199
7269
  def parse_settlements(self, settlements, market):
7270
+ #
7271
+ # fetchSettlementHistory
7200
7272
  #
7201
7273
  # [
7202
7274
  # {
@@ -7208,6 +7280,27 @@ class binance(Exchange, ImplicitAPI):
7208
7280
  # }
7209
7281
  # ]
7210
7282
  #
7283
+ # fetchMySettlementHistory
7284
+ #
7285
+ # [
7286
+ # {
7287
+ # "id": "1125899906842897036",
7288
+ # "currency": "USDT",
7289
+ # "symbol": "BTC-230728-30000-C",
7290
+ # "exercisePrice": "30000.00000000",
7291
+ # "markPrice": "29160.71284993",
7292
+ # "quantity": "1.00000000",
7293
+ # "amount": "0.00000000",
7294
+ # "fee": "0.00000000",
7295
+ # "createDate": 1690531200000,
7296
+ # "priceScale": 0,
7297
+ # "quantityScale": 2,
7298
+ # "optionSide": "CALL",
7299
+ # "positionSide": "LONG",
7300
+ # "quoteAsset": "USDT"
7301
+ # }
7302
+ # ]
7303
+ #
7211
7304
  result = []
7212
7305
  for i in range(0, len(settlements)):
7213
7306
  result.append(self.parse_settlement(settlements[i], market))
@@ -81,6 +81,7 @@ class bybit(Exchange, ImplicitAPI):
81
81
  'fetchMarketLeverageTiers': True,
82
82
  'fetchMarkets': True,
83
83
  'fetchMarkOHLCV': True,
84
+ 'fetchMySettlementHistory': True,
84
85
  'fetchMyTrades': True,
85
86
  'fetchOHLCV': True,
86
87
  'fetchOpenInterest': True,
@@ -8309,7 +8310,68 @@ class bybit(Exchange, ImplicitAPI):
8309
8310
  sorted = self.sort_by(settlements, 'timestamp')
8310
8311
  return self.filter_by_symbol_since_limit(sorted, market['symbol'], since, limit)
8311
8312
 
8313
+ async def fetch_my_settlement_history(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
8314
+ """
8315
+ fetches historical settlement records of the user
8316
+ see https://bybit-exchange.github.io/docs/v5/asset/delivery
8317
+ :param str symbol: unified market symbol of the settlement history
8318
+ :param int [since]: timestamp in ms
8319
+ :param int [limit]: number of records
8320
+ :param dict [params]: exchange specific params
8321
+ :returns dict[]: a list of [settlement history objects]
8322
+ """
8323
+ await self.load_markets()
8324
+ request = {}
8325
+ market = None
8326
+ if symbol is not None:
8327
+ market = self.market(symbol)
8328
+ request['symbol'] = market['id']
8329
+ type = None
8330
+ type, params = self.handle_market_type_and_params('fetchMySettlementHistory', market, params)
8331
+ if type == 'option':
8332
+ request['category'] = 'option'
8333
+ else:
8334
+ subType = None
8335
+ subType, params = self.handle_sub_type_and_params('fetchMySettlementHistory', market, params, 'linear')
8336
+ if subType == 'inverse':
8337
+ raise NotSupported(self.id + ' fetchMySettlementHistory() doesn\'t support inverse markets')
8338
+ request['category'] = 'linear'
8339
+ if limit is not None:
8340
+ request['limit'] = limit
8341
+ response = await self.privateGetV5AssetDeliveryRecord(self.extend(request, params))
8342
+ #
8343
+ # {
8344
+ # "retCode": 0,
8345
+ # "retMsg": "success",
8346
+ # "result": {
8347
+ # "category": "option",
8348
+ # "nextPageCursor": "0%2C3",
8349
+ # "list": [
8350
+ # {
8351
+ # "symbol": "SOL-27JUN23-20-C",
8352
+ # "deliveryPrice": "16.62258889",
8353
+ # "deliveryTime": "1687852800000",
8354
+ # "side": "Buy",
8355
+ # "strike": "20",
8356
+ # "fee": "0.00000000",
8357
+ # "position": "0.01",
8358
+ # "deliveryRpl": "3.5"
8359
+ # },
8360
+ # ]
8361
+ # },
8362
+ # "retExtInfo": {},
8363
+ # "time": 1689043527231
8364
+ # }
8365
+ #
8366
+ result = self.safe_value(response, 'result', {})
8367
+ data = self.safe_value(result, 'list', [])
8368
+ settlements = self.parse_settlements(data, market)
8369
+ sorted = self.sort_by(settlements, 'timestamp')
8370
+ return self.filter_by_symbol_since_limit(sorted, market['symbol'], since, limit)
8371
+
8312
8372
  def parse_settlement(self, settlement, market):
8373
+ #
8374
+ # fetchSettlementHistory
8313
8375
  #
8314
8376
  # {
8315
8377
  # "symbol": "SOL-27JUN23-20-C",
@@ -8317,6 +8379,19 @@ class bybit(Exchange, ImplicitAPI):
8317
8379
  # "deliveryTime": "1687852800000"
8318
8380
  # }
8319
8381
  #
8382
+ # fetchMySettlementHistory
8383
+ #
8384
+ # {
8385
+ # "symbol": "SOL-27JUN23-20-C",
8386
+ # "deliveryPrice": "16.62258889",
8387
+ # "deliveryTime": "1687852800000",
8388
+ # "side": "Buy",
8389
+ # "strike": "20",
8390
+ # "fee": "0.00000000",
8391
+ # "position": "0.01",
8392
+ # "deliveryRpl": "3.5"
8393
+ # }
8394
+ #
8320
8395
  timestamp = self.safe_integer(settlement, 'deliveryTime')
8321
8396
  marketId = self.safe_string(settlement, 'symbol')
8322
8397
  return {
@@ -8328,6 +8403,8 @@ class bybit(Exchange, ImplicitAPI):
8328
8403
  }
8329
8404
 
8330
8405
  def parse_settlements(self, settlements, market):
8406
+ #
8407
+ # fetchSettlementHistory
8331
8408
  #
8332
8409
  # [
8333
8410
  # {
@@ -8337,6 +8414,21 @@ class bybit(Exchange, ImplicitAPI):
8337
8414
  # }
8338
8415
  # ]
8339
8416
  #
8417
+ # fetchMySettlementHistory
8418
+ #
8419
+ # [
8420
+ # {
8421
+ # "symbol": "SOL-27JUN23-20-C",
8422
+ # "deliveryPrice": "16.62258889",
8423
+ # "deliveryTime": "1687852800000",
8424
+ # "side": "Buy",
8425
+ # "strike": "20",
8426
+ # "fee": "0.00000000",
8427
+ # "position": "0.01",
8428
+ # "deliveryRpl": "3.5"
8429
+ # }
8430
+ # ]
8431
+ #
8340
8432
  result = []
8341
8433
  for i in range(0, len(settlements)):
8342
8434
  result.append(self.parse_settlement(settlements[i], market))
@@ -78,6 +78,7 @@ class cryptocom(Exchange, ImplicitAPI):
78
78
  'fetchMarketLeverageTiers': False,
79
79
  'fetchMarkets': True,
80
80
  'fetchMarkOHLCV': False,
81
+ 'fetchMySettlementHistory': False,
81
82
  'fetchMyTrades': True,
82
83
  'fetchOHLCV': True,
83
84
  'fetchOpenOrders': True,
@@ -63,6 +63,7 @@ class delta(Exchange, ImplicitAPI):
63
63
  'fetchMarketLeverageTiers': False,
64
64
  'fetchMarkets': True,
65
65
  'fetchMarkOHLCV': True,
66
+ 'fetchMySettlementHistory': False,
66
67
  'fetchMyTrades': True,
67
68
  'fetchOHLCV': True,
68
69
  'fetchOpenInterest': True,
@@ -76,6 +76,7 @@ class deribit(Exchange, ImplicitAPI):
76
76
  'fetchMarginMode': False,
77
77
  'fetchMarkets': True,
78
78
  'fetchMarkOHLCV': False,
79
+ 'fetchMySettlementHistory': False,
79
80
  'fetchMyTrades': True,
80
81
  'fetchOHLCV': True,
81
82
  'fetchOpenOrders': True,
@@ -130,6 +130,7 @@ class gate(Exchange, ImplicitAPI):
130
130
  'fetchMarketLeverageTiers': 'emulated',
131
131
  'fetchMarkets': True,
132
132
  'fetchMarkOHLCV': True,
133
+ 'fetchMySettlementHistory': True,
133
134
  'fetchMyTrades': True,
134
135
  'fetchNetworkDepositAddress': True,
135
136
  'fetchOHLCV': True,
@@ -834,6 +835,97 @@ class gate(Exchange, ImplicitAPI):
834
835
  super(gate, self).set_sandbox_mode(enable)
835
836
  self.options['sandboxMode'] = enable
836
837
 
838
+ def convert_expire_date(self, date):
839
+ # parse YYMMDD to timestamp
840
+ year = date[0:2]
841
+ month = date[2:4]
842
+ day = date[4:6]
843
+ reconstructedDate = '20' + year + '-' + month + '-' + day + 'T00:00:00Z'
844
+ return reconstructedDate
845
+
846
+ def create_expired_option_market(self, symbol):
847
+ # support expired option contracts
848
+ quote = 'USDT'
849
+ settle = quote
850
+ optionParts = symbol.split('-')
851
+ symbolBase = symbol.split('/')
852
+ marketIdBase = symbol.split('_')
853
+ base = None
854
+ expiry = self.safe_string(optionParts, 1)
855
+ if symbol.find('/') > -1:
856
+ base = self.safe_string(symbolBase, 0)
857
+ else:
858
+ base = self.safe_string(marketIdBase, 0)
859
+ expiry = expiry[2:8] # convert 20230728 to 230728
860
+ strike = self.safe_string(optionParts, 2)
861
+ optionType = self.safe_string(optionParts, 3)
862
+ datetime = self.convert_expire_date(expiry)
863
+ timestamp = self.parse8601(datetime)
864
+ return {
865
+ 'id': base + '_' + quote + '-' + '20' + expiry + '-' + strike + '-' + optionType,
866
+ 'symbol': base + '/' + quote + ':' + settle + '-' + expiry + '-' + strike + '-' + optionType,
867
+ 'base': base,
868
+ 'quote': quote,
869
+ 'settle': settle,
870
+ 'baseId': base,
871
+ 'quoteId': quote,
872
+ 'settleId': settle,
873
+ 'active': False,
874
+ 'type': 'option',
875
+ 'linear': None,
876
+ 'inverse': None,
877
+ 'spot': False,
878
+ 'swap': False,
879
+ 'future': False,
880
+ 'option': True,
881
+ 'margin': False,
882
+ 'contract': True,
883
+ 'contractSize': self.parse_number('1'),
884
+ 'expiry': timestamp,
885
+ 'expiryDatetime': datetime,
886
+ 'optionType': 'call' if (optionType == 'C') else 'put',
887
+ 'strike': self.parse_number(strike),
888
+ 'precision': {
889
+ 'amount': self.parse_number('1'),
890
+ 'price': None,
891
+ },
892
+ 'limits': {
893
+ 'amount': {
894
+ 'min': None,
895
+ 'max': None,
896
+ },
897
+ 'price': {
898
+ 'min': None,
899
+ 'max': None,
900
+ },
901
+ 'cost': {
902
+ 'min': None,
903
+ 'max': None,
904
+ },
905
+ },
906
+ 'info': None,
907
+ }
908
+
909
+ def market(self, symbol):
910
+ if self.markets is None:
911
+ raise ExchangeError(self.id + ' markets not loaded')
912
+ if isinstance(symbol, str):
913
+ if symbol in self.markets:
914
+ return self.markets[symbol]
915
+ elif symbol in self.markets_by_id:
916
+ markets = self.markets_by_id[symbol]
917
+ return markets[0]
918
+ elif (symbol.find('-C') > -1) or (symbol.find('-P') > -1):
919
+ return self.create_expired_option_market(symbol)
920
+ raise BadSymbol(self.id + ' does not have market symbol ' + symbol)
921
+
922
+ def safe_market(self, marketId=None, market=None, delimiter=None, marketType=None):
923
+ isOption = (marketId is not None) and ((marketId.find('-C') > -1) or (marketId.find('-P') > -1))
924
+ if isOption and not (marketId in self.markets_by_id):
925
+ # handle expired option contracts
926
+ return self.create_expired_option_market(marketId)
927
+ return super(gate, self).safe_market(marketId, market, delimiter, marketType)
928
+
837
929
  async def fetch_markets(self, params={}):
838
930
  """
839
931
  retrieves data on all markets for gate
@@ -5401,7 +5493,58 @@ class gate(Exchange, ImplicitAPI):
5401
5493
  sorted = self.sort_by(settlements, 'timestamp')
5402
5494
  return self.filter_by_symbol_since_limit(sorted, symbol, since, limit)
5403
5495
 
5496
+ async def fetch_my_settlement_history(self, symbol: Optional[str] = None, since: Optional[int] = None, limit: Optional[int] = None, params={}):
5497
+ """
5498
+ fetches historical settlement records of the user
5499
+ see https://www.gate.io/docs/developers/apiv4/en/#list-my-options-settlements
5500
+ :param str symbol: unified market symbol of the settlement history
5501
+ :param int [since]: timestamp in ms
5502
+ :param int [limit]: number of records
5503
+ :param dict [params]: exchange specific params
5504
+ :returns dict[]: a list of [settlement history objects]
5505
+ """
5506
+ self.check_required_symbol('fetchMySettlementHistory', symbol)
5507
+ await self.load_markets()
5508
+ market = self.market(symbol)
5509
+ type = None
5510
+ type, params = self.handle_market_type_and_params('fetchMySettlementHistory', market, params)
5511
+ if type != 'option':
5512
+ raise NotSupported(self.id + ' fetchMySettlementHistory() supports option markets only')
5513
+ marketId = market['id']
5514
+ optionParts = marketId.split('-')
5515
+ request = {
5516
+ 'underlying': self.safe_string(optionParts, 0),
5517
+ 'contract': marketId,
5518
+ }
5519
+ if since is not None:
5520
+ request['from'] = since
5521
+ if limit is not None:
5522
+ request['limit'] = limit
5523
+ response = await self.privateOptionsGetMySettlements(self.extend(request, params))
5524
+ #
5525
+ # [
5526
+ # {
5527
+ # "size": -1,
5528
+ # "settle_profit": "0",
5529
+ # "contract": "BTC_USDT-20220624-26000-C",
5530
+ # "strike_price": "26000",
5531
+ # "time": 1656057600,
5532
+ # "settle_price": "20917.461281337048",
5533
+ # "underlying": "BTC_USDT",
5534
+ # "realised_pnl": "-0.00116042",
5535
+ # "fee": "0"
5536
+ # }
5537
+ # ]
5538
+ #
5539
+ result = self.safe_value(response, 'result', {})
5540
+ data = self.safe_value(result, 'list', [])
5541
+ settlements = self.parse_settlements(data, market)
5542
+ sorted = self.sort_by(settlements, 'timestamp')
5543
+ return self.filter_by_symbol_since_limit(sorted, market['symbol'], since, limit)
5544
+
5404
5545
  def parse_settlement(self, settlement, market):
5546
+ #
5547
+ # fetchSettlementHistory
5405
5548
  #
5406
5549
  # {
5407
5550
  # "time": 1685952000,
@@ -5412,6 +5555,20 @@ class gate(Exchange, ImplicitAPI):
5412
5555
  # "strike_price": "25000"
5413
5556
  # }
5414
5557
  #
5558
+ # fetchMySettlementHistory
5559
+ #
5560
+ # {
5561
+ # "size": -1,
5562
+ # "settle_profit": "0",
5563
+ # "contract": "BTC_USDT-20220624-26000-C",
5564
+ # "strike_price": "26000",
5565
+ # "time": 1656057600,
5566
+ # "settle_price": "20917.461281337048",
5567
+ # "underlying": "BTC_USDT",
5568
+ # "realised_pnl": "-0.00116042",
5569
+ # "fee": "0"
5570
+ # }
5571
+ #
5415
5572
  timestamp = self.safe_timestamp(settlement, 'time')
5416
5573
  marketId = self.safe_string(settlement, 'contract')
5417
5574
  return {
@@ -5423,6 +5580,8 @@ class gate(Exchange, ImplicitAPI):
5423
5580
  }
5424
5581
 
5425
5582
  def parse_settlements(self, settlements, market):
5583
+ #
5584
+ # fetchSettlementHistory
5426
5585
  #
5427
5586
  # [
5428
5587
  # {
@@ -5435,6 +5594,22 @@ class gate(Exchange, ImplicitAPI):
5435
5594
  # }
5436
5595
  # ]
5437
5596
  #
5597
+ # fetchMySettlementHistory
5598
+ #
5599
+ # [
5600
+ # {
5601
+ # "size": -1,
5602
+ # "settle_profit": "0",
5603
+ # "contract": "BTC_USDT-20220624-26000-C",
5604
+ # "strike_price": "26000",
5605
+ # "time": 1656057600,
5606
+ # "settle_price": "20917.461281337048",
5607
+ # "underlying": "BTC_USDT",
5608
+ # "realised_pnl": "-0.00116042",
5609
+ # "fee": "0"
5610
+ # }
5611
+ # ]
5612
+ #
5438
5613
  result = []
5439
5614
  for i in range(0, len(settlements)):
5440
5615
  result.append(self.parse_settlement(settlements[i], market))