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/__init__.py CHANGED
@@ -4,7 +4,7 @@
4
4
 
5
5
  # ----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.77'
7
+ __version__ = '4.4.48'
8
8
 
9
9
  # ----------------------------------------------------------------------------
10
10
 
@@ -22,8 +22,9 @@ from ccxt.pro.binanceusdm import binanceusdm # noqa
22
22
  from ccxt.pro.bingx import bingx # noqa: F401
23
23
  from ccxt.pro.bitcoincom import bitcoincom # noqa: F401
24
24
  from ccxt.pro.bitfinex import bitfinex # noqa: F401
25
- from ccxt.pro.bitfinex2 import bitfinex2 # noqa: F401
25
+ from ccxt.pro.bitfinex1 import bitfinex1 # noqa: F401
26
26
  from ccxt.pro.bitget import bitget # noqa: F401
27
+ from ccxt.pro.bithumb import bithumb # noqa: F401
27
28
  from ccxt.pro.bitmart import bitmart # noqa: F401
28
29
  from ccxt.pro.bitmex import bitmex # noqa: F401
29
30
  from ccxt.pro.bitopro import bitopro # noqa: F401
@@ -32,21 +33,26 @@ from ccxt.pro.bitrue import bitrue # noqa
32
33
  from ccxt.pro.bitstamp import bitstamp # noqa: F401
33
34
  from ccxt.pro.bitvavo import bitvavo # noqa: F401
34
35
  from ccxt.pro.blockchaincom import blockchaincom # noqa: F401
36
+ from ccxt.pro.blofin import blofin # noqa: F401
35
37
  from ccxt.pro.bybit import bybit # noqa: F401
36
38
  from ccxt.pro.cex import cex # noqa: F401
37
39
  from ccxt.pro.coinbase import coinbase # noqa: F401
40
+ from ccxt.pro.coinbaseadvanced import coinbaseadvanced # noqa: F401
41
+ from ccxt.pro.coinbaseexchange import coinbaseexchange # noqa: F401
38
42
  from ccxt.pro.coinbaseinternational import coinbaseinternational # noqa: F401
39
- from ccxt.pro.coinbasepro import coinbasepro # noqa: F401
43
+ from ccxt.pro.coincatch import coincatch # noqa: F401
40
44
  from ccxt.pro.coincheck import coincheck # noqa: F401
41
45
  from ccxt.pro.coinex import coinex # noqa: F401
42
46
  from ccxt.pro.coinone import coinone # noqa: F401
43
47
  from ccxt.pro.cryptocom import cryptocom # noqa: F401
44
48
  from ccxt.pro.currencycom import currencycom # noqa: F401
49
+ from ccxt.pro.defx import defx # noqa: F401
45
50
  from ccxt.pro.deribit import deribit # noqa: F401
46
51
  from ccxt.pro.exmo import exmo # noqa: F401
47
52
  from ccxt.pro.gate import gate # noqa: F401
48
53
  from ccxt.pro.gateio import gateio # noqa: F401
49
54
  from ccxt.pro.gemini import gemini # noqa: F401
55
+ from ccxt.pro.hashkey import hashkey # noqa: F401
50
56
  from ccxt.pro.hitbtc import hitbtc # noqa: F401
51
57
  from ccxt.pro.hollaex import hollaex # noqa: F401
52
58
  from ccxt.pro.htx import htx # noqa: F401
@@ -62,19 +68,25 @@ from ccxt.pro.kucoinfutures import kucoinfutures # noqa
62
68
  from ccxt.pro.lbank import lbank # noqa: F401
63
69
  from ccxt.pro.luno import luno # noqa: F401
64
70
  from ccxt.pro.mexc import mexc # noqa: F401
71
+ from ccxt.pro.myokx import myokx # noqa: F401
65
72
  from ccxt.pro.ndax import ndax # noqa: F401
66
73
  from ccxt.pro.okcoin import okcoin # noqa: F401
67
74
  from ccxt.pro.okx import okx # noqa: F401
68
75
  from ccxt.pro.onetrading import onetrading # noqa: F401
76
+ from ccxt.pro.oxfun import oxfun # noqa: F401
69
77
  from ccxt.pro.p2b import p2b # noqa: F401
78
+ from ccxt.pro.paradex import paradex # noqa: F401
70
79
  from ccxt.pro.phemex import phemex # noqa: F401
71
80
  from ccxt.pro.poloniex import poloniex # noqa: F401
72
81
  from ccxt.pro.poloniexfutures import poloniexfutures # noqa: F401
73
82
  from ccxt.pro.probit import probit # noqa: F401
74
83
  from ccxt.pro.upbit import upbit # noqa: F401
84
+ from ccxt.pro.vertex import vertex # noqa: F401
75
85
  from ccxt.pro.wazirx import wazirx # noqa: F401
76
86
  from ccxt.pro.whitebit import whitebit # noqa: F401
77
87
  from ccxt.pro.woo import woo # noqa: F401
88
+ from ccxt.pro.woofipro import woofipro # noqa: F401
89
+ from ccxt.pro.xt import xt # noqa: F401
78
90
 
79
91
  exchanges = [
80
92
  'alpaca',
@@ -87,8 +99,9 @@ exchanges = [
87
99
  'bingx',
88
100
  'bitcoincom',
89
101
  'bitfinex',
90
- 'bitfinex2',
102
+ 'bitfinex1',
91
103
  'bitget',
104
+ 'bithumb',
92
105
  'bitmart',
93
106
  'bitmex',
94
107
  'bitopro',
@@ -97,21 +110,26 @@ exchanges = [
97
110
  'bitstamp',
98
111
  'bitvavo',
99
112
  'blockchaincom',
113
+ 'blofin',
100
114
  'bybit',
101
115
  'cex',
102
116
  'coinbase',
117
+ 'coinbaseadvanced',
118
+ 'coinbaseexchange',
103
119
  'coinbaseinternational',
104
- 'coinbasepro',
120
+ 'coincatch',
105
121
  'coincheck',
106
122
  'coinex',
107
123
  'coinone',
108
124
  'cryptocom',
109
125
  'currencycom',
126
+ 'defx',
110
127
  'deribit',
111
128
  'exmo',
112
129
  'gate',
113
130
  'gateio',
114
131
  'gemini',
132
+ 'hashkey',
115
133
  'hitbtc',
116
134
  'hollaex',
117
135
  'htx',
@@ -127,17 +145,23 @@ exchanges = [
127
145
  'lbank',
128
146
  'luno',
129
147
  'mexc',
148
+ 'myokx',
130
149
  'ndax',
131
150
  'okcoin',
132
151
  'okx',
133
152
  'onetrading',
153
+ 'oxfun',
134
154
  'p2b',
155
+ 'paradex',
135
156
  'phemex',
136
157
  'poloniex',
137
158
  'poloniexfutures',
138
159
  'probit',
139
160
  'upbit',
161
+ 'vertex',
140
162
  'wazirx',
141
163
  'whitebit',
142
164
  'woo',
165
+ 'woofipro',
166
+ 'xt',
143
167
  ]
ccxt/pro/alpaca.py CHANGED
@@ -56,6 +56,9 @@ class alpaca(ccxt.async_support.alpaca):
56
56
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
57
57
  """
58
58
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
59
+
60
+ https://docs.alpaca.markets/docs/real-time-crypto-pricing-data#quotes
61
+
59
62
  :param str symbol: unified symbol of the market to fetch the ticker for
60
63
  :param dict [params]: extra parameters specific to the exchange API endpoint
61
64
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -65,7 +68,7 @@ class alpaca(ccxt.async_support.alpaca):
65
68
  await self.load_markets()
66
69
  market = self.market(symbol)
67
70
  messageHash = 'ticker:' + market['symbol']
68
- request = {
71
+ request: dict = {
69
72
  'action': 'subscribe',
70
73
  'quotes': [market['id']],
71
74
  }
@@ -129,6 +132,9 @@ class alpaca(ccxt.async_support.alpaca):
129
132
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
130
133
  """
131
134
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
135
+
136
+ https://docs.alpaca.markets/docs/real-time-crypto-pricing-data#bars
137
+
132
138
  :param str symbol: unified symbol of the market to fetch OHLCV data for
133
139
  :param str timeframe: the length of time each candle represents
134
140
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -141,7 +147,7 @@ class alpaca(ccxt.async_support.alpaca):
141
147
  await self.load_markets()
142
148
  market = self.market(symbol)
143
149
  symbol = market['symbol']
144
- request = {
150
+ request: dict = {
145
151
  'action': 'subscribe',
146
152
  'bars': [market['id']],
147
153
  }
@@ -181,6 +187,9 @@ class alpaca(ccxt.async_support.alpaca):
181
187
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
182
188
  """
183
189
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
190
+
191
+ https://docs.alpaca.markets/docs/real-time-crypto-pricing-data#orderbooks
192
+
184
193
  :param str symbol: unified symbol of the market to fetch the order book for
185
194
  :param int [limit]: the maximum amount of order book entries to return.
186
195
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -192,7 +201,7 @@ class alpaca(ccxt.async_support.alpaca):
192
201
  market = self.market(symbol)
193
202
  symbol = market['symbol']
194
203
  messageHash = 'orderbook' + ':' + symbol
195
- request = {
204
+ request: dict = {
196
205
  'action': 'subscribe',
197
206
  'orderbooks': [market['id']],
198
207
  }
@@ -226,15 +235,15 @@ class alpaca(ccxt.async_support.alpaca):
226
235
  datetime = self.safe_string(message, 't')
227
236
  timestamp = self.parse8601(datetime)
228
237
  isSnapshot = self.safe_bool(message, 'r', False)
229
- orderbook = self.safe_value(self.orderbooks, symbol)
230
- if orderbook is None:
231
- orderbook = self.order_book()
238
+ if not (symbol in self.orderbooks):
239
+ self.orderbooks[symbol] = self.order_book()
240
+ orderbook = self.orderbooks[symbol]
232
241
  if isSnapshot:
233
242
  snapshot = self.parse_order_book(message, symbol, timestamp, 'b', 'a', 'p', 's')
234
243
  orderbook.reset(snapshot)
235
244
  else:
236
- asks = self.safe_value(message, 'a', [])
237
- bids = self.safe_value(message, 'b', [])
245
+ asks = self.safe_list(message, 'a', [])
246
+ bids = self.safe_list(message, 'b', [])
238
247
  self.handle_deltas(orderbook['asks'], asks)
239
248
  self.handle_deltas(orderbook['bids'], bids)
240
249
  orderbook['timestamp'] = timestamp
@@ -254,11 +263,14 @@ class alpaca(ccxt.async_support.alpaca):
254
263
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
255
264
  """
256
265
  watches information on multiple trades made in a market
266
+
267
+ https://docs.alpaca.markets/docs/real-time-crypto-pricing-data#trades
268
+
257
269
  :param str symbol: unified market symbol of the market trades were made in
258
270
  :param int [since]: the earliest time in ms to fetch orders for
259
271
  :param int [limit]: the maximum number of trade structures to retrieve
260
272
  :param dict [params]: extra parameters specific to the exchange API endpoint
261
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
273
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
262
274
  """
263
275
  url = self.urls['api']['ws']['crypto']
264
276
  await self.authenticate(url)
@@ -266,7 +278,7 @@ class alpaca(ccxt.async_support.alpaca):
266
278
  market = self.market(symbol)
267
279
  symbol = market['symbol']
268
280
  messageHash = 'trade:' + symbol
269
- request = {
281
+ request: dict = {
270
282
  'action': 'subscribe',
271
283
  'trades': [market['id']],
272
284
  }
@@ -302,12 +314,15 @@ class alpaca(ccxt.async_support.alpaca):
302
314
  async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
303
315
  """
304
316
  watches information on multiple trades made by the user
317
+
318
+ https://docs.alpaca.markets/docs/websocket-streaming#trade-updates
319
+
305
320
  :param str symbol: unified market symbol of the market trades were made in
306
321
  :param int [since]: the earliest time in ms to fetch trades for
307
322
  :param int [limit]: the maximum number of trade structures to retrieve
308
323
  :param dict [params]: extra parameters specific to the exchange API endpoint
309
324
  :param boolean [params.unifiedMargin]: use unified margin account
310
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
325
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
311
326
  """
312
327
  url = self.urls['api']['ws']['trading']
313
328
  await self.authenticate(url)
@@ -316,7 +331,7 @@ class alpaca(ccxt.async_support.alpaca):
316
331
  if symbol is not None:
317
332
  symbol = self.symbol(symbol)
318
333
  messageHash += ':' + symbol
319
- request = {
334
+ request: dict = {
320
335
  'action': 'listen',
321
336
  'data': {
322
337
  'streams': ['trade_updates'],
@@ -334,7 +349,7 @@ class alpaca(ccxt.async_support.alpaca):
334
349
  :param int [since]: the earliest time in ms to fetch orders for
335
350
  :param int [limit]: the maximum number of order structures to retrieve
336
351
  :param dict [params]: extra parameters specific to the exchange API endpoint
337
- :returns dict[]: a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
352
+ :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
338
353
  """
339
354
  url = self.urls['api']['ws']['trading']
340
355
  await self.authenticate(url)
@@ -344,7 +359,7 @@ class alpaca(ccxt.async_support.alpaca):
344
359
  market = self.market(symbol)
345
360
  symbol = market['symbol']
346
361
  messageHash = 'orders:' + symbol
347
- request = {
362
+ request: dict = {
348
363
  'action': 'listen',
349
364
  'data': {
350
365
  'streams': ['trade_updates'],
@@ -562,7 +577,7 @@ class alpaca(ccxt.async_support.alpaca):
562
577
  },
563
578
  }
564
579
  self.watch(url, messageHash, request, messageHash, future)
565
- return future
580
+ return await future
566
581
 
567
582
  def handle_error_message(self, client: Client, message):
568
583
  #
@@ -599,7 +614,7 @@ class alpaca(ccxt.async_support.alpaca):
599
614
  if T == 'success' and msg == 'authenticated':
600
615
  self.handle_authenticate(client, data)
601
616
  return
602
- methods = {
617
+ methods: dict = {
603
618
  'error': self.handle_error_message,
604
619
  'b': self.handle_ohlcv,
605
620
  'q': self.handle_ticker,
@@ -612,7 +627,7 @@ class alpaca(ccxt.async_support.alpaca):
612
627
 
613
628
  def handle_trading_message(self, client: Client, message):
614
629
  stream = self.safe_string(message, 'stream')
615
- methods = {
630
+ methods: dict = {
616
631
  'authorization': self.handle_authenticate,
617
632
  'listening': self.handle_subscription,
618
633
  'trade_updates': self.handle_trade_update,
ccxt/pro/ascendex.py CHANGED
@@ -9,8 +9,8 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Trade
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
- from ccxt.base.errors import NetworkError
13
12
  from ccxt.base.errors import AuthenticationError
13
+ from ccxt.base.errors import NetworkError
14
14
 
15
15
 
16
16
  class ascendex(ccxt.async_support.ascendex):
@@ -25,6 +25,7 @@ class ascendex(ccxt.async_support.ascendex):
25
25
  'watchOrders': True,
26
26
  'watchTicker': False,
27
27
  'watchTrades': True,
28
+ 'watchTradesForSymbols': True,
28
29
  },
29
30
  'urls': {
30
31
  'api': {
@@ -55,20 +56,30 @@ class ascendex(ccxt.async_support.ascendex):
55
56
  async def watch_public(self, messageHash, params={}):
56
57
  url = self.urls['api']['ws']['public']
57
58
  id = self.nonce()
58
- request = {
59
+ request: dict = {
59
60
  'id': str(id),
60
61
  'op': 'sub',
61
62
  }
62
63
  message = self.extend(request, params)
63
64
  return await self.watch(url, messageHash, message, messageHash)
64
65
 
66
+ async def watch_public_multiple(self, messageHashes, params={}):
67
+ url = self.urls['api']['ws']['public']
68
+ id = self.nonce()
69
+ request: dict = {
70
+ 'id': str(id),
71
+ 'op': 'sub',
72
+ }
73
+ message = self.extend(request, params)
74
+ return await self.watch_multiple(url, messageHashes, message, messageHashes)
75
+
65
76
  async def watch_private(self, channel, messageHash, params={}):
66
77
  await self.load_accounts()
67
78
  accountGroup = self.safe_string(self.options, 'account-group')
68
79
  url = self.urls['api']['ws']['private']
69
80
  url = self.implode_params(url, {'accountGroup': accountGroup})
70
81
  id = self.nonce()
71
- request = {
82
+ request: dict = {
72
83
  'id': str(id),
73
84
  'op': 'sub',
74
85
  'ch': channel,
@@ -80,6 +91,9 @@ class ascendex(ccxt.async_support.ascendex):
80
91
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
81
92
  """
82
93
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
94
+
95
+ https://ascendex.github.io/ascendex-pro-api/#channel-bar-data
96
+
83
97
  :param str symbol: unified symbol of the market to fetch OHLCV data for
84
98
  :param str timeframe: the length of time each candle represents
85
99
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -140,22 +154,48 @@ class ascendex(ccxt.async_support.ascendex):
140
154
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
141
155
  """
142
156
  get the list of most recent trades for a particular symbol
157
+
158
+ https://ascendex.github.io/ascendex-pro-api/#channel-market-trades
159
+
143
160
  :param str symbol: unified symbol of the market to fetch trades for
144
161
  :param int [since]: timestamp in ms of the earliest trade to fetch
145
162
  :param int [limit]: the maximum amount of trades to fetch
146
163
  :param dict [params]: extra parameters specific to the exchange API endpoint
147
164
  :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
148
165
  """
166
+ return await self.watch_trades_for_symbols([symbol], since, limit, params)
167
+
168
+ async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
169
+ """
170
+ get the list of most recent trades for a list of symbols
171
+
172
+ https://ascendex.github.io/ascendex-pro-api/#channel-market-trades
173
+
174
+ :param str[] symbols: unified symbol of the market to fetch trades for
175
+ :param int [since]: timestamp in ms of the earliest trade to fetch
176
+ :param int [limit]: the maximum amount of trades to fetch
177
+ :param dict [params]: extra parameters specific to the exchange API endpoint
178
+ :param str [params.name]: the name of the method to call, 'trade' or 'aggTrade', default is 'trade'
179
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
180
+ """
149
181
  await self.load_markets()
150
- market = self.market(symbol)
151
- symbol = market['symbol']
152
- channel = 'trades' + ':' + market['id']
182
+ symbols = self.market_symbols(symbols, None, False, True, True)
183
+ marketIds = []
184
+ messageHashes = []
185
+ if symbols is not None:
186
+ for i in range(0, len(symbols)):
187
+ market = self.market(symbols[i])
188
+ marketIds.append(market['id'])
189
+ messageHashes.append('trades:' + market['id'])
190
+ channel = 'trades:' + ','.join(marketIds)
153
191
  params = self.extend(params, {
154
192
  'ch': channel,
155
193
  })
156
- trades = await self.watch_public(channel, params)
194
+ trades = await self.watch_public_multiple(messageHashes, params)
157
195
  if self.newUpdates:
158
- limit = trades.getLimit(symbol, limit)
196
+ first = self.safe_value(trades, 0)
197
+ tradeSymbol = self.safe_string(first, 'symbol')
198
+ limit = trades.getLimit(tradeSymbol, limit)
159
199
  return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
160
200
 
161
201
  def handle_trades(self, client: Client, message):
@@ -195,6 +235,9 @@ class ascendex(ccxt.async_support.ascendex):
195
235
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
196
236
  """
197
237
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
238
+
239
+ https://ascendex.github.io/ascendex-pro-api/#channel-level-2-order-book-updates
240
+
198
241
  :param str symbol: unified symbol of the market to fetch the order book for
199
242
  :param int [limit]: the maximum amount of order book entries to return
200
243
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -285,9 +328,9 @@ class ascendex(ccxt.async_support.ascendex):
285
328
  marketId = self.safe_string(message, 'symbol')
286
329
  symbol = self.safe_symbol(marketId)
287
330
  messageHash = channel + ':' + marketId
288
- orderbook = self.safe_value(self.orderbooks, symbol)
289
- if orderbook is None:
290
- orderbook = self.order_book({})
331
+ if not (symbol in self.orderbooks):
332
+ self.orderbooks[symbol] = self.order_book({})
333
+ orderbook = self.orderbooks[symbol]
291
334
  if orderbook['nonce'] is None:
292
335
  orderbook.cache.append(message)
293
336
  else:
@@ -342,6 +385,9 @@ class ascendex(ccxt.async_support.ascendex):
342
385
  async def watch_balance(self, params={}) -> Balances:
343
386
  """
344
387
  watch balance and get the amount of funds available for trading or funds locked in orders
388
+
389
+ https://ascendex.github.io/ascendex-pro-api/#channel-order-and-balance
390
+
345
391
  :param dict [params]: extra parameters specific to the exchange API endpoint
346
392
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
347
393
  """
@@ -454,7 +500,9 @@ class ascendex(ccxt.async_support.ascendex):
454
500
 
455
501
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
456
502
  """
457
- :see: https://ascendex.github.io/ascendex-pro-api/#channel-order-and-balance
503
+
504
+ https://ascendex.github.io/ascendex-pro-api/#channel-order-and-balance
505
+
458
506
  watches information on multiple orders made by the user
459
507
  :param str symbol: unified market symbol of the market orders were made in
460
508
  :param int [since]: the earliest time in ms to fetch orders for
@@ -830,7 +878,7 @@ class ascendex(ccxt.async_support.ascendex):
830
878
  # }
831
879
  #
832
880
  subject = self.safe_string(message, 'm')
833
- methods = {
881
+ methods: dict = {
834
882
  'ping': self.handle_ping,
835
883
  'auth': self.handle_authenticate,
836
884
  'sub': self.handle_subscription_status,
@@ -904,7 +952,7 @@ class ascendex(ccxt.async_support.ascendex):
904
952
  auth = timestamp + '+' + version + '/' + path
905
953
  secret = self.base64_to_binary(self.secret)
906
954
  signature = self.hmac(self.encode(auth), secret, hashlib.sha256, 'base64')
907
- request = {
955
+ request: dict = {
908
956
  'op': 'auth',
909
957
  'id': str(self.nonce()),
910
958
  't': timestamp,
ccxt/pro/bequant.py CHANGED
@@ -25,6 +25,10 @@ class bequant(hitbtc):
25
25
  'api': {
26
26
  'public': 'https://api.bequant.io/api/3',
27
27
  'private': 'https://api.bequant.io/api/3',
28
+ 'ws': {
29
+ 'public': 'wss://api.bequant.io/api/3/ws/public',
30
+ 'private': 'wss://api.bequant.io/api/3/ws/trading',
31
+ },
28
32
  },
29
33
  'www': 'https://bequant.io',
30
34
  'doc': [