ccxt-ir 4.3.46.0.2__py2.py3-none-any.whl → 4.5.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (528) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +9 -9
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +7 -7
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +10 -10
  68. ccxt/async_support/afratether.py +9 -9
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +31 -37
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +25 -24
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +30 -27
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +14 -13
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +29 -35
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +22 -21
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +28 -25
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +12 -11
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.0.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/abstract/ace.py +0 -15
  438. ccxt/abstract/bitbay.py +0 -53
  439. ccxt/abstract/bitcoincom.py +0 -115
  440. ccxt/abstract/bitfinex2.py +0 -139
  441. ccxt/abstract/bitpanda.py +0 -35
  442. ccxt/abstract/bl3p.py +0 -19
  443. ccxt/abstract/coinlist.py +0 -54
  444. ccxt/abstract/currencycom.py +0 -68
  445. ccxt/abstract/hitbtc3.py +0 -115
  446. ccxt/abstract/idex.py +0 -26
  447. ccxt/abstract/kuna.py +0 -182
  448. ccxt/abstract/lykke.py +0 -29
  449. ccxt/abstract/poloniexfutures.py +0 -48
  450. ccxt/abstract/wazirx.py +0 -30
  451. ccxt/ace.py +0 -1012
  452. ccxt/async_support/ace.py +0 -1012
  453. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  454. ccxt/async_support/base/ws/fast_client.py +0 -96
  455. ccxt/async_support/bitbay.py +0 -17
  456. ccxt/async_support/bitcoincom.py +0 -17
  457. ccxt/async_support/bitfinex2.py +0 -3552
  458. ccxt/async_support/bitpanda.py +0 -16
  459. ccxt/async_support/bl3p.py +0 -485
  460. ccxt/async_support/coinlist.py +0 -2243
  461. ccxt/async_support/currencycom.py +0 -1950
  462. ccxt/async_support/hitbtc3.py +0 -16
  463. ccxt/async_support/idex.py +0 -1766
  464. ccxt/async_support/kuna.py +0 -1841
  465. ccxt/async_support/lykke.py +0 -1270
  466. ccxt/async_support/poloniexfutures.py +0 -1717
  467. ccxt/async_support/wazirx.py +0 -1224
  468. ccxt/bitbay.py +0 -17
  469. ccxt/bitcoincom.py +0 -17
  470. ccxt/bitfinex2.py +0 -3552
  471. ccxt/bitpanda.py +0 -16
  472. ccxt/bl3p.py +0 -485
  473. ccxt/coinlist.py +0 -2243
  474. ccxt/currencycom.py +0 -1950
  475. ccxt/hitbtc3.py +0 -16
  476. ccxt/idex.py +0 -1766
  477. ccxt/kuna.py +0 -1841
  478. ccxt/lykke.py +0 -1270
  479. ccxt/poloniexfutures.py +0 -1717
  480. ccxt/pro/bitcoincom.py +0 -34
  481. ccxt/pro/bitfinex2.py +0 -1083
  482. ccxt/pro/bitpanda.py +0 -15
  483. ccxt/pro/currencycom.py +0 -536
  484. ccxt/pro/idex.py +0 -672
  485. ccxt/pro/poloniexfutures.py +0 -990
  486. ccxt/pro/wazirx.py +0 -749
  487. ccxt/test/base/__init__.py +0 -29
  488. ccxt/test/base/test_account.py +0 -26
  489. ccxt/test/base/test_balance.py +0 -56
  490. ccxt/test/base/test_borrow_interest.py +0 -35
  491. ccxt/test/base/test_borrow_rate.py +0 -32
  492. ccxt/test/base/test_calculate_fee.py +0 -51
  493. ccxt/test/base/test_crypto.py +0 -127
  494. ccxt/test/base/test_currency.py +0 -76
  495. ccxt/test/base/test_datetime.py +0 -109
  496. ccxt/test/base/test_decimal_to_precision.py +0 -392
  497. ccxt/test/base/test_deep_extend.py +0 -68
  498. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  499. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  500. ccxt/test/base/test_funding_rate_history.py +0 -29
  501. ccxt/test/base/test_last_price.py +0 -31
  502. ccxt/test/base/test_ledger_entry.py +0 -45
  503. ccxt/test/base/test_ledger_item.py +0 -48
  504. ccxt/test/base/test_leverage_tier.py +0 -33
  505. ccxt/test/base/test_liquidation.py +0 -50
  506. ccxt/test/base/test_margin_mode.py +0 -24
  507. ccxt/test/base/test_margin_modification.py +0 -35
  508. ccxt/test/base/test_market.py +0 -193
  509. ccxt/test/base/test_number.py +0 -411
  510. ccxt/test/base/test_ohlcv.py +0 -33
  511. ccxt/test/base/test_open_interest.py +0 -32
  512. ccxt/test/base/test_order.py +0 -64
  513. ccxt/test/base/test_order_book.py +0 -69
  514. ccxt/test/base/test_position.py +0 -60
  515. ccxt/test/base/test_shared_methods.py +0 -353
  516. ccxt/test/base/test_status.py +0 -24
  517. ccxt/test/base/test_throttle.py +0 -126
  518. ccxt/test/base/test_ticker.py +0 -92
  519. ccxt/test/base/test_trade.py +0 -47
  520. ccxt/test/base/test_trading_fee.py +0 -26
  521. ccxt/test/base/test_transaction.py +0 -39
  522. ccxt/test/test_async.py +0 -1649
  523. ccxt/test/test_sync.py +0 -1648
  524. ccxt/wazirx.py +0 -1224
  525. ccxt_ir-4.3.46.0.2.dist-info/RECORD +0 -772
  526. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  527. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  528. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/coinsph.py CHANGED
@@ -6,7 +6,7 @@
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, TradingFeeInterface, TradingFees, Transaction
9
+ from ccxt.base.types import Any, Balances, Currencies, 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
12
  from ccxt.base.errors import AuthenticationError
@@ -14,7 +14,6 @@ from ccxt.base.errors import PermissionDenied
14
14
  from ccxt.base.errors import ArgumentsRequired
15
15
  from ccxt.base.errors import BadRequest
16
16
  from ccxt.base.errors import BadSymbol
17
- from ccxt.base.errors import BadResponse
18
17
  from ccxt.base.errors import InsufficientFunds
19
18
  from ccxt.base.errors import InvalidAddress
20
19
  from ccxt.base.errors import InvalidOrder
@@ -24,13 +23,14 @@ from ccxt.base.errors import DuplicateOrderId
24
23
  from ccxt.base.errors import NotSupported
25
24
  from ccxt.base.errors import RateLimitExceeded
26
25
  from ccxt.base.errors import ExchangeNotAvailable
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
 
30
30
 
31
31
  class coinsph(Exchange, ImplicitAPI):
32
32
 
33
- def describe(self):
33
+ def describe(self) -> Any:
34
34
  return self.deep_extend(super(coinsph, self).describe(), {
35
35
  'id': 'coinsph',
36
36
  'name': 'Coins.ph',
@@ -47,6 +47,9 @@ class coinsph(Exchange, ImplicitAPI):
47
47
  'future': False,
48
48
  'option': False,
49
49
  'addMargin': False,
50
+ 'borrowCrossMargin': False,
51
+ 'borrowIsolatedMargin': False,
52
+ 'borrowMargin': False,
50
53
  'cancelAllOrders': True,
51
54
  'cancelOrder': True,
52
55
  'cancelOrders': False,
@@ -57,6 +60,8 @@ class coinsph(Exchange, ImplicitAPI):
57
60
  'createMarketOrderWithCost': False,
58
61
  'createMarketSellOrderWithCost': False,
59
62
  'createOrder': True,
63
+ 'createOrderWithTakeProfitAndStopLoss': False,
64
+ 'createOrderWithTakeProfitAndStopLossWs': False,
60
65
  'createPostOnlyOrder': False,
61
66
  'createReduceOnlyOrder': False,
62
67
  'createStopLimitOrder': True,
@@ -68,14 +73,17 @@ class coinsph(Exchange, ImplicitAPI):
68
73
  'fetchBalance': True,
69
74
  'fetchBidsAsks': False,
70
75
  'fetchBorrowInterest': False,
76
+ 'fetchBorrowRate': False,
71
77
  'fetchBorrowRateHistories': False,
72
78
  'fetchBorrowRateHistory': False,
79
+ 'fetchBorrowRates': False,
80
+ 'fetchBorrowRatesPerSymbol': False,
73
81
  'fetchCanceledOrders': False,
74
82
  'fetchClosedOrder': False,
75
83
  'fetchClosedOrders': True,
76
84
  'fetchCrossBorrowRate': False,
77
85
  'fetchCrossBorrowRates': False,
78
- 'fetchCurrencies': False,
86
+ 'fetchCurrencies': True,
79
87
  'fetchDeposit': None,
80
88
  'fetchDepositAddress': True,
81
89
  'fetchDepositAddresses': False,
@@ -84,24 +92,42 @@ class coinsph(Exchange, ImplicitAPI):
84
92
  'fetchDepositWithdrawFee': False,
85
93
  'fetchDepositWithdrawFees': False,
86
94
  'fetchFundingHistory': False,
95
+ 'fetchFundingInterval': False,
96
+ 'fetchFundingIntervals': False,
87
97
  'fetchFundingRate': False,
88
98
  'fetchFundingRateHistory': False,
89
99
  'fetchFundingRates': False,
100
+ 'fetchGreeks': False,
90
101
  'fetchIndexOHLCV': False,
91
102
  'fetchIsolatedBorrowRate': False,
92
103
  'fetchIsolatedBorrowRates': False,
104
+ 'fetchIsolatedPositions': False,
93
105
  'fetchL3OrderBook': False,
94
106
  'fetchLedger': False,
95
107
  'fetchLeverage': False,
108
+ 'fetchLeverages': False,
96
109
  'fetchLeverageTiers': False,
110
+ 'fetchLiquidations': False,
111
+ 'fetchLongShortRatio': False,
112
+ 'fetchLongShortRatioHistory': False,
113
+ 'fetchMarginAdjustmentHistory': False,
114
+ 'fetchMarginMode': False,
115
+ 'fetchMarginModes': False,
97
116
  'fetchMarketLeverageTiers': False,
98
117
  'fetchMarkets': True,
99
118
  'fetchMarkOHLCV': False,
119
+ 'fetchMarkPrices': False,
120
+ 'fetchMyLiquidations': False,
121
+ 'fetchMySettlementHistory': False,
100
122
  'fetchMyTrades': True,
101
123
  'fetchOHLCV': True,
124
+ 'fetchOpenInterest': False,
102
125
  'fetchOpenInterestHistory': False,
126
+ 'fetchOpenInterests': False,
103
127
  'fetchOpenOrder': None,
104
128
  'fetchOpenOrders': True,
129
+ 'fetchOption': False,
130
+ 'fetchOptionChain': False,
105
131
  'fetchOrder': True,
106
132
  'fetchOrderBook': True,
107
133
  'fetchOrderBooks': False,
@@ -115,6 +141,7 @@ class coinsph(Exchange, ImplicitAPI):
115
141
  'fetchPositionsHistory': False,
116
142
  'fetchPositionsRisk': False,
117
143
  'fetchPremiumIndexOHLCV': False,
144
+ 'fetchSettlementHistory': False,
118
145
  'fetchStatus': True,
119
146
  'fetchTicker': True,
120
147
  'fetchTickers': True,
@@ -127,12 +154,14 @@ class coinsph(Exchange, ImplicitAPI):
127
154
  'fetchTransactionFees': False,
128
155
  'fetchTransactions': False,
129
156
  'fetchTransfers': False,
157
+ 'fetchVolatilityHistory': False,
130
158
  'fetchWithdrawal': None,
131
159
  'fetchWithdrawals': True,
132
160
  'fetchWithdrawalWhitelist': False,
133
161
  'reduceMargin': False,
134
162
  'repayCrossMargin': False,
135
163
  'repayIsolatedMargin': False,
164
+ 'repayMargin': False,
136
165
  'setLeverage': False,
137
166
  'setMargin': False,
138
167
  'setMarginMode': False,
@@ -313,6 +342,76 @@ class coinsph(Exchange, ImplicitAPI):
313
342
  'ARB': 'ARBITRUM',
314
343
  },
315
344
  },
345
+ 'features': {
346
+ 'spot': {
347
+ 'sandbox': False,
348
+ 'createOrder': {
349
+ 'marginMode': False,
350
+ 'triggerPrice': True,
351
+ 'triggerPriceType': None,
352
+ 'triggerDirection': False,
353
+ 'stopLossPrice': False, # todo
354
+ 'takeProfitPrice': False, # todo
355
+ 'attachedStopLossTakeProfit': None,
356
+ 'timeInForce': {
357
+ 'IOC': True,
358
+ 'FOK': True,
359
+ 'PO': False,
360
+ 'GTD': False,
361
+ },
362
+ 'hedged': False,
363
+ 'trailing': False,
364
+ 'leverage': False,
365
+ 'marketBuyByCost': True,
366
+ 'marketBuyRequiresPrice': False,
367
+ 'selfTradePrevention': True, # todo implement
368
+ 'iceberg': False,
369
+ },
370
+ 'createOrders': None,
371
+ 'fetchMyTrades': {
372
+ 'marginMode': False,
373
+ 'limit': 1000,
374
+ 'daysBack': 100000,
375
+ 'untilDays': 100000, # todo implement
376
+ 'symbolRequired': True,
377
+ },
378
+ 'fetchOrder': {
379
+ 'marginMode': False,
380
+ 'trigger': False,
381
+ 'trailing': False,
382
+ 'symbolRequired': False,
383
+ },
384
+ 'fetchOpenOrders': {
385
+ 'marginMode': False,
386
+ 'limit': None,
387
+ 'trigger': False,
388
+ 'trailing': False,
389
+ 'symbolRequired': False,
390
+ },
391
+ 'fetchOrders': None,
392
+ 'fetchClosedOrders': {
393
+ 'marginMode': False,
394
+ 'limit': 1000,
395
+ 'daysBack': 100000,
396
+ 'daysBackCanceled': 1,
397
+ 'untilDays': 100000,
398
+ 'trigger': False,
399
+ 'trailing': False,
400
+ 'symbolRequired': True,
401
+ },
402
+ 'fetchOHLCV': {
403
+ 'limit': 1000,
404
+ },
405
+ },
406
+ 'swap': {
407
+ 'linear': None,
408
+ 'inverse': None,
409
+ },
410
+ 'future': {
411
+ 'linear': None,
412
+ 'inverse': None,
413
+ },
414
+ },
316
415
  # https://coins-docs.github.io/errors/
317
416
  'exceptions': {
318
417
  'exact': {
@@ -431,6 +530,128 @@ class coinsph(Exchange, ImplicitAPI):
431
530
  },
432
531
  })
433
532
 
533
+ def fetch_currencies(self, params={}) -> Currencies:
534
+ """
535
+ fetches all available currencies on an exchange
536
+
537
+ https://docs.coins.ph/rest-api/#all-coins-information-user_data
538
+
539
+ :param dict [params]: extra parameters specific to the exchange API endpoint
540
+ :returns dict: an associative dictionary of currencies
541
+ """
542
+ if not self.check_required_credentials(False):
543
+ return None
544
+ response = self.privateGetOpenapiWalletV1ConfigGetall(params)
545
+ #
546
+ # [
547
+ # {
548
+ # "coin": "PHP",
549
+ # "name": "PHP",
550
+ # "depositAllEnable": False,
551
+ # "withdrawAllEnable": False,
552
+ # "free": "0",
553
+ # "locked": "0",
554
+ # "transferPrecision": "2",
555
+ # "transferMinQuantity": "0",
556
+ # "networkList": [],
557
+ # "legalMoney": True
558
+ # },
559
+ # {
560
+ # "coin": "USDT",
561
+ # "name": "USDT",
562
+ # "depositAllEnable": True,
563
+ # "withdrawAllEnable": True,
564
+ # "free": "0",
565
+ # "locked": "0",
566
+ # "transferPrecision": "8",
567
+ # "transferMinQuantity": "0",
568
+ # "networkList": [
569
+ # {
570
+ # "addressRegex": "^0x[0-9a-fA-F]{40}$",
571
+ # "memoRegex": " ",
572
+ # "network": "ETH",
573
+ # "name": "Ethereum(ERC20)",
574
+ # "depositEnable": True,
575
+ # "minConfirm": "12",
576
+ # "unLockConfirm": "-1",
577
+ # "withdrawDesc": "",
578
+ # "withdrawEnable": True,
579
+ # "withdrawFee": "6",
580
+ # "withdrawIntegerMultiple": "0.000001",
581
+ # "withdrawMax": "500000",
582
+ # "withdrawMin": "10",
583
+ # "sameAddress": False
584
+ # },
585
+ # {
586
+ # "addressRegex": "^T[0-9a-zA-Z]{33}$",
587
+ # "memoRegex": "",
588
+ # "network": "TRX",
589
+ # "name": "TRON",
590
+ # "depositEnable": True,
591
+ # "minConfirm": "19",
592
+ # "unLockConfirm": "-1",
593
+ # "withdrawDesc": "",
594
+ # "withdrawEnable": True,
595
+ # "withdrawFee": "3",
596
+ # "withdrawIntegerMultiple": "0.000001",
597
+ # "withdrawMax": "1000000",
598
+ # "withdrawMin": "20",
599
+ # "sameAddress": False
600
+ # }
601
+ # ],
602
+ # "legalMoney": False
603
+ # }
604
+ # ]
605
+ #
606
+ result: dict = {}
607
+ for i in range(0, len(response)):
608
+ entry = response[i]
609
+ id = self.safe_string(entry, 'coin')
610
+ code = self.safe_currency_code(id)
611
+ isFiat = self.safe_bool(entry, 'isLegalMoney')
612
+ networkList = self.safe_list(entry, 'networkList', [])
613
+ networks: dict = {}
614
+ for j in range(0, len(networkList)):
615
+ networkItem = networkList[j]
616
+ network = self.safe_string(networkItem, 'network')
617
+ networkCode = self.network_id_to_code(network)
618
+ networks[networkCode] = {
619
+ 'info': networkItem,
620
+ 'id': network,
621
+ 'network': networkCode,
622
+ 'active': None,
623
+ 'deposit': self.safe_bool(networkItem, 'depositEnable'),
624
+ 'withdraw': self.safe_bool(networkItem, 'withdrawEnable'),
625
+ 'fee': self.safe_number(networkItem, 'withdrawFee'),
626
+ 'precision': self.safe_number(networkItem, 'withdrawIntegerMultiple'),
627
+ 'limits': {
628
+ 'withdraw': {
629
+ 'min': self.safe_number(networkItem, 'withdrawMin'),
630
+ 'max': self.safe_number(networkItem, 'withdrawMax'),
631
+ },
632
+ 'deposit': {
633
+ 'min': None,
634
+ 'max': None,
635
+ },
636
+ },
637
+ }
638
+ result[code] = self.safe_currency_structure({
639
+ 'id': id,
640
+ 'name': self.safe_string(entry, 'name'),
641
+ 'code': code,
642
+ 'type': 'fiat' if isFiat else 'crypto',
643
+ 'precision': self.parse_number(self.parse_precision(self.safe_string(entry, 'transferPrecision'))),
644
+ 'info': entry,
645
+ 'active': None,
646
+ 'deposit': self.safe_bool(entry, 'depositAllEnable'),
647
+ 'withdraw': self.safe_bool(entry, 'withdrawAllEnable'),
648
+ 'networks': networks,
649
+ 'fee': None,
650
+ 'fees': None,
651
+ 'limits': {},
652
+ })
653
+ return result
654
+
434
655
  def calculate_rate_limiter_cost(self, api, method, path, params, config={}):
435
656
  if ('noSymbol' in config) and not ('symbol' in params):
436
657
  return config['noSymbol']
@@ -456,7 +677,9 @@ class coinsph(Exchange, ImplicitAPI):
456
677
  def fetch_status(self, params={}):
457
678
  """
458
679
  the latest known information on the availability of the exchange API
459
- :see: https://coins-docs.github.io/rest-api/#test-connectivity
680
+
681
+ https://coins-docs.github.io/rest-api/#test-connectivity
682
+
460
683
  :param dict [params]: extra parameters specific to the exchange API endpoint
461
684
  :returns dict: a `status structure <https://docs.ccxt.com/#/?id=exchange-status-structure>`
462
685
  """
@@ -469,10 +692,12 @@ class coinsph(Exchange, ImplicitAPI):
469
692
  'info': response,
470
693
  }
471
694
 
472
- def fetch_time(self, params={}):
695
+ def fetch_time(self, params={}) -> Int:
473
696
  """
474
697
  fetches the current integer timestamp in milliseconds from the exchange server
475
- :see: https://coins-docs.github.io/rest-api/#check-server-time
698
+
699
+ https://coins-docs.github.io/rest-api/#check-server-time
700
+
476
701
  :param dict [params]: extra parameters specific to the exchange API endpoint
477
702
  :returns int: the current integer timestamp in milliseconds from the exchange server
478
703
  """
@@ -485,7 +710,9 @@ class coinsph(Exchange, ImplicitAPI):
485
710
  def fetch_markets(self, params={}) -> List[Market]:
486
711
  """
487
712
  retrieves data on all markets for coinsph
488
- :see: https://coins-docs.github.io/rest-api/#exchange-information
713
+
714
+ https://coins-docs.github.io/rest-api/#exchange-information
715
+
489
716
  :param dict [params]: extra parameters specific to the exchange API endpoint
490
717
  :returns dict[]: an array of objects representing market data
491
718
  """
@@ -549,7 +776,7 @@ class coinsph(Exchange, ImplicitAPI):
549
776
  # ]
550
777
  # }
551
778
  #
552
- markets = self.safe_value(response, 'symbols')
779
+ markets = self.safe_list(response, 'symbols', [])
553
780
  result = []
554
781
  for i in range(0, len(markets)):
555
782
  market = markets[i]
@@ -558,7 +785,7 @@ class coinsph(Exchange, ImplicitAPI):
558
785
  quoteId = self.safe_string(market, 'quoteAsset')
559
786
  base = self.safe_currency_code(baseId)
560
787
  quote = self.safe_currency_code(quoteId)
561
- limits = self.index_by(self.safe_value(market, 'filters'), 'filterType')
788
+ limits = self.index_by(self.safe_list(market, 'filters', []), 'filterType')
562
789
  amountLimits = self.safe_value(limits, 'LOT_SIZE', {})
563
790
  priceLimits = self.safe_value(limits, 'PRICE_FILTER', {})
564
791
  costLimits = self.safe_value(limits, 'NOTIONAL', {})
@@ -619,9 +846,11 @@ class coinsph(Exchange, ImplicitAPI):
619
846
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
620
847
  """
621
848
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
622
- :see: https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
623
- :see: https://coins-docs.github.io/rest-api/#symbol-price-ticker
624
- :see: https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
849
+
850
+ https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
851
+ https://coins-docs.github.io/rest-api/#symbol-price-ticker
852
+ https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
853
+
625
854
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
626
855
  :param dict [params]: extra parameters specific to the exchange API endpoint
627
856
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -636,7 +865,7 @@ class coinsph(Exchange, ImplicitAPI):
636
865
  ids.append(id)
637
866
  request['symbols'] = ids
638
867
  defaultMethod = 'publicGetOpenapiQuoteV1Ticker24hr'
639
- options = self.safe_value(self.options, 'fetchTickers', {})
868
+ options = self.safe_dict(self.options, 'fetchTickers', {})
640
869
  method = self.safe_string(options, 'method', defaultMethod)
641
870
  tickers = None
642
871
  if method == 'publicGetOpenapiQuoteV1TickerPrice':
@@ -650,9 +879,11 @@ class coinsph(Exchange, ImplicitAPI):
650
879
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
651
880
  """
652
881
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
653
- :see: https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
654
- :see: https://coins-docs.github.io/rest-api/#symbol-price-ticker
655
- :see: https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
882
+
883
+ https://coins-docs.github.io/rest-api/#24hr-ticker-price-change-statistics
884
+ https://coins-docs.github.io/rest-api/#symbol-price-ticker
885
+ https://coins-docs.github.io/rest-api/#symbol-order-book-ticker
886
+
656
887
  :param str symbol: unified symbol of the market to fetch the ticker for
657
888
  :param dict [params]: extra parameters specific to the exchange API endpoint
658
889
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -663,7 +894,7 @@ class coinsph(Exchange, ImplicitAPI):
663
894
  'symbol': market['id'],
664
895
  }
665
896
  defaultMethod = 'publicGetOpenapiQuoteV1Ticker24hr'
666
- options = self.safe_value(self.options, 'fetchTicker', {})
897
+ options = self.safe_dict(self.options, 'fetchTicker', {})
667
898
  method = self.safe_string(options, 'method', defaultMethod)
668
899
  ticker = None
669
900
  if method == 'publicGetOpenapiQuoteV1TickerPrice':
@@ -755,7 +986,9 @@ class coinsph(Exchange, ImplicitAPI):
755
986
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
756
987
  """
757
988
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
758
- :see: https://coins-docs.github.io/rest-api/#order-book
989
+
990
+ https://coins-docs.github.io/rest-api/#order-book
991
+
759
992
  :param str symbol: unified symbol of the market to fetch the order book for
760
993
  :param int [limit]: the maximum amount of order book entries to return(default 100, max 200)
761
994
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -789,33 +1022,44 @@ class coinsph(Exchange, ImplicitAPI):
789
1022
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
790
1023
  """
791
1024
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
792
- :see: https://coins-docs.github.io/rest-api/#klinecandlestick-data
1025
+
1026
+ https://coins-docs.github.io/rest-api/#klinecandlestick-data
1027
+
793
1028
  :param str symbol: unified symbol of the market to fetch OHLCV data for
794
1029
  :param str timeframe: the length of time each candle represents
795
1030
  :param int [since]: timestamp in ms of the earliest candle to fetch
796
1031
  :param int [limit]: the maximum amount of candles to fetch(default 500, max 1000)
797
1032
  :param dict [params]: extra parameters specific to the exchange API endpoint
1033
+ :param int [params.until]: timestamp in ms of the latest candle to fetch
798
1034
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
799
1035
  """
800
1036
  self.load_markets()
801
1037
  market = self.market(symbol)
802
1038
  interval = self.safe_string(self.timeframes, timeframe)
1039
+ until = self.safe_integer(params, 'until')
803
1040
  request: dict = {
804
1041
  'symbol': market['id'],
805
1042
  'interval': interval,
806
1043
  }
1044
+ if limit is None:
1045
+ limit = 1000
807
1046
  if since is not None:
808
1047
  request['startTime'] = since
809
- request['limit'] = 1000
810
1048
  # since work properly only when it is "younger" than last "limit" candle
811
- if limit is not None:
812
- duration = self.parse_timeframe(timeframe) * 1000
813
- request['endTime'] = self.sum(since, duration * (limit - 1))
1049
+ if until is not None:
1050
+ request['endTime'] = until
814
1051
  else:
815
- request['endTime'] = self.milliseconds()
816
- else:
817
- if limit is not None:
818
- request['limit'] = limit
1052
+ duration = self.parse_timeframe(timeframe) * 1000
1053
+ endTimeByLimit = self.sum(since, duration * (limit - 1))
1054
+ now = self.milliseconds()
1055
+ request['endTime'] = min(endTimeByLimit, now)
1056
+ elif until is not None:
1057
+ request['endTime'] = until
1058
+ # since work properly only when it is "younger" than last "limit" candle
1059
+ duration = self.parse_timeframe(timeframe) * 1000
1060
+ request['startTime'] = until - (duration * (limit - 1))
1061
+ request['limit'] = limit
1062
+ params = self.omit(params, 'until')
819
1063
  response = self.publicGetOpenapiQuoteV1Klines(self.extend(request, params))
820
1064
  #
821
1065
  # [
@@ -849,7 +1093,9 @@ class coinsph(Exchange, ImplicitAPI):
849
1093
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
850
1094
  """
851
1095
  get the list of most recent trades for a particular symbol
852
- :see: https://coins-docs.github.io/rest-api/#recent-trades-list
1096
+
1097
+ https://coins-docs.github.io/rest-api/#recent-trades-list
1098
+
853
1099
  :param str symbol: unified symbol of the market to fetch trades for
854
1100
  :param int [since]: timestamp in ms of the earliest trade to fetch
855
1101
  :param int [limit]: the maximum amount of trades to fetch(default 500, max 1000)
@@ -886,7 +1132,9 @@ class coinsph(Exchange, ImplicitAPI):
886
1132
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
887
1133
  """
888
1134
  fetch all trades made by the user
889
- :see: https://coins-docs.github.io/rest-api/#account-trade-list-user_data
1135
+
1136
+ https://coins-docs.github.io/rest-api/#account-trade-list-user_data
1137
+
890
1138
  :param str symbol: unified market symbol
891
1139
  :param int [since]: the earliest time in ms to fetch trades for
892
1140
  :param int [limit]: the maximum number of trades structures to retrieve(default 500, max 1000)
@@ -912,7 +1160,9 @@ class coinsph(Exchange, ImplicitAPI):
912
1160
  def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
913
1161
  """
914
1162
  fetch all the trades made from a single order
915
- :see: https://coins-docs.github.io/rest-api/#account-trade-list-user_data
1163
+
1164
+ https://coins-docs.github.io/rest-api/#account-trade-list-user_data
1165
+
916
1166
  :param str id: order id
917
1167
  :param str symbol: unified market symbol
918
1168
  :param int [since]: the earliest time in ms to fetch trades for
@@ -982,7 +1232,7 @@ class coinsph(Exchange, ImplicitAPI):
982
1232
  'cost': feeCost,
983
1233
  'currency': self.safe_currency_code(feeCurrencyId),
984
1234
  }
985
- isBuyer = self.safe_value_2(trade, 'isBuyer', 'isBuyerMaker', None)
1235
+ isBuyer = self.safe_bool_2(trade, 'isBuyer', 'isBuyerMaker', None)
986
1236
  side = None
987
1237
  if isBuyer is not None:
988
1238
  side = 'buy' if (isBuyer is True) else 'sell'
@@ -1012,7 +1262,9 @@ class coinsph(Exchange, ImplicitAPI):
1012
1262
  def fetch_balance(self, params={}) -> Balances:
1013
1263
  """
1014
1264
  query for balance and get the amount of funds available for trading or funds locked in orders
1015
- :see: https://coins-docs.github.io/rest-api/#accept-the-quote
1265
+
1266
+ https://coins-docs.github.io/rest-api/#accept-the-quote
1267
+
1016
1268
  :param dict [params]: extra parameters specific to the exchange API endpoint
1017
1269
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
1018
1270
  """
@@ -1042,7 +1294,7 @@ class coinsph(Exchange, ImplicitAPI):
1042
1294
  return self.parse_balance(response)
1043
1295
 
1044
1296
  def parse_balance(self, response) -> Balances:
1045
- balances = self.safe_value(response, 'balances', [])
1297
+ balances = self.safe_list(response, 'balances', [])
1046
1298
  result: dict = {
1047
1299
  'info': response,
1048
1300
  'timestamp': None,
@@ -1061,12 +1313,14 @@ class coinsph(Exchange, ImplicitAPI):
1061
1313
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1062
1314
  """
1063
1315
  create a trade order
1064
- :see: https://coins-docs.github.io/rest-api/#new-order--trade
1316
+
1317
+ https://coins-docs.github.io/rest-api/#new-order--trade
1318
+
1065
1319
  :param str symbol: unified symbol of the market to create an order in
1066
1320
  :param str type: 'market', 'limit', 'stop_loss', 'take_profit', 'stop_loss_limit', 'take_profit_limit' or 'limit_maker'
1067
1321
  :param str side: 'buy' or 'sell'
1068
1322
  :param float amount: how much of currency you want to trade in units of base currency
1069
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1323
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1070
1324
  :param dict [params]: extra parameters specific to the exchange API endpoint
1071
1325
  :param float [params.cost]: the quote quantity that can be used alternative for the amount for market buy orders
1072
1326
  :param bool [params.test]: set to True to test an order, no order will be created but the request will be validated
@@ -1122,10 +1376,10 @@ class coinsph(Exchange, ImplicitAPI):
1122
1376
  quoteAmount = self.cost_to_precision(symbol, amount)
1123
1377
  request['quoteOrderQty'] = quoteAmount
1124
1378
  if orderType == 'STOP_LOSS' or orderType == 'STOP_LOSS_LIMIT' or orderType == 'TAKE_PROFIT' or orderType == 'TAKE_PROFIT_LIMIT':
1125
- stopPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
1126
- if stopPrice is None:
1379
+ triggerPrice = self.safe_string_2(params, 'triggerPrice', 'stopPrice')
1380
+ if triggerPrice is None:
1127
1381
  raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice or stopPrice param for stop_loss, take_profit, stop_loss_limit, and take_profit_limit orders')
1128
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
1382
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
1129
1383
  request['newOrderRespType'] = newOrderRespType
1130
1384
  params = self.omit(params, 'price', 'stopPrice', 'triggerPrice', 'quantity', 'quoteOrderQty')
1131
1385
  response = None
@@ -1165,7 +1419,9 @@ class coinsph(Exchange, ImplicitAPI):
1165
1419
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1166
1420
  """
1167
1421
  fetches information on an order made by the user
1168
- :see: https://coins-docs.github.io/rest-api/#query-order-user_data
1422
+
1423
+ https://coins-docs.github.io/rest-api/#query-order-user_data
1424
+
1169
1425
  :param int|str id: order id
1170
1426
  :param str symbol: not used by coinsph fetchOrder()
1171
1427
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1185,7 +1441,9 @@ class coinsph(Exchange, ImplicitAPI):
1185
1441
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1186
1442
  """
1187
1443
  fetch all unfilled currently open orders
1188
- :see: https://coins-docs.github.io/rest-api/#query-order-user_data
1444
+
1445
+ https://coins-docs.github.io/rest-api/#current-open-orders-user_data
1446
+
1189
1447
  :param str symbol: unified market symbol
1190
1448
  :param int [since]: the earliest time in ms to fetch open orders for
1191
1449
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1204,7 +1462,9 @@ class coinsph(Exchange, ImplicitAPI):
1204
1462
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1205
1463
  """
1206
1464
  fetches information on multiple closed orders made by the user
1207
- :see: https://coins-docs.github.io/rest-api/#history-orders-user_data
1465
+
1466
+ https://coins-docs.github.io/rest-api/#history-orders-user_data
1467
+
1208
1468
  :param str symbol: unified market symbol of the market orders were made in
1209
1469
  :param int [since]: the earliest time in ms to fetch orders for
1210
1470
  :param int [limit]: the maximum number of order structures to retrieve(default 500, max 1000)
@@ -1230,7 +1490,9 @@ class coinsph(Exchange, ImplicitAPI):
1230
1490
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1231
1491
  """
1232
1492
  cancels an open order
1233
- :see: https://coins-docs.github.io/rest-api/#cancel-order-trade
1493
+
1494
+ https://coins-docs.github.io/rest-api/#cancel-order-trade
1495
+
1234
1496
  :param str id: order id
1235
1497
  :param str symbol: not used by coinsph cancelOrder()
1236
1498
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1250,7 +1512,9 @@ class coinsph(Exchange, ImplicitAPI):
1250
1512
  def cancel_all_orders(self, symbol: Str = None, params={}):
1251
1513
  """
1252
1514
  cancel open orders of market
1253
- :see: https://coins-docs.github.io/rest-api/#cancel-all-open-orders-on-a-symbol-trade
1515
+
1516
+ https://coins-docs.github.io/rest-api/#cancel-all-open-orders-on-a-symbol-trade
1517
+
1254
1518
  :param str symbol: unified market symbol
1255
1519
  :param dict [params]: extra parameters specific to the exchange API endpoint
1256
1520
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1340,9 +1604,9 @@ class coinsph(Exchange, ImplicitAPI):
1340
1604
  market = self.safe_market(marketId, market)
1341
1605
  timestamp = self.safe_integer_2(order, 'time', 'transactTime')
1342
1606
  trades = self.safe_value(order, 'fills', None)
1343
- stopPrice = self.safe_string(order, 'stopPrice')
1344
- if Precise.string_eq(stopPrice, '0'):
1345
- stopPrice = None
1607
+ triggerPrice = self.safe_string(order, 'stopPrice')
1608
+ if Precise.string_eq(triggerPrice, '0'):
1609
+ triggerPrice = None
1346
1610
  return self.safe_order({
1347
1611
  'id': id,
1348
1612
  'clientOrderId': self.safe_string(order, 'clientOrderId'),
@@ -1355,8 +1619,7 @@ class coinsph(Exchange, ImplicitAPI):
1355
1619
  'timeInForce': self.parse_order_time_in_force(self.safe_string(order, 'timeInForce')),
1356
1620
  'side': self.parse_order_side(self.safe_string(order, 'side')),
1357
1621
  'price': self.safe_string(order, 'price'),
1358
- 'stopPrice': stopPrice,
1359
- 'triggerPrice': stopPrice,
1622
+ 'triggerPrice': triggerPrice,
1360
1623
  'average': None,
1361
1624
  'amount': self.safe_string(order, 'origQty'),
1362
1625
  'cost': self.safe_string(order, 'cummulativeQuoteQty'),
@@ -1428,7 +1691,9 @@ class coinsph(Exchange, ImplicitAPI):
1428
1691
  def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
1429
1692
  """
1430
1693
  fetch the trading fees for a market
1431
- :see: https://coins-docs.github.io/rest-api/#trade-fee-user_data
1694
+
1695
+ https://coins-docs.github.io/rest-api/#trade-fee-user_data
1696
+
1432
1697
  :param str symbol: unified market symbol
1433
1698
  :param dict [params]: extra parameters specific to the exchange API endpoint
1434
1699
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -1448,13 +1713,15 @@ class coinsph(Exchange, ImplicitAPI):
1448
1713
  # }
1449
1714
  # ]
1450
1715
  #
1451
- tradingFee = self.safe_value(response, 0, {})
1716
+ tradingFee = self.safe_dict(response, 0, {})
1452
1717
  return self.parse_trading_fee(tradingFee, market)
1453
1718
 
1454
1719
  def fetch_trading_fees(self, params={}) -> TradingFees:
1455
1720
  """
1456
1721
  fetch the trading fees for multiple markets
1457
- :see: https://coins-docs.github.io/rest-api/#trade-fee-user_data
1722
+
1723
+ https://coins-docs.github.io/rest-api/#trade-fee-user_data
1724
+
1458
1725
  :param dict [params]: extra parameters specific to the exchange API endpoint
1459
1726
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
1460
1727
  """
@@ -1501,10 +1768,12 @@ class coinsph(Exchange, ImplicitAPI):
1501
1768
  'tierBased': None,
1502
1769
  }
1503
1770
 
1504
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1771
+ def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
1505
1772
  """
1506
1773
  make a withdrawal to coins_ph account
1507
- :see: https://coins-docs.github.io/rest-api/#withdrawuser_data
1774
+
1775
+ https://coins-docs.github.io/rest-api/#withdrawuser_data
1776
+
1508
1777
  :param str code: unified currency code
1509
1778
  :param float amount: the amount to withdraw
1510
1779
  :param str address: not used by coinsph withdraw()
@@ -1537,7 +1806,9 @@ class coinsph(Exchange, ImplicitAPI):
1537
1806
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1538
1807
  """
1539
1808
  fetch all deposits made to an account
1540
- :see: https://coins-docs.github.io/rest-api/#deposit-history-user_data
1809
+
1810
+ https://coins-docs.github.io/rest-api/#deposit-history-user_data
1811
+
1541
1812
  :param str code: unified currency code
1542
1813
  :param int [since]: the earliest time in ms to fetch deposits for
1543
1814
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1589,7 +1860,9 @@ class coinsph(Exchange, ImplicitAPI):
1589
1860
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1590
1861
  """
1591
1862
  fetch all withdrawals made from an account
1592
- :see: https://coins-docs.github.io/rest-api/#withdraw-history-user_data
1863
+
1864
+ https://coins-docs.github.io/rest-api/#withdraw-history-user_data
1865
+
1593
1866
  :param str code: unified currency code
1594
1867
  :param int [since]: the earliest time in ms to fetch withdrawals for
1595
1868
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -1740,10 +2013,12 @@ class coinsph(Exchange, ImplicitAPI):
1740
2013
  }
1741
2014
  return self.safe_string(statuses, status, status)
1742
2015
 
1743
- def fetch_deposit_address(self, code: str, params={}):
2016
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1744
2017
  """
1745
2018
  fetch the deposit address for a currency associated with self account
1746
- :see: https://coins-docs.github.io/rest-api/#deposit-address-user_data
2019
+
2020
+ https://coins-docs.github.io/rest-api/#deposit-address-user_data
2021
+
1747
2022
  :param str code: unified currency code
1748
2023
  :param dict [params]: extra parameters specific to the exchange API endpoint
1749
2024
  :param str [params.network]: network for fetch deposit address
@@ -1770,7 +2045,7 @@ class coinsph(Exchange, ImplicitAPI):
1770
2045
  #
1771
2046
  return self.parse_deposit_address(response, currency)
1772
2047
 
1773
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
2048
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1774
2049
  #
1775
2050
  # {
1776
2051
  # "coin": "ETH",
@@ -1781,11 +2056,11 @@ class coinsph(Exchange, ImplicitAPI):
1781
2056
  currencyId = self.safe_string(depositAddress, 'coin')
1782
2057
  parsedCurrency = self.safe_currency_code(currencyId, currency)
1783
2058
  return {
2059
+ 'info': depositAddress,
1784
2060
  'currency': parsedCurrency,
2061
+ 'network': None,
1785
2062
  'address': self.safe_string(depositAddress, 'address'),
1786
2063
  'tag': self.safe_string(depositAddress, 'addressTag'),
1787
- 'network': None,
1788
- 'info': depositAddress,
1789
2064
  }
1790
2065
 
1791
2066
  def url_encode_query(self, query={}):