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
@@ -0,0 +1,891 @@
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.async_support.base.exchange import Exchange
7
+ from ccxt.abstract.btcalpha import ImplicitAPI
8
+ import hashlib
9
+ from ccxt.base.types import Balances, Currency, IndexType, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
+ from typing import List
11
+ from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
13
+ from ccxt.base.errors import InsufficientFunds
14
+ from ccxt.base.errors import InvalidOrder
15
+ from ccxt.base.errors import DDoSProtection
16
+ from ccxt.base.decimal_to_precision import TICK_SIZE
17
+ from ccxt.base.precise import Precise
18
+
19
+
20
+ class btcalpha(Exchange, ImplicitAPI):
21
+
22
+ def describe(self):
23
+ return self.deep_extend(super(btcalpha, self).describe(), {
24
+ 'id': 'btcalpha',
25
+ 'name': 'BTC-Alpha',
26
+ 'countries': ['US'],
27
+ 'version': 'v1',
28
+ 'has': {
29
+ 'CORS': None,
30
+ 'spot': True,
31
+ 'margin': False,
32
+ 'swap': False,
33
+ 'future': False,
34
+ 'option': False,
35
+ 'addMargin': False,
36
+ 'cancelOrder': True,
37
+ 'closeAllPositions': False,
38
+ 'closePosition': False,
39
+ 'createDepositAddress': False,
40
+ 'createOrder': True,
41
+ 'createReduceOnlyOrder': False,
42
+ 'createStopLimitOrder': False,
43
+ 'createStopMarketOrder': False,
44
+ 'createStopOrder': False,
45
+ 'fetchBalance': True,
46
+ 'fetchBorrowRateHistories': False,
47
+ 'fetchBorrowRateHistory': False,
48
+ 'fetchClosedOrders': True,
49
+ 'fetchCrossBorrowRate': False,
50
+ 'fetchCrossBorrowRates': False,
51
+ 'fetchDeposit': False,
52
+ 'fetchDepositAddress': False,
53
+ 'fetchDepositAddresses': False,
54
+ 'fetchDepositAddressesByNetwork': False,
55
+ 'fetchDeposits': True,
56
+ 'fetchFundingHistory': False,
57
+ 'fetchFundingRate': False,
58
+ 'fetchFundingRateHistory': False,
59
+ 'fetchFundingRates': False,
60
+ 'fetchIndexOHLCV': False,
61
+ 'fetchIsolatedBorrowRate': False,
62
+ 'fetchIsolatedBorrowRates': False,
63
+ 'fetchL2OrderBook': True,
64
+ 'fetchLeverage': False,
65
+ 'fetchMarginMode': False,
66
+ 'fetchMarkets': True,
67
+ 'fetchMarkOHLCV': False,
68
+ 'fetchMyTrades': True,
69
+ 'fetchOHLCV': True,
70
+ 'fetchOpenInterestHistory': False,
71
+ 'fetchOpenOrders': True,
72
+ 'fetchOrder': True,
73
+ 'fetchOrderBook': True,
74
+ 'fetchOrders': True,
75
+ 'fetchPosition': False,
76
+ 'fetchPositionHistory': False,
77
+ 'fetchPositionMode': False,
78
+ 'fetchPositions': False,
79
+ 'fetchPositionsForSymbol': False,
80
+ 'fetchPositionsHistory': False,
81
+ 'fetchPositionsRisk': False,
82
+ 'fetchPremiumIndexOHLCV': False,
83
+ 'fetchTicker': True,
84
+ 'fetchTickers': True,
85
+ 'fetchTrades': True,
86
+ 'fetchTradingFee': False,
87
+ 'fetchTradingFees': False,
88
+ 'fetchTransfer': False,
89
+ 'fetchTransfers': False,
90
+ 'fetchWithdrawal': False,
91
+ 'fetchWithdrawals': True,
92
+ 'reduceMargin': False,
93
+ 'setLeverage': False,
94
+ 'setMarginMode': False,
95
+ 'setPositionMode': False,
96
+ 'transfer': False,
97
+ 'withdraw': False,
98
+ },
99
+ 'timeframes': {
100
+ '5m': '5',
101
+ '15m': '15',
102
+ '30m': '30',
103
+ '1h': '60',
104
+ '4h': '240',
105
+ '1d': 'D',
106
+ },
107
+ 'urls': {
108
+ 'logo': 'https://user-images.githubusercontent.com/1294454/42625213-dabaa5da-85cf-11e8-8f99-aa8f8f7699f0.jpg',
109
+ 'api': {
110
+ 'rest': 'https://btc-alpha.com/api',
111
+ },
112
+ 'www': 'https://btc-alpha.com',
113
+ 'doc': 'https://btc-alpha.github.io/api-docs',
114
+ 'fees': 'https://btc-alpha.com/fees/',
115
+ 'referral': 'https://btc-alpha.com/?r=123788',
116
+ },
117
+ 'api': {
118
+ 'public': {
119
+ 'get': [
120
+ 'currencies/',
121
+ 'pairs/',
122
+ 'orderbook/{pair_name}',
123
+ 'exchanges/',
124
+ 'charts/{pair}/{type}/chart/',
125
+ 'ticker/',
126
+ ],
127
+ },
128
+ 'private': {
129
+ 'get': [
130
+ 'wallets/',
131
+ 'orders/own/',
132
+ 'order/{id}/',
133
+ 'exchanges/own/',
134
+ 'deposits/',
135
+ 'withdraws/',
136
+ ],
137
+ 'post': [
138
+ 'order/',
139
+ 'order-cancel/',
140
+ ],
141
+ },
142
+ },
143
+ 'fees': {
144
+ 'trading': {
145
+ 'maker': self.parse_number('0.002'),
146
+ 'taker': self.parse_number('0.002'),
147
+ },
148
+ 'funding': {
149
+ 'withdraw': {},
150
+ },
151
+ },
152
+ 'commonCurrencies': {
153
+ 'CBC': 'Cashbery',
154
+ },
155
+ 'precisionMode': TICK_SIZE,
156
+ 'exceptions': {
157
+ 'exact': {},
158
+ 'broad': {
159
+ 'Out of balance': InsufficientFunds, # {"date":1570599531.4814300537,"error":"Out of balance -9.99243661 BTC"}
160
+ },
161
+ },
162
+ })
163
+
164
+ async def fetch_markets(self, params={}) -> List[Market]:
165
+ """
166
+ retrieves data on all markets for btcalpha
167
+ :see: https://btc-alpha.github.io/api-docs/#list-all-currencies
168
+ :param dict [params]: extra parameters specific to the exchange API endpoint
169
+ :returns dict[]: an array of objects representing market data
170
+ """
171
+ response = await self.publicGetPairs(params)
172
+ #
173
+ # [
174
+ # {
175
+ # "name": "1INCH_USDT",
176
+ # "currency1": "1INCH",
177
+ # "currency2": "USDT",
178
+ # "price_precision": 4,
179
+ # "amount_precision": 2,
180
+ # "minimum_order_size": "0.01000000",
181
+ # "maximum_order_size": "900000.00000000",
182
+ # "minimum_order_value": "10.00000000",
183
+ # "liquidity_type": 10
184
+ # },
185
+ # ]
186
+ #
187
+ return self.parse_markets(response)
188
+
189
+ def parse_market(self, market: dict) -> Market:
190
+ id = self.safe_string(market, 'name')
191
+ baseId = self.safe_string(market, 'currency1')
192
+ quoteId = self.safe_string(market, 'currency2')
193
+ base = self.safe_currency_code(baseId)
194
+ quote = self.safe_currency_code(quoteId)
195
+ pricePrecision = self.safe_string(market, 'price_precision')
196
+ priceLimit = self.parse_precision(pricePrecision)
197
+ amountLimit = self.safe_string(market, 'minimum_order_size')
198
+ return {
199
+ 'id': id,
200
+ 'symbol': base + '/' + quote,
201
+ 'base': base,
202
+ 'quote': quote,
203
+ 'settle': None,
204
+ 'baseId': baseId,
205
+ 'quoteId': quoteId,
206
+ 'settleId': None,
207
+ 'type': 'spot',
208
+ 'spot': True,
209
+ 'margin': False,
210
+ 'swap': False,
211
+ 'future': False,
212
+ 'option': False,
213
+ 'active': True,
214
+ 'contract': False,
215
+ 'linear': None,
216
+ 'inverse': None,
217
+ 'contractSize': None,
218
+ 'expiry': None,
219
+ 'expiryDatetime': None,
220
+ 'strike': None,
221
+ 'optionType': None,
222
+ 'precision': {
223
+ 'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'amount_precision'))),
224
+ 'price': self.parse_number(self.parse_precision((pricePrecision))),
225
+ },
226
+ 'limits': {
227
+ 'leverage': {
228
+ 'min': None,
229
+ 'max': None,
230
+ },
231
+ 'amount': {
232
+ 'min': self.parse_number(amountLimit),
233
+ 'max': self.safe_number(market, 'maximum_order_size'),
234
+ },
235
+ 'price': {
236
+ 'min': self.parse_number(priceLimit),
237
+ 'max': None,
238
+ },
239
+ 'cost': {
240
+ 'min': self.parse_number(Precise.string_mul(priceLimit, amountLimit)),
241
+ 'max': None,
242
+ },
243
+ },
244
+ 'created': None,
245
+ 'info': market,
246
+ }
247
+
248
+ async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
249
+ """
250
+ :see: https://btc-alpha.github.io/api-docs/#tickers
251
+ fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
252
+ :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
253
+ :param dict [params]: extra parameters specific to the exchange API endpoint
254
+ :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
255
+ """
256
+ await self.load_markets()
257
+ response = await self.publicGetTicker(params)
258
+ #
259
+ # [
260
+ # {
261
+ # "timestamp": "1674658.445272",
262
+ # "pair": "BTC_USDT",
263
+ # "last": "22476.85",
264
+ # "diff": "458.96",
265
+ # "vol": "6660.847784",
266
+ # "high": "23106.08",
267
+ # "low": "22348.29",
268
+ # "buy": "22508.46",
269
+ # "sell": "22521.11"
270
+ # },
271
+ # ...
272
+ # ]
273
+ #
274
+ return self.parse_tickers(response, symbols)
275
+
276
+ async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
277
+ """
278
+ :see: https://btc-alpha.github.io/api-docs/#tickers
279
+ fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
280
+ :param str symbol: unified symbol of the market to fetch the ticker for
281
+ :param dict [params]: extra parameters specific to the exchange API endpoint
282
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
283
+ """
284
+ await self.load_markets()
285
+ market = self.market(symbol)
286
+ request: dict = {
287
+ 'pair': market['id'],
288
+ }
289
+ response = await self.publicGetTicker(self.extend(request, params))
290
+ #
291
+ # {
292
+ # "timestamp": "1674658.445272",
293
+ # "pair": "BTC_USDT",
294
+ # "last": "22476.85",
295
+ # "diff": "458.96",
296
+ # "vol": "6660.847784",
297
+ # "high": "23106.08",
298
+ # "low": "22348.29",
299
+ # "buy": "22508.46",
300
+ # "sell": "22521.11"
301
+ # }
302
+ #
303
+ return self.parse_ticker(response, market)
304
+
305
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
306
+ #
307
+ # {
308
+ # "timestamp": "1674658.445272",
309
+ # "pair": "BTC_USDT",
310
+ # "last": "22476.85",
311
+ # "diff": "458.96",
312
+ # "vol": "6660.847784",
313
+ # "high": "23106.08",
314
+ # "low": "22348.29",
315
+ # "buy": "22508.46",
316
+ # "sell": "22521.11"
317
+ # }
318
+ #
319
+ timestampStr = self.safe_string(ticker, 'timestamp')
320
+ timestamp = int(Precise.string_mul(timestampStr, '1000000'))
321
+ marketId = self.safe_string(ticker, 'pair')
322
+ market = self.safe_market(marketId, market, '_')
323
+ last = self.safe_string(ticker, 'last')
324
+ return self.safe_ticker({
325
+ 'info': ticker,
326
+ 'symbol': market['symbol'],
327
+ 'timestamp': timestamp,
328
+ 'datetime': self.iso8601(timestamp),
329
+ 'high': self.safe_string(ticker, 'high'),
330
+ 'low': self.safe_string(ticker, 'low'),
331
+ 'bid': self.safe_string(ticker, 'buy'),
332
+ 'bidVolume': None,
333
+ 'ask': self.safe_string(ticker, 'sell'),
334
+ 'askVolume': None,
335
+ 'vwap': None,
336
+ 'open': None,
337
+ 'close': last,
338
+ 'last': last,
339
+ 'previousClose': None,
340
+ 'change': self.safe_string(ticker, 'diff'),
341
+ 'percentage': None,
342
+ 'average': None,
343
+ 'baseVolume': None,
344
+ 'quoteVolume': self.safe_string(ticker, 'vol'),
345
+ }, market)
346
+
347
+ async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
348
+ """
349
+ :see: https://btc-alpha.github.io/api-docs/#get-orderbook
350
+ fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
351
+ :param str symbol: unified symbol of the market to fetch the order book for
352
+ :param int [limit]: the maximum amount of order book entries to return
353
+ :param dict [params]: extra parameters specific to the exchange API endpoint
354
+ :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
355
+ """
356
+ await self.load_markets()
357
+ market = self.market(symbol)
358
+ request: dict = {
359
+ 'pair_name': market['id'],
360
+ }
361
+ if limit:
362
+ request['limit_sell'] = limit
363
+ request['limit_buy'] = limit
364
+ response = await self.publicGetOrderbookPairName(self.extend(request, params))
365
+ return self.parse_order_book(response, market['symbol'], None, 'buy', 'sell', 'price', 'amount')
366
+
367
+ def parse_bids_asks(self, bidasks, priceKey: IndexType = 0, amountKey: IndexType = 1, countOrIdKey: IndexType = 2):
368
+ result = []
369
+ for i in range(0, len(bidasks)):
370
+ bidask = bidasks[i]
371
+ if bidask:
372
+ result.append(self.parse_bid_ask(bidask, priceKey, amountKey))
373
+ return result
374
+
375
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
376
+ #
377
+ # fetchTrades(public)
378
+ #
379
+ # {
380
+ # "id": "202203440",
381
+ # "timestamp": "1637856276.264215",
382
+ # "pair": "AAVE_USDT",
383
+ # "price": "320.79900000",
384
+ # "amount": "0.05000000",
385
+ # "type": "buy"
386
+ # }
387
+ #
388
+ # fetchMyTrades(private)
389
+ #
390
+ # {
391
+ # "id": "202203440",
392
+ # "timestamp": "1637856276.264215",
393
+ # "pair": "AAVE_USDT",
394
+ # "price": "320.79900000",
395
+ # "amount": "0.05000000",
396
+ # "type": "buy",
397
+ # "my_side": "buy"
398
+ # }
399
+ #
400
+ marketId = self.safe_string(trade, 'pair')
401
+ market = self.safe_market(marketId, market, '_')
402
+ timestampRaw = self.safe_string(trade, 'timestamp')
403
+ timestamp = self.parse_to_int(Precise.string_mul(timestampRaw, '1000000'))
404
+ priceString = self.safe_string(trade, 'price')
405
+ amountString = self.safe_string(trade, 'amount')
406
+ id = self.safe_string(trade, 'id')
407
+ side = self.safe_string_2(trade, 'my_side', 'type')
408
+ return self.safe_trade({
409
+ 'id': id,
410
+ 'info': trade,
411
+ 'timestamp': timestamp,
412
+ 'datetime': self.iso8601(timestamp),
413
+ 'symbol': market['symbol'],
414
+ 'order': id,
415
+ 'type': 'limit',
416
+ 'side': side,
417
+ 'takerOrMaker': None,
418
+ 'price': priceString,
419
+ 'amount': amountString,
420
+ 'cost': None,
421
+ 'fee': None,
422
+ }, market)
423
+
424
+ async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
425
+ """
426
+ get the list of most recent trades for a particular symbol
427
+ :see: https://btc-alpha.github.io/api-docs/#list-all-exchanges
428
+ :param str symbol: unified symbol of the market to fetch trades for
429
+ :param int [since]: timestamp in ms of the earliest trade to fetch
430
+ :param int [limit]: the maximum amount of trades to fetch
431
+ :param dict [params]: extra parameters specific to the exchange API endpoint
432
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
433
+ """
434
+ await self.load_markets()
435
+ market = None
436
+ request: dict = {}
437
+ if symbol is not None:
438
+ market = self.market(symbol)
439
+ request['pair'] = market['id']
440
+ if limit is not None:
441
+ request['limit'] = limit
442
+ trades = await self.publicGetExchanges(self.extend(request, params))
443
+ return self.parse_trades(trades, market, since, limit)
444
+
445
+ async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
446
+ """
447
+ fetch all deposits made to an account
448
+ :see: https://btc-alpha.github.io/api-docs/#list-own-deposits
449
+ :param str code: unified currency code
450
+ :param int [since]: the earliest time in ms to fetch deposits for
451
+ :param int [limit]: the maximum number of deposits structures to retrieve
452
+ :param dict [params]: extra parameters specific to the exchange API endpoint
453
+ :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
454
+ """
455
+ await self.load_markets()
456
+ currency = None
457
+ if code is not None:
458
+ currency = self.currency(code)
459
+ response = await self.privateGetDeposits(params)
460
+ #
461
+ # [
462
+ # {
463
+ # "timestamp": 1485363039.18359,
464
+ # "id": 317,
465
+ # "currency": "BTC",
466
+ # "amount": 530.00000000
467
+ # }
468
+ # ]
469
+ #
470
+ return self.parse_transactions(response, currency, since, limit, {'type': 'deposit'})
471
+
472
+ async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
473
+ """
474
+ fetch all withdrawals made from an account
475
+ :see: https://btc-alpha.github.io/api-docs/#list-own-made-withdraws
476
+ :param str code: unified currency code
477
+ :param int [since]: the earliest time in ms to fetch withdrawals for
478
+ :param int [limit]: the maximum number of withdrawals structures to retrieve
479
+ :param dict [params]: extra parameters specific to the exchange API endpoint
480
+ :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
481
+ """
482
+ await self.load_markets()
483
+ currency = None
484
+ request: dict = {}
485
+ if code is not None:
486
+ currency = self.currency(code)
487
+ request['currency_id'] = currency['id']
488
+ response = await self.privateGetWithdraws(self.extend(request, params))
489
+ #
490
+ # [
491
+ # {
492
+ # "id": 403,
493
+ # "timestamp": 1485363466.868539,
494
+ # "currency": "BTC",
495
+ # "amount": 0.53000000,
496
+ # "status": 20
497
+ # }
498
+ # ]
499
+ #
500
+ return self.parse_transactions(response, currency, since, limit, {'type': 'withdrawal'})
501
+
502
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
503
+ #
504
+ # deposit
505
+ # {
506
+ # "timestamp": 1485363039.18359,
507
+ # "id": 317,
508
+ # "currency": "BTC",
509
+ # "amount": 530.00000000
510
+ # }
511
+ #
512
+ # withdrawal
513
+ # {
514
+ # "id": 403,
515
+ # "timestamp": 1485363466.868539,
516
+ # "currency": "BTC",
517
+ # "amount": 0.53000000,
518
+ # "status": 20
519
+ # }
520
+ #
521
+ timestamp = self.safe_timestamp(transaction, 'timestamp')
522
+ currencyId = self.safe_string(transaction, 'currency')
523
+ statusId = self.safe_string(transaction, 'status')
524
+ return {
525
+ 'id': self.safe_string(transaction, 'id'),
526
+ 'info': transaction,
527
+ 'timestamp': timestamp,
528
+ 'datetime': self.iso8601(timestamp),
529
+ 'network': None,
530
+ 'address': None,
531
+ 'addressTo': None,
532
+ 'addressFrom': None,
533
+ 'tag': None,
534
+ 'tagTo': None,
535
+ 'tagFrom': None,
536
+ 'currency': self.safe_currency_code(currencyId, currency),
537
+ 'amount': self.safe_number(transaction, 'amount'),
538
+ 'txid': None,
539
+ 'type': None,
540
+ 'status': self.parse_transaction_status(statusId),
541
+ 'comment': None,
542
+ 'internal': None,
543
+ 'fee': None,
544
+ 'updated': None,
545
+ }
546
+
547
+ def parse_transaction_status(self, status: Str):
548
+ statuses: dict = {
549
+ '10': 'pending', # New
550
+ '20': 'pending', # Verified, waiting for approving
551
+ '30': 'ok', # Approved by moderator
552
+ '40': 'failed', # Refused by moderator. See your email for more details
553
+ '50': 'canceled', # Cancelled by user
554
+ }
555
+ return self.safe_string(statuses, status, status)
556
+
557
+ def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
558
+ #
559
+ # {
560
+ # "time":1591296000,
561
+ # "open":0.024746,
562
+ # "close":0.024728,
563
+ # "low":0.024728,
564
+ # "high":0.024753,
565
+ # "volume":16.624
566
+ # }
567
+ #
568
+ return [
569
+ self.safe_timestamp(ohlcv, 'time'),
570
+ self.safe_number(ohlcv, 'open'),
571
+ self.safe_number(ohlcv, 'high'),
572
+ self.safe_number(ohlcv, 'low'),
573
+ self.safe_number(ohlcv, 'close'),
574
+ self.safe_number(ohlcv, 'volume'),
575
+ ]
576
+
577
+ async def fetch_ohlcv(self, symbol: str, timeframe='5m', since: Int = None, limit: Int = None, params={}) -> List[list]:
578
+ """
579
+ fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
580
+ :see: https://btc-alpha.github.io/api-docs/#charts
581
+ :param str symbol: unified symbol of the market to fetch OHLCV data for
582
+ :param str timeframe: the length of time each candle represents
583
+ :param int [since]: timestamp in ms of the earliest candle to fetch
584
+ :param int [limit]: the maximum amount of candles to fetch
585
+ :param dict [params]: extra parameters specific to the exchange API endpoint
586
+ :returns int[][]: A list of candles ordered, open, high, low, close, volume
587
+ """
588
+ await self.load_markets()
589
+ market = self.market(symbol)
590
+ request: dict = {
591
+ 'pair': market['id'],
592
+ 'type': self.safe_string(self.timeframes, timeframe, timeframe),
593
+ }
594
+ if limit is not None:
595
+ request['limit'] = limit
596
+ if since is not None:
597
+ request['since'] = self.parse_to_int(since / 1000)
598
+ response = await self.publicGetChartsPairTypeChart(self.extend(request, params))
599
+ #
600
+ # [
601
+ # {"time":1591296000,"open":0.024746,"close":0.024728,"low":0.024728,"high":0.024753,"volume":16.624},
602
+ # {"time":1591295700,"open":0.024718,"close":0.02475,"low":0.024711,"high":0.02475,"volume":31.645},
603
+ # {"time":1591295400,"open":0.024721,"close":0.024717,"low":0.024711,"high":0.02473,"volume":65.071}
604
+ # ]
605
+ #
606
+ return self.parse_ohlcvs(response, market, timeframe, since, limit)
607
+
608
+ def parse_balance(self, response) -> Balances:
609
+ result: dict = {'info': response}
610
+ for i in range(0, len(response)):
611
+ balance = response[i]
612
+ currencyId = self.safe_string(balance, 'currency')
613
+ code = self.safe_currency_code(currencyId)
614
+ account = self.account()
615
+ account['used'] = self.safe_string(balance, 'reserve')
616
+ account['total'] = self.safe_string(balance, 'balance')
617
+ result[code] = account
618
+ return self.safe_balance(result)
619
+
620
+ async def fetch_balance(self, params={}) -> Balances:
621
+ """
622
+ query for balance and get the amount of funds available for trading or funds locked in orders
623
+ :see: https://btc-alpha.github.io/api-docs/#list-own-wallets
624
+ :param dict [params]: extra parameters specific to the exchange API endpoint
625
+ :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
626
+ """
627
+ await self.load_markets()
628
+ response = await self.privateGetWallets(params)
629
+ return self.parse_balance(response)
630
+
631
+ def parse_order_status(self, status: Str):
632
+ statuses: dict = {
633
+ '1': 'open',
634
+ '2': 'canceled',
635
+ '3': 'closed',
636
+ }
637
+ return self.safe_string(statuses, status, status)
638
+
639
+ def parse_order(self, order: dict, market: Market = None) -> Order:
640
+ #
641
+ # fetchClosedOrders / fetchOrder
642
+ # {
643
+ # "id": "923763073",
644
+ # "date": "1635451090368",
645
+ # "type": "sell",
646
+ # "pair": "XRP_USDT",
647
+ # "price": "1.00000000",
648
+ # "amount": "0.00000000",
649
+ # "status": "3",
650
+ # "amount_filled": "10.00000000",
651
+ # "amount_original": "10.0"
652
+ # "trades": [],
653
+ # }
654
+ #
655
+ # createOrder
656
+ # {
657
+ # "success": True,
658
+ # "date": "1635451754.497541",
659
+ # "type": "sell",
660
+ # "oid": "923776755",
661
+ # "price": "1.0",
662
+ # "amount": "10.0",
663
+ # "amount_filled": "0.0",
664
+ # "amount_original": "10.0",
665
+ # "trades": []
666
+ # }
667
+ #
668
+ marketId = self.safe_string(order, 'pair')
669
+ market = self.safe_market(marketId, market, '_')
670
+ symbol = market['symbol']
671
+ success = self.safe_bool(order, 'success', False)
672
+ timestamp = None
673
+ if success:
674
+ timestamp = self.safe_timestamp(order, 'date')
675
+ else:
676
+ timestamp = self.safe_integer(order, 'date')
677
+ price = self.safe_string(order, 'price')
678
+ remaining = self.safe_string(order, 'amount')
679
+ filled = self.safe_string(order, 'amount_filled')
680
+ amount = self.safe_string(order, 'amount_original')
681
+ status = self.parse_order_status(self.safe_string(order, 'status'))
682
+ id = self.safe_string_n(order, ['oid', 'id', 'order'])
683
+ trades = self.safe_value(order, 'trades')
684
+ side = self.safe_string_2(order, 'my_side', 'type')
685
+ return self.safe_order({
686
+ 'id': id,
687
+ 'clientOrderId': None,
688
+ 'datetime': self.iso8601(timestamp),
689
+ 'timestamp': timestamp,
690
+ 'status': status,
691
+ 'symbol': symbol,
692
+ 'type': 'limit',
693
+ 'timeInForce': None,
694
+ 'postOnly': None,
695
+ 'side': side,
696
+ 'price': price,
697
+ 'stopPrice': None,
698
+ 'triggerPrice': None,
699
+ 'cost': None,
700
+ 'amount': amount,
701
+ 'filled': filled,
702
+ 'remaining': remaining,
703
+ 'trades': trades,
704
+ 'fee': None,
705
+ 'info': order,
706
+ 'lastTradeTimestamp': None,
707
+ 'average': None,
708
+ }, market)
709
+
710
+ async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
711
+ """
712
+ :see: https://btc-alpha.github.io/api-docs/#create-order
713
+ create a trade order
714
+ :param str symbol: unified symbol of the market to create an order in
715
+ :param str type: 'limit'
716
+ :param str side: 'buy' or 'sell'
717
+ :param float amount: how much of currency you want to trade in units of base currency
718
+ :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
719
+ :param dict [params]: extra parameters specific to the exchange API endpoint
720
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
721
+ """
722
+ if type == 'market':
723
+ raise InvalidOrder(self.id + ' only limits orders are supported')
724
+ await self.load_markets()
725
+ market = self.market(symbol)
726
+ request: dict = {
727
+ 'pair': market['id'],
728
+ 'type': side,
729
+ 'amount': amount,
730
+ 'price': self.price_to_precision(symbol, price),
731
+ }
732
+ response = await self.privatePostOrder(self.extend(request, params))
733
+ if not response['success']:
734
+ raise InvalidOrder(self.id + ' ' + self.json(response))
735
+ order = self.parse_order(response, market)
736
+ orderAmount = str(order['amount'])
737
+ amount = order['amount'] if Precise.string_gt(orderAmount, '0') else amount
738
+ order['amount'] = self.parse_number(amount)
739
+ return order
740
+
741
+ async def cancel_order(self, id: str, symbol: Str = None, params={}):
742
+ """
743
+ :see: https://btc-alpha.github.io/api-docs/#cancel-order
744
+ cancels an open order
745
+ :param str id: order id
746
+ :param str symbol: unified symbol of the market the order was made in
747
+ :param dict [params]: extra parameters specific to the exchange API endpoint
748
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
749
+ """
750
+ request: dict = {
751
+ 'order': id,
752
+ }
753
+ response = await self.privatePostOrderCancel(self.extend(request, params))
754
+ #
755
+ # {
756
+ # "order": 63568
757
+ # }
758
+ #
759
+ return self.parse_order(response)
760
+
761
+ async def fetch_order(self, id: str, symbol: Str = None, params={}):
762
+ """
763
+ :see: https://btc-alpha.github.io/api-docs/#retrieve-single-order
764
+ fetches information on an order made by the user
765
+ :param str symbol: not used by btcalpha fetchOrder
766
+ :param dict [params]: extra parameters specific to the exchange API endpoint
767
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
768
+ """
769
+ await self.load_markets()
770
+ request: dict = {
771
+ 'id': id,
772
+ }
773
+ order = await self.privateGetOrderId(self.extend(request, params))
774
+ return self.parse_order(order)
775
+
776
+ async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
777
+ """
778
+ :see: https://btc-alpha.github.io/api-docs/#list-own-orders
779
+ fetches information on multiple orders made by the user
780
+ :param str symbol: unified market symbol of the market orders were made in
781
+ :param int [since]: the earliest time in ms to fetch orders for
782
+ :param int [limit]: the maximum number of order structures to retrieve
783
+ :param dict [params]: extra parameters specific to the exchange API endpoint
784
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
785
+ """
786
+ await self.load_markets()
787
+ request: dict = {}
788
+ market = None
789
+ if symbol is not None:
790
+ market = self.market(symbol)
791
+ request['pair'] = market['id']
792
+ if limit is not None:
793
+ request['limit'] = limit
794
+ orders = await self.privateGetOrdersOwn(self.extend(request, params))
795
+ return self.parse_orders(orders, market, since, limit)
796
+
797
+ async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
798
+ """
799
+ fetch all unfilled currently open orders
800
+ :see: https://btc-alpha.github.io/api-docs/#list-own-orders
801
+ :param str symbol: unified market symbol
802
+ :param int [since]: the earliest time in ms to fetch open orders for
803
+ :param int [limit]: the maximum number of open orders structures to retrieve
804
+ :param dict [params]: extra parameters specific to the exchange API endpoint
805
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
806
+ """
807
+ request: dict = {
808
+ 'status': '1',
809
+ }
810
+ return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
811
+
812
+ async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
813
+ """
814
+ fetches information on multiple closed orders made by the user
815
+ :see: https://btc-alpha.github.io/api-docs/#list-own-orders
816
+ :param str symbol: unified market symbol of the market orders were made in
817
+ :param int [since]: the earliest time in ms to fetch orders for
818
+ :param int [limit]: the maximum number of order structures to retrieve
819
+ :param dict [params]: extra parameters specific to the exchange API endpoint
820
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
821
+ """
822
+ request: dict = {
823
+ 'status': '3',
824
+ }
825
+ return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
826
+
827
+ async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
828
+ """
829
+ fetch all trades made by the user
830
+ :see: https://btc-alpha.github.io/api-docs/#list-own-exchanges
831
+ :param str symbol: unified market symbol
832
+ :param int [since]: the earliest time in ms to fetch trades for
833
+ :param int [limit]: the maximum number of trades structures to retrieve
834
+ :param dict [params]: extra parameters specific to the exchange API endpoint
835
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
836
+ """
837
+ await self.load_markets()
838
+ request: dict = {}
839
+ if symbol is not None:
840
+ market = self.market(symbol)
841
+ request['pair'] = market['id']
842
+ if limit is not None:
843
+ request['limit'] = limit
844
+ trades = await self.privateGetExchangesOwn(self.extend(request, params))
845
+ return self.parse_trades(trades, None, since, limit)
846
+
847
+ def nonce(self):
848
+ return self.milliseconds()
849
+
850
+ def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
851
+ query = self.urlencode(self.keysort(self.omit(params, self.extract_params(path))))
852
+ url = self.urls['api']['rest'] + '/'
853
+ if path != 'charts/{pair}/{type}/chart/':
854
+ url += 'v1/'
855
+ url += self.implode_params(path, params)
856
+ headers = {'Accept': 'application/json'}
857
+ if api == 'public':
858
+ if len(query):
859
+ url += '?' + query
860
+ else:
861
+ self.check_required_credentials()
862
+ payload = self.apiKey
863
+ if method == 'POST':
864
+ headers['Content-Type'] = 'application/x-www-form-urlencoded'
865
+ body = query
866
+ payload += body
867
+ elif len(query):
868
+ url += '?' + query
869
+ headers['X-KEY'] = self.apiKey
870
+ headers['X-SIGN'] = self.hmac(self.encode(payload), self.encode(self.secret), hashlib.sha256)
871
+ headers['X-NONCE'] = str(self.nonce())
872
+ return {'url': url, 'method': method, 'body': body, 'headers': headers}
873
+
874
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
875
+ if response is None:
876
+ return None # fallback to default error handler
877
+ #
878
+ # {"date":1570599531.4814300537,"error":"Out of balance -9.99243661 BTC"}
879
+ #
880
+ error = self.safe_string(response, 'error')
881
+ feedback = self.id + ' ' + body
882
+ if error is not None:
883
+ self.throw_exactly_matched_exception(self.exceptions['exact'], error, feedback)
884
+ self.throw_broadly_matched_exception(self.exceptions['broad'], error, feedback)
885
+ if code == 401 or code == 403:
886
+ raise AuthenticationError(feedback)
887
+ elif code == 429:
888
+ raise DDoSProtection(feedback)
889
+ if code < 400:
890
+ return None
891
+ raise ExchangeError(feedback)