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
@@ -6,7 +6,7 @@
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.deribit import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Account, Balances, Currencies, Currency, Greeks, Int, Market, MarketInterface, Num, Option, OptionChain, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry, TransferEntries
9
+ from ccxt.base.types import Account, Any, Balances, Currencies, Currency, DepositAddress, Greeks, Int, Market, Num, Option, OptionChain, Order, OrderBook, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, FundingRate, Trade, TradingFees, Transaction, MarketInterface, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -27,7 +27,7 @@ from ccxt.base.precise import Precise
27
27
 
28
28
  class deribit(Exchange, ImplicitAPI):
29
29
 
30
- def describe(self):
30
+ def describe(self) -> Any:
31
31
  return self.deep_extend(super(deribit, self).describe(), {
32
32
  'id': 'deribit',
33
33
  'name': 'Deribit',
@@ -50,6 +50,7 @@ class deribit(Exchange, ImplicitAPI):
50
50
  'cancelOrders': False,
51
51
  'createDepositAddress': True,
52
52
  'createOrder': True,
53
+ 'createReduceOnlyOrder': True,
53
54
  'createStopLimitOrder': True,
54
55
  'createStopMarketOrder': True,
55
56
  'createStopOrder': True,
@@ -65,6 +66,8 @@ class deribit(Exchange, ImplicitAPI):
65
66
  'fetchCurrencies': True,
66
67
  'fetchDeposit': False,
67
68
  'fetchDepositAddress': True,
69
+ 'fetchDepositAddresses': False,
70
+ 'fetchDepositAddressesByNetwork': False,
68
71
  'fetchDeposits': True,
69
72
  'fetchDepositWithdrawFees': True,
70
73
  'fetchFundingRate': True,
@@ -218,6 +221,7 @@ class deribit(Exchange, ImplicitAPI):
218
221
  'enable_api_key': 1,
219
222
  'get_access_log': 1,
220
223
  'get_account_summary': 1,
224
+ 'get_account_summaries': 1,
221
225
  'get_affiliate_program_info': 1,
222
226
  'get_email_language': 1,
223
227
  'get_new_announcements': 1,
@@ -288,6 +292,92 @@ class deribit(Exchange, ImplicitAPI):
288
292
  },
289
293
  },
290
294
  },
295
+ 'features': {
296
+ 'default': {
297
+ 'sandbox': True,
298
+ 'createOrder': {
299
+ 'marginMode': False,
300
+ 'triggerPrice': True, # todo
301
+ # todo implement
302
+ 'triggerPriceType': {
303
+ 'last': True,
304
+ 'mark': True,
305
+ 'index': True,
306
+ },
307
+ 'triggerDirection': False,
308
+ 'stopLossPrice': False, # todo
309
+ 'takeProfitPrice': False, # todo
310
+ 'attachedStopLossTakeProfit': None,
311
+ 'timeInForce': {
312
+ 'IOC': True,
313
+ 'FOK': True,
314
+ 'PO': True,
315
+ 'GTD': True,
316
+ },
317
+ 'hedged': False,
318
+ 'selfTradePrevention': False,
319
+ 'trailing': True, # todo
320
+ 'leverage': False,
321
+ 'marketBuyByCost': True, # todo
322
+ 'marketBuyRequiresPrice': False,
323
+ 'iceberg': True, # todo
324
+ },
325
+ 'createOrders': None,
326
+ 'fetchMyTrades': {
327
+ 'marginMode': False,
328
+ 'limit': 100, # todo: revise
329
+ 'daysBack': 100000,
330
+ 'untilDays': 100000,
331
+ 'symbolRequired': True, # todo
332
+ },
333
+ 'fetchOrder': {
334
+ 'marginMode': False,
335
+ 'trigger': False,
336
+ 'trailing': False,
337
+ 'symbolRequired': True, # todo
338
+ },
339
+ 'fetchOpenOrders': {
340
+ 'marginMode': False,
341
+ 'limit': None,
342
+ 'trigger': False,
343
+ 'trailing': False,
344
+ 'symbolRequired': True, # todo
345
+ },
346
+ 'fetchOrders': None,
347
+ 'fetchClosedOrders': {
348
+ 'marginMode': False,
349
+ 'limit': 100,
350
+ 'daysBack': 100000,
351
+ 'daysBackCanceled': 1,
352
+ 'untilDays': 100000,
353
+ 'trigger': False,
354
+ 'trailing': False,
355
+ 'symbolRequired': True, # todo
356
+ },
357
+ 'fetchOHLCV': {
358
+ 'limit': 1000, # todo: recheck
359
+ },
360
+ },
361
+ 'spot': {
362
+ 'extends': 'default',
363
+ },
364
+ 'swap': {
365
+ 'linear': {
366
+ 'extends': 'default',
367
+ },
368
+ 'inverse': {
369
+ 'extends': 'default',
370
+ },
371
+ },
372
+ 'future': {
373
+ 'linear': {
374
+ 'extends': 'default',
375
+ },
376
+ 'inverse': {
377
+ 'extends': 'default',
378
+ },
379
+ },
380
+ },
291
381
  'exceptions': {
292
382
  # 0 or absent Success, No error.
293
383
  '9999': PermissionDenied, # 'api_not_enabled' User didn't enable API for the Account.
@@ -409,9 +499,6 @@ class deribit(Exchange, ImplicitAPI):
409
499
  'fetchBalance': {
410
500
  'code': 'BTC',
411
501
  },
412
- 'fetchPositions': {
413
- 'code': 'BTC',
414
- },
415
502
  'transfer': {
416
503
  'method': 'privateGetSubmitTransferToSubaccount', # or 'privateGetSubmitTransferToUser'
417
504
  },
@@ -499,10 +586,12 @@ class deribit(Exchange, ImplicitAPI):
499
586
  return self.create_expired_option_market(marketId)
500
587
  return super(deribit, self).safe_market(marketId, market, delimiter, marketType)
501
588
 
502
- async def fetch_time(self, params={}):
589
+ async def fetch_time(self, params={}) -> Int:
503
590
  """
504
591
  fetches the current integer timestamp in milliseconds from the exchange server
505
- :see: https://docs.deribit.com/#public-get_time
592
+
593
+ https://docs.deribit.com/#public-get_time
594
+
506
595
  :param dict [params]: extra parameters specific to the exchange API endpoint
507
596
  :returns int: the current integer timestamp in milliseconds from the exchange server
508
597
  """
@@ -522,7 +611,9 @@ class deribit(Exchange, ImplicitAPI):
522
611
  async def fetch_currencies(self, params={}) -> Currencies:
523
612
  """
524
613
  fetches all available currencies on an exchange
525
- :see: https://docs.deribit.com/#public-get_currencies
614
+
615
+ https://docs.deribit.com/#public-get_currencies
616
+
526
617
  :param dict [params]: extra parameters specific to the exchange API endpoint
527
618
  :returns dict: an associative dictionary of currencies
528
619
  """
@@ -549,21 +640,21 @@ class deribit(Exchange, ImplicitAPI):
549
640
  # "testnet": True
550
641
  # }
551
642
  #
552
- data = self.safe_value(response, 'result', {})
643
+ data = self.safe_list(response, 'result', [])
553
644
  result: dict = {}
554
645
  for i in range(0, len(data)):
555
646
  currency = data[i]
556
647
  currencyId = self.safe_string(currency, 'currency')
557
648
  code = self.safe_currency_code(currencyId)
558
- name = self.safe_string(currency, 'currency_long')
559
- result[code] = {
649
+ result[code] = self.safe_currency_structure({
560
650
  'info': currency,
561
651
  'code': code,
562
652
  'id': currencyId,
563
- 'name': name,
653
+ 'name': self.safe_string(currency, 'currency_long'),
564
654
  'active': None,
565
655
  'deposit': None,
566
656
  'withdraw': None,
657
+ 'type': 'crypto',
567
658
  'fee': self.safe_number(currency, 'withdrawal_fee'),
568
659
  'precision': self.parse_number(self.parse_precision(self.safe_string(currency, 'fee_precision'))),
569
660
  'limits': {
@@ -581,7 +672,7 @@ class deribit(Exchange, ImplicitAPI):
581
672
  },
582
673
  },
583
674
  'networks': None,
584
- }
675
+ })
585
676
  return result
586
677
 
587
678
  def code_from_options(self, methodName, params={}):
@@ -593,7 +684,9 @@ class deribit(Exchange, ImplicitAPI):
593
684
  async def fetch_status(self, params={}):
594
685
  """
595
686
  the latest known information on the availability of the exchange API
596
- :see: https://docs.deribit.com/#public-status
687
+
688
+ https://docs.deribit.com/#public-status
689
+
597
690
  :param dict [params]: extra parameters specific to the exchange API endpoint
598
691
  :returns dict: a `status structure <https://docs.ccxt.com/#/?id=exchange-status-structure>`
599
692
  """
@@ -624,7 +717,9 @@ class deribit(Exchange, ImplicitAPI):
624
717
  async def fetch_accounts(self, params={}) -> List[Account]:
625
718
  """
626
719
  fetch all the accounts associated with a profile
627
- :see: https://docs.deribit.com/#private-get_subaccounts
720
+
721
+ https://docs.deribit.com/#private-get_subaccounts
722
+
628
723
  :param dict [params]: extra parameters specific to the exchange API endpoint
629
724
  :returns dict: a dictionary of `account structures <https://docs.ccxt.com/#/?id=account-structure>` indexed by the account type
630
725
  """
@@ -667,7 +762,7 @@ class deribit(Exchange, ImplicitAPI):
667
762
  result = self.safe_value(response, 'result', [])
668
763
  return self.parse_accounts(result)
669
764
 
670
- def parse_account(self, account, currency: Currency = None):
765
+ def parse_account(self, account):
671
766
  #
672
767
  # {
673
768
  # "username": "someusername_1",
@@ -686,14 +781,16 @@ class deribit(Exchange, ImplicitAPI):
686
781
  'info': account,
687
782
  'id': self.safe_string(account, 'id'),
688
783
  'type': self.safe_string(account, 'type'),
689
- 'code': self.safe_currency_code(None, currency),
784
+ 'code': None,
690
785
  }
691
786
 
692
787
  async def fetch_markets(self, params={}) -> List[Market]:
693
788
  """
694
789
  retrieves data on all markets for deribit
695
- :see: https://docs.deribit.com/#public-get_currencies
696
- :see: https://docs.deribit.com/#public-get_instruments
790
+
791
+ https://docs.deribit.com/#public-get_currencies
792
+ https://docs.deribit.com/#public-get_instruments
793
+
697
794
  :param dict [params]: extra parameters specific to the exchange API endpoint
698
795
  :returns dict[]: an array of objects representing market data
699
796
  """
@@ -841,6 +938,8 @@ class deribit(Exchange, ImplicitAPI):
841
938
  type = 'option'
842
939
  elif isSpot:
843
940
  type = 'spot'
941
+ inverse = None
942
+ linear = None
844
943
  if isSpot:
845
944
  symbol = base + '/' + quote
846
945
  elif not isComboMarket:
@@ -852,6 +951,8 @@ class deribit(Exchange, ImplicitAPI):
852
951
  optionType = self.safe_string(market, 'option_type')
853
952
  letter = 'C' if (optionType == 'call') else 'P'
854
953
  symbol = symbol + '-' + self.number_to_string(strike) + '-' + letter
954
+ inverse = (quote != settle)
955
+ linear = (settle == quote)
855
956
  parsedMarketValue = self.safe_value(parsedMarkets, symbol)
856
957
  if parsedMarketValue:
857
958
  continue
@@ -875,8 +976,8 @@ class deribit(Exchange, ImplicitAPI):
875
976
  'option': option,
876
977
  'active': self.safe_value(market, 'is_active'),
877
978
  'contract': not isSpot,
878
- 'linear': (settle == quote),
879
- 'inverse': (settle != quote),
979
+ 'linear': linear,
980
+ 'inverse': inverse,
880
981
  'taker': self.safe_number(market, 'taker_commission'),
881
982
  'maker': self.safe_number(market, 'maker_commission'),
882
983
  'contractSize': self.safe_number(market, 'contract_size'),
@@ -915,29 +1016,45 @@ class deribit(Exchange, ImplicitAPI):
915
1016
  result: dict = {
916
1017
  'info': balance,
917
1018
  }
918
- currencyId = self.safe_string(balance, 'currency')
919
- currencyCode = self.safe_currency_code(currencyId)
920
- account = self.account()
921
- account['free'] = self.safe_string(balance, 'available_funds')
922
- account['used'] = self.safe_string(balance, 'maintenance_margin')
923
- account['total'] = self.safe_string(balance, 'equity')
924
- result[currencyCode] = account
1019
+ summaries = []
1020
+ if 'summaries' in balance:
1021
+ summaries = self.safe_list(balance, 'summaries')
1022
+ else:
1023
+ summaries = [balance]
1024
+ for i in range(0, len(summaries)):
1025
+ data = summaries[i]
1026
+ currencyId = self.safe_string(data, 'currency')
1027
+ currencyCode = self.safe_currency_code(currencyId)
1028
+ account = self.account()
1029
+ account['free'] = self.safe_string(data, 'available_funds')
1030
+ account['used'] = self.safe_string(data, 'maintenance_margin')
1031
+ account['total'] = self.safe_string(data, 'equity')
1032
+ result[currencyCode] = account
925
1033
  return self.safe_balance(result)
926
1034
 
927
1035
  async def fetch_balance(self, params={}) -> Balances:
928
1036
  """
929
1037
  query for balance and get the amount of funds available for trading or funds locked in orders
930
- :see: https://docs.deribit.com/#private-get_account_summary
1038
+
1039
+ https://docs.deribit.com/#private-get_account_summary
1040
+ https://docs.deribit.com/#private-get_account_summaries
1041
+
931
1042
  :param dict [params]: extra parameters specific to the exchange API endpoint
1043
+ :param str [params.code]: unified currency code of the currency for the balance, if defined 'privateGetGetAccountSummary' will be used, otherwise 'privateGetGetAccountSummaries' will be used
932
1044
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
933
1045
  """
934
1046
  await self.load_markets()
935
- code = self.code_from_options('fetchBalance', params)
936
- currency = self.currency(code)
1047
+ code = self.safe_string(params, 'code')
1048
+ params = self.omit(params, 'code')
937
1049
  request: dict = {
938
- 'currency': currency['id'],
939
1050
  }
940
- response = await self.privateGetGetAccountSummary(self.extend(request, params))
1051
+ if code is not None:
1052
+ request['currency'] = self.currency_id(code)
1053
+ response = None
1054
+ if code is None:
1055
+ response = await self.privateGetGetAccountSummaries(params)
1056
+ else:
1057
+ response = await self.privateGetGetAccountSummary(self.extend(request, params))
941
1058
  #
942
1059
  # {
943
1060
  # "jsonrpc": "2.0",
@@ -980,13 +1097,15 @@ class deribit(Exchange, ImplicitAPI):
980
1097
  # "testnet": False
981
1098
  # }
982
1099
  #
983
- result = self.safe_value(response, 'result', {})
1100
+ result = self.safe_dict(response, 'result', {})
984
1101
  return self.parse_balance(result)
985
1102
 
986
- async def create_deposit_address(self, code: str, params={}):
1103
+ async def create_deposit_address(self, code: str, params={}) -> DepositAddress:
987
1104
  """
988
1105
  create a currency deposit address
989
- :see: https://docs.deribit.com/#private-create_deposit_address
1106
+
1107
+ https://docs.deribit.com/#private-create_deposit_address
1108
+
990
1109
  :param str code: unified currency code of the currency for the deposit address
991
1110
  :param dict [params]: extra parameters specific to the exchange API endpoint
992
1111
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1016,13 +1135,16 @@ class deribit(Exchange, ImplicitAPI):
1016
1135
  'currency': code,
1017
1136
  'address': address,
1018
1137
  'tag': None,
1138
+ 'network': None,
1019
1139
  'info': response,
1020
1140
  }
1021
1141
 
1022
- async def fetch_deposit_address(self, code: str, params={}):
1142
+ async def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
1023
1143
  """
1024
1144
  fetch the deposit address for a currency associated with self account
1025
- :see: https://docs.deribit.com/#private-get_current_deposit_address
1145
+
1146
+ https://docs.deribit.com/#private-get_current_deposit_address
1147
+
1026
1148
  :param str code: unified currency code
1027
1149
  :param dict [params]: extra parameters specific to the exchange API endpoint
1028
1150
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -1054,11 +1176,11 @@ class deribit(Exchange, ImplicitAPI):
1054
1176
  address = self.safe_string(result, 'address')
1055
1177
  self.check_address(address)
1056
1178
  return {
1179
+ 'info': response,
1057
1180
  'currency': code,
1181
+ 'network': None,
1058
1182
  'address': address,
1059
1183
  'tag': None,
1060
- 'network': None,
1061
- 'info': response,
1062
1184
  }
1063
1185
 
1064
1186
  def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
@@ -1133,13 +1255,17 @@ class deribit(Exchange, ImplicitAPI):
1133
1255
  'average': None,
1134
1256
  'baseVolume': None,
1135
1257
  'quoteVolume': self.safe_string(stats, 'volume'),
1258
+ 'markPrice': self.safe_string(ticker, 'mark_price'),
1259
+ 'indexPrice': self.safe_string(ticker, 'index_price'),
1136
1260
  'info': ticker,
1137
1261
  }, market)
1138
1262
 
1139
1263
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
1140
1264
  """
1141
1265
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
1142
- :see: https://docs.deribit.com/#public-ticker
1266
+
1267
+ https://docs.deribit.com/#public-ticker
1268
+
1143
1269
  :param str symbol: unified symbol of the market to fetch the ticker for
1144
1270
  :param dict [params]: extra parameters specific to the exchange API endpoint
1145
1271
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
@@ -1184,7 +1310,9 @@ class deribit(Exchange, ImplicitAPI):
1184
1310
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
1185
1311
  """
1186
1312
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
1187
- :see: https://docs.deribit.com/#public-get_book_summary_by_currency
1313
+
1314
+ https://docs.deribit.com/#public-get_book_summary_by_currency
1315
+
1188
1316
  :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
1189
1317
  :param dict [params]: extra parameters specific to the exchange API endpoint
1190
1318
  :param str [params.code]: *required* the currency code to fetch the tickers for, eg. 'BTC', 'ETH'
@@ -1193,13 +1321,32 @@ class deribit(Exchange, ImplicitAPI):
1193
1321
  await self.load_markets()
1194
1322
  symbols = self.market_symbols(symbols)
1195
1323
  code = self.safe_string_2(params, 'code', 'currency')
1324
+ type = None
1196
1325
  params = self.omit(params, ['code'])
1326
+ if symbols is not None:
1327
+ for i in range(0, len(symbols)):
1328
+ market = self.market(symbols[i])
1329
+ if code is not None and code != market['base']:
1330
+ raise BadRequest(self.id + ' fetchTickers the base currency must be the same for all symbols, self endpoint only supports one base currency at a time. Read more about it here: https://docs.deribit.com/#public-get_book_summary_by_currency')
1331
+ if code is None:
1332
+ code = market['base']
1333
+ type = market['type']
1197
1334
  if code is None:
1198
1335
  raise ArgumentsRequired(self.id + ' fetchTickers requires a currency/code(eg: BTC/ETH/USDT) parameter to fetch tickers for')
1199
1336
  currency = self.currency(code)
1200
1337
  request: dict = {
1201
1338
  'currency': currency['id'],
1202
1339
  }
1340
+ if type is not None:
1341
+ requestType = None
1342
+ if type == 'spot':
1343
+ requestType = 'spot'
1344
+ elif type == 'future' or (type == 'contract'):
1345
+ requestType = 'future'
1346
+ elif type == 'option':
1347
+ requestType = 'option'
1348
+ if requestType is not None:
1349
+ request['kind'] = requestType
1203
1350
  response = await self.publicGetGetBookSummaryByCurrency(self.extend(request, params))
1204
1351
  #
1205
1352
  # {
@@ -1242,7 +1389,9 @@ class deribit(Exchange, ImplicitAPI):
1242
1389
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
1243
1390
  """
1244
1391
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1245
- :see: https://docs.deribit.com/#public-get_tradingview_chart_data
1392
+
1393
+ https://docs.deribit.com/#public-get_tradingview_chart_data
1394
+
1246
1395
  :param str symbol: unified symbol of the market to fetch OHLCV data for
1247
1396
  :param str timeframe: the length of time each candle represents
1248
1397
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -1392,8 +1541,10 @@ class deribit(Exchange, ImplicitAPI):
1392
1541
 
1393
1542
  async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1394
1543
  """
1395
- :see: https://docs.deribit.com/#public-get_last_trades_by_instrument
1396
- :see: https://docs.deribit.com/#public-get_last_trades_by_instrument_and_time
1544
+
1545
+ https://docs.deribit.com/#public-get_last_trades_by_instrument
1546
+ https://docs.deribit.com/#public-get_last_trades_by_instrument_and_time
1547
+
1397
1548
  get the list of most recent trades for a particular symbol.
1398
1549
  :param str symbol: unified symbol of the market to fetch trades for
1399
1550
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -1453,7 +1604,9 @@ class deribit(Exchange, ImplicitAPI):
1453
1604
  async def fetch_trading_fees(self, params={}) -> TradingFees:
1454
1605
  """
1455
1606
  fetch the trading fees for multiple markets
1456
- :see: https://docs.deribit.com/#private-get_account_summary
1607
+
1608
+ https://docs.deribit.com/#private-get_account_summary
1609
+
1457
1610
  :param dict [params]: extra parameters specific to the exchange API endpoint
1458
1611
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
1459
1612
  """
@@ -1564,7 +1717,9 @@ class deribit(Exchange, ImplicitAPI):
1564
1717
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
1565
1718
  """
1566
1719
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
1567
- :see: https://docs.deribit.com/#public-get_order_book
1720
+
1721
+ https://docs.deribit.com/#public-get_order_book
1722
+
1568
1723
  :param str symbol: unified symbol of the market to fetch the order book for
1569
1724
  :param int [limit]: the maximum amount of order book entries to return
1570
1725
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1693,7 +1848,7 @@ class deribit(Exchange, ImplicitAPI):
1693
1848
  filledString = self.safe_string(order, 'filled_amount')
1694
1849
  amount = self.safe_string(order, 'amount')
1695
1850
  cost = Precise.string_mul(filledString, averageString)
1696
- if market['inverse']:
1851
+ if self.safe_bool(market, 'inverse'):
1697
1852
  if averageString != '0':
1698
1853
  cost = Precise.string_div(amount, averageString)
1699
1854
  lastTradeTimestamp = None
@@ -1716,7 +1871,6 @@ class deribit(Exchange, ImplicitAPI):
1716
1871
  # injected in createOrder
1717
1872
  trades = self.safe_value(order, 'trades')
1718
1873
  timeInForce = self.parse_time_in_force(self.safe_string(order, 'time_in_force'))
1719
- stopPrice = self.safe_value(order, 'stop_price')
1720
1874
  postOnly = self.safe_value(order, 'post_only')
1721
1875
  return self.safe_order({
1722
1876
  'info': order,
@@ -1731,8 +1885,7 @@ class deribit(Exchange, ImplicitAPI):
1731
1885
  'postOnly': postOnly,
1732
1886
  'side': side,
1733
1887
  'price': priceString,
1734
- 'stopPrice': stopPrice,
1735
- 'triggerPrice': stopPrice,
1888
+ 'triggerPrice': self.safe_value(order, 'stop_price'),
1736
1889
  'amount': amount,
1737
1890
  'cost': cost,
1738
1891
  'average': averageString,
@@ -1746,7 +1899,10 @@ class deribit(Exchange, ImplicitAPI):
1746
1899
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1747
1900
  """
1748
1901
  fetches information on an order made by the user
1749
- :see: https://docs.deribit.com/#private-get_order_state
1902
+
1903
+ https://docs.deribit.com/#private-get_order_state
1904
+
1905
+ :param str id: order id
1750
1906
  :param str symbol: unified symbol of the market the order was made in
1751
1907
  :param dict [params]: extra parameters specific to the exchange API endpoint
1752
1908
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1793,13 +1949,15 @@ class deribit(Exchange, ImplicitAPI):
1793
1949
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1794
1950
  """
1795
1951
  create a trade order
1796
- :see: https://docs.deribit.com/#private-buy
1797
- :see: https://docs.deribit.com/#private-sell
1952
+
1953
+ https://docs.deribit.com/#private-buy
1954
+ https://docs.deribit.com/#private-sell
1955
+
1798
1956
  :param str symbol: unified symbol of the market to create an order in
1799
1957
  :param str type: 'market' or 'limit'
1800
1958
  :param str side: 'buy' or 'sell'
1801
- :param float amount: how much you want to trade in units of the base currency. For inverse perpetual and futures the amount is in the quote currency USD. For options it is in the underlying assets base currency.
1802
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1959
+ :param float amount: how much you want to trade in units of the base currency. For perpetual and inverse futures the amount is in USD units. For options it is in the underlying assets base currency.
1960
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1803
1961
  :param dict [params]: extra parameters specific to the exchange API endpoint
1804
1962
  :param str [params.trigger]: the trigger type 'index_price', 'mark_price', or 'last_price', default is 'last_price'
1805
1963
  :param float [params.trailingAmount]: the quote amount to trail away from the current market price
@@ -1950,13 +2108,15 @@ class deribit(Exchange, ImplicitAPI):
1950
2108
  async def edit_order(self, id: str, symbol: str, type: OrderType, side: OrderSide, amount: Num = None, price: Num = None, params={}):
1951
2109
  """
1952
2110
  edit a trade order
1953
- :see: https://docs.deribit.com/#private-edit
2111
+
2112
+ https://docs.deribit.com/#private-edit
2113
+
1954
2114
  :param str id: edit order id
1955
2115
  :param str [symbol]: unified symbol of the market to edit an order in
1956
2116
  :param str [type]: 'market' or 'limit'
1957
2117
  :param str [side]: 'buy' or 'sell'
1958
- :param float amount: how much you want to trade in units of the base currency, inverse swap and future use the quote currency
1959
- :param float [price]: the price at which the order is to be fullfilled, in units of the base currency, ignored in market orders
2118
+ :param float amount: how much you want to trade in units of the base currency. For perpetual and inverse futures the amount is in USD units. For options it is in the underlying assets base currency.
2119
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1960
2120
  :param dict [params]: extra parameters specific to the exchange API endpoint
1961
2121
  :param float [params.trailingAmount]: the quote amount to trail away from the current market price
1962
2122
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1990,7 +2150,9 @@ class deribit(Exchange, ImplicitAPI):
1990
2150
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1991
2151
  """
1992
2152
  cancels an open order
1993
- :see: https://docs.deribit.com/#private-cancel
2153
+
2154
+ https://docs.deribit.com/#private-cancel
2155
+
1994
2156
  :param str id: order id
1995
2157
  :param str symbol: not used by deribit cancelOrder()
1996
2158
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -2007,8 +2169,10 @@ class deribit(Exchange, ImplicitAPI):
2007
2169
  async def cancel_all_orders(self, symbol: Str = None, params={}):
2008
2170
  """
2009
2171
  cancel all open orders
2010
- :see: https://docs.deribit.com/#private-cancel_all
2011
- :see: https://docs.deribit.com/#private-cancel_all_by_instrument
2172
+
2173
+ https://docs.deribit.com/#private-cancel_all
2174
+ https://docs.deribit.com/#private-cancel_all_by_instrument
2175
+
2012
2176
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
2013
2177
  :param dict [params]: extra parameters specific to the exchange API endpoint
2014
2178
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -2022,13 +2186,29 @@ class deribit(Exchange, ImplicitAPI):
2022
2186
  market = self.market(symbol)
2023
2187
  request['instrument_name'] = market['id']
2024
2188
  response = await self.privateGetCancelAllByInstrument(self.extend(request, params))
2025
- return response
2189
+ #
2190
+ # {
2191
+ # jsonrpc: '2.0',
2192
+ # result: '1',
2193
+ # usIn: '1720508354127369',
2194
+ # usOut: '1720508354133603',
2195
+ # usDiff: '6234',
2196
+ # testnet: True
2197
+ # }
2198
+ #
2199
+ return [
2200
+ self.safe_order({
2201
+ 'info': response,
2202
+ }),
2203
+ ]
2026
2204
 
2027
2205
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
2028
2206
  """
2029
2207
  fetch all unfilled currently open orders
2030
- :see: https://docs.deribit.com/#private-get_open_orders_by_currency
2031
- :see: https://docs.deribit.com/#private-get_open_orders_by_instrument
2208
+
2209
+ https://docs.deribit.com/#private-get_open_orders_by_currency
2210
+ https://docs.deribit.com/#private-get_open_orders_by_instrument
2211
+
2032
2212
  :param str symbol: unified market symbol
2033
2213
  :param int [since]: the earliest time in ms to fetch open orders for
2034
2214
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -2054,8 +2234,10 @@ class deribit(Exchange, ImplicitAPI):
2054
2234
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
2055
2235
  """
2056
2236
  fetches information on multiple closed orders made by the user
2057
- :see: https://docs.deribit.com/#private-get_order_history_by_currency
2058
- :see: https://docs.deribit.com/#private-get_order_history_by_instrument
2237
+
2238
+ https://docs.deribit.com/#private-get_order_history_by_currency
2239
+ https://docs.deribit.com/#private-get_order_history_by_instrument
2240
+
2059
2241
  :param str symbol: unified market symbol of the market orders were made in
2060
2242
  :param int [since]: the earliest time in ms to fetch orders for
2061
2243
  :param int [limit]: the maximum number of order structures to retrieve
@@ -2081,7 +2263,9 @@ class deribit(Exchange, ImplicitAPI):
2081
2263
  async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
2082
2264
  """
2083
2265
  fetch all the trades made from a single order
2084
- :see: https://docs.deribit.com/#private-get_user_trades_by_order
2266
+
2267
+ https://docs.deribit.com/#private-get_user_trades_by_order
2268
+
2085
2269
  :param str id: order id
2086
2270
  :param str symbol: unified market symbol
2087
2271
  :param int [since]: the earliest time in ms to fetch trades for
@@ -2133,10 +2317,12 @@ class deribit(Exchange, ImplicitAPI):
2133
2317
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
2134
2318
  """
2135
2319
  fetch all trades made by the user
2136
- :see: https://docs.deribit.com/#private-get_user_trades_by_currency
2137
- :see: https://docs.deribit.com/#private-get_user_trades_by_currency_and_time
2138
- :see: https://docs.deribit.com/#private-get_user_trades_by_instrument
2139
- :see: https://docs.deribit.com/#private-get_user_trades_by_instrument_and_time
2320
+
2321
+ https://docs.deribit.com/#private-get_user_trades_by_currency
2322
+ https://docs.deribit.com/#private-get_user_trades_by_currency_and_time
2323
+ https://docs.deribit.com/#private-get_user_trades_by_instrument
2324
+ https://docs.deribit.com/#private-get_user_trades_by_instrument_and_time
2325
+
2140
2326
  :param str symbol: unified market symbol
2141
2327
  :param int [since]: the earliest time in ms to fetch trades for
2142
2328
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -2208,7 +2394,9 @@ class deribit(Exchange, ImplicitAPI):
2208
2394
  async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2209
2395
  """
2210
2396
  fetch all deposits made to an account
2211
- :see: https://docs.deribit.com/#private-get_deposits
2397
+
2398
+ https://docs.deribit.com/#private-get_deposits
2399
+
2212
2400
  :param str code: unified currency code
2213
2401
  :param int [since]: the earliest time in ms to fetch deposits for
2214
2402
  :param int [limit]: the maximum number of deposits structures to retrieve
@@ -2252,7 +2440,9 @@ class deribit(Exchange, ImplicitAPI):
2252
2440
  async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2253
2441
  """
2254
2442
  fetch all withdrawals made from an account
2255
- :see: https://docs.deribit.com/#private-get_withdrawals
2443
+
2444
+ https://docs.deribit.com/#private-get_withdrawals
2445
+
2256
2446
  :param str code: unified currency code
2257
2447
  :param int [since]: the earliest time in ms to fetch withdrawals for
2258
2448
  :param int [limit]: the maximum number of withdrawals structures to retrieve
@@ -2406,21 +2596,21 @@ class deribit(Exchange, ImplicitAPI):
2406
2596
  unrealizedPnl = self.safe_string(position, 'floating_profit_loss')
2407
2597
  initialMarginString = self.safe_string(position, 'initial_margin')
2408
2598
  notionalString = self.safe_string(position, 'size_currency')
2599
+ notionalStringAbs = Precise.string_abs(notionalString)
2409
2600
  maintenanceMarginString = self.safe_string(position, 'maintenance_margin')
2410
- currentTime = self.milliseconds()
2411
2601
  return self.safe_position({
2412
2602
  'info': position,
2413
2603
  'id': None,
2414
2604
  'symbol': self.safe_string(market, 'symbol'),
2415
- 'timestamp': currentTime,
2416
- 'datetime': self.iso8601(currentTime),
2605
+ 'timestamp': None,
2606
+ 'datetime': None,
2417
2607
  'lastUpdateTimestamp': None,
2418
2608
  'initialMargin': self.parse_number(initialMarginString),
2419
- 'initialMarginPercentage': self.parse_number(Precise.string_mul(Precise.string_div(initialMarginString, notionalString), '100')),
2609
+ 'initialMarginPercentage': self.parse_number(Precise.string_mul(Precise.string_div(initialMarginString, notionalStringAbs), '100')),
2420
2610
  'maintenanceMargin': self.parse_number(maintenanceMarginString),
2421
- 'maintenanceMarginPercentage': self.parse_number(Precise.string_mul(Precise.string_div(maintenanceMarginString, notionalString), '100')),
2611
+ 'maintenanceMarginPercentage': self.parse_number(Precise.string_mul(Precise.string_div(maintenanceMarginString, notionalStringAbs), '100')),
2422
2612
  'entryPrice': self.safe_number(position, 'average_price'),
2423
- 'notional': self.parse_number(notionalString),
2613
+ 'notional': self.parse_number(notionalStringAbs),
2424
2614
  'leverage': self.safe_integer(position, 'leverage'),
2425
2615
  'unrealizedPnl': self.parse_number(unrealizedPnl),
2426
2616
  'contracts': None,
@@ -2441,7 +2631,9 @@ class deribit(Exchange, ImplicitAPI):
2441
2631
  async def fetch_position(self, symbol: str, params={}):
2442
2632
  """
2443
2633
  fetch data on a single open contract trade position
2444
- :see: https://docs.deribit.com/#private-get_position
2634
+
2635
+ https://docs.deribit.com/#private-get_position
2636
+
2445
2637
  :param str symbol: unified market symbol of the market the position is held in, default is None
2446
2638
  :param dict [params]: extra parameters specific to the exchange API endpoint
2447
2639
  :returns dict: a `position structure <https://docs.ccxt.com/#/?id=position-structure>`
@@ -2481,38 +2673,26 @@ class deribit(Exchange, ImplicitAPI):
2481
2673
  result = self.safe_dict(response, 'result')
2482
2674
  return self.parse_position(result)
2483
2675
 
2484
- async def fetch_positions(self, symbols: Strings = None, params={}):
2676
+ async def fetch_positions(self, symbols: Strings = None, params={}) -> List[Position]:
2485
2677
  """
2486
2678
  fetch all open positions
2487
- :see: https://docs.deribit.com/#private-get_positions
2679
+
2680
+ https://docs.deribit.com/#private-get_positions
2681
+
2488
2682
  :param str[]|None symbols: list of unified market symbols
2489
2683
  :param dict [params]: extra parameters specific to the exchange API endpoint
2684
+ :param str [params.currency]: currency code filter for positions
2490
2685
  :param str [params.kind]: market type filter for positions 'future', 'option', 'spot', 'future_combo' or 'option_combo'
2686
+ :param int [params.subaccount_id]: the user id for the subaccount
2491
2687
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
2492
2688
  """
2493
2689
  await self.load_markets()
2494
- kind = self.safe_string(params, 'kind')
2495
- code = None
2496
- if symbols is None:
2497
- code = self.code_from_options('fetchPositions', params)
2498
- elif isinstance(symbols, str):
2499
- code = symbols
2500
- symbols = None # fix https://github.com/ccxt/ccxt/issues/13961
2501
- else:
2502
- if isinstance(symbols, list):
2503
- length = len(symbols)
2504
- if length != 1:
2505
- raise BadRequest(self.id + ' fetchPositions() symbols argument cannot contain more than 1 symbol')
2506
- market = self.market(symbols[0])
2507
- settle = market['settle']
2508
- code = settle if (settle is not None) else market['base']
2509
- kind = market['info']['kind']
2510
- currency = self.currency(code)
2511
- request: dict = {
2512
- 'currency': currency['id'],
2513
- }
2514
- if kind is not None:
2515
- request['kind'] = kind
2690
+ code = self.safe_string(params, 'currency')
2691
+ request: dict = {}
2692
+ if code is not None:
2693
+ params = self.omit(params, 'currency')
2694
+ currency = self.currency(code)
2695
+ request['currency'] = currency['id']
2516
2696
  response = await self.privateGetGetPositions(self.extend(request, params))
2517
2697
  #
2518
2698
  # {
@@ -2549,7 +2729,9 @@ class deribit(Exchange, ImplicitAPI):
2549
2729
  async def fetch_volatility_history(self, code: str, params={}):
2550
2730
  """
2551
2731
  fetch the historical volatility of an option market based on an underlying asset
2552
- :see: https://docs.deribit.com/#public-get_historical_volatility
2732
+
2733
+ https://docs.deribit.com/#public-get_historical_volatility
2734
+
2553
2735
  :param str code: unified currency code
2554
2736
  :param dict [params]: extra parameters specific to the exchange API endpoint
2555
2737
  :returns dict[]: a list of `volatility history objects <https://docs.ccxt.com/#/?id=volatility-structure>`
@@ -2604,10 +2786,12 @@ class deribit(Exchange, ImplicitAPI):
2604
2786
  })
2605
2787
  return result
2606
2788
 
2607
- async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> TransferEntries:
2789
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[TransferEntry]:
2608
2790
  """
2609
2791
  fetch a history of internal transfers made on an account
2610
- :see: https://docs.deribit.com/#private-get_transfers
2792
+
2793
+ https://docs.deribit.com/#private-get_transfers
2794
+
2611
2795
  :param str code: unified currency code of the currency transferred
2612
2796
  :param int [since]: the earliest time in ms to fetch transfers for
2613
2797
  :param int [limit]: the maximum number of transfers structures to retrieve
@@ -2664,8 +2848,10 @@ class deribit(Exchange, ImplicitAPI):
2664
2848
  async def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
2665
2849
  """
2666
2850
  transfer currency internally between wallets on the same account
2667
- :see: https://docs.deribit.com/#private-submit_transfer_to_user
2668
- :see: https://docs.deribit.com/#private-submit_transfer_to_subaccount
2851
+
2852
+ https://docs.deribit.com/#private-submit_transfer_to_user
2853
+ https://docs.deribit.com/#private-submit_transfer_to_subaccount
2854
+
2669
2855
  :param str code: unified currency code
2670
2856
  :param float amount: amount to transfer
2671
2857
  :param str fromAccount: account to transfer from
@@ -2750,10 +2936,12 @@ class deribit(Exchange, ImplicitAPI):
2750
2936
  }
2751
2937
  return self.safe_string(statuses, status, status)
2752
2938
 
2753
- async def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2939
+ async def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
2754
2940
  """
2755
2941
  make a withdrawal
2756
- :see: https://docs.deribit.com/#private-withdraw
2942
+
2943
+ https://docs.deribit.com/#private-withdraw
2944
+
2757
2945
  :param str code: unified currency code
2758
2946
  :param float amount: the amount to withdraw
2759
2947
  :param str address: the address to withdraw to
@@ -2806,7 +2994,9 @@ class deribit(Exchange, ImplicitAPI):
2806
2994
  async def fetch_deposit_withdraw_fees(self, codes: Strings = None, params={}):
2807
2995
  """
2808
2996
  fetch deposit and withdraw fees
2809
- :see: https://docs.deribit.com/#public-get_currencies
2997
+
2998
+ https://docs.deribit.com/#public-get_currencies
2999
+
2810
3000
  :param str[]|None codes: list of unified currency codes
2811
3001
  :param dict [params]: extra parameters specific to the exchange API endpoint
2812
3002
  :returns dict: a list of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>`
@@ -2838,10 +3028,12 @@ class deribit(Exchange, ImplicitAPI):
2838
3028
  data = self.safe_list(response, 'result', [])
2839
3029
  return self.parse_deposit_withdraw_fees(data, codes, 'currency')
2840
3030
 
2841
- async def fetch_funding_rate(self, symbol: str, params={}):
3031
+ async def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
2842
3032
  """
2843
3033
  fetch the current funding rate
2844
- :see: https://docs.deribit.com/#public-get_funding_rate_value
3034
+
3035
+ https://docs.deribit.com/#public-get_funding_rate_value
3036
+
2845
3037
  :param str symbol: unified market symbol
2846
3038
  :param dict [params]: extra parameters specific to the exchange API endpoint
2847
3039
  :param int [params.start_timestamp]: fetch funding rate starting from self timestamp
@@ -2872,10 +3064,14 @@ class deribit(Exchange, ImplicitAPI):
2872
3064
  async def fetch_funding_rate_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
2873
3065
  """
2874
3066
  fetch the current funding rate
2875
- :see: https://docs.deribit.com/#public-get_funding_rate_history
3067
+
3068
+ https://docs.deribit.com/#public-get_funding_rate_history
3069
+
2876
3070
  :param str symbol: unified market symbol
3071
+ :param int [since]: the earliest time in ms to fetch funding rate history for
3072
+ :param int [limit]: the maximum number of entries to retrieve
2877
3073
  :param dict [params]: extra parameters specific to the exchange API endpoint
2878
- :param int [params.end_timestamp]: fetch funding rate ending at self timestamp
3074
+ :param int [params.until]: fetch funding rate ending at self timestamp
2879
3075
  :param boolean [params.paginate]: default False, when True will automatically paginate by calling self endpoint multiple times. See in the docs all the [availble parameters](https://github.com/ccxt/ccxt/wiki/Manual#pagination-params)
2880
3076
  :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
2881
3077
  """
@@ -2883,17 +3079,32 @@ class deribit(Exchange, ImplicitAPI):
2883
3079
  market = self.market(symbol)
2884
3080
  paginate = False
2885
3081
  paginate, params = self.handle_option_and_params(params, 'fetchFundingRateHistory', 'paginate')
3082
+ maxEntriesPerRequest = 744 # seems exchange returns max 744 items per request
3083
+ eachItemDuration = '1h'
2886
3084
  if paginate:
2887
- return await self.fetch_paginated_call_deterministic('fetchFundingRateHistory', symbol, since, limit, '8h', params, 720)
3085
+ # fix for: https://github.com/ccxt/ccxt/issues/25040
3086
+ return await self.fetch_paginated_call_deterministic('fetchFundingRateHistory', symbol, since, limit, eachItemDuration, self.extend(params, {'isDeribitPaginationCall': True}), maxEntriesPerRequest)
3087
+ duration = self.parse_timeframe(eachItemDuration) * 1000
2888
3088
  time = self.milliseconds()
2889
3089
  month = 30 * 24 * 60 * 60 * 1000
2890
3090
  if since is None:
2891
3091
  since = time - month
3092
+ else:
3093
+ time = since + month
2892
3094
  request: dict = {
2893
3095
  'instrument_name': market['id'],
2894
3096
  'start_timestamp': since - 1,
2895
- 'end_timestamp': time,
2896
3097
  }
3098
+ until = self.safe_integer_2(params, 'until', 'end_timestamp')
3099
+ if until is not None:
3100
+ params = self.omit(params, ['until'])
3101
+ request['end_timestamp'] = until
3102
+ else:
3103
+ request['end_timestamp'] = time
3104
+ if 'isDeribitPaginationCall' in params:
3105
+ params = self.omit(params, 'isDeribitPaginationCall')
3106
+ maxUntil = self.sum(since, limit * duration)
3107
+ request['end_timestamp'] = min(request['end_timestamp'], maxUntil)
2897
3108
  response = await self.publicGetGetFundingRateHistory(self.extend(request, params))
2898
3109
  #
2899
3110
  # {
@@ -2918,7 +3129,7 @@ class deribit(Exchange, ImplicitAPI):
2918
3129
  rates.append(rate)
2919
3130
  return self.filter_by_symbol_since_limit(rates, symbol, since, limit)
2920
3131
 
2921
- def parse_funding_rate(self, contract, market: Market = None):
3132
+ def parse_funding_rate(self, contract, market: Market = None) -> FundingRate:
2922
3133
  #
2923
3134
  # {
2924
3135
  # "jsonrpc":"2.0",
@@ -2958,12 +3169,15 @@ class deribit(Exchange, ImplicitAPI):
2958
3169
  'previousFundingRate': None,
2959
3170
  'previousFundingTimestamp': None,
2960
3171
  'previousFundingDatetime': None,
3172
+ 'interval': '8h',
2961
3173
  }
2962
3174
 
2963
3175
  async def fetch_liquidations(self, symbol: str, since: Int = None, limit: Int = None, params={}):
2964
3176
  """
2965
3177
  retrieves the public liquidations of a trading pair
2966
- :see: https://docs.deribit.com/#public-get_last_settlements_by_currency
3178
+
3179
+ https://docs.deribit.com/#public-get_last_settlements_by_currency
3180
+
2967
3181
  :param str symbol: unified CCXT market symbol
2968
3182
  :param int [since]: the earliest time in ms to fetch liquidations for
2969
3183
  :param int [limit]: the maximum number of liquidation structures to retrieve
@@ -3033,7 +3247,9 @@ class deribit(Exchange, ImplicitAPI):
3033
3247
  async def fetch_my_liquidations(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
3034
3248
  """
3035
3249
  retrieves the users liquidated positions
3036
- :see: https://docs.deribit.com/#private-get_settlement_history_by_instrument
3250
+
3251
+ https://docs.deribit.com/#private-get_settlement_history_by_instrument
3252
+
3037
3253
  :param str symbol: unified CCXT market symbol
3038
3254
  :param int [since]: the earliest time in ms to fetch liquidations for
3039
3255
  :param int [limit]: the maximum number of liquidation structures to retrieve
@@ -3112,7 +3328,9 @@ class deribit(Exchange, ImplicitAPI):
3112
3328
  async def fetch_greeks(self, symbol: str, params={}) -> Greeks:
3113
3329
  """
3114
3330
  fetches an option contracts greeks, financial metrics used to measure the factors that affect the price of an options contract
3115
- :see: https://docs.deribit.com/#public-ticker
3331
+
3332
+ https://docs.deribit.com/#public-ticker
3333
+
3116
3334
  :param str symbol: unified symbol of the market to fetch greeks for
3117
3335
  :param dict [params]: extra parameters specific to the exchange API endpoint
3118
3336
  :returns dict: a `greeks structure <https://docs.ccxt.com/#/?id=greeks-structure>`
@@ -3241,7 +3459,9 @@ class deribit(Exchange, ImplicitAPI):
3241
3459
  async def fetch_option(self, symbol: str, params={}) -> Option:
3242
3460
  """
3243
3461
  fetches option data that is commonly found in an option chain
3244
- :see: https://docs.deribit.com/#public-get_book_summary_by_instrument
3462
+
3463
+ https://docs.deribit.com/#public-get_book_summary_by_instrument
3464
+
3245
3465
  :param str symbol: unified market symbol
3246
3466
  :param dict [params]: extra parameters specific to the exchange API endpoint
3247
3467
  :returns dict: an `option chain structure <https://docs.ccxt.com/#/?id=option-chain-structure>`
@@ -3291,8 +3511,10 @@ class deribit(Exchange, ImplicitAPI):
3291
3511
  async def fetch_option_chain(self, code: str, params={}) -> OptionChain:
3292
3512
  """
3293
3513
  fetches data for an underlying asset that is commonly found in an option chain
3294
- :see: https://docs.deribit.com/#public-get_book_summary_by_currency
3295
- :param str currency: base currency to fetch an option chain for
3514
+
3515
+ https://docs.deribit.com/#public-get_book_summary_by_currency
3516
+
3517
+ :param str code: base currency to fetch an option chain for
3296
3518
  :param dict [params]: extra parameters specific to the exchange API endpoint
3297
3519
  :returns dict: a list of `option chain structures <https://docs.ccxt.com/#/?id=option-chain-structure>`
3298
3520
  """