ccxt 4.2.76__py2.py3-none-any.whl → 4.4.48__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 (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +25 -0
  44. ccxt/abstract/kucoinfutures.py +35 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3513 -1511
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3105 -881
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +239 -50
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +201 -67
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +403 -150
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2326 -1255
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1455 -288
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +467 -158
  125. ccxt/async_support/deribit.py +558 -324
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1473 -464
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1634 -269
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +1050 -355
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1777 -455
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1155 -295
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1729 -482
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3513 -1511
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3105 -881
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +239 -50
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +200 -67
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +403 -150
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2326 -1255
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1455 -288
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +467 -158
  233. ccxt/deribit.py +558 -324
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1473 -464
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1633 -269
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +1050 -355
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1777 -455
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +63 -15
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +204 -82
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +967 -661
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +168 -32
  309. ccxt/pro/exmo.py +253 -21
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +93 -34
  336. ccxt/pro/poloniex.py +129 -50
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +93 -86
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +486 -70
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +465 -407
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +465 -409
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1155 -295
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.76.dist-info/METADATA +0 -626
  545. ccxt-4.2.76.dist-info/RECORD +0 -534
  546. {ccxt-4.2.76.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/timex.py CHANGED
@@ -5,9 +5,10 @@
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, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
8
+ from ccxt.base.types import 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
+ from ccxt.base.errors import AuthenticationError
11
12
  from ccxt.base.errors import PermissionDenied
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import BadRequest
@@ -17,7 +18,6 @@ from ccxt.base.errors import OrderNotFound
17
18
  from ccxt.base.errors import NotSupported
18
19
  from ccxt.base.errors import RateLimitExceeded
19
20
  from ccxt.base.errors import ExchangeNotAvailable
20
- from ccxt.base.errors import AuthenticationError
21
21
  from ccxt.base.decimal_to_precision import TICK_SIZE
22
22
  from ccxt.base.precise import Precise
23
23
 
@@ -78,8 +78,11 @@ class timex(Exchange, ImplicitAPI):
78
78
  'fetchOrder': True,
79
79
  'fetchOrderBook': True,
80
80
  'fetchPosition': False,
81
+ 'fetchPositionHistory': False,
81
82
  'fetchPositionMode': False,
82
83
  'fetchPositions': False,
84
+ 'fetchPositionsForSymbol': False,
85
+ 'fetchPositionsHistory': False,
83
86
  'fetchPositionsRisk': False,
84
87
  'fetchPremiumIndexOHLCV': False,
85
88
  'fetchTicker': True,
@@ -292,10 +295,12 @@ class timex(Exchange, ImplicitAPI):
292
295
  #
293
296
  return self.parse_to_int(response) * 1000
294
297
 
295
- def fetch_markets(self, params={}):
298
+ def fetch_markets(self, params={}) -> List[Market]:
296
299
  """
297
300
  retrieves data on all markets for timex
298
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listMarkets
301
+
302
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listMarkets
303
+
299
304
  :param dict [params]: extra parameters specific to the exchange API endpoint
300
305
  :returns dict[]: an array of objects representing market data
301
306
  """
@@ -323,10 +328,12 @@ class timex(Exchange, ImplicitAPI):
323
328
  #
324
329
  return self.parse_markets(response)
325
330
 
326
- def fetch_currencies(self, params={}):
331
+ def fetch_currencies(self, params={}) -> Currencies:
327
332
  """
328
333
  fetches all available currencies on an exchange
329
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCurrencies
334
+
335
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCurrencies
336
+
330
337
  :param dict [params]: extra parameters specific to the exchange API endpoint
331
338
  :returns dict: an associative dictionary of currencies
332
339
  """
@@ -356,16 +363,14 @@ class timex(Exchange, ImplicitAPI):
356
363
  # },
357
364
  # ]
358
365
  #
359
- result = []
360
- for i in range(0, len(response)):
361
- currency = response[i]
362
- result.append(self.parse_currency(currency))
363
- return self.index_by(result, 'code')
366
+ return self.parse_currencies(response)
364
367
 
365
368
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
366
369
  """
367
370
  fetch all deposits made to an account
368
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getDeposits
371
+
372
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getDeposits
373
+
369
374
  :param str code: unified currency code
370
375
  :param int [since]: the earliest time in ms to fetch deposits for
371
376
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -376,7 +381,7 @@ class timex(Exchange, ImplicitAPI):
376
381
  params = self.omit(params, 'address')
377
382
  if address is None:
378
383
  raise ArgumentsRequired(self.id + ' fetchDeposits() requires an address parameter')
379
- request = {
384
+ request: dict = {
380
385
  'address': address,
381
386
  }
382
387
  response = self.managerGetDeposits(self.extend(request, params))
@@ -398,7 +403,9 @@ class timex(Exchange, ImplicitAPI):
398
403
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
399
404
  """
400
405
  fetch all withdrawals made to an account
401
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getWithdraws
406
+
407
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Manager/getWithdraws
408
+
402
409
  :param str code: unified currency code
403
410
  :param int [since]: the earliest time in ms to fetch withdrawals for
404
411
  :param int [limit]: the maximum number of transaction structures to retrieve
@@ -409,7 +416,7 @@ class timex(Exchange, ImplicitAPI):
409
416
  params = self.omit(params, 'address')
410
417
  if address is None:
411
418
  raise ArgumentsRequired(self.id + ' fetchDeposits() requires an address parameter')
412
- request = {
419
+ request: dict = {
413
420
  'address': address,
414
421
  }
415
422
  response = self.managerGetWithdrawals(self.extend(request, params))
@@ -438,7 +445,7 @@ class timex(Exchange, ImplicitAPI):
438
445
  return currency
439
446
  return None
440
447
 
441
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
448
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
442
449
  #
443
450
  # {
444
451
  # "from": "0x1134cc86b45039cc211c6d1d2e4b3c77f60207ed",
@@ -478,14 +485,16 @@ class timex(Exchange, ImplicitAPI):
478
485
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
479
486
  """
480
487
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
481
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
488
+
489
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
490
+
482
491
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
483
492
  :param dict [params]: extra parameters specific to the exchange API endpoint
484
493
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
485
494
  """
486
495
  self.load_markets()
487
496
  period = self.safe_string(self.options['fetchTickers'], 'period', '1d')
488
- request = {
497
+ request: dict = {
489
498
  'period': self.timeframes[period], # I1, I5, I15, I30, H1, H2, H4, H6, H12, D1, W1
490
499
  }
491
500
  response = self.publicGetTickers(self.extend(request, params))
@@ -511,7 +520,9 @@ class timex(Exchange, ImplicitAPI):
511
520
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
512
521
  """
513
522
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
514
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
523
+
524
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTickers
525
+
515
526
  :param str symbol: unified symbol of the market to fetch the ticker for
516
527
  :param dict [params]: extra parameters specific to the exchange API endpoint
517
528
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -519,7 +530,7 @@ class timex(Exchange, ImplicitAPI):
519
530
  self.load_markets()
520
531
  market = self.market(symbol)
521
532
  period = self.safe_string(self.options['fetchTickers'], 'period', '1d')
522
- request = {
533
+ request: dict = {
523
534
  'market': market['id'],
524
535
  'period': self.timeframes[period], # I1, I5, I15, I30, H1, H2, H4, H6, H12, D1, W1
525
536
  }
@@ -541,13 +552,15 @@ class timex(Exchange, ImplicitAPI):
541
552
  # }
542
553
  # ]
543
554
  #
544
- ticker = self.safe_value(response, 0)
555
+ ticker = self.safe_dict(response, 0)
545
556
  return self.parse_ticker(ticker, market)
546
557
 
547
558
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
548
559
  """
549
560
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
550
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/orderbookV2
561
+
562
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/orderbookV2
563
+
551
564
  :param str symbol: unified symbol of the market to fetch the order book for
552
565
  :param int [limit]: the maximum amount of order book entries to return
553
566
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -555,7 +568,7 @@ class timex(Exchange, ImplicitAPI):
555
568
  """
556
569
  self.load_markets()
557
570
  market = self.market(symbol)
558
- request = {
571
+ request: dict = {
559
572
  'market': market['id'],
560
573
  }
561
574
  if limit is not None:
@@ -591,7 +604,9 @@ class timex(Exchange, ImplicitAPI):
591
604
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
592
605
  """
593
606
  get the list of most recent trades for a particular symbol
594
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTrades
607
+
608
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listTrades
609
+
595
610
  :param str symbol: unified symbol of the market to fetch trades for
596
611
  :param int [since]: timestamp in ms of the earliest trade to fetch
597
612
  :param int [limit]: the maximum amount of trades to fetch
@@ -604,7 +619,7 @@ class timex(Exchange, ImplicitAPI):
604
619
  defaultSort = self.safe_value(options, 'sort', 'timestamp,asc')
605
620
  sort = self.safe_string(params, 'sort', defaultSort)
606
621
  query = self.omit(params, 'sort')
607
- request = {
622
+ request: dict = {
608
623
  # 'address': 'string', # trade’s member account(?)
609
624
  # 'cursor': 1234, # int64(?)
610
625
  # 'from': self.iso8601(since),
@@ -635,7 +650,9 @@ class timex(Exchange, ImplicitAPI):
635
650
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
636
651
  """
637
652
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
638
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCandles
653
+
654
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Public/listCandles
655
+
639
656
  :param str symbol: unified symbol of the market to fetch OHLCV data for
640
657
  :param str timeframe: the length of time each candle represents
641
658
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -645,7 +662,7 @@ class timex(Exchange, ImplicitAPI):
645
662
  """
646
663
  self.load_markets()
647
664
  market = self.market(symbol)
648
- request = {
665
+ request: dict = {
649
666
  'market': market['id'],
650
667
  'period': self.safe_string(self.timeframes, timeframe, timeframe),
651
668
  }
@@ -677,7 +694,7 @@ class timex(Exchange, ImplicitAPI):
677
694
  return self.parse_ohlcvs(response, market, timeframe, since, limit)
678
695
 
679
696
  def parse_balance(self, response) -> Balances:
680
- result = {
697
+ result: dict = {
681
698
  'info': response,
682
699
  'timestamp': None,
683
700
  'datetime': None,
@@ -695,7 +712,9 @@ class timex(Exchange, ImplicitAPI):
695
712
  def fetch_balance(self, params={}) -> Balances:
696
713
  """
697
714
  query for balance and get the amount of funds available for trading or funds locked in orders
698
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getBalances
715
+
716
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getBalances
717
+
699
718
  :param dict [params]: extra parameters specific to the exchange API endpoint
700
719
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
701
720
  """
@@ -715,12 +734,14 @@ class timex(Exchange, ImplicitAPI):
715
734
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
716
735
  """
717
736
  create a trade order
718
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/createOrder
737
+
738
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/createOrder
739
+
719
740
  :param str symbol: unified symbol of the market to create an order in
720
741
  :param str type: 'market' or 'limit'
721
742
  :param str side: 'buy' or 'sell'
722
743
  :param float amount: how much of currency you want to trade in units of base currency
723
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
744
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
724
745
  :param dict [params]: extra parameters specific to the exchange API endpoint
725
746
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
726
747
  """
@@ -732,7 +753,7 @@ class timex(Exchange, ImplicitAPI):
732
753
  if postOnly:
733
754
  uppercaseType = 'POST_ONLY'
734
755
  params = self.omit(params, ['postOnly'])
735
- request = {
756
+ request: dict = {
736
757
  'symbol': market['id'],
737
758
  'quantity': self.amount_to_precision(symbol, amount),
738
759
  'side': uppercaseSide,
@@ -779,13 +800,13 @@ class timex(Exchange, ImplicitAPI):
779
800
  # }
780
801
  #
781
802
  orders = self.safe_value(response, 'orders', [])
782
- order = self.safe_value(orders, 0, {})
803
+ order = self.safe_dict(orders, 0, {})
783
804
  return self.parse_order(order, market)
784
805
 
785
806
  def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
786
807
  self.load_markets()
787
808
  market = self.market(symbol)
788
- request = {
809
+ request: dict = {
789
810
  'id': id,
790
811
  }
791
812
  if amount is not None:
@@ -827,32 +848,37 @@ class timex(Exchange, ImplicitAPI):
827
848
  })
828
849
  orders = self.safe_value(response, 'changedOrders', [])
829
850
  firstOrder = self.safe_value(orders, 0, {})
830
- order = self.safe_value(firstOrder, 'newOrder', {})
851
+ order = self.safe_dict(firstOrder, 'newOrder', {})
831
852
  return self.parse_order(order, market)
832
853
 
833
854
  def cancel_order(self, id: str, symbol: Str = None, params={}):
834
855
  """
835
856
  cancels an open order
836
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
857
+
858
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
859
+
837
860
  :param str id: order id
838
861
  :param str symbol: not used by timex cancelOrder()
839
862
  :param dict [params]: extra parameters specific to the exchange API endpoint
840
863
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
841
864
  """
842
865
  self.load_markets()
843
- return self.cancel_orders([id], symbol, params)
866
+ orders = self.cancel_orders([id], symbol, params)
867
+ return self.safe_dict(orders, 0)
844
868
 
845
869
  def cancel_orders(self, ids, symbol: Str = None, params={}):
846
870
  """
847
871
  cancel multiple orders
848
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
872
+
873
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/deleteOrders
874
+
849
875
  :param str[] ids: order ids
850
876
  :param str symbol: unified market symbol, default is None
851
877
  :param dict [params]: extra parameters specific to the exchange API endpoint
852
878
  :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
853
879
  """
854
880
  self.load_markets()
855
- request = {
881
+ request: dict = {
856
882
  'id': ids,
857
883
  }
858
884
  response = self.tradingDeleteOrders(self.extend(request, params))
@@ -880,18 +906,34 @@ class timex(Exchange, ImplicitAPI):
880
906
  # ],
881
907
  # "unchangedOrders": ["string"],
882
908
  # }
883
- return response
909
+ #
910
+ changedOrders = self.safe_list(response, 'changedOrders', [])
911
+ unchangedOrders = self.safe_list(response, 'unchangedOrders', [])
912
+ orders = []
913
+ for i in range(0, len(changedOrders)):
914
+ newOrder = self.safe_dict(changedOrders[i], 'newOrder')
915
+ orders.append(self.parse_order(newOrder))
916
+ for i in range(0, len(unchangedOrders)):
917
+ orders.append(self.safe_order({
918
+ 'info': unchangedOrders[i],
919
+ 'id': unchangedOrders[i],
920
+ 'status': 'unchanged',
921
+ }))
922
+ return orders
884
923
 
885
924
  def fetch_order(self, id: str, symbol: Str = None, params={}):
886
925
  """
887
926
  fetches information on an order made by the user
888
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrderDetails
927
+
928
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrderDetails
929
+
930
+ :param str id: order id
889
931
  :param str symbol: not used by timex fetchOrder
890
932
  :param dict [params]: extra parameters specific to the exchange API endpoint
891
933
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
892
934
  """
893
935
  self.load_markets()
894
- request = {
936
+ request: dict = {
895
937
  'orderHash': id,
896
938
  }
897
939
  response = self.historyGetOrdersDetails(request)
@@ -929,13 +971,15 @@ class timex(Exchange, ImplicitAPI):
929
971
  # }
930
972
  #
931
973
  order = self.safe_value(response, 'order', {})
932
- trades = self.safe_value(response, 'trades', [])
974
+ trades = self.safe_list(response, 'trades', [])
933
975
  return self.parse_order(self.extend(order, {'trades': trades}))
934
976
 
935
977
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
936
978
  """
937
979
  fetch all unfilled currently open orders
938
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getOpenOrders
980
+
981
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getOpenOrders
982
+
939
983
  :param str symbol: unified market symbol
940
984
  :param int [since]: the earliest time in ms to fetch open orders for
941
985
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -947,7 +991,7 @@ class timex(Exchange, ImplicitAPI):
947
991
  defaultSort = self.safe_value(options, 'sort', 'createdAt,asc')
948
992
  sort = self.safe_string(params, 'sort', defaultSort)
949
993
  query = self.omit(params, 'sort')
950
- request = {
994
+ request: dict = {
951
995
  # 'clientOrderId': '123', # order’s client id list for filter
952
996
  # page: 0, # results page you want to retrieve(0 .. N)
953
997
  'sort': sort, # sorting criteria in the format "property,asc" or "property,desc", default order is ascending, multiple sort criteria are supported
@@ -980,13 +1024,15 @@ class timex(Exchange, ImplicitAPI):
980
1024
  # ]
981
1025
  # }
982
1026
  #
983
- orders = self.safe_value(response, 'orders', [])
1027
+ orders = self.safe_list(response, 'orders', [])
984
1028
  return self.parse_orders(orders, market, since, limit)
985
1029
 
986
1030
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
987
1031
  """
988
1032
  fetches information on multiple closed orders made by the user
989
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrders
1033
+
1034
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getOrders
1035
+
990
1036
  :param str symbol: unified market symbol of the market orders were made in
991
1037
  :param int [since]: the earliest time in ms to fetch orders for
992
1038
  :param int [limit]: the maximum number of order structures to retrieve
@@ -998,7 +1044,7 @@ class timex(Exchange, ImplicitAPI):
998
1044
  defaultSort = self.safe_value(options, 'sort', 'createdAt,asc')
999
1045
  sort = self.safe_string(params, 'sort', defaultSort)
1000
1046
  query = self.omit(params, 'sort')
1001
- request = {
1047
+ request: dict = {
1002
1048
  # 'clientOrderId': '123', # order’s client id list for filter
1003
1049
  # page: 0, # results page you want to retrieve(0 .. N)
1004
1050
  'sort': sort, # sorting criteria in the format "property,asc" or "property,desc", default order is ascending, multiple sort criteria are supported
@@ -1035,13 +1081,15 @@ class timex(Exchange, ImplicitAPI):
1035
1081
  # ]
1036
1082
  # }
1037
1083
  #
1038
- orders = self.safe_value(response, 'orders', [])
1084
+ orders = self.safe_list(response, 'orders', [])
1039
1085
  return self.parse_orders(orders, market, since, limit)
1040
1086
 
1041
1087
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1042
1088
  """
1043
1089
  fetch all trades made by the user
1044
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getTrades_1
1090
+
1091
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/History/getTrades_1
1092
+
1045
1093
  :param str symbol: unified market symbol
1046
1094
  :param int [since]: the earliest time in ms to fetch trades for
1047
1095
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1053,7 +1101,7 @@ class timex(Exchange, ImplicitAPI):
1053
1101
  defaultSort = self.safe_value(options, 'sort', 'timestamp,asc')
1054
1102
  sort = self.safe_string(params, 'sort', defaultSort)
1055
1103
  query = self.omit(params, 'sort')
1056
- request = {
1104
+ request: dict = {
1057
1105
  # 'cursorId': 123, # int64(?)
1058
1106
  # 'from': self.iso8601(since),
1059
1107
  # 'makerOrderId': '1234', # maker order hash
@@ -1093,10 +1141,10 @@ class timex(Exchange, ImplicitAPI):
1093
1141
  # ]
1094
1142
  # }
1095
1143
  #
1096
- trades = self.safe_value(response, 'trades', [])
1144
+ trades = self.safe_list(response, 'trades', [])
1097
1145
  return self.parse_trades(trades, market, since, limit)
1098
1146
 
1099
- def parse_trading_fee(self, fee, market: Market = None):
1147
+ def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
1100
1148
  #
1101
1149
  # {
1102
1150
  # "fee": 0.0075,
@@ -1110,19 +1158,23 @@ class timex(Exchange, ImplicitAPI):
1110
1158
  'symbol': self.safe_symbol(marketId, market),
1111
1159
  'maker': rate,
1112
1160
  'taker': rate,
1161
+ 'percentage': None,
1162
+ 'tierBased': None,
1113
1163
  }
1114
1164
 
1115
- def fetch_trading_fee(self, symbol: str, params={}):
1165
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1116
1166
  """
1117
1167
  fetch the trading fees for a market
1118
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getFees
1168
+
1169
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Trading/getFees
1170
+
1119
1171
  :param str symbol: unified market symbol
1120
1172
  :param dict [params]: extra parameters specific to the exchange API endpoint
1121
1173
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1122
1174
  """
1123
1175
  self.load_markets()
1124
1176
  market = self.market(symbol)
1125
- request = {
1177
+ request: dict = {
1126
1178
  'markets': market['id'],
1127
1179
  }
1128
1180
  response = self.tradingGetFees(self.extend(request, params))
@@ -1137,7 +1189,7 @@ class timex(Exchange, ImplicitAPI):
1137
1189
  result = self.safe_value(response, 0, {})
1138
1190
  return self.parse_trading_fee(result, market)
1139
1191
 
1140
- def parse_market(self, market) -> Market:
1192
+ def parse_market(self, market: dict) -> Market:
1141
1193
  #
1142
1194
  # {
1143
1195
  # "symbol": "ETHBTC",
@@ -1220,7 +1272,7 @@ class timex(Exchange, ImplicitAPI):
1220
1272
  'info': market,
1221
1273
  }
1222
1274
 
1223
- def parse_currency(self, currency):
1275
+ def parse_currency(self, currency: dict) -> Currency:
1224
1276
  #
1225
1277
  # {
1226
1278
  # "symbol": "BTC",
@@ -1281,7 +1333,7 @@ class timex(Exchange, ImplicitAPI):
1281
1333
  for i in range(0, -dotIndex):
1282
1334
  fraction += '0'
1283
1335
  fee = self.parse_number(fraction + feeString)
1284
- return {
1336
+ return self.safe_currency_structure({
1285
1337
  'id': code,
1286
1338
  'code': code,
1287
1339
  'info': currency,
@@ -1297,9 +1349,9 @@ class timex(Exchange, ImplicitAPI):
1297
1349
  'amount': {'min': None, 'max': None},
1298
1350
  },
1299
1351
  'networks': {},
1300
- }
1352
+ })
1301
1353
 
1302
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
1354
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
1303
1355
  #
1304
1356
  # {
1305
1357
  # "ask": 0.017,
@@ -1343,7 +1395,7 @@ class timex(Exchange, ImplicitAPI):
1343
1395
  'quoteVolume': self.safe_string(ticker, 'volumeQuote'),
1344
1396
  }, market)
1345
1397
 
1346
- def parse_trade(self, trade, market: Market = None) -> Trade:
1398
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
1347
1399
  #
1348
1400
  # fetchTrades(public)
1349
1401
  #
@@ -1430,7 +1482,7 @@ class timex(Exchange, ImplicitAPI):
1430
1482
  self.safe_number(ohlcv, 'volume'),
1431
1483
  ]
1432
1484
 
1433
- def parse_order(self, order, market: Market = None) -> Order:
1485
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1434
1486
  #
1435
1487
  # fetchOrder, createOrder, cancelOrder, cancelOrders, fetchOpenOrders, fetchClosedOrders
1436
1488
  #
@@ -1483,7 +1535,6 @@ class timex(Exchange, ImplicitAPI):
1483
1535
  'postOnly': None,
1484
1536
  'side': side,
1485
1537
  'price': price,
1486
- 'stopPrice': None,
1487
1538
  'triggerPrice': None,
1488
1539
  'amount': amount,
1489
1540
  'cost': None,
@@ -1495,17 +1546,19 @@ class timex(Exchange, ImplicitAPI):
1495
1546
  'trades': rawTrades,
1496
1547
  }, market)
1497
1548
 
1498
- def fetch_deposit_address(self, code: str, params={}):
1549
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1499
1550
  """
1500
1551
  fetch the deposit address for a currency associated with self account, does not accept params["network"]
1501
- :see: https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Currency/selectCurrencyBySymbol
1552
+
1553
+ https://plasma-relay-backend.timex.io/swagger-ui/index.html?urls.primaryName=Relay#/Currency/selectCurrencyBySymbol
1554
+
1502
1555
  :param str code: unified currency code
1503
1556
  :param dict [params]: extra parameters specific to the exchange API endpoint
1504
1557
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1505
1558
  """
1506
1559
  self.load_markets()
1507
1560
  currency = self.currency(code)
1508
- request = {
1561
+ request: dict = {
1509
1562
  'symbol': currency['code'],
1510
1563
  }
1511
1564
  response = self.currenciesGetSSymbol(self.extend(request, params))
@@ -1529,7 +1582,7 @@ class timex(Exchange, ImplicitAPI):
1529
1582
  data = self.safe_dict(response, 'currency', {})
1530
1583
  return self.parse_deposit_address(data, currency)
1531
1584
 
1532
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1585
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1533
1586
  #
1534
1587
  # {
1535
1588
  # symbol: 'BTC',
@@ -1548,9 +1601,9 @@ class timex(Exchange, ImplicitAPI):
1548
1601
  return {
1549
1602
  'info': depositAddress,
1550
1603
  'currency': self.safe_currency_code(currencyId, currency),
1604
+ 'network': None,
1551
1605
  'address': self.safe_string(depositAddress, 'address'),
1552
1606
  'tag': None,
1553
- 'network': None,
1554
1607
  }
1555
1608
 
1556
1609
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
@@ -1567,7 +1620,7 @@ class timex(Exchange, ImplicitAPI):
1567
1620
  headers = {'authorization': secret}
1568
1621
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1569
1622
 
1570
- def handle_errors(self, statusCode, statusText, url, method, responseHeaders, responseBody, response, requestHeaders, requestBody):
1623
+ def handle_errors(self, statusCode: int, statusText: str, url: str, method: str, responseHeaders: dict, responseBody, response, requestHeaders, requestBody):
1571
1624
  if response is None:
1572
1625
  return None
1573
1626
  if statusCode >= 400: