ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.1__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 +8 -8
  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 +10 -10
  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 +32 -38
  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 +32 -27
  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 +34 -30
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +15 -14
  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 +30 -36
  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 +29 -24
  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 +32 -28
  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 +13 -12
  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.1.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.1.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.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.1.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/top_level.txt +0 -0
@@ -6,7 +6,7 @@
6
6
  import ccxt.async_support
7
7
  from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById
8
8
  import hashlib
9
- from ccxt.base.types import Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
9
+ from ccxt.base.types import Any, Bool, Int, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
@@ -18,7 +18,7 @@ from ccxt.base.errors import BadSymbol
18
18
 
19
19
  class coinbaseexchange(ccxt.async_support.coinbaseexchange):
20
20
 
21
- def describe(self):
21
+ def describe(self) -> Any:
22
22
  return self.deep_extend(super(coinbaseexchange, self).describe(), {
23
23
  'has': {
24
24
  'ws': True,
@@ -163,7 +163,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
163
163
  async def watch_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
164
164
  """
165
165
  get the list of most recent trades for a particular symbol
166
- :param str symbol: unified symbol of the market to fetch trades for
166
+ :param str[] symbols: unified symbol of the market to fetch trades for
167
167
  :param int [since]: timestamp in ms of the earliest trade to fetch
168
168
  :param int [limit]: the maximum amount of trades to fetch
169
169
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -189,7 +189,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
189
189
  :param int [since]: the earliest time in ms to fetch trades for
190
190
  :param int [limit]: the maximum number of trade structures to retrieve
191
191
  :param dict [params]: extra parameters specific to the exchange API endpoint
192
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
192
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
193
193
  """
194
194
  if symbol is None:
195
195
  raise ArgumentsRequired(self.id + ' watchMyTrades() requires a symbol argument')
@@ -203,14 +203,14 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
203
203
  limit = trades.getLimit(symbol, limit)
204
204
  return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
205
205
 
206
- async def watch_my_trades_for_symbols(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
206
+ async def watch_my_trades_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Trade]:
207
207
  """
208
208
  watches information on multiple trades made by the user
209
209
  :param str[] symbols: unified symbol of the market to fetch trades for
210
210
  :param int [since]: the earliest time in ms to fetch trades for
211
211
  :param int [limit]: the maximum number of trade structures to retrieve
212
212
  :param dict [params]: extra parameters specific to the exchange API endpoint
213
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
213
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
214
214
  """
215
215
  symbols = self.market_symbols(symbols, None, False)
216
216
  await self.load_markets()
@@ -224,7 +224,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
224
224
  limit = trades.getLimit(tradeSymbol, limit)
225
225
  return self.filter_by_since_limit(trades, since, limit, 'timestamp', True)
226
226
 
227
- async def watch_orders_for_symbols(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
227
+ async def watch_orders_for_symbols(self, symbols: List[str], since: Int = None, limit: Int = None, params={}) -> List[Order]:
228
228
  """
229
229
  watches information on multiple orders made by the user
230
230
  :param str[] symbols: unified symbol of the market to fetch orders for
@@ -841,7 +841,7 @@ class coinbaseexchange(ccxt.async_support.coinbaseexchange):
841
841
  #
842
842
  return message
843
843
 
844
- def handle_error_message(self, client: Client, message):
844
+ def handle_error_message(self, client: Client, message) -> Bool:
845
845
  #
846
846
  # {
847
847
  # "type": "error",
@@ -4,9 +4,9 @@
4
4
  # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
5
 
6
6
  import ccxt.async_support
7
- from ccxt.async_support.base.ws.cache import ArrayCache
7
+ from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheByTimestamp
8
8
  import hashlib
9
- from ccxt.base.types import Int, Market, OrderBook, Strings, Ticker, FundingRate, FundingRates, Trade
9
+ from ccxt.base.types import Any, Bool, Int, Market, OrderBook, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
@@ -16,7 +16,7 @@ from ccxt.base.errors import NotSupported
16
16
 
17
17
  class coinbaseinternational(ccxt.async_support.coinbaseinternational):
18
18
 
19
- def describe(self):
19
+ def describe(self) -> Any:
20
20
  return self.deep_extend(super(coinbaseinternational, self).describe(), {
21
21
  'has': {
22
22
  'ws': True,
@@ -27,12 +27,12 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
27
27
  'watchTicker': True,
28
28
  'watchBalance': False,
29
29
  'watchMyTrades': False,
30
- 'watchOHLCV': False,
30
+ 'watchOHLCV': True,
31
31
  'watchOHLCVForSymbols': False,
32
32
  'watchOrders': False,
33
33
  'watchOrdersForSymbols': False,
34
34
  'watchPositions': False,
35
- 'watchTickers': False,
35
+ 'watchTickers': True,
36
36
  'createOrderWs': False,
37
37
  'editOrderWs': False,
38
38
  'cancelOrderWs': False,
@@ -58,6 +58,14 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
58
58
  'tradesLimit': 1000,
59
59
  'ordersLimit': 1000,
60
60
  'myTradesLimit': 1000,
61
+ 'timeframes': {
62
+ '1m': 'CANDLES_ONE_MINUTE',
63
+ '5m': 'CANDLES_FIVE_MINUTES',
64
+ '30m': 'CANDLES_THIRTY_MINUTES',
65
+ '1h': 'CANDLES_ONE_HOUR',
66
+ '2h': 'CANDLES_TWO_HOURS',
67
+ '1d': 'CANDLES_ONE_DAY',
68
+ },
61
69
  },
62
70
  'exceptions': {
63
71
  'exact': {
@@ -68,26 +76,32 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
68
76
 
69
77
  async def subscribe(self, name: str, symbols: Strings = None, params={}):
70
78
  """
71
- * @ignore
79
+ @ignore
72
80
  subscribes to a websocket channel
73
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
81
+
82
+ https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
83
+
74
84
  :param str name: the name of the channel
75
85
  :param str[] [symbols]: unified market symbol
76
86
  :param dict [params]: extra parameters specific to the exchange API endpoint
77
87
  :returns dict: subscription to a websocket channel
78
88
  """
89
+ await self.load_markets()
79
90
  self.check_required_credentials()
80
91
  market = None
81
92
  messageHash = name
82
- productIds = []
93
+ productIds = None
83
94
  if symbols is None:
84
- symbols = self.symbols
95
+ symbols = self.get_active_symbols()
85
96
  symbolsLength = len(symbols)
97
+ messageHashes = []
86
98
  if symbolsLength > 1:
87
99
  parsedSymbols = self.market_symbols(symbols)
88
100
  marketIds = self.market_ids(parsedSymbols)
89
101
  productIds = marketIds
90
- messageHash = messageHash + '::' + ','.join(parsedSymbols)
102
+ for i in range(0, len(parsedSymbols)):
103
+ messageHashes.append(name + '::' + parsedSymbols[i])
104
+ # messageHash = messageHash + '::' + ','.join(parsedSymbols)
91
105
  elif symbolsLength == 1:
92
106
  market = self.market(symbols[0])
93
107
  messageHash = name + '::' + market['symbol']
@@ -100,25 +114,32 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
100
114
  signature = self.hmac(self.encode(auth), self.base64_to_binary(self.secret), hashlib.sha256, 'base64')
101
115
  subscribe: dict = {
102
116
  'type': 'SUBSCRIBE',
103
- 'product_ids': productIds,
117
+ # 'product_ids': productIds,
104
118
  'channels': [name],
105
119
  'time': timestamp,
106
120
  'key': self.apiKey,
107
121
  'passphrase': self.password,
108
122
  'signature': signature,
109
123
  }
124
+ if productIds is not None:
125
+ subscribe['product_ids'] = productIds
126
+ if symbolsLength > 1:
127
+ return await self.watch_multiple(url, messageHashes, self.extend(subscribe, params), messageHashes)
110
128
  return await self.watch(url, messageHash, self.extend(subscribe, params), messageHash)
111
129
 
112
130
  async def subscribe_multiple(self, name: str, symbols: Strings = None, params={}):
113
131
  """
114
- * @ignore
132
+ @ignore
115
133
  subscribes to a websocket channel using watchMultiple
116
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
134
+
135
+ https://docs.cloud.coinbase.com/intx/docs/websocket-overview#subscribe
136
+
117
137
  :param str name: the name of the channel
118
- :param string|str[] [symbol]: unified market symbol
138
+ :param string|str[] [symbols]: unified market symbol
119
139
  :param dict [params]: extra parameters specific to the exchange API endpoint
120
140
  :returns dict: subscription to a websocket channel
121
141
  """
142
+ await self.load_markets()
122
143
  self.check_required_credentials()
123
144
  if self.is_empty(symbols):
124
145
  symbols = self.symbols
@@ -151,21 +172,27 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
151
172
  async def watch_funding_rate(self, symbol: str, params={}) -> FundingRate:
152
173
  """
153
174
  watch the current funding rate
154
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
175
+
176
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
177
+
155
178
  :param str symbol: unified market symbol
156
179
  :param dict [params]: extra parameters specific to the exchange API endpoint
157
180
  :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
158
181
  """
182
+ await self.load_markets()
159
183
  return await self.subscribe('RISK', [symbol], params)
160
184
 
161
185
  async def watch_funding_rates(self, symbols: List[str], params={}) -> FundingRates:
162
186
  """
163
187
  watch the funding rate for multiple markets
164
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
188
+
189
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#funding-channel
190
+
165
191
  :param str[]|None symbols: list of unified market symbols
166
192
  :param dict [params]: extra parameters specific to the exchange API endpoint
167
193
  :returns dict: a dictionary of `funding rates structures <https://docs.ccxt.com/#/?id=funding-rates-structure>`, indexe by market symbols
168
194
  """
195
+ await self.load_markets()
169
196
  fundingRate = await self.subscribe_multiple('RISK', symbols, params)
170
197
  symbol = self.safe_string(fundingRate, 'symbol')
171
198
  if self.newUpdates:
@@ -177,15 +204,50 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
177
204
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
178
205
  """
179
206
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
180
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
207
+
208
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
209
+
181
210
  :param str [symbol]: unified symbol of the market to fetch the ticker for
182
211
  :param dict [params]: extra parameters specific to the exchange API endpoint
212
+ :param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'LEVEL1'
183
213
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
184
214
  """
215
+ await self.load_markets()
185
216
  channel = None
186
217
  channel, params = self.handle_option_and_params(params, 'watchTicker', 'channel', 'LEVEL1')
187
218
  return await self.subscribe(channel, [symbol], params)
188
219
 
220
+ def get_active_symbols(self):
221
+ symbols = self.symbols
222
+ output = []
223
+ for i in range(0, len(symbols)):
224
+ symbol = symbols[i]
225
+ market = self.markets[symbol]
226
+ if market['active']:
227
+ output.append(symbol)
228
+ return output
229
+
230
+ async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
231
+ """
232
+ watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
233
+
234
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#instruments-channel
235
+
236
+ :param str[] [symbols]: unified symbol of the market to fetch the ticker for
237
+ :param dict [params]: extra parameters specific to the exchange API endpoint
238
+ :param str [params.channel]: the channel to watch, 'LEVEL1' or 'INSTRUMENTS', default is 'INSTLEVEL1UMENTS'
239
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
240
+ """
241
+ await self.load_markets()
242
+ channel = None
243
+ channel, params = self.handle_option_and_params(params, 'watchTickers', 'channel', 'LEVEL1')
244
+ ticker = await self.subscribe(channel, symbols, params)
245
+ if self.newUpdates:
246
+ result: dict = {}
247
+ result[ticker['symbol']] = ticker
248
+ return result
249
+ return self.filter_by_array(self.tickers, 'symbol', symbols)
250
+
189
251
  def handle_instrument(self, client: Client, message):
190
252
  #
191
253
  # {
@@ -243,6 +305,33 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
243
305
  # "channel":"INSTRUMENTS",
244
306
  # "type":"SNAPSHOT"
245
307
  # }
308
+ # instruments
309
+ # {
310
+ # sequence: 0,
311
+ # instrument_type: 'PERP',
312
+ # instrument_mode: 'standard',
313
+ # base_asset_name: 'BTC',
314
+ # quote_asset_name: 'USDC',
315
+ # base_increment: '0.0001',
316
+ # quote_increment: '0.1',
317
+ # avg_daily_quantity: '502.8845',
318
+ # avg_daily_volume: '3.1495242961566668E7',
319
+ # total30_day_quantity: '15086.535',
320
+ # total30_day_volume: '9.44857288847E8',
321
+ # total24_hour_quantity: '5.0',
322
+ # total24_hour_volume: '337016.5',
323
+ # base_imf: '0.1',
324
+ # min_quantity: '0.0001',
325
+ # position_size_limit: '800',
326
+ # funding_interval: '3600000000000',
327
+ # trading_state: 'trading',
328
+ # last_updated_time: '2024-07-30T15:00:00Z',
329
+ # default_initial_margin: '0.2',
330
+ # base_asset_multiplier: '1.0',
331
+ # channel: 'INSTRUMENTS',
332
+ # type: 'SNAPSHOT',
333
+ # time: '2024-07-30T15:26:56.766Z',
334
+ # }
246
335
  #
247
336
  marketId = self.safe_string(ticker, 'product_id')
248
337
  datetime = self.safe_string(ticker, 'time')
@@ -265,8 +354,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
265
354
  'change': None,
266
355
  'percentage': None,
267
356
  'average': None,
268
- 'baseVolume': self.safe_string(ticker, 'total_24_hour_quantity'),
269
- 'quoteVolume': self.safe_string(ticker, 'total_24_hour_volume'),
357
+ 'baseVolume': self.safe_string_2(ticker, 'total_24_hour_quantity', 'total24_hour_quantity'),
358
+ 'quoteVolume': self.safe_string_2(ticker, 'total_24_hour_volume', 'total24_hour_volume'),
270
359
  })
271
360
 
272
361
  def handle_ticker(self, client: Client, message):
@@ -338,10 +427,71 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
338
427
  'previousClose': None,
339
428
  })
340
429
 
430
+ async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
431
+ """
432
+ watches historical candlestick data containing the open, high, low, close price, and the volume of a market
433
+
434
+ https://docs.cdp.coinbase.com/intx/docs/websocket-channels#candles-channel
435
+
436
+ :param str symbol: unified symbol of the market to fetch OHLCV data for
437
+ :param str timeframe: the length of time each candle represents
438
+ :param int [since]: timestamp in ms of the earliest candle to fetch
439
+ :param int [limit]: the maximum amount of candles to fetch
440
+ :param dict [params]: extra parameters specific to the exchange API endpoint
441
+ :returns int[][]: A list of candles ordered, open, high, low, close, volume
442
+ """
443
+ await self.load_markets()
444
+ market = self.market(symbol)
445
+ symbol = market['symbol']
446
+ options = self.safe_dict(self.options, 'timeframes', {})
447
+ interval = self.safe_string(options, timeframe, timeframe)
448
+ ohlcv = await self.subscribe(interval, [symbol], params)
449
+ if self.newUpdates:
450
+ limit = ohlcv.getLimit(symbol, limit)
451
+ return self.filter_by_since_limit(ohlcv, since, limit, 0, True)
452
+
453
+ def handle_ohlcv(self, client: Client, message):
454
+ #
455
+ # {
456
+ # "sequence": 0,
457
+ # "product_id": "BTC-PERP",
458
+ # "channel": "CANDLES_ONE_MINUTE",
459
+ # "type": "SNAPSHOT",
460
+ # "candles": [
461
+ # {
462
+ # "time": "2023-05-10T14:58:47.000Z",
463
+ # "low": "28787.8",
464
+ # "high": "28788.8",
465
+ # "open": "28788.8",
466
+ # "close": "28787.8",
467
+ # "volume": "0.466"
468
+ # },
469
+ # ]
470
+ # }
471
+ #
472
+ messageHash = self.safe_string(message, 'channel')
473
+ marketId = self.safe_string(message, 'product_id')
474
+ market = self.safe_market(marketId)
475
+ symbol = market['symbol']
476
+ timeframe = self.find_timeframe(messageHash)
477
+ self.ohlcvs[symbol] = self.safe_value(self.ohlcvs, symbol, {})
478
+ if self.safe_value(self.ohlcvs[symbol], timeframe) is None:
479
+ limit = self.safe_integer(self.options, 'OHLCVLimit', 1000)
480
+ self.ohlcvs[symbol][timeframe] = ArrayCacheByTimestamp(limit)
481
+ stored = self.ohlcvs[symbol][timeframe]
482
+ data = self.safe_list(message, 'candles', [])
483
+ for i in range(0, len(data)):
484
+ tick = data[i]
485
+ parsed = self.parse_ohlcv(tick, market)
486
+ stored.append(parsed)
487
+ client.resolve(stored, messageHash + '::' + symbol)
488
+
341
489
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
342
490
  """
343
491
  get the list of most recent trades for a particular symbol
344
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
492
+
493
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#match-channel
494
+
345
495
  :param str symbol: unified symbol of the market to fetch trades for
346
496
  :param int [since]: timestamp in ms of the earliest trade to fetch
347
497
  :param int [limit]: the maximum amount of trades to fetch
@@ -430,7 +580,9 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
430
580
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
431
581
  """
432
582
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
433
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
583
+
584
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
585
+
434
586
  :param str symbol: unified symbol of the market to fetch the order book for
435
587
  :param int [limit]: the maximum amount of order book entries to return
436
588
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -441,8 +593,10 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
441
593
  async def watch_order_book_for_symbols(self, symbols: List[str], limit: Int = None, params={}) -> OrderBook:
442
594
  """
443
595
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
444
- :see: https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
445
- :param str symbol: unified symbol of the market to fetch the order book for
596
+
597
+ https://docs.cloud.coinbase.com/intx/docs/websocket-channels#level2-channel
598
+
599
+ :param str[] symbols:
446
600
  :param int [limit]: the maximum amount of order book entries to return
447
601
  :param dict [params]: extra parameters specific to the exchange API endpoint
448
602
  :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
@@ -575,7 +729,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
575
729
  self.fundingRates[fundingRate['symbol']] = fundingRate
576
730
  client.resolve(fundingRate, channel + '::' + fundingRate['symbol'])
577
731
 
578
- def handle_error_message(self, client: Client, message):
732
+ def handle_error_message(self, client: Client, message) -> Bool:
579
733
  #
580
734
  # {
581
735
  # message: 'Failed to subscribe',
@@ -601,7 +755,7 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
601
755
  def handle_message(self, client, message):
602
756
  if self.handle_error_message(client, message):
603
757
  return
604
- channel = self.safe_string(message, 'channel')
758
+ channel = self.safe_string(message, 'channel', '')
605
759
  methods: dict = {
606
760
  'SUBSCRIPTIONS': self.handle_subscription_status,
607
761
  'INSTRUMENTS': self.handle_instrument,
@@ -615,6 +769,8 @@ class coinbaseinternational(ccxt.async_support.coinbaseinternational):
615
769
  if type == 'error':
616
770
  errorMessage = self.safe_string(message, 'message')
617
771
  raise ExchangeError(errorMessage)
772
+ if channel.find('CANDLES') > -1:
773
+ self.handle_ohlcv(client, message)
618
774
  method = self.safe_value(methods, channel)
619
775
  if method is not None:
620
776
  method(client, message)
ccxt/pro/coincatch.py CHANGED
@@ -6,10 +6,9 @@
6
6
  import ccxt.async_support
7
7
  from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Bool, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
9
+ from ccxt.base.types import Any, Balances, Bool, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
10
10
  from ccxt.async_support.base.ws.client import Client
11
11
  from typing import List
12
- from typing import Any
13
12
  from ccxt.base.errors import ExchangeError
14
13
  from ccxt.base.errors import AuthenticationError
15
14
  from ccxt.base.errors import ArgumentsRequired
@@ -23,7 +22,7 @@ from ccxt.base.precise import Precise
23
22
 
24
23
  class coincatch(ccxt.async_support.coincatch):
25
24
 
26
- def describe(self):
25
+ def describe(self) -> Any:
27
26
  return self.deep_extend(super(coincatch, self).describe(), {
28
27
  'has': {
29
28
  'ws': True,
@@ -1299,7 +1298,7 @@ class coincatch(ccxt.async_support.coincatch):
1299
1298
  'info': position,
1300
1299
  })
1301
1300
 
1302
- def handle_error_message(self, client: Client, message):
1301
+ def handle_error_message(self, client: Client, message) -> Bool:
1303
1302
  #
1304
1303
  # {event: "error", code: 30001, msg: "Channel does not exist"}
1305
1304
  #
@@ -1403,7 +1402,7 @@ class coincatch(ccxt.async_support.coincatch):
1403
1402
  del client.subscriptions[subMessageHash]
1404
1403
  if messageHash in client.subscriptions:
1405
1404
  del client.subscriptions[messageHash]
1406
- error = UnsubscribeError(self.id + 'orderbook ' + symbol)
1405
+ error = UnsubscribeError(self.id + ' orderbook ' + symbol)
1407
1406
  client.reject(error, subMessageHash)
1408
1407
  client.resolve(True, messageHash)
1409
1408
 
@@ -1422,7 +1421,7 @@ class coincatch(ccxt.async_support.coincatch):
1422
1421
  del client.subscriptions[subMessageHash]
1423
1422
  if messageHash in client.subscriptions:
1424
1423
  del client.subscriptions[messageHash]
1425
- error = UnsubscribeError(self.id + 'trades ' + symbol)
1424
+ error = UnsubscribeError(self.id + ' trades ' + symbol)
1426
1425
  client.reject(error, subMessageHash)
1427
1426
  client.resolve(True, messageHash)
1428
1427
 
@@ -1441,7 +1440,7 @@ class coincatch(ccxt.async_support.coincatch):
1441
1440
  del client.subscriptions[subMessageHash]
1442
1441
  if messageHash in client.subscriptions:
1443
1442
  del client.subscriptions[messageHash]
1444
- error = UnsubscribeError(self.id + 'ticker ' + symbol)
1443
+ error = UnsubscribeError(self.id + ' ticker ' + symbol)
1445
1444
  client.reject(error, subMessageHash)
1446
1445
  client.resolve(True, messageHash)
1447
1446
 
ccxt/pro/coincheck.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
8
- from ccxt.base.types import Int, Market, OrderBook, Trade
8
+ from ccxt.base.types import Any, Int, Market, OrderBook, 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
@@ -13,13 +13,14 @@ from ccxt.base.errors import AuthenticationError
13
13
 
14
14
  class coincheck(ccxt.async_support.coincheck):
15
15
 
16
- def describe(self):
16
+ def describe(self) -> Any:
17
17
  return self.deep_extend(super(coincheck, self).describe(), {
18
18
  'has': {
19
19
  'ws': True,
20
20
  'watchOrderBook': True,
21
21
  'watchOrders': False,
22
22
  'watchTrades': True,
23
+ 'watchTradesForSymbols': False,
23
24
  'watchOHLCV': False,
24
25
  'watchTicker': False,
25
26
  'watchTickers': False,
@@ -50,7 +51,9 @@ class coincheck(ccxt.async_support.coincheck):
50
51
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
51
52
  """
52
53
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
53
- :see: https://coincheck.com/documents/exchange/api#websocket-order-book
54
+
55
+ https://coincheck.com/documents/exchange/api#websocket-order-book
56
+
54
57
  :param str symbol: unified symbol of the market to fetch the order book for
55
58
  :param int [limit]: the maximum amount of order book entries to return
56
59
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -106,12 +109,14 @@ class coincheck(ccxt.async_support.coincheck):
106
109
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
107
110
  """
108
111
  watches information on multiple trades made in a market
109
- :see: https://coincheck.com/documents/exchange/api#websocket-trades
112
+
113
+ https://coincheck.com/documents/exchange/api#websocket-trades
114
+
110
115
  :param str symbol: unified market symbol of the market trades were made in
111
116
  :param int [since]: the earliest time in ms to fetch trades for
112
117
  :param int [limit]: the maximum number of trade structures to retrieve
113
118
  :param dict [params]: extra parameters specific to the exchange API endpoint
114
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
119
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
115
120
  """
116
121
  await self.load_markets()
117
122
  market = self.market(symbol)
@@ -157,7 +162,7 @@ class coincheck(ccxt.async_support.coincheck):
157
162
  messageHash = 'trade:' + symbol
158
163
  client.resolve(stored, messageHash)
159
164
 
160
- def parse_ws_trade(self, trade, market: Market = None) -> Trade:
165
+ def parse_ws_trade(self, trade: dict, market: Market = None) -> Trade:
161
166
  #
162
167
  # [
163
168
  # "1663318663", # transaction timestamp(unix time)