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/tetherland.py CHANGED
@@ -5,17 +5,17 @@
5
5
 
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.tetherland import ImplicitAPI
8
- from ccxt.base.types import Market, Strings, Ticker, Tickers
8
+ from ccxt.base.types import Any, Market, Strings, Ticker, Tickers
9
9
  from typing import List
10
10
 
11
11
 
12
12
  class tetherland(Exchange, ImplicitAPI):
13
13
 
14
- def describe(self):
14
+ def describe(self) -> Any:
15
15
  return self.deep_extend(super(tetherland, self).describe(), {
16
16
  'id': 'tetherland',
17
17
  'name': 'TetherLand',
18
- 'country': ['IR'],
18
+ 'countries': ['IR'],
19
19
  'rateLimit': 1000,
20
20
  'version': '1',
21
21
  'certified': False,
@@ -111,10 +111,10 @@ class tetherland(Exchange, ImplicitAPI):
111
111
  },
112
112
  })
113
113
 
114
- def fetch_markets(self, symbols: Strings = None, params={}) -> List[Market]:
114
+ def fetch_markets(self, params={}) -> List[Market]:
115
115
  """
116
116
  retrieves data on all markets for tetherland
117
- :see: https://docs.tetherland.com/docs/tetherland/71ca11f41704f-user-api
117
+ https://docs.tetherland.com/docs/tetherland/71ca11f41704f-user-api
118
118
  :param dict [params]: extra parameters specific to the exchange API endpoint
119
119
  :returns dict[]: an array of objects representing market data
120
120
  """
@@ -234,7 +234,7 @@ class tetherland(Exchange, ImplicitAPI):
234
234
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
235
235
  """
236
236
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
237
- :see: https://docs.tetherland.com/docs/tetherland/71ca11f41704f-user-api
237
+ https://docs.tetherland.com/docs/tetherland/71ca11f41704f-user-api
238
238
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
239
239
  :param dict [params]: extra parameters specific to the exchange API endpoint
240
240
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -260,7 +260,7 @@ class tetherland(Exchange, ImplicitAPI):
260
260
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
261
261
  """
262
262
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
263
- :see: https://docs.tetherland.com/docs/tetherland/71ca11f41704f-user-api
263
+ https://docs.tetherland.com/docs/tetherland/71ca11f41704f-user-api
264
264
  :param str symbol: unified symbol of the market to fetch the ticker for
265
265
  :param dict [params]: extra parameters specific to the exchange API endpoint
266
266
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
ccxt/timex.py CHANGED
@@ -5,7 +5,7 @@
5
5
 
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.timex import ImplicitAPI
8
- from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction
8
+ from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
11
  from ccxt.base.errors import AuthenticationError
@@ -24,7 +24,7 @@ from ccxt.base.precise import Precise
24
24
 
25
25
  class timex(Exchange, ImplicitAPI):
26
26
 
27
- def describe(self):
27
+ def describe(self) -> Any:
28
28
  return self.deep_extend(super(timex, self).describe(), {
29
29
  'id': 'timex',
30
30
  'name': 'TimeX',
@@ -39,17 +39,27 @@ class timex(Exchange, ImplicitAPI):
39
39
  'future': False,
40
40
  'option': False,
41
41
  'addMargin': False,
42
+ 'borrowCrossMargin': False,
43
+ 'borrowIsolatedMargin': False,
44
+ 'borrowMargin': False,
42
45
  'cancelOrder': True,
43
46
  'cancelOrders': True,
47
+ 'closeAllPositions': False,
48
+ 'closePosition': False,
44
49
  'createOrder': True,
45
50
  'createReduceOnlyOrder': False,
46
51
  'createStopLimitOrder': False,
47
52
  'createStopMarketOrder': False,
48
53
  'createStopOrder': False,
49
54
  'editOrder': True,
55
+ 'fetchAllGreeks': False,
50
56
  'fetchBalance': True,
57
+ 'fetchBorrowInterest': False,
58
+ 'fetchBorrowRate': False,
51
59
  'fetchBorrowRateHistories': False,
52
60
  'fetchBorrowRateHistory': False,
61
+ 'fetchBorrowRates': False,
62
+ 'fetchBorrowRatesPerSymbol': False,
53
63
  'fetchClosedOrders': True,
54
64
  'fetchCrossBorrowRate': False,
55
65
  'fetchCrossBorrowRates': False,
@@ -60,21 +70,40 @@ class timex(Exchange, ImplicitAPI):
60
70
  'fetchDepositAddressesByNetwork': False,
61
71
  'fetchDeposits': True,
62
72
  'fetchFundingHistory': False,
73
+ 'fetchFundingInterval': False,
74
+ 'fetchFundingIntervals': False,
63
75
  'fetchFundingRate': False,
64
76
  'fetchFundingRateHistory': False,
65
77
  'fetchFundingRates': False,
78
+ 'fetchGreeks': False,
66
79
  'fetchIndexOHLCV': False,
67
80
  'fetchIsolatedBorrowRate': False,
68
81
  'fetchIsolatedBorrowRates': False,
82
+ 'fetchIsolatedPositions': False,
69
83
  'fetchLeverage': False,
84
+ 'fetchLeverages': False,
70
85
  'fetchLeverageTiers': False,
86
+ 'fetchLiquidations': False,
87
+ 'fetchLongShortRatio': False,
88
+ 'fetchLongShortRatioHistory': False,
89
+ 'fetchMarginAdjustmentHistory': False,
71
90
  'fetchMarginMode': False,
91
+ 'fetchMarginModes': False,
92
+ 'fetchMarketLeverageTiers': False,
72
93
  'fetchMarkets': True,
73
94
  'fetchMarkOHLCV': False,
95
+ 'fetchMarkPrice': False,
96
+ 'fetchMarkPrices': False,
97
+ 'fetchMyLiquidations': False,
98
+ 'fetchMySettlementHistory': False,
74
99
  'fetchMyTrades': True,
75
100
  'fetchOHLCV': True,
101
+ 'fetchOpenInterest': False,
76
102
  'fetchOpenInterestHistory': False,
103
+ 'fetchOpenInterests': False,
77
104
  'fetchOpenOrders': True,
105
+ 'fetchOption': False,
106
+ 'fetchOptionChain': False,
78
107
  'fetchOrder': True,
79
108
  'fetchOrderBook': True,
80
109
  'fetchPosition': False,
@@ -85,15 +114,21 @@ class timex(Exchange, ImplicitAPI):
85
114
  'fetchPositionsHistory': False,
86
115
  'fetchPositionsRisk': False,
87
116
  'fetchPremiumIndexOHLCV': False,
117
+ 'fetchSettlementHistory': False,
88
118
  'fetchTicker': True,
89
119
  'fetchTickers': True,
90
120
  'fetchTime': True,
91
121
  'fetchTrades': True,
92
122
  'fetchTradingFee': True, # maker fee only
123
+ 'fetchUnderlyingAssets': False,
124
+ 'fetchVolatilityHistory': False,
93
125
  'fetchWithdrawal': False,
94
126
  'fetchWithdrawals': True,
95
127
  'reduceMargin': False,
128
+ 'repayCrossMargin': False,
129
+ 'repayIsolatedMargin': False,
96
130
  'setLeverage': False,
131
+ 'setMargin': False,
97
132
  'setMarginMode': False,
98
133
  'setPositionMode': False,
99
134
  },
@@ -281,9 +316,80 @@ class timex(Exchange, ImplicitAPI):
281
316
  'defaultSort': 'timestamp,asc',
282
317
  'defaultSortOrders': 'createdAt,asc',
283
318
  },
319
+ 'features': {
320
+ 'spot': {
321
+ 'sandbox': False,
322
+ 'createOrder': {
323
+ 'marginMode': False,
324
+ 'triggerPrice': False,
325
+ 'triggerDirection': False,
326
+ 'triggerPriceType': None,
327
+ 'stopLossPrice': False,
328
+ 'takeProfitPrice': False,
329
+ 'attachedStopLossTakeProfit': None,
330
+ # todo
331
+ 'timeInForce': {
332
+ 'IOC': True,
333
+ 'FOK': True,
334
+ 'PO': False,
335
+ 'GTD': True,
336
+ },
337
+ 'hedged': False,
338
+ 'trailing': False,
339
+ 'leverage': False,
340
+ 'marketBuyByCost': False,
341
+ 'marketBuyRequiresPrice': False,
342
+ 'selfTradePrevention': False,
343
+ 'iceberg': False,
344
+ },
345
+ 'createOrders': None,
346
+ 'fetchMyTrades': {
347
+ 'marginMode': False,
348
+ 'limit': 100, # todo
349
+ 'daysBack': 100000, # todo
350
+ 'untilDays': 100000, # todo
351
+ 'symbolRequired': False,
352
+ },
353
+ 'fetchOrder': {
354
+ 'marginMode': False,
355
+ 'trigger': False,
356
+ 'trailing': False,
357
+ 'symbolRequired': False,
358
+ },
359
+ 'fetchOpenOrders': {
360
+ 'marginMode': False,
361
+ 'limit': 100, # todo
362
+ 'trigger': False,
363
+ 'trailing': False,
364
+ 'symbolRequired': False,
365
+ },
366
+ 'fetchOrders': None, # todo
367
+ 'fetchClosedOrders': {
368
+ 'marginMode': False,
369
+ 'limit': 100, # todo
370
+ 'daysBack': 100000, # todo
371
+ 'daysBackCanceled': 1, # todo
372
+ 'untilDays': 100000, # todo
373
+ 'trigger': False,
374
+ 'trailing': False,
375
+ 'symbolRequired': False,
376
+ },
377
+ 'fetchOHLCV': {
378
+ 'limit': None,
379
+ },
380
+ },
381
+ 'swap': {
382
+ 'linear': None,
383
+ 'inverse': None,
384
+ },
385
+ 'future': {
386
+ 'linear': None,
387
+ 'inverse': None,
388
+ },
389
+ },
284
390
  })
285
391
 
286
- def fetch_time(self, params={}):
392
+ def fetch_time(self, params={}) -> Int:
287
393
  """
288
394
  fetches the current integer timestamp in milliseconds from the exchange server
289
395
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -298,7 +404,9 @@ class timex(Exchange, ImplicitAPI):
298
404
  def fetch_markets(self, params={}) -> List[Market]:
299
405
  """
300
406
  retrieves data on all markets for timex
301
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listMarkets
407
+
408
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listMarkets
409
+
302
410
  :param dict [params]: extra parameters specific to the exchange API endpoint
303
411
  :returns dict[]: an array of objects representing market data
304
412
  """
@@ -329,7 +437,9 @@ class timex(Exchange, ImplicitAPI):
329
437
  def fetch_currencies(self, params={}) -> Currencies:
330
438
  """
331
439
  fetches all available currencies on an exchange
332
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCurrencies
440
+
441
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCurrencies
442
+
333
443
  :param dict [params]: extra parameters specific to the exchange API endpoint
334
444
  :returns dict: an associative dictionary of currencies
335
445
  """
@@ -359,16 +469,14 @@ class timex(Exchange, ImplicitAPI):
359
469
  # },
360
470
  # ]
361
471
  #
362
- result = []
363
- for i in range(0, len(response)):
364
- currency = response[i]
365
- result.append(self.parse_currency(currency))
366
- return self.index_by(result, 'code')
472
+ return self.parse_currencies(response)
367
473
 
368
474
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
369
475
  """
370
476
  fetch all deposits made to an account
371
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getDeposits
477
+
478
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getDeposits
479
+
372
480
  :param str code: unified currency code
373
481
  :param int [since]: the earliest time in ms to fetch deposits for
374
482
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -401,7 +509,9 @@ class timex(Exchange, ImplicitAPI):
401
509
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
402
510
  """
403
511
  fetch all withdrawals made to an account
404
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getWithdraws
512
+
513
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getWithdraws
514
+
405
515
  :param str code: unified currency code
406
516
  :param int [since]: the earliest time in ms to fetch withdrawals for
407
517
  :param int [limit]: the maximum number of transaction structures to retrieve
@@ -481,7 +591,9 @@ class timex(Exchange, ImplicitAPI):
481
591
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
482
592
  """
483
593
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
484
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
594
+
595
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
596
+
485
597
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
486
598
  :param dict [params]: extra parameters specific to the exchange API endpoint
487
599
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -514,7 +626,9 @@ class timex(Exchange, ImplicitAPI):
514
626
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
515
627
  """
516
628
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
517
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
629
+
630
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
631
+
518
632
  :param str symbol: unified symbol of the market to fetch the ticker for
519
633
  :param dict [params]: extra parameters specific to the exchange API endpoint
520
634
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -550,7 +664,9 @@ class timex(Exchange, ImplicitAPI):
550
664
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
551
665
  """
552
666
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
553
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/orderbookV2
667
+
668
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/orderbookV2
669
+
554
670
  :param str symbol: unified symbol of the market to fetch the order book for
555
671
  :param int [limit]: the maximum amount of order book entries to return
556
672
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -594,7 +710,9 @@ class timex(Exchange, ImplicitAPI):
594
710
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
595
711
  """
596
712
  get the list of most recent trades for a particular symbol
597
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTrades
713
+
714
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTrades
715
+
598
716
  :param str symbol: unified symbol of the market to fetch trades for
599
717
  :param int [since]: timestamp in ms of the earliest trade to fetch
600
718
  :param int [limit]: the maximum amount of trades to fetch
@@ -638,12 +756,15 @@ class timex(Exchange, ImplicitAPI):
638
756
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
639
757
  """
640
758
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
641
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCandles
759
+
760
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCandles
761
+
642
762
  :param str symbol: unified symbol of the market to fetch OHLCV data for
643
763
  :param str timeframe: the length of time each candle represents
644
764
  :param int [since]: timestamp in ms of the earliest candle to fetch
645
765
  :param int [limit]: the maximum amount of candles to fetch
646
766
  :param dict [params]: extra parameters specific to the exchange API endpoint
767
+ :param int [params.until]: timestamp in ms of the latest candle to fetch
647
768
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
648
769
  """
649
770
  self.load_markets()
@@ -654,15 +775,24 @@ class timex(Exchange, ImplicitAPI):
654
775
  }
655
776
  # if since and limit are not specified
656
777
  duration = self.parse_timeframe(timeframe)
778
+ until = self.safe_integer(params, 'until')
657
779
  if limit is None:
658
780
  limit = 1000 # exchange provides tens of thousands of data, but we set generous default value
659
781
  if since is not None:
660
782
  request['from'] = self.iso8601(since)
661
- request['till'] = self.iso8601(self.sum(since, self.sum(limit, 1) * duration * 1000))
783
+ if until is None:
784
+ request['till'] = self.iso8601(self.sum(since, self.sum(limit, 1) * duration * 1000))
785
+ else:
786
+ request['till'] = self.iso8601(until)
787
+ elif until is not None:
788
+ request['till'] = self.iso8601(until)
789
+ fromTimestamp = until - self.sum(limit, 1) * duration * 1000
790
+ request['from'] = self.iso8601(fromTimestamp)
662
791
  else:
663
792
  now = self.milliseconds()
664
793
  request['till'] = self.iso8601(now)
665
- request['from'] = self.iso8601(now - limit * duration * 1000 - 1)
794
+ request['from'] = self.iso8601(now - self.sum(limit, 1) * duration * 1000 - 1)
795
+ params = self.omit(params, 'until')
666
796
  response = self.publicGetCandles(self.extend(request, params))
667
797
  #
668
798
  # [
@@ -698,7 +828,9 @@ class timex(Exchange, ImplicitAPI):
698
828
  def fetch_balance(self, params={}) -> Balances:
699
829
  """
700
830
  query for balance and get the amount of funds available for trading or funds locked in orders
701
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getBalances
831
+
832
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getBalances
833
+
702
834
  :param dict [params]: extra parameters specific to the exchange API endpoint
703
835
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
704
836
  """
@@ -718,12 +850,14 @@ class timex(Exchange, ImplicitAPI):
718
850
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
719
851
  """
720
852
  create a trade order
721
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/createOrder
853
+
854
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/createOrder
855
+
722
856
  :param str symbol: unified symbol of the market to create an order in
723
857
  :param str type: 'market' or 'limit'
724
858
  :param str side: 'buy' or 'sell'
725
859
  :param float amount: how much of currency you want to trade in units of base currency
726
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
860
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
727
861
  :param dict [params]: extra parameters specific to the exchange API endpoint
728
862
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
729
863
  """
@@ -836,19 +970,24 @@ class timex(Exchange, ImplicitAPI):
836
970
  def cancel_order(self, id: str, symbol: Str = None, params={}):
837
971
  """
838
972
  cancels an open order
839
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
973
+
974
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
975
+
840
976
  :param str id: order id
841
977
  :param str symbol: not used by timex cancelOrder()
842
978
  :param dict [params]: extra parameters specific to the exchange API endpoint
843
979
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
844
980
  """
845
981
  self.load_markets()
846
- return self.cancel_orders([id], symbol, params)
982
+ orders = self.cancel_orders([id], symbol, params)
983
+ return self.safe_dict(orders, 0)
847
984
 
848
985
  def cancel_orders(self, ids, symbol: Str = None, params={}):
849
986
  """
850
987
  cancel multiple orders
851
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
988
+
989
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
990
+
852
991
  :param str[] ids: order ids
853
992
  :param str symbol: unified market symbol, default is None
854
993
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -883,12 +1022,28 @@ class timex(Exchange, ImplicitAPI):
883
1022
  # ],
884
1023
  # "unchangedOrders": ["string"],
885
1024
  # }
886
- return response
1025
+ #
1026
+ changedOrders = self.safe_list(response, 'changedOrders', [])
1027
+ unchangedOrders = self.safe_list(response, 'unchangedOrders', [])
1028
+ orders = []
1029
+ for i in range(0, len(changedOrders)):
1030
+ newOrder = self.safe_dict(changedOrders[i], 'newOrder')
1031
+ orders.append(self.parse_order(newOrder))
1032
+ for i in range(0, len(unchangedOrders)):
1033
+ orders.append(self.safe_order({
1034
+ 'info': unchangedOrders[i],
1035
+ 'id': unchangedOrders[i],
1036
+ 'status': 'unchanged',
1037
+ }))
1038
+ return orders
887
1039
 
888
1040
  def fetch_order(self, id: str, symbol: Str = None, params={}):
889
1041
  """
890
1042
  fetches information on an order made by the user
891
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrderDetails
1043
+
1044
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrderDetails
1045
+
1046
+ :param str id: order id
892
1047
  :param str symbol: not used by timex fetchOrder
893
1048
  :param dict [params]: extra parameters specific to the exchange API endpoint
894
1049
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -938,7 +1093,9 @@ class timex(Exchange, ImplicitAPI):
938
1093
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
939
1094
  """
940
1095
  fetch all unfilled currently open orders
941
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getOpenOrders
1096
+
1097
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getOpenOrders
1098
+
942
1099
  :param str symbol: unified market symbol
943
1100
  :param int [since]: the earliest time in ms to fetch open orders for
944
1101
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -989,7 +1146,9 @@ class timex(Exchange, ImplicitAPI):
989
1146
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
990
1147
  """
991
1148
  fetches information on multiple closed orders made by the user
992
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrders
1149
+
1150
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrders
1151
+
993
1152
  :param str symbol: unified market symbol of the market orders were made in
994
1153
  :param int [since]: the earliest time in ms to fetch orders for
995
1154
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1044,7 +1203,9 @@ class timex(Exchange, ImplicitAPI):
1044
1203
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1045
1204
  """
1046
1205
  fetch all trades made by the user
1047
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getTrades_1
1206
+
1207
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getTrades_1
1208
+
1048
1209
  :param str symbol: unified market symbol
1049
1210
  :param int [since]: the earliest time in ms to fetch trades for
1050
1211
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1120,7 +1281,9 @@ class timex(Exchange, ImplicitAPI):
1120
1281
  def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1121
1282
  """
1122
1283
  fetch the trading fees for a market
1123
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getFees
1284
+
1285
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getFees
1286
+
1124
1287
  :param str symbol: unified market symbol
1125
1288
  :param dict [params]: extra parameters specific to the exchange API endpoint
1126
1289
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -1225,7 +1388,7 @@ class timex(Exchange, ImplicitAPI):
1225
1388
  'info': market,
1226
1389
  }
1227
1390
 
1228
- def parse_currency(self, currency: dict):
1391
+ def parse_currency(self, currency: dict) -> Currency:
1229
1392
  #
1230
1393
  # {
1231
1394
  # "symbol": "BTC",
@@ -1265,11 +1428,6 @@ class timex(Exchange, ImplicitAPI):
1265
1428
  #
1266
1429
  id = self.safe_string(currency, 'symbol')
1267
1430
  code = self.safe_currency_code(id)
1268
- name = self.safe_string(currency, 'name')
1269
- depositEnabled = self.safe_value(currency, 'depositEnabled')
1270
- withdrawEnabled = self.safe_value(currency, 'withdrawalEnabled')
1271
- isActive = self.safe_value(currency, 'active')
1272
- active = depositEnabled and withdrawEnabled and isActive
1273
1431
  # fee = self.safe_number(currency, 'withdrawalFee')
1274
1432
  feeString = self.safe_string(currency, 'withdrawalFee')
1275
1433
  tradeDecimals = self.safe_integer(currency, 'tradeDecimals')
@@ -1286,23 +1444,23 @@ class timex(Exchange, ImplicitAPI):
1286
1444
  for i in range(0, -dotIndex):
1287
1445
  fraction += '0'
1288
1446
  fee = self.parse_number(fraction + feeString)
1289
- return {
1447
+ return self.safe_currency_structure({
1290
1448
  'id': code,
1291
1449
  'code': code,
1292
1450
  'info': currency,
1293
1451
  'type': None,
1294
- 'name': name,
1295
- 'active': active,
1296
- 'deposit': depositEnabled,
1297
- 'withdraw': withdrawEnabled,
1452
+ 'name': self.safe_string(currency, 'name'),
1453
+ 'active': self.safe_bool(currency, 'active'),
1454
+ 'deposit': self.safe_bool(currency, 'depositEnabled'),
1455
+ 'withdraw': self.safe_bool(currency, 'withdrawalEnabled'),
1298
1456
  'fee': fee,
1299
1457
  'precision': self.parse_number(self.parse_precision(self.safe_string(currency, 'decimals'))),
1300
1458
  'limits': {
1301
- 'withdraw': {'min': fee, 'max': None},
1459
+ 'withdraw': {'min': None, 'max': None},
1302
1460
  'amount': {'min': None, 'max': None},
1303
1461
  },
1304
1462
  'networks': {},
1305
- }
1463
+ })
1306
1464
 
1307
1465
  def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1308
1466
  #
@@ -1398,7 +1556,7 @@ class timex(Exchange, ImplicitAPI):
1398
1556
  'cost': feeCost,
1399
1557
  'currency': feeCurrency,
1400
1558
  }
1401
- return {
1559
+ return self.safe_trade({
1402
1560
  'info': trade,
1403
1561
  'id': id,
1404
1562
  'timestamp': timestamp,
@@ -1412,7 +1570,7 @@ class timex(Exchange, ImplicitAPI):
1412
1570
  'cost': cost,
1413
1571
  'takerOrMaker': takerOrMaker,
1414
1572
  'fee': fee,
1415
- }
1573
+ })
1416
1574
 
1417
1575
  def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
1418
1576
  #
@@ -1488,7 +1646,6 @@ class timex(Exchange, ImplicitAPI):
1488
1646
  'postOnly': None,
1489
1647
  'side': side,
1490
1648
  'price': price,
1491
- 'stopPrice': None,
1492
1649
  'triggerPrice': None,
1493
1650
  'amount': amount,
1494
1651
  'cost': None,
@@ -1500,10 +1657,12 @@ class timex(Exchange, ImplicitAPI):
1500
1657
  'trades': rawTrades,
1501
1658
  }, market)
1502
1659
 
1503
- def fetch_deposit_address(self, code: str, params={}):
1660
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1504
1661
  """
1505
1662
  fetch the deposit address for a currency associated with self account, does not accept params["network"]
1506
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Currency/selectCurrencyBySymbol
1663
+
1664
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Currency/selectCurrencyBySymbol
1665
+
1507
1666
  :param str code: unified currency code
1508
1667
  :param dict [params]: extra parameters specific to the exchange API endpoint
1509
1668
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1534,7 +1693,7 @@ class timex(Exchange, ImplicitAPI):
1534
1693
  data = self.safe_dict(response, 'currency', {})
1535
1694
  return self.parse_deposit_address(data, currency)
1536
1695
 
1537
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1696
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1538
1697
  #
1539
1698
  # {
1540
1699
  # symbol: 'BTC',
@@ -1553,9 +1712,9 @@ class timex(Exchange, ImplicitAPI):
1553
1712
  return {
1554
1713
  'info': depositAddress,
1555
1714
  'currency': self.safe_currency_code(currencyId, currency),
1715
+ 'network': None,
1556
1716
  'address': self.safe_string(depositAddress, 'address'),
1557
1717
  'tag': None,
1558
- 'network': None,
1559
1718
  }
1560
1719
 
1561
1720
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):