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
@@ -7,9 +7,8 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.wavesexchange import ImplicitAPI
8
8
  import asyncio
9
9
  import json
10
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
+ from ccxt.base.types import Any, Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
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 AccountSuspended
@@ -27,7 +26,7 @@ from ccxt.base.precise import Precise
27
26
 
28
27
  class wavesexchange(Exchange, ImplicitAPI):
29
28
 
30
- def describe(self):
29
+ def describe(self) -> Any:
31
30
  return self.deep_extend(super(wavesexchange, self).describe(), {
32
31
  'id': 'wavesexchange',
33
32
  'name': 'Waves.Exchange',
@@ -59,6 +58,8 @@ class wavesexchange(Exchange, ImplicitAPI):
59
58
  'fetchCrossBorrowRate': False,
60
59
  'fetchCrossBorrowRates': False,
61
60
  'fetchDepositAddress': True,
61
+ 'fetchDepositAddresses': None,
62
+ 'fetchDepositAddressesByNetwork': None,
62
63
  'fetchDepositWithdrawFee': 'emulated',
63
64
  'fetchDepositWithdrawFees': True,
64
65
  'fetchFundingHistory': False,
@@ -136,7 +137,13 @@ class wavesexchange(Exchange, ImplicitAPI):
136
137
  'forward': 'https://wx.network/api/v1/forward/matcher',
137
138
  'market': 'https://wx.network/api/v1/forward/marketdata/api/v1',
138
139
  },
139
- 'doc': 'https://docs.wx.network',
140
+ 'doc': [
141
+ 'https://docs.wx.network',
142
+ 'https://docs.waves.tech',
143
+ 'https://api.wavesplatform.com/v0/docs/',
144
+ 'https://nodes.wavesnodes.com/api-docs/index.html',
145
+ 'https://matcher.waves.exchange/api-docs/index.html',
146
+ ],
140
147
  'www': 'https://wx.network',
141
148
  },
142
149
  'api': {
@@ -350,6 +357,84 @@ class wavesexchange(Exchange, ImplicitAPI):
350
357
  'BEP20': 'BSC',
351
358
  },
352
359
  },
360
+ 'features': {
361
+ 'spot': {
362
+ 'sandbox': True,
363
+ 'createOrder': {
364
+ 'marginMode': False,
365
+ 'triggerPrice': True, # todo
366
+ 'triggerDirection': False,
367
+ 'triggerPriceType': None,
368
+ 'stopLossPrice': False, # todo
369
+ 'takeProfitPrice': False, # todo
370
+ 'attachedStopLossTakeProfit': None,
371
+ 'timeInForce': {
372
+ 'IOC': False,
373
+ 'FOK': False,
374
+ 'PO': False,
375
+ 'GTD': True, # todo
376
+ },
377
+ 'hedged': False,
378
+ 'trailing': False,
379
+ 'leverage': False,
380
+ 'marketBuyByCost': False, # todo
381
+ 'marketBuyRequiresPrice': True,
382
+ 'selfTradePrevention': False,
383
+ 'iceberg': False,
384
+ },
385
+ 'createOrders': None,
386
+ 'fetchMyTrades': {
387
+ 'marginMode': False,
388
+ 'limit': 100, # todo
389
+ 'daysBack': 100000, # todo
390
+ 'untilDays': 100000, # todo
391
+ 'symbolRequired': False,
392
+ },
393
+ 'fetchOrder': {
394
+ 'marginMode': False,
395
+ 'trigger': False,
396
+ 'trailing': False,
397
+ 'symbolRequired': False,
398
+ },
399
+ 'fetchOpenOrders': {
400
+ 'marginMode': False,
401
+ 'limit': 100, # todo
402
+ 'trigger': False,
403
+ 'trailing': False,
404
+ 'symbolRequired': False,
405
+ },
406
+ 'fetchOrders': {
407
+ 'marginMode': False,
408
+ 'limit': 100, # todo
409
+ 'daysBack': None,
410
+ 'untilDays': None,
411
+ 'trigger': False,
412
+ 'trailing': False,
413
+ 'symbolRequired': True,
414
+ }, # todo
415
+ 'fetchClosedOrders': {
416
+ 'marginMode': False,
417
+ 'limit': 100,
418
+ 'daysBack': 100000, # todo
419
+ 'daysBackCanceled': 1, # todo
420
+ 'untilDays': 100000, # todo
421
+ 'trigger': False,
422
+ 'trailing': False,
423
+ 'symbolRequired': False,
424
+ },
425
+ 'fetchOHLCV': {
426
+ 'limit': None, # todo
427
+ },
428
+ },
429
+ 'swap': {
430
+ 'linear': None,
431
+ 'inverse': None,
432
+ },
433
+ 'future': {
434
+ 'linear': None,
435
+ 'inverse': None,
436
+ },
437
+ },
353
438
  'commonCurrencies': {
354
439
  'EGG': 'Waves Ducks',
355
440
  },
@@ -600,6 +685,9 @@ class wavesexchange(Exchange, ImplicitAPI):
600
685
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
601
686
  """
602
687
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
688
+
689
+ https://matcher.waves.exchange/api-docs/index.html#/markets/getOrderBook
690
+
603
691
  :param str symbol: unified symbol of the market to fetch the order book for
604
692
  :param int [limit]: the maximum amount of order book entries to return
605
693
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -671,6 +759,7 @@ class wavesexchange(Exchange, ImplicitAPI):
671
759
  raise AuthenticationError(self.id + ' apiKey must be a base58 encoded public key')
672
760
  if len(hexSecretKeyBytes) != 64:
673
761
  raise AuthenticationError(self.id + ' secret must be a base58 encoded private key')
762
+ return True
674
763
 
675
764
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
676
765
  query = self.omit(params, self.extract_params(path))
@@ -720,6 +809,9 @@ class wavesexchange(Exchange, ImplicitAPI):
720
809
  async def sign_in(self, params={}):
721
810
  """
722
811
  sign in, must be called prior to using other authenticated methods
812
+
813
+ https://docs.wx.network/en/api/auth/oauth2-token
814
+
723
815
  :param dict [params]: extra parameters specific to the exchange API endpoint
724
816
  :returns: response from exchange
725
817
  """
@@ -830,6 +922,9 @@ class wavesexchange(Exchange, ImplicitAPI):
830
922
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
831
923
  """
832
924
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
925
+
926
+ https://api.wavesplatform.com/v0/docs/#/pairs/getPairsListAll
927
+
833
928
  :param str symbol: unified symbol of the market to fetch the ticker for
834
929
  :param dict [params]: extra parameters specific to the exchange API endpoint
835
930
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -871,7 +966,7 @@ class wavesexchange(Exchange, ImplicitAPI):
871
966
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
872
967
  """
873
968
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
874
- :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
969
+ :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
875
970
  :param dict [params]: extra parameters specific to the exchange API endpoint
876
971
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
877
972
  """
@@ -910,11 +1005,15 @@ class wavesexchange(Exchange, ImplicitAPI):
910
1005
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
911
1006
  """
912
1007
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1008
+
1009
+ https://api.wavesplatform.com/v0/docs/#/candles/getCandles
1010
+
913
1011
  :param str symbol: unified symbol of the market to fetch OHLCV data for
914
1012
  :param str timeframe: the length of time each candle represents
915
1013
  :param int [since]: timestamp in ms of the earliest candle to fetch
916
1014
  :param int [limit]: the maximum amount of candles to fetch
917
1015
  :param dict [params]: extra parameters specific to the exchange API endpoint
1016
+ :param int [params.until]: timestamp in ms of the latest candle to fetch
918
1017
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
919
1018
  """
920
1019
  await self.load_markets()
@@ -925,19 +1024,29 @@ class wavesexchange(Exchange, ImplicitAPI):
925
1024
  'interval': self.safe_string(self.timeframes, timeframe, timeframe),
926
1025
  }
927
1026
  allowedCandles = self.safe_integer(self.options, 'allowedCandles', 1440)
1027
+ until = self.safe_integer(params, 'until')
1028
+ untilIsDefined = until is not None
928
1029
  if limit is None:
929
1030
  limit = allowedCandles
930
1031
  limit = min(allowedCandles, limit)
931
1032
  duration = self.parse_timeframe(timeframe) * 1000
932
1033
  if since is None:
933
- durationRoundedTimestamp = self.parse_to_int(self.milliseconds() / duration) * duration
1034
+ now = self.milliseconds()
1035
+ timeEnd = until if untilIsDefined else now
1036
+ durationRoundedTimestamp = self.parse_to_int(timeEnd / duration) * duration
934
1037
  delta = (limit - 1) * duration
935
1038
  timeStart = durationRoundedTimestamp - delta
936
1039
  request['timeStart'] = str(timeStart)
1040
+ if untilIsDefined:
1041
+ request['timeEnd'] = str(until)
937
1042
  else:
938
1043
  request['timeStart'] = str(since)
939
- timeEnd = self.sum(since, duration * limit)
940
- request['timeEnd'] = str(timeEnd)
1044
+ if untilIsDefined:
1045
+ request['timeEnd'] = str(until)
1046
+ else:
1047
+ timeEnd = self.sum(since, duration * limit)
1048
+ request['timeEnd'] = str(timeEnd)
1049
+ params = self.omit(params, 'until')
941
1050
  response = await self.publicGetCandlesBaseIdQuoteId(self.extend(request, params))
942
1051
  #
943
1052
  # {
@@ -1019,7 +1128,7 @@ class wavesexchange(Exchange, ImplicitAPI):
1019
1128
  self.safe_number(data, 'volume', 0),
1020
1129
  ]
1021
1130
 
1022
- async def fetch_deposit_address(self, code: str, params={}):
1131
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1023
1132
  """
1024
1133
  fetch the deposit address for a currency associated with self account
1025
1134
  :param str code: unified currency code
@@ -1098,12 +1207,11 @@ class wavesexchange(Exchange, ImplicitAPI):
1098
1207
  responseInner = await self.nodeGetAddressesPublicKeyPublicKey(self.extend(request, request))
1099
1208
  addressInner = self.safe_string(response, 'address')
1100
1209
  return {
1101
- 'address': addressInner,
1102
- 'code': code, # kept here for backward-compatibility, but will be removed soon
1210
+ 'info': responseInner,
1103
1211
  'currency': code,
1104
1212
  'network': network,
1213
+ 'address': addressInner,
1105
1214
  'tag': None,
1106
- 'info': responseInner,
1107
1215
  }
1108
1216
  else:
1109
1217
  request: dict = {
@@ -1141,12 +1249,11 @@ class wavesexchange(Exchange, ImplicitAPI):
1141
1249
  addresses = self.safe_value(response, 'deposit_addresses')
1142
1250
  address = self.safe_string(addresses, 0)
1143
1251
  return {
1144
- 'address': address,
1145
- 'code': code, # kept here for backward-compatibility, but will be removed soon
1252
+ 'info': response,
1146
1253
  'currency': code,
1147
- 'tag': None,
1148
1254
  'network': unifiedNetwork,
1149
- 'info': response,
1255
+ 'address': address,
1256
+ 'tag': None,
1150
1257
  }
1151
1258
 
1152
1259
  async def get_matcher_public_key(self):
@@ -1217,13 +1324,16 @@ class wavesexchange(Exchange, ImplicitAPI):
1217
1324
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1218
1325
  """
1219
1326
  create a trade order
1327
+
1328
+ https://matcher.waves.exchange/api-docs/index.html#/serialize/serializeOrder
1329
+
1220
1330
  :param str symbol: unified symbol of the market to create an order in
1221
1331
  :param str type: 'market' or 'limit'
1222
1332
  :param str side: 'buy' or 'sell'
1223
1333
  :param float amount: how much of currency you want to trade in units of base currency
1224
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1334
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1225
1335
  :param dict [params]: extra parameters specific to the exchange API endpoint
1226
- :param float [params.stopPrice]: The price at which a stop order is triggered at
1336
+ :param float [params.triggerPrice]: The price at which a stop order is triggered at
1227
1337
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1228
1338
  """
1229
1339
  self.check_required_dependencies()
@@ -1234,12 +1344,13 @@ class wavesexchange(Exchange, ImplicitAPI):
1234
1344
  amountAsset = self.get_asset_id(market['baseId'])
1235
1345
  priceAsset = self.get_asset_id(market['quoteId'])
1236
1346
  isMarketOrder = (type == 'market')
1237
- stopPrice = self.safe_float_2(params, 'triggerPrice', 'stopPrice')
1238
- isStopOrder = (stopPrice is not None)
1347
+ triggerPrice = self.safe_float_2(params, 'triggerPrice', 'stopPrice')
1348
+ isStopOrder = (triggerPrice is not None)
1239
1349
  if (isMarketOrder) and (price is None):
1240
1350
  raise InvalidOrder(self.id + ' createOrder() requires a price argument for ' + type + ' orders to determine the max price for buy and the min price for sell')
1241
1351
  timestamp = self.milliseconds()
1242
- defaultExpiryDelta = self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000)
1352
+ defaultExpiryDelta = None
1353
+ defaultExpiryDelta, params = self.handle_option_and_params(params, 'createOrder', 'defaultExpiry', self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000))
1243
1354
  expiration = self.sum(timestamp, defaultExpiryDelta)
1244
1355
  matcherFees = await self.get_fees_for_asset(symbol, side, amount, price)
1245
1356
  # {
@@ -1330,7 +1441,7 @@ class wavesexchange(Exchange, ImplicitAPI):
1330
1441
  'c': {
1331
1442
  't': 'sp',
1332
1443
  'v': {
1333
- 'p': self.to_real_symbol_price(symbol, stopPrice),
1444
+ 'p': self.to_real_symbol_price(symbol, triggerPrice),
1334
1445
  },
1335
1446
  },
1336
1447
  }
@@ -1374,17 +1485,20 @@ class wavesexchange(Exchange, ImplicitAPI):
1374
1485
  # }
1375
1486
  #
1376
1487
  if isMarketOrder:
1377
- response = await self.matcherPostMatcherOrderbookMarket(body)
1488
+ response = await self.matcherPostMatcherOrderbookMarket(self.extend(body, params))
1378
1489
  value = self.safe_dict(response, 'message')
1379
1490
  return self.parse_order(value, market)
1380
1491
  else:
1381
- response = await self.matcherPostMatcherOrderbook(body)
1492
+ response = await self.matcherPostMatcherOrderbook(self.extend(body, params))
1382
1493
  value = self.safe_dict(response, 'message')
1383
1494
  return self.parse_order(value, market)
1384
1495
 
1385
1496
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1386
1497
  """
1387
1498
  cancels an open order
1499
+
1500
+ https://matcher.waves.exchange/api-docs/index.html#/cancel/cancelOrdersByIdsWithKeyOrSignature
1501
+
1388
1502
  :param str id: order id
1389
1503
  :param str symbol: unified symbol of the market the order was made in
1390
1504
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1431,6 +1545,10 @@ class wavesexchange(Exchange, ImplicitAPI):
1431
1545
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1432
1546
  """
1433
1547
  fetches information on an order made by the user
1548
+
1549
+ https://matcher.waves.exchange/api-docs/index.html#/status/getOrderStatusByPKAndIdWithSig
1550
+
1551
+ :param str id: order id
1434
1552
  :param str symbol: unified symbol of the market the order was made in
1435
1553
  :param dict [params]: extra parameters specific to the exchange API endpoint
1436
1554
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1697,7 +1815,6 @@ class wavesexchange(Exchange, ImplicitAPI):
1697
1815
  'postOnly': None,
1698
1816
  'side': side,
1699
1817
  'price': price,
1700
- 'stopPrice': triggerPrice,
1701
1818
  'triggerPrice': triggerPrice,
1702
1819
  'amount': amount,
1703
1820
  'cost': None,
@@ -1861,6 +1978,9 @@ class wavesexchange(Exchange, ImplicitAPI):
1861
1978
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1862
1979
  """
1863
1980
  fetch all trades made by the user
1981
+
1982
+ https://api.wavesplatform.com/v0/docs/#/transactions/searchTxsExchange
1983
+
1864
1984
  :param str symbol: unified market symbol
1865
1985
  :param int [since]: the earliest time in ms to fetch trades for
1866
1986
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1950,6 +2070,9 @@ class wavesexchange(Exchange, ImplicitAPI):
1950
2070
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1951
2071
  """
1952
2072
  get the list of most recent trades for a particular symbol
2073
+
2074
+ https://api.wavesplatform.com/v0/docs/#/transactions/searchTxsExchange
2075
+
1953
2076
  :param str symbol: unified symbol of the market to fetch trades for
1954
2077
  :param int [since]: timestamp in ms of the earliest trade to fetch
1955
2078
  :param int [limit]: the maximum amount of trades to fetch
@@ -2092,11 +2215,21 @@ class wavesexchange(Exchange, ImplicitAPI):
2092
2215
  order1 = self.safe_value(data, 'order1')
2093
2216
  order2 = self.safe_value(data, 'order2')
2094
2217
  order = None
2095
- # order2 arrived after order1
2218
+ # at first, detect if response is from `fetch_my_trades`
2096
2219
  if self.safe_string(order1, 'senderPublicKey') == self.apiKey:
2097
2220
  order = order1
2098
- else:
2221
+ elif self.safe_string(order2, 'senderPublicKey') == self.apiKey:
2099
2222
  order = order2
2223
+ else:
2224
+ # response is from `fetch_trades`, so find only taker order
2225
+ date1 = self.safe_string(order1, 'timestamp')
2226
+ date2 = self.safe_string(order2, 'timestamp')
2227
+ ts1 = self.parse8601(date1)
2228
+ ts2 = self.parse8601(date2)
2229
+ if ts1 > ts2:
2230
+ order = order1
2231
+ else:
2232
+ order = order2
2100
2233
  symbol = None
2101
2234
  assetPair = self.safe_value(order, 'assetPair')
2102
2235
  if assetPair is not None:
@@ -2191,8 +2324,10 @@ class wavesexchange(Exchange, ImplicitAPI):
2191
2324
  async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
2192
2325
  """
2193
2326
  fetch deposit and withdraw fees
2194
- :see: https://docs.wx.network/en/api/gateways/deposit/currencies
2195
- :see: https://docs.wx.network/en/api/gateways/withdraw/currencies
2327
+
2328
+ https://docs.wx.network/en/api/gateways/deposit/currencies
2329
+ https://docs.wx.network/en/api/gateways/withdraw/currencies
2330
+
2196
2331
  :param str[]|None codes: list of unified currency codes
2197
2332
  :param dict [params]: extra parameters specific to the exchange API endpoint
2198
2333
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -2278,7 +2413,7 @@ class wavesexchange(Exchange, ImplicitAPI):
2278
2413
  raise ExchangeError(self.id + ' ' + body)
2279
2414
  return None
2280
2415
 
2281
- async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2416
+ async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
2282
2417
  """
2283
2418
  make a withdrawal
2284
2419
  :param str code: unified currency code