ccxt-ir 4.3.46.0.2__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 (528) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +9 -9
  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 +10 -10
  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.2.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.2.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/abstract/ace.py +0 -15
  438. ccxt/abstract/bitbay.py +0 -53
  439. ccxt/abstract/bitcoincom.py +0 -115
  440. ccxt/abstract/bitfinex2.py +0 -139
  441. ccxt/abstract/bitpanda.py +0 -35
  442. ccxt/abstract/bl3p.py +0 -19
  443. ccxt/abstract/coinlist.py +0 -54
  444. ccxt/abstract/currencycom.py +0 -68
  445. ccxt/abstract/hitbtc3.py +0 -115
  446. ccxt/abstract/idex.py +0 -26
  447. ccxt/abstract/kuna.py +0 -182
  448. ccxt/abstract/lykke.py +0 -29
  449. ccxt/abstract/poloniexfutures.py +0 -48
  450. ccxt/abstract/wazirx.py +0 -30
  451. ccxt/ace.py +0 -1012
  452. ccxt/async_support/ace.py +0 -1012
  453. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  454. ccxt/async_support/base/ws/fast_client.py +0 -96
  455. ccxt/async_support/bitbay.py +0 -17
  456. ccxt/async_support/bitcoincom.py +0 -17
  457. ccxt/async_support/bitfinex2.py +0 -3552
  458. ccxt/async_support/bitpanda.py +0 -16
  459. ccxt/async_support/bl3p.py +0 -485
  460. ccxt/async_support/coinlist.py +0 -2243
  461. ccxt/async_support/currencycom.py +0 -1950
  462. ccxt/async_support/hitbtc3.py +0 -16
  463. ccxt/async_support/idex.py +0 -1766
  464. ccxt/async_support/kuna.py +0 -1841
  465. ccxt/async_support/lykke.py +0 -1270
  466. ccxt/async_support/poloniexfutures.py +0 -1717
  467. ccxt/async_support/wazirx.py +0 -1224
  468. ccxt/bitbay.py +0 -17
  469. ccxt/bitcoincom.py +0 -17
  470. ccxt/bitfinex2.py +0 -3552
  471. ccxt/bitpanda.py +0 -16
  472. ccxt/bl3p.py +0 -485
  473. ccxt/coinlist.py +0 -2243
  474. ccxt/currencycom.py +0 -1950
  475. ccxt/hitbtc3.py +0 -16
  476. ccxt/idex.py +0 -1766
  477. ccxt/kuna.py +0 -1841
  478. ccxt/lykke.py +0 -1270
  479. ccxt/poloniexfutures.py +0 -1717
  480. ccxt/pro/bitcoincom.py +0 -34
  481. ccxt/pro/bitfinex2.py +0 -1083
  482. ccxt/pro/bitpanda.py +0 -15
  483. ccxt/pro/currencycom.py +0 -536
  484. ccxt/pro/idex.py +0 -672
  485. ccxt/pro/poloniexfutures.py +0 -990
  486. ccxt/pro/wazirx.py +0 -749
  487. ccxt/test/base/__init__.py +0 -29
  488. ccxt/test/base/test_account.py +0 -26
  489. ccxt/test/base/test_balance.py +0 -56
  490. ccxt/test/base/test_borrow_interest.py +0 -35
  491. ccxt/test/base/test_borrow_rate.py +0 -32
  492. ccxt/test/base/test_calculate_fee.py +0 -51
  493. ccxt/test/base/test_crypto.py +0 -127
  494. ccxt/test/base/test_currency.py +0 -76
  495. ccxt/test/base/test_datetime.py +0 -109
  496. ccxt/test/base/test_decimal_to_precision.py +0 -392
  497. ccxt/test/base/test_deep_extend.py +0 -68
  498. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  499. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  500. ccxt/test/base/test_funding_rate_history.py +0 -29
  501. ccxt/test/base/test_last_price.py +0 -31
  502. ccxt/test/base/test_ledger_entry.py +0 -45
  503. ccxt/test/base/test_ledger_item.py +0 -48
  504. ccxt/test/base/test_leverage_tier.py +0 -33
  505. ccxt/test/base/test_liquidation.py +0 -50
  506. ccxt/test/base/test_margin_mode.py +0 -24
  507. ccxt/test/base/test_margin_modification.py +0 -35
  508. ccxt/test/base/test_market.py +0 -193
  509. ccxt/test/base/test_number.py +0 -411
  510. ccxt/test/base/test_ohlcv.py +0 -33
  511. ccxt/test/base/test_open_interest.py +0 -32
  512. ccxt/test/base/test_order.py +0 -64
  513. ccxt/test/base/test_order_book.py +0 -69
  514. ccxt/test/base/test_position.py +0 -60
  515. ccxt/test/base/test_shared_methods.py +0 -353
  516. ccxt/test/base/test_status.py +0 -24
  517. ccxt/test/base/test_throttle.py +0 -126
  518. ccxt/test/base/test_ticker.py +0 -92
  519. ccxt/test/base/test_trade.py +0 -47
  520. ccxt/test/base/test_trading_fee.py +0 -26
  521. ccxt/test/base/test_transaction.py +0 -39
  522. ccxt/test/test_async.py +0 -1649
  523. ccxt/test/test_sync.py +0 -1648
  524. ccxt/wazirx.py +0 -1224
  525. ccxt_ir-4.3.46.0.2.dist-info/RECORD +0 -772
  526. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  527. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  528. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/pro/woofipro.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, ArrayCacheByTimestamp
8
- from ccxt.base.types import Balances, Int, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
8
+ from ccxt.base.types import Any, Balances, Bool, Int, Order, OrderBook, Position, 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
@@ -15,7 +15,7 @@ from ccxt.base.precise import Precise
15
15
 
16
16
  class woofipro(ccxt.async_support.woofipro):
17
17
 
18
- def describe(self):
18
+ def describe(self) -> Any:
19
19
  return self.deep_extend(super(woofipro, self).describe(), {
20
20
  'has': {
21
21
  'ws': True,
@@ -26,7 +26,9 @@ class woofipro(ccxt.async_support.woofipro):
26
26
  'watchOrders': True,
27
27
  'watchTicker': True,
28
28
  'watchTickers': True,
29
+ 'watchBidsAsks': True,
29
30
  'watchTrades': True,
31
+ 'watchTradesForSymbols': False,
30
32
  'watchPositions': True,
31
33
  },
32
34
  'urls': {
@@ -92,7 +94,9 @@ class woofipro(ccxt.async_support.woofipro):
92
94
 
93
95
  async def watch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
94
96
  """
95
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/orderbook
97
+
98
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/orderbook
99
+
96
100
  watches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
97
101
  :param str symbol: unified symbol of the market to fetch the order book for
98
102
  :param int [limit]: the maximum amount of order book entries to return.
@@ -148,7 +152,9 @@ class woofipro(ccxt.async_support.woofipro):
148
152
 
149
153
  async def watch_ticker(self, symbol: str, params={}) -> Ticker:
150
154
  """
151
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/24-hour-ticker
155
+
156
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/24-hour-ticker
157
+
152
158
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
153
159
  :param str symbol: unified symbol of the market to fetch the ticker for
154
160
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -233,7 +239,9 @@ class woofipro(ccxt.async_support.woofipro):
233
239
 
234
240
  async def watch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
235
241
  """
236
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/24-hour-tickers
242
+
243
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/24-hour-tickers
244
+
237
245
  watches a price ticker, a statistical calculation with the information calculated over the past 24 hours for all markets of a specific list
238
246
  :param str[] symbols: unified symbol of the market to fetch the ticker for
239
247
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -283,10 +291,76 @@ class woofipro(ccxt.async_support.woofipro):
283
291
  result.append(ticker)
284
292
  client.resolve(result, topic)
285
293
 
294
+ async def watch_bids_asks(self, symbols: Strings = None, params={}) -> Tickers:
295
+ """
296
+
297
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/bbos
298
+
299
+ watches best bid & ask for symbols
300
+ :param str[] symbols: unified symbol of the market to fetch the ticker for
301
+ :param dict [params]: extra parameters specific to the exchange API endpoint
302
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
303
+ """
304
+ await self.load_markets()
305
+ symbols = self.market_symbols(symbols)
306
+ name = 'bbos'
307
+ topic = name
308
+ request: dict = {
309
+ 'event': 'subscribe',
310
+ 'topic': topic,
311
+ }
312
+ message = self.extend(request, params)
313
+ tickers = await self.watch_public(topic, message)
314
+ return self.filter_by_array(tickers, 'symbol', symbols)
315
+
316
+ def handle_bid_ask(self, client: Client, message):
317
+ #
318
+ # {
319
+ # "topic": "bbos",
320
+ # "ts": 1726212495000,
321
+ # "data": [
322
+ # {
323
+ # "symbol": "PERP_WOO_USDC",
324
+ # "ask": 0.16570,
325
+ # "askSize": 4224,
326
+ # "bid": 0.16553,
327
+ # "bidSize": 6645
328
+ # }
329
+ # ]
330
+ # }
331
+ #
332
+ topic = self.safe_string(message, 'topic')
333
+ data = self.safe_list(message, 'data', [])
334
+ timestamp = self.safe_integer(message, 'ts')
335
+ result = []
336
+ for i in range(0, len(data)):
337
+ ticker = self.parse_ws_bid_ask(self.extend(data[i], {'ts': timestamp}))
338
+ self.tickers[ticker['symbol']] = ticker
339
+ result.append(ticker)
340
+ client.resolve(result, topic)
341
+
342
+ def parse_ws_bid_ask(self, ticker, market=None):
343
+ marketId = self.safe_string(ticker, 'symbol')
344
+ market = self.safe_market(marketId, market)
345
+ symbol = self.safe_string(market, 'symbol')
346
+ timestamp = self.safe_integer(ticker, 'ts')
347
+ return self.safe_ticker({
348
+ 'symbol': symbol,
349
+ 'timestamp': timestamp,
350
+ 'datetime': self.iso8601(timestamp),
351
+ 'ask': self.safe_string(ticker, 'ask'),
352
+ 'askVolume': self.safe_string(ticker, 'askSize'),
353
+ 'bid': self.safe_string(ticker, 'bid'),
354
+ 'bidVolume': self.safe_string(ticker, 'bidSize'),
355
+ 'info': ticker,
356
+ }, market)
357
+
286
358
  async def watch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
287
359
  """
288
360
  watches historical candlestick data containing the open, high, low, and close price, and the volume of a market
289
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/k-line
361
+
362
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/k-line
363
+
290
364
  :param str symbol: unified symbol of the market to fetch OHLCV data for
291
365
  :param str timeframe: the length of time each candle represents
292
366
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -358,12 +432,14 @@ class woofipro(ccxt.async_support.woofipro):
358
432
  async def watch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
359
433
  """
360
434
  watches information on multiple trades made in a market
361
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/trade
435
+
436
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/public/trade
437
+
362
438
  :param str symbol: unified market symbol of the market trades were made in
363
439
  :param int [since]: the earliest time in ms to fetch trades for
364
440
  :param int [limit]: the maximum number of trade structures to retrieve
365
441
  :param dict [params]: extra parameters specific to the exchange API endpoint
366
- :returns dict[]: a list of [trade structures]{@link https://docs.ccxt.com/#/?id=trade-structure
442
+ :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
367
443
  """
368
444
  await self.load_markets()
369
445
  market = self.market(symbol)
@@ -552,8 +628,10 @@ class woofipro(ccxt.async_support.woofipro):
552
628
  async def watch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
553
629
  """
554
630
  watches information on multiple orders made by the user
555
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/execution-report
556
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/algo-execution-report
631
+
632
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/execution-report
633
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/algo-execution-report
634
+
557
635
  :param str symbol: unified market symbol of the market orders were made in
558
636
  :param int [since]: the earliest time in ms to fetch orders for
559
637
  :param int [limit]: the maximum number of order structures to retrieve
@@ -583,8 +661,10 @@ class woofipro(ccxt.async_support.woofipro):
583
661
  async def watch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
584
662
  """
585
663
  watches information on multiple trades made by the user
586
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/execution-report
587
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/algo-execution-report
664
+
665
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/execution-report
666
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/algo-execution-report
667
+
588
668
  :param str symbol: unified market symbol of the market orders were made in
589
669
  :param int [since]: the earliest time in ms to fetch orders for
590
670
  :param int [limit]: the maximum number of order structures to retrieve
@@ -686,9 +766,10 @@ class woofipro(ccxt.async_support.woofipro):
686
766
  'cost': self.safe_string(order, 'totalFee'),
687
767
  'currency': self.safe_string(order, 'feeAsset'),
688
768
  }
769
+ priceString = self.safe_string(order, 'price')
689
770
  price = self.safe_number(order, 'price')
690
771
  avgPrice = self.safe_number(order, 'avgPrice')
691
- if (price == 0) and (avgPrice is not None):
772
+ if Precise.string_eq(priceString, '0') and (avgPrice is not None):
692
773
  price = avgPrice
693
774
  amount = self.safe_string(order, 'quantity')
694
775
  side = self.safe_string_lower(order, 'side')
@@ -846,9 +927,13 @@ class woofipro(ccxt.async_support.woofipro):
846
927
 
847
928
  async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
848
929
  """
849
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/position-push
930
+
931
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/position-push
932
+
850
933
  watch all open positions
851
- :param str[]|None symbols: list of unified market symbols
934
+ :param str[] [symbols]: list of unified market symbols
935
+ @param since timestamp in ms of the earliest position to fetch
936
+ @param limit the maximum number of positions to fetch
852
937
  :param dict params: extra parameters specific to the exchange API endpoint
853
938
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
854
939
  """
@@ -865,7 +950,7 @@ class woofipro(ccxt.async_support.woofipro):
865
950
  client = self.client(url)
866
951
  self.set_positions_cache(client, symbols)
867
952
  fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
868
- awaitPositionsSnapshot = self.safe_bool('watchPositions', 'awaitPositionsSnapshot', True)
953
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
869
954
  if fetchPositionsSnapshot and awaitPositionsSnapshot and self.positions is None:
870
955
  snapshot = await client.future('fetchPositionsSnapshot')
871
956
  return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
@@ -1026,7 +1111,9 @@ class woofipro(ccxt.async_support.woofipro):
1026
1111
  async def watch_balance(self, params={}) -> Balances:
1027
1112
  """
1028
1113
  watch balance and get the amount of funds available for trading or funds locked in orders
1029
- :see: https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/balance
1114
+
1115
+ https://orderly.network/docs/build-on-evm/evm-api/websocket-api/private/balance
1116
+
1030
1117
  :param dict [params]: extra parameters specific to the exchange API endpoint
1031
1118
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1032
1119
  """
@@ -1089,7 +1176,7 @@ class woofipro(ccxt.async_support.woofipro):
1089
1176
  self.balance = self.safe_balance(self.balance)
1090
1177
  client.resolve(self.balance, 'balance')
1091
1178
 
1092
- def handle_error_message(self, client: Client, message):
1179
+ def handle_error_message(self, client: Client, message) -> Bool:
1093
1180
  #
1094
1181
  # {"id":"1","event":"subscribe","success":false,"ts":1710780997216,"errorMsg":"Auth is needed."}
1095
1182
  #
@@ -1131,6 +1218,7 @@ class woofipro(ccxt.async_support.woofipro):
1131
1218
  'algoexecutionreport': self.handle_order_update,
1132
1219
  'position': self.handle_positions,
1133
1220
  'balance': self.handle_balance,
1221
+ 'bbos': self.handle_bid_ask,
1134
1222
  }
1135
1223
  event = self.safe_string(message, 'event')
1136
1224
  method = self.safe_value(methods, event)
ccxt/pro/xt.py CHANGED
@@ -4,15 +4,15 @@
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, ArrayCacheBySymbolById, ArrayCacheByTimestamp
8
- from ccxt.base.types import Balances, Int, Market, Order, OrderBook, Str, Strings, Ticker, Tickers, Trade
7
+ from ccxt.async_support.base.ws.cache import ArrayCache, ArrayCacheBySymbolById, ArrayCacheBySymbolBySide, ArrayCacheByTimestamp
8
+ from ccxt.base.types import Any, Balances, Int, Market, Order, OrderBook, Position, Str, Strings, Ticker, Tickers, Trade
9
9
  from ccxt.async_support.base.ws.client import Client
10
10
  from typing import List
11
11
 
12
12
 
13
13
  class xt(ccxt.async_support.xt):
14
14
 
15
- def describe(self):
15
+ def describe(self) -> Any:
16
16
  return self.deep_extend(super(xt, self).describe(), {
17
17
  'has': {
18
18
  'ws': True,
@@ -25,7 +25,7 @@ class xt(ccxt.async_support.xt):
25
25
  'watchBalance': True,
26
26
  'watchOrders': True,
27
27
  'watchMyTrades': True,
28
- 'watchPositions': None, # TODO https://doc.xt.com/#futures_user_websocket_v2position
28
+ 'watchPositions': True,
29
29
  },
30
30
  'urls': {
31
31
  'api': {
@@ -45,6 +45,11 @@ class xt(ccxt.async_support.xt):
45
45
  'watchTickers': {
46
46
  'method': 'tickers', # agg_tickers(contract only)
47
47
  },
48
+ 'watchPositions': {
49
+ 'type': 'swap',
50
+ 'fetchPositionsSnapshot': True,
51
+ 'awaitPositionsSnapshot': True,
52
+ },
48
53
  },
49
54
  'streaming': {
50
55
  'keepAlive': 20000,
@@ -70,7 +75,7 @@ class xt(ccxt.async_support.xt):
70
75
  if not isContract:
71
76
  url = url + '/private'
72
77
  client = self.client(url)
73
- token = self.safe_dict(client.subscriptions, 'token')
78
+ token = self.safe_string(client.subscriptions, 'token')
74
79
  if token is None:
75
80
  if isContract:
76
81
  response = await self.privateLinearGetFutureUserV1UserListenKey()
@@ -352,6 +357,106 @@ class xt(ccxt.async_support.xt):
352
357
  name = 'balance'
353
358
  return await self.subscribe(name, 'private', 'watchBalance', None, None, params)
354
359
 
360
+ async def watch_positions(self, symbols: Strings = None, since: Int = None, limit: Int = None, params={}) -> List[Position]:
361
+ """
362
+
363
+ https://doc.xt.com/#futures_user_websocket_v2position
364
+
365
+ watch all open positions
366
+ :param str[]|None symbols: list of unified market symbols
367
+ :param number [since]: since timestamp
368
+ :param number [limit]: limit
369
+ :param dict params: extra parameters specific to the exchange API endpoint
370
+ :returns dict[]: a list of `position structure <https://docs.ccxt.com/en/latest/manual.html#position-structure>`
371
+ """
372
+ await self.load_markets()
373
+ url = self.urls['api']['ws']['contract'] + '/' + 'user'
374
+ client = self.client(url)
375
+ self.set_positions_cache(client)
376
+ fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot', True)
377
+ awaitPositionsSnapshot = self.handle_option('watchPositions', 'awaitPositionsSnapshot', True)
378
+ cache = self.positions
379
+ if fetchPositionsSnapshot and awaitPositionsSnapshot and self.is_empty(cache):
380
+ snapshot = await client.future('fetchPositionsSnapshot')
381
+ return self.filter_by_symbols_since_limit(snapshot, symbols, since, limit, True)
382
+ name = 'position'
383
+ newPositions = await self.subscribe(name, 'private', 'watchPositions', None, None, params)
384
+ if self.newUpdates:
385
+ return newPositions
386
+ return self.filter_by_symbols_since_limit(cache, symbols, since, limit, True)
387
+
388
+ def set_positions_cache(self, client: Client):
389
+ if self.positions is None:
390
+ self.positions = ArrayCacheBySymbolBySide()
391
+ fetchPositionsSnapshot = self.handle_option('watchPositions', 'fetchPositionsSnapshot')
392
+ if fetchPositionsSnapshot:
393
+ messageHash = 'fetchPositionsSnapshot'
394
+ if not (messageHash in client.futures):
395
+ client.future(messageHash)
396
+ self.spawn(self.load_positions_snapshot, client, messageHash)
397
+
398
+ async def load_positions_snapshot(self, client, messageHash):
399
+ positions = await self.fetch_positions(None)
400
+ self.positions = ArrayCacheBySymbolBySide()
401
+ cache = self.positions
402
+ for i in range(0, len(positions)):
403
+ position = positions[i]
404
+ contracts = self.safe_number(position, 'contracts', 0)
405
+ if contracts > 0:
406
+ cache.append(position)
407
+ # don't remove the future from the .futures cache
408
+ future = client.futures[messageHash]
409
+ future.resolve(cache)
410
+ client.resolve(cache, 'position::contract')
411
+
412
+ def handle_position(self, client, message):
413
+ #
414
+ # {
415
+ # topic: 'position',
416
+ # event: 'position',
417
+ # data: {
418
+ # accountId: 245296,
419
+ # accountType: 0,
420
+ # symbol: 'eth_usdt',
421
+ # contractType: 'PERPETUAL',
422
+ # positionType: 'CROSSED',
423
+ # positionSide: 'LONG',
424
+ # positionSize: '1',
425
+ # closeOrderSize: '0',
426
+ # availableCloseSize: '1',
427
+ # realizedProfit: '-0.0121',
428
+ # entryPrice: '2637.87',
429
+ # openOrderSize: '1',
430
+ # isolatedMargin: '2.63787',
431
+ # openOrderMarginFrozen: '2.78832014',
432
+ # underlyingType: 'U_BASED',
433
+ # leverage: 10,
434
+ # welfareAccount: False,
435
+ # profitFixedLatest: {},
436
+ # closeProfit: '0.0000',
437
+ # totalFee: '-0.0158',
438
+ # totalFundFee: '0.0037',
439
+ # markPrice: '2690.96'
440
+ # }
441
+ # }
442
+ #
443
+ if self.positions is None:
444
+ self.positions = ArrayCacheBySymbolBySide()
445
+ cache = self.positions
446
+ data = self.safe_dict(message, 'data', {})
447
+ position = self.parse_position(data)
448
+ cache.append(position)
449
+ messageHashes = self.find_message_hashes(client, 'position::contract')
450
+ for i in range(0, len(messageHashes)):
451
+ messageHash = messageHashes[i]
452
+ parts = messageHash.split('::')
453
+ symbolsString = parts[1]
454
+ symbols = symbolsString.split(',')
455
+ positions = self.filter_by_array([position], 'symbol', symbols, False)
456
+ if not self.is_empty(positions):
457
+ client.resolve(positions, messageHash)
458
+ client.resolve([position], 'position::contract')
459
+
355
460
  def handle_ticker(self, client: Client, message: dict):
356
461
  #
357
462
  # spot
@@ -1036,6 +1141,7 @@ class xt(ccxt.async_support.xt):
1036
1141
  'agg_tickers': self.handle_tickers,
1037
1142
  'balance': self.handle_balance,
1038
1143
  'order': self.handle_order,
1144
+ 'position': self.handle_position,
1039
1145
  }
1040
1146
  method = self.safe_value(methods, topic)
1041
1147
  if topic == 'trade':