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
@@ -7,7 +7,7 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.bitopro import ImplicitAPI
8
8
  import hashlib
9
9
  import math
10
- from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
10
+ from ccxt.base.types import Any, Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
13
  from ccxt.base.errors import AuthenticationError
@@ -21,7 +21,7 @@ from ccxt.base.precise import Precise
21
21
 
22
22
  class bitopro(Exchange, ImplicitAPI):
23
23
 
24
- def describe(self):
24
+ def describe(self) -> Any:
25
25
  return self.deep_extend(super(bitopro, self).describe(), {
26
26
  'id': 'bitopro',
27
27
  'name': 'BitoPro',
@@ -36,16 +36,29 @@ class bitopro(Exchange, ImplicitAPI):
36
36
  'swap': False,
37
37
  'future': False,
38
38
  'option': False,
39
+ 'addMargin': False,
40
+ 'borrowCrossMargin': False,
41
+ 'borrowIsolatedMargin': False,
42
+ 'borrowMargin': False,
39
43
  'cancelAllOrders': True,
40
44
  'cancelOrder': True,
41
45
  'cancelOrders': True,
42
46
  'closeAllPositions': False,
43
47
  'closePosition': False,
44
48
  'createOrder': True,
49
+ 'createOrderWithTakeProfitAndStopLoss': False,
50
+ 'createOrderWithTakeProfitAndStopLossWs': False,
51
+ 'createReduceOnlyOrder': False,
52
+ 'createStopOrder': True,
53
+ 'createTriggerOrder': True,
45
54
  'editOrder': False,
46
55
  'fetchBalance': True,
56
+ 'fetchBorrowInterest': False,
57
+ 'fetchBorrowRate': False,
47
58
  'fetchBorrowRateHistories': False,
48
59
  'fetchBorrowRateHistory': False,
60
+ 'fetchBorrowRates': False,
61
+ 'fetchBorrowRatesPerSymbol': False,
49
62
  'fetchClosedOrders': True,
50
63
  'fetchCrossBorrowRate': False,
51
64
  'fetchCrossBorrowRates': False,
@@ -56,19 +69,39 @@ class bitopro(Exchange, ImplicitAPI):
56
69
  'fetchDepositWithdrawFee': 'emulated',
57
70
  'fetchDepositWithdrawFees': True,
58
71
  'fetchFundingHistory': False,
72
+ 'fetchFundingInterval': False,
73
+ 'fetchFundingIntervals': False,
59
74
  'fetchFundingRate': False,
60
75
  'fetchFundingRateHistory': False,
61
76
  'fetchFundingRates': False,
77
+ 'fetchGreeks': False,
62
78
  'fetchIndexOHLCV': False,
63
79
  'fetchIsolatedBorrowRate': False,
64
80
  'fetchIsolatedBorrowRates': False,
81
+ 'fetchIsolatedPositions': False,
82
+ 'fetchLeverage': False,
83
+ 'fetchLeverages': False,
84
+ 'fetchLeverageTiers': False,
85
+ 'fetchLiquidations': False,
86
+ 'fetchLongShortRatio': False,
87
+ 'fetchLongShortRatioHistory': False,
88
+ 'fetchMarginAdjustmentHistory': False,
65
89
  'fetchMarginMode': False,
90
+ 'fetchMarginModes': False,
91
+ 'fetchMarketLeverageTiers': False,
66
92
  'fetchMarkets': True,
67
93
  'fetchMarkOHLCV': False,
94
+ 'fetchMarkPrices': False,
95
+ 'fetchMyLiquidations': False,
96
+ 'fetchMySettlementHistory': False,
68
97
  'fetchMyTrades': True,
69
98
  'fetchOHLCV': True,
99
+ 'fetchOpenInterest': False,
70
100
  'fetchOpenInterestHistory': False,
101
+ 'fetchOpenInterests': False,
71
102
  'fetchOpenOrders': True,
103
+ 'fetchOption': False,
104
+ 'fetchOptionChain': False,
72
105
  'fetchOrder': True,
73
106
  'fetchOrderBook': True,
74
107
  'fetchOrders': False,
@@ -81,6 +114,7 @@ class bitopro(Exchange, ImplicitAPI):
81
114
  'fetchPositionsHistory': False,
82
115
  'fetchPositionsRisk': False,
83
116
  'fetchPremiumIndexOHLCV': False,
117
+ 'fetchSettlementHistory': False,
84
118
  'fetchTicker': True,
85
119
  'fetchTickers': True,
86
120
  'fetchTime': False,
@@ -91,10 +125,16 @@ class bitopro(Exchange, ImplicitAPI):
91
125
  'fetchTransactions': False,
92
126
  'fetchTransfer': False,
93
127
  'fetchTransfers': False,
128
+ 'fetchVolatilityHistory': False,
94
129
  'fetchWithdrawal': True,
95
130
  'fetchWithdrawals': True,
131
+ 'reduceMargin': False,
132
+ 'repayCrossMargin': False,
133
+ 'repayIsolatedMargin': False,
96
134
  'setLeverage': False,
135
+ 'setMargin': False,
97
136
  'setMarginMode': False,
137
+ 'setPositionMode': False,
98
138
  'transfer': False,
99
139
  'withdraw': True,
100
140
  },
@@ -112,7 +152,7 @@ class bitopro(Exchange, ImplicitAPI):
112
152
  '1M': '1M',
113
153
  },
114
154
  'urls': {
115
- 'logo': 'https://user-images.githubusercontent.com/1294454/158227251-3a92a220-9222-453c-9277-977c6677fe71.jpg',
155
+ 'logo': 'https://github.com/user-attachments/assets/affc6337-b95a-44bf-aacd-04f9722364f6',
116
156
  'api': {
117
157
  'rest': 'https://api.bitopro.com/v3',
118
158
  },
@@ -151,6 +191,7 @@ class bitopro(Exchange, ImplicitAPI):
151
191
  'wallet/withdraw/{currency}/id/{id}': 1,
152
192
  'wallet/depositHistory/{currency}': 1,
153
193
  'wallet/withdrawHistory/{currency}': 1,
194
+ 'orders/open': 1,
154
195
  },
155
196
  'post': {
156
197
  'orders/{pair}': 1 / 2, # 1200/m => 20/s => 10/20 = 1/2
@@ -204,6 +245,86 @@ class bitopro(Exchange, ImplicitAPI):
204
245
  'BEP20': 'BSC',
205
246
  'BSC': 'BSC',
206
247
  },
248
+ 'fiatCurrencies': ['TWD'], # the only fiat currency for exchange
249
+ },
250
+ 'features': {
251
+ 'spot': {
252
+ 'sandbox': False,
253
+ 'createOrder': {
254
+ 'marginMode': False,
255
+ 'triggerPrice': True,
256
+ 'triggerPriceType': None,
257
+ 'triggerDirection': True, # todo implement
258
+ 'stopLossPrice': False,
259
+ 'takeProfitPrice': False,
260
+ 'attachedStopLossTakeProfit': None,
261
+ 'timeInForce': {
262
+ 'IOC': False,
263
+ 'FOK': False,
264
+ 'PO': True,
265
+ 'GTD': False,
266
+ },
267
+ 'hedged': False,
268
+ 'trailing': False,
269
+ 'leverage': False,
270
+ 'marketBuyRequiresPrice': False,
271
+ 'marketBuyByCost': False,
272
+ 'selfTradePrevention': False,
273
+ 'iceberg': False,
274
+ },
275
+ 'createOrders': None,
276
+ 'fetchMyTrades': {
277
+ 'marginMode': False,
278
+ 'limit': 1000,
279
+ 'daysBack': 100000,
280
+ 'untilDays': 100000,
281
+ 'symbolRequired': True,
282
+ },
283
+ 'fetchOrder': {
284
+ 'marginMode': False,
285
+ 'trigger': False,
286
+ 'trailing': False,
287
+ 'symbolRequired': True,
288
+ },
289
+ # todo: implement through fetchOrders
290
+ 'fetchOpenOrders': {
291
+ 'marginMode': False,
292
+ 'limit': None,
293
+ 'trigger': False,
294
+ 'trailing': False,
295
+ 'symbolRequired': False,
296
+ },
297
+ 'fetchOrders': {
298
+ 'marginMode': False,
299
+ 'limit': 1000,
300
+ 'daysBack': 100000,
301
+ 'untilDays': 100000,
302
+ 'trigger': False,
303
+ 'trailing': False,
304
+ 'symbolRequired': True,
305
+ },
306
+ 'fetchClosedOrders': {
307
+ 'marginMode': False,
308
+ 'limit': 1000,
309
+ 'daysBack': 100000,
310
+ 'daysBackCanceled': 1,
311
+ 'untilDays': 10000,
312
+ 'trigger': False,
313
+ 'trailing': False,
314
+ 'symbolRequired': True,
315
+ },
316
+ 'fetchOHLCV': {
317
+ 'limit': 1000,
318
+ },
319
+ },
320
+ 'swap': {
321
+ 'linear': None,
322
+ 'inverse': None,
323
+ },
324
+ 'future': {
325
+ 'linear': None,
326
+ 'inverse': None,
327
+ },
207
328
  },
208
329
  'precisionMode': TICK_SIZE,
209
330
  'exceptions': {
@@ -228,12 +349,14 @@ class bitopro(Exchange, ImplicitAPI):
228
349
  async def fetch_currencies(self, params={}) -> Currencies:
229
350
  """
230
351
  fetches all available currencies on an exchange
231
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_currency_info.md
352
+
353
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_currency_info.md
354
+
232
355
  :param dict [params]: extra parameters specific to the exchange API endpoint
233
356
  :returns dict: an associative dictionary of currencies
234
357
  """
235
358
  response = await self.publicGetProvisioningCurrencies(params)
236
- currencies = self.safe_value(response, 'data', [])
359
+ currencies = self.safe_list(response, 'data', [])
237
360
  #
238
361
  # {
239
362
  # "data":[
@@ -251,12 +374,13 @@ class bitopro(Exchange, ImplicitAPI):
251
374
  # }
252
375
  #
253
376
  result: dict = {}
377
+ fiatCurrencies = self.safe_list(self.options, 'fiatCurrencies', [])
254
378
  for i in range(0, len(currencies)):
255
379
  currency = currencies[i]
256
380
  currencyId = self.safe_string(currency, 'currency')
257
381
  code = self.safe_currency_code(currencyId)
258
- deposit = self.safe_value(currency, 'deposit')
259
- withdraw = self.safe_value(currency, 'withdraw')
382
+ deposit = self.safe_bool(currency, 'deposit')
383
+ withdraw = self.safe_bool(currency, 'withdraw')
260
384
  fee = self.safe_number(currency, 'withdrawFee')
261
385
  withdrawMin = self.safe_number(currency, 'minWithdraw')
262
386
  withdrawMax = self.safe_number(currency, 'maxWithdraw')
@@ -270,11 +394,12 @@ class bitopro(Exchange, ImplicitAPI):
270
394
  'max': None,
271
395
  },
272
396
  }
397
+ isFiat = self.in_array(code, fiatCurrencies)
273
398
  result[code] = {
274
399
  'id': currencyId,
275
400
  'code': code,
276
401
  'info': currency,
277
- 'type': None,
402
+ 'type': 'fiat' if isFiat else 'crypto',
278
403
  'name': None,
279
404
  'active': deposit and withdraw,
280
405
  'deposit': deposit,
@@ -282,18 +407,21 @@ class bitopro(Exchange, ImplicitAPI):
282
407
  'fee': fee,
283
408
  'precision': None,
284
409
  'limits': limits,
410
+ 'networks': None,
285
411
  }
286
412
  return result
287
413
 
288
414
  async def fetch_markets(self, params={}) -> List[Market]:
289
415
  """
290
416
  retrieves data on all markets for bitopro
291
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_trading_pair_info.md
417
+
418
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_trading_pair_info.md
419
+
292
420
  :param dict [params]: extra parameters specific to the exchange API endpoint
293
421
  :returns dict[]: an array of objects representing market data
294
422
  """
295
423
  response = await self.publicGetProvisioningTradingPairs()
296
- markets = self.safe_value(response, 'data', [])
424
+ markets = self.safe_list(response, 'data', [])
297
425
  #
298
426
  # {
299
427
  # "data":[
@@ -317,7 +445,7 @@ class bitopro(Exchange, ImplicitAPI):
317
445
  return self.parse_markets(markets)
318
446
 
319
447
  def parse_market(self, market: dict) -> Market:
320
- active = not self.safe_value(market, 'maintain')
448
+ active = not self.safe_bool(market, 'maintain')
321
449
  id = self.safe_string(market, 'pair')
322
450
  uppercaseId = id.upper()
323
451
  baseId = self.safe_string(market, 'base')
@@ -418,7 +546,9 @@ class bitopro(Exchange, ImplicitAPI):
418
546
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
419
547
  """
420
548
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
421
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_ticker_data.md
549
+
550
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_ticker_data.md
551
+
422
552
  :param str symbol: unified symbol of the market to fetch the ticker for
423
553
  :param dict [params]: extra parameters specific to the exchange API endpoint
424
554
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -429,7 +559,7 @@ class bitopro(Exchange, ImplicitAPI):
429
559
  'pair': market['id'],
430
560
  }
431
561
  response = await self.publicGetTickersPair(self.extend(request, params))
432
- ticker = self.safe_value(response, 'data', {})
562
+ ticker = self.safe_dict(response, 'data', {})
433
563
  #
434
564
  # {
435
565
  # "data":{
@@ -448,14 +578,16 @@ class bitopro(Exchange, ImplicitAPI):
448
578
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
449
579
  """
450
580
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
451
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_ticker_data.md
581
+
582
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_ticker_data.md
583
+
452
584
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
453
585
  :param dict [params]: extra parameters specific to the exchange API endpoint
454
586
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
455
587
  """
456
588
  await self.load_markets()
457
589
  response = await self.publicGetTickers()
458
- tickers = self.safe_value(response, 'data', [])
590
+ tickers = self.safe_list(response, 'data', [])
459
591
  #
460
592
  # {
461
593
  # "data":[
@@ -476,7 +608,9 @@ class bitopro(Exchange, ImplicitAPI):
476
608
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
477
609
  """
478
610
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
479
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_orderbook_data.md
611
+
612
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_orderbook_data.md
613
+
480
614
  :param str symbol: unified symbol of the market to fetch the order book for
481
615
  :param int [limit]: the maximum amount of order book entries to return
482
616
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -551,7 +685,7 @@ class bitopro(Exchange, ImplicitAPI):
551
685
  type = self.safe_string_lower(trade, 'type')
552
686
  side = self.safe_string_lower(trade, 'action')
553
687
  if side is None:
554
- isBuyer = self.safe_value(trade, 'isBuyer')
688
+ isBuyer = self.safe_bool(trade, 'isBuyer')
555
689
  if isBuyer:
556
690
  side = 'buy'
557
691
  else:
@@ -568,7 +702,7 @@ class bitopro(Exchange, ImplicitAPI):
568
702
  'currency': feeSymbol,
569
703
  'rate': None,
570
704
  }
571
- isTaker = self.safe_value(trade, 'isTaker')
705
+ isTaker = self.safe_bool(trade, 'isTaker')
572
706
  takerOrMaker = None
573
707
  if isTaker is not None:
574
708
  if isTaker:
@@ -594,7 +728,9 @@ class bitopro(Exchange, ImplicitAPI):
594
728
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
595
729
  """
596
730
  get the list of most recent trades for a particular symbol
597
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_trades_data.md
731
+
732
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_trades_data.md
733
+
598
734
  :param str symbol: unified symbol of the market to fetch trades for
599
735
  :param int [since]: timestamp in ms of the earliest trade to fetch
600
736
  :param int [limit]: the maximum amount of trades to fetch
@@ -607,7 +743,7 @@ class bitopro(Exchange, ImplicitAPI):
607
743
  'pair': market['id'],
608
744
  }
609
745
  response = await self.publicGetTradesPair(self.extend(request, params))
610
- trades = self.safe_value(response, 'data', [])
746
+ trades = self.safe_list(response, 'data', [])
611
747
  #
612
748
  # {
613
749
  # "data":[
@@ -625,13 +761,15 @@ class bitopro(Exchange, ImplicitAPI):
625
761
  async def fetch_trading_fees(self, params={}) -> TradingFees:
626
762
  """
627
763
  fetch the trading fees for multiple markets
628
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_limitations_and_fees.md
764
+
765
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_limitations_and_fees.md
766
+
629
767
  :param dict [params]: extra parameters specific to the exchange API endpoint
630
768
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
631
769
  """
632
770
  await self.load_markets()
633
771
  response = await self.publicGetProvisioningLimitationsAndFees(params)
634
- tradingFeeRate = self.safe_value(response, 'tradingFeeRate', {})
772
+ tradingFeeRate = self.safe_dict(response, 'tradingFeeRate', {})
635
773
  first = self.safe_value(tradingFeeRate, 0)
636
774
  #
637
775
  # {
@@ -722,7 +860,9 @@ class bitopro(Exchange, ImplicitAPI):
722
860
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
723
861
  """
724
862
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
725
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_ohlc_data.md
863
+
864
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_ohlc_data.md
865
+
726
866
  :param str symbol: unified symbol of the market to fetch OHLCV data for
727
867
  :param str timeframe: the length of time each candle represents
728
868
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -753,7 +893,7 @@ class bitopro(Exchange, ImplicitAPI):
753
893
  request['from'] = int(math.floor(since / 1000))
754
894
  request['to'] = self.sum(request['from'], limit * timeframeInSeconds)
755
895
  response = await self.publicGetTradingHistoryPair(self.extend(request, params))
756
- data = self.safe_value(response, 'data', [])
896
+ data = self.safe_list(response, 'data', [])
757
897
  #
758
898
  # {
759
899
  # "data":[
@@ -835,13 +975,15 @@ class bitopro(Exchange, ImplicitAPI):
835
975
  async def fetch_balance(self, params={}) -> Balances:
836
976
  """
837
977
  query for balance and get the amount of funds available for trading or funds locked in orders
838
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_account_balance.md
978
+
979
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_account_balance.md
980
+
839
981
  :param dict [params]: extra parameters specific to the exchange API endpoint
840
982
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
841
983
  """
842
984
  await self.load_markets()
843
985
  response = await self.privateGetAccountsBalance(params)
844
- balances = self.safe_value(response, 'data', [])
986
+ balances = self.safe_list(response, 'data', [])
845
987
  #
846
988
  # {
847
989
  # "data":[
@@ -943,7 +1085,6 @@ class bitopro(Exchange, ImplicitAPI):
943
1085
  'postOnly': postOnly,
944
1086
  'side': side,
945
1087
  'price': price,
946
- 'stopPrice': None,
947
1088
  'triggerPrice': None,
948
1089
  'amount': amount,
949
1090
  'cost': None,
@@ -959,13 +1100,16 @@ class bitopro(Exchange, ImplicitAPI):
959
1100
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
960
1101
  """
961
1102
  create a trade order
962
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/create_an_order.md
1103
+
1104
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/create_an_order.md
1105
+
963
1106
  :param str symbol: unified symbol of the market to create an order in
964
1107
  :param str type: 'market' or 'limit'
965
1108
  :param str side: 'buy' or 'sell'
966
1109
  :param float amount: how much of currency you want to trade in units of base currency
967
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1110
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
968
1111
  :param dict [params]: extra parameters specific to the exchange API endpoint
1112
+ :param dict [params.triggerPrice]: the price at which a trigger order is triggered at
969
1113
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
970
1114
  """
971
1115
  await self.load_markets()
@@ -982,12 +1126,12 @@ class bitopro(Exchange, ImplicitAPI):
982
1126
  request['price'] = self.price_to_precision(symbol, price)
983
1127
  if orderType == 'STOP_LIMIT':
984
1128
  request['price'] = self.price_to_precision(symbol, price)
985
- stopPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
1129
+ triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
986
1130
  params = self.omit(params, ['triggerPrice', 'stopPrice'])
987
- if stopPrice is None:
988
- raise InvalidOrder(self.id + ' createOrder() requires a stopPrice parameter for ' + orderType + ' orders')
1131
+ if triggerPrice is None:
1132
+ raise InvalidOrder(self.id + ' createOrder() requires a triggerPrice parameter for ' + orderType + ' orders')
989
1133
  else:
990
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
1134
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
991
1135
  condition = self.safe_string(params, 'condition')
992
1136
  if condition is None:
993
1137
  raise InvalidOrder(self.id + ' createOrder() requires a condition parameter for ' + orderType + ' orders')
@@ -1012,7 +1156,9 @@ class bitopro(Exchange, ImplicitAPI):
1012
1156
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1013
1157
  """
1014
1158
  cancels an open order
1015
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/cancel_an_order.md
1159
+
1160
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/cancel_an_order.md
1161
+
1016
1162
  :param str id: order id
1017
1163
  :param str symbol: unified symbol of the market the order was made in
1018
1164
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1038,10 +1184,26 @@ class bitopro(Exchange, ImplicitAPI):
1038
1184
  #
1039
1185
  return self.parse_order(response, market)
1040
1186
 
1041
- async def cancel_orders(self, ids, symbol: Str = None, params={}):
1187
+ def parse_cancel_orders(self, data):
1188
+ dataKeys = list(data.keys())
1189
+ orders = []
1190
+ for i in range(0, len(dataKeys)):
1191
+ marketId = dataKeys[i]
1192
+ orderIds = data[marketId]
1193
+ for j in range(0, len(orderIds)):
1194
+ orders.append(self.safe_order({
1195
+ 'info': orderIds[j],
1196
+ 'id': orderIds[j],
1197
+ 'symbol': self.safe_symbol(marketId),
1198
+ }))
1199
+ return orders
1200
+
1201
+ async def cancel_orders(self, ids, symbol: Str = None, params={}) -> List[Order]:
1042
1202
  """
1043
1203
  cancel multiple orders
1044
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/cancel_batch_orders.md
1204
+
1205
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/cancel_batch_orders.md
1206
+
1045
1207
  :param str[] ids: order ids
1046
1208
  :param str symbol: unified market symbol
1047
1209
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1065,12 +1227,15 @@ class bitopro(Exchange, ImplicitAPI):
1065
1227
  # }
1066
1228
  # }
1067
1229
  #
1068
- return response
1230
+ data = self.safe_dict(response, 'data')
1231
+ return self.parse_cancel_orders(data)
1069
1232
 
1070
- async def cancel_all_orders(self, symbol: Str = None, params={}):
1233
+ async def cancel_all_orders(self, symbol: Str = None, params={}) -> List[Order]:
1071
1234
  """
1072
1235
  cancel all open orders
1073
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/cancel_all_orders.md
1236
+
1237
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/cancel_all_orders.md
1238
+
1074
1239
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1075
1240
  :param dict [params]: extra parameters specific to the exchange API endpoint
1076
1241
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1086,7 +1251,7 @@ class bitopro(Exchange, ImplicitAPI):
1086
1251
  response = await self.privateDeleteOrdersPair(self.extend(request, params))
1087
1252
  else:
1088
1253
  response = await self.privateDeleteOrdersAll(self.extend(request, params))
1089
- result = self.safe_value(response, 'data', {})
1254
+ data = self.safe_dict(response, 'data', {})
1090
1255
  #
1091
1256
  # {
1092
1257
  # "data":{
@@ -1097,12 +1262,15 @@ class bitopro(Exchange, ImplicitAPI):
1097
1262
  # }
1098
1263
  # }
1099
1264
  #
1100
- return result
1265
+ return self.parse_cancel_orders(data)
1101
1266
 
1102
1267
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1103
1268
  """
1104
1269
  fetches information on an order made by the user
1105
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_an_order_data.md
1270
+
1271
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_an_order_data.md
1272
+
1273
+ :param str id: the order id
1106
1274
  :param str symbol: unified symbol of the market the order was made in
1107
1275
  :param dict [params]: extra parameters specific to the exchange API endpoint
1108
1276
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1144,7 +1312,9 @@ class bitopro(Exchange, ImplicitAPI):
1144
1312
  async def fetch_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1145
1313
  """
1146
1314
  fetches information on multiple orders made by the user
1147
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_orders_data.md
1315
+
1316
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_orders_data.md
1317
+
1148
1318
  :param str symbol: unified market symbol of the market orders were made in
1149
1319
  :param int [since]: the earliest time in ms to fetch orders for
1150
1320
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1167,7 +1337,7 @@ class bitopro(Exchange, ImplicitAPI):
1167
1337
  if limit is not None:
1168
1338
  request['limit'] = limit
1169
1339
  response = await self.privateGetOrdersAllPair(self.extend(request, params))
1170
- orders = self.safe_value(response, 'data')
1340
+ orders = self.safe_list(response, 'data', [])
1171
1341
  if orders is None:
1172
1342
  orders = []
1173
1343
  #
@@ -1199,15 +1369,33 @@ class bitopro(Exchange, ImplicitAPI):
1199
1369
  return self.parse_orders(orders, market, since, limit)
1200
1370
 
1201
1371
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1202
- request: dict = {
1203
- 'statusKind': 'OPEN',
1204
- }
1205
- return await self.fetch_orders(symbol, since, limit, self.extend(request, params))
1372
+ """
1373
+ fetch all unfilled currently open orders
1374
+
1375
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_open_orders_data.md
1376
+
1377
+ :param str symbol: unified market symbol
1378
+ :param int [since]: the earliest time in ms to fetch open orders for
1379
+ :param int [limit]: the maximum number of open orders structures to retrieve
1380
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1381
+ :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1382
+ """
1383
+ await self.load_markets()
1384
+ request: dict = {}
1385
+ market = None
1386
+ if symbol is not None:
1387
+ market = self.market(symbol)
1388
+ request['pair'] = market['id']
1389
+ response = await self.privateGetOrdersOpen(self.extend(request, params))
1390
+ orders = self.safe_list(response, 'data', [])
1391
+ return self.parse_orders(orders, market, since, limit)
1206
1392
 
1207
1393
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1208
1394
  """
1209
1395
  fetches information on multiple closed orders made by the user
1210
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_orders_data.md
1396
+
1397
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_orders_data.md
1398
+
1211
1399
  :param str symbol: unified market symbol of the market orders were made in
1212
1400
  :param int [since]: the earliest time in ms to fetch orders for
1213
1401
  :param int [limit]: the maximum number of order structures to retrieve
@@ -1222,7 +1410,9 @@ class bitopro(Exchange, ImplicitAPI):
1222
1410
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1223
1411
  """
1224
1412
  fetch all trades made by the user
1225
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_trades_data.md
1413
+
1414
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_trades_data.md
1415
+
1226
1416
  :param str symbol: unified market symbol
1227
1417
  :param int [since]: the earliest time in ms to fetch trades for
1228
1418
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1237,7 +1427,7 @@ class bitopro(Exchange, ImplicitAPI):
1237
1427
  'pair': market['id'],
1238
1428
  }
1239
1429
  response = await self.privateGetOrdersTradesPair(self.extend(request, params))
1240
- trades = self.safe_value(response, 'data', [])
1430
+ trades = self.safe_list(response, 'data', [])
1241
1431
  #
1242
1432
  # {
1243
1433
  # "data":[
@@ -1357,7 +1547,9 @@ class bitopro(Exchange, ImplicitAPI):
1357
1547
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1358
1548
  """
1359
1549
  fetch all deposits made to an account
1360
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_deposit_invoices_data.md
1550
+
1551
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_deposit_invoices_data.md
1552
+
1361
1553
  :param str code: unified currency code
1362
1554
  :param int [since]: the earliest time in ms to fetch deposits for
1363
1555
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -1379,7 +1571,7 @@ class bitopro(Exchange, ImplicitAPI):
1379
1571
  if limit is not None:
1380
1572
  request['limit'] = limit
1381
1573
  response = await self.privateGetWalletDepositHistoryCurrency(self.extend(request, params))
1382
- result = self.safe_value(response, 'data', [])
1574
+ result = self.safe_list(response, 'data', [])
1383
1575
  #
1384
1576
  # {
1385
1577
  # "data":[
@@ -1404,7 +1596,9 @@ class bitopro(Exchange, ImplicitAPI):
1404
1596
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1405
1597
  """
1406
1598
  fetch all withdrawals made from an account
1407
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_withdraw_invoices_data.md
1599
+
1600
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_withdraw_invoices_data.md
1601
+
1408
1602
  :param str code: unified currency code
1409
1603
  :param int [since]: the earliest time in ms to fetch withdrawals for
1410
1604
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -1426,7 +1620,7 @@ class bitopro(Exchange, ImplicitAPI):
1426
1620
  if limit is not None:
1427
1621
  request['limit'] = limit
1428
1622
  response = await self.privateGetWalletWithdrawHistoryCurrency(self.extend(request, params))
1429
- result = self.safe_value(response, 'data', [])
1623
+ result = self.safe_list(response, 'data', [])
1430
1624
  #
1431
1625
  # {
1432
1626
  # "data":[
@@ -1450,7 +1644,9 @@ class bitopro(Exchange, ImplicitAPI):
1450
1644
  async def fetch_withdrawal(self, id: str, code: Str = None, params={}):
1451
1645
  """
1452
1646
  fetch data on a currency withdrawal via the withdrawal id
1453
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_an_withdraw_invoice_data.md
1647
+
1648
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/get_an_withdraw_invoice_data.md
1649
+
1454
1650
  :param str id: withdrawal id
1455
1651
  :param str code: unified currency code of the currency withdrawn, default is None
1456
1652
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1465,7 +1661,7 @@ class bitopro(Exchange, ImplicitAPI):
1465
1661
  'currency': currency['id'],
1466
1662
  }
1467
1663
  response = await self.privateGetWalletWithdrawCurrencySerial(self.extend(request, params))
1468
- result = self.safe_value(response, 'data', {})
1664
+ result = self.safe_dict(response, 'data', {})
1469
1665
  #
1470
1666
  # {
1471
1667
  # "data":{
@@ -1484,10 +1680,12 @@ class bitopro(Exchange, ImplicitAPI):
1484
1680
  #
1485
1681
  return self.parse_transaction(result, currency)
1486
1682
 
1487
- async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1683
+ async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
1488
1684
  """
1489
1685
  make a withdrawal
1490
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/create_an_withdraw_invoice.md
1686
+
1687
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/private/create_an_withdraw_invoice.md
1688
+
1491
1689
  :param str code: unified currency code
1492
1690
  :param float amount: the amount to withdraw
1493
1691
  :param str address: the address to withdraw to
@@ -1505,7 +1703,7 @@ class bitopro(Exchange, ImplicitAPI):
1505
1703
  'address': address,
1506
1704
  }
1507
1705
  if 'network' in params:
1508
- networks = self.safe_value(self.options, 'networks', {})
1706
+ networks = self.safe_dict(self.options, 'networks', {})
1509
1707
  requestedNetwork = self.safe_string_upper(params, 'network')
1510
1708
  params = self.omit(params, ['network'])
1511
1709
  networkId = self.safe_string(networks, requestedNetwork)
@@ -1515,7 +1713,7 @@ class bitopro(Exchange, ImplicitAPI):
1515
1713
  if tag is not None:
1516
1714
  request['message'] = tag
1517
1715
  response = await self.privatePostWalletWithdrawCurrency(self.extend(request, params))
1518
- result = self.safe_value(response, 'data', {})
1716
+ result = self.safe_dict(response, 'data', {})
1519
1717
  #
1520
1718
  # {
1521
1719
  # "data":{
@@ -1558,7 +1756,9 @@ class bitopro(Exchange, ImplicitAPI):
1558
1756
  async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
1559
1757
  """
1560
1758
  fetch deposit and withdraw fees
1561
- :see: https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_currency_info.md
1759
+
1760
+ https://github.com/bitoex/bitopro-offical-api-docs/blob/master/api/v3/public/get_currency_info.md
1761
+
1562
1762
  :param str[]|None codes: list of unified currency codes
1563
1763
  :param dict [params]: extra parameters specific to the exchange API endpoint
1564
1764
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`