ccxt-ir 4.3.46.0.1__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 (772) hide show
  1. ccxt/__init__.py +358 -0
  2. ccxt/abantether.py +316 -0
  3. ccxt/abstract/__init__.py +0 -0
  4. ccxt/abstract/abantether.py +5 -0
  5. ccxt/abstract/ace.py +15 -0
  6. ccxt/abstract/afratether.py +6 -0
  7. ccxt/abstract/alpaca.py +70 -0
  8. ccxt/abstract/arzinja.py +5 -0
  9. ccxt/abstract/arzplus.py +7 -0
  10. ccxt/abstract/ascendex.py +77 -0
  11. ccxt/abstract/bequant.py +115 -0
  12. ccxt/abstract/bigone.py +45 -0
  13. ccxt/abstract/binance.py +712 -0
  14. ccxt/abstract/binancecoinm.py +712 -0
  15. ccxt/abstract/binanceus.py +764 -0
  16. ccxt/abstract/binanceusdm.py +712 -0
  17. ccxt/abstract/bingx.py +113 -0
  18. ccxt/abstract/bit2c.py +27 -0
  19. ccxt/abstract/bitbank.py +27 -0
  20. ccxt/abstract/bitbay.py +53 -0
  21. ccxt/abstract/bitbns.py +40 -0
  22. ccxt/abstract/bitcoincom.py +115 -0
  23. ccxt/abstract/bitfinex.py +69 -0
  24. ccxt/abstract/bitfinex2.py +139 -0
  25. ccxt/abstract/bitflyer.py +38 -0
  26. ccxt/abstract/bitget.py +508 -0
  27. ccxt/abstract/bithumb.py +32 -0
  28. ccxt/abstract/bitimen.py +7 -0
  29. ccxt/abstract/bitir.py +7 -0
  30. ccxt/abstract/bitmart.py +99 -0
  31. ccxt/abstract/bitmex.py +97 -0
  32. ccxt/abstract/bitopro.py +29 -0
  33. ccxt/abstract/bitpanda.py +35 -0
  34. ccxt/abstract/bitpin.py +7 -0
  35. ccxt/abstract/bitrue.py +72 -0
  36. ccxt/abstract/bitso.py +43 -0
  37. ccxt/abstract/bitstamp.py +258 -0
  38. ccxt/abstract/bitteam.py +29 -0
  39. ccxt/abstract/bitvavo.py +27 -0
  40. ccxt/abstract/bl3p.py +19 -0
  41. ccxt/abstract/blockchaincom.py +28 -0
  42. ccxt/abstract/blofin.py +37 -0
  43. ccxt/abstract/btcalpha.py +18 -0
  44. ccxt/abstract/btcbox.py +13 -0
  45. ccxt/abstract/btcmarkets.py +39 -0
  46. ccxt/abstract/btcturk.py +20 -0
  47. ccxt/abstract/bybit.py +298 -0
  48. ccxt/abstract/cex.py +33 -0
  49. ccxt/abstract/coinbase.py +94 -0
  50. ccxt/abstract/coinbaseadvanced.py +94 -0
  51. ccxt/abstract/coinbaseexchange.py +67 -0
  52. ccxt/abstract/coinbaseinternational.py +39 -0
  53. ccxt/abstract/coincatch.py +94 -0
  54. ccxt/abstract/coincheck.py +33 -0
  55. ccxt/abstract/coinex.py +237 -0
  56. ccxt/abstract/coinlist.py +54 -0
  57. ccxt/abstract/coinmate.py +62 -0
  58. ccxt/abstract/coinmetro.py +34 -0
  59. ccxt/abstract/coinone.py +67 -0
  60. ccxt/abstract/coinsph.py +54 -0
  61. ccxt/abstract/coinspot.py +28 -0
  62. ccxt/abstract/cryptocom.py +107 -0
  63. ccxt/abstract/currencycom.py +68 -0
  64. ccxt/abstract/delta.py +50 -0
  65. ccxt/abstract/deribit.py +125 -0
  66. ccxt/abstract/digifinex.py +91 -0
  67. ccxt/abstract/eterex.py +5 -0
  68. ccxt/abstract/excoino.py +7 -0
  69. ccxt/abstract/exir.py +8 -0
  70. ccxt/abstract/exmo.py +55 -0
  71. ccxt/abstract/exnovin.py +6 -0
  72. ccxt/abstract/farhadexchange.py +5 -0
  73. ccxt/abstract/fmfwio.py +115 -0
  74. ccxt/abstract/gate.py +265 -0
  75. ccxt/abstract/gateio.py +265 -0
  76. ccxt/abstract/gemini.py +58 -0
  77. ccxt/abstract/hashkey.py +67 -0
  78. ccxt/abstract/hitbtc.py +115 -0
  79. ccxt/abstract/hitbtc3.py +115 -0
  80. ccxt/abstract/hitobit.py +8 -0
  81. ccxt/abstract/hollaex.py +33 -0
  82. ccxt/abstract/htx.py +548 -0
  83. ccxt/abstract/huobi.py +548 -0
  84. ccxt/abstract/huobijp.py +114 -0
  85. ccxt/abstract/hyperliquid.py +6 -0
  86. ccxt/abstract/idex.py +26 -0
  87. ccxt/abstract/independentreserve.py +37 -0
  88. ccxt/abstract/indodax.py +26 -0
  89. ccxt/abstract/jibitex.py +7 -0
  90. ccxt/abstract/kraken.py +57 -0
  91. ccxt/abstract/krakenfutures.py +38 -0
  92. ccxt/abstract/kucoin.py +214 -0
  93. ccxt/abstract/kucoinfutures.py +233 -0
  94. ccxt/abstract/kuna.py +182 -0
  95. ccxt/abstract/latoken.py +56 -0
  96. ccxt/abstract/lbank.py +61 -0
  97. ccxt/abstract/luno.py +37 -0
  98. ccxt/abstract/lykke.py +29 -0
  99. ccxt/abstract/mercado.py +25 -0
  100. ccxt/abstract/mexc.py +178 -0
  101. ccxt/abstract/ndax.py +97 -0
  102. ccxt/abstract/nobitex.py +7 -0
  103. ccxt/abstract/novadax.py +29 -0
  104. ccxt/abstract/oceanex.py +22 -0
  105. ccxt/abstract/okcoin.py +74 -0
  106. ccxt/abstract/okexchange.py +8 -0
  107. ccxt/abstract/okx.py +324 -0
  108. ccxt/abstract/ompfinex.py +7 -0
  109. ccxt/abstract/onetrading.py +35 -0
  110. ccxt/abstract/oxfun.py +34 -0
  111. ccxt/abstract/p2b.py +22 -0
  112. ccxt/abstract/paradex.py +40 -0
  113. ccxt/abstract/paymium.py +28 -0
  114. ccxt/abstract/phemex.py +115 -0
  115. ccxt/abstract/poloniex.py +69 -0
  116. ccxt/abstract/poloniexfutures.py +48 -0
  117. ccxt/abstract/probit.py +23 -0
  118. ccxt/abstract/ramzinex.py +7 -0
  119. ccxt/abstract/sarmayex.py +5 -0
  120. ccxt/abstract/sarrafex.py +7 -0
  121. ccxt/abstract/tabdeal.py +7 -0
  122. ccxt/abstract/tetherland.py +5 -0
  123. ccxt/abstract/timex.py +62 -0
  124. ccxt/abstract/tokocrypto.py +37 -0
  125. ccxt/abstract/tradeogre.py +16 -0
  126. ccxt/abstract/twox.py +5 -0
  127. ccxt/abstract/ubitex.py +7 -0
  128. ccxt/abstract/upbit.py +38 -0
  129. ccxt/abstract/vertex.py +19 -0
  130. ccxt/abstract/wallex.py +8 -0
  131. ccxt/abstract/wavesexchange.py +154 -0
  132. ccxt/abstract/wazirx.py +30 -0
  133. ccxt/abstract/whitebit.py +98 -0
  134. ccxt/abstract/woo.py +83 -0
  135. ccxt/abstract/woofipro.py +119 -0
  136. ccxt/abstract/xt.py +152 -0
  137. ccxt/abstract/yobit.py +16 -0
  138. ccxt/abstract/zaif.py +38 -0
  139. ccxt/abstract/zonda.py +53 -0
  140. ccxt/ace.py +1012 -0
  141. ccxt/afratether.py +293 -0
  142. ccxt/alpaca.py +1083 -0
  143. ccxt/arzinja.py +285 -0
  144. ccxt/arzplus.py +412 -0
  145. ccxt/ascendex.py +3330 -0
  146. ccxt/async_support/__init__.py +337 -0
  147. ccxt/async_support/abantether.py +316 -0
  148. ccxt/async_support/ace.py +1012 -0
  149. ccxt/async_support/afratether.py +293 -0
  150. ccxt/async_support/alpaca.py +1083 -0
  151. ccxt/async_support/arzinja.py +285 -0
  152. ccxt/async_support/arzplus.py +412 -0
  153. ccxt/async_support/ascendex.py +3330 -0
  154. ccxt/async_support/base/__init__.py +1 -0
  155. ccxt/async_support/base/exchange.py +1966 -0
  156. ccxt/async_support/base/throttler.py +50 -0
  157. ccxt/async_support/base/ws/__init__.py +38 -0
  158. ccxt/async_support/base/ws/aiohttp_client.py +125 -0
  159. ccxt/async_support/base/ws/cache.py +212 -0
  160. ccxt/async_support/base/ws/client.py +193 -0
  161. ccxt/async_support/base/ws/fast_client.py +96 -0
  162. ccxt/async_support/base/ws/functions.py +59 -0
  163. ccxt/async_support/base/ws/future.py +58 -0
  164. ccxt/async_support/base/ws/order_book.py +78 -0
  165. ccxt/async_support/base/ws/order_book_side.py +174 -0
  166. ccxt/async_support/bequant.py +33 -0
  167. ccxt/async_support/bigone.py +2113 -0
  168. ccxt/async_support/binance.py +12234 -0
  169. ccxt/async_support/binancecoinm.py +45 -0
  170. ccxt/async_support/binanceus.py +211 -0
  171. ccxt/async_support/binanceusdm.py +58 -0
  172. ccxt/async_support/bingx.py +4325 -0
  173. ccxt/async_support/bit2c.py +866 -0
  174. ccxt/async_support/bitbank.py +1001 -0
  175. ccxt/async_support/bitbay.py +17 -0
  176. ccxt/async_support/bitbns.py +1154 -0
  177. ccxt/async_support/bitcoincom.py +17 -0
  178. ccxt/async_support/bitfinex.py +1617 -0
  179. ccxt/async_support/bitfinex2.py +3552 -0
  180. ccxt/async_support/bitflyer.py +995 -0
  181. ccxt/async_support/bitget.py +8273 -0
  182. ccxt/async_support/bithumb.py +1061 -0
  183. ccxt/async_support/bitimen.py +401 -0
  184. ccxt/async_support/bitir.py +490 -0
  185. ccxt/async_support/bitmart.py +4415 -0
  186. ccxt/async_support/bitmex.py +2756 -0
  187. ccxt/async_support/bitopro.py +1630 -0
  188. ccxt/async_support/bitpanda.py +16 -0
  189. ccxt/async_support/bitpin.py +454 -0
  190. ccxt/async_support/bitrue.py +3027 -0
  191. ccxt/async_support/bitso.py +1670 -0
  192. ccxt/async_support/bitstamp.py +2203 -0
  193. ccxt/async_support/bitteam.py +2239 -0
  194. ccxt/async_support/bitvavo.py +1968 -0
  195. ccxt/async_support/bl3p.py +485 -0
  196. ccxt/async_support/blockchaincom.py +1104 -0
  197. ccxt/async_support/blofin.py +2066 -0
  198. ccxt/async_support/btcalpha.py +891 -0
  199. ccxt/async_support/btcbox.py +544 -0
  200. ccxt/async_support/btcmarkets.py +1221 -0
  201. ccxt/async_support/btcturk.py +911 -0
  202. ccxt/async_support/bybit.py +8159 -0
  203. ccxt/async_support/cex.py +1605 -0
  204. ccxt/async_support/coinbase.py +4475 -0
  205. ccxt/async_support/coinbaseadvanced.py +17 -0
  206. ccxt/async_support/coinbaseexchange.py +1734 -0
  207. ccxt/async_support/coinbaseinternational.py +1899 -0
  208. ccxt/async_support/coincatch.py +5069 -0
  209. ccxt/async_support/coincheck.py +815 -0
  210. ccxt/async_support/coinex.py +5526 -0
  211. ccxt/async_support/coinlist.py +2243 -0
  212. ccxt/async_support/coinmate.py +1067 -0
  213. ccxt/async_support/coinmetro.py +1797 -0
  214. ccxt/async_support/coinone.py +1127 -0
  215. ccxt/async_support/coinsph.py +1850 -0
  216. ccxt/async_support/coinspot.py +534 -0
  217. ccxt/async_support/cryptocom.py +2822 -0
  218. ccxt/async_support/currencycom.py +1950 -0
  219. ccxt/async_support/delta.py +3376 -0
  220. ccxt/async_support/deribit.py +3437 -0
  221. ccxt/async_support/digifinex.py +3960 -0
  222. ccxt/async_support/eterex.py +286 -0
  223. ccxt/async_support/excoino.py +399 -0
  224. ccxt/async_support/exir.py +375 -0
  225. ccxt/async_support/exmo.py +2462 -0
  226. ccxt/async_support/exnovin.py +360 -0
  227. ccxt/async_support/farhadexchange.py +266 -0
  228. ccxt/async_support/fmfwio.py +34 -0
  229. ccxt/async_support/gate.py +6976 -0
  230. ccxt/async_support/gateio.py +16 -0
  231. ccxt/async_support/gemini.py +1825 -0
  232. ccxt/async_support/hashkey.py +4150 -0
  233. ccxt/async_support/hitbtc.py +3423 -0
  234. ccxt/async_support/hitbtc3.py +16 -0
  235. ccxt/async_support/hitobit.py +391 -0
  236. ccxt/async_support/hollaex.py +1813 -0
  237. ccxt/async_support/htx.py +8506 -0
  238. ccxt/async_support/huobi.py +16 -0
  239. ccxt/async_support/huobijp.py +1801 -0
  240. ccxt/async_support/hyperliquid.py +2431 -0
  241. ccxt/async_support/idex.py +1766 -0
  242. ccxt/async_support/independentreserve.py +784 -0
  243. ccxt/async_support/indodax.py +1247 -0
  244. ccxt/async_support/jibitex.py +395 -0
  245. ccxt/async_support/kraken.py +2894 -0
  246. ccxt/async_support/krakenfutures.py +2601 -0
  247. ccxt/async_support/kucoin.py +4602 -0
  248. ccxt/async_support/kucoinfutures.py +2698 -0
  249. ccxt/async_support/kuna.py +1841 -0
  250. ccxt/async_support/latoken.py +1664 -0
  251. ccxt/async_support/lbank.py +2683 -0
  252. ccxt/async_support/luno.py +1067 -0
  253. ccxt/async_support/lykke.py +1270 -0
  254. ccxt/async_support/mercado.py +842 -0
  255. ccxt/async_support/mexc.py +5369 -0
  256. ccxt/async_support/ndax.py +2354 -0
  257. ccxt/async_support/nobitex.py +419 -0
  258. ccxt/async_support/novadax.py +1484 -0
  259. ccxt/async_support/oceanex.py +903 -0
  260. ccxt/async_support/okcoin.py +2936 -0
  261. ccxt/async_support/okexchange.py +349 -0
  262. ccxt/async_support/okx.py +7827 -0
  263. ccxt/async_support/ompfinex.py +472 -0
  264. ccxt/async_support/onetrading.py +1911 -0
  265. ccxt/async_support/oxfun.py +2773 -0
  266. ccxt/async_support/p2b.py +1194 -0
  267. ccxt/async_support/paradex.py +2015 -0
  268. ccxt/async_support/paymium.py +564 -0
  269. ccxt/async_support/phemex.py +4473 -0
  270. ccxt/async_support/poloniex.py +2232 -0
  271. ccxt/async_support/poloniexfutures.py +1717 -0
  272. ccxt/async_support/probit.py +1734 -0
  273. ccxt/async_support/ramzinex.py +476 -0
  274. ccxt/async_support/sarmayex.py +357 -0
  275. ccxt/async_support/sarrafex.py +478 -0
  276. ccxt/async_support/tabdeal.py +364 -0
  277. ccxt/async_support/tetherland.py +349 -0
  278. ccxt/async_support/timex.py +1593 -0
  279. ccxt/async_support/tokocrypto.py +2405 -0
  280. ccxt/async_support/tradeogre.py +608 -0
  281. ccxt/async_support/twox.py +326 -0
  282. ccxt/async_support/ubitex.py +409 -0
  283. ccxt/async_support/upbit.py +1833 -0
  284. ccxt/async_support/vertex.py +2922 -0
  285. ccxt/async_support/wallex.py +445 -0
  286. ccxt/async_support/wavesexchange.py +2473 -0
  287. ccxt/async_support/wazirx.py +1224 -0
  288. ccxt/async_support/whitebit.py +2469 -0
  289. ccxt/async_support/woo.py +3114 -0
  290. ccxt/async_support/woofipro.py +2533 -0
  291. ccxt/async_support/xt.py +4454 -0
  292. ccxt/async_support/yobit.py +1283 -0
  293. ccxt/async_support/zaif.py +725 -0
  294. ccxt/async_support/zonda.py +1828 -0
  295. ccxt/base/__init__.py +27 -0
  296. ccxt/base/decimal_to_precision.py +174 -0
  297. ccxt/base/errors.py +242 -0
  298. ccxt/base/exchange.py +5941 -0
  299. ccxt/base/precise.py +287 -0
  300. ccxt/base/types.py +502 -0
  301. ccxt/bequant.py +33 -0
  302. ccxt/bigone.py +2112 -0
  303. ccxt/binance.py +12233 -0
  304. ccxt/binancecoinm.py +45 -0
  305. ccxt/binanceus.py +211 -0
  306. ccxt/binanceusdm.py +58 -0
  307. ccxt/bingx.py +4324 -0
  308. ccxt/bit2c.py +866 -0
  309. ccxt/bitbank.py +1001 -0
  310. ccxt/bitbay.py +17 -0
  311. ccxt/bitbns.py +1154 -0
  312. ccxt/bitcoincom.py +17 -0
  313. ccxt/bitfinex.py +1617 -0
  314. ccxt/bitfinex2.py +3552 -0
  315. ccxt/bitflyer.py +995 -0
  316. ccxt/bitget.py +8272 -0
  317. ccxt/bithumb.py +1061 -0
  318. ccxt/bitimen.py +401 -0
  319. ccxt/bitir.py +490 -0
  320. ccxt/bitmart.py +4415 -0
  321. ccxt/bitmex.py +2756 -0
  322. ccxt/bitopro.py +1630 -0
  323. ccxt/bitpanda.py +16 -0
  324. ccxt/bitpin.py +454 -0
  325. ccxt/bitrue.py +3026 -0
  326. ccxt/bitso.py +1670 -0
  327. ccxt/bitstamp.py +2203 -0
  328. ccxt/bitteam.py +2239 -0
  329. ccxt/bitvavo.py +1968 -0
  330. ccxt/bl3p.py +485 -0
  331. ccxt/blockchaincom.py +1104 -0
  332. ccxt/blofin.py +2066 -0
  333. ccxt/btcalpha.py +891 -0
  334. ccxt/btcbox.py +544 -0
  335. ccxt/btcmarkets.py +1221 -0
  336. ccxt/btcturk.py +911 -0
  337. ccxt/bybit.py +8158 -0
  338. ccxt/cex.py +1605 -0
  339. ccxt/coinbase.py +4474 -0
  340. ccxt/coinbaseadvanced.py +17 -0
  341. ccxt/coinbaseexchange.py +1734 -0
  342. ccxt/coinbaseinternational.py +1899 -0
  343. ccxt/coincatch.py +5069 -0
  344. ccxt/coincheck.py +815 -0
  345. ccxt/coinex.py +5525 -0
  346. ccxt/coinlist.py +2243 -0
  347. ccxt/coinmate.py +1067 -0
  348. ccxt/coinmetro.py +1797 -0
  349. ccxt/coinone.py +1127 -0
  350. ccxt/coinsph.py +1850 -0
  351. ccxt/coinspot.py +534 -0
  352. ccxt/cryptocom.py +2822 -0
  353. ccxt/currencycom.py +1950 -0
  354. ccxt/delta.py +3376 -0
  355. ccxt/deribit.py +3437 -0
  356. ccxt/digifinex.py +3959 -0
  357. ccxt/eterex.py +286 -0
  358. ccxt/excoino.py +399 -0
  359. ccxt/exir.py +375 -0
  360. ccxt/exmo.py +2462 -0
  361. ccxt/exnovin.py +360 -0
  362. ccxt/farhadexchange.py +266 -0
  363. ccxt/fmfwio.py +34 -0
  364. ccxt/gate.py +6975 -0
  365. ccxt/gateio.py +16 -0
  366. ccxt/gemini.py +1824 -0
  367. ccxt/hashkey.py +4150 -0
  368. ccxt/hitbtc.py +3423 -0
  369. ccxt/hitbtc3.py +16 -0
  370. ccxt/hitobit.py +391 -0
  371. ccxt/hollaex.py +1813 -0
  372. ccxt/htx.py +8505 -0
  373. ccxt/huobi.py +16 -0
  374. ccxt/huobijp.py +1801 -0
  375. ccxt/hyperliquid.py +2430 -0
  376. ccxt/idex.py +1766 -0
  377. ccxt/independentreserve.py +784 -0
  378. ccxt/indodax.py +1247 -0
  379. ccxt/jibitex.py +395 -0
  380. ccxt/kraken.py +2894 -0
  381. ccxt/krakenfutures.py +2601 -0
  382. ccxt/kucoin.py +4601 -0
  383. ccxt/kucoinfutures.py +2698 -0
  384. ccxt/kuna.py +1841 -0
  385. ccxt/latoken.py +1664 -0
  386. ccxt/lbank.py +2682 -0
  387. ccxt/luno.py +1067 -0
  388. ccxt/lykke.py +1270 -0
  389. ccxt/mercado.py +842 -0
  390. ccxt/mexc.py +5369 -0
  391. ccxt/ndax.py +2354 -0
  392. ccxt/nobitex.py +419 -0
  393. ccxt/novadax.py +1484 -0
  394. ccxt/oceanex.py +903 -0
  395. ccxt/okcoin.py +2936 -0
  396. ccxt/okexchange.py +349 -0
  397. ccxt/okx.py +7826 -0
  398. ccxt/ompfinex.py +472 -0
  399. ccxt/onetrading.py +1911 -0
  400. ccxt/oxfun.py +2772 -0
  401. ccxt/p2b.py +1194 -0
  402. ccxt/paradex.py +2015 -0
  403. ccxt/paymium.py +564 -0
  404. ccxt/phemex.py +4473 -0
  405. ccxt/poloniex.py +2232 -0
  406. ccxt/poloniexfutures.py +1717 -0
  407. ccxt/pro/__init__.py +149 -0
  408. ccxt/pro/alpaca.py +685 -0
  409. ccxt/pro/ascendex.py +916 -0
  410. ccxt/pro/bequant.py +38 -0
  411. ccxt/pro/binance.py +3488 -0
  412. ccxt/pro/binancecoinm.py +28 -0
  413. ccxt/pro/binanceus.py +48 -0
  414. ccxt/pro/binanceusdm.py +31 -0
  415. ccxt/pro/bingx.py +1264 -0
  416. ccxt/pro/bitcoincom.py +34 -0
  417. ccxt/pro/bitfinex.py +621 -0
  418. ccxt/pro/bitfinex2.py +1083 -0
  419. ccxt/pro/bitget.py +1692 -0
  420. ccxt/pro/bithumb.py +368 -0
  421. ccxt/pro/bitmart.py +1449 -0
  422. ccxt/pro/bitmex.py +1656 -0
  423. ccxt/pro/bitopro.py +445 -0
  424. ccxt/pro/bitpanda.py +15 -0
  425. ccxt/pro/bitrue.py +447 -0
  426. ccxt/pro/bitstamp.py +522 -0
  427. ccxt/pro/bitvavo.py +1270 -0
  428. ccxt/pro/blockchaincom.py +738 -0
  429. ccxt/pro/blofin.py +692 -0
  430. ccxt/pro/bybit.py +2000 -0
  431. ccxt/pro/cex.py +1440 -0
  432. ccxt/pro/coinbase.py +678 -0
  433. ccxt/pro/coinbaseadvanced.py +16 -0
  434. ccxt/pro/coinbaseexchange.py +895 -0
  435. ccxt/pro/coinbaseinternational.py +620 -0
  436. ccxt/pro/coincatch.py +1464 -0
  437. ccxt/pro/coincheck.py +199 -0
  438. ccxt/pro/coinex.py +1061 -0
  439. ccxt/pro/coinone.py +395 -0
  440. ccxt/pro/cryptocom.py +947 -0
  441. ccxt/pro/currencycom.py +536 -0
  442. ccxt/pro/deribit.py +892 -0
  443. ccxt/pro/exmo.py +629 -0
  444. ccxt/pro/gate.py +1416 -0
  445. ccxt/pro/gateio.py +15 -0
  446. ccxt/pro/gemini.py +865 -0
  447. ccxt/pro/hashkey.py +802 -0
  448. ccxt/pro/hitbtc.py +1216 -0
  449. ccxt/pro/hollaex.py +563 -0
  450. ccxt/pro/htx.py +2215 -0
  451. ccxt/pro/huobi.py +15 -0
  452. ccxt/pro/huobijp.py +570 -0
  453. ccxt/pro/hyperliquid.py +525 -0
  454. ccxt/pro/idex.py +672 -0
  455. ccxt/pro/independentreserve.py +270 -0
  456. ccxt/pro/kraken.py +1356 -0
  457. ccxt/pro/krakenfutures.py +1492 -0
  458. ccxt/pro/kucoin.py +1133 -0
  459. ccxt/pro/kucoinfutures.py +1081 -0
  460. ccxt/pro/lbank.py +843 -0
  461. ccxt/pro/luno.py +303 -0
  462. ccxt/pro/mexc.py +1122 -0
  463. ccxt/pro/ndax.py +506 -0
  464. ccxt/pro/okcoin.py +698 -0
  465. ccxt/pro/okx.py +1851 -0
  466. ccxt/pro/onetrading.py +1275 -0
  467. ccxt/pro/oxfun.py +950 -0
  468. ccxt/pro/p2b.py +419 -0
  469. ccxt/pro/paradex.py +352 -0
  470. ccxt/pro/phemex.py +1441 -0
  471. ccxt/pro/poloniex.py +1166 -0
  472. ccxt/pro/poloniexfutures.py +990 -0
  473. ccxt/pro/probit.py +551 -0
  474. ccxt/pro/upbit.py +520 -0
  475. ccxt/pro/vertex.py +943 -0
  476. ccxt/pro/wazirx.py +749 -0
  477. ccxt/pro/whitebit.py +864 -0
  478. ccxt/pro/woo.py +1078 -0
  479. ccxt/pro/woofipro.py +1183 -0
  480. ccxt/pro/xt.py +1067 -0
  481. ccxt/probit.py +1734 -0
  482. ccxt/ramzinex.py +476 -0
  483. ccxt/sarmayex.py +357 -0
  484. ccxt/sarrafex.py +478 -0
  485. ccxt/static_dependencies/__init__.py +1 -0
  486. ccxt/static_dependencies/ecdsa/__init__.py +14 -0
  487. ccxt/static_dependencies/ecdsa/_version.py +520 -0
  488. ccxt/static_dependencies/ecdsa/curves.py +56 -0
  489. ccxt/static_dependencies/ecdsa/der.py +221 -0
  490. ccxt/static_dependencies/ecdsa/ecdsa.py +310 -0
  491. ccxt/static_dependencies/ecdsa/ellipticcurve.py +197 -0
  492. ccxt/static_dependencies/ecdsa/keys.py +332 -0
  493. ccxt/static_dependencies/ecdsa/numbertheory.py +531 -0
  494. ccxt/static_dependencies/ecdsa/rfc6979.py +100 -0
  495. ccxt/static_dependencies/ecdsa/util.py +266 -0
  496. ccxt/static_dependencies/ethereum/__init__.py +7 -0
  497. ccxt/static_dependencies/ethereum/abi/__init__.py +16 -0
  498. ccxt/static_dependencies/ethereum/abi/abi.py +19 -0
  499. ccxt/static_dependencies/ethereum/abi/base.py +152 -0
  500. ccxt/static_dependencies/ethereum/abi/codec.py +217 -0
  501. ccxt/static_dependencies/ethereum/abi/constants.py +3 -0
  502. ccxt/static_dependencies/ethereum/abi/decoding.py +565 -0
  503. ccxt/static_dependencies/ethereum/abi/encoding.py +720 -0
  504. ccxt/static_dependencies/ethereum/abi/exceptions.py +139 -0
  505. ccxt/static_dependencies/ethereum/abi/grammar.py +443 -0
  506. ccxt/static_dependencies/ethereum/abi/packed.py +13 -0
  507. ccxt/static_dependencies/ethereum/abi/py.typed +0 -0
  508. ccxt/static_dependencies/ethereum/abi/registry.py +643 -0
  509. ccxt/static_dependencies/ethereum/abi/tools/__init__.py +3 -0
  510. ccxt/static_dependencies/ethereum/abi/tools/_strategies.py +230 -0
  511. ccxt/static_dependencies/ethereum/abi/utils/__init__.py +0 -0
  512. ccxt/static_dependencies/ethereum/abi/utils/numeric.py +83 -0
  513. ccxt/static_dependencies/ethereum/abi/utils/padding.py +27 -0
  514. ccxt/static_dependencies/ethereum/abi/utils/string.py +19 -0
  515. ccxt/static_dependencies/ethereum/account/__init__.py +3 -0
  516. ccxt/static_dependencies/ethereum/account/encode_typed_data/__init__.py +4 -0
  517. ccxt/static_dependencies/ethereum/account/encode_typed_data/encoding_and_hashing.py +239 -0
  518. ccxt/static_dependencies/ethereum/account/encode_typed_data/helpers.py +40 -0
  519. ccxt/static_dependencies/ethereum/account/messages.py +263 -0
  520. ccxt/static_dependencies/ethereum/account/py.typed +0 -0
  521. ccxt/static_dependencies/ethereum/hexbytes/__init__.py +5 -0
  522. ccxt/static_dependencies/ethereum/hexbytes/_utils.py +54 -0
  523. ccxt/static_dependencies/ethereum/hexbytes/main.py +65 -0
  524. ccxt/static_dependencies/ethereum/hexbytes/py.typed +0 -0
  525. ccxt/static_dependencies/ethereum/typing/__init__.py +63 -0
  526. ccxt/static_dependencies/ethereum/typing/abi.py +6 -0
  527. ccxt/static_dependencies/ethereum/typing/bls.py +7 -0
  528. ccxt/static_dependencies/ethereum/typing/discovery.py +5 -0
  529. ccxt/static_dependencies/ethereum/typing/encoding.py +7 -0
  530. ccxt/static_dependencies/ethereum/typing/enums.py +17 -0
  531. ccxt/static_dependencies/ethereum/typing/ethpm.py +9 -0
  532. ccxt/static_dependencies/ethereum/typing/evm.py +20 -0
  533. ccxt/static_dependencies/ethereum/typing/networks.py +1122 -0
  534. ccxt/static_dependencies/ethereum/typing/py.typed +0 -0
  535. ccxt/static_dependencies/ethereum/utils/__init__.py +115 -0
  536. ccxt/static_dependencies/ethereum/utils/abi.py +72 -0
  537. ccxt/static_dependencies/ethereum/utils/address.py +171 -0
  538. ccxt/static_dependencies/ethereum/utils/applicators.py +151 -0
  539. ccxt/static_dependencies/ethereum/utils/conversions.py +190 -0
  540. ccxt/static_dependencies/ethereum/utils/currency.py +107 -0
  541. ccxt/static_dependencies/ethereum/utils/curried/__init__.py +269 -0
  542. ccxt/static_dependencies/ethereum/utils/debug.py +20 -0
  543. ccxt/static_dependencies/ethereum/utils/decorators.py +132 -0
  544. ccxt/static_dependencies/ethereum/utils/encoding.py +6 -0
  545. ccxt/static_dependencies/ethereum/utils/exceptions.py +4 -0
  546. ccxt/static_dependencies/ethereum/utils/functional.py +75 -0
  547. ccxt/static_dependencies/ethereum/utils/hexadecimal.py +74 -0
  548. ccxt/static_dependencies/ethereum/utils/humanize.py +188 -0
  549. ccxt/static_dependencies/ethereum/utils/logging.py +159 -0
  550. ccxt/static_dependencies/ethereum/utils/module_loading.py +31 -0
  551. ccxt/static_dependencies/ethereum/utils/numeric.py +43 -0
  552. ccxt/static_dependencies/ethereum/utils/py.typed +0 -0
  553. ccxt/static_dependencies/ethereum/utils/toolz.py +76 -0
  554. ccxt/static_dependencies/ethereum/utils/types.py +54 -0
  555. ccxt/static_dependencies/ethereum/utils/typing/__init__.py +18 -0
  556. ccxt/static_dependencies/ethereum/utils/typing/misc.py +14 -0
  557. ccxt/static_dependencies/ethereum/utils/units.py +31 -0
  558. ccxt/static_dependencies/keccak/__init__.py +3 -0
  559. ccxt/static_dependencies/keccak/keccak.py +197 -0
  560. ccxt/static_dependencies/lark/__init__.py +38 -0
  561. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  562. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  563. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  564. ccxt/static_dependencies/lark/common.py +86 -0
  565. ccxt/static_dependencies/lark/exceptions.py +292 -0
  566. ccxt/static_dependencies/lark/grammar.py +130 -0
  567. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  568. ccxt/static_dependencies/lark/indenter.py +143 -0
  569. ccxt/static_dependencies/lark/lark.py +658 -0
  570. ccxt/static_dependencies/lark/lexer.py +678 -0
  571. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  572. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  573. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  574. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  575. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  576. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  577. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  578. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  579. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  580. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  581. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  582. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  583. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  584. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  585. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  586. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  587. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  588. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  589. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  590. ccxt/static_dependencies/lark/tree.py +267 -0
  591. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  592. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  593. ccxt/static_dependencies/lark/utils.py +343 -0
  594. ccxt/static_dependencies/lark/visitors.py +596 -0
  595. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  596. ccxt/static_dependencies/marshmallow/base.py +65 -0
  597. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  598. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  599. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  600. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  601. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  602. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  603. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  604. ccxt/static_dependencies/marshmallow/types.py +12 -0
  605. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  606. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  607. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  608. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  609. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  610. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  611. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  612. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  613. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  614. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  615. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  616. ccxt/static_dependencies/msgpack/__init__.py +55 -0
  617. ccxt/static_dependencies/msgpack/exceptions.py +48 -0
  618. ccxt/static_dependencies/msgpack/ext.py +168 -0
  619. ccxt/static_dependencies/msgpack/fallback.py +951 -0
  620. ccxt/static_dependencies/parsimonious/__init__.py +10 -0
  621. ccxt/static_dependencies/parsimonious/exceptions.py +105 -0
  622. ccxt/static_dependencies/parsimonious/expressions.py +479 -0
  623. ccxt/static_dependencies/parsimonious/grammar.py +487 -0
  624. ccxt/static_dependencies/parsimonious/nodes.py +325 -0
  625. ccxt/static_dependencies/parsimonious/utils.py +40 -0
  626. ccxt/static_dependencies/starknet/__init__.py +0 -0
  627. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  628. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  629. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  630. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  631. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  632. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  633. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  634. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  635. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  636. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  637. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  638. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  639. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  640. ccxt/static_dependencies/starknet/common.py +15 -0
  641. ccxt/static_dependencies/starknet/constants.py +39 -0
  642. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  643. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  644. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  645. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  646. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  647. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  648. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  649. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  650. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  651. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  652. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  653. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  654. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  655. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  656. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  657. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  658. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  659. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  660. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  661. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  662. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  663. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  664. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  665. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  666. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  667. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  668. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  669. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  670. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  671. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  672. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  673. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  674. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  675. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  676. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  677. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  678. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  679. ccxt/static_dependencies/starkware/__init__.py +0 -0
  680. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  681. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  682. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  683. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  684. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  685. ccxt/static_dependencies/sympy/__init__.py +0 -0
  686. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  687. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  688. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  689. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  690. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  691. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  692. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  693. ccxt/static_dependencies/toolz/__init__.py +26 -0
  694. ccxt/static_dependencies/toolz/_signatures.py +784 -0
  695. ccxt/static_dependencies/toolz/_version.py +520 -0
  696. ccxt/static_dependencies/toolz/compatibility.py +30 -0
  697. ccxt/static_dependencies/toolz/curried/__init__.py +101 -0
  698. ccxt/static_dependencies/toolz/curried/exceptions.py +22 -0
  699. ccxt/static_dependencies/toolz/curried/operator.py +22 -0
  700. ccxt/static_dependencies/toolz/dicttoolz.py +339 -0
  701. ccxt/static_dependencies/toolz/functoolz.py +1049 -0
  702. ccxt/static_dependencies/toolz/itertoolz.py +1057 -0
  703. ccxt/static_dependencies/toolz/recipes.py +46 -0
  704. ccxt/static_dependencies/toolz/utils.py +9 -0
  705. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  706. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  707. ccxt/tabdeal.py +364 -0
  708. ccxt/test/__init__.py +3 -0
  709. ccxt/test/base/__init__.py +29 -0
  710. ccxt/test/base/test_account.py +26 -0
  711. ccxt/test/base/test_balance.py +56 -0
  712. ccxt/test/base/test_borrow_interest.py +35 -0
  713. ccxt/test/base/test_borrow_rate.py +32 -0
  714. ccxt/test/base/test_calculate_fee.py +51 -0
  715. ccxt/test/base/test_crypto.py +127 -0
  716. ccxt/test/base/test_currency.py +76 -0
  717. ccxt/test/base/test_datetime.py +109 -0
  718. ccxt/test/base/test_decimal_to_precision.py +392 -0
  719. ccxt/test/base/test_deep_extend.py +68 -0
  720. ccxt/test/base/test_deposit_withdrawal.py +50 -0
  721. ccxt/test/base/test_exchange_datetime_functions.py +76 -0
  722. ccxt/test/base/test_funding_rate_history.py +29 -0
  723. ccxt/test/base/test_last_price.py +31 -0
  724. ccxt/test/base/test_ledger_entry.py +45 -0
  725. ccxt/test/base/test_ledger_item.py +48 -0
  726. ccxt/test/base/test_leverage_tier.py +33 -0
  727. ccxt/test/base/test_liquidation.py +50 -0
  728. ccxt/test/base/test_margin_mode.py +24 -0
  729. ccxt/test/base/test_margin_modification.py +35 -0
  730. ccxt/test/base/test_market.py +193 -0
  731. ccxt/test/base/test_number.py +411 -0
  732. ccxt/test/base/test_ohlcv.py +33 -0
  733. ccxt/test/base/test_open_interest.py +32 -0
  734. ccxt/test/base/test_order.py +64 -0
  735. ccxt/test/base/test_order_book.py +69 -0
  736. ccxt/test/base/test_position.py +60 -0
  737. ccxt/test/base/test_shared_methods.py +353 -0
  738. ccxt/test/base/test_status.py +24 -0
  739. ccxt/test/base/test_throttle.py +126 -0
  740. ccxt/test/base/test_ticker.py +92 -0
  741. ccxt/test/base/test_trade.py +47 -0
  742. ccxt/test/base/test_trading_fee.py +26 -0
  743. ccxt/test/base/test_transaction.py +39 -0
  744. ccxt/test/test_async.py +1649 -0
  745. ccxt/test/test_sync.py +1648 -0
  746. ccxt/test/tests_async.py +1558 -0
  747. ccxt/test/tests_helpers.py +287 -0
  748. ccxt/test/tests_init.py +39 -0
  749. ccxt/test/tests_sync.py +1555 -0
  750. ccxt/tetherland.py +349 -0
  751. ccxt/timex.py +1593 -0
  752. ccxt/tokocrypto.py +2405 -0
  753. ccxt/tradeogre.py +608 -0
  754. ccxt/twox.py +326 -0
  755. ccxt/ubitex.py +409 -0
  756. ccxt/upbit.py +1833 -0
  757. ccxt/vertex.py +2922 -0
  758. ccxt/wallex.py +445 -0
  759. ccxt/wavesexchange.py +2472 -0
  760. ccxt/wazirx.py +1224 -0
  761. ccxt/whitebit.py +2469 -0
  762. ccxt/woo.py +3114 -0
  763. ccxt/woofipro.py +2533 -0
  764. ccxt/xt.py +4453 -0
  765. ccxt/yobit.py +1283 -0
  766. ccxt/zaif.py +725 -0
  767. ccxt/zonda.py +1828 -0
  768. ccxt_ir-4.3.46.0.1.dist-info/LICENSE.txt +21 -0
  769. ccxt_ir-4.3.46.0.1.dist-info/METADATA +655 -0
  770. ccxt_ir-4.3.46.0.1.dist-info/RECORD +772 -0
  771. ccxt_ir-4.3.46.0.1.dist-info/WHEEL +6 -0
  772. ccxt_ir-4.3.46.0.1.dist-info/top_level.txt +1 -0
ccxt/mercado.py ADDED
@@ -0,0 +1,842 @@
1
+ # -*- coding: utf-8 -*-
2
+
3
+ # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
4
+ # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
5
+
6
+ from ccxt.base.exchange import Exchange
7
+ from ccxt.abstract.mercado import ImplicitAPI
8
+ import hashlib
9
+ from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, Transaction
10
+ from typing import List
11
+ from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import ArgumentsRequired
13
+ from ccxt.base.errors import InvalidOrder
14
+ from ccxt.base.decimal_to_precision import TICK_SIZE
15
+
16
+
17
+ class mercado(Exchange, ImplicitAPI):
18
+
19
+ def describe(self):
20
+ return self.deep_extend(super(mercado, self).describe(), {
21
+ 'id': 'mercado',
22
+ 'name': 'Mercado Bitcoin',
23
+ 'countries': ['BR'], # Brazil
24
+ 'rateLimit': 1000,
25
+ 'version': 'v3',
26
+ 'has': {
27
+ 'CORS': True,
28
+ 'spot': True,
29
+ 'margin': False,
30
+ 'swap': False,
31
+ 'future': False,
32
+ 'option': False,
33
+ 'addMargin': False,
34
+ 'cancelOrder': True,
35
+ 'closeAllPositions': False,
36
+ 'closePosition': False,
37
+ 'createMarketOrder': True,
38
+ 'createOrder': True,
39
+ 'createReduceOnlyOrder': False,
40
+ 'createStopLimitOrder': False,
41
+ 'createStopMarketOrder': False,
42
+ 'createStopOrder': False,
43
+ 'fetchBalance': True,
44
+ 'fetchBorrowRateHistory': False,
45
+ 'fetchCrossBorrowRate': False,
46
+ 'fetchCrossBorrowRates': False,
47
+ 'fetchDepositAddress': False,
48
+ 'fetchDepositAddresses': False,
49
+ 'fetchDepositAddressesByNetwork': False,
50
+ 'fetchFundingHistory': False,
51
+ 'fetchFundingRate': False,
52
+ 'fetchFundingRateHistory': False,
53
+ 'fetchFundingRates': False,
54
+ 'fetchIndexOHLCV': False,
55
+ 'fetchIsolatedBorrowRate': False,
56
+ 'fetchIsolatedBorrowRates': False,
57
+ 'fetchLeverage': False,
58
+ 'fetchLeverageTiers': False,
59
+ 'fetchMarginMode': False,
60
+ 'fetchMarkets': True,
61
+ 'fetchMarkOHLCV': False,
62
+ 'fetchMyTrades': 'emulated',
63
+ 'fetchOHLCV': True,
64
+ 'fetchOpenInterestHistory': False,
65
+ 'fetchOpenOrders': True,
66
+ 'fetchOrder': True,
67
+ 'fetchOrderBook': True,
68
+ 'fetchOrders': True,
69
+ 'fetchPosition': False,
70
+ 'fetchPositionHistory': False,
71
+ 'fetchPositionMode': False,
72
+ 'fetchPositions': False,
73
+ 'fetchPositionsForSymbol': False,
74
+ 'fetchPositionsHistory': False,
75
+ 'fetchPositionsRisk': False,
76
+ 'fetchPremiumIndexOHLCV': False,
77
+ 'fetchTicker': True,
78
+ 'fetchTickers': False,
79
+ 'fetchTrades': True,
80
+ 'fetchTradingFee': False,
81
+ 'fetchTradingFees': False,
82
+ 'reduceMargin': False,
83
+ 'setLeverage': False,
84
+ 'setMarginMode': False,
85
+ 'setPositionMode': False,
86
+ 'withdraw': True,
87
+ },
88
+ 'timeframes': {
89
+ '15m': '15m',
90
+ '1h': '1h',
91
+ '3h': '3h',
92
+ '1d': '1d',
93
+ '1w': '1w',
94
+ '1M': '1M',
95
+ },
96
+ 'urls': {
97
+ 'logo': 'https://user-images.githubusercontent.com/1294454/27837060-e7c58714-60ea-11e7-9192-f05e86adb83f.jpg',
98
+ 'api': {
99
+ 'public': 'https://www.mercadobitcoin.net/api',
100
+ 'private': 'https://www.mercadobitcoin.net/tapi',
101
+ 'v4Public': 'https://www.mercadobitcoin.com.br/v4',
102
+ 'v4PublicNet': 'https://api.mercadobitcoin.net/api/v4',
103
+ },
104
+ 'www': 'https://www.mercadobitcoin.com.br',
105
+ 'doc': [
106
+ 'https://www.mercadobitcoin.com.br/api-doc',
107
+ 'https://www.mercadobitcoin.com.br/trade-api',
108
+ ],
109
+ },
110
+ 'api': {
111
+ 'public': {
112
+ 'get': [
113
+ 'coins',
114
+ '{coin}/orderbook/', # last slash critical
115
+ '{coin}/ticker/',
116
+ '{coin}/trades/',
117
+ '{coin}/trades/{from}/',
118
+ '{coin}/trades/{from}/{to}',
119
+ '{coin}/day-summary/{year}/{month}/{day}/',
120
+ ],
121
+ },
122
+ 'private': {
123
+ 'post': [
124
+ 'cancel_order',
125
+ 'get_account_info',
126
+ 'get_order',
127
+ 'get_withdrawal',
128
+ 'list_system_messages',
129
+ 'list_orders',
130
+ 'list_orderbook',
131
+ 'place_buy_order',
132
+ 'place_sell_order',
133
+ 'place_market_buy_order',
134
+ 'place_market_sell_order',
135
+ 'withdraw_coin',
136
+ ],
137
+ },
138
+ 'v4Public': {
139
+ 'get': [
140
+ '{coin}/candle/',
141
+ ],
142
+ },
143
+ 'v4PublicNet': {
144
+ 'get': [
145
+ 'candles',
146
+ ],
147
+ },
148
+ },
149
+ 'fees': {
150
+ 'trading': {
151
+ 'maker': 0.003,
152
+ 'taker': 0.007,
153
+ },
154
+ },
155
+ 'options': {
156
+ 'limits': {
157
+ 'BTC': 0.001,
158
+ 'BCH': 0.001,
159
+ 'ETH': 0.01,
160
+ 'LTC': 0.01,
161
+ 'XRP': 0.1,
162
+ },
163
+ },
164
+ 'precisionMode': TICK_SIZE,
165
+ })
166
+
167
+ def fetch_markets(self, params={}) -> List[Market]:
168
+ """
169
+ retrieves data on all markets for mercado
170
+ :param dict [params]: extra parameters specific to the exchange API endpoint
171
+ :returns dict[]: an array of objects representing market data
172
+ """
173
+ response = self.publicGetCoins(params)
174
+ #
175
+ # [
176
+ # "BCH",
177
+ # "BTC",
178
+ # "ETH",
179
+ # "LTC",
180
+ # "XRP",
181
+ # "MBPRK01",
182
+ # "MBPRK02",
183
+ # "MBPRK03",
184
+ # "MBPRK04",
185
+ # "MBCONS01",
186
+ # "USDC",
187
+ # "WBX",
188
+ # "CHZ",
189
+ # "MBCONS02",
190
+ # "PAXG",
191
+ # "MBVASCO01",
192
+ # "LINK"
193
+ # ]
194
+ #
195
+ result = []
196
+ amountLimits = self.safe_value(self.options, 'limits', {})
197
+ for i in range(0, len(response)):
198
+ coin = response[i]
199
+ baseId = coin
200
+ quoteId = 'BRL'
201
+ base = self.safe_currency_code(baseId)
202
+ quote = self.safe_currency_code(quoteId)
203
+ id = quote + base
204
+ result.append({
205
+ 'id': id,
206
+ 'symbol': base + '/' + quote,
207
+ 'base': base,
208
+ 'quote': quote,
209
+ 'settle': None,
210
+ 'baseId': baseId,
211
+ 'quoteId': quoteId,
212
+ 'settleId': None,
213
+ 'type': 'spot',
214
+ 'spot': True,
215
+ 'margin': False,
216
+ 'swap': False,
217
+ 'future': False,
218
+ 'option': False,
219
+ 'active': None,
220
+ 'contract': False,
221
+ 'linear': None,
222
+ 'inverse': None,
223
+ 'contractSize': None,
224
+ 'expiry': None,
225
+ 'expiryDatetime': None,
226
+ 'strike': None,
227
+ 'optionType': None,
228
+ 'precision': {
229
+ 'amount': self.parse_number('1e-8'),
230
+ 'price': self.parse_number('1e-5'),
231
+ },
232
+ 'limits': {
233
+ 'leverage': {
234
+ 'min': None,
235
+ 'max': None,
236
+ },
237
+ 'amount': {
238
+ 'min': self.safe_number(amountLimits, baseId),
239
+ 'max': None,
240
+ },
241
+ 'price': {
242
+ 'min': self.parse_number('1e-5'),
243
+ 'max': None,
244
+ },
245
+ 'cost': {
246
+ 'min': None,
247
+ 'max': None,
248
+ },
249
+ },
250
+ 'created': None,
251
+ 'info': coin,
252
+ })
253
+ return result
254
+
255
+ def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
256
+ """
257
+ fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
258
+ :param str symbol: unified symbol of the market to fetch the order book for
259
+ :param int [limit]: the maximum amount of order book entries to return
260
+ :param dict [params]: extra parameters specific to the exchange API endpoint
261
+ :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
262
+ """
263
+ self.load_markets()
264
+ market = self.market(symbol)
265
+ request: dict = {
266
+ 'coin': market['base'],
267
+ }
268
+ response = self.publicGetCoinOrderbook(self.extend(request, params))
269
+ return self.parse_order_book(response, market['symbol'])
270
+
271
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
272
+ #
273
+ # {
274
+ # "high":"103.96000000",
275
+ # "low":"95.00000000",
276
+ # "vol":"2227.67806598",
277
+ # "last":"97.91591000",
278
+ # "buy":"95.52760000",
279
+ # "sell":"97.91475000",
280
+ # "open":"99.79955000",
281
+ # "date":1643382606
282
+ # }
283
+ #
284
+ symbol = self.safe_symbol(None, market)
285
+ timestamp = self.safe_timestamp(ticker, 'date')
286
+ last = self.safe_string(ticker, 'last')
287
+ return self.safe_ticker({
288
+ 'symbol': symbol,
289
+ 'timestamp': timestamp,
290
+ 'datetime': self.iso8601(timestamp),
291
+ 'high': self.safe_string(ticker, 'high'),
292
+ 'low': self.safe_string(ticker, 'low'),
293
+ 'bid': self.safe_string(ticker, 'buy'),
294
+ 'bidVolume': None,
295
+ 'ask': self.safe_string(ticker, 'sell'),
296
+ 'askVolume': None,
297
+ 'vwap': None,
298
+ 'open': None,
299
+ 'close': last,
300
+ 'last': last,
301
+ 'previousClose': None,
302
+ 'change': None,
303
+ 'percentage': None,
304
+ 'average': None,
305
+ 'baseVolume': self.safe_string(ticker, 'vol'),
306
+ 'quoteVolume': None,
307
+ 'info': ticker,
308
+ }, market)
309
+
310
+ def fetch_ticker(self, symbol: str, params={}) -> Ticker:
311
+ """
312
+ fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
313
+ :param str symbol: unified symbol of the market to fetch the ticker for
314
+ :param dict [params]: extra parameters specific to the exchange API endpoint
315
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
316
+ """
317
+ self.load_markets()
318
+ market = self.market(symbol)
319
+ request: dict = {
320
+ 'coin': market['base'],
321
+ }
322
+ response = self.publicGetCoinTicker(self.extend(request, params))
323
+ ticker = self.safe_value(response, 'ticker', {})
324
+ #
325
+ # {
326
+ # "ticker": {
327
+ # "high":"1549.82293000",
328
+ # "low":"1503.00011000",
329
+ # "vol":"81.82827101",
330
+ # "last":"1533.15000000",
331
+ # "buy":"1533.21018000",
332
+ # "sell":"1540.09000000",
333
+ # "open":"1524.71089000",
334
+ # "date":1643691671
335
+ # }
336
+ # }
337
+ #
338
+ return self.parse_ticker(ticker, market)
339
+
340
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
341
+ timestamp = self.safe_timestamp_2(trade, 'date', 'executed_timestamp')
342
+ market = self.safe_market(None, market)
343
+ id = self.safe_string_2(trade, 'tid', 'operation_id')
344
+ type = None
345
+ side = self.safe_string(trade, 'type')
346
+ price = self.safe_string(trade, 'price')
347
+ amount = self.safe_string_2(trade, 'amount', 'quantity')
348
+ feeCost = self.safe_string(trade, 'fee_rate')
349
+ fee = None
350
+ if feeCost is not None:
351
+ fee = {
352
+ 'cost': feeCost,
353
+ 'currency': None,
354
+ }
355
+ return self.safe_trade({
356
+ 'id': id,
357
+ 'info': trade,
358
+ 'timestamp': timestamp,
359
+ 'datetime': self.iso8601(timestamp),
360
+ 'symbol': market['symbol'],
361
+ 'order': None,
362
+ 'type': type,
363
+ 'side': side,
364
+ 'takerOrMaker': None,
365
+ 'price': price,
366
+ 'amount': amount,
367
+ 'cost': None,
368
+ 'fee': fee,
369
+ }, market)
370
+
371
+ def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
372
+ """
373
+ get the list of most recent trades for a particular symbol
374
+ :param str symbol: unified symbol of the market to fetch trades for
375
+ :param int [since]: timestamp in ms of the earliest trade to fetch
376
+ :param int [limit]: the maximum amount of trades to fetch
377
+ :param dict [params]: extra parameters specific to the exchange API endpoint
378
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
379
+ """
380
+ self.load_markets()
381
+ market = self.market(symbol)
382
+ method = 'publicGetCoinTrades'
383
+ request: dict = {
384
+ 'coin': market['base'],
385
+ }
386
+ if since is not None:
387
+ method += 'From'
388
+ request['from'] = self.parse_to_int(since / 1000)
389
+ to = self.safe_integer(params, 'to')
390
+ if to is not None:
391
+ method += 'To'
392
+ response = getattr(self, method)(self.extend(request, params))
393
+ return self.parse_trades(response, market, since, limit)
394
+
395
+ def parse_balance(self, response) -> Balances:
396
+ data = self.safe_value(response, 'response_data', {})
397
+ balances = self.safe_value(data, 'balance', {})
398
+ result: dict = {'info': response}
399
+ currencyIds = list(balances.keys())
400
+ for i in range(0, len(currencyIds)):
401
+ currencyId = currencyIds[i]
402
+ code = self.safe_currency_code(currencyId)
403
+ if currencyId in balances:
404
+ balance = self.safe_value(balances, currencyId, {})
405
+ account = self.account()
406
+ account['free'] = self.safe_string(balance, 'available')
407
+ account['total'] = self.safe_string(balance, 'total')
408
+ result[code] = account
409
+ return self.safe_balance(result)
410
+
411
+ def fetch_balance(self, params={}) -> Balances:
412
+ """
413
+ query for balance and get the amount of funds available for trading or funds locked in orders
414
+ :param dict [params]: extra parameters specific to the exchange API endpoint
415
+ :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
416
+ """
417
+ self.load_markets()
418
+ response = self.privatePostGetAccountInfo(params)
419
+ return self.parse_balance(response)
420
+
421
+ def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
422
+ """
423
+ create a trade order
424
+ :param str symbol: unified symbol of the market to create an order in
425
+ :param str type: 'market' or 'limit'
426
+ :param str side: 'buy' or 'sell'
427
+ :param float amount: how much of currency you want to trade in units of base currency
428
+ :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
429
+ :param dict [params]: extra parameters specific to the exchange API endpoint
430
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
431
+ """
432
+ self.load_markets()
433
+ market = self.market(symbol)
434
+ request: dict = {
435
+ 'coin_pair': market['id'],
436
+ }
437
+ method = self.capitalize(side) + 'Order'
438
+ if type == 'limit':
439
+ method = 'privatePostPlace' + method
440
+ request['limit_price'] = self.price_to_precision(market['symbol'], price)
441
+ request['quantity'] = self.amount_to_precision(market['symbol'], amount)
442
+ else:
443
+ method = 'privatePostPlaceMarket' + method
444
+ if side == 'buy':
445
+ if price is None:
446
+ raise InvalidOrder(self.id + ' createOrder() requires the price argument with market buy orders to calculate total order cost(amount to spend), where cost = amount * price. Supply a price argument to createOrder() call if you want the cost to be calculated for you from price and amount')
447
+ request['cost'] = self.price_to_precision(market['symbol'], amount * price)
448
+ else:
449
+ request['quantity'] = self.amount_to_precision(market['symbol'], amount)
450
+ response = getattr(self, method)(self.extend(request, params))
451
+ # TODO: replace self with a call to parseOrder for unification
452
+ return self.safe_order({
453
+ 'info': response,
454
+ 'id': str(response['response_data']['order']['order_id']),
455
+ }, market)
456
+
457
+ def cancel_order(self, id: str, symbol: Str = None, params={}):
458
+ """
459
+ cancels an open order
460
+ :param str id: order id
461
+ :param str symbol: unified symbol of the market the order was made in
462
+ :param dict [params]: extra parameters specific to the exchange API endpoint
463
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
464
+ """
465
+ if symbol is None:
466
+ raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
467
+ self.load_markets()
468
+ market = self.market(symbol)
469
+ request: dict = {
470
+ 'coin_pair': market['id'],
471
+ 'order_id': id,
472
+ }
473
+ response = self.privatePostCancelOrder(self.extend(request, params))
474
+ #
475
+ # {
476
+ # "response_data": {
477
+ # "order": {
478
+ # "order_id": 2176769,
479
+ # "coin_pair": "BRLBCH",
480
+ # "order_type": 2,
481
+ # "status": 3,
482
+ # "has_fills": False,
483
+ # "quantity": "0.10000000",
484
+ # "limit_price": "1996.15999",
485
+ # "executed_quantity": "0.00000000",
486
+ # "executed_price_avg": "0.00000",
487
+ # "fee": "0.00000000",
488
+ # "created_timestamp": "1536956488",
489
+ # "updated_timestamp": "1536956499",
490
+ # "operations": []
491
+ # }
492
+ # },
493
+ # "status_code": 100,
494
+ # "server_unix_timestamp": "1536956499"
495
+ # }
496
+ #
497
+ responseData = self.safe_value(response, 'response_data', {})
498
+ order = self.safe_dict(responseData, 'order', {})
499
+ return self.parse_order(order, market)
500
+
501
+ def parse_order_status(self, status: Str):
502
+ statuses: dict = {
503
+ '2': 'open',
504
+ '3': 'canceled',
505
+ '4': 'closed',
506
+ }
507
+ return self.safe_string(statuses, status, status)
508
+
509
+ def parse_order(self, order: dict, market: Market = None) -> Order:
510
+ #
511
+ # {
512
+ # "order_id": 4,
513
+ # "coin_pair": "BRLBTC",
514
+ # "order_type": 1,
515
+ # "status": 2,
516
+ # "has_fills": True,
517
+ # "quantity": "2.00000000",
518
+ # "limit_price": "900.00000",
519
+ # "executed_quantity": "1.00000000",
520
+ # "executed_price_avg": "900.00000",
521
+ # "fee": "0.00300000",
522
+ # "created_timestamp": "1453838494",
523
+ # "updated_timestamp": "1453838494",
524
+ # "operations": [
525
+ # {
526
+ # "operation_id": 1,
527
+ # "quantity": "1.00000000",
528
+ # "price": "900.00000",
529
+ # "fee_rate": "0.30",
530
+ # "executed_timestamp": "1453838494",
531
+ # },
532
+ # ],
533
+ # }
534
+ #
535
+ id = self.safe_string(order, 'order_id')
536
+ order_type = self.safe_string(order, 'order_type')
537
+ side = None
538
+ if 'order_type' in order:
539
+ side = 'buy' if (order_type == '1') else 'sell'
540
+ status = self.parse_order_status(self.safe_string(order, 'status'))
541
+ marketId = self.safe_string(order, 'coin_pair')
542
+ market = self.safe_market(marketId, market)
543
+ timestamp = self.safe_timestamp(order, 'created_timestamp')
544
+ fee = {
545
+ 'cost': self.safe_string(order, 'fee'),
546
+ 'currency': market['quote'],
547
+ }
548
+ price = self.safe_string(order, 'limit_price')
549
+ # price = self.safe_number(order, 'executed_price_avg', price)
550
+ average = self.safe_string(order, 'executed_price_avg')
551
+ amount = self.safe_string(order, 'quantity')
552
+ filled = self.safe_string(order, 'executed_quantity')
553
+ lastTradeTimestamp = self.safe_timestamp(order, 'updated_timestamp')
554
+ rawTrades = self.safe_value(order, 'operations', [])
555
+ return self.safe_order({
556
+ 'info': order,
557
+ 'id': id,
558
+ 'clientOrderId': None,
559
+ 'timestamp': timestamp,
560
+ 'datetime': self.iso8601(timestamp),
561
+ 'lastTradeTimestamp': lastTradeTimestamp,
562
+ 'symbol': market['symbol'],
563
+ 'type': 'limit',
564
+ 'timeInForce': None,
565
+ 'postOnly': None,
566
+ 'side': side,
567
+ 'price': price,
568
+ 'stopPrice': None,
569
+ 'triggerPrice': None,
570
+ 'cost': None,
571
+ 'average': average,
572
+ 'amount': amount,
573
+ 'filled': filled,
574
+ 'remaining': None,
575
+ 'status': status,
576
+ 'fee': fee,
577
+ 'trades': rawTrades,
578
+ }, market)
579
+
580
+ def fetch_order(self, id: str, symbol: Str = None, params={}):
581
+ """
582
+ fetches information on an order made by the user
583
+ :param str symbol: unified symbol of the market the order was made in
584
+ :param dict [params]: extra parameters specific to the exchange API endpoint
585
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
586
+ """
587
+ if symbol is None:
588
+ raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
589
+ self.load_markets()
590
+ market = self.market(symbol)
591
+ request: dict = {
592
+ 'coin_pair': market['id'],
593
+ 'order_id': int(id),
594
+ }
595
+ response = self.privatePostGetOrder(self.extend(request, params))
596
+ responseData = self.safe_value(response, 'response_data', {})
597
+ order = self.safe_dict(responseData, 'order')
598
+ return self.parse_order(order, market)
599
+
600
+ def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
601
+ """
602
+ make a withdrawal
603
+ :param str code: unified currency code
604
+ :param float amount: the amount to withdraw
605
+ :param str address: the address to withdraw to
606
+ :param str tag:
607
+ :param dict [params]: extra parameters specific to the exchange API endpoint
608
+ :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
609
+ """
610
+ tag, params = self.handle_withdraw_tag_and_params(tag, params)
611
+ self.check_address(address)
612
+ self.load_markets()
613
+ currency = self.currency(code)
614
+ request: dict = {
615
+ 'coin': currency['id'],
616
+ 'quantity': format(amount, '.10f'),
617
+ 'address': address,
618
+ }
619
+ if code == 'BRL':
620
+ account_ref = ('account_ref' in params)
621
+ if not account_ref:
622
+ raise ArgumentsRequired(self.id + ' withdraw() requires account_ref parameter to withdraw ' + code)
623
+ elif code != 'LTC':
624
+ tx_fee = ('tx_fee' in params)
625
+ if not tx_fee:
626
+ raise ArgumentsRequired(self.id + ' withdraw() requires tx_fee parameter to withdraw ' + code)
627
+ if code == 'XRP':
628
+ if tag is None:
629
+ if not ('destination_tag' in params):
630
+ raise ArgumentsRequired(self.id + ' withdraw() requires a tag argument or destination_tag parameter to withdraw ' + code)
631
+ else:
632
+ request['destination_tag'] = tag
633
+ response = self.privatePostWithdrawCoin(self.extend(request, params))
634
+ #
635
+ # {
636
+ # "response_data": {
637
+ # "withdrawal": {
638
+ # "id": 1,
639
+ # "coin": "BRL",
640
+ # "quantity": "300.56",
641
+ # "net_quantity": "291.68",
642
+ # "fee": "8.88",
643
+ # "account": "bco: 341, ag: 1111, cta: 23456-X",
644
+ # "status": 1,
645
+ # "created_timestamp": "1453912088",
646
+ # "updated_timestamp": "1453912088"
647
+ # }
648
+ # },
649
+ # "status_code": 100,
650
+ # "server_unix_timestamp": "1453912088"
651
+ # }
652
+ #
653
+ responseData = self.safe_value(response, 'response_data', {})
654
+ withdrawal = self.safe_dict(responseData, 'withdrawal')
655
+ return self.parse_transaction(withdrawal, currency)
656
+
657
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
658
+ #
659
+ # {
660
+ # "id": 1,
661
+ # "coin": "BRL",
662
+ # "quantity": "300.56",
663
+ # "net_quantity": "291.68",
664
+ # "fee": "8.88",
665
+ # "account": "bco: 341, ag: 1111, cta: 23456-X",
666
+ # "status": 1,
667
+ # "created_timestamp": "1453912088",
668
+ # "updated_timestamp": "1453912088"
669
+ # }
670
+ #
671
+ currency = self.safe_currency(None, currency)
672
+ return {
673
+ 'id': self.safe_string(transaction, 'id'),
674
+ 'txid': None,
675
+ 'timestamp': None,
676
+ 'datetime': None,
677
+ 'network': None,
678
+ 'addressFrom': None,
679
+ 'address': None,
680
+ 'addressTo': None,
681
+ 'amount': None,
682
+ 'type': None,
683
+ 'currency': currency['code'],
684
+ 'status': None,
685
+ 'updated': None,
686
+ 'tagFrom': None,
687
+ 'tag': None,
688
+ 'tagTo': None,
689
+ 'comment': None,
690
+ 'internal': None,
691
+ 'fee': None,
692
+ 'info': transaction,
693
+ }
694
+
695
+ def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
696
+ return [
697
+ self.safe_integer(ohlcv, 0),
698
+ self.safe_number(ohlcv, 1),
699
+ self.safe_number(ohlcv, 2),
700
+ self.safe_number(ohlcv, 3),
701
+ self.safe_number(ohlcv, 4),
702
+ self.safe_number(ohlcv, 5),
703
+ ]
704
+
705
+ def fetch_ohlcv(self, symbol: str, timeframe='15m', since: Int = None, limit: Int = None, params={}) -> List[list]:
706
+ """
707
+ fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
708
+ :param str symbol: unified symbol of the market to fetch OHLCV data for
709
+ :param str timeframe: the length of time each candle represents
710
+ :param int [since]: timestamp in ms of the earliest candle to fetch
711
+ :param int [limit]: the maximum amount of candles to fetch
712
+ :param dict [params]: extra parameters specific to the exchange API endpoint
713
+ :returns int[][]: A list of candles ordered, open, high, low, close, volume
714
+ """
715
+ self.load_markets()
716
+ market = self.market(symbol)
717
+ request: dict = {
718
+ 'resolution': self.safe_string(self.timeframes, timeframe, timeframe),
719
+ 'symbol': market['base'] + '-' + market['quote'], # exceptional endpoint, that needs custom symbol syntax
720
+ }
721
+ if limit is None:
722
+ limit = 100 # set some default limit,'s required if user doesn't provide it
723
+ if since is not None:
724
+ request['from'] = self.parse_to_int(since / 1000)
725
+ request['to'] = self.sum(request['from'], limit * self.parse_timeframe(timeframe))
726
+ else:
727
+ request['to'] = self.seconds()
728
+ request['from'] = request['to'] - (limit * self.parse_timeframe(timeframe))
729
+ response = self.v4PublicNetGetCandles(self.extend(request, params))
730
+ candles = self.convert_trading_view_to_ohlcv(response, 't', 'o', 'h', 'l', 'c', 'v')
731
+ return self.parse_ohlcvs(candles, market, timeframe, since, limit)
732
+
733
+ def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
734
+ """
735
+ fetches information on multiple orders made by the user
736
+ :param str symbol: unified market symbol of the market orders were made in
737
+ :param int [since]: the earliest time in ms to fetch orders for
738
+ :param int [limit]: the maximum number of order structures to retrieve
739
+ :param dict [params]: extra parameters specific to the exchange API endpoint
740
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
741
+ """
742
+ if symbol is None:
743
+ raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
744
+ self.load_markets()
745
+ market = self.market(symbol)
746
+ request: dict = {
747
+ 'coin_pair': market['id'],
748
+ }
749
+ response = self.privatePostListOrders(self.extend(request, params))
750
+ responseData = self.safe_value(response, 'response_data', {})
751
+ orders = self.safe_list(responseData, 'orders', [])
752
+ return self.parse_orders(orders, market, since, limit)
753
+
754
+ def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
755
+ """
756
+ fetch all unfilled currently open orders
757
+ :param str symbol: unified market symbol
758
+ :param int [since]: the earliest time in ms to fetch open orders for
759
+ :param int [limit]: the maximum number of open order structures to retrieve
760
+ :param dict [params]: extra parameters specific to the exchange API endpoint
761
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
762
+ """
763
+ if symbol is None:
764
+ raise ArgumentsRequired(self.id + ' fetchOpenOrders() requires a symbol argument')
765
+ self.load_markets()
766
+ market = self.market(symbol)
767
+ request: dict = {
768
+ 'coin_pair': market['id'],
769
+ 'status_list': '[2]', # open only
770
+ }
771
+ response = self.privatePostListOrders(self.extend(request, params))
772
+ responseData = self.safe_value(response, 'response_data', {})
773
+ orders = self.safe_list(responseData, 'orders', [])
774
+ return self.parse_orders(orders, market, since, limit)
775
+
776
+ def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
777
+ """
778
+ fetch all trades made by the user
779
+ :param str symbol: unified market symbol
780
+ :param int [since]: the earliest time in ms to fetch trades for
781
+ :param int [limit]: the maximum number of trades structures to retrieve
782
+ :param dict [params]: extra parameters specific to the exchange API endpoint
783
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
784
+ """
785
+ if symbol is None:
786
+ raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
787
+ self.load_markets()
788
+ market = self.market(symbol)
789
+ request: dict = {
790
+ 'coin_pair': market['id'],
791
+ 'has_fills': True,
792
+ }
793
+ response = self.privatePostListOrders(self.extend(request, params))
794
+ responseData = self.safe_value(response, 'response_data', {})
795
+ ordersRaw = self.safe_value(responseData, 'orders', [])
796
+ orders = self.parse_orders(ordersRaw, market, since, limit)
797
+ trades = self.orders_to_trades(orders)
798
+ return self.filter_by_symbol_since_limit(trades, market['symbol'], since, limit)
799
+
800
+ def orders_to_trades(self, orders):
801
+ result = []
802
+ for i in range(0, len(orders)):
803
+ trades = self.safe_value(orders[i], 'trades', [])
804
+ for y in range(0, len(trades)):
805
+ result.append(trades[y])
806
+ return result
807
+
808
+ def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
809
+ url = self.urls['api'][api] + '/'
810
+ query = self.omit(params, self.extract_params(path))
811
+ if (api == 'public') or (api == 'v4Public') or (api == 'v4PublicNet'):
812
+ url += self.implode_params(path, params)
813
+ if query:
814
+ url += '?' + self.urlencode(query)
815
+ else:
816
+ self.check_required_credentials()
817
+ url += self.version + '/'
818
+ nonce = self.nonce()
819
+ body = self.urlencode(self.extend({
820
+ 'tapi_method': path,
821
+ 'tapi_nonce': nonce,
822
+ }, params))
823
+ auth = '/tapi/' + self.version + '/' + '?' + body
824
+ headers = {
825
+ 'Content-Type': 'application/x-www-form-urlencoded',
826
+ 'TAPI-ID': self.apiKey,
827
+ 'TAPI-MAC': self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha512),
828
+ }
829
+ return {'url': url, 'method': method, 'body': body, 'headers': headers}
830
+
831
+ def handle_errors(self, httpCode: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
832
+ if response is None:
833
+ return None
834
+ #
835
+ # todo add a unified standard handleErrors with self.exceptions in describe()
836
+ #
837
+ # {"status":503,"message":"Maintenancing, try again later","result":null}
838
+ #
839
+ errorMessage = self.safe_value(response, 'error_message')
840
+ if errorMessage is not None:
841
+ raise ExchangeError(self.id + ' ' + self.json(response))
842
+ return None