ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.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 (529) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +8 -8
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +8 -8
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +8 -8
  68. ccxt/async_support/afratether.py +10 -10
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +32 -38
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +32 -27
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +34 -30
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +15 -14
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +30 -36
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +29 -24
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +32 -28
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +13 -12
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.1.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/WHEEL +1 -1
  437. ccxt/__test__.py +0 -7
  438. ccxt/abstract/ace.py +0 -15
  439. ccxt/abstract/bitbay.py +0 -53
  440. ccxt/abstract/bitcoincom.py +0 -115
  441. ccxt/abstract/bitfinex2.py +0 -139
  442. ccxt/abstract/bitpanda.py +0 -35
  443. ccxt/abstract/bl3p.py +0 -19
  444. ccxt/abstract/coinlist.py +0 -54
  445. ccxt/abstract/currencycom.py +0 -68
  446. ccxt/abstract/hitbtc3.py +0 -115
  447. ccxt/abstract/idex.py +0 -26
  448. ccxt/abstract/kuna.py +0 -182
  449. ccxt/abstract/lykke.py +0 -29
  450. ccxt/abstract/poloniexfutures.py +0 -48
  451. ccxt/abstract/wazirx.py +0 -30
  452. ccxt/ace.py +0 -1012
  453. ccxt/async_support/ace.py +0 -1012
  454. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  455. ccxt/async_support/base/ws/fast_client.py +0 -96
  456. ccxt/async_support/bitbay.py +0 -17
  457. ccxt/async_support/bitcoincom.py +0 -17
  458. ccxt/async_support/bitfinex2.py +0 -3552
  459. ccxt/async_support/bitpanda.py +0 -16
  460. ccxt/async_support/bl3p.py +0 -485
  461. ccxt/async_support/coinlist.py +0 -2243
  462. ccxt/async_support/currencycom.py +0 -1950
  463. ccxt/async_support/hitbtc3.py +0 -16
  464. ccxt/async_support/idex.py +0 -1766
  465. ccxt/async_support/kuna.py +0 -1841
  466. ccxt/async_support/lykke.py +0 -1270
  467. ccxt/async_support/poloniexfutures.py +0 -1717
  468. ccxt/async_support/wazirx.py +0 -1224
  469. ccxt/bitbay.py +0 -17
  470. ccxt/bitcoincom.py +0 -17
  471. ccxt/bitfinex2.py +0 -3552
  472. ccxt/bitpanda.py +0 -16
  473. ccxt/bl3p.py +0 -485
  474. ccxt/coinlist.py +0 -2243
  475. ccxt/currencycom.py +0 -1950
  476. ccxt/hitbtc3.py +0 -16
  477. ccxt/idex.py +0 -1766
  478. ccxt/kuna.py +0 -1841
  479. ccxt/lykke.py +0 -1270
  480. ccxt/poloniexfutures.py +0 -1717
  481. ccxt/pro/bitcoincom.py +0 -34
  482. ccxt/pro/bitfinex2.py +0 -1083
  483. ccxt/pro/bitpanda.py +0 -15
  484. ccxt/pro/currencycom.py +0 -536
  485. ccxt/pro/idex.py +0 -672
  486. ccxt/pro/poloniexfutures.py +0 -990
  487. ccxt/pro/wazirx.py +0 -749
  488. ccxt/test/base/__init__.py +0 -29
  489. ccxt/test/base/test_account.py +0 -26
  490. ccxt/test/base/test_balance.py +0 -56
  491. ccxt/test/base/test_borrow_interest.py +0 -35
  492. ccxt/test/base/test_borrow_rate.py +0 -32
  493. ccxt/test/base/test_calculate_fee.py +0 -51
  494. ccxt/test/base/test_crypto.py +0 -127
  495. ccxt/test/base/test_currency.py +0 -76
  496. ccxt/test/base/test_datetime.py +0 -109
  497. ccxt/test/base/test_decimal_to_precision.py +0 -392
  498. ccxt/test/base/test_deep_extend.py +0 -68
  499. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  500. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  501. ccxt/test/base/test_funding_rate_history.py +0 -29
  502. ccxt/test/base/test_last_price.py +0 -31
  503. ccxt/test/base/test_ledger_entry.py +0 -45
  504. ccxt/test/base/test_ledger_item.py +0 -48
  505. ccxt/test/base/test_leverage_tier.py +0 -33
  506. ccxt/test/base/test_liquidation.py +0 -50
  507. ccxt/test/base/test_margin_mode.py +0 -24
  508. ccxt/test/base/test_margin_modification.py +0 -35
  509. ccxt/test/base/test_market.py +0 -193
  510. ccxt/test/base/test_number.py +0 -411
  511. ccxt/test/base/test_ohlcv.py +0 -33
  512. ccxt/test/base/test_open_interest.py +0 -32
  513. ccxt/test/base/test_order.py +0 -64
  514. ccxt/test/base/test_order_book.py +0 -69
  515. ccxt/test/base/test_position.py +0 -60
  516. ccxt/test/base/test_shared_methods.py +0 -353
  517. ccxt/test/base/test_status.py +0 -24
  518. ccxt/test/base/test_throttle.py +0 -126
  519. ccxt/test/base/test_ticker.py +0 -92
  520. ccxt/test/base/test_trade.py +0 -47
  521. ccxt/test/base/test_trading_fee.py +0 -26
  522. ccxt/test/base/test_transaction.py +0 -39
  523. ccxt/test/test_async.py +0 -1649
  524. ccxt/test/test_sync.py +0 -1648
  525. ccxt/wazirx.py +0 -1224
  526. ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
  527. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  528. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.1.dist-info}/top_level.txt +0 -0
@@ -5,7 +5,7 @@
5
5
 
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.luno import ImplicitAPI
8
- from ccxt.base.types import Account, Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface
8
+ from ccxt.base.types import Account, Any, Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
11
  from ccxt.base.errors import ArgumentsRequired
@@ -15,7 +15,7 @@ from ccxt.base.precise import Precise
15
15
 
16
16
  class luno(Exchange, ImplicitAPI):
17
17
 
18
- def describe(self):
18
+ def describe(self) -> Any:
19
19
  return self.deep_extend(super(luno, self).describe(), {
20
20
  'id': 'luno',
21
21
  'name': 'luno',
@@ -32,52 +32,91 @@ class luno(Exchange, ImplicitAPI):
32
32
  'future': False,
33
33
  'option': False,
34
34
  'addMargin': False,
35
+ 'borrowCrossMargin': False,
36
+ 'borrowIsolatedMargin': False,
37
+ 'borrowMargin': False,
35
38
  'cancelOrder': True,
36
39
  'closeAllPositions': False,
37
40
  'closePosition': False,
41
+ 'createDepositAddress': True,
38
42
  'createOrder': True,
39
43
  'createReduceOnlyOrder': False,
40
44
  'fetchAccounts': True,
45
+ 'fetchAllGreeks': False,
41
46
  'fetchBalance': True,
47
+ 'fetchBorrowInterest': False,
48
+ 'fetchBorrowRate': False,
49
+ 'fetchBorrowRateHistories': False,
42
50
  'fetchBorrowRateHistory': False,
51
+ 'fetchBorrowRates': False,
52
+ 'fetchBorrowRatesPerSymbol': False,
43
53
  'fetchClosedOrders': True,
44
54
  'fetchCrossBorrowRate': False,
45
55
  'fetchCrossBorrowRates': False,
56
+ 'fetchCurrencies': True,
57
+ 'fetchDepositAddress': True,
46
58
  'fetchFundingHistory': False,
59
+ 'fetchFundingInterval': False,
60
+ 'fetchFundingIntervals': False,
47
61
  'fetchFundingRate': False,
48
62
  'fetchFundingRateHistory': False,
49
63
  'fetchFundingRates': False,
64
+ 'fetchGreeks': False,
50
65
  'fetchIndexOHLCV': False,
51
66
  'fetchIsolatedBorrowRate': False,
52
67
  'fetchIsolatedBorrowRates': False,
68
+ 'fetchIsolatedPositions': False,
53
69
  'fetchLedger': True,
54
70
  'fetchLeverage': False,
71
+ 'fetchLeverages': False,
55
72
  'fetchLeverageTiers': False,
73
+ 'fetchLiquidations': False,
74
+ 'fetchLongShortRatio': False,
75
+ 'fetchLongShortRatioHistory': False,
76
+ 'fetchMarginAdjustmentHistory': False,
56
77
  'fetchMarginMode': False,
78
+ 'fetchMarginModes': False,
79
+ 'fetchMarketLeverageTiers': False,
57
80
  'fetchMarkets': True,
58
81
  'fetchMarkOHLCV': False,
82
+ 'fetchMarkPrice': False,
83
+ 'fetchMarkPrices': False,
84
+ 'fetchMyLiquidations': False,
85
+ 'fetchMySettlementHistory': False,
59
86
  'fetchMyTrades': True,
60
87
  'fetchOHLCV': True,
88
+ 'fetchOpenInterest': False,
61
89
  'fetchOpenInterestHistory': False,
90
+ 'fetchOpenInterests': False,
62
91
  'fetchOpenOrders': True,
92
+ 'fetchOption': False,
93
+ 'fetchOptionChain': False,
63
94
  'fetchOrder': True,
64
95
  'fetchOrderBook': True,
65
96
  'fetchOrders': True,
66
97
  'fetchPosition': False,
98
+ 'fetchPositionForSymbolWs': False,
67
99
  'fetchPositionHistory': False,
68
100
  'fetchPositionMode': False,
69
101
  'fetchPositions': False,
70
102
  'fetchPositionsForSymbol': False,
103
+ 'fetchPositionsForSymbolWs': False,
71
104
  'fetchPositionsHistory': False,
72
105
  'fetchPositionsRisk': False,
73
106
  'fetchPremiumIndexOHLCV': False,
107
+ 'fetchSettlementHistory': False,
74
108
  'fetchTicker': True,
75
109
  'fetchTickers': True,
76
110
  'fetchTrades': True,
77
111
  'fetchTradingFee': True,
78
112
  'fetchTradingFees': False,
113
+ 'fetchUnderlyingAssets': False,
114
+ 'fetchVolatilityHistory': False,
79
115
  'reduceMargin': False,
116
+ 'repayCrossMargin': False,
117
+ 'repayIsolatedMargin': False,
80
118
  'setLeverage': False,
119
+ 'setMargin': False,
81
120
  'setMarginMode': False,
82
121
  'setPositionMode': False,
83
122
  },
@@ -123,6 +162,7 @@ class luno(Exchange, ImplicitAPI):
123
162
  'accounts/{id}/transactions': 1,
124
163
  'balance': 1,
125
164
  'beneficiaries': 1,
165
+ 'send/networks': 1,
126
166
  'fee_info': 1,
127
167
  'funding_address': 1,
128
168
  'listorders': 1,
@@ -183,12 +223,176 @@ class luno(Exchange, ImplicitAPI):
183
223
  },
184
224
  },
185
225
  'precisionMode': TICK_SIZE,
226
+ 'features': {
227
+ 'spot': {
228
+ 'sandbox': False,
229
+ 'createOrder': {
230
+ 'marginMode': False,
231
+ 'triggerPrice': True, # todo
232
+ 'triggerPriceType': None,
233
+ 'triggerDirection': True, # todo
234
+ 'stopLossPrice': False, # todo
235
+ 'takeProfitPrice': False, # todo
236
+ 'attachedStopLossTakeProfit': None,
237
+ 'timeInForce': {
238
+ 'IOC': True,
239
+ 'FOK': True,
240
+ 'PO': True,
241
+ 'GTD': False,
242
+ },
243
+ 'hedged': False,
244
+ 'trailing': False,
245
+ 'leverage': False,
246
+ 'marketBuyByCost': True,
247
+ 'marketBuyRequiresPrice': False,
248
+ 'selfTradePrevention': False,
249
+ 'iceberg': False,
250
+ },
251
+ 'createOrders': None,
252
+ 'fetchMyTrades': {
253
+ 'marginMode': False,
254
+ 'limit': 1000,
255
+ 'daysBack': 100000, # todo
256
+ 'untilDays': 100000, # todo
257
+ 'symbolRequired': True,
258
+ },
259
+ 'fetchOrder': {
260
+ 'marginMode': False,
261
+ 'trigger': False,
262
+ 'trailing': False,
263
+ 'symbolRequired': False,
264
+ },
265
+ 'fetchOpenOrders': {
266
+ 'marginMode': False,
267
+ 'limit': 1000,
268
+ 'trigger': False,
269
+ 'trailing': False,
270
+ 'symbolRequired': False,
271
+ },
272
+ 'fetchOrders': {
273
+ 'marginMode': False,
274
+ 'limit': 1000,
275
+ 'daysBack': 100000,
276
+ 'untilDays': None,
277
+ 'trigger': False,
278
+ 'trailing': False,
279
+ 'symbolRequired': False,
280
+ },
281
+ 'fetchClosedOrders': {
282
+ 'marginMode': False,
283
+ 'limit': 1000,
284
+ 'daysBack': 100000,
285
+ 'daysBackCanceled': 1,
286
+ 'untilDays': None,
287
+ 'trigger': False,
288
+ 'trailing': False,
289
+ 'symbolRequired': False,
290
+ },
291
+ 'fetchOHLCV': {
292
+ 'limit': None,
293
+ },
294
+ },
295
+ 'swap': {
296
+ 'linear': None,
297
+ 'inverse': None,
298
+ },
299
+ 'future': {
300
+ 'linear': None,
301
+ 'inverse': None,
302
+ },
303
+ },
186
304
  })
187
305
 
306
+ async def fetch_currencies(self, params={}) -> Currencies:
307
+ """
308
+ fetches all available currencies on an exchange
309
+ :param dict [params]: extra parameters specific to the exchange API endpoint
310
+ :returns dict: an associative dictionary of currencies
311
+ """
312
+ if not self.check_required_credentials(False):
313
+ return None
314
+ response = await self.privateGetSendNetworks(params)
315
+ #
316
+ # {
317
+ # "networks": [
318
+ # {
319
+ # "id": 0,
320
+ # "name": "Ethereum",
321
+ # "native_currency": "ETH"
322
+ # },
323
+ # ...
324
+ # ]
325
+ # }
326
+ #
327
+ currenciesData = self.safe_list(response, 'data', [])
328
+ result: dict = {}
329
+ for i in range(0, len(currenciesData)):
330
+ networkEntry = currenciesData[i]
331
+ id = self.safe_string(networkEntry, 'native_currency')
332
+ code = self.safe_currency_code(id)
333
+ if not (code in result):
334
+ result[code] = {
335
+ 'id': id,
336
+ 'code': code,
337
+ 'precision': None,
338
+ 'type': None,
339
+ 'name': None,
340
+ 'active': None,
341
+ 'deposit': None,
342
+ 'withdraw': None,
343
+ 'fee': None,
344
+ 'limits': {
345
+ 'withdraw': {
346
+ 'min': None,
347
+ 'max': None,
348
+ },
349
+ 'deposit': {
350
+ 'min': None,
351
+ 'max': None,
352
+ },
353
+ },
354
+ 'networks': {},
355
+ 'info': {},
356
+ }
357
+ networkId = self.safe_string(networkEntry, 'name')
358
+ networkCode = self.network_id_to_code(networkId)
359
+ result[code]['networks'][networkCode] = {
360
+ 'id': networkId,
361
+ 'network': networkCode,
362
+ 'limits': {
363
+ 'withdraw': {
364
+ 'min': None,
365
+ 'max': None,
366
+ },
367
+ 'deposit': {
368
+ 'min': None,
369
+ 'max': None,
370
+ },
371
+ },
372
+ 'active': None,
373
+ 'deposit': None,
374
+ 'withdraw': None,
375
+ 'fee': None,
376
+ 'precision': None,
377
+ 'info': networkEntry,
378
+ }
379
+ # add entry in info
380
+ info = self.safe_list(result[code], 'info', [])
381
+ info.append(networkEntry)
382
+ result[code]['info'] = info
383
+ # only after all entries are formed in currencies, restructure each entry
384
+ allKeys = list(result.keys())
385
+ for i in range(0, len(allKeys)):
386
+ code = allKeys[i]
387
+ result[code] = self.safe_currency_structure(result[code]) # self is needed after adding network entry
388
+ return result
389
+
188
390
  async def fetch_markets(self, params={}) -> List[Market]:
189
391
  """
190
392
  retrieves data on all markets for luno
191
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/Markets
393
+
394
+ https://www.luno.com/en/developers/api#tag/Market/operation/Markets
395
+
192
396
  :param dict [params]: extra parameters specific to the exchange API endpoint
193
397
  :returns dict[]: an array of objects representing market data
194
398
  """
@@ -276,7 +480,9 @@ class luno(Exchange, ImplicitAPI):
276
480
  async def fetch_accounts(self, params={}) -> List[Account]:
277
481
  """
278
482
  fetch all the accounts associated with a profile
279
- :see: https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
483
+
484
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
485
+
280
486
  :param dict [params]: extra parameters specific to the exchange API endpoint
281
487
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
282
488
  """
@@ -325,7 +531,9 @@ class luno(Exchange, ImplicitAPI):
325
531
  async def fetch_balance(self, params={}) -> Balances:
326
532
  """
327
533
  query for balance and get the amount of funds available for trading or funds locked in orders
328
- :see: https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
534
+
535
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/getBalances
536
+
329
537
  :param dict [params]: extra parameters specific to the exchange API endpoint
330
538
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
331
539
  """
@@ -346,8 +554,10 @@ class luno(Exchange, ImplicitAPI):
346
554
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
347
555
  """
348
556
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
349
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBookFull
350
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBook
557
+
558
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBookFull
559
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetOrderBook
560
+
351
561
  :param str symbol: unified symbol of the market to fetch the order book for
352
562
  :param int [limit]: the maximum amount of order book entries to return
353
563
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -433,7 +643,6 @@ class luno(Exchange, ImplicitAPI):
433
643
  'postOnly': None,
434
644
  'side': side,
435
645
  'price': price,
436
- 'stopPrice': None,
437
646
  'triggerPrice': None,
438
647
  'amount': amount,
439
648
  'filled': filled,
@@ -448,7 +657,10 @@ class luno(Exchange, ImplicitAPI):
448
657
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
449
658
  """
450
659
  fetches information on an order made by the user
451
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
660
+
661
+ https://www.luno.com/en/developers/api#tag/Orders/operation/GetOrder
662
+
663
+ :param str id: order id
452
664
  :param str symbol: not used by luno fetchOrder
453
665
  :param dict [params]: extra parameters specific to the exchange API endpoint
454
666
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -460,7 +672,7 @@ class luno(Exchange, ImplicitAPI):
460
672
  response = await self.privateGetOrdersId(self.extend(request, params))
461
673
  return self.parse_order(response)
462
674
 
463
- async def fetch_orders_by_state(self, state=None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
675
+ async def fetch_orders_by_state(self, state: Str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
464
676
  await self.load_markets()
465
677
  request: dict = {}
466
678
  market = None
@@ -476,7 +688,9 @@ class luno(Exchange, ImplicitAPI):
476
688
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
477
689
  """
478
690
  fetches information on multiple orders made by the user
479
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
691
+
692
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
693
+
480
694
  :param str symbol: unified market symbol of the market orders were made in
481
695
  :param int [since]: the earliest time in ms to fetch orders for
482
696
  :param int [limit]: the maximum number of order structures to retrieve
@@ -488,7 +702,9 @@ class luno(Exchange, ImplicitAPI):
488
702
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
489
703
  """
490
704
  fetch all unfilled currently open orders
491
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
705
+
706
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
707
+
492
708
  :param str symbol: unified market symbol
493
709
  :param int [since]: the earliest time in ms to fetch open orders for
494
710
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -500,7 +716,9 @@ class luno(Exchange, ImplicitAPI):
500
716
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
501
717
  """
502
718
  fetches information on multiple closed orders made by the user
503
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
719
+
720
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListOrders
721
+
504
722
  :param str symbol: unified market symbol of the market orders were made in
505
723
  :param int [since]: the earliest time in ms to fetch orders for
506
724
  :param int [limit]: the maximum number of order structures to retrieve
@@ -549,7 +767,9 @@ class luno(Exchange, ImplicitAPI):
549
767
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
550
768
  """
551
769
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
552
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetTickers
770
+
771
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetTickers
772
+
553
773
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
554
774
  :param dict [params]: extra parameters specific to the exchange API endpoint
555
775
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -571,7 +791,9 @@ class luno(Exchange, ImplicitAPI):
571
791
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
572
792
  """
573
793
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
574
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetTicker
794
+
795
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetTicker
796
+
575
797
  :param str symbol: unified symbol of the market to fetch the ticker for
576
798
  :param dict [params]: extra parameters specific to the exchange API endpoint
577
799
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -680,7 +902,9 @@ class luno(Exchange, ImplicitAPI):
680
902
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
681
903
  """
682
904
  get the list of most recent trades for a particular symbol
683
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
905
+
906
+ https://www.luno.com/en/developers/api#tag/Market/operation/ListTrades
907
+
684
908
  :param str symbol: unified symbol of the market to fetch trades for
685
909
  :param int [since]: timestamp in ms of the earliest trade to fetch
686
910
  :param int [limit]: the maximum amount of trades to fetch
@@ -713,7 +937,9 @@ class luno(Exchange, ImplicitAPI):
713
937
 
714
938
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}):
715
939
  """
716
- :see: https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
940
+
941
+ https://www.luno.com/en/developers/api#tag/Market/operation/GetCandles
942
+
717
943
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
718
944
  :param str symbol: unified symbol of the market to fetch OHLCV data for
719
945
  :param str timeframe: the length of time each candle represents
@@ -774,7 +1000,9 @@ class luno(Exchange, ImplicitAPI):
774
1000
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
775
1001
  """
776
1002
  fetch all trades made by the user
777
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
1003
+
1004
+ https://www.luno.com/en/developers/api#tag/Orders/operation/ListUserTrades
1005
+
778
1006
  :param str symbol: unified market symbol
779
1007
  :param int [since]: the earliest time in ms to fetch trades for
780
1008
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -820,7 +1048,9 @@ class luno(Exchange, ImplicitAPI):
820
1048
  async def fetch_trading_fee(self, symbol: str, params={}) -> TradingFeeInterface:
821
1049
  """
822
1050
  fetch the trading fees for a market
823
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
1051
+
1052
+ https://www.luno.com/en/developers/api#tag/Orders/operation/getFeeInfo
1053
+
824
1054
  :param str symbol: unified market symbol
825
1055
  :param dict [params]: extra parameters specific to the exchange API endpoint
826
1056
  :returns dict: a `fee structure <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -850,13 +1080,15 @@ class luno(Exchange, ImplicitAPI):
850
1080
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
851
1081
  """
852
1082
  create a trade order
853
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/PostMarketOrder
854
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/PostLimitOrder
1083
+
1084
+ https://www.luno.com/en/developers/api#tag/Orders/operation/PostMarketOrder
1085
+ https://www.luno.com/en/developers/api#tag/Orders/operation/PostLimitOrder
1086
+
855
1087
  :param str symbol: unified symbol of the market to create an order in
856
1088
  :param str type: 'market' or 'limit'
857
1089
  :param str side: 'buy' or 'sell'
858
1090
  :param float amount: how much of currency you want to trade in units of base currency
859
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1091
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
860
1092
  :param dict [params]: extra parameters specific to the exchange API endpoint
861
1093
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
862
1094
  """
@@ -887,7 +1119,9 @@ class luno(Exchange, ImplicitAPI):
887
1119
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
888
1120
  """
889
1121
  cancels an open order
890
- :see: https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
1122
+
1123
+ https://www.luno.com/en/developers/api#tag/Orders/operation/StopOrder
1124
+
891
1125
  :param str id: order id
892
1126
  :param str symbol: unified symbol of the market the order was made in
893
1127
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -920,15 +1154,17 @@ class luno(Exchange, ImplicitAPI):
920
1154
  }
921
1155
  return await self.fetch_ledger(code, since, limit, self.extend(request, params))
922
1156
 
923
- async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1157
+ async def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
924
1158
  """
925
- fetch the history of changes, actions done by the user or operations that altered balance of the user
926
- :see: https://www.luno.com/en/developers/api#tag/Accounts/operation/ListTransactions
927
- :param str code: unified currency code, default is None
1159
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
1160
+
1161
+ https://www.luno.com/en/developers/api#tag/Accounts/operation/ListTransactions
1162
+
1163
+ :param str [code]: unified currency code, default is None
928
1164
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
929
- :param int [limit]: max number of ledger entrys to return, default is None
1165
+ :param int [limit]: max number of ledger entries to return, default is None
930
1166
  :param dict [params]: extra parameters specific to the exchange API endpoint
931
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
1167
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
932
1168
  """
933
1169
  await self.load_markets()
934
1170
  await self.load_accounts()
@@ -995,13 +1231,14 @@ class luno(Exchange, ImplicitAPI):
995
1231
  'referenceId': referenceId,
996
1232
  }
997
1233
 
998
- def parse_ledger_entry(self, entry, currency: Currency = None):
1234
+ def parse_ledger_entry(self, entry, currency: Currency = None) -> LedgerEntry:
999
1235
  # details = self.safe_value(entry, 'details', {})
1000
1236
  id = self.safe_string(entry, 'row_index')
1001
1237
  account_id = self.safe_string(entry, 'account_id')
1002
1238
  timestamp = self.safe_integer(entry, 'timestamp')
1003
1239
  currencyId = self.safe_string(entry, 'currency')
1004
1240
  code = self.safe_currency_code(currencyId, currency)
1241
+ currency = self.safe_currency(currencyId, currency)
1005
1242
  available_delta = self.safe_string(entry, 'available_delta')
1006
1243
  balance_delta = self.safe_string(entry, 'balance_delta')
1007
1244
  after = self.safe_string(entry, 'balance')
@@ -1027,7 +1264,8 @@ class luno(Exchange, ImplicitAPI):
1027
1264
  direction = 'in'
1028
1265
  elif Precise.string_lt(balance_delta, '0') or Precise.string_lt(available_delta, '0'):
1029
1266
  direction = 'out'
1030
- return {
1267
+ return self.safe_ledger_entry({
1268
+ 'info': entry,
1031
1269
  'id': id,
1032
1270
  'direction': direction,
1033
1271
  'account': account_id,
@@ -1035,14 +1273,123 @@ class luno(Exchange, ImplicitAPI):
1035
1273
  'referenceAccount': None,
1036
1274
  'type': type,
1037
1275
  'currency': code,
1038
- 'amount': self.parse_number(amount),
1276
+ 'amount': self.parse_to_numeric(amount),
1039
1277
  'timestamp': timestamp,
1040
1278
  'datetime': self.iso8601(timestamp),
1041
- 'before': self.parse_number(before),
1042
- 'after': self.parse_number(after),
1279
+ 'before': self.parse_to_numeric(before),
1280
+ 'after': self.parse_to_numeric(after),
1043
1281
  'status': status,
1044
1282
  'fee': None,
1045
- 'info': entry,
1283
+ }, currency)
1284
+
1285
+ async def create_deposit_address(self, code: str, params={}) -> DepositAddress:
1286
+ """
1287
+ create a currency deposit address
1288
+
1289
+ https://www.luno.com/en/developers/api#tag/Receive/operation/createFundingAddress
1290
+
1291
+ :param str code: unified currency code of the currency for the deposit address
1292
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1293
+ :param str [params.name]: an optional name for the new address
1294
+ :param int [params.account_id]: an optional account id for the new address
1295
+ :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1296
+ """
1297
+ await self.load_markets()
1298
+ currency = self.currency(code)
1299
+ request: dict = {
1300
+ 'asset': currency['id'],
1301
+ }
1302
+ response = await self.privatePostFundingAddress(self.extend(request, params))
1303
+ #
1304
+ # {
1305
+ # "account_id": "string",
1306
+ # "address": "string",
1307
+ # "address_meta": [
1308
+ # {
1309
+ # "label": "string",
1310
+ # "value": "string"
1311
+ # }
1312
+ # ],
1313
+ # "asset": "string",
1314
+ # "assigned_at": 0,
1315
+ # "name": "string",
1316
+ # "network": 0,
1317
+ # "qr_code_uri": "string",
1318
+ # "receive_fee": "string",
1319
+ # "total_received": "string",
1320
+ # "total_unconfirmed": "string"
1321
+ # }
1322
+ #
1323
+ return self.parse_deposit_address(response, currency)
1324
+
1325
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1326
+ """
1327
+ fetch the deposit address for a currency associated with self account
1328
+
1329
+ https://www.luno.com/en/developers/api#tag/Receive/operation/getFundingAddress
1330
+
1331
+ :param str code: unified currency code
1332
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1333
+ :param str [params.address]: a specific cryptocurrency address to retrieve
1334
+ :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1335
+ """
1336
+ await self.load_markets()
1337
+ currency = self.currency(code)
1338
+ request: dict = {
1339
+ 'asset': currency['id'],
1340
+ }
1341
+ response = await self.privateGetFundingAddress(self.extend(request, params))
1342
+ #
1343
+ # {
1344
+ # "account_id": "string",
1345
+ # "address": "string",
1346
+ # "address_meta": [
1347
+ # {
1348
+ # "label": "string",
1349
+ # "value": "string"
1350
+ # }
1351
+ # ],
1352
+ # "asset": "string",
1353
+ # "assigned_at": 0,
1354
+ # "name": "string",
1355
+ # "network": 0,
1356
+ # "qr_code_uri": "string",
1357
+ # "receive_fee": "string",
1358
+ # "total_received": "string",
1359
+ # "total_unconfirmed": "string"
1360
+ # }
1361
+ #
1362
+ return self.parse_deposit_address(response, currency)
1363
+
1364
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1365
+ #
1366
+ # {
1367
+ # "account_id": "string",
1368
+ # "address": "string",
1369
+ # "address_meta": [
1370
+ # {
1371
+ # "label": "string",
1372
+ # "value": "string"
1373
+ # }
1374
+ # ],
1375
+ # "asset": "string",
1376
+ # "assigned_at": 0,
1377
+ # "name": "string",
1378
+ # "network": 0,
1379
+ # "qr_code_uri": "string",
1380
+ # "receive_fee": "string",
1381
+ # "total_received": "string",
1382
+ # "total_unconfirmed": "string"
1383
+ # }
1384
+ #
1385
+ currencyId = self.safe_string_upper(depositAddress, 'currency')
1386
+ code = self.safe_currency_code(currencyId, currency)
1387
+ return {
1388
+ 'info': depositAddress,
1389
+ 'currency': code,
1390
+ 'network': None,
1391
+ 'address': self.safe_string(depositAddress, 'address'),
1392
+ 'tag': self.safe_string(depositAddress, 'name'),
1046
1393
  }
1047
1394
 
1048
1395
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):