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,903 @@
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.oceanex import ImplicitAPI
8
+ from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
9
+ from typing import List
10
+ from ccxt.base.errors import ExchangeError
11
+ from ccxt.base.errors import AuthenticationError
12
+ from ccxt.base.errors import PermissionDenied
13
+ from ccxt.base.errors import ArgumentsRequired
14
+ from ccxt.base.errors import BadRequest
15
+ from ccxt.base.errors import InsufficientFunds
16
+ from ccxt.base.errors import InvalidOrder
17
+ from ccxt.base.errors import OrderNotFound
18
+ from ccxt.base.decimal_to_precision import TICK_SIZE
19
+
20
+
21
+ class oceanex(Exchange, ImplicitAPI):
22
+
23
+ def describe(self):
24
+ return self.deep_extend(super(oceanex, self).describe(), {
25
+ 'id': 'oceanex',
26
+ 'name': 'OceanEx',
27
+ 'countries': ['BS'], # Bahamas
28
+ 'version': 'v1',
29
+ 'rateLimit': 3000,
30
+ 'urls': {
31
+ 'logo': 'https://user-images.githubusercontent.com/1294454/58385970-794e2d80-8001-11e9-889c-0567cd79b78e.jpg',
32
+ 'api': {
33
+ 'rest': 'https://api.oceanex.pro',
34
+ },
35
+ 'www': 'https://www.oceanex.pro.com',
36
+ 'doc': 'https://api.oceanex.pro/doc/v1',
37
+ 'referral': 'https://oceanex.pro/signup?referral=VE24QX',
38
+ },
39
+ 'has': {
40
+ 'CORS': None,
41
+ 'spot': True,
42
+ 'margin': False,
43
+ 'swap': None, # has but unimplemented
44
+ 'future': None,
45
+ 'option': None,
46
+ 'cancelAllOrders': True,
47
+ 'cancelOrder': True,
48
+ 'cancelOrders': True,
49
+ 'createMarketOrder': True,
50
+ 'createOrder': True,
51
+ 'fetchBalance': True,
52
+ 'fetchBorrowRateHistories': False,
53
+ 'fetchBorrowRateHistory': False,
54
+ 'fetchClosedOrders': True,
55
+ 'fetchCrossBorrowRate': False,
56
+ 'fetchCrossBorrowRates': False,
57
+ 'fetchDepositAddress': False,
58
+ 'fetchDepositAddresses': False,
59
+ 'fetchDepositAddressesByNetwork': False,
60
+ 'fetchIsolatedBorrowRate': False,
61
+ 'fetchIsolatedBorrowRates': False,
62
+ 'fetchMarkets': True,
63
+ 'fetchOHLCV': True,
64
+ 'fetchOpenOrders': True,
65
+ 'fetchOrder': True,
66
+ 'fetchOrderBook': True,
67
+ 'fetchOrderBooks': True,
68
+ 'fetchOrders': True,
69
+ 'fetchTicker': True,
70
+ 'fetchTickers': True,
71
+ 'fetchTime': True,
72
+ 'fetchTrades': True,
73
+ 'fetchTradingFee': False,
74
+ 'fetchTradingFees': True,
75
+ 'fetchTransactionFees': None,
76
+ },
77
+ 'timeframes': {
78
+ '1m': '1',
79
+ '5m': '5',
80
+ '15m': '15',
81
+ '30m': '30',
82
+ '1h': '60',
83
+ '2h': '120',
84
+ '4h': '240',
85
+ '6h': '360',
86
+ '12h': '720',
87
+ '1d': '1440',
88
+ '3d': '4320',
89
+ '1w': '10080',
90
+ },
91
+ 'api': {
92
+ 'public': {
93
+ 'get': [
94
+ 'markets',
95
+ 'tickers/{pair}',
96
+ 'tickers_multi',
97
+ 'order_book',
98
+ 'order_book/multi',
99
+ 'fees/trading',
100
+ 'trades',
101
+ 'timestamp',
102
+ ],
103
+ 'post': [
104
+ 'k',
105
+ ],
106
+ },
107
+ 'private': {
108
+ 'get': [
109
+ 'key',
110
+ 'members/me',
111
+ 'orders',
112
+ 'orders/filter',
113
+ ],
114
+ 'post': [
115
+ 'orders',
116
+ 'orders/multi',
117
+ 'order/delete',
118
+ 'order/delete/multi',
119
+ 'orders/clear',
120
+ ],
121
+ },
122
+ },
123
+ 'fees': {
124
+ 'trading': {
125
+ 'tierBased': False,
126
+ 'percentage': True,
127
+ 'maker': self.parse_number('0.001'),
128
+ 'taker': self.parse_number('0.001'),
129
+ },
130
+ },
131
+ 'commonCurrencies': {
132
+ 'PLA': 'Plair',
133
+ },
134
+ 'precisionMode': TICK_SIZE,
135
+ 'exceptions': {
136
+ 'codes': {
137
+ '-1': BadRequest,
138
+ '-2': BadRequest,
139
+ '1001': BadRequest,
140
+ '1004': ArgumentsRequired,
141
+ '1006': AuthenticationError,
142
+ '1008': AuthenticationError,
143
+ '1010': AuthenticationError,
144
+ '1011': PermissionDenied,
145
+ '2001': AuthenticationError,
146
+ '2002': InvalidOrder,
147
+ '2004': OrderNotFound,
148
+ '9003': PermissionDenied,
149
+ },
150
+ 'exact': {
151
+ 'market does not have a valid value': BadRequest,
152
+ 'side does not have a valid value': BadRequest,
153
+ 'Account::AccountError: Cannot lock funds': InsufficientFunds,
154
+ 'The account does not exist': AuthenticationError,
155
+ },
156
+ },
157
+ })
158
+
159
+ async def fetch_markets(self, params={}) -> List[Market]:
160
+ """
161
+ retrieves data on all markets for oceanex
162
+ :see: https://api.oceanex.pro/doc/v1/#markets-post
163
+ :param dict [params]: extra parameters specific to the exchange API endpoint
164
+ :returns dict[]: an array of objects representing market data
165
+ """
166
+ request: dict = {'show_details': True}
167
+ response = await self.publicGetMarkets(self.extend(request, params))
168
+ #
169
+ # {
170
+ # "id": "xtzusdt",
171
+ # "name": "XTZ/USDT",
172
+ # "ask_precision": "8",
173
+ # "bid_precision": "8",
174
+ # "enabled": True,
175
+ # "price_precision": "4",
176
+ # "amount_precision": "3",
177
+ # "usd_precision": "4",
178
+ # "minimum_trading_amount": "1.0"
179
+ # },
180
+ #
181
+ markets = self.safe_value(response, 'data', [])
182
+ return self.parse_markets(markets)
183
+
184
+ def parse_market(self, market: dict) -> Market:
185
+ id = self.safe_value(market, 'id')
186
+ name = self.safe_value(market, 'name')
187
+ baseId, quoteId = name.split('/')
188
+ base = self.safe_currency_code(baseId)
189
+ quote = self.safe_currency_code(quoteId)
190
+ baseId = baseId.lower()
191
+ quoteId = quoteId.lower()
192
+ symbol = base + '/' + quote
193
+ return {
194
+ 'id': id,
195
+ 'symbol': symbol,
196
+ 'base': base,
197
+ 'quote': quote,
198
+ 'settle': None,
199
+ 'baseId': baseId,
200
+ 'quoteId': quoteId,
201
+ 'settleId': None,
202
+ 'type': 'spot',
203
+ 'spot': True,
204
+ 'margin': False,
205
+ 'swap': False,
206
+ 'future': False,
207
+ 'option': False,
208
+ 'active': None,
209
+ 'contract': False,
210
+ 'linear': None,
211
+ 'inverse': None,
212
+ 'contractSize': None,
213
+ 'expiry': None,
214
+ 'expiryDatetime': None,
215
+ 'strike': None,
216
+ 'optionType': None,
217
+ 'precision': {
218
+ 'amount': self.parse_number(self.parse_precision(self.safe_string(market, 'amount_precision'))),
219
+ 'price': self.parse_number(self.parse_precision(self.safe_string(market, 'price_precision'))),
220
+ },
221
+ 'limits': {
222
+ 'leverage': {
223
+ 'min': None,
224
+ 'max': None,
225
+ },
226
+ 'amount': {
227
+ 'min': None,
228
+ 'max': None,
229
+ },
230
+ 'price': {
231
+ 'min': None,
232
+ 'max': None,
233
+ },
234
+ 'cost': {
235
+ 'min': self.safe_number(market, 'minimum_trading_amount'),
236
+ 'max': None,
237
+ },
238
+ },
239
+ 'created': None,
240
+ 'info': market,
241
+ }
242
+
243
+ async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
244
+ """
245
+ fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
246
+ :see: https://api.oceanex.pro/doc/v1/#ticker-post
247
+ :param str symbol: unified symbol of the market to fetch the ticker for
248
+ :param dict [params]: extra parameters specific to the exchange API endpoint
249
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
250
+ """
251
+ await self.load_markets()
252
+ market = self.market(symbol)
253
+ request: dict = {
254
+ 'pair': market['id'],
255
+ }
256
+ response = await self.publicGetTickersPair(self.extend(request, params))
257
+ #
258
+ # {
259
+ # "code":0,
260
+ # "message":"Operation successful",
261
+ # "data": {
262
+ # "at":1559431729,
263
+ # "ticker": {
264
+ # "buy":"0.0065",
265
+ # "sell":"0.00677",
266
+ # "low":"0.00677",
267
+ # "high":"0.00677",
268
+ # "last":"0.00677",
269
+ # "vol":"2000.0"
270
+ # }
271
+ # }
272
+ # }
273
+ #
274
+ data = self.safe_dict(response, 'data', {})
275
+ return self.parse_ticker(data, market)
276
+
277
+ async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
278
+ """
279
+ fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
280
+ :see: https://api.oceanex.pro/doc/v1/#multiple-tickers-post
281
+ :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
282
+ :param dict [params]: extra parameters specific to the exchange API endpoint
283
+ :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
284
+ """
285
+ await self.load_markets()
286
+ symbols = self.market_symbols(symbols)
287
+ if symbols is None:
288
+ symbols = self.symbols
289
+ marketIds = self.market_ids(symbols)
290
+ request: dict = {'markets': marketIds}
291
+ response = await self.publicGetTickersMulti(self.extend(request, params))
292
+ #
293
+ # {
294
+ # "code":0,
295
+ # "message":"Operation successful",
296
+ # "data": {
297
+ # "at":1559431729,
298
+ # "ticker": {
299
+ # "buy":"0.0065",
300
+ # "sell":"0.00677",
301
+ # "low":"0.00677",
302
+ # "high":"0.00677",
303
+ # "last":"0.00677",
304
+ # "vol":"2000.0"
305
+ # }
306
+ # }
307
+ # }
308
+ #
309
+ data = self.safe_value(response, 'data', [])
310
+ result: dict = {}
311
+ for i in range(0, len(data)):
312
+ ticker = data[i]
313
+ marketId = self.safe_string(ticker, 'market')
314
+ market = self.safe_market(marketId)
315
+ symbol = market['symbol']
316
+ result[symbol] = self.parse_ticker(ticker, market)
317
+ return self.filter_by_array_tickers(result, 'symbol', symbols)
318
+
319
+ def parse_ticker(self, data, market: Market = None):
320
+ #
321
+ # {
322
+ # "at":1559431729,
323
+ # "ticker": {
324
+ # "buy":"0.0065",
325
+ # "sell":"0.00677",
326
+ # "low":"0.00677",
327
+ # "high":"0.00677",
328
+ # "last":"0.00677",
329
+ # "vol":"2000.0"
330
+ # }
331
+ # }
332
+ #
333
+ ticker = self.safe_value(data, 'ticker', {})
334
+ timestamp = self.safe_timestamp(data, 'at')
335
+ symbol = self.safe_symbol(None, market)
336
+ return self.safe_ticker({
337
+ 'symbol': symbol,
338
+ 'timestamp': timestamp,
339
+ 'datetime': self.iso8601(timestamp),
340
+ 'high': self.safe_string(ticker, 'high'),
341
+ 'low': self.safe_string(ticker, 'low'),
342
+ 'bid': self.safe_string(ticker, 'buy'),
343
+ 'bidVolume': None,
344
+ 'ask': self.safe_string(ticker, 'sell'),
345
+ 'askVolume': None,
346
+ 'vwap': None,
347
+ 'open': None,
348
+ 'close': self.safe_string(ticker, 'last'),
349
+ 'last': self.safe_string(ticker, 'last'),
350
+ 'previousClose': None,
351
+ 'change': None,
352
+ 'percentage': None,
353
+ 'average': None,
354
+ 'baseVolume': self.safe_string(ticker, 'volume'),
355
+ 'quoteVolume': None,
356
+ 'info': ticker,
357
+ }, market)
358
+
359
+ async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
360
+ """
361
+ fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
362
+ :see: https://api.oceanex.pro/doc/v1/#order-book-post
363
+ :param str symbol: unified symbol of the market to fetch the order book for
364
+ :param int [limit]: the maximum amount of order book entries to return
365
+ :param dict [params]: extra parameters specific to the exchange API endpoint
366
+ :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
367
+ """
368
+ await self.load_markets()
369
+ market = self.market(symbol)
370
+ request: dict = {
371
+ 'market': market['id'],
372
+ }
373
+ if limit is not None:
374
+ request['limit'] = limit
375
+ response = await self.publicGetOrderBook(self.extend(request, params))
376
+ #
377
+ # {
378
+ # "code":0,
379
+ # "message":"Operation successful",
380
+ # "data": {
381
+ # "timestamp":1559433057,
382
+ # "asks": [
383
+ # ["100.0","20.0"],
384
+ # ["4.74","2000.0"],
385
+ # ["1.74","4000.0"],
386
+ # ],
387
+ # "bids":[
388
+ # ["0.0065","5482873.4"],
389
+ # ["0.00649","4781956.2"],
390
+ # ["0.00648","2876006.8"],
391
+ # ],
392
+ # }
393
+ # }
394
+ #
395
+ orderbook = self.safe_value(response, 'data', {})
396
+ timestamp = self.safe_timestamp(orderbook, 'timestamp')
397
+ return self.parse_order_book(orderbook, symbol, timestamp)
398
+
399
+ async def fetch_order_books(self, symbols: Strings = None, limit: Int = None, params={}):
400
+ """
401
+ fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data for multiple markets
402
+ :see: https://api.oceanex.pro/doc/v1/#multiple-order-books-post
403
+ :param str[]|None symbols: list of unified market symbols, all symbols fetched if None, default is None
404
+ :param int [limit]: max number of entries per orderbook to return, default is None
405
+ :param dict [params]: extra parameters specific to the exchange API endpoint
406
+ :returns dict: a dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbol
407
+ """
408
+ await self.load_markets()
409
+ if symbols is None:
410
+ symbols = self.symbols
411
+ marketIds = self.market_ids(symbols)
412
+ request: dict = {
413
+ 'markets': marketIds,
414
+ }
415
+ if limit is not None:
416
+ request['limit'] = limit
417
+ response = await self.publicGetOrderBookMulti(self.extend(request, params))
418
+ #
419
+ # {
420
+ # "code":0,
421
+ # "message":"Operation successful",
422
+ # "data": [
423
+ # {
424
+ # "timestamp":1559433057,
425
+ # "market": "bagvet",
426
+ # "asks": [
427
+ # ["100.0","20.0"],
428
+ # ["4.74","2000.0"],
429
+ # ["1.74","4000.0"],
430
+ # ],
431
+ # "bids":[
432
+ # ["0.0065","5482873.4"],
433
+ # ["0.00649","4781956.2"],
434
+ # ["0.00648","2876006.8"],
435
+ # ],
436
+ # },
437
+ # ...,
438
+ # ],
439
+ # }
440
+ #
441
+ data = self.safe_value(response, 'data', [])
442
+ result: dict = {}
443
+ for i in range(0, len(data)):
444
+ orderbook = data[i]
445
+ marketId = self.safe_string(orderbook, 'market')
446
+ symbol = self.safe_symbol(marketId)
447
+ timestamp = self.safe_timestamp(orderbook, 'timestamp')
448
+ result[symbol] = self.parse_order_book(orderbook, symbol, timestamp)
449
+ return result
450
+
451
+ async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
452
+ """
453
+ get the list of most recent trades for a particular symbol
454
+ :see: https://api.oceanex.pro/doc/v1/#trades-post
455
+ :param str symbol: unified symbol of the market to fetch trades for
456
+ :param int [since]: timestamp in ms of the earliest trade to fetch
457
+ :param int [limit]: the maximum amount of trades to fetch
458
+ :param dict [params]: extra parameters specific to the exchange API endpoint
459
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
460
+ """
461
+ await self.load_markets()
462
+ market = self.market(symbol)
463
+ request: dict = {
464
+ 'market': market['id'],
465
+ }
466
+ if limit is not None:
467
+ request['limit'] = min(limit, 1000)
468
+ response = await self.publicGetTrades(self.extend(request, params))
469
+ #
470
+ # {
471
+ # "code":0,
472
+ # "message":"Operation successful",
473
+ # "data": [
474
+ # {
475
+ # "id":220247666,
476
+ # "price":"3098.62",
477
+ # "volume":"0.00196",
478
+ # "funds":"6.0732952",
479
+ # "market":"ethusdt",
480
+ # "created_at":"2022-04-19T19:03:15Z",
481
+ # "created_on":1650394995,
482
+ # "side":"bid"
483
+ # },
484
+ # ]
485
+ # }
486
+ #
487
+ data = self.safe_list(response, 'data')
488
+ return self.parse_trades(data, market, since, limit)
489
+
490
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
491
+ #
492
+ # fetchTrades(public)
493
+ #
494
+ # {
495
+ # "id":220247666,
496
+ # "price":"3098.62",
497
+ # "volume":"0.00196",
498
+ # "funds":"6.0732952",
499
+ # "market":"ethusdt",
500
+ # "created_at":"2022-04-19T19:03:15Z",
501
+ # "created_on":1650394995,
502
+ # "side":"bid"
503
+ # }
504
+ #
505
+ side = self.safe_value(trade, 'side')
506
+ if side == 'bid':
507
+ side = 'buy'
508
+ elif side == 'ask':
509
+ side = 'sell'
510
+ marketId = self.safe_value(trade, 'market')
511
+ symbol = self.safe_symbol(marketId, market)
512
+ timestamp = self.safe_timestamp(trade, 'created_on')
513
+ if timestamp is None:
514
+ timestamp = self.parse8601(self.safe_string(trade, 'created_at'))
515
+ priceString = self.safe_string(trade, 'price')
516
+ amountString = self.safe_string(trade, 'volume')
517
+ return self.safe_trade({
518
+ 'info': trade,
519
+ 'timestamp': timestamp,
520
+ 'datetime': self.iso8601(timestamp),
521
+ 'symbol': symbol,
522
+ 'id': self.safe_string(trade, 'id'),
523
+ 'order': None,
524
+ 'type': 'limit',
525
+ 'takerOrMaker': None,
526
+ 'side': side,
527
+ 'price': priceString,
528
+ 'amount': amountString,
529
+ 'cost': None,
530
+ 'fee': None,
531
+ }, market)
532
+
533
+ async def fetch_time(self, params={}):
534
+ """
535
+ fetches the current integer timestamp in milliseconds from the exchange server
536
+ :see: https://api.oceanex.pro/doc/v1/#api-server-time-post
537
+ :param dict [params]: extra parameters specific to the exchange API endpoint
538
+ :returns int: the current integer timestamp in milliseconds from the exchange server
539
+ """
540
+ response = await self.publicGetTimestamp(params)
541
+ #
542
+ # {"code":0,"message":"Operation successful","data":1559433420}
543
+ #
544
+ return self.safe_timestamp(response, 'data')
545
+
546
+ async def fetch_trading_fees(self, params={}) -> TradingFees:
547
+ """
548
+ fetch the trading fees for multiple markets
549
+ :see: https://api.oceanex.pro/doc/v1/#trading-fees-post
550
+ :param dict [params]: extra parameters specific to the exchange API endpoint
551
+ :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
552
+ """
553
+ response = await self.publicGetFeesTrading(params)
554
+ data = self.safe_value(response, 'data', [])
555
+ result: dict = {}
556
+ for i in range(0, len(data)):
557
+ group = data[i]
558
+ maker = self.safe_value(group, 'ask_fee', {})
559
+ taker = self.safe_value(group, 'bid_fee', {})
560
+ marketId = self.safe_string(group, 'market')
561
+ symbol = self.safe_symbol(marketId)
562
+ result[symbol] = {
563
+ 'info': group,
564
+ 'symbol': symbol,
565
+ 'maker': self.safe_number(maker, 'value'),
566
+ 'taker': self.safe_number(taker, 'value'),
567
+ 'percentage': True,
568
+ }
569
+ return result
570
+
571
+ async def fetch_key(self, params={}):
572
+ response = await self.privateGetKey(params)
573
+ return self.safe_value(response, 'data')
574
+
575
+ def parse_balance(self, response) -> Balances:
576
+ data = self.safe_value(response, 'data')
577
+ balances = self.safe_value(data, 'accounts', [])
578
+ result: dict = {'info': response}
579
+ for i in range(0, len(balances)):
580
+ balance = balances[i]
581
+ currencyId = self.safe_value(balance, 'currency')
582
+ code = self.safe_currency_code(currencyId)
583
+ account = self.account()
584
+ account['free'] = self.safe_string(balance, 'balance')
585
+ account['used'] = self.safe_string(balance, 'locked')
586
+ result[code] = account
587
+ return self.safe_balance(result)
588
+
589
+ async def fetch_balance(self, params={}) -> Balances:
590
+ """
591
+ query for balance and get the amount of funds available for trading or funds locked in orders
592
+ :see: https://api.oceanex.pro/doc/v1/#account-info-post
593
+ :param dict [params]: extra parameters specific to the exchange API endpoint
594
+ :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
595
+ """
596
+ await self.load_markets()
597
+ response = await self.privateGetMembersMe(params)
598
+ return self.parse_balance(response)
599
+
600
+ async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
601
+ """
602
+ create a trade order
603
+ :see: https://api.oceanex.pro/doc/v1/#new-order-post
604
+ :param str symbol: unified symbol of the market to create an order in
605
+ :param str type: 'market' or 'limit'
606
+ :param str side: 'buy' or 'sell'
607
+ :param float amount: how much of currency you want to trade in units of base currency
608
+ :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
609
+ :param dict [params]: extra parameters specific to the exchange API endpoint
610
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
611
+ """
612
+ await self.load_markets()
613
+ market = self.market(symbol)
614
+ request: dict = {
615
+ 'market': market['id'],
616
+ 'side': side,
617
+ 'ord_type': type,
618
+ 'volume': self.amount_to_precision(symbol, amount),
619
+ }
620
+ if type == 'limit':
621
+ request['price'] = self.price_to_precision(symbol, price)
622
+ response = await self.privatePostOrders(self.extend(request, params))
623
+ data = self.safe_dict(response, 'data')
624
+ return self.parse_order(data, market)
625
+
626
+ async def fetch_order(self, id: str, symbol: Str = None, params={}):
627
+ """
628
+ fetches information on an order made by the user
629
+ :see: https://api.oceanex.pro/doc/v1/#order-status-get
630
+ :param str symbol: unified symbol of the market the order was made in
631
+ :param dict [params]: extra parameters specific to the exchange API endpoint
632
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
633
+ """
634
+ await self.load_markets()
635
+ market = None
636
+ if symbol is not None:
637
+ market = self.market(symbol)
638
+ ids = [id]
639
+ request: dict = {'ids': ids}
640
+ response = await self.privateGetOrders(self.extend(request, params))
641
+ data = self.safe_value(response, 'data')
642
+ dataLength = len(data)
643
+ if data is None:
644
+ raise OrderNotFound(self.id + ' could not found matching order')
645
+ if isinstance(id, list):
646
+ orders = self.parse_orders(data, market)
647
+ return orders[0]
648
+ if dataLength == 0:
649
+ raise OrderNotFound(self.id + ' could not found matching order')
650
+ return self.parse_order(data[0], market)
651
+
652
+ async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
653
+ """
654
+ fetch all unfilled currently open orders
655
+ :see: https://api.oceanex.pro/doc/v1/#order-status-get
656
+ :param str symbol: unified market symbol
657
+ :param int [since]: the earliest time in ms to fetch open orders for
658
+ :param int [limit]: the maximum number of open orders structures to retrieve
659
+ :param dict [params]: extra parameters specific to the exchange API endpoint
660
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
661
+ """
662
+ request: dict = {
663
+ 'states': ['wait'],
664
+ }
665
+ return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
666
+
667
+ async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
668
+ """
669
+ fetches information on multiple closed orders made by the user
670
+ :see: https://api.oceanex.pro/doc/v1/#order-status-get
671
+ :param str symbol: unified market symbol of the market orders were made in
672
+ :param int [since]: the earliest time in ms to fetch orders for
673
+ :param int [limit]: the maximum number of order structures to retrieve
674
+ :param dict [params]: extra parameters specific to the exchange API endpoint
675
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
676
+ """
677
+ request: dict = {
678
+ 'states': ['done', 'cancel'],
679
+ }
680
+ return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
681
+
682
+ async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
683
+ """
684
+ fetches information on multiple orders made by the user
685
+ :see: https://api.oceanex.pro/doc/v1/#order-status-with-filters-post
686
+ :param str symbol: unified market symbol of the market orders were made in
687
+ :param int [since]: the earliest time in ms to fetch orders for
688
+ :param int [limit]: the maximum number of order structures to retrieve
689
+ :param dict [params]: extra parameters specific to the exchange API endpoint
690
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
691
+ """
692
+ if symbol is None:
693
+ raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
694
+ await self.load_markets()
695
+ market = self.market(symbol)
696
+ states = self.safe_value(params, 'states', ['wait', 'done', 'cancel'])
697
+ query = self.omit(params, 'states')
698
+ request: dict = {
699
+ 'market': market['id'],
700
+ 'states': states,
701
+ 'need_price': 'True',
702
+ }
703
+ if limit is not None:
704
+ request['limit'] = limit
705
+ response = await self.privateGetOrdersFilter(self.extend(request, query))
706
+ data = self.safe_value(response, 'data', [])
707
+ result = []
708
+ for i in range(0, len(data)):
709
+ orders = self.safe_value(data[i], 'orders', [])
710
+ status = self.parse_order_status(self.safe_value(data[i], 'state'))
711
+ parsedOrders = self.parse_orders(orders, market, since, limit, {'status': status})
712
+ result = self.array_concat(result, parsedOrders)
713
+ return result
714
+
715
+ def parse_ohlcv(self, ohlcv, market: Market = None) -> list:
716
+ # [
717
+ # 1559232000,
718
+ # 8889.22,
719
+ # 9028.52,
720
+ # 8889.22,
721
+ # 9028.52
722
+ # 0.3121
723
+ # ]
724
+ return [
725
+ self.safe_timestamp(ohlcv, 0),
726
+ self.safe_number(ohlcv, 1),
727
+ self.safe_number(ohlcv, 2),
728
+ self.safe_number(ohlcv, 3),
729
+ self.safe_number(ohlcv, 4),
730
+ self.safe_number(ohlcv, 5),
731
+ ]
732
+
733
+ async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
734
+ """
735
+ fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
736
+ :see: https://api.oceanex.pro/doc/v1/#k-line-post
737
+ :param str symbol: unified symbol of the market to fetch OHLCV data for
738
+ :param str timeframe: the length of time each candle represents
739
+ :param int [since]: timestamp in ms of the earliest candle to fetch
740
+ :param int [limit]: the maximum amount of candles to fetch
741
+ :param dict [params]: extra parameters specific to the exchange API endpoint
742
+ :returns int[][]: A list of candles ordered, open, high, low, close, volume
743
+ """
744
+ await self.load_markets()
745
+ market = self.market(symbol)
746
+ request: dict = {
747
+ 'market': market['id'],
748
+ 'period': self.safe_string(self.timeframes, timeframe, timeframe),
749
+ }
750
+ if since is not None:
751
+ request['timestamp'] = since
752
+ if limit is not None:
753
+ request['limit'] = min(limit, 10000)
754
+ response = await self.publicPostK(self.extend(request, params))
755
+ ohlcvs = self.safe_list(response, 'data', [])
756
+ return self.parse_ohlcvs(ohlcvs, market, timeframe, since, limit)
757
+
758
+ def parse_order(self, order: dict, market: Market = None) -> Order:
759
+ #
760
+ # {
761
+ # "created_at": "2019-01-18T00:38:18Z",
762
+ # "trades_count": 0,
763
+ # "remaining_volume": "0.2",
764
+ # "price": "1001.0",
765
+ # "created_on": "1547771898",
766
+ # "side": "buy",
767
+ # "volume": "0.2",
768
+ # "state": "wait",
769
+ # "ord_type": "limit",
770
+ # "avg_price": "0.0",
771
+ # "executed_volume": "0.0",
772
+ # "id": 473797,
773
+ # "market": "veteth"
774
+ # }
775
+ #
776
+ status = self.parse_order_status(self.safe_value(order, 'state'))
777
+ marketId = self.safe_string_2(order, 'market', 'market_id')
778
+ symbol = self.safe_symbol(marketId, market)
779
+ timestamp = self.safe_timestamp(order, 'created_on')
780
+ if timestamp is None:
781
+ timestamp = self.parse8601(self.safe_string(order, 'created_at'))
782
+ price = self.safe_string(order, 'price')
783
+ average = self.safe_string(order, 'avg_price')
784
+ amount = self.safe_string(order, 'volume')
785
+ remaining = self.safe_string(order, 'remaining_volume')
786
+ filled = self.safe_string(order, 'executed_volume')
787
+ return self.safe_order({
788
+ 'info': order,
789
+ 'id': self.safe_string(order, 'id'),
790
+ 'clientOrderId': None,
791
+ 'timestamp': timestamp,
792
+ 'datetime': self.iso8601(timestamp),
793
+ 'lastTradeTimestamp': None,
794
+ 'symbol': symbol,
795
+ 'type': self.safe_value(order, 'ord_type'),
796
+ 'timeInForce': None,
797
+ 'postOnly': None,
798
+ 'side': self.safe_value(order, 'side'),
799
+ 'price': price,
800
+ 'stopPrice': None,
801
+ 'triggerPrice': None,
802
+ 'average': average,
803
+ 'amount': amount,
804
+ 'remaining': remaining,
805
+ 'filled': filled,
806
+ 'status': status,
807
+ 'cost': None,
808
+ 'trades': None,
809
+ 'fee': None,
810
+ }, market)
811
+
812
+ def parse_order_status(self, status: Str):
813
+ statuses: dict = {
814
+ 'wait': 'open',
815
+ 'done': 'closed',
816
+ 'cancel': 'canceled',
817
+ }
818
+ return self.safe_string(statuses, status, status)
819
+
820
+ async def cancel_order(self, id: str, symbol: Str = None, params={}):
821
+ """
822
+ cancels an open order
823
+ :see: https://api.oceanex.pro/doc/v1/#cancel-order-post
824
+ :param str id: order id
825
+ :param str symbol: not used by oceanex cancelOrder()
826
+ :param dict [params]: extra parameters specific to the exchange API endpoint
827
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
828
+ """
829
+ await self.load_markets()
830
+ response = await self.privatePostOrderDelete(self.extend({'id': id}, params))
831
+ data = self.safe_dict(response, 'data')
832
+ return self.parse_order(data)
833
+
834
+ async def cancel_orders(self, ids, symbol: Str = None, params={}):
835
+ """
836
+ cancel multiple orders
837
+ :see: https://api.oceanex.pro/doc/v1/#cancel-multiple-orders-post
838
+ :param str[] ids: order ids
839
+ :param str symbol: not used by oceanex cancelOrders()
840
+ :param dict [params]: extra parameters specific to the exchange API endpoint
841
+ :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
842
+ """
843
+ await self.load_markets()
844
+ response = await self.privatePostOrderDeleteMulti(self.extend({'ids': ids}, params))
845
+ data = self.safe_list(response, 'data')
846
+ return self.parse_orders(data)
847
+
848
+ async def cancel_all_orders(self, symbol: Str = None, params={}):
849
+ """
850
+ cancel all open orders
851
+ :see: https://api.oceanex.pro/doc/v1/#cancel-all-orders-post
852
+ :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
853
+ :param dict [params]: extra parameters specific to the exchange API endpoint
854
+ :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
855
+ """
856
+ await self.load_markets()
857
+ response = await self.privatePostOrdersClear(params)
858
+ data = self.safe_list(response, 'data')
859
+ return self.parse_orders(data)
860
+
861
+ def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
862
+ url = self.urls['api']['rest'] + '/' + self.version + '/' + self.implode_params(path, params)
863
+ query = self.omit(params, self.extract_params(path))
864
+ if api == 'public':
865
+ if path == 'tickers_multi' or path == 'order_book/multi':
866
+ request = '?'
867
+ markets = self.safe_value(params, 'markets')
868
+ for i in range(0, len(markets)):
869
+ request += 'markets[]=' + markets[i] + '&'
870
+ limit = self.safe_value(params, 'limit')
871
+ if limit is not None:
872
+ request += 'limit=' + limit
873
+ url += request
874
+ elif query:
875
+ url += '?' + self.urlencode(query)
876
+ elif api == 'private':
877
+ self.check_required_credentials()
878
+ request: dict = {
879
+ 'uid': self.apiKey,
880
+ 'data': query,
881
+ }
882
+ # to set the private key:
883
+ # fs = require('fs')
884
+ # exchange.secret = fs.readFileSync('oceanex.pem', 'utf8')
885
+ jwt_token = self.jwt(request, self.encode(self.secret), 'sha256', True)
886
+ url += '?user_jwt=' + jwt_token
887
+ headers = {'Content-Type': 'application/json'}
888
+ return {'url': url, 'method': method, 'body': body, 'headers': headers}
889
+
890
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
891
+ #
892
+ # {"code":1011,"message":"This IP 'x.x.x.x' is not allowed","data":{}}
893
+ #
894
+ if response is None:
895
+ return None
896
+ errorCode = self.safe_string(response, 'code')
897
+ message = self.safe_string(response, 'message')
898
+ if (errorCode is not None) and (errorCode != '0'):
899
+ feedback = self.id + ' ' + body
900
+ self.throw_exactly_matched_exception(self.exceptions['codes'], errorCode, feedback)
901
+ self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
902
+ raise ExchangeError(feedback)
903
+ return None