ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -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 +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -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 +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -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 +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -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 +143 -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.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.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.49.dist-info}/top_level.txt +0 -0
ccxt/coinsph.py CHANGED
@@ -6,14 +6,14 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.coinsph import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Balances, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, 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 PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
15
16
  from ccxt.base.errors import BadSymbol
16
- from ccxt.base.errors import BadResponse
17
17
  from ccxt.base.errors import InsufficientFunds
18
18
  from ccxt.base.errors import InvalidAddress
19
19
  from ccxt.base.errors import InvalidOrder
@@ -23,7 +23,7 @@ from ccxt.base.errors import DuplicateOrderId
23
23
  from ccxt.base.errors import NotSupported
24
24
  from ccxt.base.errors import RateLimitExceeded
25
25
  from ccxt.base.errors import ExchangeNotAvailable
26
- from ccxt.base.errors import AuthenticationError
26
+ from ccxt.base.errors import BadResponse
27
27
  from ccxt.base.decimal_to_precision import TICK_SIZE
28
28
  from ccxt.base.precise import Precise
29
29
 
@@ -108,7 +108,11 @@ class coinsph(Exchange, ImplicitAPI):
108
108
  'fetchOrders': False,
109
109
  'fetchOrderTrades': True,
110
110
  'fetchPosition': False,
111
+ 'fetchPositionHistory': False,
112
+ 'fetchPositionMode': False,
111
113
  'fetchPositions': False,
114
+ 'fetchPositionsForSymbol': False,
115
+ 'fetchPositionsHistory': False,
112
116
  'fetchPositionsRisk': False,
113
117
  'fetchPremiumIndexOHLCV': False,
114
118
  'fetchStatus': True,
@@ -309,6 +313,72 @@ class coinsph(Exchange, ImplicitAPI):
309
313
  'ARB': 'ARBITRUM',
310
314
  },
311
315
  },
316
+ 'features': {
317
+ 'spot': {
318
+ 'sandbox': False,
319
+ 'createOrder': {
320
+ 'marginMode': False,
321
+ 'triggerPrice': True,
322
+ 'triggerPriceType': None,
323
+ 'triggerDirection': False,
324
+ 'stopLossPrice': False, # todo
325
+ 'takeProfitPrice': False, # todo
326
+ 'attachedStopLossTakeProfit': None,
327
+ 'timeInForce': {
328
+ 'IOC': True,
329
+ 'FOK': True,
330
+ 'PO': False,
331
+ 'GTD': False,
332
+ },
333
+ 'hedged': False,
334
+ 'trailing': False,
335
+ 'leverage': False,
336
+ 'marketBuyByCost': True,
337
+ 'marketBuyRequiresPrice': False,
338
+ 'selfTradePrevention': True, # todo implement
339
+ 'iceberg': False,
340
+ },
341
+ 'createOrders': None,
342
+ 'fetchMyTrades': {
343
+ 'marginMode': False,
344
+ 'limit': 1000,
345
+ 'daysBack': 100000,
346
+ 'untilDays': 100000, # todo implement
347
+ },
348
+ 'fetchOrder': {
349
+ 'marginMode': False,
350
+ 'trigger': False,
351
+ 'trailing': False,
352
+ },
353
+ 'fetchOpenOrders': {
354
+ 'marginMode': False,
355
+ 'limit': None,
356
+ 'trigger': False,
357
+ 'trailing': False,
358
+ },
359
+ 'fetchOrders': None,
360
+ 'fetchClosedOrders': {
361
+ 'marginMode': False,
362
+ 'limit': 1000,
363
+ 'daysBack': 100000,
364
+ 'daysBackCanceled': 1,
365
+ 'untilDays': 100000,
366
+ 'trigger': False,
367
+ 'trailing': False,
368
+ },
369
+ 'fetchOHLCV': {
370
+ 'limit': 1000,
371
+ },
372
+ },
373
+ 'swap': {
374
+ 'linear': None,
375
+ 'inverse': None,
376
+ },
377
+ 'future': {
378
+ 'linear': None,
379
+ 'inverse': None,
380
+ },
381
+ },
312
382
  # https://coins-docs.github.io/errors/
313
383
  'exceptions': {
314
384
  'exact': {
@@ -452,7 +522,9 @@ class coinsph(Exchange, ImplicitAPI):
452
522
  def fetch_status(self, params={}):
453
523
  """
454
524
  the latest known information on the availability of the exchange API
455
- :see: https://coins-docs.github.io/rest-api/#test-connectivity
525
+
526
+ https://coins-docs.github.io/rest-api/#test-connectivity
527
+
456
528
  :param dict [params]: extra parameters specific to the exchange API endpoint
457
529
  :returns dict: a `status structure <https://docs.ccxt.com/#/?id=exchange-status-structure>`
458
530
  """
@@ -468,7 +540,9 @@ class coinsph(Exchange, ImplicitAPI):
468
540
  def fetch_time(self, params={}):
469
541
  """
470
542
  fetches the current integer timestamp in milliseconds from the exchange server
471
- :see: https://coins-docs.github.io/rest-api/#check-server-time
543
+
544
+ https://coins-docs.github.io/rest-api/#check-server-time
545
+
472
546
  :param dict [params]: extra parameters specific to the exchange API endpoint
473
547
  :returns int: the current integer timestamp in milliseconds from the exchange server
474
548
  """
@@ -478,10 +552,12 @@ class coinsph(Exchange, ImplicitAPI):
478
552
  #
479
553
  return self.safe_integer(response, 'serverTime')
480
554
 
481
- def fetch_markets(self, params={}):
555
+ def fetch_markets(self, params={}) -> List[Market]:
482
556
  """
483
557
  retrieves data on all markets for coinsph
484
- :see: https://coins-docs.github.io/rest-api/#exchange-information
558
+
559
+ https://coins-docs.github.io/rest-api/#exchange-information
560
+
485
561
  :param dict [params]: extra parameters specific to the exchange API endpoint
486
562
  :returns dict[]: an array of objects representing market data
487
563
  """
@@ -545,7 +621,7 @@ class coinsph(Exchange, ImplicitAPI):
545
621
  # ]
546
622
  # }
547
623
  #
548
- markets = self.safe_value(response, 'symbols')
624
+ markets = self.safe_list(response, 'symbols', [])
549
625
  result = []
550
626
  for i in range(0, len(markets)):
551
627
  market = markets[i]
@@ -554,7 +630,7 @@ class coinsph(Exchange, ImplicitAPI):
554
630
  quoteId = self.safe_string(market, 'quoteAsset')
555
631
  base = self.safe_currency_code(baseId)
556
632
  quote = self.safe_currency_code(quoteId)
557
- limits = self.index_by(self.safe_value(market, 'filters'), 'filterType')
633
+ limits = self.index_by(self.safe_list(market, 'filters', []), 'filterType')
558
634
  amountLimits = self.safe_value(limits, 'LOT_SIZE', {})
559
635
  priceLimits = self.safe_value(limits, 'PRICE_FILTER', {})
560
636
  costLimits = self.safe_value(limits, 'NOTIONAL', {})
@@ -615,15 +691,17 @@ class coinsph(Exchange, ImplicitAPI):
615
691
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
616
692
  """
617
693
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
618
- :see: https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
619
- :see: https://coins-docs.github.io/rest-api/#symbol-price-ticker
620
- :see: https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
694
+
695
+ https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
696
+ https://coins-docs.github.io/rest-api/#symbol-price-ticker
697
+ https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
698
+
621
699
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
622
700
  :param dict [params]: extra parameters specific to the exchange API endpoint
623
701
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
624
702
  """
625
703
  self.load_markets()
626
- request = {}
704
+ request: dict = {}
627
705
  if symbols is not None:
628
706
  ids = []
629
707
  for i in range(0, len(symbols)):
@@ -632,7 +710,7 @@ class coinsph(Exchange, ImplicitAPI):
632
710
  ids.append(id)
633
711
  request['symbols'] = ids
634
712
  defaultMethod = 'publicGetOpenapiQuoteV1Ticker24hr'
635
- options = self.safe_value(self.options, 'fetchTickers', {})
713
+ options = self.safe_dict(self.options, 'fetchTickers', {})
636
714
  method = self.safe_string(options, 'method', defaultMethod)
637
715
  tickers = None
638
716
  if method == 'publicGetOpenapiQuoteV1TickerPrice':
@@ -646,20 +724,22 @@ class coinsph(Exchange, ImplicitAPI):
646
724
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
647
725
  """
648
726
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
649
- :see: https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
650
- :see: https://coins-docs.github.io/rest-api/#symbol-price-ticker
651
- :see: https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
727
+
728
+ https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
729
+ https://coins-docs.github.io/rest-api/#symbol-price-ticker
730
+ https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
731
+
652
732
  :param str symbol: unified symbol of the market to fetch the ticker for
653
733
  :param dict [params]: extra parameters specific to the exchange API endpoint
654
734
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
655
735
  """
656
736
  self.load_markets()
657
737
  market = self.market(symbol)
658
- request = {
738
+ request: dict = {
659
739
  'symbol': market['id'],
660
740
  }
661
741
  defaultMethod = 'publicGetOpenapiQuoteV1Ticker24hr'
662
- options = self.safe_value(self.options, 'fetchTicker', {})
742
+ options = self.safe_dict(self.options, 'fetchTicker', {})
663
743
  method = self.safe_string(options, 'method', defaultMethod)
664
744
  ticker = None
665
745
  if method == 'publicGetOpenapiQuoteV1TickerPrice':
@@ -670,7 +750,7 @@ class coinsph(Exchange, ImplicitAPI):
670
750
  ticker = self.publicGetOpenapiQuoteV1Ticker24hr(self.extend(request, params))
671
751
  return self.parse_ticker(ticker, market)
672
752
 
673
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
753
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
674
754
  #
675
755
  # publicGetOpenapiQuoteV1Ticker24hr
676
756
  # {
@@ -751,7 +831,9 @@ class coinsph(Exchange, ImplicitAPI):
751
831
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
752
832
  """
753
833
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
754
- :see: https://coins-docs.github.io/rest-api/#order-book
834
+
835
+ https://coins-docs.github.io/rest-api/#order-book
836
+
755
837
  :param str symbol: unified symbol of the market to fetch the order book for
756
838
  :param int [limit]: the maximum amount of order book entries to return(default 100, max 200)
757
839
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -759,7 +841,7 @@ class coinsph(Exchange, ImplicitAPI):
759
841
  """
760
842
  self.load_markets()
761
843
  market = self.market(symbol)
762
- request = {
844
+ request: dict = {
763
845
  'symbol': market['id'],
764
846
  }
765
847
  if limit is not None:
@@ -785,33 +867,44 @@ class coinsph(Exchange, ImplicitAPI):
785
867
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
786
868
  """
787
869
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
788
- :see: https://coins-docs.github.io/rest-api/#klinecandlestick-data
870
+
871
+ https://coins-docs.github.io/rest-api/#klinecandlestick-data
872
+
789
873
  :param str symbol: unified symbol of the market to fetch OHLCV data for
790
874
  :param str timeframe: the length of time each candle represents
791
875
  :param int [since]: timestamp in ms of the earliest candle to fetch
792
876
  :param int [limit]: the maximum amount of candles to fetch(default 500, max 1000)
793
877
  :param dict [params]: extra parameters specific to the exchange API endpoint
878
+ :param int [params.until]: timestamp in ms of the latest candle to fetch
794
879
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
795
880
  """
796
881
  self.load_markets()
797
882
  market = self.market(symbol)
798
883
  interval = self.safe_string(self.timeframes, timeframe)
799
- request = {
884
+ until = self.safe_integer(params, 'until')
885
+ request: dict = {
800
886
  'symbol': market['id'],
801
887
  'interval': interval,
802
888
  }
889
+ if limit is None:
890
+ limit = 1000
803
891
  if since is not None:
804
892
  request['startTime'] = since
805
- request['limit'] = 1000
806
893
  # since work properly only when it is "younger" than last "limit" candle
807
- if limit is not None:
808
- duration = self.parse_timeframe(timeframe) * 1000
809
- request['endTime'] = self.sum(since, duration * (limit - 1))
894
+ if until is not None:
895
+ request['endTime'] = until
810
896
  else:
811
- request['endTime'] = self.milliseconds()
812
- else:
813
- if limit is not None:
814
- request['limit'] = limit
897
+ duration = self.parse_timeframe(timeframe) * 1000
898
+ endTimeByLimit = self.sum(since, duration * (limit - 1))
899
+ now = self.milliseconds()
900
+ request['endTime'] = min(endTimeByLimit, now)
901
+ elif until is not None:
902
+ request['endTime'] = until
903
+ # since work properly only when it is "younger" than last "limit" candle
904
+ duration = self.parse_timeframe(timeframe) * 1000
905
+ request['startTime'] = until - (duration * (limit - 1))
906
+ request['limit'] = limit
907
+ params = self.omit(params, 'until')
815
908
  response = self.publicGetOpenapiQuoteV1Klines(self.extend(request, params))
816
909
  #
817
910
  # [
@@ -845,7 +938,9 @@ class coinsph(Exchange, ImplicitAPI):
845
938
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
846
939
  """
847
940
  get the list of most recent trades for a particular symbol
848
- :see: https://coins-docs.github.io/rest-api/#recent-trades-list
941
+
942
+ https://coins-docs.github.io/rest-api/#recent-trades-list
943
+
849
944
  :param str symbol: unified symbol of the market to fetch trades for
850
945
  :param int [since]: timestamp in ms of the earliest trade to fetch
851
946
  :param int [limit]: the maximum amount of trades to fetch(default 500, max 1000)
@@ -854,7 +949,7 @@ class coinsph(Exchange, ImplicitAPI):
854
949
  """
855
950
  self.load_markets()
856
951
  market = self.market(symbol)
857
- request = {
952
+ request: dict = {
858
953
  'symbol': market['id'],
859
954
  }
860
955
  if since is not None:
@@ -882,7 +977,9 @@ class coinsph(Exchange, ImplicitAPI):
882
977
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
883
978
  """
884
979
  fetch all trades made by the user
885
- :see: https://coins-docs.github.io/rest-api/#account-trade-list-user_data
980
+
981
+ https://coins-docs.github.io/rest-api/#account-trade-list-user_data
982
+
886
983
  :param str symbol: unified market symbol
887
984
  :param int [since]: the earliest time in ms to fetch trades for
888
985
  :param int [limit]: the maximum number of trades structures to retrieve(default 500, max 1000)
@@ -893,7 +990,7 @@ class coinsph(Exchange, ImplicitAPI):
893
990
  raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
894
991
  self.load_markets()
895
992
  market = self.market(symbol)
896
- request = {
993
+ request: dict = {
897
994
  'symbol': market['id'],
898
995
  }
899
996
  if since is not None:
@@ -908,7 +1005,9 @@ class coinsph(Exchange, ImplicitAPI):
908
1005
  def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
909
1006
  """
910
1007
  fetch all the trades made from a single order
911
- :see: https://coins-docs.github.io/rest-api/#account-trade-list-user_data
1008
+
1009
+ https://coins-docs.github.io/rest-api/#account-trade-list-user_data
1010
+
912
1011
  :param str id: order id
913
1012
  :param str symbol: unified market symbol
914
1013
  :param int [since]: the earliest time in ms to fetch trades for
@@ -918,12 +1017,12 @@ class coinsph(Exchange, ImplicitAPI):
918
1017
  """
919
1018
  if symbol is None:
920
1019
  raise ArgumentsRequired(self.id + ' fetchOrderTrades() requires a symbol argument')
921
- request = {
1020
+ request: dict = {
922
1021
  'orderId': id,
923
1022
  }
924
1023
  return self.fetch_my_trades(symbol, since, limit, self.extend(request, params))
925
1024
 
926
- def parse_trade(self, trade, market: Market = None) -> Trade:
1025
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
927
1026
  #
928
1027
  # fetchTrades
929
1028
  # {
@@ -978,7 +1077,7 @@ class coinsph(Exchange, ImplicitAPI):
978
1077
  'cost': feeCost,
979
1078
  'currency': self.safe_currency_code(feeCurrencyId),
980
1079
  }
981
- isBuyer = self.safe_value_2(trade, 'isBuyer', 'isBuyerMaker', None)
1080
+ isBuyer = self.safe_bool_2(trade, 'isBuyer', 'isBuyerMaker', None)
982
1081
  side = None
983
1082
  if isBuyer is not None:
984
1083
  side = 'buy' if (isBuyer is True) else 'sell'
@@ -1008,7 +1107,9 @@ class coinsph(Exchange, ImplicitAPI):
1008
1107
  def fetch_balance(self, params={}) -> Balances:
1009
1108
  """
1010
1109
  query for balance and get the amount of funds available for trading or funds locked in orders
1011
- :see: https://coins-docs.github.io/rest-api/#accept-the-quote
1110
+
1111
+ https://coins-docs.github.io/rest-api/#accept-the-quote
1112
+
1012
1113
  :param dict [params]: extra parameters specific to the exchange API endpoint
1013
1114
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1014
1115
  """
@@ -1038,8 +1139,8 @@ class coinsph(Exchange, ImplicitAPI):
1038
1139
  return self.parse_balance(response)
1039
1140
 
1040
1141
  def parse_balance(self, response) -> Balances:
1041
- balances = self.safe_value(response, 'balances', [])
1042
- result = {
1142
+ balances = self.safe_list(response, 'balances', [])
1143
+ result: dict = {
1043
1144
  'info': response,
1044
1145
  'timestamp': None,
1045
1146
  'datetime': None,
@@ -1057,12 +1158,14 @@ class coinsph(Exchange, ImplicitAPI):
1057
1158
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1058
1159
  """
1059
1160
  create a trade order
1060
- :see: https://coins-docs.github.io/rest-api/#new-order--trade
1161
+
1162
+ https://coins-docs.github.io/rest-api/#new-order--trade
1163
+
1061
1164
  :param str symbol: unified symbol of the market to create an order in
1062
1165
  :param str type: 'market', 'limit', 'stop_loss', 'take_profit', 'stop_loss_limit', 'take_profit_limit' or 'limit_maker'
1063
1166
  :param str side: 'buy' or 'sell'
1064
1167
  :param float amount: how much of currency you want to trade in units of base currency
1065
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1168
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1066
1169
  :param dict [params]: extra parameters specific to the exchange API endpoint
1067
1170
  :param float [params.cost]: the quote quantity that can be used alternative for the amount for market buy orders
1068
1171
  :param bool [params.test]: set to True to test an order, no order will be created but the request will be validated
@@ -1077,7 +1180,7 @@ class coinsph(Exchange, ImplicitAPI):
1077
1180
  orderType = self.encode_order_type(orderType)
1078
1181
  params = self.omit(params, 'type')
1079
1182
  orderSide = self.encode_order_side(side)
1080
- request = {
1183
+ request: dict = {
1081
1184
  'symbol': market['id'],
1082
1185
  'type': orderType,
1083
1186
  'side': orderSide,
@@ -1118,10 +1221,10 @@ class coinsph(Exchange, ImplicitAPI):
1118
1221
  quoteAmount = self.cost_to_precision(symbol, amount)
1119
1222
  request['quoteOrderQty'] = quoteAmount
1120
1223
  if orderType == 'STOP_LOSS' or orderType == 'STOP_LOSS_LIMIT' or orderType == 'TAKE_PROFIT' or orderType == 'TAKE_PROFIT_LIMIT':
1121
- stopPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
1122
- if stopPrice is None:
1224
+ triggerPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
1225
+ if triggerPrice is None:
1123
1226
  raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice or stopPrice param for stop_loss, take_profit, stop_loss_limit, and take_profit_limit orders')
1124
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
1227
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
1125
1228
  request['newOrderRespType'] = newOrderRespType
1126
1229
  params = self.omit(params, 'price', 'stopPrice', 'triggerPrice', 'quantity', 'quoteOrderQty')
1127
1230
  response = None
@@ -1161,14 +1264,16 @@ class coinsph(Exchange, ImplicitAPI):
1161
1264
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1162
1265
  """
1163
1266
  fetches information on an order made by the user
1164
- :see: https://coins-docs.github.io/rest-api/#query-order-user_data
1267
+
1268
+ https://coins-docs.github.io/rest-api/#query-order-user_data
1269
+
1165
1270
  :param int|str id: order id
1166
1271
  :param str symbol: not used by coinsph fetchOrder()
1167
1272
  :param dict [params]: extra parameters specific to the exchange API endpoint
1168
1273
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1169
1274
  """
1170
1275
  self.load_markets()
1171
- request = {}
1276
+ request: dict = {}
1172
1277
  clientOrderId = self.safe_value_2(params, 'origClientOrderId', 'clientOrderId')
1173
1278
  if clientOrderId is not None:
1174
1279
  request['origClientOrderId'] = clientOrderId
@@ -1181,7 +1286,9 @@ class coinsph(Exchange, ImplicitAPI):
1181
1286
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1182
1287
  """
1183
1288
  fetch all unfilled currently open orders
1184
- :see: https://coins-docs.github.io/rest-api/#query-order-user_data
1289
+
1290
+ https://coins-docs.github.io/rest-api/#current-open-orders-user_data
1291
+
1185
1292
  :param str symbol: unified market symbol
1186
1293
  :param int [since]: the earliest time in ms to fetch open orders for
1187
1294
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1190,7 +1297,7 @@ class coinsph(Exchange, ImplicitAPI):
1190
1297
  """
1191
1298
  self.load_markets()
1192
1299
  market = None
1193
- request = {}
1300
+ request: dict = {}
1194
1301
  if symbol is not None:
1195
1302
  market = self.market(symbol)
1196
1303
  request['symbol'] = market['id']
@@ -1200,7 +1307,9 @@ class coinsph(Exchange, ImplicitAPI):
1200
1307
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1201
1308
  """
1202
1309
  fetches information on multiple closed orders made by the user
1203
- :see: https://coins-docs.github.io/rest-api/#history-orders-user_data
1310
+
1311
+ https://coins-docs.github.io/rest-api/#history-orders-user_data
1312
+
1204
1313
  :param str symbol: unified market symbol of the market orders were made in
1205
1314
  :param int [since]: the earliest time in ms to fetch orders for
1206
1315
  :param int [limit]: the maximum number of order structures to retrieve(default 500, max 1000)
@@ -1211,7 +1320,7 @@ class coinsph(Exchange, ImplicitAPI):
1211
1320
  raise ArgumentsRequired(self.id + ' fetchClosedOrders() requires a symbol argument')
1212
1321
  self.load_markets()
1213
1322
  market = self.market(symbol)
1214
- request = {
1323
+ request: dict = {
1215
1324
  'symbol': market['id'],
1216
1325
  }
1217
1326
  if since is not None:
@@ -1226,14 +1335,16 @@ class coinsph(Exchange, ImplicitAPI):
1226
1335
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1227
1336
  """
1228
1337
  cancels an open order
1229
- :see: https://coins-docs.github.io/rest-api/#cancel-order-trade
1338
+
1339
+ https://coins-docs.github.io/rest-api/#cancel-order-trade
1340
+
1230
1341
  :param str id: order id
1231
1342
  :param str symbol: not used by coinsph cancelOrder()
1232
1343
  :param dict [params]: extra parameters specific to the exchange API endpoint
1233
1344
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1234
1345
  """
1235
1346
  self.load_markets()
1236
- request = {}
1347
+ request: dict = {}
1237
1348
  clientOrderId = self.safe_value_2(params, 'origClientOrderId', 'clientOrderId')
1238
1349
  if clientOrderId is not None:
1239
1350
  request['origClientOrderId'] = clientOrderId
@@ -1246,7 +1357,9 @@ class coinsph(Exchange, ImplicitAPI):
1246
1357
  def cancel_all_orders(self, symbol: Str = None, params={}):
1247
1358
  """
1248
1359
  cancel open orders of market
1249
- :see: https://coins-docs.github.io/rest-api/#cancel-all-open-orders-on-a-symbol-trade
1360
+
1361
+ https://coins-docs.github.io/rest-api/#cancel-all-open-orders-on-a-symbol-trade
1362
+
1250
1363
  :param str symbol: unified market symbol
1251
1364
  :param dict [params]: extra parameters specific to the exchange API endpoint
1252
1365
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1255,14 +1368,14 @@ class coinsph(Exchange, ImplicitAPI):
1255
1368
  raise ArgumentsRequired(self.id + ' cancelAllOrders() requires a symbol argument')
1256
1369
  self.load_markets()
1257
1370
  market = None
1258
- request = {}
1371
+ request: dict = {}
1259
1372
  if symbol is not None:
1260
1373
  market = self.market(symbol)
1261
1374
  request['symbol'] = market['id']
1262
1375
  response = self.privateDeleteOpenapiV1OpenOrders(self.extend(request, params))
1263
1376
  return self.parse_orders(response, market)
1264
1377
 
1265
- def parse_order(self, order, market: Market = None) -> Order:
1378
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1266
1379
  #
1267
1380
  # createOrder POST /openapi/v1/order
1268
1381
  # {
@@ -1336,9 +1449,9 @@ class coinsph(Exchange, ImplicitAPI):
1336
1449
  market = self.safe_market(marketId, market)
1337
1450
  timestamp = self.safe_integer_2(order, 'time', 'transactTime')
1338
1451
  trades = self.safe_value(order, 'fills', None)
1339
- stopPrice = self.safe_string(order, 'stopPrice')
1340
- if Precise.string_eq(stopPrice, '0'):
1341
- stopPrice = None
1452
+ triggerPrice = self.safe_string(order, 'stopPrice')
1453
+ if Precise.string_eq(triggerPrice, '0'):
1454
+ triggerPrice = None
1342
1455
  return self.safe_order({
1343
1456
  'id': id,
1344
1457
  'clientOrderId': self.safe_string(order, 'clientOrderId'),
@@ -1351,8 +1464,7 @@ class coinsph(Exchange, ImplicitAPI):
1351
1464
  'timeInForce': self.parse_order_time_in_force(self.safe_string(order, 'timeInForce')),
1352
1465
  'side': self.parse_order_side(self.safe_string(order, 'side')),
1353
1466
  'price': self.safe_string(order, 'price'),
1354
- 'stopPrice': stopPrice,
1355
- 'triggerPrice': stopPrice,
1467
+ 'triggerPrice': triggerPrice,
1356
1468
  'average': None,
1357
1469
  'amount': self.safe_string(order, 'origQty'),
1358
1470
  'cost': self.safe_string(order, 'cummulativeQuoteQty'),
@@ -1365,21 +1477,21 @@ class coinsph(Exchange, ImplicitAPI):
1365
1477
  }, market)
1366
1478
 
1367
1479
  def parse_order_side(self, status):
1368
- statuses = {
1480
+ statuses: dict = {
1369
1481
  'BUY': 'buy',
1370
1482
  'SELL': 'sell',
1371
1483
  }
1372
1484
  return self.safe_string(statuses, status, status)
1373
1485
 
1374
1486
  def encode_order_side(self, status):
1375
- statuses = {
1487
+ statuses: dict = {
1376
1488
  'buy': 'BUY',
1377
1489
  'sell': 'SELL',
1378
1490
  }
1379
1491
  return self.safe_string(statuses, status, status)
1380
1492
 
1381
1493
  def parse_order_type(self, status):
1382
- statuses = {
1494
+ statuses: dict = {
1383
1495
  'MARKET': 'market',
1384
1496
  'LIMIT': 'limit',
1385
1497
  'LIMIT_MAKER': 'limit',
@@ -1391,7 +1503,7 @@ class coinsph(Exchange, ImplicitAPI):
1391
1503
  return self.safe_string(statuses, status, status)
1392
1504
 
1393
1505
  def encode_order_type(self, status):
1394
- statuses = {
1506
+ statuses: dict = {
1395
1507
  'market': 'MARKET',
1396
1508
  'limit': 'LIMIT',
1397
1509
  'limit_maker': 'LIMIT_MAKER',
@@ -1402,8 +1514,8 @@ class coinsph(Exchange, ImplicitAPI):
1402
1514
  }
1403
1515
  return self.safe_string(statuses, status, status)
1404
1516
 
1405
- def parse_order_status(self, status):
1406
- statuses = {
1517
+ def parse_order_status(self, status: Str):
1518
+ statuses: dict = {
1407
1519
  'NEW': 'open',
1408
1520
  'FILLED': 'closed',
1409
1521
  'CANCELED': 'canceled',
@@ -1414,24 +1526,26 @@ class coinsph(Exchange, ImplicitAPI):
1414
1526
  return self.safe_string(statuses, status, status)
1415
1527
 
1416
1528
  def parse_order_time_in_force(self, status):
1417
- statuses = {
1529
+ statuses: dict = {
1418
1530
  'GTC': 'GTC',
1419
1531
  'FOK': 'FOK',
1420
1532
  'IOC': 'IOC',
1421
1533
  }
1422
1534
  return self.safe_string(statuses, status, status)
1423
1535
 
1424
- def fetch_trading_fee(self, symbol: str, params={}):
1536
+ def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1425
1537
  """
1426
1538
  fetch the trading fees for a market
1427
- :see: https://coins-docs.github.io/rest-api/#trade-fee-user_data
1539
+
1540
+ https://coins-docs.github.io/rest-api/#trade-fee-user_data
1541
+
1428
1542
  :param str symbol: unified market symbol
1429
1543
  :param dict [params]: extra parameters specific to the exchange API endpoint
1430
1544
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
1431
1545
  """
1432
1546
  self.load_markets()
1433
1547
  market = self.market(symbol)
1434
- request = {
1548
+ request: dict = {
1435
1549
  'symbol': market['id'],
1436
1550
  }
1437
1551
  response = self.privateGetOpenapiV1AssetTradeFee(self.extend(request, params))
@@ -1444,13 +1558,15 @@ class coinsph(Exchange, ImplicitAPI):
1444
1558
  # }
1445
1559
  # ]
1446
1560
  #
1447
- tradingFee = self.safe_value(response, 0, {})
1561
+ tradingFee = self.safe_dict(response, 0, {})
1448
1562
  return self.parse_trading_fee(tradingFee, market)
1449
1563
 
1450
- def fetch_trading_fees(self, params={}):
1564
+ def fetch_trading_fees(self, params={}) -> TradingFees:
1451
1565
  """
1452
1566
  fetch the trading fees for multiple markets
1453
- :see: https://coins-docs.github.io/rest-api/#trade-fee-user_data
1567
+
1568
+ https://coins-docs.github.io/rest-api/#trade-fee-user_data
1569
+
1454
1570
  :param dict [params]: extra parameters specific to the exchange API endpoint
1455
1571
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
1456
1572
  """
@@ -1470,14 +1586,14 @@ class coinsph(Exchange, ImplicitAPI):
1470
1586
  # },
1471
1587
  # ]
1472
1588
  #
1473
- result = {}
1589
+ result: dict = {}
1474
1590
  for i in range(0, len(response)):
1475
1591
  fee = self.parse_trading_fee(response[i])
1476
1592
  symbol = fee['symbol']
1477
1593
  result[symbol] = fee
1478
1594
  return result
1479
1595
 
1480
- def parse_trading_fee(self, fee, market: Market = None):
1596
+ def parse_trading_fee(self, fee: dict, market: Market = None) -> TradingFeeInterface:
1481
1597
  #
1482
1598
  # {
1483
1599
  # "symbol": "ETHUSDT",
@@ -1493,12 +1609,16 @@ class coinsph(Exchange, ImplicitAPI):
1493
1609
  'symbol': symbol,
1494
1610
  'maker': self.safe_number(fee, 'makerCommission'),
1495
1611
  'taker': self.safe_number(fee, 'takerCommission'),
1612
+ 'percentage': None,
1613
+ 'tierBased': None,
1496
1614
  }
1497
1615
 
1498
- def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1616
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}) -> Transaction:
1499
1617
  """
1500
1618
  make a withdrawal to coins_ph account
1501
- :see: https://coins-docs.github.io/rest-api/#withdrawuser_data
1619
+
1620
+ https://coins-docs.github.io/rest-api/#withdrawuser_data
1621
+
1502
1622
  :param str code: unified currency code
1503
1623
  :param float amount: the amount to withdraw
1504
1624
  :param str address: not used by coinsph withdraw()
@@ -1516,7 +1636,7 @@ class coinsph(Exchange, ImplicitAPI):
1516
1636
  raise BadRequest(self.id + ' withdraw() require network parameter')
1517
1637
  self.load_markets()
1518
1638
  currency = self.currency(code)
1519
- request = {
1639
+ request: dict = {
1520
1640
  'coin': currency['id'],
1521
1641
  'amount': self.number_to_string(amount),
1522
1642
  'network': networkId,
@@ -1531,7 +1651,9 @@ class coinsph(Exchange, ImplicitAPI):
1531
1651
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1532
1652
  """
1533
1653
  fetch all deposits made to an account
1534
- :see: https://coins-docs.github.io/rest-api/#deposit-history-user_data
1654
+
1655
+ https://coins-docs.github.io/rest-api/#deposit-history-user_data
1656
+
1535
1657
  :param str code: unified currency code
1536
1658
  :param int [since]: the earliest time in ms to fetch deposits for
1537
1659
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1541,7 +1663,7 @@ class coinsph(Exchange, ImplicitAPI):
1541
1663
  # todo: returns an empty array - find out why
1542
1664
  self.load_markets()
1543
1665
  currency = None
1544
- request = {}
1666
+ request: dict = {}
1545
1667
  if code is not None:
1546
1668
  currency = self.currency(code)
1547
1669
  request['coin'] = currency['id']
@@ -1583,7 +1705,9 @@ class coinsph(Exchange, ImplicitAPI):
1583
1705
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1584
1706
  """
1585
1707
  fetch all withdrawals made from an account
1586
- :see: https://coins-docs.github.io/rest-api/#withdraw-history-user_data
1708
+
1709
+ https://coins-docs.github.io/rest-api/#withdraw-history-user_data
1710
+
1587
1711
  :param str code: unified currency code
1588
1712
  :param int [since]: the earliest time in ms to fetch withdrawals for
1589
1713
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -1593,7 +1717,7 @@ class coinsph(Exchange, ImplicitAPI):
1593
1717
  # todo: returns an empty array - find out why
1594
1718
  self.load_markets()
1595
1719
  currency = None
1596
- request = {}
1720
+ request: dict = {}
1597
1721
  if code is not None:
1598
1722
  currency = self.currency(code)
1599
1723
  request['coin'] = currency['id']
@@ -1638,7 +1762,7 @@ class coinsph(Exchange, ImplicitAPI):
1638
1762
  #
1639
1763
  return self.parse_transactions(response, currency, since, limit)
1640
1764
 
1641
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1765
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
1642
1766
  #
1643
1767
  # fetchDeposits
1644
1768
  # {
@@ -1725,8 +1849,8 @@ class coinsph(Exchange, ImplicitAPI):
1725
1849
  'fee': fee,
1726
1850
  }
1727
1851
 
1728
- def parse_transaction_status(self, status):
1729
- statuses = {
1852
+ def parse_transaction_status(self, status: Str):
1853
+ statuses: dict = {
1730
1854
  '0': 'pending',
1731
1855
  '1': 'ok',
1732
1856
  '2': 'failed',
@@ -1734,10 +1858,12 @@ class coinsph(Exchange, ImplicitAPI):
1734
1858
  }
1735
1859
  return self.safe_string(statuses, status, status)
1736
1860
 
1737
- def fetch_deposit_address(self, code: str, params={}):
1861
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1738
1862
  """
1739
1863
  fetch the deposit address for a currency associated with self account
1740
- :see: https://coins-docs.github.io/rest-api/#deposit-address-user_data
1864
+
1865
+ https://coins-docs.github.io/rest-api/#deposit-address-user_data
1866
+
1741
1867
  :param str code: unified currency code
1742
1868
  :param dict [params]: extra parameters specific to the exchange API endpoint
1743
1869
  :param str [params.network]: network for fetch deposit address
@@ -1749,7 +1875,7 @@ class coinsph(Exchange, ImplicitAPI):
1749
1875
  raise BadRequest(self.id + ' fetchDepositAddress() require network parameter')
1750
1876
  self.load_markets()
1751
1877
  currency = self.currency(code)
1752
- request = {
1878
+ request: dict = {
1753
1879
  'coin': currency['id'],
1754
1880
  'network': networkId,
1755
1881
  }
@@ -1764,7 +1890,7 @@ class coinsph(Exchange, ImplicitAPI):
1764
1890
  #
1765
1891
  return self.parse_deposit_address(response, currency)
1766
1892
 
1767
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1893
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1768
1894
  #
1769
1895
  # {
1770
1896
  # "coin": "ETH",
@@ -1775,11 +1901,11 @@ class coinsph(Exchange, ImplicitAPI):
1775
1901
  currencyId = self.safe_string(depositAddress, 'coin')
1776
1902
  parsedCurrency = self.safe_currency_code(currencyId, currency)
1777
1903
  return {
1904
+ 'info': depositAddress,
1778
1905
  'currency': parsedCurrency,
1906
+ 'network': None,
1779
1907
  'address': self.safe_string(depositAddress, 'address'),
1780
1908
  'tag': self.safe_string(depositAddress, 'addressTag'),
1781
- 'network': None,
1782
- 'info': depositAddress,
1783
1909
  }
1784
1910
 
1785
1911
  def url_encode_query(self, query={}):
@@ -1832,7 +1958,7 @@ class coinsph(Exchange, ImplicitAPI):
1832
1958
  url += '?' + query
1833
1959
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1834
1960
 
1835
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1961
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1836
1962
  if response is None:
1837
1963
  return None
1838
1964
  responseCode = self.safe_string(response, 'code', None)