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
@@ -7,16 +7,17 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.indodax import ImplicitAPI
8
8
  import hashlib
9
9
  import math
10
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
+ from ccxt.base.errors import AuthenticationError
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadSymbol
15
16
  from ccxt.base.errors import InsufficientFunds
16
17
  from ccxt.base.errors import InvalidOrder
17
18
  from ccxt.base.errors import OrderNotFound
18
- from ccxt.base.errors import AuthenticationError
19
19
  from ccxt.base.decimal_to_precision import TICK_SIZE
20
+ from ccxt.base.precise import Precise
20
21
 
21
22
 
22
23
  class indodax(Exchange, ImplicitAPI):
@@ -28,7 +29,7 @@ class indodax(Exchange, ImplicitAPI):
28
29
  'countries': ['ID'], # Indonesia
29
30
  # 10 requests per second for making trades => 1000ms / 10 = 100ms
30
31
  # 180 requests per minute(public endpoints) = 2 requests per second => cost = (1000ms / rateLimit) / 2 = 5
31
- 'rateLimit': 100,
32
+ 'rateLimit': 50,
32
33
  'has': {
33
34
  'CORS': None,
34
35
  'spot': True,
@@ -78,8 +79,11 @@ class indodax(Exchange, ImplicitAPI):
78
79
  'fetchOrderBook': True,
79
80
  'fetchOrders': False,
80
81
  'fetchPosition': False,
82
+ 'fetchPositionHistory': False,
81
83
  'fetchPositionMode': False,
82
84
  'fetchPositions': False,
85
+ 'fetchPositionsForSymbol': False,
86
+ 'fetchPositionsHistory': False,
83
87
  'fetchPositionsRisk': False,
84
88
  'fetchPremiumIndexOHLCV': False,
85
89
  'fetchTicker': True,
@@ -216,7 +220,9 @@ class indodax(Exchange, ImplicitAPI):
216
220
  async def fetch_time(self, params={}):
217
221
  """
218
222
  fetches the current integer timestamp in milliseconds from the exchange server
219
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#server-time
223
+
224
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#server-time
225
+
220
226
  :param dict [params]: extra parameters specific to the exchange API endpoint
221
227
  :returns int: the current integer timestamp in milliseconds from the exchange server
222
228
  """
@@ -229,10 +235,12 @@ class indodax(Exchange, ImplicitAPI):
229
235
  #
230
236
  return self.safe_integer(response, 'server_time')
231
237
 
232
- async def fetch_markets(self, params={}):
238
+ async def fetch_markets(self, params={}) -> List[Market]:
233
239
  """
234
240
  retrieves data on all markets for indodax
235
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#pairs
241
+
242
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#pairs
243
+
236
244
  :param dict [params]: extra parameters specific to the exchange API endpoint
237
245
  :returns dict[]: an array of objects representing market data
238
246
  """
@@ -331,7 +339,7 @@ class indodax(Exchange, ImplicitAPI):
331
339
  free = self.safe_value(balances, 'balance', {})
332
340
  used = self.safe_value(balances, 'balance_hold', {})
333
341
  timestamp = self.safe_timestamp(balances, 'server_time')
334
- result = {
342
+ result: dict = {
335
343
  'info': response,
336
344
  'timestamp': timestamp,
337
345
  'datetime': self.iso8601(timestamp),
@@ -349,7 +357,9 @@ class indodax(Exchange, ImplicitAPI):
349
357
  async def fetch_balance(self, params={}) -> Balances:
350
358
  """
351
359
  query for balance and get the amount of funds available for trading or funds locked in orders
352
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-info-endpoint
360
+
361
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-info-endpoint
362
+
353
363
  :param dict [params]: extra parameters specific to the exchange API endpoint
354
364
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
355
365
  """
@@ -390,7 +400,9 @@ class indodax(Exchange, ImplicitAPI):
390
400
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
391
401
  """
392
402
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
393
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#depth
403
+
404
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#depth
405
+
394
406
  :param str symbol: unified symbol of the market to fetch the order book for
395
407
  :param int [limit]: the maximum amount of order book entries to return
396
408
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -398,13 +410,13 @@ class indodax(Exchange, ImplicitAPI):
398
410
  """
399
411
  await self.load_markets()
400
412
  market = self.market(symbol)
401
- request = {
413
+ request: dict = {
402
414
  'pair': market['base'] + market['quote'],
403
415
  }
404
416
  orderbook = await self.publicGetApiDepthPair(self.extend(request, params))
405
417
  return self.parse_order_book(orderbook, market['symbol'], None, 'buy', 'sell')
406
418
 
407
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
419
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
408
420
  #
409
421
  # {
410
422
  # "high":"0.01951",
@@ -448,14 +460,16 @@ class indodax(Exchange, ImplicitAPI):
448
460
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
449
461
  """
450
462
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
451
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker
463
+
464
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker
465
+
452
466
  :param str symbol: unified symbol of the market to fetch the ticker for
453
467
  :param dict [params]: extra parameters specific to the exchange API endpoint
454
468
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
455
469
  """
456
470
  await self.load_markets()
457
471
  market = self.market(symbol)
458
- request = {
472
+ request: dict = {
459
473
  'pair': market['base'] + market['quote'],
460
474
  }
461
475
  response = await self.publicGetApiTickerPair(self.extend(request, params))
@@ -473,13 +487,15 @@ class indodax(Exchange, ImplicitAPI):
473
487
  # }
474
488
  # }
475
489
  #
476
- ticker = self.safe_value(response, 'ticker', {})
490
+ ticker = self.safe_dict(response, 'ticker', {})
477
491
  return self.parse_ticker(ticker, market)
478
492
 
479
493
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
480
494
  """
481
495
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
482
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker-all
496
+
497
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#ticker-all
498
+
483
499
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
484
500
  :param dict [params]: extra parameters specific to the exchange API endpoint
485
501
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -502,10 +518,10 @@ class indodax(Exchange, ImplicitAPI):
502
518
  # }
503
519
  #
504
520
  response = await self.publicGetApiTickerAll(params)
505
- tickers = self.safe_value(response, 'tickers')
521
+ tickers = self.safe_dict(response, 'tickers', {})
506
522
  return self.parse_tickers(tickers, symbols)
507
523
 
508
- def parse_trade(self, trade, market: Market = None) -> Trade:
524
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
509
525
  timestamp = self.safe_timestamp(trade, 'date')
510
526
  return self.safe_trade({
511
527
  'id': self.safe_string(trade, 'tid'),
@@ -526,7 +542,9 @@ class indodax(Exchange, ImplicitAPI):
526
542
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
527
543
  """
528
544
  get the list of most recent trades for a particular symbol
529
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#trades
545
+
546
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Public-RestAPI.md#trades
547
+
530
548
  :param str symbol: unified symbol of the market to fetch trades for
531
549
  :param int [since]: timestamp in ms of the earliest trade to fetch
532
550
  :param int [limit]: the maximum amount of trades to fetch
@@ -535,7 +553,7 @@ class indodax(Exchange, ImplicitAPI):
535
553
  """
536
554
  await self.load_markets()
537
555
  market = self.market(symbol)
538
- request = {
556
+ request: dict = {
539
557
  'pair': market['base'] + market['quote'],
540
558
  }
541
559
  response = await self.publicGetApiTradesPair(self.extend(request, params))
@@ -577,9 +595,9 @@ class indodax(Exchange, ImplicitAPI):
577
595
  timeframes = self.options['timeframes']
578
596
  selectedTimeframe = self.safe_string(timeframes, timeframe, timeframe)
579
597
  now = self.seconds()
580
- until = self.safe_integer_2(params, 'until', 'till', now)
581
- params = self.omit(params, ['until', 'till'])
582
- request = {
598
+ until = self.safe_integer(params, 'until', now)
599
+ params = self.omit(params, ['until'])
600
+ request: dict = {
583
601
  'to': until,
584
602
  'tf': selectedTimeframe,
585
603
  'symbol': market['base'] + market['quote'],
@@ -606,15 +624,15 @@ class indodax(Exchange, ImplicitAPI):
606
624
  #
607
625
  return self.parse_ohlcvs(response, market, timeframe, since, limit)
608
626
 
609
- def parse_order_status(self, status):
610
- statuses = {
627
+ def parse_order_status(self, status: Str):
628
+ statuses: dict = {
611
629
  'open': 'open',
612
630
  'filled': 'closed',
613
631
  'cancelled': 'canceled',
614
632
  }
615
633
  return self.safe_string(statuses, status, status)
616
634
 
617
- def parse_order(self, order, market: Market = None) -> Order:
635
+ def parse_order(self, order: dict, market: Market = None) -> Order:
618
636
  #
619
637
  # {
620
638
  # "order_id": "12345",
@@ -638,6 +656,24 @@ class indodax(Exchange, ImplicitAPI):
638
656
  # "order_xrp": "30.45000000",
639
657
  # "remain_xrp": "0.00000000"
640
658
  # }
659
+ #
660
+ # cancelOrder
661
+ #
662
+ # {
663
+ # "order_id": 666883,
664
+ # "client_order_id": "clientx-sj82ks82j",
665
+ # "type": "sell",
666
+ # "pair": "btc_idr",
667
+ # "balance": {
668
+ # "idr": "33605800",
669
+ # "btc": "0.00000000",
670
+ # ...
671
+ # "frozen_idr": "0",
672
+ # "frozen_btc": "0.00000000",
673
+ # ...
674
+ # }
675
+ # }
676
+ #
641
677
  side = None
642
678
  if 'type' in order:
643
679
  side = order['type']
@@ -647,6 +683,8 @@ class indodax(Exchange, ImplicitAPI):
647
683
  price = self.safe_string(order, 'price')
648
684
  amount = None
649
685
  remaining = None
686
+ marketId = self.safe_string(order, 'pair')
687
+ market = self.safe_market(marketId, market)
650
688
  if market is not None:
651
689
  symbol = market['symbol']
652
690
  quoteId = market['quoteId']
@@ -665,7 +703,7 @@ class indodax(Exchange, ImplicitAPI):
665
703
  return self.safe_order({
666
704
  'info': order,
667
705
  'id': id,
668
- 'clientOrderId': None,
706
+ 'clientOrderId': self.safe_string(order, 'client_order_id'),
669
707
  'timestamp': timestamp,
670
708
  'datetime': self.iso8601(timestamp),
671
709
  'lastTradeTimestamp': None,
@@ -675,7 +713,6 @@ class indodax(Exchange, ImplicitAPI):
675
713
  'postOnly': None,
676
714
  'side': side,
677
715
  'price': price,
678
- 'stopPrice': None,
679
716
  'triggerPrice': None,
680
717
  'cost': cost,
681
718
  'average': None,
@@ -690,7 +727,10 @@ class indodax(Exchange, ImplicitAPI):
690
727
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
691
728
  """
692
729
  fetches information on an order made by the user
693
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-order-endpoints
730
+
731
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#get-order-endpoints
732
+
733
+ :param str id: order id
694
734
  :param str symbol: unified symbol of the market the order was made in
695
735
  :param dict [params]: extra parameters specific to the exchange API endpoint
696
736
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -699,7 +739,7 @@ class indodax(Exchange, ImplicitAPI):
699
739
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
700
740
  await self.load_markets()
701
741
  market = self.market(symbol)
702
- request = {
742
+ request: dict = {
703
743
  'pair': market['id'],
704
744
  'order_id': id,
705
745
  }
@@ -712,7 +752,9 @@ class indodax(Exchange, ImplicitAPI):
712
752
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
713
753
  """
714
754
  fetch all unfilled currently open orders
715
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#open-orders-endpoints
755
+
756
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#open-orders-endpoints
757
+
716
758
  :param str symbol: unified market symbol
717
759
  :param int [since]: the earliest time in ms to fetch open orders for
718
760
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -721,7 +763,7 @@ class indodax(Exchange, ImplicitAPI):
721
763
  """
722
764
  await self.load_markets()
723
765
  market = None
724
- request = {}
766
+ request: dict = {}
725
767
  if symbol is not None:
726
768
  market = self.market(symbol)
727
769
  request['pair'] = market['id']
@@ -747,7 +789,9 @@ class indodax(Exchange, ImplicitAPI):
747
789
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
748
790
  """
749
791
  fetches information on multiple closed orders made by the user
750
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#order-history
792
+
793
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#order-history
794
+
751
795
  :param str symbol: unified market symbol of the market orders were made in
752
796
  :param int [since]: the earliest time in ms to fetch orders for
753
797
  :param int [limit]: the maximum number of order structures to retrieve
@@ -758,7 +802,7 @@ class indodax(Exchange, ImplicitAPI):
758
802
  raise ArgumentsRequired(self.id + ' fetchClosedOrders() requires a symbol argument')
759
803
  await self.load_markets()
760
804
  market = self.market(symbol)
761
- request = {
805
+ request: dict = {
762
806
  'pair': market['id'],
763
807
  }
764
808
  response = await self.privatePostOrderHistory(self.extend(request, params))
@@ -769,30 +813,54 @@ class indodax(Exchange, ImplicitAPI):
769
813
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
770
814
  """
771
815
  create a trade order
772
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#trade-endpoints
816
+
817
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#trade-endpoints
818
+
773
819
  :param str symbol: unified symbol of the market to create an order in
774
820
  :param str type: 'market' or 'limit'
775
821
  :param str side: 'buy' or 'sell'
776
822
  :param float amount: how much of currency you want to trade in units of base currency
777
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
823
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
778
824
  :param dict [params]: extra parameters specific to the exchange API endpoint
779
825
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
780
826
  """
781
- if type != 'limit':
782
- raise ExchangeError(self.id + ' createOrder() allows limit orders only')
783
827
  await self.load_markets()
784
828
  market = self.market(symbol)
785
- request = {
829
+ request: dict = {
786
830
  'pair': market['id'],
787
831
  'type': side,
788
832
  'price': price,
789
833
  }
790
- currency = market['baseId']
791
- if side == 'buy':
792
- request[market['quoteId']] = amount * price
793
- else:
794
- request[market['baseId']] = amount
795
- request[currency] = amount
834
+ priceIsRequired = False
835
+ quantityIsRequired = False
836
+ if type == 'market':
837
+ if side == 'buy':
838
+ quoteAmount = None
839
+ cost = self.safe_number(params, 'cost')
840
+ params = self.omit(params, 'cost')
841
+ if cost is not None:
842
+ quoteAmount = self.cost_to_precision(symbol, cost)
843
+ else:
844
+ if price is None:
845
+ raise InvalidOrder(self.id + ' createOrder() requires the price argument for market buy orders to calculate the total cost to spend(amount * price).')
846
+ amountString = self.number_to_string(amount)
847
+ priceString = self.number_to_string(price)
848
+ costRequest = Precise.string_mul(amountString, priceString)
849
+ quoteAmount = self.cost_to_precision(symbol, costRequest)
850
+ request[market['quoteId']] = quoteAmount
851
+ else:
852
+ quantityIsRequired = True
853
+ elif type == 'limit':
854
+ priceIsRequired = True
855
+ quantityIsRequired = True
856
+ if side == 'buy':
857
+ request[market['quoteId']] = self.parse_to_numeric(Precise.string_mul(self.number_to_string(amount), self.number_to_string(price)))
858
+ if priceIsRequired:
859
+ if price is None:
860
+ raise InvalidOrder(self.id + ' createOrder() requires a price argument for a ' + type + ' order')
861
+ request['price'] = price
862
+ if quantityIsRequired:
863
+ request[market['baseId']] = self.amount_to_precision(symbol, amount)
796
864
  result = await self.privatePostTrade(self.extend(request, params))
797
865
  data = self.safe_value(result, 'return', {})
798
866
  id = self.safe_string(data, 'order_id')
@@ -804,7 +872,9 @@ class indodax(Exchange, ImplicitAPI):
804
872
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
805
873
  """
806
874
  cancels an open order
807
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#cancel-order-endpoints
875
+
876
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#cancel-order-endpoints
877
+
808
878
  :param str id: order id
809
879
  :param str symbol: unified symbol of the market the order was made in
810
880
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -817,24 +887,47 @@ class indodax(Exchange, ImplicitAPI):
817
887
  raise ArgumentsRequired(self.id + ' cancelOrder() requires an extra "side" param')
818
888
  await self.load_markets()
819
889
  market = self.market(symbol)
820
- request = {
890
+ request: dict = {
821
891
  'order_id': id,
822
892
  'pair': market['id'],
823
893
  'type': side,
824
894
  }
825
- return await self.privatePostCancelOrder(self.extend(request, params))
895
+ response = await self.privatePostCancelOrder(self.extend(request, params))
896
+ #
897
+ # {
898
+ # "success": 1,
899
+ # "return": {
900
+ # "order_id": 666883,
901
+ # "client_order_id": "clientx-sj82ks82j",
902
+ # "type": "sell",
903
+ # "pair": "btc_idr",
904
+ # "balance": {
905
+ # "idr": "33605800",
906
+ # "btc": "0.00000000",
907
+ # ...
908
+ # "frozen_idr": "0",
909
+ # "frozen_btc": "0.00000000",
910
+ # ...
911
+ # }
912
+ # }
913
+ # }
914
+ #
915
+ data = self.safe_dict(response, 'return')
916
+ return self.parse_order(data)
826
917
 
827
918
  async def fetch_transaction_fee(self, code: str, params={}):
828
919
  """
829
920
  fetch the fee for a transaction
830
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-fee-endpoints
921
+
922
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-fee-endpoints
923
+
831
924
  :param str code: unified currency code
832
925
  :param dict [params]: extra parameters specific to the exchange API endpoint
833
926
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
834
927
  """
835
928
  await self.load_markets()
836
929
  currency = self.currency(code)
837
- request = {
930
+ request: dict = {
838
931
  'currency': currency['id'],
839
932
  }
840
933
  response = await self.privatePostWithdrawFee(self.extend(request, params))
@@ -859,7 +952,9 @@ class indodax(Exchange, ImplicitAPI):
859
952
  async def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
860
953
  """
861
954
  fetch history of deposits and withdrawals
862
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#transaction-history-endpoints
955
+
956
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#transaction-history-endpoints
957
+
863
958
  :param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
864
959
  :param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
865
960
  :param int [limit]: max number of deposit/withdrawals to return, default is None
@@ -867,7 +962,7 @@ class indodax(Exchange, ImplicitAPI):
867
962
  :returns dict: a list of `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
868
963
  """
869
964
  await self.load_markets()
870
- request = {}
965
+ request: dict = {}
871
966
  if since is not None:
872
967
  startTime = self.iso8601(since)[0:10]
873
968
  request['start'] = startTime
@@ -951,10 +1046,12 @@ class indodax(Exchange, ImplicitAPI):
951
1046
  transactions = self.array_concat(withdraws, deposits)
952
1047
  return self.parse_transactions(transactions, currency, since, limit)
953
1048
 
954
- async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1049
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
955
1050
  """
956
1051
  make a withdrawal
957
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-coin-endpoints
1052
+
1053
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#withdraw-coin-endpoints
1054
+
958
1055
  :param str code: unified currency code
959
1056
  :param float amount: the amount to withdraw
960
1057
  :param str address: the address to withdraw to
@@ -973,7 +1070,7 @@ class indodax(Exchange, ImplicitAPI):
973
1070
  requestId = self.milliseconds()
974
1071
  # Alternatively:
975
1072
  # requestId = self.uuid()
976
- request = {
1073
+ request: dict = {
977
1074
  'currency': currency['id'],
978
1075
  'withdraw_amount': amount,
979
1076
  'withdraw_address': address,
@@ -999,7 +1096,7 @@ class indodax(Exchange, ImplicitAPI):
999
1096
  #
1000
1097
  return self.parse_transaction(response, currency)
1001
1098
 
1002
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1099
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1003
1100
  #
1004
1101
  # withdraw
1005
1102
  #
@@ -1075,16 +1172,18 @@ class indodax(Exchange, ImplicitAPI):
1075
1172
  'info': transaction,
1076
1173
  }
1077
1174
 
1078
- def parse_transaction_status(self, status):
1079
- statuses = {
1175
+ def parse_transaction_status(self, status: Str):
1176
+ statuses: dict = {
1080
1177
  'success': 'ok',
1081
1178
  }
1082
1179
  return self.safe_string(statuses, status, status)
1083
1180
 
1084
- async def fetch_deposit_addresses(self, codes: List[str] = None, params={}):
1181
+ async def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
1085
1182
  """
1086
1183
  fetch deposit addresses for multiple currencies and chain types
1087
- :see: https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#general-information-on-endpoints
1184
+
1185
+ https://github.com/btcid/indodax-official-api-docs/blob/master/Private-RestAPI.md#general-information-on-endpoints
1186
+
1088
1187
  :param str[] [codes]: list of unified currency codes, default is None
1089
1188
  :param dict [params]: extra parameters specific to the exchange API endpoint
1090
1189
  :returns dict: a list of `address structures <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1130,7 +1229,7 @@ class indodax(Exchange, ImplicitAPI):
1130
1229
  addresses = self.safe_dict(data, 'address', {})
1131
1230
  networks = self.safe_dict(data, 'network', {})
1132
1231
  addressKeys = list(addresses.keys())
1133
- result = {
1232
+ result: dict = {
1134
1233
  'info': data,
1135
1234
  }
1136
1235
  for i in range(0, len(addressKeys)):
@@ -1152,8 +1251,8 @@ class indodax(Exchange, ImplicitAPI):
1152
1251
  result[code] = {
1153
1252
  'info': {},
1154
1253
  'currency': code,
1155
- 'address': address,
1156
1254
  'network': network,
1255
+ 'address': address,
1157
1256
  'tag': None,
1158
1257
  }
1159
1258
  return result
@@ -1180,17 +1279,21 @@ class indodax(Exchange, ImplicitAPI):
1180
1279
  }
1181
1280
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1182
1281
 
1183
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1282
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1184
1283
  if response is None:
1185
1284
  return None
1186
1285
  # {success: 0, error: "invalid order."}
1187
1286
  # or
1188
1287
  # [{data, ...}, {...}, ...]
1288
+ # {"success":"1","status":"approved","withdraw_currency":"strm","withdraw_address":"0x2b9A8cd5535D99b419aEfFBF1ae8D90a7eBdb24E","withdraw_amount":"2165.05767839","fee":"21.11000000","amount_after_fee":"2143.94767839","submit_time":"1730759489","withdraw_id":"strm-3423","txid":""}
1189
1289
  if isinstance(response, list):
1190
1290
  return None # public endpoints may return []-arrays
1191
1291
  error = self.safe_value(response, 'error', '')
1192
1292
  if not ('success' in response) and error == '':
1193
1293
  return None # no 'success' property on public responses
1294
+ status = self.safe_string(response, 'success')
1295
+ if status == 'approved':
1296
+ return None
1194
1297
  if self.safe_integer(response, 'success', 0) == 1:
1195
1298
  # {success: 1, return: {orders: []}}
1196
1299
  if not ('return' in response):