ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -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 +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -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 +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -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 +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -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 +143 -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.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.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.49.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
  },
@@ -108,6 +108,10 @@ class bitmart(ccxt.async_support.bitmart):
108
108
  }
109
109
  else:
110
110
  messageHash = 'futures/' + channel + ':' + market['id']
111
+ speed = self.safe_string(params, 'speed')
112
+ if speed is not None:
113
+ params = self.omit(params, 'speed')
114
+ messageHash += ':' + speed
111
115
  request = {
112
116
  'action': 'subscribe',
113
117
  'args': [messageHash],
@@ -129,7 +133,7 @@ class bitmart(ccxt.async_support.bitmart):
129
133
  # exclusion, futures "tickers" need one generic request for all symbols
130
134
  if (type != 'spot') and (channel == 'ticker'):
131
135
  rawSubscriptions = [channelType + '/' + channel]
132
- request = {
136
+ request: dict = {
133
137
  'args': rawSubscriptions,
134
138
  }
135
139
  request[actionType] = 'subscribe'
@@ -137,8 +141,10 @@ class bitmart(ccxt.async_support.bitmart):
137
141
 
138
142
  async def watch_balance(self, params={}) -> Balances:
139
143
  """
140
- :see: https://developer-pro.bitmart.com/en/spot/#private-balance-change
141
- :see: https://developer-pro.bitmart.com/en/futures/#private-assets-channel
144
+
145
+ https://developer-pro.bitmart.com/en/spot/#private-balance-change
146
+ https://developer-pro.bitmart.com/en/futuresv2/#private-assets-channel
147
+
142
148
  watch balance and get the amount of funds available for trading or funds locked in orders
143
149
  :param dict [params]: extra parameters specific to the exchange API endpoint
144
150
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -257,8 +263,10 @@ class bitmart(ccxt.async_support.bitmart):
257
263
 
258
264
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
259
265
  """
260
- :see: https://developer-pro.bitmart.com/en/spot/#public-trade-channel
261
- :see: https://developer-pro.bitmart.com/en/futures/#public-trade-channel
266
+
267
+ https://developer-pro.bitmart.com/en/spot/#public-trade-channel
268
+ https://developer-pro.bitmart.com/en/futuresv2/#public-trade-channel
269
+
262
270
  get the list of most recent trades for a particular symbol
263
271
  :param str symbol: unified symbol of the market to fetch trades for
264
272
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -270,7 +278,9 @@ class bitmart(ccxt.async_support.bitmart):
270
278
 
271
279
  async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
272
280
  """
273
- :see: https://developer-pro.bitmart.com/en/spot/#public-trade-channel
281
+
282
+ https://developer-pro.bitmart.com/en/spot/#public-trade-channel
283
+
274
284
  get the list of most recent trades for a list of symbols
275
285
  :param str[] symbols: unified symbol of the market to fetch trades for
276
286
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -301,7 +311,10 @@ class bitmart(ccxt.async_support.bitmart):
301
311
 
302
312
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
303
313
  """
304
- :see: https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
314
+
315
+ https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
316
+ https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
317
+
305
318
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
306
319
  :param str symbol: unified symbol of the market to fetch the ticker for
307
320
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -314,7 +327,10 @@ class bitmart(ccxt.async_support.bitmart):
314
327
 
315
328
  async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
316
329
  """
317
- :see: https://developer-pro.bitmart.com/en/futures/#overview
330
+
331
+ https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
332
+ https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
333
+
318
334
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
319
335
  :param str[] symbols: unified symbol of the market to fetch the ticker for
320
336
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -326,16 +342,89 @@ class bitmart(ccxt.async_support.bitmart):
326
342
  marketType, params = self.handle_market_type_and_params('watchTickers', market, params)
327
343
  ticker = await self.subscribe_multiple('ticker', marketType, symbols, params)
328
344
  if self.newUpdates:
329
- tickers = {}
345
+ tickers: dict = {}
330
346
  tickers[ticker['symbol']] = ticker
331
347
  return tickers
332
348
  return self.filter_by_array(self.tickers, 'symbol', symbols)
333
349
 
350
+ async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
351
+ """
352
+
353
+ https://developer-pro.bitmart.com/en/spot/#public-ticker-channel
354
+ https://developer-pro.bitmart.com/en/futuresv2/#public-ticker-channel
355
+
356
+ watches best bid & ask for symbols
357
+ :param str[] symbols: unified symbol of the market to fetch the ticker for
358
+ :param dict [params]: extra parameters specific to the exchange API endpoint
359
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
360
+ """
361
+ await self.load_markets()
362
+ symbols = self.market_symbols(symbols, None, False)
363
+ firstMarket = self.get_market_from_symbols(symbols)
364
+ marketType = None
365
+ marketType, params = self.handle_market_type_and_params('watchBidsAsks', firstMarket, params)
366
+ url = self.implode_hostname(self.urls['api']['ws'][marketType]['public'])
367
+ channelType = 'spot' if (marketType == 'spot') else 'futures'
368
+ actionType = 'op' if (marketType == 'spot') else 'action'
369
+ rawSubscriptions = []
370
+ messageHashes = []
371
+ for i in range(0, len(symbols)):
372
+ market = self.market(symbols[i])
373
+ rawSubscriptions.append(channelType + '/ticker:' + market['id'])
374
+ messageHashes.append('bidask:' + symbols[i])
375
+ if marketType != 'spot':
376
+ rawSubscriptions = [channelType + '/ticker']
377
+ request: dict = {
378
+ 'args': rawSubscriptions,
379
+ }
380
+ request[actionType] = 'subscribe'
381
+ newTickers = await self.watch_multiple(url, messageHashes, request, rawSubscriptions)
382
+ if self.newUpdates:
383
+ tickers: dict = {}
384
+ tickers[newTickers['symbol']] = newTickers
385
+ return tickers
386
+ return self.filter_by_array(self.bidsasks, 'symbol', symbols)
387
+
388
+ def handle_bid_ask(self, client: Client, message):
389
+ table = self.safe_string(message, 'table')
390
+ isSpot = (table is not None)
391
+ rawTickers = []
392
+ if isSpot:
393
+ rawTickers = self.safe_list(message, 'data', [])
394
+ else:
395
+ rawTickers = [self.safe_value(message, 'data', {})]
396
+ if not len(rawTickers):
397
+ return
398
+ for i in range(0, len(rawTickers)):
399
+ ticker = self.parse_ws_bid_ask(rawTickers[i])
400
+ symbol = ticker['symbol']
401
+ self.bidsasks[symbol] = ticker
402
+ messageHash = 'bidask:' + symbol
403
+ client.resolve(ticker, messageHash)
404
+
405
+ def parse_ws_bid_ask(self, ticker, market=None):
406
+ marketId = self.safe_string(ticker, 'symbol')
407
+ market = self.safe_market(marketId, market)
408
+ symbol = self.safe_string(market, 'symbol')
409
+ timestamp = self.safe_integer(ticker, 'ms_t')
410
+ return self.safe_ticker({
411
+ 'symbol': symbol,
412
+ 'timestamp': timestamp,
413
+ 'datetime': self.iso8601(timestamp),
414
+ 'ask': self.safe_string_2(ticker, 'ask_px', 'ask_price'),
415
+ 'askVolume': self.safe_string_2(ticker, 'ask_sz', 'ask_vol'),
416
+ 'bid': self.safe_string_2(ticker, 'bid_px', 'bid_price'),
417
+ 'bidVolume': self.safe_string_2(ticker, 'bid_sz', 'bid_vol'),
418
+ 'info': ticker,
419
+ }, market)
420
+
334
421
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
335
422
  """
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
423
  watches information on multiple orders made by the user
424
+
425
+ https://developer-pro.bitmart.com/en/spot/#private-order-progress
426
+ https://developer-pro.bitmart.com/en/futuresv2/#private-order-channel
427
+
339
428
  :param str symbol: unified market symbol of the market orders were made in
340
429
  :param int [since]: the earliest time in ms to fetch orders for
341
430
  :param int [limit]: the maximum number of order structures to retrieve
@@ -354,11 +443,14 @@ class bitmart(ccxt.async_support.bitmart):
354
443
  await self.authenticate(type, params)
355
444
  request = None
356
445
  if type == 'spot':
357
- if symbol is None:
358
- raise ArgumentsRequired(self.id + ' watchOrders() requires a symbol argument for spot markets')
446
+ argsRequest = 'spot/user/order:'
447
+ if symbol is not None:
448
+ argsRequest += market['id']
449
+ else:
450
+ argsRequest = 'spot/user/orders:ALL_SYMBOLS'
359
451
  request = {
360
452
  'op': 'subscribe',
361
- 'args': ['spot/user/order:' + market['id']],
453
+ 'args': [argsRequest],
362
454
  }
363
455
  else:
364
456
  request = {
@@ -430,7 +522,7 @@ class bitmart(ccxt.async_support.bitmart):
430
522
  return
431
523
  ordersLength = len(orders)
432
524
  newOrders = []
433
- symbols = {}
525
+ symbols: dict = {}
434
526
  if ordersLength > 0:
435
527
  limit = self.safe_integer(self.options, 'ordersLimit', 1000)
436
528
  if self.orders is None:
@@ -450,7 +542,7 @@ class bitmart(ccxt.async_support.bitmart):
450
542
  client.resolve(newOrders, symbolSpecificMessageHash)
451
543
  client.resolve(newOrders, messageHash)
452
544
 
453
- def parse_ws_order(self, order, market: Market = None):
545
+ def parse_ws_order(self, order: dict, market: Market = None):
454
546
  #
455
547
  # spot
456
548
  # {
@@ -506,7 +598,7 @@ class bitmart(ccxt.async_support.bitmart):
506
598
  amount = self.safe_string(order, 'size')
507
599
  type = self.safe_string(order, 'type')
508
600
  rawState = self.safe_string(order, 'state')
509
- status = self.parseOrderStatusByType(market['type'], rawState)
601
+ status = self.parse_order_status_by_type(market['type'], rawState)
510
602
  timestamp = self.safe_integer(order, 'ms_t')
511
603
  symbol = market['symbol']
512
604
  side = self.safe_string_lower(order, 'side')
@@ -578,7 +670,7 @@ class bitmart(ccxt.async_support.bitmart):
578
670
  }, market)
579
671
 
580
672
  def parse_ws_order_status(self, statusId):
581
- statuses = {
673
+ statuses: dict = {
582
674
  '1': 'closed', # match deal
583
675
  '2': 'open', # submit order
584
676
  '3': 'canceled', # cancel order
@@ -592,7 +684,7 @@ class bitmart(ccxt.async_support.bitmart):
592
684
  return self.safe_string(statuses, statusId, statusId)
593
685
 
594
686
  def parse_ws_order_side(self, sideId):
595
- sides = {
687
+ sides: dict = {
596
688
  '1': 'buy', # buy_open_long
597
689
  '2': 'buy', # buy_close_short
598
690
  '3': 'sell', # sell_close_long
@@ -602,9 +694,13 @@ class bitmart(ccxt.async_support.bitmart):
602
694
 
603
695
  async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
604
696
  """
605
- :see: https://developer-pro.bitmart.com/en/futures/#private-position-channel
697
+
698
+ https://developer-pro.bitmart.com/en/futures/#private-position-channel
699
+
606
700
  watch all open positions
607
701
  :param str[]|None symbols: list of unified market symbols
702
+ :param int [since]: the earliest time in ms to fetch positions
703
+ :param int [limit]: the maximum number of positions to retrieve
608
704
  :param dict params: extra parameters specific to the exchange API endpoint
609
705
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
610
706
  """
@@ -616,7 +712,7 @@ class bitmart(ccxt.async_support.bitmart):
616
712
  if symbols is not None:
617
713
  messageHash += '::' + ','.join(symbols)
618
714
  subscriptionHash = 'futures/position'
619
- request = {
715
+ request: dict = {
620
716
  'action': 'subscribe',
621
717
  'args': ['futures/position'],
622
718
  }
@@ -663,9 +759,9 @@ class bitmart(ccxt.async_support.bitmart):
663
759
  # }
664
760
  #
665
761
  data = self.safe_value(message, 'data', [])
666
- cache = self.positions
667
762
  if self.positions is None:
668
763
  self.positions = ArrayCacheBySymbolBySide()
764
+ cache = self.positions
669
765
  newPositions = []
670
766
  for i in range(0, len(data)):
671
767
  rawPosition = data[i]
@@ -705,8 +801,8 @@ class bitmart(ccxt.async_support.bitmart):
705
801
  symbol = market['symbol']
706
802
  openTimestamp = self.safe_integer(position, 'create_time')
707
803
  timestamp = self.safe_integer(position, 'update_time')
708
- side = self.safe_number(position, 'position_type')
709
- marginModeId = self.safe_number(position, 'open_type')
804
+ side = self.safe_integer(position, 'position_type')
805
+ marginModeId = self.safe_integer(position, 'open_type')
710
806
  return self.safe_position({
711
807
  'info': position,
712
808
  'id': None,
@@ -800,7 +896,7 @@ class bitmart(ccxt.async_support.bitmart):
800
896
  stored.append(trade)
801
897
  return symbol
802
898
 
803
- def parse_ws_trade(self, trade, market: Market = None):
899
+ def parse_ws_trade(self, trade: dict, market: Market = None):
804
900
  # spot
805
901
  # {
806
902
  # "price": "52700.50",
@@ -875,6 +971,7 @@ class bitmart(ccxt.async_support.bitmart):
875
971
  # }
876
972
  # }
877
973
  #
974
+ self.handle_bid_ask(client, message)
878
975
  table = self.safe_string(message, 'table')
879
976
  isSpot = (table is not None)
880
977
  rawTickers = []
@@ -930,8 +1027,10 @@ class bitmart(ccxt.async_support.bitmart):
930
1027
 
931
1028
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
932
1029
  """
933
- :see: https://developer-pro.bitmart.com/en/spot/#public-kline-channel
934
- :see: https://developer-pro.bitmart.com/en/futures/#public-klinebin-channel
1030
+
1031
+ https://developer-pro.bitmart.com/en/spot/#public-kline-channel
1032
+ https://developer-pro.bitmart.com/en/futuresv2/#public-klinebin-channel
1033
+
935
1034
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
936
1035
  :param str symbol: unified symbol of the market to fetch OHLCV data for
937
1036
  :param str timeframe: the length of time each candle represents
@@ -1045,13 +1144,16 @@ class bitmart(ccxt.async_support.bitmart):
1045
1144
 
1046
1145
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
1047
1146
  """
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
1147
+
1148
+ https://developer-pro.bitmart.com/en/spot/#public-depth-all-channel
1149
+ https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1150
+ https://developer-pro.bitmart.com/en/futuresv2/#public-depth-channel
1151
+
1051
1152
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
1052
1153
  :param str symbol: unified symbol of the market to fetch the order book for
1053
1154
  :param int [limit]: the maximum amount of order book entries to return
1054
1155
  :param dict [params]: extra parameters specific to the exchange API endpoint
1156
+ :param str [params.speed]: *futures only* '100ms' or '200ms'
1055
1157
  :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
1056
1158
  """
1057
1159
  await self.load_markets()
@@ -1232,7 +1334,7 @@ class bitmart(ccxt.async_support.bitmart):
1232
1334
  ob['symbol'] = symbol
1233
1335
  self.orderbooks[symbol] = ob
1234
1336
  orderbook = self.orderbooks[symbol]
1235
- way = self.safe_number(data, 'way')
1337
+ way = self.safe_integer(data, 'way')
1236
1338
  side = 'bids' if (way == 1) else 'asks'
1237
1339
  if way == 1:
1238
1340
  orderbook[side] = Bids([], limit)
@@ -1260,7 +1362,9 @@ class bitmart(ccxt.async_support.bitmart):
1260
1362
  async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
1261
1363
  """
1262
1364
  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
1365
+
1366
+ https://developer-pro.bitmart.com/en/spot/#public-depth-increase-channel
1367
+
1264
1368
  :param str[] symbols: unified array of symbols
1265
1369
  :param int [limit]: the maximum amount of order book entries to return
1266
1370
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1312,7 +1416,7 @@ class bitmart(ccxt.async_support.bitmart):
1312
1416
  }
1313
1417
  message = self.extend(request, params)
1314
1418
  self.watch(url, messageHash, message, messageHash)
1315
- return future
1419
+ return await future
1316
1420
 
1317
1421
  def handle_subscription_status(self, client: Client, message):
1318
1422
  #
@@ -1418,7 +1522,7 @@ class bitmart(ccxt.async_support.bitmart):
1418
1522
  if not isDataUpdate:
1419
1523
  event = self.safe_string_2(message, 'event', 'action')
1420
1524
  if event is not None:
1421
- methods = {
1525
+ methods: dict = {
1422
1526
  # 'info': self.handleSystemStatus,
1423
1527
  'login': self.handle_authenticate,
1424
1528
  'access': self.handle_authenticate,
@@ -1429,7 +1533,7 @@ class bitmart(ccxt.async_support.bitmart):
1429
1533
  method(client, message)
1430
1534
  else:
1431
1535
  channel = self.safe_string_2(message, 'table', 'group')
1432
- methods = {
1536
+ methods: dict = {
1433
1537
  'depth': self.handle_order_book,
1434
1538
  'ticker': self.handle_ticker,
1435
1539
  'trade': self.handle_trade,