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,995 @@
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.bitflyer import ImplicitAPI
8
+ import hashlib
9
+ from ccxt.base.types import Balances, Currency, Int, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Trade, TradingFeeInterface, Transaction
10
+ from typing import List
11
+ from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import ArgumentsRequired
13
+ from ccxt.base.errors import OrderNotFound
14
+ from ccxt.base.errors import OnMaintenance
15
+ from ccxt.base.decimal_to_precision import TICK_SIZE
16
+ from ccxt.base.precise import Precise
17
+
18
+
19
+ class bitflyer(Exchange, ImplicitAPI):
20
+
21
+ def describe(self):
22
+ return self.deep_extend(super(bitflyer, self).describe(), {
23
+ 'id': 'bitflyer',
24
+ 'name': 'bitFlyer',
25
+ 'countries': ['JP'],
26
+ 'version': 'v1',
27
+ 'rateLimit': 1000, # their nonce-timestamp is in seconds...
28
+ 'hostname': 'bitflyer.com', # or bitflyer.com
29
+ 'has': {
30
+ 'CORS': None,
31
+ 'spot': True,
32
+ 'margin': False,
33
+ 'swap': None, # has but not fully implemented
34
+ 'future': None, # has but not fully implemented
35
+ 'option': False,
36
+ 'cancelAllOrders': None, # https://lightning.bitflyer.com/docs?lang=en#cancel-all-orders
37
+ 'cancelOrder': True,
38
+ 'createOrder': True,
39
+ 'fetchBalance': True,
40
+ 'fetchClosedOrders': 'emulated',
41
+ 'fetchDeposits': True,
42
+ 'fetchMarginMode': False,
43
+ 'fetchMarkets': True,
44
+ 'fetchMyTrades': True,
45
+ 'fetchOpenOrders': 'emulated',
46
+ 'fetchOrder': 'emulated',
47
+ 'fetchOrderBook': True,
48
+ 'fetchOrders': True,
49
+ 'fetchPositionMode': False,
50
+ 'fetchPositions': True,
51
+ 'fetchTicker': True,
52
+ 'fetchTrades': True,
53
+ 'fetchTradingFee': True,
54
+ 'fetchTradingFees': False,
55
+ 'fetchTransfer': False,
56
+ 'fetchTransfers': False,
57
+ 'fetchWithdrawals': True,
58
+ 'transfer': False,
59
+ 'withdraw': True,
60
+ },
61
+ 'urls': {
62
+ 'logo': 'https://user-images.githubusercontent.com/1294454/28051642-56154182-660e-11e7-9b0d-6042d1e6edd8.jpg',
63
+ 'api': {
64
+ 'rest': 'https://api.{hostname}',
65
+ },
66
+ 'www': 'https://bitflyer.com',
67
+ 'doc': 'https://lightning.bitflyer.com/docs?lang=en',
68
+ },
69
+ 'api': {
70
+ 'public': {
71
+ 'get': [
72
+ 'getmarkets/usa', # new(wip)
73
+ 'getmarkets/eu', # new(wip)
74
+ 'getmarkets', # or 'markets'
75
+ 'getboard', # ...
76
+ 'getticker',
77
+ 'getexecutions',
78
+ 'gethealth',
79
+ 'getboardstate',
80
+ 'getchats',
81
+ ],
82
+ },
83
+ 'private': {
84
+ 'get': [
85
+ 'getpermissions',
86
+ 'getbalance',
87
+ 'getbalancehistory',
88
+ 'getcollateral',
89
+ 'getcollateralhistory',
90
+ 'getcollateralaccounts',
91
+ 'getaddresses',
92
+ 'getcoinins',
93
+ 'getcoinouts',
94
+ 'getbankaccounts',
95
+ 'getdeposits',
96
+ 'getwithdrawals',
97
+ 'getchildorders',
98
+ 'getparentorders',
99
+ 'getparentorder',
100
+ 'getexecutions',
101
+ 'getpositions',
102
+ 'gettradingcommission',
103
+ ],
104
+ 'post': [
105
+ 'sendcoin',
106
+ 'withdraw',
107
+ 'sendchildorder',
108
+ 'cancelchildorder',
109
+ 'sendparentorder',
110
+ 'cancelparentorder',
111
+ 'cancelallchildorders',
112
+ ],
113
+ },
114
+ },
115
+ 'fees': {
116
+ 'trading': {
117
+ 'maker': self.parse_number('0.002'),
118
+ 'taker': self.parse_number('0.002'),
119
+ },
120
+ },
121
+ 'precisionMode': TICK_SIZE,
122
+ 'exceptions': {
123
+ 'exact': {
124
+ '-2': OnMaintenance, # {"status":-2,"error_message":"Under maintenance","data":null}
125
+ },
126
+ },
127
+ })
128
+
129
+ def parse_expiry_date(self, expiry):
130
+ day = expiry[0:2]
131
+ monthName = expiry[2:5]
132
+ year = expiry[5:9]
133
+ months: dict = {
134
+ 'JAN': '01',
135
+ 'FEB': '02',
136
+ 'MAR': '03',
137
+ 'APR': '04',
138
+ 'MAY': '05',
139
+ 'JUN': '06',
140
+ 'JUL': '07',
141
+ 'AUG': '08',
142
+ 'SEP': '09',
143
+ 'OCT': '10',
144
+ 'NOV': '11',
145
+ 'DEC': '12',
146
+ }
147
+ month = self.safe_string(months, monthName)
148
+ return self.parse8601(year + '-' + month + '-' + day + 'T00:00:00Z')
149
+
150
+ def safe_market(self, marketId: Str = None, market: Market = None, delimiter: Str = None, marketType: Str = None) -> MarketInterface:
151
+ # Bitflyer has a different type of conflict in markets, because
152
+ # some of their ids(ETH/BTC and BTC/JPY) are duplicated in US, EU and JP.
153
+ # Since they're the same we just need to return one
154
+ return super(bitflyer, self).safe_market(marketId, market, delimiter, 'spot')
155
+
156
+ async def fetch_markets(self, params={}) -> List[Market]:
157
+ """
158
+ retrieves data on all markets for bitflyer
159
+ :see: https://lightning.bitflyer.com/docs?lang=en#market-list
160
+ :param dict [params]: extra parameters specific to the exchange API endpoint
161
+ :returns dict[]: an array of objects representing market data
162
+ """
163
+ jp_markets = await self.publicGetGetmarkets(params)
164
+ #
165
+ # [
166
+ # # spot
167
+ # {"product_code": "BTC_JPY", "market_type": "Spot"},
168
+ # {"product_code": "BCH_BTC", "market_type": "Spot"},
169
+ # # forex swap
170
+ # {"product_code": "FX_BTC_JPY", "market_type": "FX"},
171
+ # # future
172
+ # {
173
+ # "product_code": "BTCJPY11FEB2022",
174
+ # "alias": "BTCJPY_MAT1WK",
175
+ # "market_type": "Futures",
176
+ # },
177
+ # ]
178
+ #
179
+ us_markets = await self.publicGetGetmarketsUsa(params)
180
+ #
181
+ # [
182
+ # {"product_code": "BTC_USD", "market_type": "Spot"},
183
+ # {"product_code": "BTC_JPY", "market_type": "Spot"},
184
+ # ]
185
+ #
186
+ eu_markets = await self.publicGetGetmarketsEu(params)
187
+ #
188
+ # [
189
+ # {"product_code": "BTC_EUR", "market_type": "Spot"},
190
+ # {"product_code": "BTC_JPY", "market_type": "Spot"},
191
+ # ]
192
+ #
193
+ markets = self.array_concat(jp_markets, us_markets)
194
+ markets = self.array_concat(markets, eu_markets)
195
+ result = []
196
+ for i in range(0, len(markets)):
197
+ market = markets[i]
198
+ id = self.safe_string(market, 'product_code')
199
+ currencies = id.split('_')
200
+ marketType = self.safe_string(market, 'market_type')
201
+ swap = (marketType == 'FX')
202
+ future = (marketType == 'Futures')
203
+ spot = not swap and not future
204
+ type = 'spot'
205
+ settle = None
206
+ baseId = None
207
+ quoteId = None
208
+ expiry = None
209
+ if spot:
210
+ baseId = self.safe_string(currencies, 0)
211
+ quoteId = self.safe_string(currencies, 1)
212
+ elif swap:
213
+ type = 'swap'
214
+ baseId = self.safe_string(currencies, 1)
215
+ quoteId = self.safe_string(currencies, 2)
216
+ elif future:
217
+ alias = self.safe_string(market, 'alias')
218
+ if alias is None:
219
+ # no alias:
220
+ # {product_code: 'BTCJPY11MAR2022', market_type: 'Futures'}
221
+ # TODO self will break if there are products with 4 chars
222
+ baseId = id[0:3]
223
+ quoteId = id[3:6]
224
+ # last 9 chars are expiry date
225
+ expiryDate = id[-9:]
226
+ expiry = self.parse_expiry_date(expiryDate)
227
+ else:
228
+ splitAlias = alias.split('_')
229
+ currencyIds = self.safe_string(splitAlias, 0)
230
+ baseId = currencyIds[0:-3]
231
+ quoteId = currencyIds[-3:]
232
+ splitId = id.split(currencyIds)
233
+ expiryDate = self.safe_string(splitId, 1)
234
+ expiry = self.parse_expiry_date(expiryDate)
235
+ type = 'future'
236
+ base = self.safe_currency_code(baseId)
237
+ quote = self.safe_currency_code(quoteId)
238
+ symbol = base + '/' + quote
239
+ taker = self.fees['trading']['taker']
240
+ maker = self.fees['trading']['maker']
241
+ contract = swap or future
242
+ if contract:
243
+ maker = 0.0
244
+ taker = 0.0
245
+ settle = 'JPY'
246
+ symbol = symbol + ':' + settle
247
+ if future:
248
+ symbol = symbol + '-' + self.yymmdd(expiry)
249
+ result.append({
250
+ 'id': id,
251
+ 'symbol': symbol,
252
+ 'base': base,
253
+ 'quote': quote,
254
+ 'settle': settle,
255
+ 'baseId': baseId,
256
+ 'quoteId': quoteId,
257
+ 'settleId': None,
258
+ 'type': type,
259
+ 'spot': spot,
260
+ 'margin': False,
261
+ 'swap': swap,
262
+ 'future': future,
263
+ 'option': False,
264
+ 'active': True,
265
+ 'contract': contract,
266
+ 'linear': None if spot else True,
267
+ 'inverse': None if spot else False,
268
+ 'taker': taker,
269
+ 'maker': maker,
270
+ 'contractSize': None,
271
+ 'expiry': expiry,
272
+ 'expiryDatetime': self.iso8601(expiry),
273
+ 'strike': None,
274
+ 'optionType': None,
275
+ 'precision': {
276
+ 'amount': None,
277
+ 'price': None,
278
+ },
279
+ 'limits': {
280
+ 'leverage': {
281
+ 'min': None,
282
+ 'max': None,
283
+ },
284
+ 'amount': {
285
+ 'min': None,
286
+ 'max': None,
287
+ },
288
+ 'price': {
289
+ 'min': None,
290
+ 'max': None,
291
+ },
292
+ 'cost': {
293
+ 'min': None,
294
+ 'max': None,
295
+ },
296
+ },
297
+ 'created': None,
298
+ 'info': market,
299
+ })
300
+ return result
301
+
302
+ def parse_balance(self, response) -> Balances:
303
+ result: dict = {'info': response}
304
+ for i in range(0, len(response)):
305
+ balance = response[i]
306
+ currencyId = self.safe_string(balance, 'currency_code')
307
+ code = self.safe_currency_code(currencyId)
308
+ account = self.account()
309
+ account['total'] = self.safe_string(balance, 'amount')
310
+ account['free'] = self.safe_string(balance, 'available')
311
+ result[code] = account
312
+ return self.safe_balance(result)
313
+
314
+ async def fetch_balance(self, params={}) -> Balances:
315
+ """
316
+ query for balance and get the amount of funds available for trading or funds locked in orders
317
+ :see: https://lightning.bitflyer.com/docs?lang=en#get-account-asset-balance
318
+ :param dict [params]: extra parameters specific to the exchange API endpoint
319
+ :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
320
+ """
321
+ await self.load_markets()
322
+ response = await self.privateGetGetbalance(params)
323
+ #
324
+ # [
325
+ # {
326
+ # "currency_code": "JPY",
327
+ # "amount": 1024078,
328
+ # "available": 508000
329
+ # },
330
+ # {
331
+ # "currency_code": "BTC",
332
+ # "amount": 10.24,
333
+ # "available": 4.12
334
+ # },
335
+ # {
336
+ # "currency_code": "ETH",
337
+ # "amount": 20.48,
338
+ # "available": 16.38
339
+ # }
340
+ # ]
341
+ #
342
+ return self.parse_balance(response)
343
+
344
+ async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
345
+ """
346
+ fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
347
+ :see: https://lightning.bitflyer.com/docs?lang=en#order-book
348
+ :param str symbol: unified symbol of the market to fetch the order book for
349
+ :param int [limit]: the maximum amount of order book entries to return
350
+ :param dict [params]: extra parameters specific to the exchange API endpoint
351
+ :returns dict: A dictionary of `order book structures <https://docs.ccxt.com/#/?id=order-book-structure>` indexed by market symbols
352
+ """
353
+ await self.load_markets()
354
+ market = self.market(symbol)
355
+ request: dict = {
356
+ 'product_code': market['id'],
357
+ }
358
+ orderbook = await self.publicGetGetboard(self.extend(request, params))
359
+ return self.parse_order_book(orderbook, market['symbol'], None, 'bids', 'asks', 'price', 'size')
360
+
361
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
362
+ symbol = self.safe_symbol(None, market)
363
+ timestamp = self.parse8601(self.safe_string(ticker, 'timestamp'))
364
+ last = self.safe_string(ticker, 'ltp')
365
+ return self.safe_ticker({
366
+ 'symbol': symbol,
367
+ 'timestamp': timestamp,
368
+ 'datetime': self.iso8601(timestamp),
369
+ 'high': None,
370
+ 'low': None,
371
+ 'bid': self.safe_string(ticker, 'best_bid'),
372
+ 'bidVolume': None,
373
+ 'ask': self.safe_string(ticker, 'best_ask'),
374
+ 'askVolume': None,
375
+ 'vwap': None,
376
+ 'open': None,
377
+ 'close': last,
378
+ 'last': last,
379
+ 'previousClose': None,
380
+ 'change': None,
381
+ 'percentage': None,
382
+ 'average': None,
383
+ 'baseVolume': self.safe_string(ticker, 'volume_by_product'),
384
+ 'quoteVolume': None,
385
+ 'info': ticker,
386
+ }, market)
387
+
388
+ async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
389
+ """
390
+ fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
391
+ :see: https://lightning.bitflyer.com/docs?lang=en#ticker
392
+ :param str symbol: unified symbol of the market to fetch the ticker for
393
+ :param dict [params]: extra parameters specific to the exchange API endpoint
394
+ :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
395
+ """
396
+ await self.load_markets()
397
+ market = self.market(symbol)
398
+ request: dict = {
399
+ 'product_code': market['id'],
400
+ }
401
+ response = await self.publicGetGetticker(self.extend(request, params))
402
+ return self.parse_ticker(response, market)
403
+
404
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
405
+ #
406
+ # fetchTrades(public) v1
407
+ #
408
+ # {
409
+ # "id":2278466664,
410
+ # "side":"SELL",
411
+ # "price":56810.7,
412
+ # "size":0.08798,
413
+ # "exec_date":"2021-11-19T11:46:39.323",
414
+ # "buy_child_order_acceptance_id":"JRF20211119-114209-236525",
415
+ # "sell_child_order_acceptance_id":"JRF20211119-114639-236919"
416
+ # }
417
+ #
418
+ # fetchMyTrades
419
+ #
420
+ # {
421
+ # "id": 37233,
422
+ # "side": "BUY",
423
+ # "price": 33470,
424
+ # "size": 0.01,
425
+ # "exec_date": "2015-07-07T09:57:40.397",
426
+ # "child_order_id": "JOR20150707-060559-021935",
427
+ # "child_order_acceptance_id": "JRF20150707-060559-396699"
428
+ # "commission": 0,
429
+ # },
430
+ #
431
+ side = self.safe_string_lower(trade, 'side')
432
+ if side is not None:
433
+ if len(side) < 1:
434
+ side = None
435
+ order = None
436
+ if side is not None:
437
+ idInner = side + '_child_order_acceptance_id'
438
+ if idInner in trade:
439
+ order = trade[idInner]
440
+ if order is None:
441
+ order = self.safe_string(trade, 'child_order_acceptance_id')
442
+ timestamp = self.parse8601(self.safe_string(trade, 'exec_date'))
443
+ priceString = self.safe_string(trade, 'price')
444
+ amountString = self.safe_string(trade, 'size')
445
+ id = self.safe_string(trade, 'id')
446
+ market = self.safe_market(None, market)
447
+ return self.safe_trade({
448
+ 'id': id,
449
+ 'info': trade,
450
+ 'timestamp': timestamp,
451
+ 'datetime': self.iso8601(timestamp),
452
+ 'symbol': market['symbol'],
453
+ 'order': order,
454
+ 'type': None,
455
+ 'side': side,
456
+ 'takerOrMaker': None,
457
+ 'price': priceString,
458
+ 'amount': amountString,
459
+ 'cost': None,
460
+ 'fee': None,
461
+ }, market)
462
+
463
+ async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
464
+ """
465
+ get the list of most recent trades for a particular symbol
466
+ :see: https://lightning.bitflyer.com/docs?lang=en#list-executions
467
+ :param str symbol: unified symbol of the market to fetch trades for
468
+ :param int [since]: timestamp in ms of the earliest trade to fetch
469
+ :param int [limit]: the maximum amount of trades to fetch
470
+ :param dict [params]: extra parameters specific to the exchange API endpoint
471
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
472
+ """
473
+ await self.load_markets()
474
+ market = self.market(symbol)
475
+ request: dict = {
476
+ 'product_code': market['id'],
477
+ }
478
+ if limit is not None:
479
+ request['count'] = limit
480
+ response = await self.publicGetGetexecutions(self.extend(request, params))
481
+ #
482
+ # [
483
+ # {
484
+ # "id": 39287,
485
+ # "side": "BUY",
486
+ # "price": 31690,
487
+ # "size": 27.04,
488
+ # "exec_date": "2015-07-08T02:43:34.823",
489
+ # "buy_child_order_acceptance_id": "JRF20150707-200203-452209",
490
+ # "sell_child_order_acceptance_id": "JRF20150708-024334-060234"
491
+ # },
492
+ # ]
493
+ #
494
+ return self.parse_trades(response, market, since, limit)
495
+
496
+ async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
497
+ """
498
+ fetch the trading fees for a market
499
+ :see: https://lightning.bitflyer.com/docs?lang=en#get-trading-commission
500
+ :param str symbol: unified market symbol
501
+ :param dict [params]: extra parameters specific to the exchange API endpoint
502
+ :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
503
+ """
504
+ await self.load_markets()
505
+ market = self.market(symbol)
506
+ request: dict = {
507
+ 'product_code': market['id'],
508
+ }
509
+ response = await self.privateGetGettradingcommission(self.extend(request, params))
510
+ #
511
+ # {
512
+ # commission_rate: '0.0020'
513
+ # }
514
+ #
515
+ fee = self.safe_number(response, 'commission_rate')
516
+ return {
517
+ 'info': response,
518
+ 'symbol': market['symbol'],
519
+ 'maker': fee,
520
+ 'taker': fee,
521
+ 'percentage': None,
522
+ 'tierBased': None,
523
+ }
524
+
525
+ async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
526
+ """
527
+ create a trade order
528
+ :see: https://lightning.bitflyer.com/docs?lang=en#send-a-new-order
529
+ :param str symbol: unified symbol of the market to create an order in
530
+ :param str type: 'market' or 'limit'
531
+ :param str side: 'buy' or 'sell'
532
+ :param float amount: how much of currency you want to trade in units of base currency
533
+ :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
534
+ :param dict [params]: extra parameters specific to the exchange API endpoint
535
+ :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
536
+ """
537
+ await self.load_markets()
538
+ request: dict = {
539
+ 'product_code': self.market_id(symbol),
540
+ 'child_order_type': type.upper(),
541
+ 'side': side.upper(),
542
+ 'price': price,
543
+ 'size': amount,
544
+ }
545
+ result = await self.privatePostSendchildorder(self.extend(request, params))
546
+ # {"status": - 200, "error_message": "Insufficient funds", "data": null}
547
+ id = self.safe_string(result, 'child_order_acceptance_id')
548
+ return self.safe_order({
549
+ 'id': id,
550
+ 'info': result,
551
+ })
552
+
553
+ async def cancel_order(self, id: str, symbol: Str = None, params={}):
554
+ """
555
+ cancels an open order
556
+ :see: https://lightning.bitflyer.com/docs?lang=en#cancel-order
557
+ :param str id: order id
558
+ :param str symbol: unified symbol of the market the order was made in
559
+ :param dict [params]: extra parameters specific to the exchange API endpoint
560
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
561
+ """
562
+ if symbol is None:
563
+ raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
564
+ await self.load_markets()
565
+ request: dict = {
566
+ 'product_code': self.market_id(symbol),
567
+ 'child_order_acceptance_id': id,
568
+ }
569
+ return await self.privatePostCancelchildorder(self.extend(request, params))
570
+
571
+ def parse_order_status(self, status: Str):
572
+ statuses: dict = {
573
+ 'ACTIVE': 'open',
574
+ 'COMPLETED': 'closed',
575
+ 'CANCELED': 'canceled',
576
+ 'EXPIRED': 'canceled',
577
+ 'REJECTED': 'canceled',
578
+ }
579
+ return self.safe_string(statuses, status, status)
580
+
581
+ def parse_order(self, order: dict, market: Market = None) -> Order:
582
+ timestamp = self.parse8601(self.safe_string(order, 'child_order_date'))
583
+ price = self.safe_string(order, 'price')
584
+ amount = self.safe_string(order, 'size')
585
+ filled = self.safe_string(order, 'executed_size')
586
+ remaining = self.safe_string(order, 'outstanding_size')
587
+ status = self.parse_order_status(self.safe_string(order, 'child_order_state'))
588
+ type = self.safe_string_lower(order, 'child_order_type')
589
+ side = self.safe_string_lower(order, 'side')
590
+ marketId = self.safe_string(order, 'product_code')
591
+ symbol = self.safe_symbol(marketId, market)
592
+ fee = None
593
+ feeCost = self.safe_number(order, 'total_commission')
594
+ if feeCost is not None:
595
+ fee = {
596
+ 'cost': feeCost,
597
+ 'currency': None,
598
+ 'rate': None,
599
+ }
600
+ id = self.safe_string(order, 'child_order_acceptance_id')
601
+ return self.safe_order({
602
+ 'id': id,
603
+ 'clientOrderId': None,
604
+ 'info': order,
605
+ 'timestamp': timestamp,
606
+ 'datetime': self.iso8601(timestamp),
607
+ 'lastTradeTimestamp': None,
608
+ 'status': status,
609
+ 'symbol': symbol,
610
+ 'type': type,
611
+ 'timeInForce': None,
612
+ 'postOnly': None,
613
+ 'side': side,
614
+ 'price': price,
615
+ 'stopPrice': None,
616
+ 'triggerPrice': None,
617
+ 'cost': None,
618
+ 'amount': amount,
619
+ 'filled': filled,
620
+ 'remaining': remaining,
621
+ 'fee': fee,
622
+ 'average': None,
623
+ 'trades': None,
624
+ }, market)
625
+
626
+ async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = 100, params={}) -> List[Order]:
627
+ """
628
+ fetches information on multiple orders made by the user
629
+ :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
630
+ :param str symbol: unified market symbol of the market orders were made in
631
+ :param int [since]: the earliest time in ms to fetch orders for
632
+ :param int [limit]: the maximum number of order structures to retrieve
633
+ :param dict [params]: extra parameters specific to the exchange API endpoint
634
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
635
+ """
636
+ if symbol is None:
637
+ raise ArgumentsRequired(self.id + ' fetchOrders() requires a symbol argument')
638
+ await self.load_markets()
639
+ market = self.market(symbol)
640
+ request: dict = {
641
+ 'product_code': market['id'],
642
+ 'count': limit,
643
+ }
644
+ response = await self.privateGetGetchildorders(self.extend(request, params))
645
+ orders = self.parse_orders(response, market, since, limit)
646
+ if symbol is not None:
647
+ orders = self.filter_by(orders, 'symbol', symbol)
648
+ return orders
649
+
650
+ async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = 100, params={}) -> List[Order]:
651
+ """
652
+ fetch all unfilled currently open orders
653
+ :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
654
+ :param str symbol: unified market symbol
655
+ :param int [since]: the earliest time in ms to fetch open orders for
656
+ :param int [limit]: the maximum number of open orders structures to retrieve
657
+ :param dict [params]: extra parameters specific to the exchange API endpoint
658
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
659
+ """
660
+ request: dict = {
661
+ 'child_order_state': 'ACTIVE',
662
+ }
663
+ return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
664
+
665
+ async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = 100, params={}) -> List[Order]:
666
+ """
667
+ fetches information on multiple closed orders made by the user
668
+ :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
669
+ :param str symbol: unified market symbol of the market orders were made in
670
+ :param int [since]: the earliest time in ms to fetch orders for
671
+ :param int [limit]: the maximum number of order structures to retrieve
672
+ :param dict [params]: extra parameters specific to the exchange API endpoint
673
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
674
+ """
675
+ request: dict = {
676
+ 'child_order_state': 'COMPLETED',
677
+ }
678
+ return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
679
+
680
+ async def fetch_order(self, id: str, symbol: Str = None, params={}):
681
+ """
682
+ fetches information on an order made by the user
683
+ :see: https://lightning.bitflyer.com/docs?lang=en#list-orders
684
+ :param str symbol: unified symbol of the market the order was made in
685
+ :param dict [params]: extra parameters specific to the exchange API endpoint
686
+ :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
687
+ """
688
+ if symbol is None:
689
+ raise ArgumentsRequired(self.id + ' fetchOrder() requires a symbol argument')
690
+ orders = await self.fetch_orders(symbol)
691
+ ordersById = self.index_by(orders, 'id')
692
+ if id in ordersById:
693
+ return ordersById[id]
694
+ raise OrderNotFound(self.id + ' No order found with id ' + id)
695
+
696
+ async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
697
+ """
698
+ fetch all trades made by the user
699
+ :see: https://lightning.bitflyer.com/docs?lang=en#list-executions
700
+ :param str symbol: unified market symbol
701
+ :param int [since]: the earliest time in ms to fetch trades for
702
+ :param int [limit]: the maximum number of trades structures to retrieve
703
+ :param dict [params]: extra parameters specific to the exchange API endpoint
704
+ :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
705
+ """
706
+ if symbol is None:
707
+ raise ArgumentsRequired(self.id + ' fetchMyTrades() requires a symbol argument')
708
+ await self.load_markets()
709
+ market = self.market(symbol)
710
+ request: dict = {
711
+ 'product_code': market['id'],
712
+ }
713
+ if limit is not None:
714
+ request['count'] = limit
715
+ response = await self.privateGetGetexecutions(self.extend(request, params))
716
+ #
717
+ # [
718
+ # {
719
+ # "id": 37233,
720
+ # "side": "BUY",
721
+ # "price": 33470,
722
+ # "size": 0.01,
723
+ # "exec_date": "2015-07-07T09:57:40.397",
724
+ # "child_order_id": "JOR20150707-060559-021935",
725
+ # "child_order_acceptance_id": "JRF20150707-060559-396699"
726
+ # "commission": 0,
727
+ # },
728
+ # ]
729
+ #
730
+ return self.parse_trades(response, market, since, limit)
731
+
732
+ async def fetch_positions(self, symbols: Strings = None, params={}):
733
+ """
734
+ fetch all open positions
735
+ :see: https://lightning.bitflyer.com/docs?lang=en#get-open-interest-summary
736
+ :param str[] symbols: list of unified market symbols
737
+ :param dict [params]: extra parameters specific to the exchange API endpoint
738
+ :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
739
+ """
740
+ if symbols is None:
741
+ raise ArgumentsRequired(self.id + ' fetchPositions() requires a `symbols` argument, exactly one symbol in an array')
742
+ await self.load_markets()
743
+ request: dict = {
744
+ 'product_code': self.market_ids(symbols),
745
+ }
746
+ response = await self.privateGetGetpositions(self.extend(request, params))
747
+ #
748
+ # [
749
+ # {
750
+ # "product_code": "FX_BTC_JPY",
751
+ # "side": "BUY",
752
+ # "price": 36000,
753
+ # "size": 10,
754
+ # "commission": 0,
755
+ # "swap_point_accumulate": -35,
756
+ # "require_collateral": 120000,
757
+ # "open_date": "2015-11-03T10:04:45.011",
758
+ # "leverage": 3,
759
+ # "pnl": 965,
760
+ # "sfd": -0.5
761
+ # }
762
+ # ]
763
+ #
764
+ # todo unify parsePosition/parsePositions
765
+ return response
766
+
767
+ async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
768
+ """
769
+ make a withdrawal
770
+ :see: https://lightning.bitflyer.com/docs?lang=en#withdrawing-funds
771
+ :param str code: unified currency code
772
+ :param float amount: the amount to withdraw
773
+ :param str address: the address to withdraw to
774
+ :param str tag:
775
+ :param dict [params]: extra parameters specific to the exchange API endpoint
776
+ :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
777
+ """
778
+ self.check_address(address)
779
+ await self.load_markets()
780
+ if code != 'JPY' and code != 'USD' and code != 'EUR':
781
+ raise ExchangeError(self.id + ' allows withdrawing JPY, USD, EUR only, ' + code + ' is not supported')
782
+ currency = self.currency(code)
783
+ request: dict = {
784
+ 'currency_code': currency['id'],
785
+ 'amount': amount,
786
+ # 'bank_account_id': 1234,
787
+ }
788
+ response = await self.privatePostWithdraw(self.extend(request, params))
789
+ #
790
+ # {
791
+ # "message_id": "69476620-5056-4003-bcbe-42658a2b041b"
792
+ # }
793
+ #
794
+ return self.parse_transaction(response, currency)
795
+
796
+ async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
797
+ """
798
+ fetch all deposits made to an account
799
+ :see: https://lightning.bitflyer.com/docs?lang=en#get-crypto-assets-deposit-history
800
+ :param str code: unified currency code
801
+ :param int [since]: the earliest time in ms to fetch deposits for
802
+ :param int [limit]: the maximum number of deposits structures to retrieve
803
+ :param dict [params]: extra parameters specific to the exchange API endpoint
804
+ :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
805
+ """
806
+ await self.load_markets()
807
+ currency = None
808
+ request: dict = {}
809
+ if code is not None:
810
+ currency = self.currency(code)
811
+ if limit is not None:
812
+ request['count'] = limit # default 100
813
+ response = await self.privateGetGetcoinins(self.extend(request, params))
814
+ #
815
+ # [
816
+ # {
817
+ # "id": 100,
818
+ # "order_id": "CDP20151227-024141-055555",
819
+ # "currency_code": "BTC",
820
+ # "amount": 0.00002,
821
+ # "address": "1WriteySQufKZ2pVuM1oMhPrTtTVFq35j",
822
+ # "tx_hash": "9f92ee65a176bb9545f7becb8706c50d07d4cee5ffca34d8be3ef11d411405ae",
823
+ # "status": "COMPLETED",
824
+ # "event_date": "2015-11-27T08:59:20.301"
825
+ # }
826
+ # ]
827
+ #
828
+ return self.parse_transactions(response, currency, since, limit)
829
+
830
+ async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
831
+ """
832
+ fetch all withdrawals made from an account
833
+ :see: https://lightning.bitflyer.com/docs?lang=en#get-crypto-assets-transaction-history
834
+ :param str code: unified currency code
835
+ :param int [since]: the earliest time in ms to fetch withdrawals for
836
+ :param int [limit]: the maximum number of withdrawals structures to retrieve
837
+ :param dict [params]: extra parameters specific to the exchange API endpoint
838
+ :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
839
+ """
840
+ await self.load_markets()
841
+ currency = None
842
+ request: dict = {}
843
+ if code is not None:
844
+ currency = self.currency(code)
845
+ if limit is not None:
846
+ request['count'] = limit # default 100
847
+ response = await self.privateGetGetcoinouts(self.extend(request, params))
848
+ #
849
+ # [
850
+ # {
851
+ # "id": 500,
852
+ # "order_id": "CWD20151224-014040-077777",
853
+ # "currency_code": "BTC",
854
+ # "amount": 0.1234,
855
+ # "address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
856
+ # "tx_hash": "724c07dfd4044abcb390b0412c3e707dd5c4f373f0a52b3bd295ce32b478c60a",
857
+ # "fee": 0.0005,
858
+ # "additional_fee": 0.0001,
859
+ # "status": "COMPLETED",
860
+ # "event_date": "2015-12-24T01:40:40.397"
861
+ # }
862
+ # ]
863
+ #
864
+ return self.parse_transactions(response, currency, since, limit)
865
+
866
+ def parse_deposit_status(self, status):
867
+ statuses: dict = {
868
+ 'PENDING': 'pending',
869
+ 'COMPLETED': 'ok',
870
+ }
871
+ return self.safe_string(statuses, status, status)
872
+
873
+ def parse_withdrawal_status(self, status):
874
+ statuses: dict = {
875
+ 'PENDING': 'pending',
876
+ 'COMPLETED': 'ok',
877
+ }
878
+ return self.safe_string(statuses, status, status)
879
+
880
+ def parse_transaction(self, transaction: dict, currency: Currency = None) -> Transaction:
881
+ #
882
+ # fetchDeposits
883
+ #
884
+ # {
885
+ # "id": 100,
886
+ # "order_id": "CDP20151227-024141-055555",
887
+ # "currency_code": "BTC",
888
+ # "amount": 0.00002,
889
+ # "address": "1WriteySQufKZ2pVuM1oMhPrTtTVFq35j",
890
+ # "tx_hash": "9f92ee65a176bb9545f7becb8706c50d07d4cee5ffca34d8be3ef11d411405ae",
891
+ # "status": "COMPLETED",
892
+ # "event_date": "2015-11-27T08:59:20.301"
893
+ # }
894
+ #
895
+ # fetchWithdrawals
896
+ #
897
+ # {
898
+ # "id": 500,
899
+ # "order_id": "CWD20151224-014040-077777",
900
+ # "currency_code": "BTC",
901
+ # "amount": 0.1234,
902
+ # "address": "1A1zP1eP5QGefi2DMPTfTL5SLmv7DivfNa",
903
+ # "tx_hash": "724c07dfd4044abcb390b0412c3e707dd5c4f373f0a52b3bd295ce32b478c60a",
904
+ # "fee": 0.0005,
905
+ # "additional_fee": 0.0001,
906
+ # "status": "COMPLETED",
907
+ # "event_date": "2015-12-24T01:40:40.397"
908
+ # }
909
+ #
910
+ # withdraw
911
+ #
912
+ # {
913
+ # "message_id": "69476620-5056-4003-bcbe-42658a2b041b"
914
+ # }
915
+ #
916
+ id = self.safe_string_2(transaction, 'id', 'message_id')
917
+ address = self.safe_string(transaction, 'address')
918
+ currencyId = self.safe_string(transaction, 'currency_code')
919
+ code = self.safe_currency_code(currencyId, currency)
920
+ timestamp = self.parse8601(self.safe_string(transaction, 'event_date'))
921
+ amount = self.safe_number(transaction, 'amount')
922
+ txId = self.safe_string(transaction, 'tx_hash')
923
+ rawStatus = self.safe_string(transaction, 'status')
924
+ type = None
925
+ status = None
926
+ fee = None
927
+ if 'fee' in transaction:
928
+ type = 'withdrawal'
929
+ status = self.parse_withdrawal_status(rawStatus)
930
+ feeCost = self.safe_string(transaction, 'fee')
931
+ additionalFee = self.safe_string(transaction, 'additional_fee')
932
+ fee = {'currency': code, 'cost': self.parse_number(Precise.string_add(feeCost, additionalFee))}
933
+ else:
934
+ type = 'deposit'
935
+ status = self.parse_deposit_status(rawStatus)
936
+ return {
937
+ 'info': transaction,
938
+ 'id': id,
939
+ 'txid': txId,
940
+ 'timestamp': timestamp,
941
+ 'datetime': self.iso8601(timestamp),
942
+ 'network': None,
943
+ 'address': address,
944
+ 'addressTo': address,
945
+ 'addressFrom': None,
946
+ 'tag': None,
947
+ 'tagTo': None,
948
+ 'tagFrom': None,
949
+ 'type': type,
950
+ 'amount': amount,
951
+ 'currency': code,
952
+ 'status': status,
953
+ 'updated': None,
954
+ 'comment': None,
955
+ 'internal': None,
956
+ 'fee': fee,
957
+ }
958
+
959
+ def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
960
+ request = '/' + self.version + '/'
961
+ if api == 'private':
962
+ request += 'me/'
963
+ request += path
964
+ if method == 'GET':
965
+ if params:
966
+ request += '?' + self.urlencode(params)
967
+ baseUrl = self.implode_hostname(self.urls['api']['rest'])
968
+ url = baseUrl + request
969
+ if api == 'private':
970
+ self.check_required_credentials()
971
+ nonce = str(self.nonce())
972
+ auth = ''.join([nonce, method, request])
973
+ if params:
974
+ if method != 'GET':
975
+ body = self.json(params)
976
+ auth += body
977
+ headers = {
978
+ 'ACCESS-KEY': self.apiKey,
979
+ 'ACCESS-TIMESTAMP': nonce,
980
+ 'ACCESS-SIGN': self.hmac(self.encode(auth), self.encode(self.secret), hashlib.sha256),
981
+ 'Content-Type': 'application/json',
982
+ }
983
+ return {'url': url, 'method': method, 'body': body, 'headers': headers}
984
+
985
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
986
+ if response is None:
987
+ return None # fallback to the default error handler
988
+ feedback = self.id + ' ' + body
989
+ # i.e. {"status":-2,"error_message":"Under maintenance","data":null}
990
+ errorMessage = self.safe_string(response, 'error_message')
991
+ statusCode = self.safe_number(response, 'status')
992
+ if errorMessage is not None:
993
+ self.throw_exactly_matched_exception(self.exceptions['exact'], statusCode, feedback)
994
+ self.throw_broadly_matched_exception(self.exceptions['broad'], errorMessage, feedback)
995
+ return None