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
ccxt/probit.py CHANGED
@@ -6,20 +6,21 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.probit import ImplicitAPI
8
8
  import math
9
- from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
9
+ from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
13
13
  from ccxt.base.errors import ArgumentsRequired
14
14
  from ccxt.base.errors import BadRequest
15
15
  from ccxt.base.errors import BadSymbol
16
- from ccxt.base.errors import BadResponse
16
+ from ccxt.base.errors import MarketClosed
17
17
  from ccxt.base.errors import InsufficientFunds
18
18
  from ccxt.base.errors import InvalidAddress
19
19
  from ccxt.base.errors import InvalidOrder
20
20
  from ccxt.base.errors import DDoSProtection
21
21
  from ccxt.base.errors import RateLimitExceeded
22
22
  from ccxt.base.errors import ExchangeNotAvailable
23
+ from ccxt.base.errors import BadResponse
23
24
  from ccxt.base.decimal_to_precision import TRUNCATE
24
25
  from ccxt.base.decimal_to_precision import TICK_SIZE
25
26
  from ccxt.base.precise import Precise
@@ -27,7 +28,7 @@ from ccxt.base.precise import Precise
27
28
 
28
29
  class probit(Exchange, ImplicitAPI):
29
30
 
30
- def describe(self):
31
+ def describe(self) -> Any:
31
32
  return self.deep_extend(super(probit, self).describe(), {
32
33
  'id': 'probit',
33
34
  'name': 'ProBit',
@@ -42,7 +43,12 @@ class probit(Exchange, ImplicitAPI):
42
43
  'future': False,
43
44
  'option': False,
44
45
  'addMargin': False,
46
+ 'borrowCrossMargin': False,
47
+ 'borrowIsolatedMargin': False,
48
+ 'borrowMargin': False,
45
49
  'cancelOrder': True,
50
+ 'closeAllPositions': False,
51
+ 'closePosition': False,
46
52
  'createMarketBuyOrderWithCost': True,
47
53
  'createMarketOrder': True,
48
54
  'createMarketOrderWithCost': False,
@@ -52,33 +58,58 @@ class probit(Exchange, ImplicitAPI):
52
58
  'createStopLimitOrder': False,
53
59
  'createStopMarketOrder': False,
54
60
  'createStopOrder': False,
61
+ 'fetchAllGreeks': False,
55
62
  'fetchBalance': True,
63
+ 'fetchBorrowInterest': False,
64
+ 'fetchBorrowRate': False,
56
65
  'fetchBorrowRateHistories': False,
57
66
  'fetchBorrowRateHistory': False,
67
+ 'fetchBorrowRates': False,
68
+ 'fetchBorrowRatesPerSymbol': False,
58
69
  'fetchClosedOrders': True,
59
70
  'fetchCrossBorrowRate': False,
60
71
  'fetchCrossBorrowRates': False,
61
72
  'fetchCurrencies': True,
62
73
  'fetchDepositAddress': True,
63
74
  'fetchDepositAddresses': True,
75
+ 'fetchDepositAddressesByNetwork': False,
64
76
  'fetchDeposits': True,
65
77
  'fetchDepositsWithdrawals': True,
66
78
  'fetchFundingHistory': False,
79
+ 'fetchFundingInterval': False,
80
+ 'fetchFundingIntervals': False,
67
81
  'fetchFundingRate': False,
68
82
  'fetchFundingRateHistory': False,
69
83
  'fetchFundingRates': False,
84
+ 'fetchGreeks': False,
70
85
  'fetchIndexOHLCV': False,
71
86
  'fetchIsolatedBorrowRate': False,
72
87
  'fetchIsolatedBorrowRates': False,
88
+ 'fetchIsolatedPositions': False,
73
89
  'fetchLeverage': False,
90
+ 'fetchLeverages': False,
74
91
  'fetchLeverageTiers': False,
92
+ 'fetchLiquidations': False,
93
+ 'fetchLongShortRatio': False,
94
+ 'fetchLongShortRatioHistory': False,
95
+ 'fetchMarginAdjustmentHistory': False,
75
96
  'fetchMarginMode': False,
97
+ 'fetchMarginModes': False,
98
+ 'fetchMarketLeverageTiers': False,
76
99
  'fetchMarkets': True,
77
100
  'fetchMarkOHLCV': False,
101
+ 'fetchMarkPrice': False,
102
+ 'fetchMarkPrices': False,
103
+ 'fetchMyLiquidations': False,
104
+ 'fetchMySettlementHistory': False,
78
105
  'fetchMyTrades': True,
79
106
  'fetchOHLCV': True,
107
+ 'fetchOpenInterest': False,
80
108
  'fetchOpenInterestHistory': False,
109
+ 'fetchOpenInterests': False,
81
110
  'fetchOpenOrders': True,
111
+ 'fetchOption': False,
112
+ 'fetchOptionChain': False,
82
113
  'fetchOrder': True,
83
114
  'fetchOrderBook': True,
84
115
  'fetchPosition': False,
@@ -89,6 +120,7 @@ class probit(Exchange, ImplicitAPI):
89
120
  'fetchPositionsHistory': False,
90
121
  'fetchPositionsRisk': False,
91
122
  'fetchPremiumIndexOHLCV': False,
123
+ 'fetchSettlementHistory': False,
92
124
  'fetchTicker': True,
93
125
  'fetchTickers': True,
94
126
  'fetchTime': True,
@@ -98,11 +130,16 @@ class probit(Exchange, ImplicitAPI):
98
130
  'fetchTransactions': 'emulated',
99
131
  'fetchTransfer': False,
100
132
  'fetchTransfers': False,
133
+ 'fetchUnderlyingAssets': False,
134
+ 'fetchVolatilityHistory': False,
101
135
  'fetchWithdrawal': False,
102
136
  'fetchWithdrawals': True,
103
137
  'reduceMargin': False,
104
- 'sandbox': True,
138
+ 'repayCrossMargin': False,
139
+ 'repayIsolatedMargin': False,
140
+ 'sandbox': False,
105
141
  'setLeverage': False,
142
+ 'setMargin': False,
106
143
  'setMarginMode': False,
107
144
  'setPositionMode': False,
108
145
  'signIn': True,
@@ -183,6 +220,77 @@ class probit(Exchange, ImplicitAPI):
183
220
  'taker': self.parse_number('0.002'),
184
221
  },
185
222
  },
223
+ 'features': {
224
+ 'spot': {
225
+ 'sandbox': False,
226
+ 'createOrder': {
227
+ 'marginMode': False,
228
+ 'triggerPrice': False,
229
+ 'triggerDirection': False,
230
+ 'triggerPriceType': None,
231
+ 'stopLossPrice': False,
232
+ 'takeProfitPrice': False,
233
+ 'attachedStopLossTakeProfit': None,
234
+ # todo
235
+ 'timeInForce': {
236
+ 'IOC': True,
237
+ 'FOK': True,
238
+ 'PO': False,
239
+ 'GTD': False,
240
+ },
241
+ 'hedged': False,
242
+ 'trailing': False,
243
+ 'leverage': False,
244
+ 'marketBuyByCost': True,
245
+ 'marketBuyRequiresPrice': False,
246
+ 'selfTradePrevention': False,
247
+ 'iceberg': False,
248
+ },
249
+ 'createOrders': None,
250
+ 'fetchMyTrades': {
251
+ 'marginMode': False,
252
+ 'limit': 1000,
253
+ 'daysBack': 100000, # todo
254
+ 'untilDays': 100000, # todo
255
+ 'symbolRequired': False,
256
+ },
257
+ 'fetchOrder': {
258
+ 'marginMode': False,
259
+ 'trigger': False,
260
+ 'trailing': False,
261
+ 'symbolRequired': True,
262
+ },
263
+ 'fetchOpenOrders': {
264
+ 'marginMode': False,
265
+ 'limit': None,
266
+ 'trigger': False,
267
+ 'trailing': False,
268
+ 'symbolRequired': False,
269
+ },
270
+ 'fetchOrders': None,
271
+ 'fetchClosedOrders': {
272
+ 'marginMode': False,
273
+ 'limit': 1000,
274
+ 'daysBack': 100000, # todo
275
+ 'daysBackCanceled': 1, # todo
276
+ 'untilDays': 90,
277
+ 'trigger': False,
278
+ 'trailing': False,
279
+ 'symbolRequired': False,
280
+ },
281
+ 'fetchOHLCV': {
282
+ 'limit': 4000,
283
+ },
284
+ },
285
+ 'swap': {
286
+ 'linear': None,
287
+ 'inverse': None,
288
+ },
289
+ 'future': {
290
+ 'linear': None,
291
+ 'inverse': None,
292
+ },
293
+ },
186
294
  'exceptions': {
187
295
  'exact': {
188
296
  'UNAUTHORIZED': AuthenticationError,
@@ -194,7 +302,7 @@ class probit(Exchange, ImplicitAPI):
194
302
  'RATE_LIMIT_EXCEEDED': RateLimitExceeded, # You are sending requests too frequently. Please try it later.
195
303
  'MARKET_UNAVAILABLE': ExchangeNotAvailable, # Market is closed today
196
304
  'INVALID_MARKET': BadSymbol, # Requested market is not exist
197
- 'MARKET_CLOSED': BadSymbol, # {"errorCode":"MARKET_CLOSED"}
305
+ 'MARKET_CLOSED': MarketClosed, # {"errorCode":"MARKET_CLOSED"}
198
306
  'MARKET_NOT_FOUND': BadSymbol, # {"errorCode":"MARKET_NOT_FOUND","message":"8e2b8496-0a1e-5beb-b990-a205b902eabe","details":{}}
199
307
  'INVALID_CURRENCY': BadRequest, # Requested currency is not exist on ProBit system
200
308
  'TOO_MANY_OPEN_ORDERS': DDoSProtection, # Too many open orders
@@ -243,7 +351,9 @@ class probit(Exchange, ImplicitAPI):
243
351
 
244
352
  def fetch_markets(self, params={}) -> List[Market]:
245
353
  """
246
- :see: https://docs-en.probit.com/reference/market
354
+
355
+ https://docs-en.probit.com/reference/market
356
+
247
357
  retrieves data on all markets for probit
248
358
  :param dict [params]: extra parameters specific to the exchange API endpoint
249
359
  :returns dict[]: an array of objects representing market data
@@ -283,6 +393,8 @@ class probit(Exchange, ImplicitAPI):
283
393
  base = self.safe_currency_code(baseId)
284
394
  quote = self.safe_currency_code(quoteId)
285
395
  closed = self.safe_bool(market, 'closed', False)
396
+ showInUI = self.safe_bool(market, 'show_in_ui', True)
397
+ active = not closed and showInUI
286
398
  takerFeeRate = self.safe_string(market, 'taker_fee_rate')
287
399
  taker = Precise.string_div(takerFeeRate, '100')
288
400
  makerFeeRate = self.safe_string(market, 'maker_fee_rate')
@@ -302,7 +414,7 @@ class probit(Exchange, ImplicitAPI):
302
414
  'swap': False,
303
415
  'future': False,
304
416
  'option': False,
305
- 'active': not closed,
417
+ 'active': active,
306
418
  'contract': False,
307
419
  'linear': None,
308
420
  'inverse': None,
@@ -342,7 +454,9 @@ class probit(Exchange, ImplicitAPI):
342
454
 
343
455
  def fetch_currencies(self, params={}) -> Currencies:
344
456
  """
345
- :see: https://docs-en.probit.com/reference/currency
457
+
458
+ https://docs-en.probit.com/reference/currency
459
+
346
460
  fetches all available currencies on an exchange
347
461
  :param dict [params]: extra parameters specific to the exchange API endpoint
348
462
  :returns dict: an associative dictionary of currencies
@@ -404,32 +518,23 @@ class probit(Exchange, ImplicitAPI):
404
518
  # ]
405
519
  # }
406
520
  #
407
- currencies = self.safe_value(response, 'data', [])
521
+ currencies = self.safe_list(response, 'data', [])
408
522
  result: dict = {}
409
523
  for i in range(0, len(currencies)):
410
524
  currency = currencies[i]
411
525
  id = self.safe_string(currency, 'id')
412
526
  code = self.safe_currency_code(id)
413
- displayName = self.safe_value(currency, 'display_name')
527
+ displayName = self.safe_dict(currency, 'display_name')
414
528
  name = self.safe_string(displayName, 'en-us')
415
- platforms = self.safe_value(currency, 'platform', [])
529
+ platforms = self.safe_list(currency, 'platform', [])
416
530
  platformsByPriority = self.sort_by(platforms, 'priority')
417
- platform = None
418
531
  networkList: dict = {}
419
532
  for j in range(0, len(platformsByPriority)):
420
533
  network = platformsByPriority[j]
421
534
  idInner = self.safe_string(network, 'id')
422
535
  networkCode = self.network_id_to_code(idInner)
423
- currentDepositSuspended = self.safe_value(network, 'deposit_suspended')
424
- currentWithdrawalSuspended = self.safe_value(network, 'withdrawal_suspended')
425
- currentDeposit = not currentDepositSuspended
426
- currentWithdraw = not currentWithdrawalSuspended
427
- currentActive = currentDeposit and currentWithdraw
428
- if currentActive:
429
- platform = network
430
- precision = self.parse_precision(self.safe_string(network, 'precision'))
431
- withdrawFee = self.safe_value(network, 'withdrawal_fee', [])
432
- networkFee = self.safe_value(withdrawFee, 0, {})
536
+ withdrawFee = self.safe_list(network, 'withdrawal_fee', [])
537
+ networkFee = self.safe_dict(withdrawFee, 0, {})
433
538
  for k in range(0, len(withdrawFee)):
434
539
  withdrawPlatform = withdrawFee[k]
435
540
  feeCurrencyId = self.safe_string(withdrawPlatform, 'currency_id')
@@ -439,11 +544,11 @@ class probit(Exchange, ImplicitAPI):
439
544
  networkList[networkCode] = {
440
545
  'id': idInner,
441
546
  'network': networkCode,
442
- 'active': currentActive,
443
- 'deposit': currentDeposit,
444
- 'withdraw': currentWithdraw,
547
+ 'active': None,
548
+ 'deposit': not self.safe_bool(network, 'deposit_suspended'),
549
+ 'withdraw': not self.safe_bool(network, 'withdrawal_suspended'),
445
550
  'fee': self.safe_number(networkFee, 'amount'),
446
- 'precision': self.parse_number(precision),
551
+ 'precision': self.parse_number(self.parse_precision(self.safe_string(network, 'precision'))),
447
552
  'limits': {
448
553
  'withdraw': {
449
554
  'min': self.safe_number(network, 'min_withdrawal_amount'),
@@ -456,52 +561,33 @@ class probit(Exchange, ImplicitAPI):
456
561
  },
457
562
  'info': network,
458
563
  }
459
- if platform is None:
460
- platform = self.safe_value(platformsByPriority, 0, {})
461
- depositSuspended = self.safe_value(platform, 'deposit_suspended')
462
- withdrawalSuspended = self.safe_value(platform, 'withdrawal_suspended')
463
- deposit = not depositSuspended
464
- withdraw = not withdrawalSuspended
465
- active = deposit and withdraw
466
- withdrawalFees = self.safe_value(platform, 'withdrawal_fee', {})
467
- fees = []
468
- # sometimes the withdrawal fee is an empty object
469
- # [{'amount': '0.015', 'priority': 1, 'currency_id': 'ETH'}, {}]
470
- for j in range(0, len(withdrawalFees)):
471
- withdrawalFeeInner = withdrawalFees[j]
472
- amount = self.safe_number(withdrawalFeeInner, 'amount')
473
- priority = self.safe_integer(withdrawalFeeInner, 'priority')
474
- if (amount is not None) and (priority is not None):
475
- fees.append(withdrawalFeeInner)
476
- withdrawalFeesByPriority = self.sort_by(fees, 'priority')
477
- withdrawalFee = self.safe_value(withdrawalFeesByPriority, 0, {})
478
- fee = self.safe_number(withdrawalFee, 'amount')
479
- result[code] = {
564
+ result[code] = self.safe_currency_structure({
480
565
  'id': id,
481
566
  'code': code,
482
567
  'info': currency,
483
568
  'name': name,
484
- 'active': active,
485
- 'deposit': deposit,
486
- 'withdraw': withdraw,
487
- 'fee': fee,
488
- 'precision': self.parse_number(self.parse_precision(self.safe_string(platform, 'precision'))),
569
+ 'active': None,
570
+ 'deposit': None,
571
+ 'withdraw': None,
572
+ 'type': 'crypto',
573
+ 'fee': None,
574
+ 'precision': None,
489
575
  'limits': {
490
576
  'amount': {
491
577
  'min': None,
492
578
  'max': None,
493
579
  },
494
580
  'deposit': {
495
- 'min': self.safe_number(platform, 'min_deposit_amount'),
581
+ 'min': None,
496
582
  'max': None,
497
583
  },
498
584
  'withdraw': {
499
- 'min': self.safe_number(platform, 'min_withdrawal_amount'),
585
+ 'min': None,
500
586
  'max': None,
501
587
  },
502
588
  },
503
589
  'networks': networkList,
504
- }
590
+ })
505
591
  return result
506
592
 
507
593
  def parse_balance(self, response) -> Balances:
@@ -523,7 +609,9 @@ class probit(Exchange, ImplicitAPI):
523
609
 
524
610
  def fetch_balance(self, params={}) -> Balances:
525
611
  """
526
- :see: https://docs-en.probit.com/reference/balance
612
+
613
+ https://docs-en.probit.com/reference/balance
614
+
527
615
  query for balance and get the amount of funds available for trading or funds locked in orders
528
616
  :param dict [params]: extra parameters specific to the exchange API endpoint
529
617
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
@@ -545,7 +633,9 @@ class probit(Exchange, ImplicitAPI):
545
633
 
546
634
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
547
635
  """
548
- :see: https://docs-en.probit.com/reference/order_book
636
+
637
+ https://docs-en.probit.com/reference/order_book
638
+
549
639
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
550
640
  :param str symbol: unified symbol of the market to fetch the order book for
551
641
  :param int [limit]: the maximum amount of order book entries to return
@@ -573,7 +663,9 @@ class probit(Exchange, ImplicitAPI):
573
663
 
574
664
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
575
665
  """
576
- :see: https://docs-en.probit.com/reference/ticker
666
+
667
+ https://docs-en.probit.com/reference/ticker
668
+
577
669
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
578
670
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
579
671
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -606,7 +698,9 @@ class probit(Exchange, ImplicitAPI):
606
698
 
607
699
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
608
700
  """
609
- :see: https://docs-en.probit.com/reference/ticker
701
+
702
+ https://docs-en.probit.com/reference/ticker
703
+
610
704
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
611
705
  :param str symbol: unified symbol of the market to fetch the ticker for
612
706
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -685,7 +779,9 @@ class probit(Exchange, ImplicitAPI):
685
779
 
686
780
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
687
781
  """
688
- :see: https://docs-en.probit.com/reference/trade
782
+
783
+ https://docs-en.probit.com/reference/trade
784
+
689
785
  fetch all trades made by the user
690
786
  :param str symbol: unified market symbol
691
787
  :param int [since]: the earliest time in ms to fetch trades for
@@ -734,7 +830,9 @@ class probit(Exchange, ImplicitAPI):
734
830
 
735
831
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
736
832
  """
737
- :see: https://docs-en.probit.com/reference/trade-1
833
+
834
+ https://docs-en.probit.com/reference/trade-1
835
+
738
836
  get the list of most recent trades for a particular symbol
739
837
  :param str symbol: unified symbol of the market to fetch trades for
740
838
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -847,9 +945,11 @@ class probit(Exchange, ImplicitAPI):
847
945
  'fee': fee,
848
946
  }, market)
849
947
 
850
- def fetch_time(self, params={}):
948
+ def fetch_time(self, params={}) -> Int:
851
949
  """
852
- :see: https://docs-en.probit.com/reference/time
950
+
951
+ https://docs-en.probit.com/reference/time
952
+
853
953
  fetches the current integer timestamp in milliseconds from the exchange server
854
954
  :param dict [params]: extra parameters specific to the exchange API endpoint
855
955
  :returns int: the current integer timestamp in milliseconds from the exchange server
@@ -892,13 +992,16 @@ class probit(Exchange, ImplicitAPI):
892
992
 
893
993
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
894
994
  """
895
- :see: https://docs-en.probit.com/reference/candle
995
+
996
+ https://docs-en.probit.com/reference/candle
997
+
896
998
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
897
999
  :param str symbol: unified symbol of the market to fetch OHLCV data for
898
1000
  :param str timeframe: the length of time each candle represents
899
1001
  :param int [since]: timestamp in ms of the earliest candle to fetch
900
1002
  :param int [limit]: the maximum amount of candles to fetch
901
1003
  :param dict [params]: extra parameters specific to the exchange API endpoint
1004
+ :param str [params.until]: timestamp in ms of the earliest candle to fetch
902
1005
  :returns int[][]: A list of candles ordered, open, high, low, close, volume
903
1006
  """
904
1007
  self.load_markets()
@@ -914,18 +1017,19 @@ class probit(Exchange, ImplicitAPI):
914
1017
  'limit': requestLimit, # max 1000
915
1018
  }
916
1019
  now = self.milliseconds()
917
- duration = self.parse_timeframe(timeframe)
1020
+ until = self.safe_integer(params, 'until')
1021
+ durationMilliseconds = self.parse_timeframe(timeframe) * 1000
918
1022
  startTime = since
919
- endTime = now
1023
+ endTime = until - durationMilliseconds if (until is not None) else now
920
1024
  if since is None:
921
1025
  if limit is None:
922
1026
  limit = requestLimit
923
- startTime = now - limit * duration * 1000
1027
+ startLimit = limit - 1
1028
+ startTime = endTime - startLimit * durationMilliseconds
924
1029
  else:
925
- if limit is None:
926
- endTime = now
927
- else:
928
- endTime = self.sum(since, self.sum(limit, 1) * duration * 1000)
1030
+ if limit is not None:
1031
+ endByLimit = self.sum(since, limit * durationMilliseconds)
1032
+ endTime = min(endTime, endByLimit)
929
1033
  startTimeNormalized = self.normalize_ohlcv_timestamp(startTime, timeframe)
930
1034
  endTimeNormalized = self.normalize_ohlcv_timestamp(endTime, timeframe, True)
931
1035
  request['start_time'] = startTimeNormalized
@@ -976,7 +1080,9 @@ class probit(Exchange, ImplicitAPI):
976
1080
 
977
1081
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
978
1082
  """
979
- :see: https://docs-en.probit.com/reference/open_order-1
1083
+
1084
+ https://docs-en.probit.com/reference/open_order-1
1085
+
980
1086
  fetch all unfilled currently open orders
981
1087
  :param str symbol: unified market symbol
982
1088
  :param int [since]: the earliest time in ms to fetch open orders for
@@ -997,7 +1103,9 @@ class probit(Exchange, ImplicitAPI):
997
1103
 
998
1104
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
999
1105
  """
1000
- :see: https://docs-en.probit.com/reference/order
1106
+
1107
+ https://docs-en.probit.com/reference/order
1108
+
1001
1109
  fetches information on multiple closed orders made by the user
1002
1110
  :param str symbol: unified market symbol of the market orders were made in
1003
1111
  :param int [since]: the earliest time in ms to fetch orders for
@@ -1025,8 +1133,11 @@ class probit(Exchange, ImplicitAPI):
1025
1133
 
1026
1134
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1027
1135
  """
1028
- :see: https://docs-en.probit.com/reference/order-3
1136
+
1137
+ https://docs-en.probit.com/reference/order-3
1138
+
1029
1139
  fetches information on an order made by the user
1140
+ :param str id: the order id
1030
1141
  :param str symbol: unified symbol of the market the order was made in
1031
1142
  :param dict [params]: extra parameters specific to the exchange API endpoint
1032
1143
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1109,7 +1220,6 @@ class probit(Exchange, ImplicitAPI):
1109
1220
  'side': side,
1110
1221
  'status': status,
1111
1222
  'price': price,
1112
- 'stopPrice': None,
1113
1223
  'triggerPrice': None,
1114
1224
  'amount': amount,
1115
1225
  'filled': filled,
@@ -1126,12 +1236,14 @@ class probit(Exchange, ImplicitAPI):
1126
1236
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1127
1237
  """
1128
1238
  create a trade order
1129
- :see: https://docs-en.probit.com/reference/order-1
1239
+
1240
+ https://docs-en.probit.com/reference/order-1
1241
+
1130
1242
  :param str symbol: unified symbol of the market to create an order in
1131
1243
  :param str type: 'market' or 'limit'
1132
1244
  :param str side: 'buy' or 'sell'
1133
1245
  :param float amount: how much you want to trade in units of the base currency
1134
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1246
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1135
1247
  :param dict [params]: extra parameters specific to the exchange API endpoint
1136
1248
  :param float [params.cost]: the quote quantity that can be used alternative for the amount for market buy orders
1137
1249
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1211,7 +1323,9 @@ class probit(Exchange, ImplicitAPI):
1211
1323
 
1212
1324
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1213
1325
  """
1214
- :see: https://docs-en.probit.com/reference/order-2
1326
+
1327
+ https://docs-en.probit.com/reference/order-2
1328
+
1215
1329
  cancels an open order
1216
1330
  :param str id: order id
1217
1331
  :param str symbol: unified symbol of the market the order was made in
@@ -1230,7 +1344,7 @@ class probit(Exchange, ImplicitAPI):
1230
1344
  data = self.safe_dict(response, 'data')
1231
1345
  return self.parse_order(data)
1232
1346
 
1233
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1347
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1234
1348
  address = self.safe_string(depositAddress, 'address')
1235
1349
  tag = self.safe_string(depositAddress, 'destination_tag')
1236
1350
  currencyId = self.safe_string(depositAddress, 'currency_id')
@@ -1239,16 +1353,18 @@ class probit(Exchange, ImplicitAPI):
1239
1353
  network = self.safe_string(depositAddress, 'platform_id')
1240
1354
  self.check_address(address)
1241
1355
  return {
1356
+ 'info': depositAddress,
1242
1357
  'currency': code,
1358
+ 'network': network,
1243
1359
  'address': address,
1244
1360
  'tag': tag,
1245
- 'network': network,
1246
- 'info': depositAddress,
1247
1361
  }
1248
1362
 
1249
- def fetch_deposit_address(self, code: str, params={}):
1363
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1250
1364
  """
1251
- :see: https://docs-en.probit.com/reference/deposit_address
1365
+
1366
+ https://docs-en.probit.com/reference/deposit_address
1367
+
1252
1368
  fetch the deposit address for a currency associated with self account
1253
1369
  :param str code: unified currency code
1254
1370
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1296,9 +1412,11 @@ class probit(Exchange, ImplicitAPI):
1296
1412
  raise InvalidAddress(self.id + ' fetchDepositAddress() returned an empty response')
1297
1413
  return self.parse_deposit_address(firstAddress, currency)
1298
1414
 
1299
- def fetch_deposit_addresses(self, codes: Strings = None, params={}):
1415
+ def fetch_deposit_addresses(self, codes: Strings = None, params={}) -> List[DepositAddress]:
1300
1416
  """
1301
- :see: https://docs-en.probit.com/reference/deposit_address
1417
+
1418
+ https://docs-en.probit.com/reference/deposit_address
1419
+
1302
1420
  fetch deposit addresses for multiple currencies and chain types
1303
1421
  :param str[]|None codes: list of unified currency codes, default is None
1304
1422
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1316,9 +1434,11 @@ class probit(Exchange, ImplicitAPI):
1316
1434
  data = self.safe_list(response, 'data', [])
1317
1435
  return self.parse_deposit_addresses(data, codes)
1318
1436
 
1319
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
1437
+ def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
1320
1438
  """
1321
- :see: https://docs-en.probit.com/reference/withdrawal
1439
+
1440
+ https://docs-en.probit.com/reference/withdrawal
1441
+
1322
1442
  make a withdrawal
1323
1443
  :param str code: unified currency code
1324
1444
  :param float amount: the amount to withdraw
@@ -1392,12 +1512,14 @@ class probit(Exchange, ImplicitAPI):
1392
1512
  def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1393
1513
  """
1394
1514
  fetch history of deposits and withdrawals
1395
- :see: https://docs-en.probit.com/reference/transferpayment
1515
+
1516
+ https://docs-en.probit.com/reference/transferpayment
1517
+
1396
1518
  :param str code: unified currency code
1397
1519
  :param int [since]: the earliest time in ms to fetch transactions for
1398
1520
  :param int [limit]: the maximum number of transaction structures to retrieve
1399
- :param int [params.until]: the latest time in ms to fetch transactions for
1400
1521
  :param dict [params]: extra parameters specific to the exchange API endpoint
1522
+ :param int [params.until]: the latest time in ms to fetch transactions for
1401
1523
  :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1402
1524
  """
1403
1525
  self.load_markets()
@@ -1526,7 +1648,9 @@ class probit(Exchange, ImplicitAPI):
1526
1648
 
1527
1649
  def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
1528
1650
  """
1529
- :see: https://docs-en.probit.com/reference/currency
1651
+
1652
+ https://docs-en.probit.com/reference/currency
1653
+
1530
1654
  fetch deposit and withdraw fees
1531
1655
  :param str[]|None codes: list of unified currency codes
1532
1656
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1697,7 +1821,9 @@ class probit(Exchange, ImplicitAPI):
1697
1821
 
1698
1822
  def sign_in(self, params={}):
1699
1823
  """
1700
- :see: https://docs-en.probit.com/reference/token
1824
+
1825
+ https://docs-en.probit.com/reference/token
1826
+
1701
1827
  sign in, must be called prior to using other authenticated methods
1702
1828
  :param dict [params]: extra parameters specific to the exchange API endpoint
1703
1829
  :returns: response from exchange
@@ -1725,10 +1851,13 @@ class probit(Exchange, ImplicitAPI):
1725
1851
  return None # fallback to default error handler
1726
1852
  if 'errorCode' in response:
1727
1853
  errorCode = self.safe_string(response, 'errorCode')
1728
- message = self.safe_string(response, 'message')
1729
1854
  if errorCode is not None:
1730
- feedback = self.id + ' ' + body
1731
- self.throw_exactly_matched_exception(self.exceptions['exact'], message, feedback)
1732
- self.throw_broadly_matched_exception(self.exceptions['exact'], errorCode, feedback)
1855
+ errMessage = self.safe_string(response, 'message', '')
1856
+ details = self.safe_value(response, 'details')
1857
+ feedback = self.id + ' ' + errorCode + ' ' + errMessage + ' ' + self.json(details)
1858
+ if 'exact' in self.exceptions:
1859
+ self.throw_exactly_matched_exception(self.exceptions['exact'], errorCode, feedback)
1860
+ if 'broad' in self.exceptions:
1861
+ self.throw_broadly_matched_exception(self.exceptions['broad'], errMessage, feedback)
1733
1862
  raise ExchangeError(feedback)
1734
1863
  return None