ccxt-ir 4.3.46.0.2__py2.py3-none-any.whl → 4.5.0__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 (528) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +9 -9
  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 +7 -7
  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 +10 -10
  68. ccxt/async_support/afratether.py +9 -9
  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 +31 -37
  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 +25 -24
  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 +30 -27
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +14 -13
  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 +29 -35
  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 +22 -21
  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 +28 -25
  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 +12 -11
  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.2.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.0.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/abstract/ace.py +0 -15
  438. ccxt/abstract/bitbay.py +0 -53
  439. ccxt/abstract/bitcoincom.py +0 -115
  440. ccxt/abstract/bitfinex2.py +0 -139
  441. ccxt/abstract/bitpanda.py +0 -35
  442. ccxt/abstract/bl3p.py +0 -19
  443. ccxt/abstract/coinlist.py +0 -54
  444. ccxt/abstract/currencycom.py +0 -68
  445. ccxt/abstract/hitbtc3.py +0 -115
  446. ccxt/abstract/idex.py +0 -26
  447. ccxt/abstract/kuna.py +0 -182
  448. ccxt/abstract/lykke.py +0 -29
  449. ccxt/abstract/poloniexfutures.py +0 -48
  450. ccxt/abstract/wazirx.py +0 -30
  451. ccxt/ace.py +0 -1012
  452. ccxt/async_support/ace.py +0 -1012
  453. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  454. ccxt/async_support/base/ws/fast_client.py +0 -96
  455. ccxt/async_support/bitbay.py +0 -17
  456. ccxt/async_support/bitcoincom.py +0 -17
  457. ccxt/async_support/bitfinex2.py +0 -3552
  458. ccxt/async_support/bitpanda.py +0 -16
  459. ccxt/async_support/bl3p.py +0 -485
  460. ccxt/async_support/coinlist.py +0 -2243
  461. ccxt/async_support/currencycom.py +0 -1950
  462. ccxt/async_support/hitbtc3.py +0 -16
  463. ccxt/async_support/idex.py +0 -1766
  464. ccxt/async_support/kuna.py +0 -1841
  465. ccxt/async_support/lykke.py +0 -1270
  466. ccxt/async_support/poloniexfutures.py +0 -1717
  467. ccxt/async_support/wazirx.py +0 -1224
  468. ccxt/bitbay.py +0 -17
  469. ccxt/bitcoincom.py +0 -17
  470. ccxt/bitfinex2.py +0 -3552
  471. ccxt/bitpanda.py +0 -16
  472. ccxt/bl3p.py +0 -485
  473. ccxt/coinlist.py +0 -2243
  474. ccxt/currencycom.py +0 -1950
  475. ccxt/hitbtc3.py +0 -16
  476. ccxt/idex.py +0 -1766
  477. ccxt/kuna.py +0 -1841
  478. ccxt/lykke.py +0 -1270
  479. ccxt/poloniexfutures.py +0 -1717
  480. ccxt/pro/bitcoincom.py +0 -34
  481. ccxt/pro/bitfinex2.py +0 -1083
  482. ccxt/pro/bitpanda.py +0 -15
  483. ccxt/pro/currencycom.py +0 -536
  484. ccxt/pro/idex.py +0 -672
  485. ccxt/pro/poloniexfutures.py +0 -990
  486. ccxt/pro/wazirx.py +0 -749
  487. ccxt/test/base/__init__.py +0 -29
  488. ccxt/test/base/test_account.py +0 -26
  489. ccxt/test/base/test_balance.py +0 -56
  490. ccxt/test/base/test_borrow_interest.py +0 -35
  491. ccxt/test/base/test_borrow_rate.py +0 -32
  492. ccxt/test/base/test_calculate_fee.py +0 -51
  493. ccxt/test/base/test_crypto.py +0 -127
  494. ccxt/test/base/test_currency.py +0 -76
  495. ccxt/test/base/test_datetime.py +0 -109
  496. ccxt/test/base/test_decimal_to_precision.py +0 -392
  497. ccxt/test/base/test_deep_extend.py +0 -68
  498. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  499. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  500. ccxt/test/base/test_funding_rate_history.py +0 -29
  501. ccxt/test/base/test_last_price.py +0 -31
  502. ccxt/test/base/test_ledger_entry.py +0 -45
  503. ccxt/test/base/test_ledger_item.py +0 -48
  504. ccxt/test/base/test_leverage_tier.py +0 -33
  505. ccxt/test/base/test_liquidation.py +0 -50
  506. ccxt/test/base/test_margin_mode.py +0 -24
  507. ccxt/test/base/test_margin_modification.py +0 -35
  508. ccxt/test/base/test_market.py +0 -193
  509. ccxt/test/base/test_number.py +0 -411
  510. ccxt/test/base/test_ohlcv.py +0 -33
  511. ccxt/test/base/test_open_interest.py +0 -32
  512. ccxt/test/base/test_order.py +0 -64
  513. ccxt/test/base/test_order_book.py +0 -69
  514. ccxt/test/base/test_position.py +0 -60
  515. ccxt/test/base/test_shared_methods.py +0 -353
  516. ccxt/test/base/test_status.py +0 -24
  517. ccxt/test/base/test_throttle.py +0 -126
  518. ccxt/test/base/test_ticker.py +0 -92
  519. ccxt/test/base/test_trade.py +0 -47
  520. ccxt/test/base/test_trading_fee.py +0 -26
  521. ccxt/test/base/test_transaction.py +0 -39
  522. ccxt/test/test_async.py +0 -1649
  523. ccxt/test/test_sync.py +0 -1648
  524. ccxt/wazirx.py +0 -1224
  525. ccxt_ir-4.3.46.0.2.dist-info/RECORD +0 -772
  526. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  527. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  528. {ccxt_ir-4.3.46.0.2.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/oxfun.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.oxfun import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Bool, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Account, Any, Balances, Bool, Currencies, Currency, DepositAddress, Int, LeverageTier, LeverageTiers, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, FundingRates, Trade, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -24,12 +24,11 @@ from ccxt.base.errors import NetworkError
24
24
  from ccxt.base.errors import RateLimitExceeded
25
25
  from ccxt.base.errors import RequestTimeout
26
26
  from ccxt.base.decimal_to_precision import TICK_SIZE
27
- from ccxt.base.precise import Precise
28
27
 
29
28
 
30
29
  class oxfun(Exchange, ImplicitAPI):
31
30
 
32
- def describe(self):
31
+ def describe(self) -> Any:
33
32
  return self.deep_extend(super(oxfun, self).describe(), {
34
33
  'id': 'oxfun',
35
34
  'name': 'OXFUN',
@@ -76,14 +75,14 @@ class oxfun(Exchange, ImplicitAPI):
76
75
  'fetchCrossBorrowRates': False,
77
76
  'fetchCurrencies': True,
78
77
  'fetchDeposit': False,
79
- 'fetchDepositAddress': False,
78
+ 'fetchDepositAddress': True,
80
79
  'fetchDepositAddresses': False,
81
80
  'fetchDepositAddressesByNetwork': False,
82
81
  'fetchDeposits': True,
83
82
  'fetchDepositWithdrawFee': False,
84
83
  'fetchDepositWithdrawFees': False,
85
84
  'fetchFundingHistory': True,
86
- 'fetchFundingRate': False,
85
+ 'fetchFundingRate': True,
87
86
  'fetchFundingRateHistory': True,
88
87
  'fetchFundingRates': True,
89
88
  'fetchIndexOHLCV': False,
@@ -93,7 +92,7 @@ class oxfun(Exchange, ImplicitAPI):
93
92
  'fetchLedger': False,
94
93
  'fetchLeverage': False,
95
94
  'fetchLeverageTiers': True,
96
- 'fetchMarketLeverageTiers': False,
95
+ 'fetchMarketLeverageTiers': 'emulated',
97
96
  'fetchMarkets': True,
98
97
  'fetchMarkOHLCV': False,
99
98
  'fetchMyTrades': True,
@@ -132,6 +131,7 @@ class oxfun(Exchange, ImplicitAPI):
132
131
  'reduceMargin': False,
133
132
  'repayCrossMargin': False,
134
133
  'repayIsolatedMargin': False,
134
+ 'sandbox': True,
135
135
  'setLeverage': False,
136
136
  'setMargin': False,
137
137
  'setMarginMode': False,
@@ -258,6 +258,74 @@ class oxfun(Exchange, ImplicitAPI):
258
258
  'Optimism': 'OPTIMISM',
259
259
  },
260
260
  },
261
+ 'features': {
262
+ 'default': {
263
+ 'sandbox': True,
264
+ 'createOrder': {
265
+ 'marginMode': False,
266
+ 'triggerPrice': True,
267
+ 'triggerDirection': False,
268
+ 'triggerPriceType': None,
269
+ 'stopLossPrice': False, # todo
270
+ 'takeProfitPrice': False, # todo
271
+ 'attachedStopLossTakeProfit': None,
272
+ 'timeInForce': {
273
+ 'IOC': True,
274
+ 'FOK': True,
275
+ 'PO': True,
276
+ 'GTD': False,
277
+ },
278
+ 'hedged': False,
279
+ 'trailing': False,
280
+ 'leverage': False,
281
+ 'marketBuyByCost': True,
282
+ 'marketBuyRequiresPrice': False,
283
+ 'selfTradePrevention': True, # todo
284
+ 'iceberg': True, # todo
285
+ },
286
+ 'createOrders': {
287
+ 'max': 10, # todo
288
+ },
289
+ 'fetchMyTrades': {
290
+ 'marginMode': False,
291
+ 'limit': 500,
292
+ 'daysBack': 100000, # todo
293
+ 'untilDays': 7,
294
+ 'symbolRequired': False,
295
+ },
296
+ 'fetchOrder': {
297
+ 'marginMode': False,
298
+ 'trigger': False,
299
+ 'trailing': False,
300
+ 'symbolRequired': False,
301
+ },
302
+ 'fetchOpenOrders': {
303
+ 'marginMode': False,
304
+ 'limit': None,
305
+ 'trigger': False,
306
+ 'trailing': False,
307
+ 'symbolRequired': False,
308
+ },
309
+ 'fetchOrders': None,
310
+ 'fetchClosedOrders': None, # todo?
311
+ 'fetchOHLCV': {
312
+ 'limit': 500,
313
+ },
314
+ },
315
+ 'spot': {
316
+ 'extends': 'default',
317
+ },
318
+ 'swap': {
319
+ 'linear': {
320
+ 'extends': 'default',
321
+ },
322
+ 'inverse': None,
323
+ },
324
+ 'future': {
325
+ 'linear': None,
326
+ 'inverse': None,
327
+ },
328
+ },
261
329
  'exceptions': {
262
330
  'exact': {
263
331
  '-0010': OperationFailed, # {"event":null,"success":false,"message":"Validation failed","code":"0010","data":null} - failed transfer
@@ -331,7 +399,9 @@ class oxfun(Exchange, ImplicitAPI):
331
399
  def fetch_markets(self, params={}) -> List[Market]:
332
400
  """
333
401
  retrieves data on all markets for bitmex
334
- :see: https://docs.ox.fun/?json#get-v3-markets
402
+
403
+ https://docs.ox.fun/?json#get-v3-markets
404
+
335
405
  :param dict [params]: extra parameters specific to the exchange API endpoint
336
406
  :returns dict[]: an array of objects representing market data
337
407
  """
@@ -504,7 +574,9 @@ class oxfun(Exchange, ImplicitAPI):
504
574
  def fetch_currencies(self, params={}) -> Currencies:
505
575
  """
506
576
  fetches all available currencies on an exchange
507
- :see: https://docs.ox.fun/?json#get-v3-assets
577
+
578
+ https://docs.ox.fun/?json#get-v3-assets
579
+
508
580
  :param dict [params]: extra parameters specific to the exchange API endpoint
509
581
  :returns dict: an associative dictionary of currencies
510
582
  """
@@ -539,66 +611,7 @@ class oxfun(Exchange, ImplicitAPI):
539
611
  # "minDeposit": "0.00010",
540
612
  # "minWithdrawal": "0.00010"
541
613
  # },
542
- # {
543
- # "network": "Arbitrum",
544
- # "tokenId": "0xba0Dda8762C24dA9487f5FA026a9B64b695A07Ea",
545
- # "transactionPrecision": "18",
546
- # "isWithdrawalFeeChargedToUser": True,
547
- # "canDeposit": True,
548
- # "canWithdraw": True,
549
- # "minDeposit": "0.00010",
550
- # "minWithdrawal": "0.00010"
551
- # },
552
- # {
553
- # "network": "Ethereum",
554
- # "tokenId": "0xba0Dda8762C24dA9487f5FA026a9B64b695A07Ea",
555
- # "transactionPrecision": "18",
556
- # "isWithdrawalFeeChargedToUser": True,
557
- # "canDeposit": True,
558
- # "canWithdraw": True,
559
- # "minDeposit": "0.00010",
560
- # "minWithdrawal": "0.00010"
561
- # },
562
- # {
563
- # "network": "Arbitrum",
564
- # "tokenId": "0x78a0A62Fba6Fb21A83FE8a3433d44C73a4017A6f",
565
- # "transactionPrecision": "18",
566
- # "isWithdrawalFeeChargedToUser": True,
567
- # "canDeposit": True,
568
- # "canWithdraw": False,
569
- # "minDeposit": "0.00010",
570
- # "minWithdrawal": "0.00010"
571
- # },
572
- # {
573
- # "network": "Avalanche",
574
- # "tokenId": "0x78a0A62Fba6Fb21A83FE8a3433d44C73a4017A6f",
575
- # "transactionPrecision": "18",
576
- # "isWithdrawalFeeChargedToUser": True,
577
- # "canDeposit": True,
578
- # "canWithdraw": False,
579
- # "minDeposit": "0.00010",
580
- # "minWithdrawal": "0.00010"
581
- # },
582
- # {
583
- # "network": "Solana",
584
- # "tokenId": "DV3845GEAVXfwpyVGGgWbqBVCtzHdCXNCGfcdboSEuZz",
585
- # "transactionPrecision": "8",
586
- # "isWithdrawalFeeChargedToUser": True,
587
- # "canDeposit": True,
588
- # "canWithdraw": True,
589
- # "minDeposit": "0.00010",
590
- # "minWithdrawal": "0.00010"
591
- # },
592
- # {
593
- # "network": "Ethereum",
594
- # "tokenId": "0x78a0A62Fba6Fb21A83FE8a3433d44C73a4017A6f",
595
- # "transactionPrecision": "18",
596
- # "isWithdrawalFeeChargedToUser": True,
597
- # "canDeposit": True,
598
- # "canWithdraw": False,
599
- # "minDeposit": "0.00010",
600
- # "minWithdrawal": "0.00010"
601
- # }
614
+ # ...
602
615
  # ]
603
616
  # },
604
617
  # {
@@ -648,80 +661,72 @@ class oxfun(Exchange, ImplicitAPI):
648
661
  parts = fullId.split('.')
649
662
  id = parts[0]
650
663
  code = self.safe_currency_code(id)
651
- networks: dict = {}
664
+ if not (code in result):
665
+ result[code] = {
666
+ 'id': id,
667
+ 'code': code,
668
+ 'precision': None,
669
+ 'type': None,
670
+ 'name': None,
671
+ 'active': None,
672
+ 'deposit': None,
673
+ 'withdraw': None,
674
+ 'fee': None,
675
+ 'limits': {
676
+ 'withdraw': {
677
+ 'min': None,
678
+ 'max': None,
679
+ },
680
+ 'deposit': {
681
+ 'min': None,
682
+ 'max': None,
683
+ },
684
+ },
685
+ 'networks': {},
686
+ 'info': [],
687
+ }
652
688
  chains = self.safe_list(currency, 'networkList', [])
653
- currencyMaxPrecision: Str = None
654
- currencyDepositEnabled: Bool = None
655
- currencyWithdrawEnabled: Bool = None
656
689
  for j in range(0, len(chains)):
657
690
  chain = chains[j]
658
691
  networkId = self.safe_string(chain, 'network')
659
692
  networkCode = self.network_id_to_code(networkId)
660
- deposit = self.safe_bool(chain, 'canDeposit')
661
- withdraw = self.safe_bool(chain, 'canWithdraw')
662
- active = (deposit and withdraw)
663
- minDeposit = self.safe_string(chain, 'minDeposit')
664
- minWithdrawal = self.safe_string(chain, 'minWithdrawal')
665
- precision = self.parse_precision(self.safe_string(chain, 'transactionPrecision'))
666
- networks[networkCode] = {
693
+ result[code]['networks'][networkCode] = {
667
694
  'id': networkId,
668
695
  'network': networkCode,
669
696
  'margin': None,
670
- 'deposit': deposit,
671
- 'withdraw': withdraw,
672
- 'active': active,
697
+ 'deposit': self.safe_bool(chain, 'canDeposit'),
698
+ 'withdraw': self.safe_bool(chain, 'canWithdraw'),
699
+ 'active': None,
673
700
  'fee': None,
674
- 'precision': self.parse_number(precision),
701
+ 'precision': self.parse_number(self.parse_precision(self.safe_string(chain, 'transactionPrecision'))),
675
702
  'limits': {
676
703
  'deposit': {
677
- 'min': minDeposit,
704
+ 'min': self.safe_number(chain, 'minDeposit'),
678
705
  'max': None,
679
706
  },
680
707
  'withdraw': {
681
- 'min': minWithdrawal,
708
+ 'min': self.safe_number(chain, 'minWithdrawal'),
682
709
  'max': None,
683
710
  },
684
711
  },
685
712
  'info': chain,
686
713
  }
687
- if (currencyDepositEnabled is None) or deposit:
688
- currencyDepositEnabled = deposit
689
- if (currencyWithdrawEnabled is None) or withdraw:
690
- currencyWithdrawEnabled = withdraw
691
- if (currencyMaxPrecision is None) or Precise.string_gt(currencyMaxPrecision, precision):
692
- currencyMaxPrecision = precision
693
- if code in result:
694
- # checking for specific ids.ARB
695
- networks = self.extend(result[code]['networks'], networks)
696
- result[code] = {
697
- 'id': id,
698
- 'code': code,
699
- 'name': None,
700
- 'type': None,
701
- 'active': None,
702
- 'deposit': currencyDepositEnabled,
703
- 'withdraw': currencyWithdrawEnabled,
704
- 'fee': None,
705
- 'precision': self.parse_number(currencyMaxPrecision),
706
- 'limits': {
707
- 'amount': {
708
- 'min': None,
709
- 'max': None,
710
- },
711
- 'withdraw': {
712
- 'min': None,
713
- 'max': None,
714
- },
715
- },
716
- 'networks': networks,
717
- 'info': currency,
718
- }
714
+ infos = self.safe_list(result[code], 'info', [])
715
+ infos.append(currency)
716
+ result[code]['info'] = infos
717
+ # only after all entries are formed in currencies, restructure each entry
718
+ allKeys = list(result.keys())
719
+ for i in range(0, len(allKeys)):
720
+ code = allKeys[i]
721
+ result[code] = self.safe_currency_structure(result[code]) # self is needed after adding network entry
719
722
  return result
720
723
 
721
724
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
722
725
  """
723
726
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
724
- :see: https://docs.ox.fun/?json#get-v3-tickers
727
+
728
+ https://docs.ox.fun/?json#get-v3-tickers
729
+
725
730
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
726
731
  :param dict [params]: extra parameters specific to the exchange API endpoint
727
732
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -782,7 +787,9 @@ class oxfun(Exchange, ImplicitAPI):
782
787
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
783
788
  """
784
789
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
785
- :see: https://docs.ox.fun/?json#get-v3-tickers
790
+
791
+ https://docs.ox.fun/?json#get-v3-tickers
792
+
786
793
  :param str symbol: unified symbol of the market to fetch the ticker for
787
794
  :param dict [params]: extra parameters specific to the exchange API endpoint
788
795
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -858,13 +865,16 @@ class oxfun(Exchange, ImplicitAPI):
858
865
  'average': None,
859
866
  'baseVolume': self.safe_string(ticker, 'currencyVolume24h'),
860
867
  'quoteVolume': None, # the exchange returns cost in OX
868
+ 'markPrice': self.safe_string(ticker, 'markPrice'),
861
869
  'info': ticker,
862
870
  }, market)
863
871
 
864
872
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
865
873
  """
866
874
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
867
- :see: https://docs.ox.fun/?json#get-v3-candles
875
+
876
+ https://docs.ox.fun/?json#get-v3-candles
877
+
868
878
  :param str symbol: unified symbol of the market to fetch OHLCV data for
869
879
  :param str timeframe: the length of time each candle represents
870
880
  :param int [since]: timestamp in ms of the earliest candle to fetch(default 24 hours ago)
@@ -945,7 +955,9 @@ class oxfun(Exchange, ImplicitAPI):
945
955
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
946
956
  """
947
957
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
948
- :see: https://docs.ox.fun/?json#get-v3-depth
958
+
959
+ https://docs.ox.fun/?json#get-v3-depth
960
+
949
961
  :param str symbol: unified symbol of the market to fetch the order book for
950
962
  :param int [limit]: the maximum amount of order book entries to return(default 5, max 100)
951
963
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -987,10 +999,12 @@ class oxfun(Exchange, ImplicitAPI):
987
999
  timestamp = self.safe_integer(data, 'lastUpdatedAt')
988
1000
  return self.parse_order_book(data, market['symbol'], timestamp)
989
1001
 
990
- def fetch_funding_rates(self, symbols: Strings = None, params={}):
1002
+ def fetch_funding_rates(self, symbols: Strings = None, params={}) -> FundingRates:
991
1003
  """
992
- :see: https://docs.ox.fun/?json#get-v3-funding-estimates
993
- fetch the current funding rates
1004
+ fetch the current funding rates for multiple markets
1005
+
1006
+ https://docs.ox.fun/?json#get-v3-funding-estimates
1007
+
994
1008
  :param str[] symbols: unified market symbols
995
1009
  :param dict [params]: extra parameters specific to the exchange API endpoint
996
1010
  :returns Order[]: an array of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rate-structure>`
@@ -1017,17 +1031,35 @@ class oxfun(Exchange, ImplicitAPI):
1017
1031
  # }
1018
1032
  #
1019
1033
  data = self.safe_list(response, 'data', [])
1020
- result = self.parse_funding_rates(data)
1021
- return self.filter_by_array(result, 'symbol', symbols)
1034
+ return self.parse_funding_rates(data, symbols)
1035
+
1036
+ def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
1037
+ """
1038
+ fetch the current funding rates for a symbol
1039
+
1040
+ https://docs.ox.fun/?json#get-v3-funding-estimates
1041
+
1042
+ :param str symbol: unified market symbols
1043
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1044
+ :returns Order[]: an array of `funding rate structures <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1045
+ """
1046
+ self.load_markets()
1047
+ request: dict = {
1048
+ 'marketCode': self.market_id(symbol),
1049
+ }
1050
+ response = self.publicGetV3FundingEstimates(self.extend(request, params))
1051
+ #
1052
+ data = self.safe_list(response, 'data', [])
1053
+ first = self.safe_dict(data, 0, {})
1054
+ return self.parse_funding_rate(first, self.market(symbol))
1022
1055
 
1023
- def parse_funding_rate(self, fundingRate, market: Market = None):
1056
+ def parse_funding_rate(self, fundingRate, market: Market = None) -> FundingRate:
1024
1057
  #
1025
1058
  # {
1026
1059
  # "marketCode": "OX-USD-SWAP-LIN",
1027
1060
  # "fundingAt": "1715515200000",
1028
1061
  # "estFundingRate": "0.000200000"
1029
- # },
1030
- #
1062
+ # }
1031
1063
  #
1032
1064
  symbol = self.safe_string(fundingRate, 'marketCode')
1033
1065
  market = self.market(symbol)
@@ -1050,12 +1082,15 @@ class oxfun(Exchange, ImplicitAPI):
1050
1082
  'previousFundingRate': None,
1051
1083
  'previousFundingTimestamp': None,
1052
1084
  'previousFundingDatetime': None,
1085
+ 'interval': None,
1053
1086
  }
1054
1087
 
1055
1088
  def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1056
1089
  """
1057
1090
  Fetches the history of funding rates
1058
- :see: https://docs.ox.fun/?json#get-v3-funding-rates
1091
+
1092
+ https://docs.ox.fun/?json#get-v3-funding-rates
1093
+
1059
1094
  :param str symbol: unified symbol of the market to fetch trades for
1060
1095
  :param int [since]: timestamp in ms of the earliest trade to fetch(default 24 hours ago)
1061
1096
  :param int [limit]: the maximum amount of trades to fetch(default 200, max 500)
@@ -1130,7 +1165,9 @@ class oxfun(Exchange, ImplicitAPI):
1130
1165
  def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1131
1166
  """
1132
1167
  fetches the history of funding payments
1133
- :see: https://docs.ox.fun/?json#get-v3-funding
1168
+
1169
+ https://docs.ox.fun/?json#get-v3-funding
1170
+
1134
1171
  :param str symbol: unified symbol of the market to fetch trades for
1135
1172
  :param int [since]: timestamp in ms of the earliest trade to fetch(default 24 hours ago)
1136
1173
  :param int [limit]: the maximum amount of trades to fetch(default 200, max 500)
@@ -1211,10 +1248,12 @@ class oxfun(Exchange, ImplicitAPI):
1211
1248
  'rate': rate,
1212
1249
  }
1213
1250
 
1214
- def fetch_leverage_tiers(self, symbols: Strings = None, params={}):
1251
+ def fetch_leverage_tiers(self, symbols: Strings = None, params={}) -> LeverageTiers:
1215
1252
  """
1216
1253
  retrieve information on the maximum leverage, and maintenance margin for trades of varying trade sizes, if a market has a leverage tier of 0, then the leverage tiers cannot be obtained for self market
1217
- :see: https://docs.ox.fun/?json#get-v3-leverage-tiers
1254
+
1255
+ https://docs.ox.fun/?json#get-v3-leverage-tiers
1256
+
1218
1257
  :param str[] [symbols]: list of unified market symbols
1219
1258
  :param dict [params]: extra parameters specific to the exchange API endpoint
1220
1259
  :returns dict: a dictionary of `leverage tiers structures <https://docs.ccxt.com/#/?id=leverage-tiers-structure>`, indexed by market symbols
@@ -1265,7 +1304,7 @@ class oxfun(Exchange, ImplicitAPI):
1265
1304
  data = self.safe_list(response, 'data', [])
1266
1305
  return self.parse_leverage_tiers(data, symbols, 'marketCode')
1267
1306
 
1268
- def parse_market_leverage_tiers(self, info, market: Market = None):
1307
+ def parse_market_leverage_tiers(self, info, market: Market = None) -> List[LeverageTier]:
1269
1308
  #
1270
1309
  # {
1271
1310
  # marketCode: 'SOL-USD-SWAP-LIN',
@@ -1290,6 +1329,7 @@ class oxfun(Exchange, ImplicitAPI):
1290
1329
  tier = listOfTiers[j]
1291
1330
  tiers.append({
1292
1331
  'tier': self.safe_number(tier, 'tier'),
1332
+ 'symbol': self.safe_symbol(marketId, market),
1293
1333
  'currency': market['settle'],
1294
1334
  'minNotional': self.safe_number(tier, 'positionFloor'),
1295
1335
  'maxNotional': self.safe_number(tier, 'positionCap'),
@@ -1302,7 +1342,9 @@ class oxfun(Exchange, ImplicitAPI):
1302
1342
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1303
1343
  """
1304
1344
  get the list of most recent trades for a particular symbol
1305
- :see: https://docs.ox.fun/?json#get-v3-exchange-trades
1345
+
1346
+ https://docs.ox.fun/?json#get-v3-exchange-trades
1347
+
1306
1348
  :param str symbol: unified symbol of the market to fetch trades for
1307
1349
  :param int [since]: timestamp in ms of the earliest trade to fetch(default 24 hours ago)
1308
1350
  :param int [limit]: the maximum amount of trades to fetch(default 200, max 500)
@@ -1348,7 +1390,9 @@ class oxfun(Exchange, ImplicitAPI):
1348
1390
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1349
1391
  """
1350
1392
  fetch all trades made by the user
1351
- :see: https://docs.ox.fun/?json#get-v3-trades
1393
+
1394
+ https://docs.ox.fun/?json#get-v3-trades
1395
+
1352
1396
  :param str symbol: unified market symbol
1353
1397
  :param int [since]: the earliest time in ms to fetch trades for
1354
1398
  :param int [limit]: the maximum amount of trades to fetch(default 200, max 500)
@@ -1457,7 +1501,9 @@ class oxfun(Exchange, ImplicitAPI):
1457
1501
  def fetch_balance(self, params={}) -> Balances:
1458
1502
  """
1459
1503
  query for balance and get the amount of funds available for trading or funds locked in orders
1460
- :see: https://docs.ox.fun/?json#get-v3-balances
1504
+
1505
+ https://docs.ox.fun/?json#get-v3-balances
1506
+
1461
1507
  :param dict [params]: extra parameters specific to the exchange API endpoint
1462
1508
  :param str [params.asset]: currency id, if empty the exchange returns info about all currencies
1463
1509
  :param str [params.subAcc]: Name of sub account. If no subAcc is given, then the response contains only the account linked to the API-Key.
@@ -1548,7 +1594,9 @@ class oxfun(Exchange, ImplicitAPI):
1548
1594
  def fetch_accounts(self, params={}) -> List[Account]:
1549
1595
  """
1550
1596
  fetch subaccounts associated with a profile
1551
- :see: https://docs.ox.fun/?json#get-v3-account-names
1597
+
1598
+ https://docs.ox.fun/?json#get-v3-account-names
1599
+
1552
1600
  :param dict [params]: extra parameters specific to the exchange API endpoint
1553
1601
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
1554
1602
  """
@@ -1587,7 +1635,9 @@ class oxfun(Exchange, ImplicitAPI):
1587
1635
  def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
1588
1636
  """
1589
1637
  transfer currency internally between wallets on the same account
1590
- :see: https://docs.ox.fun/?json#post-v3-transfer
1638
+
1639
+ https://docs.ox.fun/?json#post-v3-transfer
1640
+
1591
1641
  :param str code: unified currency code
1592
1642
  :param float amount: amount to transfer
1593
1643
  :param str fromAccount: account id to transfer from
@@ -1628,7 +1678,9 @@ class oxfun(Exchange, ImplicitAPI):
1628
1678
  def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1629
1679
  """
1630
1680
  fetch a history of internal transfers made on an account
1631
- :see: https://docs.ox.fun/?json#get-v3-transfer
1681
+
1682
+ https://docs.ox.fun/?json#get-v3-transfer
1683
+
1632
1684
  :param str code: unified currency code of the currency transferred
1633
1685
  :param int [since]: the earliest time in ms to fetch transfers for(default 24 hours ago)
1634
1686
  :param int [limit]: the maximum number of transfer structures to retrieve(default 50, max 200)
@@ -1708,10 +1760,12 @@ class oxfun(Exchange, ImplicitAPI):
1708
1760
  }
1709
1761
  return self.safe_string(statuses, status, status)
1710
1762
 
1711
- def fetch_deposit_address(self, code: str, params={}):
1763
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1712
1764
  """
1713
1765
  fetch the deposit address for a currency associated with self account
1714
- :see: https://docs.ox.fun/?json#get-v3-deposit-addresses
1766
+
1767
+ https://docs.ox.fun/?json#get-v3-deposit-addresses
1768
+
1715
1769
  :param str code: unified currency code
1716
1770
  :param dict [params]: extra parameters specific to the exchange API endpoint
1717
1771
  :param str [params.network]: network for fetch deposit address
@@ -1735,24 +1789,26 @@ class oxfun(Exchange, ImplicitAPI):
1735
1789
  data = self.safe_dict(response, 'data', {})
1736
1790
  return self.parse_deposit_address(data, currency)
1737
1791
 
1738
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1792
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
1739
1793
  #
1740
1794
  # {"address":"0x998dEc76151FB723963Bd8AFD517687b38D33dE8"}
1741
1795
  #
1742
1796
  address = self.safe_string(depositAddress, 'address')
1743
1797
  self.check_address(address)
1744
1798
  return {
1799
+ 'info': depositAddress,
1745
1800
  'currency': currency['code'],
1801
+ 'network': None,
1746
1802
  'address': address,
1747
1803
  'tag': None,
1748
- 'network': None,
1749
- 'info': depositAddress,
1750
1804
  }
1751
1805
 
1752
1806
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1753
1807
  """
1754
1808
  fetch all deposits made to an account
1755
- :see: https://docs.ox.fun/?json#get-v3-deposit
1809
+
1810
+ https://docs.ox.fun/?json#get-v3-deposit
1811
+
1756
1812
  :param str code: unified currency code of the currency transferred
1757
1813
  :param int [since]: the earliest time in ms to fetch transfers for(default 24 hours ago)
1758
1814
  :param int [limit]: the maximum number of transfer structures to retrieve(default 50, max 200)
@@ -1800,7 +1856,9 @@ class oxfun(Exchange, ImplicitAPI):
1800
1856
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1801
1857
  """
1802
1858
  fetch all withdrawals made from an account
1803
- :see: https://docs.ox.fun/?json#get-v3-withdrawal
1859
+
1860
+ https://docs.ox.fun/?json#get-v3-withdrawal
1861
+
1804
1862
  :param str code: unified currency code of the currency transferred
1805
1863
  :param int [since]: the earliest time in ms to fetch transfers for(default 24 hours ago)
1806
1864
  :param int [limit]: the maximum number of transfer structures to retrieve(default 50, max 200)
@@ -1965,19 +2023,21 @@ class oxfun(Exchange, ImplicitAPI):
1965
2023
  }
1966
2024
  return self.safe_string(statuses, status, status)
1967
2025
 
1968
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2026
+ def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
1969
2027
  """
1970
2028
  make a withdrawal
1971
- :see: https://docs.bitflex.com/spot#withdraw
2029
+
2030
+ https://docs.ox.fun/?json#post-v3-withdrawal
2031
+
1972
2032
  :param str code: unified currency code
1973
2033
  :param float amount: the amount to withdraw
1974
2034
  :param str address: the address to withdraw to
1975
2035
  :param str tag:
2036
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1976
2037
  :param str [params.network]: network for withdraw
1977
2038
  :param bool [params.externalFee]: if False, then the fee is taken from the quantity, also with the burn fee for asset SOLO
1978
- :param dict [params]: extra parameters specific to the exchange API endpoint
1979
- *
1980
- * EXCHANGE SPECIFIC PARAMETERS
2039
+
2040
+ EXCHANGE SPECIFIC PARAMETERS
1981
2041
  :param str [params.tfaType]: GOOGLE, or AUTHY_SECRET, or YUBIKEY, for 2FA
1982
2042
  :param str [params.code]: 2FA code
1983
2043
  :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
@@ -2019,10 +2079,12 @@ class oxfun(Exchange, ImplicitAPI):
2019
2079
  data['type'] = 'withdrawal'
2020
2080
  return self.parse_transaction(data, currency)
2021
2081
 
2022
- def fetch_positions(self, symbols: Strings = None, params={}):
2082
+ def fetch_positions(self, symbols: Strings = None, params={}) -> List[Position]:
2023
2083
  """
2024
2084
  fetch all open positions
2025
- :see: https://docs.ox.fun/?json#get-v3-positions
2085
+
2086
+ https://docs.ox.fun/?json#get-v3-positions
2087
+
2026
2088
  :param str[]|None symbols: list of unified market symbols
2027
2089
  :param dict [params]: extra parameters specific to the exchange API endpoint
2028
2090
  :param boolean [params.subAcc]:
@@ -2135,12 +2197,14 @@ class oxfun(Exchange, ImplicitAPI):
2135
2197
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}) -> Order:
2136
2198
  """
2137
2199
  create a trade order
2138
- :see: https://docs.ox.fun/?json#post-v3-orders-place
2200
+
2201
+ https://docs.ox.fun/?json#post-v3-orders-place
2202
+
2139
2203
  :param str symbol: unified symbol of the market to create an order in
2140
2204
  :param str type: 'market', 'limit', 'STOP_LIMIT' or 'STOP_MARKET'
2141
2205
  :param str side: 'buy' or 'sell'
2142
2206
  :param float amount: how much of currency you want to trade in units of base currency
2143
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
2207
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
2144
2208
  :param dict [params]: extra parameters specific to the exchange API endpoint
2145
2209
  :param int [params.clientOrderId]: a unique id for the order
2146
2210
  :param int [params.timestamp]: in milliseconds. If an order reaches the matching engine and the current timestamp exceeds timestamp + recvWindow, then the order will be rejected.
@@ -2291,7 +2355,9 @@ class oxfun(Exchange, ImplicitAPI):
2291
2355
  def create_orders(self, orders: List[OrderRequest], params={}) -> List[Order]:
2292
2356
  """
2293
2357
  create a list of trade orders
2294
- :see: https://docs.ox.fun/?json#post-v3-orders-place
2358
+
2359
+ https://docs.ox.fun/?json#post-v3-orders-place
2360
+
2295
2361
  :param Array orders: list of orders to create, each object should contain the parameters required by createOrder, namely symbol, type, side, amount, price and params
2296
2362
  :param dict [params]: extra parameters specific to the exchange API endpoint
2297
2363
  :param int [params.timestamp]: *for all orders* in milliseconds. If orders reach the matching engine and the current timestamp exceeds timestamp + recvWindow, then all orders will be rejected.
@@ -2326,7 +2392,7 @@ class oxfun(Exchange, ImplicitAPI):
2326
2392
  :param str type: 'market', 'limit', 'STOP_LIMIT' or 'STOP_MARKET'
2327
2393
  :param str side: 'buy' or 'sell'
2328
2394
  :param float amount: how much of currency you want to trade in units of base currency
2329
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
2395
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
2330
2396
  :param dict [params]: extra parameters specific to the exchange API endpoint
2331
2397
  :param int [params.clientOrderId]: a unique id for the order
2332
2398
  :param float [params.cost]: the quote quantity that can be used alternative for the amount for market buy orders
@@ -2374,7 +2440,9 @@ class oxfun(Exchange, ImplicitAPI):
2374
2440
  def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
2375
2441
  """
2376
2442
  create a market buy order by providing the symbol and cost
2377
- :see: https://open.big.one/docs/spot_orders.html#create-order
2443
+
2444
+ https://open.big.one/docs/spot_orders.html#create-order
2445
+
2378
2446
  :param str symbol: unified symbol of the market to create an order in
2379
2447
  :param float cost: how much you want to trade in units of the quote currency
2380
2448
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2391,7 +2459,9 @@ class oxfun(Exchange, ImplicitAPI):
2391
2459
 
2392
2460
  def fetch_order(self, id: str, symbol: Str = None, params={}) -> Order:
2393
2461
  """
2394
- :see: https://docs.ox.fun/?json#get-v3-orders-status
2462
+
2463
+ https://docs.ox.fun/?json#get-v3-orders-status
2464
+
2395
2465
  fetches information on an order made by the user
2396
2466
  :param str id: a unique id for the order
2397
2467
  :param str [symbol]: not used by oxfun fetchOrder
@@ -2433,7 +2503,9 @@ class oxfun(Exchange, ImplicitAPI):
2433
2503
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
2434
2504
  """
2435
2505
  fetch all unfilled currently open orders
2436
- :see: https://docs.ox.fun/?json#get-v3-orders-working
2506
+
2507
+ https://docs.ox.fun/?json#get-v3-orders-working
2508
+
2437
2509
  :param str symbol: unified market symbol
2438
2510
  :param int [since]: the earliest time in ms to fetch open orders for
2439
2511
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -2454,7 +2526,9 @@ class oxfun(Exchange, ImplicitAPI):
2454
2526
  def cancel_order(self, id: str, symbol: Str = None, params={}):
2455
2527
  """
2456
2528
  cancels an open order
2457
- :see: https://docs.ox.fun/?json#delete-v3-orders-cancel
2529
+
2530
+ https://docs.ox.fun/?json#delete-v3-orders-cancel
2531
+
2458
2532
  :param str id: order id
2459
2533
  :param str symbol: unified symbol of the market the order was made in
2460
2534
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2488,7 +2562,9 @@ class oxfun(Exchange, ImplicitAPI):
2488
2562
  def cancel_all_orders(self, symbol: Str = None, params={}):
2489
2563
  """
2490
2564
  cancel all open orders
2491
- :see: https://docs.ox.fun/?json#delete-v3-orders-cancel-all
2565
+
2566
+ https://docs.ox.fun/?json#delete-v3-orders-cancel-all
2567
+
2492
2568
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
2493
2569
  :param dict [params]: extra parameters specific to the exchange API endpoint
2494
2570
  :returns dict: response from exchange
@@ -2508,12 +2584,15 @@ class oxfun(Exchange, ImplicitAPI):
2508
2584
  # "data": {"notice": "No working orders found"}
2509
2585
  # }
2510
2586
  #
2511
- return self.privateDeleteV3OrdersCancelAll(self.extend(request, params))
2587
+ response = self.privateDeleteV3OrdersCancelAll(self.extend(request, params))
2588
+ return [self.safe_order({'info': response})]
2512
2589
 
2513
2590
  def cancel_orders(self, ids: List[str], symbol: Str = None, params={}):
2514
2591
  """
2515
2592
  cancel multiple orders
2516
- :see: https://docs.ox.fun/?json#delete-v3-orders-cancel
2593
+
2594
+ https://docs.ox.fun/?json#delete-v3-orders-cancel
2595
+
2517
2596
  :param str[] ids: order ids
2518
2597
  :param str [symbol]: unified market symbol
2519
2598
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2756,7 +2835,7 @@ class oxfun(Exchange, ImplicitAPI):
2756
2835
  'AccessKey': self.apiKey,
2757
2836
  'Timestamp': datetime,
2758
2837
  'Signature': signature,
2759
- 'Nonce': nonce,
2838
+ 'Nonce': str(nonce),
2760
2839
  }
2761
2840
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
2762
2841