ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__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 (529) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +8 -8
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +7 -7
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +8 -8
  68. ccxt/async_support/afratether.py +9 -9
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +31 -37
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +25 -24
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +30 -27
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +14 -13
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +29 -35
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +22 -21
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +28 -25
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +12 -11
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.0.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/__test__.py +0 -7
  438. ccxt/abstract/ace.py +0 -15
  439. ccxt/abstract/bitbay.py +0 -53
  440. ccxt/abstract/bitcoincom.py +0 -115
  441. ccxt/abstract/bitfinex2.py +0 -139
  442. ccxt/abstract/bitpanda.py +0 -35
  443. ccxt/abstract/bl3p.py +0 -19
  444. ccxt/abstract/coinlist.py +0 -54
  445. ccxt/abstract/currencycom.py +0 -68
  446. ccxt/abstract/hitbtc3.py +0 -115
  447. ccxt/abstract/idex.py +0 -26
  448. ccxt/abstract/kuna.py +0 -182
  449. ccxt/abstract/lykke.py +0 -29
  450. ccxt/abstract/poloniexfutures.py +0 -48
  451. ccxt/abstract/wazirx.py +0 -30
  452. ccxt/ace.py +0 -1012
  453. ccxt/async_support/ace.py +0 -1012
  454. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  455. ccxt/async_support/base/ws/fast_client.py +0 -96
  456. ccxt/async_support/bitbay.py +0 -17
  457. ccxt/async_support/bitcoincom.py +0 -17
  458. ccxt/async_support/bitfinex2.py +0 -3552
  459. ccxt/async_support/bitpanda.py +0 -16
  460. ccxt/async_support/bl3p.py +0 -485
  461. ccxt/async_support/coinlist.py +0 -2243
  462. ccxt/async_support/currencycom.py +0 -1950
  463. ccxt/async_support/hitbtc3.py +0 -16
  464. ccxt/async_support/idex.py +0 -1766
  465. ccxt/async_support/kuna.py +0 -1841
  466. ccxt/async_support/lykke.py +0 -1270
  467. ccxt/async_support/poloniexfutures.py +0 -1717
  468. ccxt/async_support/wazirx.py +0 -1224
  469. ccxt/bitbay.py +0 -17
  470. ccxt/bitcoincom.py +0 -17
  471. ccxt/bitfinex2.py +0 -3552
  472. ccxt/bitpanda.py +0 -16
  473. ccxt/bl3p.py +0 -485
  474. ccxt/coinlist.py +0 -2243
  475. ccxt/currencycom.py +0 -1950
  476. ccxt/hitbtc3.py +0 -16
  477. ccxt/idex.py +0 -1766
  478. ccxt/kuna.py +0 -1841
  479. ccxt/lykke.py +0 -1270
  480. ccxt/poloniexfutures.py +0 -1717
  481. ccxt/pro/bitcoincom.py +0 -34
  482. ccxt/pro/bitfinex2.py +0 -1083
  483. ccxt/pro/bitpanda.py +0 -15
  484. ccxt/pro/currencycom.py +0 -536
  485. ccxt/pro/idex.py +0 -672
  486. ccxt/pro/poloniexfutures.py +0 -990
  487. ccxt/pro/wazirx.py +0 -749
  488. ccxt/test/base/__init__.py +0 -29
  489. ccxt/test/base/test_account.py +0 -26
  490. ccxt/test/base/test_balance.py +0 -56
  491. ccxt/test/base/test_borrow_interest.py +0 -35
  492. ccxt/test/base/test_borrow_rate.py +0 -32
  493. ccxt/test/base/test_calculate_fee.py +0 -51
  494. ccxt/test/base/test_crypto.py +0 -127
  495. ccxt/test/base/test_currency.py +0 -76
  496. ccxt/test/base/test_datetime.py +0 -109
  497. ccxt/test/base/test_decimal_to_precision.py +0 -392
  498. ccxt/test/base/test_deep_extend.py +0 -68
  499. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  500. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  501. ccxt/test/base/test_funding_rate_history.py +0 -29
  502. ccxt/test/base/test_last_price.py +0 -31
  503. ccxt/test/base/test_ledger_entry.py +0 -45
  504. ccxt/test/base/test_ledger_item.py +0 -48
  505. ccxt/test/base/test_leverage_tier.py +0 -33
  506. ccxt/test/base/test_liquidation.py +0 -50
  507. ccxt/test/base/test_margin_mode.py +0 -24
  508. ccxt/test/base/test_margin_modification.py +0 -35
  509. ccxt/test/base/test_market.py +0 -193
  510. ccxt/test/base/test_number.py +0 -411
  511. ccxt/test/base/test_ohlcv.py +0 -33
  512. ccxt/test/base/test_open_interest.py +0 -32
  513. ccxt/test/base/test_order.py +0 -64
  514. ccxt/test/base/test_order_book.py +0 -69
  515. ccxt/test/base/test_position.py +0 -60
  516. ccxt/test/base/test_shared_methods.py +0 -353
  517. ccxt/test/base/test_status.py +0 -24
  518. ccxt/test/base/test_throttle.py +0 -126
  519. ccxt/test/base/test_ticker.py +0 -92
  520. ccxt/test/base/test_trade.py +0 -47
  521. ccxt/test/base/test_trading_fee.py +0 -26
  522. ccxt/test/base/test_transaction.py +0 -39
  523. ccxt/test/test_async.py +0 -1649
  524. ccxt/test/test_sync.py +0 -1648
  525. ccxt/wazirx.py +0 -1224
  526. ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
  527. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  528. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/pro/upbit.py CHANGED
@@ -5,20 +5,24 @@
5
5
 
6
6
  import ccxt.async_support
7
7
  from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
8
- from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Ticker, Trade
8
+ from ccxt.base.types import Any, Balances, Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
9
9
  from ccxt.async_support.base.ws.client import Client
10
10
  from typing import List
11
+ from ccxt.base.errors import NotSupported
11
12
 
12
13
 
13
14
  class upbit(ccxt.async_support.upbit):
14
15
 
15
- def describe(self):
16
+ def describe(self) -> Any:
16
17
  return self.deep_extend(super(upbit, self).describe(), {
17
18
  'has': {
18
19
  'ws': True,
19
20
  'watchOrderBook': True,
20
21
  'watchTicker': True,
22
+ 'watchTickers': True,
21
23
  'watchTrades': True,
24
+ 'watchTradesForSymbols': True,
25
+ 'watchOHLCV': True,
22
26
  'watchOrders': True,
23
27
  'watchMyTrades': True,
24
28
  'watchBalance': True,
@@ -59,37 +63,127 @@ class upbit(ccxt.async_support.upbit):
59
63
  messageHash = channel + ':' + marketId
60
64
  return await self.watch(url, messageHash, request, messageHash)
61
65
 
66
+ async def watch_public_multiple(self, symbols: Strings, channel, params={}):
67
+ await self.load_markets()
68
+ if symbols is None:
69
+ symbols = self.symbols
70
+ symbols = self.market_symbols(symbols)
71
+ marketIds = self.market_ids(symbols)
72
+ url = self.implode_params(self.urls['api']['ws'], {
73
+ 'hostname': self.hostname,
74
+ })
75
+ messageHashes = []
76
+ for i in range(0, len(marketIds)):
77
+ messageHashes.append(channel + ':' + marketIds[i])
78
+ request = [
79
+ {
80
+ 'ticket': self.uuid(),
81
+ },
82
+ {
83
+ 'type': channel,
84
+ 'codes': marketIds,
85
+ # 'isOnlySnapshot': False,
86
+ # 'isOnlyRealtime': False,
87
+ },
88
+ ]
89
+ return await self.watch_multiple(url, messageHashes, request, messageHashes)
90
+
62
91
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
63
92
  """
64
93
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
65
- :see: https://global-docs.upbit.com/reference/websocket-ticker
94
+
95
+ https://global-docs.upbit.com/reference/websocket-ticker
96
+
66
97
  :param str symbol: unified symbol of the market to fetch the ticker for
67
98
  :param dict [params]: extra parameters specific to the exchange API endpoint
68
99
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
69
100
  """
70
101
  return await self.watch_public(symbol, 'ticker')
71
102
 
103
+ async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
104
+ """
105
+ watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
106
+
107
+ https://global-docs.upbit.com/reference/websocket-ticker
108
+
109
+ :param str[] symbols: unified symbol of the market to fetch the ticker for
110
+ :param dict [params]: extra parameters specific to the exchange API endpoint
111
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
112
+ """
113
+ newTickers = await self.watch_public_multiple(symbols, 'ticker')
114
+ if self.newUpdates:
115
+ tickers: dict = {}
116
+ tickers[newTickers['symbol']] = newTickers
117
+ return tickers
118
+ return self.filter_by_array(self.tickers, 'symbol', symbols)
119
+
72
120
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
73
121
  """
74
122
  get the list of most recent trades for a particular symbol
75
- :see: https://global-docs.upbit.com/reference/websocket-trade
123
+
124
+ https://global-docs.upbit.com/reference/websocket-trade
125
+
76
126
  :param str symbol: unified symbol of the market to fetch trades for
77
127
  :param int [since]: timestamp in ms of the earliest trade to fetch
78
128
  :param int [limit]: the maximum amount of trades to fetch
79
129
  :param dict [params]: extra parameters specific to the exchange API endpoint
80
130
  :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
81
131
  """
132
+ return await self.watch_trades_for_symbols([symbol], since, limit, params)
133
+
134
+ async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
135
+ """
136
+ get the list of most recent trades for a list of symbols
137
+
138
+ https://global-docs.upbit.com/reference/websocket-trade
139
+
140
+ :param str[] symbols: unified symbol of the market to fetch trades for
141
+ :param int [since]: timestamp in ms of the earliest trade to fetch
142
+ :param int [limit]: the maximum amount of trades to fetch
143
+ :param dict [params]: extra parameters specific to the exchange API endpoint
144
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
145
+ """
82
146
  await self.load_markets()
83
- symbol = self.symbol(symbol)
84
- trades = await self.watch_public(symbol, 'trade')
147
+ symbols = self.market_symbols(symbols, None, False, True, True)
148
+ channel = 'trade'
149
+ messageHashes = []
150
+ url = self.implode_params(self.urls['api']['ws'], {
151
+ 'hostname': self.hostname,
152
+ })
153
+ if symbols is not None:
154
+ for i in range(0, len(symbols)):
155
+ market = self.market(symbols[i])
156
+ marketId = market['id']
157
+ symbol = market['symbol']
158
+ self.options[channel] = self.safe_value(self.options, channel, {})
159
+ self.options[channel][symbol] = True
160
+ messageHashes.append(channel + ':' + marketId)
161
+ optionSymbols = list(self.options[channel].keys())
162
+ marketIds = self.market_ids(optionSymbols)
163
+ request = [
164
+ {
165
+ 'ticket': self.uuid(),
166
+ },
167
+ {
168
+ 'type': channel,
169
+ 'codes': marketIds,
170
+ # 'isOnlySnapshot': False,
171
+ # 'isOnlyRealtime': False,
172
+ },
173
+ ]
174
+ trades = await self.watch_multiple(url, messageHashes, request, messageHashes)
85
175
  if self.newUpdates:
86
- limit = trades.getLimit(symbol, limit)
176
+ first = self.safe_value(trades, 0)
177
+ tradeSymbol = self.safe_string(first, 'symbol')
178
+ limit = trades.getLimit(tradeSymbol, limit)
87
179
  return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
88
180
 
89
181
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
90
182
  """
91
183
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
92
- :see: https://global-docs.upbit.com/reference/websocket-orderbook
184
+
185
+ https://global-docs.upbit.com/reference/websocket-orderbook
186
+
93
187
  :param str symbol: unified symbol of the market to fetch the order book for
94
188
  :param int [limit]: the maximum amount of order book entries to return
95
189
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -98,6 +192,25 @@ class upbit(ccxt.async_support.upbit):
98
192
  orderbook = await self.watch_public(symbol, 'orderbook')
99
193
  return orderbook.limit()
100
194
 
195
+ async def watch_ohlcv(self, symbol: str, timeframe='1s', since: Int = None, limit: Int = None, params={}) -> List[list]:
196
+ """
197
+ watches information an OHLCV with timestamp, openingPrice, highPrice, lowPrice, tradePrice, baseVolume in 1s.
198
+
199
+ https://docs.upbit.com/kr/reference/websocket-candle for Upbit KR
200
+ https://global-docs.upbit.com/reference/websocket-candle for Upbit Global
201
+
202
+ :param str symbol: unified market symbol of the market orders were made in
203
+ :param str timeframe: specifies the OHLCV candle interval to watch. As of now, Upbit only supports 1s candles.
204
+ :param int [since]: the earliest time in ms to fetch orders for
205
+ :param int [limit]: the maximum number of order structures to retrieve
206
+ :param dict [params]: extra parameters specific to the exchange API endpoint
207
+ :returns OHLCV[]: a list of `OHLCV structures <https://docs.ccxt.com/#/?id=ohlcv-structure>`
208
+ """
209
+ if timeframe != '1s':
210
+ raise NotSupported(self.id + ' watchOHLCV does not support' + timeframe + ' candle.')
211
+ timeFrameOHLCV = 'candle.' + timeframe
212
+ return await self.watch_public(symbol, timeFrameOHLCV)
213
+
101
214
  def handle_ticker(self, client: Client, message):
102
215
  # 2020-03-17T23:07:36.511Z "onMessage" <Buffer 7b 22 74 79 70 65 22 3a 22 74 69 63 6b 65 72 22 2c 22 63 6f 64 65 22 3a 22 42 54 43 2d 45 54 48 22 2c 22 6f 70 65 6e 69 6e 67 5f 70 72 69 63 65 22 3a ... >
103
216
  # {type: "ticker",
@@ -221,6 +334,26 @@ class upbit(ccxt.async_support.upbit):
221
334
  messageHash = 'trade:' + marketId
222
335
  client.resolve(stored, messageHash)
223
336
 
337
+ def handle_ohlcv(self, client: Client, message):
338
+ # {
339
+ # type: 'candle.1s',
340
+ # code: 'KRW-USDT',
341
+ # candle_date_time_utc: '2025-04-22T09:50:34',
342
+ # candle_date_time_kst: '2025-04-22T18:50:34',
343
+ # opening_price: 1438,
344
+ # high_price: 1438,
345
+ # low_price: 1438,
346
+ # trade_price: 1438,
347
+ # candle_acc_trade_volume: 1145.8935,
348
+ # candle_acc_trade_price: 1647794.853,
349
+ # timestamp: 1745315434125,
350
+ # stream_type: 'REALTIME'
351
+ # }
352
+ marketId = self.safe_string(message, 'code')
353
+ messageHash = 'candle.1s:' + marketId
354
+ ohlcv = self.parse_ohlcv(message)
355
+ client.resolve(ohlcv, messageHash)
356
+
224
357
  async def authenticate(self, params={}):
225
358
  self.check_required_credentials()
226
359
  wsOptions: dict = self.safe_dict(self.options, 'ws', {})
@@ -270,7 +403,9 @@ class upbit(ccxt.async_support.upbit):
270
403
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
271
404
  """
272
405
  watches information on multiple orders made by the user
273
- :see: https://global-docs.upbit.com/reference/websocket-myorder
406
+
407
+ https://global-docs.upbit.com/reference/websocket-myorder
408
+
274
409
  :param str symbol: unified market symbol of the market orders were made in
275
410
  :param int [since]: the earliest time in ms to fetch orders for
276
411
  :param int [limit]: the maximum number of order structures to retrieve
@@ -288,12 +423,14 @@ class upbit(ccxt.async_support.upbit):
288
423
  async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
289
424
  """
290
425
  watches information on multiple trades made by the user
291
- :see: https://global-docs.upbit.com/reference/websocket-myorder
426
+
427
+ https://global-docs.upbit.com/reference/websocket-myorder
428
+
292
429
  :param str symbol: unified market symbol of the market orders were made in
293
430
  :param int [since]: the earliest time in ms to fetch orders for
294
431
  :param int [limit]: the maximum number of order structures to retrieve
295
432
  :param dict [params]: extra parameters specific to the exchange API endpoint
296
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
433
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
297
434
  """
298
435
  await self.load_markets()
299
436
  channel = 'myOrder'
@@ -461,7 +598,9 @@ class upbit(ccxt.async_support.upbit):
461
598
 
462
599
  async def watch_balance(self, params={}) -> Balances:
463
600
  """
464
- :see: https://global-docs.upbit.com/reference/websocket-myasset
601
+
602
+ https://global-docs.upbit.com/reference/websocket-myasset
603
+
465
604
  query for balance and get the amount of funds available for trading or funds locked in orders
466
605
  :param dict [params]: extra parameters specific to the exchange API endpoint
467
606
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -513,6 +652,7 @@ class upbit(ccxt.async_support.upbit):
513
652
  'trade': self.handle_trades,
514
653
  'myOrder': self.handle_my_order,
515
654
  'myAsset': self.handle_balance,
655
+ 'candle.1s': self.handle_ohlcv,
516
656
  }
517
657
  methodName = self.safe_string(message, 'type')
518
658
  method = self.safe_value(methods, methodName)
ccxt/pro/vertex.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import ccxt.async_support
7
7
  from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide
8
- from ccxt.base.types import Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Trade
8
+ from ccxt.base.types import Any, Bool, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Trade
9
9
  from ccxt.async_support.base.ws.client import Client
10
10
  from typing import List
11
11
  from ccxt.base.errors import AuthenticationError
@@ -16,7 +16,7 @@ from ccxt.base.precise import Precise
16
16
 
17
17
  class vertex(ccxt.async_support.vertex):
18
18
 
19
- def describe(self):
19
+ def describe(self) -> Any:
20
20
  return self.deep_extend(super(vertex, self).describe(), {
21
21
  'has': {
22
22
  'ws': True,
@@ -55,6 +55,11 @@ class vertex(ccxt.async_support.vertex):
55
55
  },
56
56
  'ws': {
57
57
  'inflate': True,
58
+ 'options': {
59
+ 'headers': {
60
+ 'Sec-WebSocket-Extensions': 'permessage-deflate', # requires permessage-deflate extension, maybe we can set self in client implementation when self.inflateis True
61
+ },
62
+ },
58
63
  },
59
64
  },
60
65
  'streaming': {
@@ -893,7 +898,7 @@ class vertex(ccxt.async_support.vertex):
893
898
  cachedOrders.append(parsed)
894
899
  client.resolve(self.orders, marketId + '@' + topic)
895
900
 
896
- def handle_error_message(self, client: Client, message):
901
+ def handle_error_message(self, client: Client, message) -> Bool:
897
902
  #
898
903
  # {
899
904
  # result: null,
ccxt/pro/whitebit.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  import ccxt.async_support
7
7
  from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheByTimestamp
8
- from ccxt.base.types import Balances, Int, Order, OrderBook, Str, Ticker, Trade
8
+ from ccxt.base.types import Any, Balances, Bool, Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
9
9
  from ccxt.async_support.base.ws.client import Client
10
10
  from typing import List
11
11
  from ccxt.base.errors import AuthenticationError
@@ -16,7 +16,7 @@ from ccxt.base.precise import Precise
16
16
 
17
17
  class whitebit(ccxt.async_support.whitebit):
18
18
 
19
- def describe(self):
19
+ def describe(self) -> Any:
20
20
  return self.deep_extend(super(whitebit, self).describe(), {
21
21
  'has': {
22
22
  'ws': True,
@@ -26,7 +26,9 @@ class whitebit(ccxt.async_support.whitebit):
26
26
  'watchOrderBook': True,
27
27
  'watchOrders': True,
28
28
  'watchTicker': True,
29
+ 'watchTickers': True,
29
30
  'watchTrades': True,
31
+ 'watchTradesForSymbols': False,
30
32
  },
31
33
  'urls': {
32
34
  'api': {
@@ -67,6 +69,9 @@ class whitebit(ccxt.async_support.whitebit):
67
69
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
68
70
  """
69
71
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
72
+
73
+ https://docs.whitebit.com/public/websocket/#kline
74
+
70
75
  :param str symbol: unified symbol of the market to fetch OHLCV data for
71
76
  :param str timeframe: the length of time each candle represents
72
77
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -135,6 +140,9 @@ class whitebit(ccxt.async_support.whitebit):
135
140
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
136
141
  """
137
142
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
143
+
144
+ https://docs.whitebit.com/public/websocket/#market-depth
145
+
138
146
  :param str symbol: unified symbol of the market to fetch the order book for
139
147
  :param int [limit]: the maximum amount of order book entries to return
140
148
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -233,6 +241,9 @@ class whitebit(ccxt.async_support.whitebit):
233
241
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
234
242
  """
235
243
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
244
+
245
+ https://docs.whitebit.com/public/websocket/#market-statistics
246
+
236
247
  :param str symbol: unified symbol of the market to fetch the ticker for
237
248
  :param dict [params]: extra parameters specific to the exchange API endpoint
238
249
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -245,6 +256,35 @@ class whitebit(ccxt.async_support.whitebit):
245
256
  # every time we want to subscribe to another market we have to "re-subscribe" sending it all again
246
257
  return await self.watch_multiple_subscription(messageHash, method, symbol, False, params)
247
258
 
259
+ async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
260
+ """
261
+ watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
262
+
263
+ https://docs.whitebit.com/public/websocket/#market-statistics
264
+
265
+ :param str[] [symbols]: unified symbol of the market to fetch the ticker for
266
+ :param dict [params]: extra parameters specific to the exchange API endpoint
267
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
268
+ """
269
+ await self.load_markets()
270
+ symbols = self.market_symbols(symbols, None, False)
271
+ method = 'market_subscribe'
272
+ url = self.urls['api']['ws']
273
+ id = self.nonce()
274
+ messageHashes = []
275
+ args = []
276
+ for i in range(0, len(symbols)):
277
+ market = self.market(symbols[i])
278
+ messageHashes.append('ticker:' + market['symbol'])
279
+ args.append(market['id'])
280
+ request: dict = {
281
+ 'id': id,
282
+ 'method': method,
283
+ 'params': args,
284
+ }
285
+ await self.watch_multiple(url, messageHashes, self.extend(request, params), messageHashes)
286
+ return self.filter_by_array(self.tickers, 'symbol', symbols)
287
+
248
288
  def handle_ticker(self, client: Client, message):
249
289
  #
250
290
  # {
@@ -295,6 +335,9 @@ class whitebit(ccxt.async_support.whitebit):
295
335
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
296
336
  """
297
337
  get the list of most recent trades for a particular symbol
338
+
339
+ https://docs.whitebit.com/public/websocket/#market-trades
340
+
298
341
  :param str symbol: unified symbol of the market to fetch trades for
299
342
  :param int [since]: timestamp in ms of the earliest trade to fetch
300
343
  :param int [limit]: the maximum amount of trades to fetch
@@ -356,6 +399,9 @@ class whitebit(ccxt.async_support.whitebit):
356
399
  async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
357
400
  """
358
401
  watches trades made by the user
402
+
403
+ https://docs.whitebit.com/private/websocket/#deals
404
+
359
405
  :param str symbol: unified market symbol
360
406
  :param int [since]: the earliest time in ms to fetch trades for
361
407
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -449,11 +495,14 @@ class whitebit(ccxt.async_support.whitebit):
449
495
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
450
496
  """
451
497
  watches information on multiple orders made by the user
498
+
499
+ https://docs.whitebit.com/private/websocket/#orders-pending
500
+
452
501
  :param str symbol: unified market symbol of the market orders were made in
453
502
  :param int [since]: the earliest time in ms to fetch orders for
454
503
  :param int [limit]: the maximum number of order structures to retrieve
455
504
  :param dict [params]: extra parameters specific to the exchange API endpoint
456
- :returns dict[]: a list of [order structures]{@link https://docs.ccxt.com/#/?id=order-structure
505
+ :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
457
506
  """
458
507
  if symbol is None:
459
508
  raise ArgumentsRequired(self.id + ' watchOrders() requires a symbol argument')
@@ -612,6 +661,10 @@ class whitebit(ccxt.async_support.whitebit):
612
661
  async def watch_balance(self, params={}) -> Balances:
613
662
  """
614
663
  watch balance and get the amount of funds available for trading or funds locked in orders
664
+
665
+ https://docs.whitebit.com/private/websocket/#balance-spot
666
+ https://docs.whitebit.com/private/websocket/#balance-margin
667
+
615
668
  :param dict [params]: extra parameters specific to the exchange API endpoint
616
669
  :param str [params.type]: spot or contract if not provided self.options['defaultType'] is used
617
670
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -781,7 +834,7 @@ class whitebit(ccxt.async_support.whitebit):
781
834
  future.resolve(1)
782
835
  return message
783
836
 
784
- def handle_error_message(self, client: Client, message):
837
+ def handle_error_message(self, client: Client, message) -> Bool:
785
838
  #
786
839
  # {
787
840
  # "error": {code: 1, message: "invalid argument"},
@@ -856,7 +909,7 @@ class whitebit(ccxt.async_support.whitebit):
856
909
  client.lastPong = self.milliseconds()
857
910
  return message
858
911
 
859
- def ping(self, client):
912
+ def ping(self, client: Client):
860
913
  return {
861
914
  'id': 0,
862
915
  'method': 'ping',