ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +8 -8
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +7 -7
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +8 -8
  68. ccxt/async_support/afratether.py +9 -9
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +31 -37
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +25 -24
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +30 -27
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +14 -13
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +29 -35
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +22 -21
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +28 -25
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +12 -11
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.0.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/__test__.py +0 -7
  438. ccxt/abstract/ace.py +0 -15
  439. ccxt/abstract/bitbay.py +0 -53
  440. ccxt/abstract/bitcoincom.py +0 -115
  441. ccxt/abstract/bitfinex2.py +0 -139
  442. ccxt/abstract/bitpanda.py +0 -35
  443. ccxt/abstract/bl3p.py +0 -19
  444. ccxt/abstract/coinlist.py +0 -54
  445. ccxt/abstract/currencycom.py +0 -68
  446. ccxt/abstract/hitbtc3.py +0 -115
  447. ccxt/abstract/idex.py +0 -26
  448. ccxt/abstract/kuna.py +0 -182
  449. ccxt/abstract/lykke.py +0 -29
  450. ccxt/abstract/poloniexfutures.py +0 -48
  451. ccxt/abstract/wazirx.py +0 -30
  452. ccxt/ace.py +0 -1012
  453. ccxt/async_support/ace.py +0 -1012
  454. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  455. ccxt/async_support/base/ws/fast_client.py +0 -96
  456. ccxt/async_support/bitbay.py +0 -17
  457. ccxt/async_support/bitcoincom.py +0 -17
  458. ccxt/async_support/bitfinex2.py +0 -3552
  459. ccxt/async_support/bitpanda.py +0 -16
  460. ccxt/async_support/bl3p.py +0 -485
  461. ccxt/async_support/coinlist.py +0 -2243
  462. ccxt/async_support/currencycom.py +0 -1950
  463. ccxt/async_support/hitbtc3.py +0 -16
  464. ccxt/async_support/idex.py +0 -1766
  465. ccxt/async_support/kuna.py +0 -1841
  466. ccxt/async_support/lykke.py +0 -1270
  467. ccxt/async_support/poloniexfutures.py +0 -1717
  468. ccxt/async_support/wazirx.py +0 -1224
  469. ccxt/bitbay.py +0 -17
  470. ccxt/bitcoincom.py +0 -17
  471. ccxt/bitfinex2.py +0 -3552
  472. ccxt/bitpanda.py +0 -16
  473. ccxt/bl3p.py +0 -485
  474. ccxt/coinlist.py +0 -2243
  475. ccxt/currencycom.py +0 -1950
  476. ccxt/hitbtc3.py +0 -16
  477. ccxt/idex.py +0 -1766
  478. ccxt/kuna.py +0 -1841
  479. ccxt/lykke.py +0 -1270
  480. ccxt/poloniexfutures.py +0 -1717
  481. ccxt/pro/bitcoincom.py +0 -34
  482. ccxt/pro/bitfinex2.py +0 -1083
  483. ccxt/pro/bitpanda.py +0 -15
  484. ccxt/pro/currencycom.py +0 -536
  485. ccxt/pro/idex.py +0 -672
  486. ccxt/pro/poloniexfutures.py +0 -990
  487. ccxt/pro/wazirx.py +0 -749
  488. ccxt/test/base/__init__.py +0 -29
  489. ccxt/test/base/test_account.py +0 -26
  490. ccxt/test/base/test_balance.py +0 -56
  491. ccxt/test/base/test_borrow_interest.py +0 -35
  492. ccxt/test/base/test_borrow_rate.py +0 -32
  493. ccxt/test/base/test_calculate_fee.py +0 -51
  494. ccxt/test/base/test_crypto.py +0 -127
  495. ccxt/test/base/test_currency.py +0 -76
  496. ccxt/test/base/test_datetime.py +0 -109
  497. ccxt/test/base/test_decimal_to_precision.py +0 -392
  498. ccxt/test/base/test_deep_extend.py +0 -68
  499. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  500. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  501. ccxt/test/base/test_funding_rate_history.py +0 -29
  502. ccxt/test/base/test_last_price.py +0 -31
  503. ccxt/test/base/test_ledger_entry.py +0 -45
  504. ccxt/test/base/test_ledger_item.py +0 -48
  505. ccxt/test/base/test_leverage_tier.py +0 -33
  506. ccxt/test/base/test_liquidation.py +0 -50
  507. ccxt/test/base/test_margin_mode.py +0 -24
  508. ccxt/test/base/test_margin_modification.py +0 -35
  509. ccxt/test/base/test_market.py +0 -193
  510. ccxt/test/base/test_number.py +0 -411
  511. ccxt/test/base/test_ohlcv.py +0 -33
  512. ccxt/test/base/test_open_interest.py +0 -32
  513. ccxt/test/base/test_order.py +0 -64
  514. ccxt/test/base/test_order_book.py +0 -69
  515. ccxt/test/base/test_position.py +0 -60
  516. ccxt/test/base/test_shared_methods.py +0 -353
  517. ccxt/test/base/test_status.py +0 -24
  518. ccxt/test/base/test_throttle.py +0 -126
  519. ccxt/test/base/test_ticker.py +0 -92
  520. ccxt/test/base/test_trade.py +0 -47
  521. ccxt/test/base/test_trading_fee.py +0 -26
  522. ccxt/test/base/test_transaction.py +0 -39
  523. ccxt/test/test_async.py +0 -1649
  524. ccxt/test/test_sync.py +0 -1648
  525. ccxt/wazirx.py +0 -1224
  526. ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
  527. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  528. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/wavesexchange.py CHANGED
@@ -6,9 +6,8 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.wavesexchange import ImplicitAPI
8
8
  import json
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Any, Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
- from typing import Any
12
11
  from ccxt.base.errors import ExchangeError
13
12
  from ccxt.base.errors import AuthenticationError
14
13
  from ccxt.base.errors import AccountSuspended
@@ -26,7 +25,7 @@ from ccxt.base.precise import Precise
26
25
 
27
26
  class wavesexchange(Exchange, ImplicitAPI):
28
27
 
29
- def describe(self):
28
+ def describe(self) -> Any:
30
29
  return self.deep_extend(super(wavesexchange, self).describe(), {
31
30
  'id': 'wavesexchange',
32
31
  'name': 'Waves.Exchange',
@@ -58,6 +57,8 @@ class wavesexchange(Exchange, ImplicitAPI):
58
57
  'fetchCrossBorrowRate': False,
59
58
  'fetchCrossBorrowRates': False,
60
59
  'fetchDepositAddress': True,
60
+ 'fetchDepositAddresses': None,
61
+ 'fetchDepositAddressesByNetwork': None,
61
62
  'fetchDepositWithdrawFee': 'emulated',
62
63
  'fetchDepositWithdrawFees': True,
63
64
  'fetchFundingHistory': False,
@@ -135,7 +136,13 @@ class wavesexchange(Exchange, ImplicitAPI):
135
136
  'forward': 'https://wx.network/api/v1/forward/matcher',
136
137
  'market': 'https://wx.network/api/v1/forward/marketdata/api/v1',
137
138
  },
138
- 'doc': 'https://docs.wx.network',
139
+ 'doc': [
140
+ 'https://docs.wx.network',
141
+ 'https://docs.waves.tech',
142
+ 'https://api.wavesplatform.com/v0/docs/',
143
+ 'https://nodes.wavesnodes.com/api-docs/index.html',
144
+ 'https://matcher.waves.exchange/api-docs/index.html',
145
+ ],
139
146
  'www': 'https://wx.network',
140
147
  },
141
148
  'api': {
@@ -349,6 +356,84 @@ class wavesexchange(Exchange, ImplicitAPI):
349
356
  'BEP20': 'BSC',
350
357
  },
351
358
  },
359
+ 'features': {
360
+ 'spot': {
361
+ 'sandbox': True,
362
+ 'createOrder': {
363
+ 'marginMode': False,
364
+ 'triggerPrice': True, # todo
365
+ 'triggerDirection': False,
366
+ 'triggerPriceType': None,
367
+ 'stopLossPrice': False, # todo
368
+ 'takeProfitPrice': False, # todo
369
+ 'attachedStopLossTakeProfit': None,
370
+ 'timeInForce': {
371
+ 'IOC': False,
372
+ 'FOK': False,
373
+ 'PO': False,
374
+ 'GTD': True, # todo
375
+ },
376
+ 'hedged': False,
377
+ 'trailing': False,
378
+ 'leverage': False,
379
+ 'marketBuyByCost': False, # todo
380
+ 'marketBuyRequiresPrice': True,
381
+ 'selfTradePrevention': False,
382
+ 'iceberg': False,
383
+ },
384
+ 'createOrders': None,
385
+ 'fetchMyTrades': {
386
+ 'marginMode': False,
387
+ 'limit': 100, # todo
388
+ 'daysBack': 100000, # todo
389
+ 'untilDays': 100000, # todo
390
+ 'symbolRequired': False,
391
+ },
392
+ 'fetchOrder': {
393
+ 'marginMode': False,
394
+ 'trigger': False,
395
+ 'trailing': False,
396
+ 'symbolRequired': False,
397
+ },
398
+ 'fetchOpenOrders': {
399
+ 'marginMode': False,
400
+ 'limit': 100, # todo
401
+ 'trigger': False,
402
+ 'trailing': False,
403
+ 'symbolRequired': False,
404
+ },
405
+ 'fetchOrders': {
406
+ 'marginMode': False,
407
+ 'limit': 100, # todo
408
+ 'daysBack': None,
409
+ 'untilDays': None,
410
+ 'trigger': False,
411
+ 'trailing': False,
412
+ 'symbolRequired': True,
413
+ }, # todo
414
+ 'fetchClosedOrders': {
415
+ 'marginMode': False,
416
+ 'limit': 100,
417
+ 'daysBack': 100000, # todo
418
+ 'daysBackCanceled': 1, # todo
419
+ 'untilDays': 100000, # todo
420
+ 'trigger': False,
421
+ 'trailing': False,
422
+ 'symbolRequired': False,
423
+ },
424
+ 'fetchOHLCV': {
425
+ 'limit': None, # todo
426
+ },
427
+ },
428
+ 'swap': {
429
+ 'linear': None,
430
+ 'inverse': None,
431
+ },
432
+ 'future': {
433
+ 'linear': None,
434
+ 'inverse': None,
435
+ },
436
+ },
352
437
  'commonCurrencies': {
353
438
  'EGG': 'Waves Ducks',
354
439
  },
@@ -599,6 +684,9 @@ class wavesexchange(Exchange, ImplicitAPI):
599
684
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
600
685
  """
601
686
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
687
+
688
+ https://matcher.waves.exchange/api-docs/index.html#/markets/getOrderBook
689
+
602
690
  :param str symbol: unified symbol of the market to fetch the order book for
603
691
  :param int [limit]: the maximum amount of order book entries to return
604
692
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -670,6 +758,7 @@ class wavesexchange(Exchange, ImplicitAPI):
670
758
  raise AuthenticationError(self.id + ' apiKey must be a base58 encoded public key')
671
759
  if len(hexSecretKeyBytes) != 64:
672
760
  raise AuthenticationError(self.id + ' secret must be a base58 encoded private key')
761
+ return True
673
762
 
674
763
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
675
764
  query = self.omit(params, self.extract_params(path))
@@ -719,6 +808,9 @@ class wavesexchange(Exchange, ImplicitAPI):
719
808
  def sign_in(self, params={}):
720
809
  """
721
810
  sign in, must be called prior to using other authenticated methods
811
+
812
+ https://docs.wx.network/en/api/auth/oauth2-token
813
+
722
814
  :param dict [params]: extra parameters specific to the exchange API endpoint
723
815
  :returns: response from exchange
724
816
  """
@@ -829,6 +921,9 @@ class wavesexchange(Exchange, ImplicitAPI):
829
921
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
830
922
  """
831
923
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
924
+
925
+ https://api.wavesplatform.com/v0/docs/#/pairs/getPairsListAll
926
+
832
927
  :param str symbol: unified symbol of the market to fetch the ticker for
833
928
  :param dict [params]: extra parameters specific to the exchange API endpoint
834
929
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -870,7 +965,7 @@ class wavesexchange(Exchange, ImplicitAPI):
870
965
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
871
966
  """
872
967
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
873
- :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
968
+ :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
874
969
  :param dict [params]: extra parameters specific to the exchange API endpoint
875
970
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
876
971
  """
@@ -909,11 +1004,15 @@ class wavesexchange(Exchange, ImplicitAPI):
909
1004
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
910
1005
  """
911
1006
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1007
+
1008
+ https://api.wavesplatform.com/v0/docs/#/candles/getCandles
1009
+
912
1010
  :param str symbol: unified symbol of the market to fetch OHLCV data for
913
1011
  :param str timeframe: the length of time each candle represents
914
1012
  :param int [since]: timestamp in ms of the earliest candle to fetch
915
1013
  :param int [limit]: the maximum amount of candles to fetch
916
1014
  :param dict [params]: extra parameters specific to the exchange API endpoint
1015
+ :param int [params.until]: timestamp in ms of the latest candle to fetch
917
1016
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
918
1017
  """
919
1018
  self.load_markets()
@@ -924,19 +1023,29 @@ class wavesexchange(Exchange, ImplicitAPI):
924
1023
  'interval': self.safe_string(self.timeframes, timeframe, timeframe),
925
1024
  }
926
1025
  allowedCandles = self.safe_integer(self.options, 'allowedCandles', 1440)
1026
+ until = self.safe_integer(params, 'until')
1027
+ untilIsDefined = until is not None
927
1028
  if limit is None:
928
1029
  limit = allowedCandles
929
1030
  limit = min(allowedCandles, limit)
930
1031
  duration = self.parse_timeframe(timeframe) * 1000
931
1032
  if since is None:
932
- durationRoundedTimestamp = self.parse_to_int(self.milliseconds() / duration) * duration
1033
+ now = self.milliseconds()
1034
+ timeEnd = until if untilIsDefined else now
1035
+ durationRoundedTimestamp = self.parse_to_int(timeEnd / duration) * duration
933
1036
  delta = (limit - 1) * duration
934
1037
  timeStart = durationRoundedTimestamp - delta
935
1038
  request['timeStart'] = str(timeStart)
1039
+ if untilIsDefined:
1040
+ request['timeEnd'] = str(until)
936
1041
  else:
937
1042
  request['timeStart'] = str(since)
938
- timeEnd = self.sum(since, duration * limit)
939
- request['timeEnd'] = str(timeEnd)
1043
+ if untilIsDefined:
1044
+ request['timeEnd'] = str(until)
1045
+ else:
1046
+ timeEnd = self.sum(since, duration * limit)
1047
+ request['timeEnd'] = str(timeEnd)
1048
+ params = self.omit(params, 'until')
940
1049
  response = self.publicGetCandlesBaseIdQuoteId(self.extend(request, params))
941
1050
  #
942
1051
  # {
@@ -1018,7 +1127,7 @@ class wavesexchange(Exchange, ImplicitAPI):
1018
1127
  self.safe_number(data, 'volume', 0),
1019
1128
  ]
1020
1129
 
1021
- def fetch_deposit_address(self, code: str, params={}):
1130
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1022
1131
  """
1023
1132
  fetch the deposit address for a currency associated with self account
1024
1133
  :param str code: unified currency code
@@ -1097,12 +1206,11 @@ class wavesexchange(Exchange, ImplicitAPI):
1097
1206
  responseInner = self.nodeGetAddressesPublicKeyPublicKey(self.extend(request, request))
1098
1207
  addressInner = self.safe_string(response, 'address')
1099
1208
  return {
1100
- 'address': addressInner,
1101
- 'code': code, # kept here for backward-compatibility, but will be removed soon
1209
+ 'info': responseInner,
1102
1210
  'currency': code,
1103
1211
  'network': network,
1212
+ 'address': addressInner,
1104
1213
  'tag': None,
1105
- 'info': responseInner,
1106
1214
  }
1107
1215
  else:
1108
1216
  request: dict = {
@@ -1140,12 +1248,11 @@ class wavesexchange(Exchange, ImplicitAPI):
1140
1248
  addresses = self.safe_value(response, 'deposit_addresses')
1141
1249
  address = self.safe_string(addresses, 0)
1142
1250
  return {
1143
- 'address': address,
1144
- 'code': code, # kept here for backward-compatibility, but will be removed soon
1251
+ 'info': response,
1145
1252
  'currency': code,
1146
- 'tag': None,
1147
1253
  'network': unifiedNetwork,
1148
- 'info': response,
1254
+ 'address': address,
1255
+ 'tag': None,
1149
1256
  }
1150
1257
 
1151
1258
  def get_matcher_public_key(self):
@@ -1216,13 +1323,16 @@ class wavesexchange(Exchange, ImplicitAPI):
1216
1323
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1217
1324
  """
1218
1325
  create a trade order
1326
+
1327
+ https://matcher.waves.exchange/api-docs/index.html#/serialize/serializeOrder
1328
+
1219
1329
  :param str symbol: unified symbol of the market to create an order in
1220
1330
  :param str type: 'market' or 'limit'
1221
1331
  :param str side: 'buy' or 'sell'
1222
1332
  :param float amount: how much of currency you want to trade in units of base currency
1223
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1333
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1224
1334
  :param dict [params]: extra parameters specific to the exchange API endpoint
1225
- :param float [params.stopPrice]: The price at which a stop order is triggered at
1335
+ :param float [params.triggerPrice]: The price at which a stop order is triggered at
1226
1336
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1227
1337
  """
1228
1338
  self.check_required_dependencies()
@@ -1233,12 +1343,13 @@ class wavesexchange(Exchange, ImplicitAPI):
1233
1343
  amountAsset = self.get_asset_id(market['baseId'])
1234
1344
  priceAsset = self.get_asset_id(market['quoteId'])
1235
1345
  isMarketOrder = (type == 'market')
1236
- stopPrice = self.safe_float_2(params, 'triggerPrice', 'stopPrice')
1237
- isStopOrder = (stopPrice is not None)
1346
+ triggerPrice = self.safe_float_2(params, 'triggerPrice', 'stopPrice')
1347
+ isStopOrder = (triggerPrice is not None)
1238
1348
  if (isMarketOrder) and (price is None):
1239
1349
  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')
1240
1350
  timestamp = self.milliseconds()
1241
- defaultExpiryDelta = self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000)
1351
+ defaultExpiryDelta = None
1352
+ defaultExpiryDelta, params = self.handle_option_and_params(params, 'createOrder', 'defaultExpiry', self.safe_integer(self.options, 'createOrderDefaultExpiry', 2419200000))
1242
1353
  expiration = self.sum(timestamp, defaultExpiryDelta)
1243
1354
  matcherFees = self.get_fees_for_asset(symbol, side, amount, price)
1244
1355
  # {
@@ -1329,7 +1440,7 @@ class wavesexchange(Exchange, ImplicitAPI):
1329
1440
  'c': {
1330
1441
  't': 'sp',
1331
1442
  'v': {
1332
- 'p': self.to_real_symbol_price(symbol, stopPrice),
1443
+ 'p': self.to_real_symbol_price(symbol, triggerPrice),
1333
1444
  },
1334
1445
  },
1335
1446
  }
@@ -1373,17 +1484,20 @@ class wavesexchange(Exchange, ImplicitAPI):
1373
1484
  # }
1374
1485
  #
1375
1486
  if isMarketOrder:
1376
- response = self.matcherPostMatcherOrderbookMarket(body)
1487
+ response = self.matcherPostMatcherOrderbookMarket(self.extend(body, params))
1377
1488
  value = self.safe_dict(response, 'message')
1378
1489
  return self.parse_order(value, market)
1379
1490
  else:
1380
- response = self.matcherPostMatcherOrderbook(body)
1491
+ response = self.matcherPostMatcherOrderbook(self.extend(body, params))
1381
1492
  value = self.safe_dict(response, 'message')
1382
1493
  return self.parse_order(value, market)
1383
1494
 
1384
1495
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1385
1496
  """
1386
1497
  cancels an open order
1498
+
1499
+ https://matcher.waves.exchange/api-docs/index.html#/cancel/cancelOrdersByIdsWithKeyOrSignature
1500
+
1387
1501
  :param str id: order id
1388
1502
  :param str symbol: unified symbol of the market the order was made in
1389
1503
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1430,6 +1544,10 @@ class wavesexchange(Exchange, ImplicitAPI):
1430
1544
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1431
1545
  """
1432
1546
  fetches information on an order made by the user
1547
+
1548
+ https://matcher.waves.exchange/api-docs/index.html#/status/getOrderStatusByPKAndIdWithSig
1549
+
1550
+ :param str id: order id
1433
1551
  :param str symbol: unified symbol of the market the order was made in
1434
1552
  :param dict [params]: extra parameters specific to the exchange API endpoint
1435
1553
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1696,7 +1814,6 @@ class wavesexchange(Exchange, ImplicitAPI):
1696
1814
  'postOnly': None,
1697
1815
  'side': side,
1698
1816
  'price': price,
1699
- 'stopPrice': triggerPrice,
1700
1817
  'triggerPrice': triggerPrice,
1701
1818
  'amount': amount,
1702
1819
  'cost': None,
@@ -1860,6 +1977,9 @@ class wavesexchange(Exchange, ImplicitAPI):
1860
1977
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1861
1978
  """
1862
1979
  fetch all trades made by the user
1980
+
1981
+ https://api.wavesplatform.com/v0/docs/#/transactions/searchTxsExchange
1982
+
1863
1983
  :param str symbol: unified market symbol
1864
1984
  :param int [since]: the earliest time in ms to fetch trades for
1865
1985
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1949,6 +2069,9 @@ class wavesexchange(Exchange, ImplicitAPI):
1949
2069
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1950
2070
  """
1951
2071
  get the list of most recent trades for a particular symbol
2072
+
2073
+ https://api.wavesplatform.com/v0/docs/#/transactions/searchTxsExchange
2074
+
1952
2075
  :param str symbol: unified symbol of the market to fetch trades for
1953
2076
  :param int [since]: timestamp in ms of the earliest trade to fetch
1954
2077
  :param int [limit]: the maximum amount of trades to fetch
@@ -2091,11 +2214,21 @@ class wavesexchange(Exchange, ImplicitAPI):
2091
2214
  order1 = self.safe_value(data, 'order1')
2092
2215
  order2 = self.safe_value(data, 'order2')
2093
2216
  order = None
2094
- # order2 arrived after order1
2217
+ # at first, detect if response is from `fetch_my_trades`
2095
2218
  if self.safe_string(order1, 'senderPublicKey') == self.apiKey:
2096
2219
  order = order1
2097
- else:
2220
+ elif self.safe_string(order2, 'senderPublicKey') == self.apiKey:
2098
2221
  order = order2
2222
+ else:
2223
+ # response is from `fetch_trades`, so find only taker order
2224
+ date1 = self.safe_string(order1, 'timestamp')
2225
+ date2 = self.safe_string(order2, 'timestamp')
2226
+ ts1 = self.parse8601(date1)
2227
+ ts2 = self.parse8601(date2)
2228
+ if ts1 > ts2:
2229
+ order = order1
2230
+ else:
2231
+ order = order2
2099
2232
  symbol = None
2100
2233
  assetPair = self.safe_value(order, 'assetPair')
2101
2234
  if assetPair is not None:
@@ -2190,8 +2323,10 @@ class wavesexchange(Exchange, ImplicitAPI):
2190
2323
  def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
2191
2324
  """
2192
2325
  fetch deposit and withdraw fees
2193
- :see: https://docs.wx.network/en/api/gateways/deposit/currencies
2194
- :see: https://docs.wx.network/en/api/gateways/withdraw/currencies
2326
+
2327
+ https://docs.wx.network/en/api/gateways/deposit/currencies
2328
+ https://docs.wx.network/en/api/gateways/withdraw/currencies
2329
+
2195
2330
  :param str[]|None codes: list of unified currency codes
2196
2331
  :param dict [params]: extra parameters specific to the exchange API endpoint
2197
2332
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -2277,7 +2412,7 @@ class wavesexchange(Exchange, ImplicitAPI):
2277
2412
  raise ExchangeError(self.id + ' ' + body)
2278
2413
  return None
2279
2414
 
2280
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2415
+ def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
2281
2416
  """
2282
2417
  make a withdrawal
2283
2418
  :param str code: unified currency code