ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__py2.py3-none-any.whl

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 (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3104 -880
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +557 -323
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1633 -268
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3104 -880
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +557 -323
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1632 -268
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/pro/bitmart.py CHANGED
@@ -11,9 +11,8 @@ from ccxt.base.types import Balances, Int, Market, Order, OrderBook, Position, S
11
11
  from ccxt.async_support.base.ws.client import Client
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
- from ccxt.base.errors import ArgumentsRequired
15
- from ccxt.base.errors import NotSupported
16
14
  from ccxt.base.errors import AuthenticationError
15
+ from ccxt.base.errors import NotSupported
17
16
 
18
17
 
19
18
  class bitmart(ccxt.async_support.bitmart):
@@ -32,6 +31,7 @@ class bitmart(ccxt.async_support.bitmart):
32
31
  'watchBalance': True,
33
32
  'watchTicker': True,
34
33
  'watchTickers': True,
34
+ 'watchBidsAsks': True,
35
35
  'watchOrderBook': True,
36
36
  'watchOrderBookForSymbols': True,
37
37
  'watchOrders': True,
@@ -49,8 +49,8 @@ class bitmart(ccxt.async_support.bitmart):
49
49
  'private': 'wss://ws-manager-compress.{hostname}/user?protocol=1.1',
50
50
  },
51
51
  'swap': {
52
- 'public': 'wss://openapi-ws.{hostname}/api?protocol=1.1',
53
- 'private': 'wss://openapi-ws.{hostname}/user?protocol=1.1',
52
+ 'public': 'wss://openapi-ws-v2.{hostname}/api?protocol=1.1',
53
+ 'private': 'wss://openapi-ws-v2.{hostname}/user?protocol=1.1',
54
54
  },
55
55
  },
56
56
  },
@@ -129,7 +129,7 @@ class bitmart(ccxt.async_support.bitmart):
129
129
  # exclusion, futures "tickers" need one generic request for all symbols
130
130
  if (type != 'spot') and (channel == 'ticker'):
131
131
  rawSubscriptions = [channelType + '/' + channel]
132
- request = {
132
+ request: dict = {
133
133
  'args': rawSubscriptions,
134
134
  }
135
135
  request[actionType] = 'subscribe'
@@ -137,8 +137,10 @@ class bitmart(ccxt.async_support.bitmart):
137
137
 
138
138
  async def watch_balance(self, params={}) -> Balances:
139
139
  """
140
- :see: https://developer-pro.bitmart.com/en/spot/#private-balance-change
141
- :see: https://developer-pro.bitmart.com/en/futures/#private-assets-channel
140
+
141
+ https://developer-pro.bitmart.com/en/spot/#private-balance-change
142
+ https://developer-pro.bitmart.com/en/futuresv2/#private-assets-channel
143
+
142
144
  watch balance and get the amount of funds available for trading or funds locked in orders
143
145
  :param dict [params]: extra parameters specific to the exchange API endpoint
144
146
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -257,8 +259,10 @@ class bitmart(ccxt.async_support.bitmart):
257
259
 
258
260
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
259
261
  """
260
- :see: https://developer-pro.bitmart.com/en/spot/#public-trade-channel
261
- :see: https://developer-pro.bitmart.com/en/futures/#public-trade-channel
262
+
263
+ https://developer-pro.bitmart.com/en/spot/#public-trade-channel
264
+ https://developer-pro.bitmart.com/en/futuresv2/#public-trade-channel
265
+
262
266
  get the list of most recent trades for a particular symbol
263
267
  :param str symbol: unified symbol of the market to fetch trades for
264
268
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -270,7 +274,9 @@ class bitmart(ccxt.async_support.bitmart):
270
274
 
271
275
  async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
272
276
  """
273
- :see: https://developer-pro.bitmart.com/en/spot/#public-trade-channel
277
+
278
+ https://developer-pro.bitmart.com/en/spot/#public-trade-channel
279
+
274
280
  get the list of most recent trades for a list of symbols
275
281
  :param str[] symbols: unified symbol of the market to fetch trades for
276
282
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -301,7 +307,10 @@ class bitmart(ccxt.async_support.bitmart):
301
307
 
302
308
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
303
309
  """
304
- :see: https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
310
+
311
+ https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
312
+ https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
313
+
305
314
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
306
315
  :param str symbol: unified symbol of the market to fetch the ticker for
307
316
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -314,7 +323,10 @@ class bitmart(ccxt.async_support.bitmart):
314
323
 
315
324
  async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
316
325
  """
317
- :see: https://developer-pro.bitmart.com/en/futures/#overview
326
+
327
+ https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
328
+ https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
329
+
318
330
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
319
331
  :param str[] symbols: unified symbol of the market to fetch the ticker for
320
332
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -326,16 +338,89 @@ class bitmart(ccxt.async_support.bitmart):
326
338
  marketType, params = self.handle_market_type_and_params('watchTickers', market, params)
327
339
  ticker = await self.subscribe_multiple('ticker', marketType, symbols, params)
328
340
  if self.newUpdates:
329
- tickers = {}
341
+ tickers: dict = {}
330
342
  tickers[ticker['symbol']] = ticker
331
343
  return tickers
332
344
  return self.filter_by_array(self.tickers, 'symbol', symbols)
333
345
 
346
+ async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
347
+ """
348
+
349
+ https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
350
+ https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
351
+
352
+ watches best bid & ask for symbols
353
+ :param str[] symbols: unified symbol of the market to fetch the ticker for
354
+ :param dict [params]: extra parameters specific to the exchange API endpoint
355
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
356
+ """
357
+ await self.load_markets()
358
+ symbols = self.market_symbols(symbols, None, False)
359
+ firstMarket = self.get_market_from_symbols(symbols)
360
+ marketType = None
361
+ marketType, params = self.handle_market_type_and_params('watchBidsAsks', firstMarket, params)
362
+ url = self.implode_hostname(self.urls['api']['ws'][marketType]['public'])
363
+ channelType = 'spot' if (marketType == 'spot') else 'futures'
364
+ actionType = 'op' if (marketType == 'spot') else 'action'
365
+ rawSubscriptions = []
366
+ messageHashes = []
367
+ for i in range(0, len(symbols)):
368
+ market = self.market(symbols[i])
369
+ rawSubscriptions.append(channelType + '/ticker:' + market['id'])
370
+ messageHashes.append('bidask:' + symbols[i])
371
+ if marketType != 'spot':
372
+ rawSubscriptions = [channelType + '/ticker']
373
+ request: dict = {
374
+ 'args': rawSubscriptions,
375
+ }
376
+ request[actionType] = 'subscribe'
377
+ newTickers = await self.watch_multiple(url, messageHashes, request, rawSubscriptions)
378
+ if self.newUpdates:
379
+ tickers: dict = {}
380
+ tickers[newTickers['symbol']] = newTickers
381
+ return tickers
382
+ return self.filter_by_array(self.bidsasks, 'symbol', symbols)
383
+
384
+ def handle_bid_ask(self, client: Client, message):
385
+ table = self.safe_string(message, 'table')
386
+ isSpot = (table is not None)
387
+ rawTickers = []
388
+ if isSpot:
389
+ rawTickers = self.safe_list(message, 'data', [])
390
+ else:
391
+ rawTickers = [self.safe_value(message, 'data', {})]
392
+ if not len(rawTickers):
393
+ return
394
+ for i in range(0, len(rawTickers)):
395
+ ticker = self.parse_ws_bid_ask(rawTickers[i])
396
+ symbol = ticker['symbol']
397
+ self.bidsasks[symbol] = ticker
398
+ messageHash = 'bidask:' + symbol
399
+ client.resolve(ticker, messageHash)
400
+
401
+ def parse_ws_bid_ask(self, ticker, market=None):
402
+ marketId = self.safe_string(ticker, 'symbol')
403
+ market = self.safe_market(marketId, market)
404
+ symbol = self.safe_string(market, 'symbol')
405
+ timestamp = self.safe_integer(ticker, 'ms_t')
406
+ return self.safe_ticker({
407
+ 'symbol': symbol,
408
+ 'timestamp': timestamp,
409
+ 'datetime': self.iso8601(timestamp),
410
+ 'ask': self.safe_string_2(ticker, 'ask_px', 'ask_price'),
411
+ 'askVolume': self.safe_string_2(ticker, 'ask_sz', 'ask_vol'),
412
+ 'bid': self.safe_string_2(ticker, 'bid_px', 'bid_price'),
413
+ 'bidVolume': self.safe_string_2(ticker, 'bid_sz', 'bid_vol'),
414
+ 'info': ticker,
415
+ }, market)
416
+
334
417
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
335
418
  """
336
- :see: https://developer-pro.bitmart.com/en/spot/#private-order-channel
337
- :see: https://developer-pro.bitmart.com/en/futures/#private-order-channel
338
419
  watches information on multiple orders made by the user
420
+
421
+ https://developer-pro.bitmart.com/en/spot/#private-order-progress
422
+ https://developer-pro.bitmart.com/en/futuresv2/#private-order-channel
423
+
339
424
  :param str symbol: unified market symbol of the market orders were made in
340
425
  :param int [since]: the earliest time in ms to fetch orders for
341
426
  :param int [limit]: the maximum number of order structures to retrieve
@@ -354,11 +439,14 @@ class bitmart(ccxt.async_support.bitmart):
354
439
  await self.authenticate(type, params)
355
440
  request = None
356
441
  if type == 'spot':
357
- if symbol is None:
358
- raise ArgumentsRequired(self.id + ' watchOrders() requires a symbol argument for spot markets')
442
+ argsRequest = 'spot/user/order:'
443
+ if symbol is not None:
444
+ argsRequest += market['id']
445
+ else:
446
+ argsRequest = 'spot/user/orders:ALL_SYMBOLS'
359
447
  request = {
360
448
  'op': 'subscribe',
361
- 'args': ['spot/user/order:' + market['id']],
449
+ 'args': [argsRequest],
362
450
  }
363
451
  else:
364
452
  request = {
@@ -430,7 +518,7 @@ class bitmart(ccxt.async_support.bitmart):
430
518
  return
431
519
  ordersLength = len(orders)
432
520
  newOrders = []
433
- symbols = {}
521
+ symbols: dict = {}
434
522
  if ordersLength > 0:
435
523
  limit = self.safe_integer(self.options, 'ordersLimit', 1000)
436
524
  if self.orders is None:
@@ -450,7 +538,7 @@ class bitmart(ccxt.async_support.bitmart):
450
538
  client.resolve(newOrders, symbolSpecificMessageHash)
451
539
  client.resolve(newOrders, messageHash)
452
540
 
453
- def parse_ws_order(self, order, market: Market = None):
541
+ def parse_ws_order(self, order: dict, market: Market = None):
454
542
  #
455
543
  # spot
456
544
  # {
@@ -506,7 +594,7 @@ class bitmart(ccxt.async_support.bitmart):
506
594
  amount = self.safe_string(order, 'size')
507
595
  type = self.safe_string(order, 'type')
508
596
  rawState = self.safe_string(order, 'state')
509
- status = self.parseOrderStatusByType(market['type'], rawState)
597
+ status = self.parse_order_status_by_type(market['type'], rawState)
510
598
  timestamp = self.safe_integer(order, 'ms_t')
511
599
  symbol = market['symbol']
512
600
  side = self.safe_string_lower(order, 'side')
@@ -578,7 +666,7 @@ class bitmart(ccxt.async_support.bitmart):
578
666
  }, market)
579
667
 
580
668
  def parse_ws_order_status(self, statusId):
581
- statuses = {
669
+ statuses: dict = {
582
670
  '1': 'closed', # match deal
583
671
  '2': 'open', # submit order
584
672
  '3': 'canceled', # cancel order
@@ -592,7 +680,7 @@ class bitmart(ccxt.async_support.bitmart):
592
680
  return self.safe_string(statuses, statusId, statusId)
593
681
 
594
682
  def parse_ws_order_side(self, sideId):
595
- sides = {
683
+ sides: dict = {
596
684
  '1': 'buy', # buy_open_long
597
685
  '2': 'buy', # buy_close_short
598
686
  '3': 'sell', # sell_close_long
@@ -602,9 +690,13 @@ class bitmart(ccxt.async_support.bitmart):
602
690
 
603
691
  async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
604
692
  """
605
- :see: https://developer-pro.bitmart.com/en/futures/#private-position-channel
693
+
694
+ https://developer-pro.bitmart.com/en/futures/#private-position-channel
695
+
606
696
  watch all open positions
607
697
  :param str[]|None symbols: list of unified market symbols
698
+ :param int [since]: the earliest time in ms to fetch positions
699
+ :param int [limit]: the maximum number of positions to retrieve
608
700
  :param dict params: extra parameters specific to the exchange API endpoint
609
701
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
610
702
  """
@@ -616,7 +708,7 @@ class bitmart(ccxt.async_support.bitmart):
616
708
  if symbols is not None:
617
709
  messageHash += '::' + ','.join(symbols)
618
710
  subscriptionHash = 'futures/position'
619
- request = {
711
+ request: dict = {
620
712
  'action': 'subscribe',
621
713
  'args': ['futures/position'],
622
714
  }
@@ -663,9 +755,9 @@ class bitmart(ccxt.async_support.bitmart):
663
755
  # }
664
756
  #
665
757
  data = self.safe_value(message, 'data', [])
666
- cache = self.positions
667
758
  if self.positions is None:
668
759
  self.positions = ArrayCacheBySymbolBySide()
760
+ cache = self.positions
669
761
  newPositions = []
670
762
  for i in range(0, len(data)):
671
763
  rawPosition = data[i]
@@ -705,8 +797,8 @@ class bitmart(ccxt.async_support.bitmart):
705
797
  symbol = market['symbol']
706
798
  openTimestamp = self.safe_integer(position, 'create_time')
707
799
  timestamp = self.safe_integer(position, 'update_time')
708
- side = self.safe_number(position, 'position_type')
709
- marginModeId = self.safe_number(position, 'open_type')
800
+ side = self.safe_integer(position, 'position_type')
801
+ marginModeId = self.safe_integer(position, 'open_type')
710
802
  return self.safe_position({
711
803
  'info': position,
712
804
  'id': None,
@@ -800,7 +892,7 @@ class bitmart(ccxt.async_support.bitmart):
800
892
  stored.append(trade)
801
893
  return symbol
802
894
 
803
- def parse_ws_trade(self, trade, market: Market = None):
895
+ def parse_ws_trade(self, trade: dict, market: Market = None):
804
896
  # spot
805
897
  # {
806
898
  # "price": "52700.50",
@@ -875,6 +967,7 @@ class bitmart(ccxt.async_support.bitmart):
875
967
  # }
876
968
  # }
877
969
  #
970
+ self.handle_bid_ask(client, message)
878
971
  table = self.safe_string(message, 'table')
879
972
  isSpot = (table is not None)
880
973
  rawTickers = []
@@ -930,8 +1023,10 @@ class bitmart(ccxt.async_support.bitmart):
930
1023
 
931
1024
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
932
1025
  """
933
- :see: https://developer-pro.bitmart.com/en/spot/#public-kline-channel
934
- :see: https://developer-pro.bitmart.com/en/futures/#public-klinebin-channel
1026
+
1027
+ https://developer-pro.bitmart.com/en/spot/#public-kline-channel
1028
+ https://developer-pro.bitmart.com/en/futuresv2/#public-klinebin-channel
1029
+
935
1030
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
936
1031
  :param str symbol: unified symbol of the market to fetch OHLCV data for
937
1032
  :param str timeframe: the length of time each candle represents
@@ -1045,9 +1140,11 @@ class bitmart(ccxt.async_support.bitmart):
1045
1140
 
1046
1141
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
1047
1142
  """
1048
- :see: https://developer-pro.bitmart.com/en/spot/#public-depth-all-channel
1049
- :see: https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1050
- :see: https://developer-pro.bitmart.com/en/futures/#public-depth-channel
1143
+
1144
+ https://developer-pro.bitmart.com/en/spot/#public-depth-all-channel
1145
+ https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1146
+ https://developer-pro.bitmart.com/en/futuresv2/#public-depth-channel
1147
+
1051
1148
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
1052
1149
  :param str symbol: unified symbol of the market to fetch the order book for
1053
1150
  :param int [limit]: the maximum amount of order book entries to return
@@ -1232,7 +1329,7 @@ class bitmart(ccxt.async_support.bitmart):
1232
1329
  ob['symbol'] = symbol
1233
1330
  self.orderbooks[symbol] = ob
1234
1331
  orderbook = self.orderbooks[symbol]
1235
- way = self.safe_number(data, 'way')
1332
+ way = self.safe_integer(data, 'way')
1236
1333
  side = 'bids' if (way == 1) else 'asks'
1237
1334
  if way == 1:
1238
1335
  orderbook[side] = Bids([], limit)
@@ -1260,7 +1357,9 @@ class bitmart(ccxt.async_support.bitmart):
1260
1357
  async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
1261
1358
  """
1262
1359
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
1263
- :see: https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1360
+
1361
+ https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1362
+
1264
1363
  :param str[] symbols: unified array of symbols
1265
1364
  :param int [limit]: the maximum amount of order book entries to return
1266
1365
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1312,7 +1411,7 @@ class bitmart(ccxt.async_support.bitmart):
1312
1411
  }
1313
1412
  message = self.extend(request, params)
1314
1413
  self.watch(url, messageHash, message, messageHash)
1315
- return future
1414
+ return await future
1316
1415
 
1317
1416
  def handle_subscription_status(self, client: Client, message):
1318
1417
  #
@@ -1418,7 +1517,7 @@ class bitmart(ccxt.async_support.bitmart):
1418
1517
  if not isDataUpdate:
1419
1518
  event = self.safe_string_2(message, 'event', 'action')
1420
1519
  if event is not None:
1421
- methods = {
1520
+ methods: dict = {
1422
1521
  # 'info': self.handleSystemStatus,
1423
1522
  'login': self.handle_authenticate,
1424
1523
  'access': self.handle_authenticate,
@@ -1429,7 +1528,7 @@ class bitmart(ccxt.async_support.bitmart):
1429
1528
  method(client, message)
1430
1529
  else:
1431
1530
  channel = self.safe_string_2(message, 'table', 'group')
1432
- methods = {
1531
+ methods: dict = {
1433
1532
  'depth': self.handle_order_book,
1434
1533
  'ticker': self.handle_ticker,
1435
1534
  'trade': self.handle_trade,