ccxt 4.2.77__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 +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -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 +3030 -1087
  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 +3104 -880
  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 +238 -49
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +199 -65
  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 +392 -148
  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 +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  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 +404 -109
  125. ccxt/async_support/deribit.py +557 -323
  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 +1472 -463
  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 +1633 -268
  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 +917 -357
  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 +1776 -454
  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 +1137 -296
  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 +1722 -480
  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 +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3104 -880
  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 +238 -49
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +198 -65
  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 +392 -148
  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 +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  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 +404 -109
  233. ccxt/deribit.py +557 -323
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1472 -463
  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 +1632 -268
  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 +917 -357
  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 +1776 -454
  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 +62 -14
  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 +203 -81
  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 +965 -665
  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 +167 -31
  309. ccxt/pro/exmo.py +252 -20
  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 +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  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 +437 -65
  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} +456 -391
  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} +456 -393
  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 +1137 -296
  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.77.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.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/currencycom.py CHANGED
@@ -6,9 +6,10 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.currencycom import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Currency, Int, Leverage, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Account, Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Leverage, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import BadRequest
14
15
  from ccxt.base.errors import BadSymbol
@@ -19,7 +20,6 @@ from ccxt.base.errors import NotSupported
19
20
  from ccxt.base.errors import DDoSProtection
20
21
  from ccxt.base.errors import ExchangeNotAvailable
21
22
  from ccxt.base.errors import InvalidNonce
22
- from ccxt.base.errors import AuthenticationError
23
23
  from ccxt.base.decimal_to_precision import TICK_SIZE
24
24
  from ccxt.base.precise import Precise
25
25
 
@@ -114,6 +114,7 @@ class currencycom(Exchange, ImplicitAPI):
114
114
  'fetchWithdrawal': None,
115
115
  'fetchWithdrawals': True,
116
116
  'reduceMargin': None,
117
+ 'sandbox': True,
117
118
  'setLeverage': None,
118
119
  'setMarginMode': None,
119
120
  'setPositionMode': None,
@@ -260,6 +261,78 @@ class currencycom(Exchange, ImplicitAPI):
260
261
  'leverage_markets_suffix': '_LEVERAGE',
261
262
  'collateralCurrencies': ['USD', 'EUR', 'USDT'],
262
263
  },
264
+ 'features': {
265
+ 'default': {
266
+ 'sandbox': True,
267
+ 'createOrder': {
268
+ 'marginMode': True, # todo implementation
269
+ 'triggerPrice': True,
270
+ 'triggerPriceType': None,
271
+ 'triggerDirection': False,
272
+ 'stopLossPrice': False, # todo
273
+ 'takeProfitPrice': False, # todo
274
+ 'attachedStopLossTakeProfit': {
275
+ 'triggerPriceType': None,
276
+ 'price': False,
277
+ },
278
+ 'timeInForce': {
279
+ 'IOC': True,
280
+ 'FOK': True,
281
+ 'PO': False,
282
+ 'GTD': True,
283
+ },
284
+ 'hedged': False,
285
+ 'selfTradePrevention': False,
286
+ 'trailing': False,
287
+ 'iceberg': False,
288
+ 'leverage': True,
289
+ 'marketBuyByCost': False,
290
+ 'marketBuyRequiresPrice': False,
291
+ },
292
+ 'createOrders': None,
293
+ 'fetchMyTrades': {
294
+ 'marginMode': False,
295
+ 'limit': 500,
296
+ 'daysBack': 100000,
297
+ 'untilDays': 100000, # todo implementation
298
+ },
299
+ 'fetchOrder': {
300
+ 'marginMode': False,
301
+ 'trigger': False,
302
+ 'trailing': False,
303
+ },
304
+ 'fetchOpenOrders': {
305
+ 'marginMode': True,
306
+ 'limit': 100,
307
+ 'trigger': False,
308
+ 'trailing': False,
309
+ },
310
+ 'fetchOrders': None,
311
+ 'fetchClosedOrders': None,
312
+ 'fetchOHLCV': {
313
+ 'limit': 1000,
314
+ },
315
+ },
316
+ 'spot': {
317
+ 'extends': 'default',
318
+ },
319
+ 'swap': {
320
+ 'linear': {
321
+ 'extends': 'default',
322
+ },
323
+ 'inverse': {
324
+ 'extends': 'default',
325
+ },
326
+ },
327
+ 'future': {
328
+ 'linear': {
329
+ 'extends': 'default',
330
+ },
331
+ 'inverse': {
332
+ 'extends': 'default',
333
+ },
334
+ },
335
+ },
263
336
  'exceptions': {
264
337
  'broad': {
265
338
  'FIELD_VALIDATION_ERROR Cancel is available only for LIMIT order': InvalidOrder,
@@ -314,7 +387,9 @@ class currencycom(Exchange, ImplicitAPI):
314
387
  def fetch_time(self, params={}):
315
388
  """
316
389
  fetches the current integer timestamp in milliseconds from the exchange server
317
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/timeUsingGET
390
+
391
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/timeUsingGET
392
+
318
393
  :param dict [params]: extra parameters specific to the exchange API endpoint
319
394
  :returns int: the current integer timestamp in milliseconds from the exchange server
320
395
  """
@@ -326,10 +401,12 @@ class currencycom(Exchange, ImplicitAPI):
326
401
  #
327
402
  return self.safe_integer(response, 'serverTime')
328
403
 
329
- def fetch_currencies(self, params={}):
404
+ def fetch_currencies(self, params={}) -> Currencies:
330
405
  """
331
406
  fetches all available currencies on an exchange
332
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getCurrenciesUsingGET
407
+
408
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getCurrenciesUsingGET
409
+
333
410
  :param dict [params]: extra parameters specific to the exchange API endpoint
334
411
  :returns dict: an associative dictionary of currencies
335
412
  """
@@ -361,7 +438,7 @@ class currencycom(Exchange, ImplicitAPI):
361
438
  # },
362
439
  # ]
363
440
  #
364
- result = {}
441
+ result: dict = {}
365
442
  for i in range(0, len(response)):
366
443
  currency = response[i]
367
444
  id = self.safe_string(currency, 'displaySymbol')
@@ -395,10 +472,12 @@ class currencycom(Exchange, ImplicitAPI):
395
472
  }
396
473
  return result
397
474
 
398
- def fetch_markets(self, params={}):
475
+ def fetch_markets(self, params={}) -> List[Market]:
399
476
  """
400
477
  retrieves data on all markets for currencycom
401
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/exchangeInfoUsingGET
478
+
479
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/exchangeInfoUsingGET
480
+
402
481
  :param dict [params]: extra parameters specific to the exchange API endpoint
403
482
  :returns dict[]: an array of objects representing market data
404
483
  """
@@ -497,7 +576,7 @@ class currencycom(Exchange, ImplicitAPI):
497
576
  if (maxPrice is not None) and (Precise.string_gt(maxPrice, '0')):
498
577
  limitPriceMax = maxPrice
499
578
  precisionAmount = self.parse_number(self.parse_precision(self.safe_string(market, 'baseAssetPrecision')))
500
- limitAmount = {
579
+ limitAmount: dict = {
501
580
  'min': None,
502
581
  'max': None,
503
582
  }
@@ -508,7 +587,7 @@ class currencycom(Exchange, ImplicitAPI):
508
587
  'min': self.safe_number(filter, 'minQty'),
509
588
  'max': self.safe_number(filter, 'maxQty'),
510
589
  }
511
- limitMarket = {
590
+ limitMarket: dict = {
512
591
  'min': None,
513
592
  'max': None,
514
593
  }
@@ -577,7 +656,9 @@ class currencycom(Exchange, ImplicitAPI):
577
656
  def fetch_accounts(self, params={}) -> List[Account]:
578
657
  """
579
658
  fetch all the accounts associated with a profile
580
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
659
+
660
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
661
+
581
662
  :param dict [params]: extra parameters specific to the exchange API endpoint
582
663
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
583
664
  """
@@ -628,10 +709,12 @@ class currencycom(Exchange, ImplicitAPI):
628
709
  })
629
710
  return result
630
711
 
631
- def fetch_trading_fees(self, params={}):
712
+ def fetch_trading_fees(self, params={}) -> TradingFees:
632
713
  """
633
714
  fetch the trading fees for multiple markets
634
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
715
+
716
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
717
+
635
718
  :param dict [params]: extra parameters specific to the exchange API endpoint
636
719
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
637
720
  """
@@ -653,7 +736,7 @@ class currencycom(Exchange, ImplicitAPI):
653
736
  #
654
737
  makerFee = self.safe_number(response, 'makerCommission')
655
738
  takerFee = self.safe_number(response, 'takerCommission')
656
- result = {}
739
+ result: dict = {}
657
740
  for i in range(0, len(self.symbols)):
658
741
  symbol = self.symbols[i]
659
742
  result[symbol] = {
@@ -689,7 +772,7 @@ class currencycom(Exchange, ImplicitAPI):
689
772
  # ]
690
773
  # }
691
774
  #
692
- result = {'info': response}
775
+ result: dict = {'info': response}
693
776
  balances = self.safe_value(response, 'balances', [])
694
777
  for i in range(0, len(balances)):
695
778
  balance = balances[i]
@@ -704,7 +787,9 @@ class currencycom(Exchange, ImplicitAPI):
704
787
  def fetch_balance(self, params={}) -> Balances:
705
788
  """
706
789
  query for balance and get the amount of funds available for trading or funds locked in orders
707
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
790
+
791
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/accountUsingGET
792
+
708
793
  :param dict [params]: extra parameters specific to the exchange API endpoint
709
794
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
710
795
  """
@@ -746,7 +831,9 @@ class currencycom(Exchange, ImplicitAPI):
746
831
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
747
832
  """
748
833
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
749
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/depthUsingGET
834
+
835
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/depthUsingGET
836
+
750
837
  :param str symbol: unified symbol of the market to fetch the order book for
751
838
  :param int [limit]: the maximum amount of order book entries to return
752
839
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -754,7 +841,7 @@ class currencycom(Exchange, ImplicitAPI):
754
841
  """
755
842
  self.load_markets()
756
843
  market = self.market(symbol)
757
- request = {
844
+ request: dict = {
758
845
  'symbol': market['id'],
759
846
  }
760
847
  if limit is not None:
@@ -779,7 +866,7 @@ class currencycom(Exchange, ImplicitAPI):
779
866
  orderbook['nonce'] = self.safe_integer(response, 'lastUpdateId')
780
867
  return orderbook
781
868
 
782
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
869
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
783
870
  #
784
871
  # fetchTicker
785
872
  #
@@ -860,14 +947,16 @@ class currencycom(Exchange, ImplicitAPI):
860
947
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
861
948
  """
862
949
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
863
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/ticker_24hrUsingGET
950
+
951
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/ticker_24hrUsingGET
952
+
864
953
  :param str symbol: unified symbol of the market to fetch the ticker for
865
954
  :param dict [params]: extra parameters specific to the exchange API endpoint
866
955
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
867
956
  """
868
957
  self.load_markets()
869
958
  market = self.market(symbol)
870
- request = {
959
+ request: dict = {
871
960
  'symbol': market['id'],
872
961
  }
873
962
  response = self.publicGetV2Ticker24hr(self.extend(request, params))
@@ -896,7 +985,9 @@ class currencycom(Exchange, ImplicitAPI):
896
985
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
897
986
  """
898
987
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
899
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/ticker_24hrUsingGET
988
+
989
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/ticker_24hrUsingGET
990
+
900
991
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
901
992
  :param dict [params]: extra parameters specific to the exchange API endpoint
902
993
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -946,7 +1037,9 @@ class currencycom(Exchange, ImplicitAPI):
946
1037
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
947
1038
  """
948
1039
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
949
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/klinesUsingGET
1040
+
1041
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/klinesUsingGET
1042
+
950
1043
  :param str symbol: unified symbol of the market to fetch OHLCV data for
951
1044
  :param str timeframe: the length of time each candle represents
952
1045
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -956,14 +1049,14 @@ class currencycom(Exchange, ImplicitAPI):
956
1049
  """
957
1050
  self.load_markets()
958
1051
  market = self.market(symbol)
959
- request = {
1052
+ request: dict = {
960
1053
  'symbol': market['id'],
961
1054
  'interval': self.safe_string(self.timeframes, timeframe, timeframe),
962
1055
  }
963
1056
  if since is not None:
964
1057
  request['startTime'] = since
965
1058
  if limit is not None:
966
- request['limit'] = limit # default 500, max 1000
1059
+ request['limit'] = min(limit, 1000) # default 500, max 1000
967
1060
  response = self.publicGetV2Klines(self.extend(request, params))
968
1061
  #
969
1062
  # [
@@ -974,7 +1067,7 @@ class currencycom(Exchange, ImplicitAPI):
974
1067
  #
975
1068
  return self.parse_ohlcvs(response, market, timeframe, since, limit)
976
1069
 
977
- def parse_trade(self, trade, market: Market = None) -> Trade:
1070
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
978
1071
  #
979
1072
  # fetchTrades(public aggregate trades)
980
1073
  #
@@ -1052,7 +1145,9 @@ class currencycom(Exchange, ImplicitAPI):
1052
1145
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1053
1146
  """
1054
1147
  get the list of most recent trades for a particular symbol
1055
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/aggTradesUsingGET
1148
+
1149
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/aggTradesUsingGET
1150
+
1056
1151
  :param str symbol: unified symbol of the market to fetch trades for
1057
1152
  :param int [since]: timestamp in ms of the earliest trade to fetch
1058
1153
  :param int [limit]: the maximum amount of trades to fetch
@@ -1061,7 +1156,7 @@ class currencycom(Exchange, ImplicitAPI):
1061
1156
  """
1062
1157
  self.load_markets()
1063
1158
  market = self.market(symbol)
1064
- request = {
1159
+ request: dict = {
1065
1160
  'symbol': market['id'],
1066
1161
  # 'limit': 500, # default 500, max 1000
1067
1162
  }
@@ -1083,7 +1178,7 @@ class currencycom(Exchange, ImplicitAPI):
1083
1178
  #
1084
1179
  return self.parse_trades(response, market, since, limit)
1085
1180
 
1086
- def parse_order(self, order, market: Market = None) -> Order:
1181
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1087
1182
  #
1088
1183
  # createOrder
1089
1184
  #
@@ -1175,7 +1270,6 @@ class currencycom(Exchange, ImplicitAPI):
1175
1270
  'timeInForce': timeInForce,
1176
1271
  'side': side,
1177
1272
  'price': price,
1178
- 'stopPrice': None,
1179
1273
  'triggerPrice': None,
1180
1274
  'amount': amount,
1181
1275
  'cost': None,
@@ -1187,8 +1281,8 @@ class currencycom(Exchange, ImplicitAPI):
1187
1281
  'trades': fills,
1188
1282
  }, market)
1189
1283
 
1190
- def parse_order_status(self, status):
1191
- statuses = {
1284
+ def parse_order_status(self, status: Str):
1285
+ statuses: dict = {
1192
1286
  'NEW': 'open',
1193
1287
  'CREATED': 'open',
1194
1288
  'MODIFIED': 'open',
@@ -1202,7 +1296,7 @@ class currencycom(Exchange, ImplicitAPI):
1202
1296
  return self.safe_string(statuses, status, status)
1203
1297
 
1204
1298
  def parse_order_type(self, status):
1205
- statuses = {
1299
+ statuses: dict = {
1206
1300
  'MARKET': 'market',
1207
1301
  'LIMIT': 'limit',
1208
1302
  'STOP': 'stop',
@@ -1216,7 +1310,7 @@ class currencycom(Exchange, ImplicitAPI):
1216
1310
  return self.safe_string(statuses, status, status)
1217
1311
 
1218
1312
  def parse_order_time_in_force(self, status):
1219
- statuses = {
1313
+ statuses: dict = {
1220
1314
  'GTC': 'GTC',
1221
1315
  'FOK': 'FOK',
1222
1316
  'IOC': 'IOC',
@@ -1224,7 +1318,7 @@ class currencycom(Exchange, ImplicitAPI):
1224
1318
  return self.safe_string(statuses, status, status)
1225
1319
 
1226
1320
  def parse_order_side(self, status):
1227
- statuses = {
1321
+ statuses: dict = {
1228
1322
  'BUY': 'buy',
1229
1323
  'SELL': 'sell',
1230
1324
  }
@@ -1233,12 +1327,14 @@ class currencycom(Exchange, ImplicitAPI):
1233
1327
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1234
1328
  """
1235
1329
  create a trade order
1236
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/orderUsingPOST
1330
+
1331
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/orderUsingPOST
1332
+
1237
1333
  :param str symbol: unified symbol of the market to create an order in
1238
1334
  :param str type: 'market' or 'limit'
1239
1335
  :param str side: 'buy' or 'sell'
1240
1336
  :param float amount: how much of currency you want to trade in units of base currency
1241
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1337
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1242
1338
  :param dict [params]: extra parameters specific to the exchange API endpoint
1243
1339
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1244
1340
  """
@@ -1251,7 +1347,7 @@ class currencycom(Exchange, ImplicitAPI):
1251
1347
  if accountId is None:
1252
1348
  raise ArgumentsRequired(self.id + " createOrder() requires an accountId parameter or an exchange.options['accountId'] option for " + market['type'] + ' markets')
1253
1349
  newOrderRespType = self.safe_value(self.options['newOrderRespType'], type, 'RESULT')
1254
- request = {
1350
+ request: dict = {
1255
1351
  'symbol': market['id'],
1256
1352
  'quantity': self.amount_to_precision(symbol, amount),
1257
1353
  'type': type.upper(),
@@ -1271,11 +1367,11 @@ class currencycom(Exchange, ImplicitAPI):
1271
1367
  request['type'] = 'STOP'
1272
1368
  request['price'] = self.price_to_precision(symbol, price)
1273
1369
  elif type == 'market':
1274
- stopPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
1370
+ triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
1275
1371
  params = self.omit(params, ['triggerPrice', 'stopPrice'])
1276
- if stopPrice is not None:
1372
+ if triggerPrice is not None:
1277
1373
  request['type'] = 'STOP'
1278
- request['price'] = self.price_to_precision(symbol, stopPrice)
1374
+ request['price'] = self.price_to_precision(symbol, triggerPrice)
1279
1375
  response = self.privatePostV2Order(self.extend(request, params))
1280
1376
  #
1281
1377
  # limit
@@ -1321,7 +1417,10 @@ class currencycom(Exchange, ImplicitAPI):
1321
1417
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1322
1418
  """
1323
1419
  fetches information on an order made by the user
1324
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getOrderUsingGET
1420
+
1421
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getOrderUsingGET
1422
+
1423
+ :param str id: order id
1325
1424
  :param str symbol: unified symbol of the market the order was made in
1326
1425
  :param dict [params]: extra parameters specific to the exchange API endpoint
1327
1426
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1330,7 +1429,7 @@ class currencycom(Exchange, ImplicitAPI):
1330
1429
  raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
1331
1430
  self.load_markets()
1332
1431
  market = self.market(symbol)
1333
- request = {
1432
+ request: dict = {
1334
1433
  'orderId': id,
1335
1434
  'symbol': market['id'],
1336
1435
  }
@@ -1362,7 +1461,9 @@ class currencycom(Exchange, ImplicitAPI):
1362
1461
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1363
1462
  """
1364
1463
  fetch all unfilled currently open orders
1365
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/openOrdersUsingGET
1464
+
1465
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/openOrdersUsingGET
1466
+
1366
1467
  :param str symbol: unified market symbol
1367
1468
  :param int [since]: the earliest time in ms to fetch open orders for
1368
1469
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1371,7 +1472,7 @@ class currencycom(Exchange, ImplicitAPI):
1371
1472
  """
1372
1473
  self.load_markets()
1373
1474
  market = None
1374
- request = {}
1475
+ request: dict = {}
1375
1476
  if symbol is not None:
1376
1477
  market = self.market(symbol)
1377
1478
  request['symbol'] = market['id']
@@ -1405,7 +1506,9 @@ class currencycom(Exchange, ImplicitAPI):
1405
1506
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1406
1507
  """
1407
1508
  cancels an open order
1408
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/cancelOrderUsingDELETE
1509
+
1510
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/cancelOrderUsingDELETE
1511
+
1409
1512
  :param str id: order id
1410
1513
  :param str symbol: unified symbol of the market the order was made in
1411
1514
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1416,7 +1519,7 @@ class currencycom(Exchange, ImplicitAPI):
1416
1519
  self.load_markets()
1417
1520
  market = self.market(symbol)
1418
1521
  origClientOrderId = self.safe_value(params, 'origClientOrderId')
1419
- request = {
1522
+ request: dict = {
1420
1523
  'symbol': market['id'],
1421
1524
  # 'orderId': int(id),
1422
1525
  # 'origClientOrderId': id,
@@ -1444,7 +1547,9 @@ class currencycom(Exchange, ImplicitAPI):
1444
1547
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1445
1548
  """
1446
1549
  fetch all trades made by the user
1447
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/myTradesUsingGET
1550
+
1551
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/myTradesUsingGET
1552
+
1448
1553
  :param str symbol: unified market symbol
1449
1554
  :param int [since]: the earliest time in ms to fetch trades for
1450
1555
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1455,7 +1560,7 @@ class currencycom(Exchange, ImplicitAPI):
1455
1560
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
1456
1561
  self.load_markets()
1457
1562
  market = self.market(symbol)
1458
- request = {
1563
+ request: dict = {
1459
1564
  'symbol': market['id'],
1460
1565
  }
1461
1566
  if limit is not None:
@@ -1484,7 +1589,9 @@ class currencycom(Exchange, ImplicitAPI):
1484
1589
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1485
1590
  """
1486
1591
  fetch all deposits made to an account
1487
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getDepositsUsingGET
1592
+
1593
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getDepositsUsingGET
1594
+
1488
1595
  :param str code: unified currency code
1489
1596
  :param int [since]: the earliest time in ms to fetch deposits for
1490
1597
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1496,7 +1603,9 @@ class currencycom(Exchange, ImplicitAPI):
1496
1603
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1497
1604
  """
1498
1605
  fetch all withdrawals made from an account
1499
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getWithdrawalsUsingGET
1606
+
1607
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getWithdrawalsUsingGET
1608
+
1500
1609
  :param str code: unified currency code
1501
1610
  :param int [since]: the earliest time in ms to fetch withdrawals for
1502
1611
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -1508,7 +1617,9 @@ class currencycom(Exchange, ImplicitAPI):
1508
1617
  def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1509
1618
  """
1510
1619
  fetch history of deposits and withdrawals
1511
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getTransactionsUsingGET
1620
+
1621
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getTransactionsUsingGET
1622
+
1512
1623
  :param str [code]: unified currency code for the currency of the deposit/withdrawals, default is None
1513
1624
  :param int [since]: timestamp in ms of the earliest deposit/withdrawal, default is None
1514
1625
  :param int [limit]: max number of deposit/withdrawals to return, default is None
@@ -1519,7 +1630,7 @@ class currencycom(Exchange, ImplicitAPI):
1519
1630
 
1520
1631
  def fetch_transactions_by_method(self, method, code: Str = None, since: Int = None, limit: Int = None, params={}):
1521
1632
  self.load_markets()
1522
- request = {}
1633
+ request: dict = {}
1523
1634
  currency = None
1524
1635
  if code is not None:
1525
1636
  currency = self.currency(code)
@@ -1554,7 +1665,7 @@ class currencycom(Exchange, ImplicitAPI):
1554
1665
  #
1555
1666
  return self.parse_transactions(response, currency, since, limit, params)
1556
1667
 
1557
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1668
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1558
1669
  #
1559
1670
  # {
1560
1671
  # "id": "616769213",
@@ -1604,32 +1715,34 @@ class currencycom(Exchange, ImplicitAPI):
1604
1715
  'fee': fee,
1605
1716
  }
1606
1717
 
1607
- def parse_transaction_status(self, status):
1608
- statuses = {
1718
+ def parse_transaction_status(self, status: Str):
1719
+ statuses: dict = {
1609
1720
  'APPROVAL': 'pending',
1610
1721
  'PROCESSED': 'ok',
1611
1722
  }
1612
1723
  return self.safe_string(statuses, status, status)
1613
1724
 
1614
1725
  def parse_transaction_type(self, type):
1615
- types = {
1726
+ types: dict = {
1616
1727
  'deposit': 'deposit',
1617
1728
  'withdrawal': 'withdrawal',
1618
1729
  }
1619
1730
  return self.safe_string(types, type, type)
1620
1731
 
1621
- def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1732
+ def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
1622
1733
  """
1623
- fetch the history of changes, actions done by the user or operations that altered balance of the user
1624
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getLedgerUsingGET
1625
- :param str code: unified currency code, default is None
1734
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
1735
+
1736
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getLedgerUsingGET
1737
+
1738
+ :param str [code]: unified currency code, default is None
1626
1739
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
1627
- :param int [limit]: max number of ledger entrys to return, default is None
1740
+ :param int [limit]: max number of ledger entries to return, default is None
1628
1741
  :param dict [params]: extra parameters specific to the exchange API endpoint
1629
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
1742
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
1630
1743
  """
1631
1744
  self.load_markets()
1632
- request = {}
1745
+ request: dict = {}
1633
1746
  currency = None
1634
1747
  if code is not None:
1635
1748
  currency = self.currency(code)
@@ -1667,19 +1780,20 @@ class currencycom(Exchange, ImplicitAPI):
1667
1780
  #
1668
1781
  return self.parse_ledger(response, currency, since, limit)
1669
1782
 
1670
- def parse_ledger_entry(self, item, currency: Currency = None):
1783
+ def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
1671
1784
  id = self.safe_string(item, 'id')
1672
1785
  amountString = self.safe_string(item, 'amount')
1673
1786
  amount = Precise.string_abs(amountString)
1674
1787
  timestamp = self.safe_integer(item, 'timestamp')
1675
1788
  currencyId = self.safe_string(item, 'currency')
1676
1789
  code = self.safe_currency_code(currencyId, currency)
1790
+ currency = self.safe_currency(currencyId, currency)
1677
1791
  feeCost = self.safe_string(item, 'commission')
1678
1792
  fee = None
1679
1793
  if feeCost is not None:
1680
1794
  fee = {'currency': code, 'cost': feeCost}
1681
1795
  direction = 'out' if Precise.string_lt(amountString, '0') else 'in'
1682
- result = {
1796
+ return self.safe_ledger_entry({
1683
1797
  'id': id,
1684
1798
  'timestamp': timestamp,
1685
1799
  'datetime': self.iso8601(timestamp),
@@ -1695,11 +1809,10 @@ class currencycom(Exchange, ImplicitAPI):
1695
1809
  'status': self.parse_ledger_entry_status(self.safe_string(item, 'status')),
1696
1810
  'fee': fee,
1697
1811
  'info': item,
1698
- }
1699
- return result
1812
+ }, currency)
1700
1813
 
1701
1814
  def parse_ledger_entry_status(self, status):
1702
- statuses = {
1815
+ statuses: dict = {
1703
1816
  'APPROVAL': 'pending',
1704
1817
  'PROCESSED': 'ok',
1705
1818
  'CANCELLED': 'canceled',
@@ -1707,7 +1820,7 @@ class currencycom(Exchange, ImplicitAPI):
1707
1820
  return self.safe_string(statuses, status, status)
1708
1821
 
1709
1822
  def parse_ledger_entry_type(self, type):
1710
- types = {
1823
+ types: dict = {
1711
1824
  'deposit': 'transaction',
1712
1825
  'withdrawal': 'transaction',
1713
1826
  'exchange_commission': 'fee',
@@ -1717,14 +1830,16 @@ class currencycom(Exchange, ImplicitAPI):
1717
1830
  def fetch_leverage(self, symbol: str, params={}) -> Leverage:
1718
1831
  """
1719
1832
  fetch the set leverage for a market
1720
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/leverageSettingsUsingGET
1833
+
1834
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/leverageSettingsUsingGET
1835
+
1721
1836
  :param str symbol: unified market symbol
1722
1837
  :param dict [params]: extra parameters specific to the exchange API endpoint
1723
1838
  :returns dict: a `leverage structure <https://docs.ccxt.com/#/?id=leverage-structure>`
1724
1839
  """
1725
1840
  self.load_markets()
1726
1841
  market = self.market(symbol)
1727
- request = {
1842
+ request: dict = {
1728
1843
  'symbol': market['id'],
1729
1844
  }
1730
1845
  response = self.privateGetV2LeverageSettings(self.extend(request, params))
@@ -1736,7 +1851,7 @@ class currencycom(Exchange, ImplicitAPI):
1736
1851
  #
1737
1852
  return self.parse_leverage(response, market)
1738
1853
 
1739
- def parse_leverage(self, leverage, market=None) -> Leverage:
1854
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
1740
1855
  leverageValue = self.safe_integer(leverage, 'value')
1741
1856
  return {
1742
1857
  'info': leverage,
@@ -1746,17 +1861,19 @@ class currencycom(Exchange, ImplicitAPI):
1746
1861
  'shortLeverage': leverageValue,
1747
1862
  }
1748
1863
 
1749
- def fetch_deposit_address(self, code: str, params={}):
1864
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1750
1865
  """
1751
1866
  fetch the deposit address for a currency associated with self account
1752
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getDepositAddressUsingGET
1867
+
1868
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/getDepositAddressUsingGET
1869
+
1753
1870
  :param str code: unified currency code
1754
1871
  :param dict [params]: extra parameters specific to the exchange API endpoint
1755
1872
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1756
1873
  """
1757
1874
  self.load_markets()
1758
1875
  currency = self.currency(code)
1759
- request = {
1876
+ request: dict = {
1760
1877
  'coin': currency['id'],
1761
1878
  }
1762
1879
  response = self.privateGetV2DepositAddress(self.extend(request, params))
@@ -1765,16 +1882,16 @@ class currencycom(Exchange, ImplicitAPI):
1765
1882
  #
1766
1883
  return self.parse_deposit_address(response, currency)
1767
1884
 
1768
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1885
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1769
1886
  address = self.safe_string(depositAddress, 'address')
1770
1887
  self.check_address(address)
1771
1888
  currency = self.safe_currency(None, currency)
1772
1889
  return {
1890
+ 'info': depositAddress,
1773
1891
  'currency': currency['code'],
1892
+ 'network': None,
1774
1893
  'address': address,
1775
1894
  'tag': None,
1776
- 'network': None,
1777
- 'info': depositAddress,
1778
1895
  }
1779
1896
 
1780
1897
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
@@ -1808,7 +1925,9 @@ class currencycom(Exchange, ImplicitAPI):
1808
1925
  def fetch_positions(self, symbols: Strings = None, params={}):
1809
1926
  """
1810
1927
  fetch all open positions
1811
- :see: https://apitradedoc.currency.com/swagger-ui.html#/rest-api/tradingPositionsUsingGET
1928
+
1929
+ https://apitradedoc.currency.com/swagger-ui.html#/rest-api/tradingPositionsUsingGET
1930
+
1812
1931
  :param str[]|None symbols: list of unified market symbols
1813
1932
  :param dict [params]: extra parameters specific to the exchange API endpoint
1814
1933
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
@@ -1847,10 +1966,10 @@ class currencycom(Exchange, ImplicitAPI):
1847
1966
  # ]
1848
1967
  # }
1849
1968
  #
1850
- data = self.safe_value(response, 'positions', [])
1969
+ data = self.safe_list(response, 'positions', [])
1851
1970
  return self.parse_positions(data, symbols)
1852
1971
 
1853
- def parse_position(self, position, market: Market = None):
1972
+ def parse_position(self, position: dict, market: Market = None):
1854
1973
  #
1855
1974
  # {
1856
1975
  # "accountId": "109698017416453793",
@@ -1901,7 +2020,7 @@ class currencycom(Exchange, ImplicitAPI):
1901
2020
  'collateral': None,
1902
2021
  'side': side,
1903
2022
  # 'realizedProfit': self.safe_number(position, 'rpl'),
1904
- 'unrealizedProfit': unrealizedProfit,
2023
+ 'unrealizedPnl': unrealizedProfit,
1905
2024
  'leverage': leverage,
1906
2025
  'percentage': None,
1907
2026
  'marginMode': None,
@@ -1915,13 +2034,12 @@ class currencycom(Exchange, ImplicitAPI):
1915
2034
  'maintenanceMarginPercentage': None,
1916
2035
  'marginRatio': None,
1917
2036
  'id': None,
1918
- 'unrealizedPnl': None,
1919
2037
  'hedged': None,
1920
2038
  'stopLossPrice': None,
1921
2039
  'takeProfitPrice': None,
1922
2040
  })
1923
2041
 
1924
- def handle_errors(self, httpCode, reason, url, method, headers, body, response, requestHeaders, requestBody):
2042
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1925
2043
  if (httpCode == 418) or (httpCode == 429):
1926
2044
  raise DDoSProtection(self.id + ' ' + str(httpCode) + ' ' + reason + ' ' + body)
1927
2045
  # error response in a form: {"code": -1013, "msg": "Invalid quantity."}