ccxt 4.3.16__tar.gz → 4.3.18__tar.gz

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (541) hide show
  1. {ccxt-4.3.16/ccxt.egg-info → ccxt-4.3.18}/PKG-INFO +4 -4
  2. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/__init__.py +1 -1
  3. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/__init__.py +1 -1
  4. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/exchange.py +1 -1
  5. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/binance.py +34 -17
  6. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bybit.py +10 -7
  7. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/htx.py +2 -2
  8. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/okx.py +18 -0
  9. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/base/exchange.py +2 -2
  10. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/binance.py +34 -17
  11. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bybit.py +10 -7
  12. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/htx.py +2 -2
  13. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/okx.py +18 -0
  14. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/__init__.py +1 -1
  15. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitfinex2.py +2 -0
  16. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitget.py +3 -0
  17. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitvavo.py +1 -1
  18. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bybit.py +7 -6
  19. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/htx.py +2 -0
  20. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/independentreserve.py +2 -0
  21. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/kraken.py +2 -0
  22. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/okx.py +22 -18
  23. {ccxt-4.3.16 → ccxt-4.3.18/ccxt.egg-info}/PKG-INFO +4 -4
  24. {ccxt-4.3.16 → ccxt-4.3.18}/package.json +1 -1
  25. {ccxt-4.3.16 → ccxt-4.3.18}/LICENSE.txt +0 -0
  26. {ccxt-4.3.16 → ccxt-4.3.18}/MANIFEST.in +0 -0
  27. {ccxt-4.3.16 → ccxt-4.3.18}/README.rst +0 -0
  28. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/__init__.py +0 -0
  29. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/ace.py +0 -0
  30. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/alpaca.py +0 -0
  31. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/ascendex.py +0 -0
  32. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bequant.py +0 -0
  33. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bigone.py +0 -0
  34. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/binance.py +0 -0
  35. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/binancecoinm.py +0 -0
  36. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/binanceus.py +0 -0
  37. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/binanceusdm.py +0 -0
  38. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bingx.py +0 -0
  39. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bit2c.py +0 -0
  40. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitbank.py +0 -0
  41. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitbay.py +0 -0
  42. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitbns.py +0 -0
  43. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitcoincom.py +0 -0
  44. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitfinex.py +0 -0
  45. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitfinex2.py +0 -0
  46. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitflyer.py +0 -0
  47. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitget.py +0 -0
  48. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bithumb.py +0 -0
  49. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitmart.py +0 -0
  50. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitmex.py +0 -0
  51. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitopro.py +0 -0
  52. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitpanda.py +0 -0
  53. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitrue.py +0 -0
  54. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitso.py +0 -0
  55. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitstamp.py +0 -0
  56. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitteam.py +0 -0
  57. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bitvavo.py +0 -0
  58. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bl3p.py +0 -0
  59. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/blockchaincom.py +0 -0
  60. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/blofin.py +0 -0
  61. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/btcalpha.py +0 -0
  62. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/btcbox.py +0 -0
  63. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/btcmarkets.py +0 -0
  64. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/btcturk.py +0 -0
  65. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/bybit.py +0 -0
  66. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/cex.py +0 -0
  67. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinbase.py +0 -0
  68. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinbaseinternational.py +0 -0
  69. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinbasepro.py +0 -0
  70. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coincheck.py +0 -0
  71. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinex.py +0 -0
  72. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinlist.py +0 -0
  73. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinmate.py +0 -0
  74. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinmetro.py +0 -0
  75. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinone.py +0 -0
  76. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinsph.py +0 -0
  77. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/coinspot.py +0 -0
  78. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/cryptocom.py +0 -0
  79. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/currencycom.py +0 -0
  80. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/delta.py +0 -0
  81. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/deribit.py +0 -0
  82. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/digifinex.py +0 -0
  83. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/exmo.py +0 -0
  84. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/fmfwio.py +0 -0
  85. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/gate.py +0 -0
  86. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/gateio.py +0 -0
  87. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/gemini.py +0 -0
  88. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/hitbtc.py +0 -0
  89. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/hitbtc3.py +0 -0
  90. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/hollaex.py +0 -0
  91. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/htx.py +0 -0
  92. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/huobi.py +0 -0
  93. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/huobijp.py +0 -0
  94. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/hyperliquid.py +0 -0
  95. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/idex.py +0 -0
  96. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/independentreserve.py +0 -0
  97. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/indodax.py +0 -0
  98. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/kraken.py +0 -0
  99. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/krakenfutures.py +0 -0
  100. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/kucoin.py +0 -0
  101. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/kucoinfutures.py +0 -0
  102. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/kuna.py +0 -0
  103. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/latoken.py +0 -0
  104. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/lbank.py +0 -0
  105. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/luno.py +0 -0
  106. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/lykke.py +0 -0
  107. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/mercado.py +0 -0
  108. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/mexc.py +0 -0
  109. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/ndax.py +0 -0
  110. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/novadax.py +0 -0
  111. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/oceanex.py +0 -0
  112. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/okcoin.py +0 -0
  113. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/okx.py +0 -0
  114. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/onetrading.py +0 -0
  115. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/p2b.py +0 -0
  116. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/paymium.py +0 -0
  117. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/phemex.py +0 -0
  118. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/poloniex.py +0 -0
  119. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/poloniexfutures.py +0 -0
  120. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/probit.py +0 -0
  121. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/timex.py +0 -0
  122. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/tokocrypto.py +0 -0
  123. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/tradeogre.py +0 -0
  124. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/upbit.py +0 -0
  125. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/wavesexchange.py +0 -0
  126. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/wazirx.py +0 -0
  127. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/whitebit.py +0 -0
  128. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/woo.py +0 -0
  129. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/yobit.py +0 -0
  130. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/zaif.py +0 -0
  131. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/abstract/zonda.py +0 -0
  132. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/ace.py +0 -0
  133. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/alpaca.py +0 -0
  134. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/ascendex.py +0 -0
  135. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/ace.py +0 -0
  136. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/alpaca.py +0 -0
  137. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/ascendex.py +0 -0
  138. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/__init__.py +0 -0
  139. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/throttler.py +0 -0
  140. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/__init__.py +0 -0
  141. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/aiohttp_client.py +0 -0
  142. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/cache.py +0 -0
  143. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/client.py +0 -0
  144. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/fast_client.py +0 -0
  145. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/functions.py +0 -0
  146. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/future.py +0 -0
  147. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/order_book.py +0 -0
  148. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/base/ws/order_book_side.py +0 -0
  149. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bequant.py +0 -0
  150. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bigone.py +0 -0
  151. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/binancecoinm.py +0 -0
  152. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/binanceus.py +0 -0
  153. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/binanceusdm.py +0 -0
  154. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bingx.py +0 -0
  155. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bit2c.py +0 -0
  156. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitbank.py +0 -0
  157. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitbay.py +0 -0
  158. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitbns.py +0 -0
  159. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitcoincom.py +0 -0
  160. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitfinex.py +0 -0
  161. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitfinex2.py +0 -0
  162. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitflyer.py +0 -0
  163. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitget.py +0 -0
  164. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bithumb.py +0 -0
  165. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitmart.py +0 -0
  166. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitmex.py +0 -0
  167. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitopro.py +0 -0
  168. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitpanda.py +0 -0
  169. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitrue.py +0 -0
  170. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitso.py +0 -0
  171. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitstamp.py +0 -0
  172. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitteam.py +0 -0
  173. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bitvavo.py +0 -0
  174. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/bl3p.py +0 -0
  175. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/blockchaincom.py +0 -0
  176. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/blofin.py +0 -0
  177. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/btcalpha.py +0 -0
  178. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/btcbox.py +0 -0
  179. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/btcmarkets.py +0 -0
  180. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/btcturk.py +0 -0
  181. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/cex.py +0 -0
  182. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinbase.py +0 -0
  183. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinbaseinternational.py +0 -0
  184. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinbasepro.py +0 -0
  185. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coincheck.py +0 -0
  186. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinex.py +0 -0
  187. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinlist.py +0 -0
  188. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinmate.py +0 -0
  189. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinmetro.py +0 -0
  190. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinone.py +0 -0
  191. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinsph.py +0 -0
  192. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/coinspot.py +0 -0
  193. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/cryptocom.py +0 -0
  194. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/currencycom.py +0 -0
  195. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/delta.py +0 -0
  196. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/deribit.py +0 -0
  197. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/digifinex.py +0 -0
  198. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/exmo.py +0 -0
  199. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/fmfwio.py +0 -0
  200. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/gate.py +0 -0
  201. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/gateio.py +0 -0
  202. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/gemini.py +0 -0
  203. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/hitbtc.py +0 -0
  204. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/hitbtc3.py +0 -0
  205. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/hollaex.py +0 -0
  206. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/huobi.py +0 -0
  207. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/huobijp.py +0 -0
  208. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/hyperliquid.py +0 -0
  209. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/idex.py +0 -0
  210. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/independentreserve.py +0 -0
  211. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/indodax.py +0 -0
  212. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/kraken.py +0 -0
  213. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/krakenfutures.py +0 -0
  214. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/kucoin.py +0 -0
  215. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/kucoinfutures.py +0 -0
  216. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/kuna.py +0 -0
  217. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/latoken.py +0 -0
  218. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/lbank.py +0 -0
  219. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/luno.py +0 -0
  220. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/lykke.py +0 -0
  221. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/mercado.py +0 -0
  222. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/mexc.py +0 -0
  223. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/ndax.py +0 -0
  224. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/novadax.py +0 -0
  225. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/oceanex.py +0 -0
  226. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/okcoin.py +0 -0
  227. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/onetrading.py +0 -0
  228. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/p2b.py +0 -0
  229. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/paymium.py +0 -0
  230. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/phemex.py +0 -0
  231. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/poloniex.py +0 -0
  232. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/poloniexfutures.py +0 -0
  233. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/probit.py +0 -0
  234. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/timex.py +0 -0
  235. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/tokocrypto.py +0 -0
  236. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/tradeogre.py +0 -0
  237. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/upbit.py +0 -0
  238. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/wavesexchange.py +0 -0
  239. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/wazirx.py +0 -0
  240. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/whitebit.py +0 -0
  241. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/woo.py +0 -0
  242. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/yobit.py +0 -0
  243. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/zaif.py +0 -0
  244. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/async_support/zonda.py +0 -0
  245. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/base/__init__.py +0 -0
  246. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/base/decimal_to_precision.py +0 -0
  247. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/base/errors.py +0 -0
  248. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/base/precise.py +0 -0
  249. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/base/types.py +0 -0
  250. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bequant.py +0 -0
  251. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bigone.py +0 -0
  252. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/binancecoinm.py +0 -0
  253. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/binanceus.py +0 -0
  254. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/binanceusdm.py +0 -0
  255. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bingx.py +0 -0
  256. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bit2c.py +0 -0
  257. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitbank.py +0 -0
  258. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitbay.py +0 -0
  259. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitbns.py +0 -0
  260. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitcoincom.py +0 -0
  261. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitfinex.py +0 -0
  262. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitfinex2.py +0 -0
  263. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitflyer.py +0 -0
  264. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitget.py +0 -0
  265. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bithumb.py +0 -0
  266. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitmart.py +0 -0
  267. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitmex.py +0 -0
  268. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitopro.py +0 -0
  269. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitpanda.py +0 -0
  270. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitrue.py +0 -0
  271. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitso.py +0 -0
  272. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitstamp.py +0 -0
  273. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitteam.py +0 -0
  274. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bitvavo.py +0 -0
  275. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/bl3p.py +0 -0
  276. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/blockchaincom.py +0 -0
  277. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/blofin.py +0 -0
  278. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/btcalpha.py +0 -0
  279. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/btcbox.py +0 -0
  280. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/btcmarkets.py +0 -0
  281. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/btcturk.py +0 -0
  282. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/cex.py +0 -0
  283. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinbase.py +0 -0
  284. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinbaseinternational.py +0 -0
  285. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinbasepro.py +0 -0
  286. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coincheck.py +0 -0
  287. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinex.py +0 -0
  288. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinlist.py +0 -0
  289. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinmate.py +0 -0
  290. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinmetro.py +0 -0
  291. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinone.py +0 -0
  292. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinsph.py +0 -0
  293. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/coinspot.py +0 -0
  294. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/cryptocom.py +0 -0
  295. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/currencycom.py +0 -0
  296. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/delta.py +0 -0
  297. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/deribit.py +0 -0
  298. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/digifinex.py +0 -0
  299. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/exmo.py +0 -0
  300. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/fmfwio.py +0 -0
  301. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/gate.py +0 -0
  302. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/gateio.py +0 -0
  303. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/gemini.py +0 -0
  304. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/hitbtc.py +0 -0
  305. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/hitbtc3.py +0 -0
  306. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/hollaex.py +0 -0
  307. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/huobi.py +0 -0
  308. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/huobijp.py +0 -0
  309. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/hyperliquid.py +0 -0
  310. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/idex.py +0 -0
  311. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/independentreserve.py +0 -0
  312. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/indodax.py +0 -0
  313. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/kraken.py +0 -0
  314. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/krakenfutures.py +0 -0
  315. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/kucoin.py +0 -0
  316. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/kucoinfutures.py +0 -0
  317. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/kuna.py +0 -0
  318. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/latoken.py +0 -0
  319. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/lbank.py +0 -0
  320. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/luno.py +0 -0
  321. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/lykke.py +0 -0
  322. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/mercado.py +0 -0
  323. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/mexc.py +0 -0
  324. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/ndax.py +0 -0
  325. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/novadax.py +0 -0
  326. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/oceanex.py +0 -0
  327. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/okcoin.py +0 -0
  328. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/onetrading.py +0 -0
  329. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/p2b.py +0 -0
  330. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/paymium.py +0 -0
  331. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/phemex.py +0 -0
  332. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/poloniex.py +0 -0
  333. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/poloniexfutures.py +0 -0
  334. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/alpaca.py +0 -0
  335. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/ascendex.py +0 -0
  336. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bequant.py +0 -0
  337. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/binance.py +0 -0
  338. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/binancecoinm.py +0 -0
  339. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/binanceus.py +0 -0
  340. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/binanceusdm.py +0 -0
  341. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bingx.py +0 -0
  342. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitcoincom.py +0 -0
  343. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitfinex.py +0 -0
  344. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bithumb.py +0 -0
  345. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitmart.py +0 -0
  346. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitmex.py +0 -0
  347. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitopro.py +0 -0
  348. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitpanda.py +0 -0
  349. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitrue.py +0 -0
  350. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/bitstamp.py +0 -0
  351. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/blockchaincom.py +0 -0
  352. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/cex.py +0 -0
  353. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/coinbase.py +0 -0
  354. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/coinbaseinternational.py +0 -0
  355. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/coinbasepro.py +0 -0
  356. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/coincheck.py +0 -0
  357. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/coinex.py +0 -0
  358. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/coinone.py +0 -0
  359. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/cryptocom.py +0 -0
  360. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/currencycom.py +0 -0
  361. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/deribit.py +0 -0
  362. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/exmo.py +0 -0
  363. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/gate.py +0 -0
  364. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/gateio.py +0 -0
  365. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/gemini.py +0 -0
  366. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/hitbtc.py +0 -0
  367. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/hollaex.py +0 -0
  368. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/huobi.py +0 -0
  369. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/huobijp.py +0 -0
  370. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/hyperliquid.py +0 -0
  371. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/idex.py +0 -0
  372. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/krakenfutures.py +0 -0
  373. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/kucoin.py +0 -0
  374. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/kucoinfutures.py +0 -0
  375. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/lbank.py +0 -0
  376. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/luno.py +0 -0
  377. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/mexc.py +0 -0
  378. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/ndax.py +0 -0
  379. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/okcoin.py +0 -0
  380. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/onetrading.py +0 -0
  381. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/p2b.py +0 -0
  382. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/phemex.py +0 -0
  383. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/poloniex.py +0 -0
  384. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/poloniexfutures.py +0 -0
  385. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/probit.py +0 -0
  386. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/upbit.py +0 -0
  387. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/wazirx.py +0 -0
  388. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/whitebit.py +0 -0
  389. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/pro/woo.py +0 -0
  390. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/probit.py +0 -0
  391. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/__init__.py +0 -0
  392. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/__init__.py +0 -0
  393. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/_version.py +0 -0
  394. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/curves.py +0 -0
  395. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/der.py +0 -0
  396. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/ecdsa.py +0 -0
  397. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/ellipticcurve.py +0 -0
  398. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/keys.py +0 -0
  399. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/numbertheory.py +0 -0
  400. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/rfc6979.py +0 -0
  401. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ecdsa/util.py +0 -0
  402. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/__init__.py +0 -0
  403. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/__init__.py +0 -0
  404. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/abi.py +0 -0
  405. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/base.py +0 -0
  406. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/codec.py +0 -0
  407. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/constants.py +0 -0
  408. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/decoding.py +0 -0
  409. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/encoding.py +0 -0
  410. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/exceptions.py +0 -0
  411. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/grammar.py +0 -0
  412. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/packed.py +0 -0
  413. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  414. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/registry.py +0 -0
  415. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/tools/__init__.py +0 -0
  416. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +0 -0
  417. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  418. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/utils/numeric.py +0 -0
  419. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/utils/padding.py +0 -0
  420. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/abi/utils/string.py +0 -0
  421. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/account/__init__.py +0 -0
  422. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +0 -0
  423. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +0 -0
  424. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +0 -0
  425. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/account/messages.py +0 -0
  426. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  427. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/hexbytes/__init__.py +0 -0
  428. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/hexbytes/_utils.py +0 -0
  429. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/hexbytes/main.py +0 -0
  430. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  431. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/__init__.py +0 -0
  432. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/abi.py +0 -0
  433. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/bls.py +0 -0
  434. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/discovery.py +0 -0
  435. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/encoding.py +0 -0
  436. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/enums.py +0 -0
  437. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/ethpm.py +0 -0
  438. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/evm.py +0 -0
  439. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/networks.py +0 -0
  440. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  441. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/__init__.py +0 -0
  442. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/abi.py +0 -0
  443. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/address.py +0 -0
  444. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/applicators.py +0 -0
  445. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/conversions.py +0 -0
  446. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/currency.py +0 -0
  447. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/curried/__init__.py +0 -0
  448. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/debug.py +0 -0
  449. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/decorators.py +0 -0
  450. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/encoding.py +0 -0
  451. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/exceptions.py +0 -0
  452. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/functional.py +0 -0
  453. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/hexadecimal.py +0 -0
  454. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/humanize.py +0 -0
  455. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/logging.py +0 -0
  456. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/module_loading.py +0 -0
  457. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/numeric.py +0 -0
  458. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  459. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/toolz.py +0 -0
  460. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/types.py +0 -0
  461. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/typing/__init__.py +0 -0
  462. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/typing/misc.py +0 -0
  463. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/ethereum/utils/units.py +0 -0
  464. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/keccak/__init__.py +0 -0
  465. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/keccak/keccak.py +0 -0
  466. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/msgpack/__init__.py +0 -0
  467. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/msgpack/exceptions.py +0 -0
  468. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/msgpack/ext.py +0 -0
  469. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/msgpack/fallback.py +0 -0
  470. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/parsimonious/__init__.py +0 -0
  471. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/parsimonious/exceptions.py +0 -0
  472. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/parsimonious/expressions.py +0 -0
  473. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/parsimonious/grammar.py +0 -0
  474. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/parsimonious/nodes.py +0 -0
  475. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/parsimonious/utils.py +0 -0
  476. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/__init__.py +0 -0
  477. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/_signatures.py +0 -0
  478. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/_version.py +0 -0
  479. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/compatibility.py +0 -0
  480. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/curried/__init__.py +0 -0
  481. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/curried/exceptions.py +0 -0
  482. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/curried/operator.py +0 -0
  483. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/dicttoolz.py +0 -0
  484. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/functoolz.py +0 -0
  485. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/itertoolz.py +0 -0
  486. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/recipes.py +0 -0
  487. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/static_dependencies/toolz/utils.py +0 -0
  488. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/__init__.py +0 -0
  489. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/__init__.py +0 -0
  490. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_account.py +0 -0
  491. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_balance.py +0 -0
  492. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_borrow_interest.py +0 -0
  493. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_borrow_rate.py +0 -0
  494. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_calculate_fee.py +0 -0
  495. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_crypto.py +0 -0
  496. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_currency.py +0 -0
  497. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_datetime.py +0 -0
  498. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_decimal_to_precision.py +0 -0
  499. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_deep_extend.py +0 -0
  500. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_deposit_withdrawal.py +0 -0
  501. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_exchange_datetime_functions.py +0 -0
  502. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_funding_rate_history.py +0 -0
  503. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_last_price.py +0 -0
  504. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_ledger_entry.py +0 -0
  505. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_ledger_item.py +0 -0
  506. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_leverage_tier.py +0 -0
  507. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_margin_mode.py +0 -0
  508. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_margin_modification.py +0 -0
  509. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_market.py +0 -0
  510. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_number.py +0 -0
  511. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_ohlcv.py +0 -0
  512. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_open_interest.py +0 -0
  513. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_order.py +0 -0
  514. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_order_book.py +0 -0
  515. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_position.py +0 -0
  516. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_shared_methods.py +0 -0
  517. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_status.py +0 -0
  518. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_throttle.py +0 -0
  519. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_ticker.py +0 -0
  520. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_trade.py +0 -0
  521. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_trading_fee.py +0 -0
  522. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/base/test_transaction.py +0 -0
  523. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/test_async.py +0 -0
  524. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/test/test_sync.py +0 -0
  525. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/timex.py +0 -0
  526. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/tokocrypto.py +0 -0
  527. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/tradeogre.py +0 -0
  528. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/upbit.py +0 -0
  529. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/wavesexchange.py +0 -0
  530. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/wazirx.py +0 -0
  531. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/whitebit.py +0 -0
  532. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/woo.py +0 -0
  533. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/yobit.py +0 -0
  534. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/zaif.py +0 -0
  535. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt/zonda.py +0 -0
  536. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt.egg-info/SOURCES.txt +0 -0
  537. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt.egg-info/dependency_links.txt +0 -0
  538. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt.egg-info/requires.txt +0 -0
  539. {ccxt-4.3.16 → ccxt-4.3.18}/ccxt.egg-info/top_level.txt +0 -0
  540. {ccxt-4.3.16 → ccxt-4.3.18}/setup.cfg +0 -0
  541. {ccxt-4.3.16 → ccxt-4.3.18}/setup.py +0 -0
@@ -1,6 +1,6 @@
1
1
  Metadata-Version: 2.1
2
2
  Name: ccxt
3
- Version: 4.3.16
3
+ Version: 4.3.18
4
4
  Summary: A JavaScript / TypeScript / Python / C# / PHP cryptocurrency trading library with support for 100+ exchanges
5
5
  Home-page: https://ccxt.com
6
6
  Author: Igor Kroitor
@@ -226,13 +226,13 @@ Description: # CCXT – CryptoCurrency eXchange Trading Library
226
226
 
227
227
  All-in-one browser bundle (dependencies included), served from a CDN of your choice:
228
228
 
229
- * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.16/dist/ccxt.browser.js
230
- * unpkg: https://unpkg.com/ccxt@4.3.16/dist/ccxt.browser.js
229
+ * jsDelivr: https://cdn.jsdelivr.net/npm/ccxt@4.3.18/dist/ccxt.browser.js
230
+ * unpkg: https://unpkg.com/ccxt@4.3.18/dist/ccxt.browser.js
231
231
 
232
232
  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.
233
233
 
234
234
  ```HTML
235
- <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.16/dist/ccxt.browser.js"></script>
235
+ <script type="text/javascript" src="https://cdn.jsdelivr.net/npm/ccxt@4.3.18/dist/ccxt.browser.js"></script>
236
236
  ```
237
237
 
238
238
  Creates a global `ccxt` object:
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.16'
25
+ __version__ = '4.3.18'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.16'
7
+ __version__ = '4.3.18'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.16'
5
+ __version__ = '4.3.18'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -2612,7 +2612,7 @@ class binance(Exchange, ImplicitAPI):
2612
2612
  :param dict [params]: extra parameters specific to the exchange API endpoint
2613
2613
  :returns dict: an associative dictionary of currencies
2614
2614
  """
2615
- fetchCurrenciesEnabled = self.safe_value(self.options, 'fetchCurrencies')
2615
+ fetchCurrenciesEnabled = self.safe_bool(self.options, 'fetchCurrencies')
2616
2616
  if not fetchCurrenciesEnabled:
2617
2617
  return None
2618
2618
  # self endpoint requires authentication
@@ -4399,7 +4399,7 @@ class binance(Exchange, ImplicitAPI):
4399
4399
  market = self.safe_market(marketId, market, None, marketType)
4400
4400
  symbol = market['symbol']
4401
4401
  side = None
4402
- buyerMaker = self.safe_value_2(trade, 'm', 'isBuyerMaker')
4402
+ buyerMaker = self.safe_bool_2(trade, 'm', 'isBuyerMaker')
4403
4403
  takerOrMaker = None
4404
4404
  if buyerMaker is not None:
4405
4405
  side = 'sell' if buyerMaker else 'buy' # self is reversed intentionally
@@ -4675,14 +4675,14 @@ class binance(Exchange, ImplicitAPI):
4675
4675
  uppercaseType = 'STOP_LOSS'
4676
4676
  elif uppercaseType == 'LIMIT':
4677
4677
  uppercaseType = 'STOP_LOSS_LIMIT'
4678
- validOrderTypes = self.safe_value(market['info'], 'orderTypes')
4678
+ validOrderTypes = self.safe_list(market['info'], 'orderTypes')
4679
4679
  if not self.in_array(uppercaseType, validOrderTypes):
4680
4680
  if initialUppercaseType != uppercaseType:
4681
4681
  raise InvalidOrder(self.id + ' stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
4682
4682
  else:
4683
4683
  raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
4684
4684
  if clientOrderId is None:
4685
- broker = self.safe_value(self.options, 'broker')
4685
+ broker = self.safe_dict(self.options, 'broker')
4686
4686
  if broker is not None:
4687
4687
  brokerId = self.safe_string(broker, 'spot')
4688
4688
  if brokerId is not None:
@@ -5516,6 +5516,7 @@ class binance(Exchange, ImplicitAPI):
5516
5516
  :param float [params.stopLossPrice]: the price that a stop loss order is triggered at
5517
5517
  :param float [params.takeProfitPrice]: the price that a take profit order is triggered at
5518
5518
  :param boolean [params.portfolioMargin]: set to True if you would like to create an order in a portfolio margin account
5519
+ :param str [params.stopLossOrTakeProfit]: 'stopLoss' or 'takeProfit', required for spot trailing orders
5519
5520
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
5520
5521
  """
5521
5522
  await self.load_markets()
@@ -5614,8 +5615,8 @@ class binance(Exchange, ImplicitAPI):
5614
5615
  stopLossPrice = self.safe_string(params, 'stopLossPrice', triggerPrice) # fallback to stopLoss
5615
5616
  takeProfitPrice = self.safe_string(params, 'takeProfitPrice')
5616
5617
  trailingDelta = self.safe_string(params, 'trailingDelta')
5617
- trailingTriggerPrice = self.safe_string_2(params, 'trailingTriggerPrice', 'activationPrice', self.number_to_string(price))
5618
- trailingPercent = self.safe_string_2(params, 'trailingPercent', 'callbackRate')
5618
+ trailingTriggerPrice = self.safe_string_2(params, 'trailingTriggerPrice', 'activationPrice')
5619
+ trailingPercent = self.safe_string_n(params, ['trailingPercent', 'callbackRate', 'trailingDelta'])
5619
5620
  priceMatch = self.safe_string(params, 'priceMatch')
5620
5621
  isTrailingPercentOrder = trailingPercent is not None
5621
5622
  isStopLoss = stopLossPrice is not None or trailingDelta is not None
@@ -5627,10 +5628,26 @@ class binance(Exchange, ImplicitAPI):
5627
5628
  uppercaseType = type.upper()
5628
5629
  stopPrice = None
5629
5630
  if isTrailingPercentOrder:
5630
- uppercaseType = 'TRAILING_STOP_MARKET'
5631
- request['callbackRate'] = trailingPercent
5632
- if trailingTriggerPrice is not None:
5633
- request['activationPrice'] = self.price_to_precision(symbol, trailingTriggerPrice)
5631
+ if market['swap']:
5632
+ uppercaseType = 'TRAILING_STOP_MARKET'
5633
+ request['callbackRate'] = trailingPercent
5634
+ if trailingTriggerPrice is not None:
5635
+ request['activationPrice'] = self.price_to_precision(symbol, trailingTriggerPrice)
5636
+ else:
5637
+ if isMarketOrder:
5638
+ raise InvalidOrder(self.id + ' trailingPercent orders are not supported for ' + symbol + ' ' + type + ' orders')
5639
+ stopLossOrTakeProfit = self.safe_string(params, 'stopLossOrTakeProfit')
5640
+ params = self.omit(params, 'stopLossOrTakeProfit')
5641
+ if stopLossOrTakeProfit != 'stopLoss' and stopLossOrTakeProfit != 'takeProfit':
5642
+ raise InvalidOrder(self.id + symbol + ' trailingPercent orders require a stopLossOrTakeProfit parameter of either stopLoss or takeProfit')
5643
+ if stopLossOrTakeProfit == 'stopLoss':
5644
+ uppercaseType = 'STOP_LOSS_LIMIT'
5645
+ elif stopLossOrTakeProfit == 'takeProfit':
5646
+ uppercaseType = 'TAKE_PROFIT_LIMIT'
5647
+ if trailingTriggerPrice is not None:
5648
+ stopPrice = self.price_to_precision(symbol, trailingTriggerPrice)
5649
+ trailingPercentConverted = Precise.string_mul(trailingPercent, '100')
5650
+ request['trailingDelta'] = trailingPercentConverted
5634
5651
  elif isStopLoss:
5635
5652
  stopPrice = stopLossPrice
5636
5653
  if isMarketOrder:
@@ -5770,8 +5787,8 @@ class binance(Exchange, ImplicitAPI):
5770
5787
  raise InvalidOrder(self.id + ' createOrder() requires a stopPrice extra param for a ' + type + ' order')
5771
5788
  else:
5772
5789
  # check for delta price
5773
- if trailingDelta is None and stopPrice is None:
5774
- raise InvalidOrder(self.id + ' createOrder() requires a stopPrice or trailingDelta param for a ' + type + ' order')
5790
+ if trailingDelta is None and stopPrice is None and trailingPercent is None:
5791
+ raise InvalidOrder(self.id + ' createOrder() requires a stopPrice, trailingDelta or trailingPercent param for a ' + type + ' order')
5775
5792
  if stopPrice is not None:
5776
5793
  request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
5777
5794
  if timeInForceIsRequired and (self.safe_string(params, 'timeInForce') is None):
@@ -7150,7 +7167,7 @@ class binance(Exchange, ImplicitAPI):
7150
7167
  if until is not None:
7151
7168
  request['endTime'] = until
7152
7169
  raw = await self.sapiGetFiatOrders(self.extend(request, params))
7153
- response = self.safe_value(raw, 'data')
7170
+ response = self.safe_list(raw, 'data', [])
7154
7171
  # {
7155
7172
  # "code": "000000",
7156
7173
  # "message": "success",
@@ -7252,7 +7269,7 @@ class binance(Exchange, ImplicitAPI):
7252
7269
  if since is not None:
7253
7270
  request['beginTime'] = since
7254
7271
  raw = await self.sapiGetFiatOrders(self.extend(request, params))
7255
- response = self.safe_value(raw, 'data')
7272
+ response = self.safe_list(raw, 'data', [])
7256
7273
  # {
7257
7274
  # "code": "000000",
7258
7275
  # "message": "success",
@@ -7459,7 +7476,7 @@ class binance(Exchange, ImplicitAPI):
7459
7476
  txType = self.safe_string(transaction, 'transactionType')
7460
7477
  if txType is not None:
7461
7478
  type = 'deposit' if (txType == '0') else 'withdrawal'
7462
- legalMoneyCurrenciesById = self.safe_value(self.options, 'legalMoneyCurrenciesById')
7479
+ legalMoneyCurrenciesById = self.safe_dict(self.options, 'legalMoneyCurrenciesById')
7463
7480
  code = self.safe_string(legalMoneyCurrenciesById, code, code)
7464
7481
  status = self.parse_transaction_status_by_type(self.safe_string(transaction, 'status'), type)
7465
7482
  amount = self.safe_number(transaction, 'amount')
@@ -7773,7 +7790,7 @@ class binance(Exchange, ImplicitAPI):
7773
7790
  if subLevel is not None:
7774
7791
  topLevel = topLevel + '/' + subLevel
7775
7792
  impliedNetwork = self.safe_string(reverseNetworks, topLevel)
7776
- impliedNetworks = self.safe_value(self.options, 'impliedNetworks', {
7793
+ impliedNetworks = self.safe_dict(self.options, 'impliedNetworks', {
7777
7794
  'ETH': {'ERC20': 'ETH'},
7778
7795
  'TRX': {'TRC20': 'TRX'},
7779
7796
  })
@@ -8981,7 +8998,7 @@ class binance(Exchange, ImplicitAPI):
8981
8998
  await self.load_markets()
8982
8999
  # by default cache the leverage bracket
8983
9000
  # it contains useful stuff like the maintenance margin and initial margin for positions
8984
- leverageBrackets = self.safe_value(self.options, 'leverageBrackets')
9001
+ leverageBrackets = self.safe_dict(self.options, 'leverageBrackets', {})
8985
9002
  if (leverageBrackets is None) or (reload):
8986
9003
  defaultType = self.safe_string(self.options, 'defaultType', 'future')
8987
9004
  type = self.safe_string(params, 'type', defaultType)
@@ -1470,6 +1470,7 @@ class bybit(Exchange, ImplicitAPI):
1470
1470
  # "quoteCoin": "USDT",
1471
1471
  # "innovation": "0",
1472
1472
  # "status": "Trading",
1473
+ # "marginTrading": "both",
1473
1474
  # "lotSizeFilter": {
1474
1475
  # "basePrecision": "0.000001",
1475
1476
  # "quotePrecision": "0.00000001",
@@ -1506,7 +1507,9 @@ class bybit(Exchange, ImplicitAPI):
1506
1507
  lotSizeFilter = self.safe_dict(market, 'lotSizeFilter')
1507
1508
  priceFilter = self.safe_dict(market, 'priceFilter')
1508
1509
  quotePrecision = self.safe_number(lotSizeFilter, 'quotePrecision')
1509
- result.append({
1510
+ marginTrading = self.safe_string(market, 'marginTrading', 'none')
1511
+ allowsMargin = marginTrading != 'none'
1512
+ result.append(self.safe_market_structure({
1510
1513
  'id': id,
1511
1514
  'symbol': symbol,
1512
1515
  'base': base,
@@ -1517,7 +1520,7 @@ class bybit(Exchange, ImplicitAPI):
1517
1520
  'settleId': None,
1518
1521
  'type': 'spot',
1519
1522
  'spot': True,
1520
- 'margin': None,
1523
+ 'margin': allowsMargin,
1521
1524
  'swap': False,
1522
1525
  'future': False,
1523
1526
  'option': False,
@@ -1556,7 +1559,7 @@ class bybit(Exchange, ImplicitAPI):
1556
1559
  },
1557
1560
  'created': None,
1558
1561
  'info': market,
1559
- })
1562
+ }))
1560
1563
  return result
1561
1564
 
1562
1565
  async def fetch_future_markets(self, params):
@@ -1669,7 +1672,7 @@ class bybit(Exchange, ImplicitAPI):
1669
1672
  if expiry is not None:
1670
1673
  symbol = symbol + '-' + self.yymmdd(expiry)
1671
1674
  contractSize = self.safe_number_2(lotSizeFilter, 'minTradingQty', 'minOrderQty') if inverse else self.parse_number('1')
1672
- result.append({
1675
+ result.append(self.safe_market_structure({
1673
1676
  'id': id,
1674
1677
  'symbol': symbol,
1675
1678
  'base': base,
@@ -1719,7 +1722,7 @@ class bybit(Exchange, ImplicitAPI):
1719
1722
  },
1720
1723
  'created': self.safe_integer(market, 'launchTime'),
1721
1724
  'info': market,
1722
- })
1725
+ }))
1723
1726
  return result
1724
1727
 
1725
1728
  async def fetch_option_markets(self, params):
@@ -1797,7 +1800,7 @@ class bybit(Exchange, ImplicitAPI):
1797
1800
  optionLetter = self.safe_string(splitId, 3)
1798
1801
  isActive = (status == 'Trading')
1799
1802
  if isActive or (self.options['loadAllOptions']) or (self.options['loadExpiredOptions']):
1800
- result.append({
1803
+ result.append(self.safe_market_structure({
1801
1804
  'id': id,
1802
1805
  'symbol': base + '/' + quote + ':' + settle + '-' + self.yymmdd(expiry) + '-' + strike + '-' + optionLetter,
1803
1806
  'base': base,
@@ -1847,7 +1850,7 @@ class bybit(Exchange, ImplicitAPI):
1847
1850
  },
1848
1851
  'created': self.safe_integer(market, 'launchTime'),
1849
1852
  'info': market,
1850
- })
1853
+ }))
1851
1854
  return result
1852
1855
 
1853
1856
  def parse_ticker(self, ticker, market: Market = None) -> Ticker:
@@ -3124,7 +3124,7 @@ class htx(Exchange, ImplicitAPI):
3124
3124
  }
3125
3125
  return result
3126
3126
 
3127
- def network_id_to_code(self, networkId, currencyCode=None):
3127
+ def network_id_to_code(self, networkId: Str = None, currencyCode: Str = None):
3128
3128
  # here network-id is provided pair of currency & chain(i.e. trc20usdt)
3129
3129
  keys = list(self.options['networkNamesByChainIds'].keys())
3130
3130
  keysLength = len(keys)
@@ -3133,7 +3133,7 @@ class htx(Exchange, ImplicitAPI):
3133
3133
  networkTitle = self.safe_value(self.options['networkNamesByChainIds'], networkId, networkId)
3134
3134
  return super(htx, self).network_id_to_code(networkTitle)
3135
3135
 
3136
- def network_code_to_id(self, networkCode, currencyCode=None):
3136
+ def network_code_to_id(self, networkCode: str, currencyCode: Str = None):
3137
3137
  if currencyCode is None:
3138
3138
  raise ArgumentsRequired(self.id + ' networkCodeToId() requires a currencyCode argument')
3139
3139
  keys = list(self.options['networkChainIdsByNames'].keys())
@@ -26,6 +26,7 @@ from ccxt.base.errors import CancelPending
26
26
  from ccxt.base.errors import ContractUnavailable
27
27
  from ccxt.base.errors import NotSupported
28
28
  from ccxt.base.errors import NetworkError
29
+ from ccxt.base.errors import DDoSProtection
29
30
  from ccxt.base.errors import RateLimitExceeded
30
31
  from ccxt.base.errors import ExchangeNotAvailable
31
32
  from ccxt.base.errors import OnMaintenance
@@ -913,7 +914,24 @@ class okx(Exchange, ImplicitAPI):
913
914
  '60017': BadRequest, # Invalid url path
914
915
  '60018': BadRequest, # The {0} {1} {2} {3} {4} does not exist
915
916
  '60019': BadRequest, # Invalid op {op}
917
+ '60020': ExchangeError, # APIKey subscription amount exceeds the limit
918
+ '60021': AccountNotEnabled, # This operation does not support multiple accounts login
919
+ '60022': AuthenticationError, # Bulk login partially succeeded
920
+ '60023': DDoSProtection, # Bulk login requests too frequent
921
+ '60024': AuthenticationError, # Wrong passphrase
922
+ '60025': ExchangeError, # Token subscription amount exceeds the limit
923
+ '60026': AuthenticationError, # Batch login by APIKey and token simultaneously is not supported
924
+ '60027': ArgumentsRequired, # Parameter {0} can not be empty
925
+ '60028': NotSupported, # The current operation is not supported by self URL
926
+ '60029': AccountNotEnabled, # Only users who are VIP5 and above in trading fee tier are allowed to subscribe to books-l2-tbt channel
927
+ '60030': AccountNotEnabled, # Only users who are VIP4 and above in trading fee tier are allowed to subscribe to books50-l2-tbt channel
928
+ '60031': AuthenticationError, # The WebSocket endpoint does not support multiple account batch login,
929
+ '60032': AuthenticationError, # API key doesn't exist,
916
930
  '63999': ExchangeError, # Internal system error
931
+ '64000': BadRequest, # Subscription parameter uly is unavailable anymore, please replace uly with instFamily. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
932
+ '64001': BadRequest, # This channel has been migrated to the business URL. Please subscribe using the new URL. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
933
+ '64002': BadRequest, # This channel is not supported by business URL. Please use "/private" URL(for private channels), or "/public" URL(for public channels). More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
934
+ '64003': AccountNotEnabled, # Your trading fee tier doesnt meet the requirement to access self channel
917
935
  '70010': BadRequest, # Timestamp parameters need to be in Unix timestamp format in milliseconds.
918
936
  '70013': BadRequest, # endTs needs to be bigger than or equal to beginTs.
919
937
  '70016': BadRequest, # Please specify your instrument settings for at least one instType.
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.16'
7
+ __version__ = '4.3.18'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -3362,7 +3362,7 @@ class Exchange(object):
3362
3362
  networkId = networkCode
3363
3363
  return networkId
3364
3364
 
3365
- def network_id_to_code(self, networkId: str, currencyCode: Str = None):
3365
+ def network_id_to_code(self, networkId: Str = None, currencyCode: Str = None):
3366
3366
  """
3367
3367
  * @ignore
3368
3368
  tries to convert the provided exchange-specific networkId to an unified network Code. In order to achieve self, derived class needs to have "options['networksById']" defined.
@@ -2611,7 +2611,7 @@ class binance(Exchange, ImplicitAPI):
2611
2611
  :param dict [params]: extra parameters specific to the exchange API endpoint
2612
2612
  :returns dict: an associative dictionary of currencies
2613
2613
  """
2614
- fetchCurrenciesEnabled = self.safe_value(self.options, 'fetchCurrencies')
2614
+ fetchCurrenciesEnabled = self.safe_bool(self.options, 'fetchCurrencies')
2615
2615
  if not fetchCurrenciesEnabled:
2616
2616
  return None
2617
2617
  # self endpoint requires authentication
@@ -4398,7 +4398,7 @@ class binance(Exchange, ImplicitAPI):
4398
4398
  market = self.safe_market(marketId, market, None, marketType)
4399
4399
  symbol = market['symbol']
4400
4400
  side = None
4401
- buyerMaker = self.safe_value_2(trade, 'm', 'isBuyerMaker')
4401
+ buyerMaker = self.safe_bool_2(trade, 'm', 'isBuyerMaker')
4402
4402
  takerOrMaker = None
4403
4403
  if buyerMaker is not None:
4404
4404
  side = 'sell' if buyerMaker else 'buy' # self is reversed intentionally
@@ -4674,14 +4674,14 @@ class binance(Exchange, ImplicitAPI):
4674
4674
  uppercaseType = 'STOP_LOSS'
4675
4675
  elif uppercaseType == 'LIMIT':
4676
4676
  uppercaseType = 'STOP_LOSS_LIMIT'
4677
- validOrderTypes = self.safe_value(market['info'], 'orderTypes')
4677
+ validOrderTypes = self.safe_list(market['info'], 'orderTypes')
4678
4678
  if not self.in_array(uppercaseType, validOrderTypes):
4679
4679
  if initialUppercaseType != uppercaseType:
4680
4680
  raise InvalidOrder(self.id + ' stopPrice parameter is not allowed for ' + symbol + ' ' + type + ' orders')
4681
4681
  else:
4682
4682
  raise InvalidOrder(self.id + ' ' + type + ' is not a valid order type for the ' + symbol + ' market')
4683
4683
  if clientOrderId is None:
4684
- broker = self.safe_value(self.options, 'broker')
4684
+ broker = self.safe_dict(self.options, 'broker')
4685
4685
  if broker is not None:
4686
4686
  brokerId = self.safe_string(broker, 'spot')
4687
4687
  if brokerId is not None:
@@ -5515,6 +5515,7 @@ class binance(Exchange, ImplicitAPI):
5515
5515
  :param float [params.stopLossPrice]: the price that a stop loss order is triggered at
5516
5516
  :param float [params.takeProfitPrice]: the price that a take profit order is triggered at
5517
5517
  :param boolean [params.portfolioMargin]: set to True if you would like to create an order in a portfolio margin account
5518
+ :param str [params.stopLossOrTakeProfit]: 'stopLoss' or 'takeProfit', required for spot trailing orders
5518
5519
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
5519
5520
  """
5520
5521
  self.load_markets()
@@ -5613,8 +5614,8 @@ class binance(Exchange, ImplicitAPI):
5613
5614
  stopLossPrice = self.safe_string(params, 'stopLossPrice', triggerPrice) # fallback to stopLoss
5614
5615
  takeProfitPrice = self.safe_string(params, 'takeProfitPrice')
5615
5616
  trailingDelta = self.safe_string(params, 'trailingDelta')
5616
- trailingTriggerPrice = self.safe_string_2(params, 'trailingTriggerPrice', 'activationPrice', self.number_to_string(price))
5617
- trailingPercent = self.safe_string_2(params, 'trailingPercent', 'callbackRate')
5617
+ trailingTriggerPrice = self.safe_string_2(params, 'trailingTriggerPrice', 'activationPrice')
5618
+ trailingPercent = self.safe_string_n(params, ['trailingPercent', 'callbackRate', 'trailingDelta'])
5618
5619
  priceMatch = self.safe_string(params, 'priceMatch')
5619
5620
  isTrailingPercentOrder = trailingPercent is not None
5620
5621
  isStopLoss = stopLossPrice is not None or trailingDelta is not None
@@ -5626,10 +5627,26 @@ class binance(Exchange, ImplicitAPI):
5626
5627
  uppercaseType = type.upper()
5627
5628
  stopPrice = None
5628
5629
  if isTrailingPercentOrder:
5629
- uppercaseType = 'TRAILING_STOP_MARKET'
5630
- request['callbackRate'] = trailingPercent
5631
- if trailingTriggerPrice is not None:
5632
- request['activationPrice'] = self.price_to_precision(symbol, trailingTriggerPrice)
5630
+ if market['swap']:
5631
+ uppercaseType = 'TRAILING_STOP_MARKET'
5632
+ request['callbackRate'] = trailingPercent
5633
+ if trailingTriggerPrice is not None:
5634
+ request['activationPrice'] = self.price_to_precision(symbol, trailingTriggerPrice)
5635
+ else:
5636
+ if isMarketOrder:
5637
+ raise InvalidOrder(self.id + ' trailingPercent orders are not supported for ' + symbol + ' ' + type + ' orders')
5638
+ stopLossOrTakeProfit = self.safe_string(params, 'stopLossOrTakeProfit')
5639
+ params = self.omit(params, 'stopLossOrTakeProfit')
5640
+ if stopLossOrTakeProfit != 'stopLoss' and stopLossOrTakeProfit != 'takeProfit':
5641
+ raise InvalidOrder(self.id + symbol + ' trailingPercent orders require a stopLossOrTakeProfit parameter of either stopLoss or takeProfit')
5642
+ if stopLossOrTakeProfit == 'stopLoss':
5643
+ uppercaseType = 'STOP_LOSS_LIMIT'
5644
+ elif stopLossOrTakeProfit == 'takeProfit':
5645
+ uppercaseType = 'TAKE_PROFIT_LIMIT'
5646
+ if trailingTriggerPrice is not None:
5647
+ stopPrice = self.price_to_precision(symbol, trailingTriggerPrice)
5648
+ trailingPercentConverted = Precise.string_mul(trailingPercent, '100')
5649
+ request['trailingDelta'] = trailingPercentConverted
5633
5650
  elif isStopLoss:
5634
5651
  stopPrice = stopLossPrice
5635
5652
  if isMarketOrder:
@@ -5769,8 +5786,8 @@ class binance(Exchange, ImplicitAPI):
5769
5786
  raise InvalidOrder(self.id + ' createOrder() requires a stopPrice extra param for a ' + type + ' order')
5770
5787
  else:
5771
5788
  # check for delta price
5772
- if trailingDelta is None and stopPrice is None:
5773
- raise InvalidOrder(self.id + ' createOrder() requires a stopPrice or trailingDelta param for a ' + type + ' order')
5789
+ if trailingDelta is None and stopPrice is None and trailingPercent is None:
5790
+ raise InvalidOrder(self.id + ' createOrder() requires a stopPrice, trailingDelta or trailingPercent param for a ' + type + ' order')
5774
5791
  if stopPrice is not None:
5775
5792
  request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
5776
5793
  if timeInForceIsRequired and (self.safe_string(params, 'timeInForce') is None):
@@ -7149,7 +7166,7 @@ class binance(Exchange, ImplicitAPI):
7149
7166
  if until is not None:
7150
7167
  request['endTime'] = until
7151
7168
  raw = self.sapiGetFiatOrders(self.extend(request, params))
7152
- response = self.safe_value(raw, 'data')
7169
+ response = self.safe_list(raw, 'data', [])
7153
7170
  # {
7154
7171
  # "code": "000000",
7155
7172
  # "message": "success",
@@ -7251,7 +7268,7 @@ class binance(Exchange, ImplicitAPI):
7251
7268
  if since is not None:
7252
7269
  request['beginTime'] = since
7253
7270
  raw = self.sapiGetFiatOrders(self.extend(request, params))
7254
- response = self.safe_value(raw, 'data')
7271
+ response = self.safe_list(raw, 'data', [])
7255
7272
  # {
7256
7273
  # "code": "000000",
7257
7274
  # "message": "success",
@@ -7458,7 +7475,7 @@ class binance(Exchange, ImplicitAPI):
7458
7475
  txType = self.safe_string(transaction, 'transactionType')
7459
7476
  if txType is not None:
7460
7477
  type = 'deposit' if (txType == '0') else 'withdrawal'
7461
- legalMoneyCurrenciesById = self.safe_value(self.options, 'legalMoneyCurrenciesById')
7478
+ legalMoneyCurrenciesById = self.safe_dict(self.options, 'legalMoneyCurrenciesById')
7462
7479
  code = self.safe_string(legalMoneyCurrenciesById, code, code)
7463
7480
  status = self.parse_transaction_status_by_type(self.safe_string(transaction, 'status'), type)
7464
7481
  amount = self.safe_number(transaction, 'amount')
@@ -7772,7 +7789,7 @@ class binance(Exchange, ImplicitAPI):
7772
7789
  if subLevel is not None:
7773
7790
  topLevel = topLevel + '/' + subLevel
7774
7791
  impliedNetwork = self.safe_string(reverseNetworks, topLevel)
7775
- impliedNetworks = self.safe_value(self.options, 'impliedNetworks', {
7792
+ impliedNetworks = self.safe_dict(self.options, 'impliedNetworks', {
7776
7793
  'ETH': {'ERC20': 'ETH'},
7777
7794
  'TRX': {'TRC20': 'TRX'},
7778
7795
  })
@@ -8980,7 +8997,7 @@ class binance(Exchange, ImplicitAPI):
8980
8997
  self.load_markets()
8981
8998
  # by default cache the leverage bracket
8982
8999
  # it contains useful stuff like the maintenance margin and initial margin for positions
8983
- leverageBrackets = self.safe_value(self.options, 'leverageBrackets')
9000
+ leverageBrackets = self.safe_dict(self.options, 'leverageBrackets', {})
8984
9001
  if (leverageBrackets is None) or (reload):
8985
9002
  defaultType = self.safe_string(self.options, 'defaultType', 'future')
8986
9003
  type = self.safe_string(params, 'type', defaultType)
@@ -1469,6 +1469,7 @@ class bybit(Exchange, ImplicitAPI):
1469
1469
  # "quoteCoin": "USDT",
1470
1470
  # "innovation": "0",
1471
1471
  # "status": "Trading",
1472
+ # "marginTrading": "both",
1472
1473
  # "lotSizeFilter": {
1473
1474
  # "basePrecision": "0.000001",
1474
1475
  # "quotePrecision": "0.00000001",
@@ -1505,7 +1506,9 @@ class bybit(Exchange, ImplicitAPI):
1505
1506
  lotSizeFilter = self.safe_dict(market, 'lotSizeFilter')
1506
1507
  priceFilter = self.safe_dict(market, 'priceFilter')
1507
1508
  quotePrecision = self.safe_number(lotSizeFilter, 'quotePrecision')
1508
- result.append({
1509
+ marginTrading = self.safe_string(market, 'marginTrading', 'none')
1510
+ allowsMargin = marginTrading != 'none'
1511
+ result.append(self.safe_market_structure({
1509
1512
  'id': id,
1510
1513
  'symbol': symbol,
1511
1514
  'base': base,
@@ -1516,7 +1519,7 @@ class bybit(Exchange, ImplicitAPI):
1516
1519
  'settleId': None,
1517
1520
  'type': 'spot',
1518
1521
  'spot': True,
1519
- 'margin': None,
1522
+ 'margin': allowsMargin,
1520
1523
  'swap': False,
1521
1524
  'future': False,
1522
1525
  'option': False,
@@ -1555,7 +1558,7 @@ class bybit(Exchange, ImplicitAPI):
1555
1558
  },
1556
1559
  'created': None,
1557
1560
  'info': market,
1558
- })
1561
+ }))
1559
1562
  return result
1560
1563
 
1561
1564
  def fetch_future_markets(self, params):
@@ -1668,7 +1671,7 @@ class bybit(Exchange, ImplicitAPI):
1668
1671
  if expiry is not None:
1669
1672
  symbol = symbol + '-' + self.yymmdd(expiry)
1670
1673
  contractSize = self.safe_number_2(lotSizeFilter, 'minTradingQty', 'minOrderQty') if inverse else self.parse_number('1')
1671
- result.append({
1674
+ result.append(self.safe_market_structure({
1672
1675
  'id': id,
1673
1676
  'symbol': symbol,
1674
1677
  'base': base,
@@ -1718,7 +1721,7 @@ class bybit(Exchange, ImplicitAPI):
1718
1721
  },
1719
1722
  'created': self.safe_integer(market, 'launchTime'),
1720
1723
  'info': market,
1721
- })
1724
+ }))
1722
1725
  return result
1723
1726
 
1724
1727
  def fetch_option_markets(self, params):
@@ -1796,7 +1799,7 @@ class bybit(Exchange, ImplicitAPI):
1796
1799
  optionLetter = self.safe_string(splitId, 3)
1797
1800
  isActive = (status == 'Trading')
1798
1801
  if isActive or (self.options['loadAllOptions']) or (self.options['loadExpiredOptions']):
1799
- result.append({
1802
+ result.append(self.safe_market_structure({
1800
1803
  'id': id,
1801
1804
  'symbol': base + '/' + quote + ':' + settle + '-' + self.yymmdd(expiry) + '-' + strike + '-' + optionLetter,
1802
1805
  'base': base,
@@ -1846,7 +1849,7 @@ class bybit(Exchange, ImplicitAPI):
1846
1849
  },
1847
1850
  'created': self.safe_integer(market, 'launchTime'),
1848
1851
  'info': market,
1849
- })
1852
+ }))
1850
1853
  return result
1851
1854
 
1852
1855
  def parse_ticker(self, ticker, market: Market = None) -> Ticker:
@@ -3123,7 +3123,7 @@ class htx(Exchange, ImplicitAPI):
3123
3123
  }
3124
3124
  return result
3125
3125
 
3126
- def network_id_to_code(self, networkId, currencyCode=None):
3126
+ def network_id_to_code(self, networkId: Str = None, currencyCode: Str = None):
3127
3127
  # here network-id is provided pair of currency & chain(i.e. trc20usdt)
3128
3128
  keys = list(self.options['networkNamesByChainIds'].keys())
3129
3129
  keysLength = len(keys)
@@ -3132,7 +3132,7 @@ class htx(Exchange, ImplicitAPI):
3132
3132
  networkTitle = self.safe_value(self.options['networkNamesByChainIds'], networkId, networkId)
3133
3133
  return super(htx, self).network_id_to_code(networkTitle)
3134
3134
 
3135
- def network_code_to_id(self, networkCode, currencyCode=None):
3135
+ def network_code_to_id(self, networkCode: str, currencyCode: Str = None):
3136
3136
  if currencyCode is None:
3137
3137
  raise ArgumentsRequired(self.id + ' networkCodeToId() requires a currencyCode argument')
3138
3138
  keys = list(self.options['networkChainIdsByNames'].keys())
@@ -25,6 +25,7 @@ from ccxt.base.errors import CancelPending
25
25
  from ccxt.base.errors import ContractUnavailable
26
26
  from ccxt.base.errors import NotSupported
27
27
  from ccxt.base.errors import NetworkError
28
+ from ccxt.base.errors import DDoSProtection
28
29
  from ccxt.base.errors import RateLimitExceeded
29
30
  from ccxt.base.errors import ExchangeNotAvailable
30
31
  from ccxt.base.errors import OnMaintenance
@@ -912,7 +913,24 @@ class okx(Exchange, ImplicitAPI):
912
913
  '60017': BadRequest, # Invalid url path
913
914
  '60018': BadRequest, # The {0} {1} {2} {3} {4} does not exist
914
915
  '60019': BadRequest, # Invalid op {op}
916
+ '60020': ExchangeError, # APIKey subscription amount exceeds the limit
917
+ '60021': AccountNotEnabled, # This operation does not support multiple accounts login
918
+ '60022': AuthenticationError, # Bulk login partially succeeded
919
+ '60023': DDoSProtection, # Bulk login requests too frequent
920
+ '60024': AuthenticationError, # Wrong passphrase
921
+ '60025': ExchangeError, # Token subscription amount exceeds the limit
922
+ '60026': AuthenticationError, # Batch login by APIKey and token simultaneously is not supported
923
+ '60027': ArgumentsRequired, # Parameter {0} can not be empty
924
+ '60028': NotSupported, # The current operation is not supported by self URL
925
+ '60029': AccountNotEnabled, # Only users who are VIP5 and above in trading fee tier are allowed to subscribe to books-l2-tbt channel
926
+ '60030': AccountNotEnabled, # Only users who are VIP4 and above in trading fee tier are allowed to subscribe to books50-l2-tbt channel
927
+ '60031': AuthenticationError, # The WebSocket endpoint does not support multiple account batch login,
928
+ '60032': AuthenticationError, # API key doesn't exist,
915
929
  '63999': ExchangeError, # Internal system error
930
+ '64000': BadRequest, # Subscription parameter uly is unavailable anymore, please replace uly with instFamily. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
931
+ '64001': BadRequest, # This channel has been migrated to the business URL. Please subscribe using the new URL. More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
932
+ '64002': BadRequest, # This channel is not supported by business URL. Please use "/private" URL(for private channels), or "/public" URL(for public channels). More details can refer to: https://www.okx.com/help-center/changes-to-v5-api-websocket-subscription-parameter-and-url,
933
+ '64003': AccountNotEnabled, # Your trading fee tier doesnt meet the requirement to access self channel
916
934
  '70010': BadRequest, # Timestamp parameters need to be in Unix timestamp format in milliseconds.
917
935
  '70013': BadRequest, # endTs needs to be bigger than or equal to beginTs.
918
936
  '70016': BadRequest, # Please specify your instrument settings for at least one instType.
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.16'
7
+ __version__ = '4.3.18'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -642,6 +642,8 @@ class bitfinex2(ccxt.async_support.bitfinex2):
642
642
  responseChecksum = self.safe_integer(message, 2)
643
643
  if responseChecksum != localChecksum:
644
644
  error = InvalidNonce(self.id + ' invalid checksum')
645
+ del client.subscriptions[messageHash]
646
+ del self.orderbooks[symbol]
645
647
  client.reject(error, messageHash)
646
648
 
647
649
  async def watch_balance(self, params={}) -> Balances:
@@ -541,7 +541,10 @@ class bitget(ccxt.async_support.bitget):
541
541
  responseChecksum = self.safe_integer(rawOrderBook, 'checksum')
542
542
  if calculatedChecksum != responseChecksum:
543
543
  error = InvalidNonce(self.id + ' invalid checksum')
544
+ del client.subscriptions[messageHash]
545
+ del self.orderbooks[symbol]
544
546
  client.reject(error, messageHash)
547
+ return
545
548
  else:
546
549
  orderbook = self.order_book({})
547
550
  parsedOrderbook = self.parse_order_book(rawOrderBook, symbol, timestamp)