ccxt 4.2.77__py2.py3-none-any.whl → 4.4.48__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 (546) hide show
  1. ccxt/__init__.py +36 -14
  2. ccxt/abstract/alpaca.py +4 -0
  3. ccxt/abstract/bigone.py +1 -1
  4. ccxt/abstract/binance.py +112 -48
  5. ccxt/abstract/binancecoinm.py +112 -48
  6. ccxt/abstract/binanceus.py +147 -83
  7. ccxt/abstract/binanceusdm.py +112 -48
  8. ccxt/abstract/bingx.py +133 -78
  9. ccxt/abstract/bitbank.py +5 -0
  10. ccxt/abstract/bitfinex.py +136 -65
  11. ccxt/abstract/bitfinex1.py +69 -0
  12. ccxt/abstract/bitflyer.py +1 -0
  13. ccxt/abstract/bitget.py +8 -1
  14. ccxt/abstract/bitmart.py +13 -1
  15. ccxt/abstract/bitopro.py +1 -0
  16. ccxt/abstract/bitpanda.py +0 -12
  17. ccxt/abstract/bitrue.py +3 -3
  18. ccxt/abstract/bitstamp.py +26 -3
  19. ccxt/abstract/blofin.py +24 -0
  20. ccxt/abstract/btcbox.py +1 -0
  21. ccxt/abstract/bybit.py +29 -14
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbase.py +6 -0
  24. ccxt/abstract/coinbaseadvanced.py +94 -0
  25. ccxt/abstract/{coinbasepro.py → coinbaseexchange.py} +1 -0
  26. ccxt/abstract/coinbaseinternational.py +1 -1
  27. ccxt/abstract/coincatch.py +94 -0
  28. ccxt/abstract/coinex.py +233 -123
  29. ccxt/abstract/coinmetro.py +1 -0
  30. ccxt/abstract/cryptocom.py +14 -0
  31. ccxt/abstract/defx.py +69 -0
  32. ccxt/abstract/deribit.py +1 -0
  33. ccxt/abstract/digifinex.py +1 -0
  34. ccxt/abstract/ellipx.py +25 -0
  35. ccxt/abstract/gate.py +20 -0
  36. ccxt/abstract/gateio.py +20 -0
  37. ccxt/abstract/gemini.py +1 -0
  38. ccxt/abstract/hashkey.py +67 -0
  39. ccxt/abstract/hyperliquid.py +1 -1
  40. ccxt/abstract/independentreserve.py +6 -0
  41. ccxt/abstract/kraken.py +4 -3
  42. ccxt/abstract/krakenfutures.py +4 -0
  43. ccxt/abstract/kucoin.py +24 -0
  44. ccxt/abstract/kucoinfutures.py +34 -0
  45. ccxt/abstract/luno.py +2 -0
  46. ccxt/abstract/mexc.py +4 -0
  47. ccxt/abstract/myokx.py +340 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +30 -0
  50. ccxt/abstract/onetrading.py +0 -12
  51. ccxt/abstract/oxfun.py +34 -0
  52. ccxt/abstract/paradex.py +40 -0
  53. ccxt/abstract/phemex.py +1 -0
  54. ccxt/abstract/upbit.py +4 -0
  55. ccxt/abstract/vertex.py +19 -0
  56. ccxt/abstract/whitebit.py +31 -1
  57. ccxt/abstract/woo.py +6 -2
  58. ccxt/abstract/woofipro.py +119 -0
  59. ccxt/abstract/xt.py +153 -0
  60. ccxt/abstract/zonda.py +6 -0
  61. ccxt/ace.py +164 -60
  62. ccxt/alpaca.py +727 -63
  63. ccxt/ascendex.py +395 -249
  64. ccxt/async_support/__init__.py +36 -14
  65. ccxt/async_support/ace.py +164 -60
  66. ccxt/async_support/alpaca.py +727 -63
  67. ccxt/async_support/ascendex.py +396 -249
  68. ccxt/async_support/base/exchange.py +531 -155
  69. ccxt/async_support/base/ws/aiohttp_client.py +28 -5
  70. ccxt/async_support/base/ws/cache.py +3 -2
  71. ccxt/async_support/base/ws/client.py +26 -5
  72. ccxt/async_support/base/ws/fast_client.py +4 -3
  73. ccxt/async_support/base/ws/functions.py +1 -1
  74. ccxt/async_support/base/ws/future.py +40 -31
  75. ccxt/async_support/base/ws/order_book_side.py +3 -0
  76. ccxt/async_support/bequant.py +1 -1
  77. ccxt/async_support/bigone.py +329 -202
  78. ccxt/async_support/binance.py +3030 -1087
  79. ccxt/async_support/binancecoinm.py +2 -1
  80. ccxt/async_support/binanceus.py +12 -1
  81. ccxt/async_support/binanceusdm.py +3 -1
  82. ccxt/async_support/bingx.py +3104 -880
  83. ccxt/async_support/bit2c.py +119 -38
  84. ccxt/async_support/bitbank.py +215 -76
  85. ccxt/async_support/bitbns.py +124 -53
  86. ccxt/async_support/bitfinex.py +3236 -1078
  87. ccxt/async_support/bitfinex1.py +1711 -0
  88. ccxt/async_support/bitflyer.py +238 -49
  89. ccxt/async_support/bitget.py +1513 -563
  90. ccxt/async_support/bithumb.py +199 -65
  91. ccxt/async_support/bitmart.py +1320 -435
  92. ccxt/async_support/bitmex.py +308 -111
  93. ccxt/async_support/bitopro.py +256 -96
  94. ccxt/async_support/bitrue.py +365 -233
  95. ccxt/async_support/bitso.py +201 -89
  96. ccxt/async_support/bitstamp.py +438 -269
  97. ccxt/async_support/bitteam.py +179 -73
  98. ccxt/async_support/bitvavo.py +180 -70
  99. ccxt/async_support/bl3p.py +92 -25
  100. ccxt/async_support/blockchaincom.py +193 -79
  101. ccxt/async_support/blofin.py +392 -148
  102. ccxt/async_support/btcalpha.py +161 -55
  103. ccxt/async_support/btcbox.py +250 -34
  104. ccxt/async_support/btcmarkets.py +232 -85
  105. ccxt/async_support/btcturk.py +159 -60
  106. ccxt/async_support/bybit.py +2231 -1193
  107. ccxt/async_support/cex.py +1409 -1329
  108. ccxt/async_support/coinbase.py +1454 -287
  109. ccxt/async_support/coinbaseadvanced.py +17 -0
  110. ccxt/async_support/{coinbasepro.py → coinbaseexchange.py} +233 -99
  111. ccxt/async_support/coinbaseinternational.py +428 -88
  112. ccxt/async_support/coincatch.py +5152 -0
  113. ccxt/async_support/coincheck.py +121 -38
  114. ccxt/async_support/coinex.py +4020 -3339
  115. ccxt/async_support/coinlist.py +273 -116
  116. ccxt/async_support/coinmate.py +204 -97
  117. ccxt/async_support/coinmetro.py +203 -110
  118. ccxt/async_support/coinone.py +142 -68
  119. ccxt/async_support/coinsph.py +206 -89
  120. ccxt/async_support/coinspot.py +137 -62
  121. ccxt/async_support/cryptocom.py +515 -185
  122. ccxt/async_support/currencycom.py +203 -85
  123. ccxt/async_support/defx.py +2066 -0
  124. ccxt/async_support/delta.py +404 -109
  125. ccxt/async_support/deribit.py +557 -323
  126. ccxt/async_support/digifinex.py +340 -223
  127. ccxt/async_support/ellipx.py +1826 -0
  128. ccxt/async_support/exmo.py +259 -128
  129. ccxt/async_support/gate.py +1472 -463
  130. ccxt/async_support/gemini.py +206 -84
  131. ccxt/async_support/hashkey.py +4164 -0
  132. ccxt/async_support/hitbtc.py +334 -178
  133. ccxt/async_support/hollaex.py +134 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +105 -56
  136. ccxt/async_support/hyperliquid.py +1633 -268
  137. ccxt/async_support/idex.py +148 -95
  138. ccxt/async_support/independentreserve.py +236 -31
  139. ccxt/async_support/indodax.py +165 -62
  140. ccxt/async_support/kraken.py +871 -354
  141. ccxt/async_support/krakenfutures.py +324 -100
  142. ccxt/async_support/kucoin.py +917 -357
  143. ccxt/async_support/kucoinfutures.py +1004 -149
  144. ccxt/async_support/kuna.py +138 -106
  145. ccxt/async_support/latoken.py +135 -79
  146. ccxt/async_support/lbank.py +290 -113
  147. ccxt/async_support/luno.py +112 -62
  148. ccxt/async_support/lykke.py +104 -55
  149. ccxt/async_support/mercado.py +36 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +43 -0
  152. ccxt/async_support/ndax.py +163 -82
  153. ccxt/async_support/novadax.py +121 -75
  154. ccxt/async_support/oceanex.py +175 -59
  155. ccxt/async_support/okcoin.py +222 -163
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +132 -414
  158. ccxt/async_support/oxfun.py +2832 -0
  159. ccxt/async_support/p2b.py +79 -51
  160. ccxt/async_support/paradex.py +2017 -0
  161. ccxt/async_support/paymium.py +56 -32
  162. ccxt/async_support/phemex.py +572 -196
  163. ccxt/async_support/poloniex.py +218 -95
  164. ccxt/async_support/poloniexfutures.py +260 -92
  165. ccxt/async_support/probit.py +143 -110
  166. ccxt/async_support/timex.py +123 -70
  167. ccxt/async_support/tokocrypto.py +129 -93
  168. ccxt/async_support/tradeogre.py +39 -25
  169. ccxt/async_support/upbit.py +322 -113
  170. ccxt/async_support/vertex.py +2983 -0
  171. ccxt/async_support/wavesexchange.py +227 -173
  172. ccxt/async_support/wazirx.py +145 -65
  173. ccxt/async_support/whitebit.py +533 -138
  174. ccxt/async_support/woo.py +1137 -296
  175. ccxt/async_support/woofipro.py +2716 -0
  176. ccxt/async_support/xt.py +4628 -0
  177. ccxt/async_support/yobit.py +160 -92
  178. ccxt/async_support/zaif.py +80 -33
  179. ccxt/async_support/zonda.py +140 -69
  180. ccxt/base/errors.py +51 -20
  181. ccxt/base/exchange.py +1722 -480
  182. ccxt/base/precise.py +10 -0
  183. ccxt/base/types.py +223 -4
  184. ccxt/bequant.py +1 -1
  185. ccxt/bigone.py +329 -202
  186. ccxt/binance.py +3030 -1087
  187. ccxt/binancecoinm.py +2 -1
  188. ccxt/binanceus.py +12 -1
  189. ccxt/binanceusdm.py +3 -1
  190. ccxt/bingx.py +3104 -880
  191. ccxt/bit2c.py +119 -38
  192. ccxt/bitbank.py +215 -76
  193. ccxt/bitbns.py +124 -53
  194. ccxt/bitfinex.py +3235 -1078
  195. ccxt/bitfinex1.py +1710 -0
  196. ccxt/bitflyer.py +238 -49
  197. ccxt/bitget.py +1513 -563
  198. ccxt/bithumb.py +198 -65
  199. ccxt/bitmart.py +1320 -435
  200. ccxt/bitmex.py +308 -111
  201. ccxt/bitopro.py +256 -96
  202. ccxt/bitrue.py +365 -233
  203. ccxt/bitso.py +201 -89
  204. ccxt/bitstamp.py +438 -269
  205. ccxt/bitteam.py +179 -73
  206. ccxt/bitvavo.py +180 -70
  207. ccxt/bl3p.py +92 -25
  208. ccxt/blockchaincom.py +193 -79
  209. ccxt/blofin.py +392 -148
  210. ccxt/btcalpha.py +161 -55
  211. ccxt/btcbox.py +250 -34
  212. ccxt/btcmarkets.py +232 -85
  213. ccxt/btcturk.py +159 -60
  214. ccxt/bybit.py +2231 -1193
  215. ccxt/cex.py +1408 -1329
  216. ccxt/coinbase.py +1454 -287
  217. ccxt/coinbaseadvanced.py +17 -0
  218. ccxt/{coinbasepro.py → coinbaseexchange.py} +233 -99
  219. ccxt/coinbaseinternational.py +428 -88
  220. ccxt/coincatch.py +5152 -0
  221. ccxt/coincheck.py +121 -38
  222. ccxt/coinex.py +4020 -3339
  223. ccxt/coinlist.py +273 -116
  224. ccxt/coinmate.py +204 -97
  225. ccxt/coinmetro.py +203 -110
  226. ccxt/coinone.py +142 -68
  227. ccxt/coinsph.py +206 -89
  228. ccxt/coinspot.py +137 -62
  229. ccxt/cryptocom.py +515 -185
  230. ccxt/currencycom.py +203 -85
  231. ccxt/defx.py +2065 -0
  232. ccxt/delta.py +404 -109
  233. ccxt/deribit.py +557 -323
  234. ccxt/digifinex.py +340 -223
  235. ccxt/ellipx.py +1826 -0
  236. ccxt/exmo.py +259 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +334 -178
  241. ccxt/hollaex.py +134 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +105 -56
  244. ccxt/hyperliquid.py +1632 -268
  245. ccxt/idex.py +148 -95
  246. ccxt/independentreserve.py +235 -31
  247. ccxt/indodax.py +165 -62
  248. ccxt/kraken.py +871 -354
  249. ccxt/krakenfutures.py +324 -100
  250. ccxt/kucoin.py +917 -357
  251. ccxt/kucoinfutures.py +1004 -149
  252. ccxt/kuna.py +138 -106
  253. ccxt/latoken.py +135 -79
  254. ccxt/lbank.py +290 -113
  255. ccxt/luno.py +112 -62
  256. ccxt/lykke.py +104 -55
  257. ccxt/mercado.py +36 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +43 -0
  260. ccxt/ndax.py +163 -82
  261. ccxt/novadax.py +121 -75
  262. ccxt/oceanex.py +175 -59
  263. ccxt/okcoin.py +222 -163
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +132 -414
  266. ccxt/oxfun.py +2831 -0
  267. ccxt/p2b.py +79 -51
  268. ccxt/paradex.py +2017 -0
  269. ccxt/paymium.py +56 -32
  270. ccxt/phemex.py +572 -196
  271. ccxt/poloniex.py +218 -95
  272. ccxt/poloniexfutures.py +260 -92
  273. ccxt/pro/__init__.py +29 -5
  274. ccxt/pro/alpaca.py +32 -17
  275. ccxt/pro/ascendex.py +62 -14
  276. ccxt/pro/bequant.py +4 -0
  277. ccxt/pro/binance.py +1596 -329
  278. ccxt/pro/binancecoinm.py +1 -0
  279. ccxt/pro/binanceus.py +2 -9
  280. ccxt/pro/binanceusdm.py +2 -0
  281. ccxt/pro/bingx.py +527 -134
  282. ccxt/pro/bitcoincom.py +4 -1
  283. ccxt/pro/bitfinex.py +731 -266
  284. ccxt/pro/bitfinex1.py +635 -0
  285. ccxt/pro/bitget.py +726 -357
  286. ccxt/pro/bithumb.py +380 -0
  287. ccxt/pro/bitmart.py +138 -39
  288. ccxt/pro/bitmex.py +199 -40
  289. ccxt/pro/bitopro.py +25 -13
  290. ccxt/pro/bitrue.py +31 -32
  291. ccxt/pro/bitstamp.py +7 -6
  292. ccxt/pro/bitvavo.py +203 -81
  293. ccxt/pro/blockchaincom.py +30 -17
  294. ccxt/pro/blofin.py +692 -0
  295. ccxt/pro/bybit.py +791 -82
  296. ccxt/pro/cex.py +99 -51
  297. ccxt/pro/coinbase.py +220 -30
  298. ccxt/{async_support/hitbtc3.py → pro/coinbaseadvanced.py} +5 -5
  299. ccxt/pro/{coinbasepro.py → coinbaseexchange.py} +19 -19
  300. ccxt/pro/coinbaseinternational.py +193 -30
  301. ccxt/pro/coincatch.py +1464 -0
  302. ccxt/pro/coincheck.py +11 -6
  303. ccxt/pro/coinex.py +965 -665
  304. ccxt/pro/coinone.py +17 -10
  305. ccxt/pro/cryptocom.py +446 -66
  306. ccxt/pro/currencycom.py +11 -10
  307. ccxt/pro/defx.py +832 -0
  308. ccxt/pro/deribit.py +167 -31
  309. ccxt/pro/exmo.py +252 -20
  310. ccxt/pro/gate.py +729 -64
  311. ccxt/pro/gemini.py +44 -26
  312. ccxt/pro/hashkey.py +802 -0
  313. ccxt/pro/hitbtc.py +208 -103
  314. ccxt/pro/hollaex.py +25 -9
  315. ccxt/pro/htx.py +83 -39
  316. ccxt/pro/huobijp.py +17 -16
  317. ccxt/pro/hyperliquid.py +502 -31
  318. ccxt/pro/idex.py +28 -13
  319. ccxt/pro/independentreserve.py +21 -16
  320. ccxt/pro/kraken.py +298 -51
  321. ccxt/pro/krakenfutures.py +166 -75
  322. ccxt/pro/kucoin.py +395 -77
  323. ccxt/pro/kucoinfutures.py +400 -99
  324. ccxt/pro/lbank.py +52 -31
  325. ccxt/pro/luno.py +12 -10
  326. ccxt/pro/mexc.py +400 -50
  327. ccxt/pro/myokx.py +28 -0
  328. ccxt/pro/ndax.py +25 -12
  329. ccxt/pro/okcoin.py +28 -9
  330. ccxt/pro/okx.py +935 -124
  331. ccxt/pro/onetrading.py +41 -24
  332. ccxt/pro/oxfun.py +1054 -0
  333. ccxt/pro/p2b.py +100 -24
  334. ccxt/pro/paradex.py +352 -0
  335. ccxt/pro/phemex.py +92 -33
  336. ccxt/pro/poloniex.py +128 -49
  337. ccxt/pro/poloniexfutures.py +53 -32
  338. ccxt/pro/probit.py +92 -85
  339. ccxt/pro/upbit.py +401 -8
  340. ccxt/pro/vertex.py +943 -0
  341. ccxt/pro/wazirx.py +46 -28
  342. ccxt/pro/whitebit.py +65 -12
  343. ccxt/pro/woo.py +437 -65
  344. ccxt/pro/woofipro.py +1271 -0
  345. ccxt/pro/xt.py +1067 -0
  346. ccxt/probit.py +143 -110
  347. ccxt/static_dependencies/__init__.py +1 -1
  348. ccxt/static_dependencies/lark/__init__.py +38 -0
  349. ccxt/static_dependencies/lark/__pyinstaller/__init__.py +6 -0
  350. ccxt/static_dependencies/lark/__pyinstaller/hook-lark.py +14 -0
  351. ccxt/static_dependencies/lark/ast_utils.py +59 -0
  352. ccxt/static_dependencies/lark/common.py +86 -0
  353. ccxt/static_dependencies/lark/exceptions.py +292 -0
  354. ccxt/static_dependencies/lark/grammar.py +130 -0
  355. ccxt/static_dependencies/lark/grammars/__init__.py +0 -0
  356. ccxt/static_dependencies/lark/indenter.py +143 -0
  357. ccxt/static_dependencies/lark/lark.py +658 -0
  358. ccxt/static_dependencies/lark/lexer.py +678 -0
  359. ccxt/static_dependencies/lark/load_grammar.py +1428 -0
  360. ccxt/static_dependencies/lark/parse_tree_builder.py +391 -0
  361. ccxt/static_dependencies/lark/parser_frontends.py +257 -0
  362. ccxt/static_dependencies/lark/parsers/__init__.py +0 -0
  363. ccxt/static_dependencies/lark/parsers/cyk.py +340 -0
  364. ccxt/static_dependencies/lark/parsers/earley.py +314 -0
  365. ccxt/static_dependencies/lark/parsers/earley_common.py +42 -0
  366. ccxt/static_dependencies/lark/parsers/earley_forest.py +801 -0
  367. ccxt/static_dependencies/lark/parsers/grammar_analysis.py +203 -0
  368. ccxt/static_dependencies/lark/parsers/lalr_analysis.py +332 -0
  369. ccxt/static_dependencies/lark/parsers/lalr_interactive_parser.py +158 -0
  370. ccxt/static_dependencies/lark/parsers/lalr_parser.py +122 -0
  371. ccxt/static_dependencies/lark/parsers/lalr_parser_state.py +110 -0
  372. ccxt/static_dependencies/lark/parsers/xearley.py +165 -0
  373. ccxt/static_dependencies/lark/py.typed +0 -0
  374. ccxt/static_dependencies/lark/reconstruct.py +107 -0
  375. ccxt/static_dependencies/lark/tools/__init__.py +70 -0
  376. ccxt/static_dependencies/lark/tools/nearley.py +202 -0
  377. ccxt/static_dependencies/lark/tools/serialize.py +32 -0
  378. ccxt/static_dependencies/lark/tools/standalone.py +196 -0
  379. ccxt/static_dependencies/lark/tree.py +267 -0
  380. ccxt/static_dependencies/lark/tree_matcher.py +186 -0
  381. ccxt/static_dependencies/lark/tree_templates.py +180 -0
  382. ccxt/static_dependencies/lark/utils.py +343 -0
  383. ccxt/static_dependencies/lark/visitors.py +596 -0
  384. ccxt/static_dependencies/marshmallow/__init__.py +81 -0
  385. ccxt/static_dependencies/marshmallow/base.py +65 -0
  386. ccxt/static_dependencies/marshmallow/class_registry.py +94 -0
  387. ccxt/static_dependencies/marshmallow/decorators.py +231 -0
  388. ccxt/static_dependencies/marshmallow/error_store.py +60 -0
  389. ccxt/static_dependencies/marshmallow/exceptions.py +71 -0
  390. ccxt/static_dependencies/marshmallow/fields.py +2114 -0
  391. ccxt/static_dependencies/marshmallow/orderedset.py +89 -0
  392. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  393. ccxt/static_dependencies/marshmallow/schema.py +1228 -0
  394. ccxt/static_dependencies/marshmallow/types.py +12 -0
  395. ccxt/static_dependencies/marshmallow/utils.py +378 -0
  396. ccxt/static_dependencies/marshmallow/validate.py +678 -0
  397. ccxt/static_dependencies/marshmallow/warnings.py +2 -0
  398. ccxt/static_dependencies/marshmallow_dataclass/__init__.py +1047 -0
  399. ccxt/static_dependencies/marshmallow_dataclass/collection_field.py +51 -0
  400. ccxt/static_dependencies/marshmallow_dataclass/lazy_class_attribute.py +45 -0
  401. ccxt/static_dependencies/marshmallow_dataclass/mypy.py +71 -0
  402. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  403. ccxt/static_dependencies/marshmallow_dataclass/typing.py +14 -0
  404. ccxt/static_dependencies/marshmallow_dataclass/union_field.py +82 -0
  405. ccxt/static_dependencies/marshmallow_oneofschema/__init__.py +1 -0
  406. ccxt/static_dependencies/marshmallow_oneofschema/one_of_schema.py +193 -0
  407. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  408. ccxt/static_dependencies/starknet/__init__.py +0 -0
  409. ccxt/static_dependencies/starknet/cairo/__init__.py +0 -0
  410. ccxt/static_dependencies/starknet/cairo/data_types.py +123 -0
  411. ccxt/static_dependencies/starknet/cairo/deprecated_parse/__init__.py +0 -0
  412. ccxt/static_dependencies/starknet/cairo/deprecated_parse/cairo_types.py +77 -0
  413. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser.py +46 -0
  414. ccxt/static_dependencies/starknet/cairo/deprecated_parse/parser_transformer.py +138 -0
  415. ccxt/static_dependencies/starknet/cairo/felt.py +64 -0
  416. ccxt/static_dependencies/starknet/cairo/type_parser.py +121 -0
  417. ccxt/static_dependencies/starknet/cairo/v1/__init__.py +0 -0
  418. ccxt/static_dependencies/starknet/cairo/v1/type_parser.py +59 -0
  419. ccxt/static_dependencies/starknet/cairo/v2/__init__.py +0 -0
  420. ccxt/static_dependencies/starknet/cairo/v2/type_parser.py +77 -0
  421. ccxt/static_dependencies/starknet/ccxt_utils.py +7 -0
  422. ccxt/static_dependencies/starknet/common.py +15 -0
  423. ccxt/static_dependencies/starknet/constants.py +39 -0
  424. ccxt/static_dependencies/starknet/hash/__init__.py +0 -0
  425. ccxt/static_dependencies/starknet/hash/address.py +79 -0
  426. ccxt/static_dependencies/starknet/hash/compiled_class_hash_objects.py +111 -0
  427. ccxt/static_dependencies/starknet/hash/selector.py +16 -0
  428. ccxt/static_dependencies/starknet/hash/storage.py +12 -0
  429. ccxt/static_dependencies/starknet/hash/utils.py +78 -0
  430. ccxt/static_dependencies/starknet/models/__init__.py +0 -0
  431. ccxt/static_dependencies/starknet/models/typed_data.py +45 -0
  432. ccxt/static_dependencies/starknet/serialization/__init__.py +24 -0
  433. ccxt/static_dependencies/starknet/serialization/_calldata_reader.py +40 -0
  434. ccxt/static_dependencies/starknet/serialization/_context.py +142 -0
  435. ccxt/static_dependencies/starknet/serialization/data_serializers/__init__.py +10 -0
  436. ccxt/static_dependencies/starknet/serialization/data_serializers/_common.py +82 -0
  437. ccxt/static_dependencies/starknet/serialization/data_serializers/array_serializer.py +43 -0
  438. ccxt/static_dependencies/starknet/serialization/data_serializers/bool_serializer.py +37 -0
  439. ccxt/static_dependencies/starknet/serialization/data_serializers/byte_array_serializer.py +66 -0
  440. ccxt/static_dependencies/starknet/serialization/data_serializers/cairo_data_serializer.py +71 -0
  441. ccxt/static_dependencies/starknet/serialization/data_serializers/enum_serializer.py +71 -0
  442. ccxt/static_dependencies/starknet/serialization/data_serializers/felt_serializer.py +50 -0
  443. ccxt/static_dependencies/starknet/serialization/data_serializers/named_tuple_serializer.py +58 -0
  444. ccxt/static_dependencies/starknet/serialization/data_serializers/option_serializer.py +43 -0
  445. ccxt/static_dependencies/starknet/serialization/data_serializers/output_serializer.py +40 -0
  446. ccxt/static_dependencies/starknet/serialization/data_serializers/payload_serializer.py +72 -0
  447. ccxt/static_dependencies/starknet/serialization/data_serializers/struct_serializer.py +36 -0
  448. ccxt/static_dependencies/starknet/serialization/data_serializers/tuple_serializer.py +36 -0
  449. ccxt/static_dependencies/starknet/serialization/data_serializers/uint256_serializer.py +76 -0
  450. ccxt/static_dependencies/starknet/serialization/data_serializers/uint_serializer.py +100 -0
  451. ccxt/static_dependencies/starknet/serialization/data_serializers/unit_serializer.py +32 -0
  452. ccxt/static_dependencies/starknet/serialization/errors.py +10 -0
  453. ccxt/static_dependencies/starknet/serialization/factory.py +229 -0
  454. ccxt/static_dependencies/starknet/serialization/function_serialization_adapter.py +110 -0
  455. ccxt/static_dependencies/starknet/serialization/tuple_dataclass.py +59 -0
  456. ccxt/static_dependencies/starknet/utils/__init__.py +0 -0
  457. ccxt/static_dependencies/starknet/utils/constructor_args_translator.py +86 -0
  458. ccxt/static_dependencies/starknet/utils/iterable.py +13 -0
  459. ccxt/static_dependencies/starknet/utils/schema.py +13 -0
  460. ccxt/static_dependencies/starknet/utils/typed_data.py +182 -0
  461. ccxt/static_dependencies/starkware/__init__.py +0 -0
  462. ccxt/static_dependencies/starkware/crypto/__init__.py +0 -0
  463. ccxt/static_dependencies/starkware/crypto/fast_pedersen_hash.py +50 -0
  464. ccxt/static_dependencies/starkware/crypto/math_utils.py +78 -0
  465. ccxt/static_dependencies/starkware/crypto/signature.py +2344 -0
  466. ccxt/static_dependencies/starkware/crypto/utils.py +63 -0
  467. ccxt/static_dependencies/sympy/__init__.py +0 -0
  468. ccxt/static_dependencies/sympy/core/__init__.py +0 -0
  469. ccxt/static_dependencies/sympy/core/intfunc.py +35 -0
  470. ccxt/static_dependencies/sympy/external/__init__.py +0 -0
  471. ccxt/static_dependencies/sympy/external/gmpy.py +345 -0
  472. ccxt/static_dependencies/sympy/external/importtools.py +187 -0
  473. ccxt/static_dependencies/sympy/external/ntheory.py +637 -0
  474. ccxt/static_dependencies/sympy/external/pythonmpq.py +341 -0
  475. ccxt/static_dependencies/typing_inspect/__init__.py +0 -0
  476. ccxt/static_dependencies/typing_inspect/typing_inspect.py +851 -0
  477. ccxt/test/{test_async.py → tests_async.py} +456 -391
  478. ccxt/test/tests_helpers.py +285 -0
  479. ccxt/test/tests_init.py +39 -0
  480. ccxt/test/{test_sync.py → tests_sync.py} +456 -393
  481. ccxt/timex.py +123 -70
  482. ccxt/tokocrypto.py +129 -93
  483. ccxt/tradeogre.py +39 -25
  484. ccxt/upbit.py +322 -113
  485. ccxt/vertex.py +2983 -0
  486. ccxt/wavesexchange.py +227 -173
  487. ccxt/wazirx.py +145 -65
  488. ccxt/whitebit.py +533 -138
  489. ccxt/woo.py +1137 -296
  490. ccxt/woofipro.py +2716 -0
  491. ccxt/xt.py +4627 -0
  492. ccxt/yobit.py +159 -92
  493. ccxt/zaif.py +80 -33
  494. ccxt/zonda.py +140 -69
  495. ccxt-4.4.48.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.48.dist-info/METADATA +646 -0
  497. ccxt-4.4.48.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/WHEEL +1 -1
  499. ccxt/abstract/bitbay.py +0 -47
  500. ccxt/abstract/bitfinex2.py +0 -139
  501. ccxt/abstract/hitbtc3.py +0 -115
  502. ccxt/async_support/bitbay.py +0 -17
  503. ccxt/async_support/bitfinex2.py +0 -3496
  504. ccxt/async_support/flowbtc.py +0 -34
  505. ccxt/bitbay.py +0 -17
  506. ccxt/bitfinex2.py +0 -3496
  507. ccxt/flowbtc.py +0 -34
  508. ccxt/hitbtc3.py +0 -16
  509. ccxt/pro/bitfinex2.py +0 -1081
  510. ccxt/test/base/__init__.py +0 -28
  511. ccxt/test/base/test_account.py +0 -26
  512. ccxt/test/base/test_balance.py +0 -56
  513. ccxt/test/base/test_borrow_interest.py +0 -35
  514. ccxt/test/base/test_borrow_rate.py +0 -32
  515. ccxt/test/base/test_calculate_fee.py +0 -51
  516. ccxt/test/base/test_crypto.py +0 -127
  517. ccxt/test/base/test_currency.py +0 -76
  518. ccxt/test/base/test_datetime.py +0 -103
  519. ccxt/test/base/test_decimal_to_precision.py +0 -392
  520. ccxt/test/base/test_deep_extend.py +0 -68
  521. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  522. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  523. ccxt/test/base/test_funding_rate_history.py +0 -29
  524. ccxt/test/base/test_last_price.py +0 -32
  525. ccxt/test/base/test_ledger_entry.py +0 -45
  526. ccxt/test/base/test_ledger_item.py +0 -48
  527. ccxt/test/base/test_leverage_tier.py +0 -33
  528. ccxt/test/base/test_margin_mode.py +0 -24
  529. ccxt/test/base/test_margin_modification.py +0 -35
  530. ccxt/test/base/test_market.py +0 -190
  531. ccxt/test/base/test_number.py +0 -411
  532. ccxt/test/base/test_ohlcv.py +0 -32
  533. ccxt/test/base/test_open_interest.py +0 -32
  534. ccxt/test/base/test_order.py +0 -64
  535. ccxt/test/base/test_order_book.py +0 -63
  536. ccxt/test/base/test_position.py +0 -60
  537. ccxt/test/base/test_shared_methods.py +0 -345
  538. ccxt/test/base/test_status.py +0 -24
  539. ccxt/test/base/test_throttle.py +0 -126
  540. ccxt/test/base/test_ticker.py +0 -86
  541. ccxt/test/base/test_trade.py +0 -47
  542. ccxt/test/base/test_trading_fee.py +0 -26
  543. ccxt/test/base/test_transaction.py +0 -39
  544. ccxt-4.2.77.dist-info/METADATA +0 -626
  545. ccxt-4.2.77.dist-info/RECORD +0 -534
  546. {ccxt-4.2.77.dist-info → ccxt-4.4.48.dist-info}/top_level.txt +0 -0
ccxt/poloniexfutures.py CHANGED
@@ -6,8 +6,9 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.poloniexfutures import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
9
+ from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, FundingRate, Trade
10
10
  from typing import List
11
+ from ccxt.base.errors import AuthenticationError
11
12
  from ccxt.base.errors import AccountSuspended
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import BadRequest
@@ -17,7 +18,6 @@ from ccxt.base.errors import NotSupported
17
18
  from ccxt.base.errors import RateLimitExceeded
18
19
  from ccxt.base.errors import ExchangeNotAvailable
19
20
  from ccxt.base.errors import InvalidNonce
20
- from ccxt.base.errors import AuthenticationError
21
21
  from ccxt.base.decimal_to_precision import TICK_SIZE
22
22
  from ccxt.base.precise import Precise
23
23
 
@@ -42,12 +42,16 @@ class poloniexfutures(Exchange, ImplicitAPI):
42
42
  'future': False,
43
43
  'option': None,
44
44
  'createOrder': True,
45
+ 'createStopOrder': True,
46
+ 'createTriggerOrder': True,
45
47
  'fetchBalance': True,
46
48
  'fetchClosedOrders': True,
47
49
  'fetchCurrencies': False,
48
50
  'fetchDepositAddress': False,
49
51
  'fetchDepositAddresses': False,
50
52
  'fetchDepositAddressesByNetwork': False,
53
+ 'fetchFundingInterval': True,
54
+ 'fetchFundingIntervals': False,
51
55
  'fetchFundingRate': True,
52
56
  'fetchFundingRateHistory': False,
53
57
  'fetchL3OrderBook': True,
@@ -84,7 +88,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
84
88
  'private': 'https://futures-api.poloniex.com',
85
89
  },
86
90
  'www': 'https://www.poloniex.com',
87
- 'doc': 'https://futures-docs.poloniex.com',
91
+ 'doc': 'https://api-docs.poloniex.com/futures/',
88
92
  'fees': 'https://poloniex.com/fee-schedule',
89
93
  'referral': 'https://poloniex.com/signup?c=UBFZJRPJ',
90
94
  },
@@ -186,6 +190,80 @@ class poloniexfutures(Exchange, ImplicitAPI):
186
190
  },
187
191
  },
188
192
  },
193
+ 'features': {
194
+ 'default': {
195
+ 'sandbox': False,
196
+ 'createOrder': {
197
+ 'marginMode': False,
198
+ 'triggerPrice': True,
199
+ # todo implementation
200
+ 'triggerPriceType': {
201
+ 'last': True,
202
+ 'mark': True,
203
+ 'index': True,
204
+ },
205
+ 'triggerDirection': True,
206
+ 'stopLossPrice': False, # todo
207
+ 'takeProfitPrice': False, # todo
208
+ 'attachedStopLossTakeProfit': None,
209
+ 'timeInForce': {
210
+ 'IOC': True,
211
+ 'FOK': False,
212
+ 'PO': True,
213
+ 'GTD': False,
214
+ },
215
+ 'hedged': False,
216
+ 'leverage': True, # deprecated?
217
+ 'marketBuyByCost': True,
218
+ 'marketBuyRequiresPrice': False,
219
+ 'selfTradePrevention': False,
220
+ 'trailing': False,
221
+ 'iceberg': True, # deprecated?
222
+ },
223
+ 'createOrders': None,
224
+ 'fetchMyTrades': {
225
+ 'marginMode': False,
226
+ 'limit': None,
227
+ 'daysBack': 100000,
228
+ 'untilDays': 7,
229
+ },
230
+ 'fetchOrder': {
231
+ 'marginMode': False,
232
+ 'trigger': False,
233
+ 'trailing': False,
234
+ },
235
+ 'fetchOpenOrders': {
236
+ 'marginMode': True,
237
+ 'limit': None,
238
+ 'trigger': False,
239
+ 'trailing': False,
240
+ },
241
+ 'fetchOrders': None, # todo
242
+ 'fetchClosedOrders': {
243
+ 'marginMode': False,
244
+ 'limit': 100,
245
+ 'daysBack': 100000,
246
+ 'daysBackCanceled': 1,
247
+ 'untilDays': 100000,
248
+ 'trigger': False,
249
+ 'trailing': False,
250
+ },
251
+ 'fetchOHLCV': {
252
+ 'limit': 200, # todo implement
253
+ },
254
+ },
255
+ 'spot': None,
256
+ 'swap': {
257
+ 'linear': {
258
+ 'extends': 'default',
259
+ },
260
+ 'inverse': None,
261
+ },
262
+ 'future': {
263
+ 'linear': None,
264
+ 'inverse': None,
265
+ },
266
+ },
189
267
  'exceptions': {
190
268
  'exact': {
191
269
  '400': BadRequest, # Bad Request -- Invalid request format
@@ -215,10 +293,12 @@ class poloniexfutures(Exchange, ImplicitAPI):
215
293
  },
216
294
  })
217
295
 
218
- def fetch_markets(self, params={}):
296
+ def fetch_markets(self, params={}) -> List[Market]:
219
297
  """
220
298
  retrieves data on all markets for poloniexfutures
221
- :see: https://futures-docs.poloniex.com/#symbol-2
299
+
300
+ https://api-docs.poloniex.com/futures/api/symbol
301
+
222
302
  :param dict [params]: extra parameters specific to the exchange API endpoint
223
303
  :returns dict[]: an array of objects representing market data
224
304
  """
@@ -288,7 +368,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
288
368
  data = self.safe_value(response, 'data', [])
289
369
  return self.parse_markets(data)
290
370
 
291
- def parse_market(self, market) -> Market:
371
+ def parse_market(self, market: dict) -> Market:
292
372
  id = self.safe_string(market, 'symbol')
293
373
  baseId = self.safe_string(market, 'baseCurrency')
294
374
  quoteId = self.safe_string(market, 'quoteCurrency')
@@ -356,7 +436,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
356
436
  'info': market,
357
437
  }
358
438
 
359
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
439
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
360
440
  #
361
441
  # {
362
442
  # "symbol": "BTCUSDTPERP", # Market of the symbol
@@ -382,7 +462,20 @@ class poloniexfutures(Exchange, ImplicitAPI):
382
462
  #
383
463
  marketId = self.safe_string(ticker, 'symbol')
384
464
  symbol = self.safe_symbol(marketId, market)
385
- timestamp = self.safe_integer_product(ticker, 'ts', 0.000001)
465
+ timestampString = self.safe_string(ticker, 'ts')
466
+ multiplier = None
467
+ if len(timestampString) == 16:
468
+ # 16 digits: https://app.travis-ci.com/github/ccxt/ccxt/builds/270587157#L5454
469
+ multiplier = 0.001
470
+ elif len(timestampString) == 17:
471
+ # 17 digits: https://app.travis-ci.com/github/ccxt/ccxt/builds/269959181#L4011
472
+ multiplier = 0.0001
473
+ elif len(timestampString) == 18:
474
+ multiplier = 0.00001
475
+ else:
476
+ # 19 length default
477
+ multiplier = 0.000001
478
+ timestamp = self.safe_integer_product(ticker, 'ts', multiplier)
386
479
  last = self.safe_string_2(ticker, 'price', 'lastPrice')
387
480
  percentage = Precise.string_mul(self.safe_string(ticker, 'priceChgPct'), '100')
388
481
  return self.safe_ticker({
@@ -411,14 +504,16 @@ class poloniexfutures(Exchange, ImplicitAPI):
411
504
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
412
505
  """
413
506
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
414
- :see: https://futures-docs.poloniex.com/#get-real-time-ticker-2-0
507
+
508
+ https://api-docs.poloniex.com/futures/api/ticker#get-real-time-ticker-20
509
+
415
510
  :param str symbol: unified symbol of the market to fetch the ticker for
416
511
  :param dict [params]: extra parameters specific to the exchange API endpoint
417
512
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
418
513
  """
419
514
  self.load_markets()
420
515
  market = self.market(symbol)
421
- request = {
516
+ request: dict = {
422
517
  'symbol': market['id'],
423
518
  }
424
519
  response = self.publicGetTicker(self.extend(request, params))
@@ -445,20 +540,25 @@ class poloniexfutures(Exchange, ImplicitAPI):
445
540
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
446
541
  """
447
542
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
448
- :see: https://futures-docs.poloniex.com/#get-real-time-ticker-of-all-symbols
543
+
544
+ https://api-docs.poloniex.com/futures/api/ticker#get-real-time-ticker-of-all-symbols
545
+
449
546
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
450
547
  :param dict [params]: extra parameters specific to the exchange API endpoint
451
548
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
452
549
  """
453
550
  self.load_markets()
454
551
  response = self.publicGetTickers(params)
455
- return self.parse_tickers(self.safe_value(response, 'data', []), symbols)
552
+ data = self.safe_list(response, 'data', [])
553
+ return self.parse_tickers(data, symbols)
456
554
 
457
555
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
458
556
  """
459
557
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
460
- :see: https://futures-docs.poloniex.com/#get-full-order-book-level-2
461
- :see: https://futures-docs.poloniex.com/#get-full-order-book-level-3
558
+
559
+ https://api-docs.poloniex.com/futures/api/orderbook#get-full-order-book---level-2
560
+ https://api-docs.poloniex.com/futures/api/orderbook#get-full-order-book--level-3
561
+
462
562
  :param str symbol: unified symbol of the market to fetch the order book for
463
563
  :param int [limit]: the maximum amount of order book entries to return
464
564
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -470,7 +570,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
470
570
  if level is not None and level != 2 and level != 3:
471
571
  raise BadRequest(self.id + ' fetchOrderBook() can only return level 2 & 3')
472
572
  market = self.market(symbol)
473
- request = {
573
+ request: dict = {
474
574
  'symbol': market['id'],
475
575
  }
476
576
  response = None
@@ -537,7 +637,9 @@ class poloniexfutures(Exchange, ImplicitAPI):
537
637
  def fetch_l3_order_book(self, symbol: str, limit: Int = None, params={}):
538
638
  """
539
639
  fetches level 3 information on open orders with bid(buy) and ask(sell) prices, volumes and other data
540
- :see: https://futures-docs.poloniex.com/#get-full-order-book-level-3
640
+
641
+ https://api-docs.poloniex.com/futures/api/orderbook#get-full-order-book--level-3
642
+
541
643
  :param str symbol: unified market symbol
542
644
  :param int [limit]: max number of orders to return, default is None
543
645
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -547,7 +649,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
547
649
  market = self.market(symbol)
548
650
  return self.fetch_order_book(market['id'], None, {'level': 3})
549
651
 
550
- def parse_trade(self, trade, market: Market = None) -> Trade:
652
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
551
653
  #
552
654
  # fetchTrades(public)
553
655
  #
@@ -636,7 +738,9 @@ class poloniexfutures(Exchange, ImplicitAPI):
636
738
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
637
739
  """
638
740
  get the list of most recent trades for a particular symbol
639
- :see: https://futures-docs.poloniex.com/#historical-data
741
+
742
+ https://api-docs.poloniex.com/futures/api/historical#transaction-history
743
+
640
744
  :param str symbol: unified symbol of the market to fetch trades for
641
745
  :param int [since]: timestamp in ms of the earliest trade to fetch
642
746
  :param int [limit]: the maximum amount of trades to fetch
@@ -645,7 +749,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
645
749
  """
646
750
  self.load_markets()
647
751
  market = self.market(symbol)
648
- request = {
752
+ request: dict = {
649
753
  'symbol': market['id'],
650
754
  }
651
755
  response = self.publicGetTradeHistory(self.extend(request, params))
@@ -665,13 +769,15 @@ class poloniexfutures(Exchange, ImplicitAPI):
665
769
  # },
666
770
  # }
667
771
  #
668
- trades = self.safe_value(response, 'data', [])
772
+ trades = self.safe_list(response, 'data', [])
669
773
  return self.parse_trades(trades, market, since, limit)
670
774
 
671
775
  def fetch_time(self, params={}):
672
776
  """
673
777
  fetches the current integer timestamp in milliseconds from the poloniexfutures server
674
- :see: https://futures-docs.poloniex.com/#time
778
+
779
+ https://api-docs.poloniex.com/futures/api/time#server-time
780
+
675
781
  :param dict [params]: extra parameters specific to the exchange API endpoint
676
782
  :returns int: the current integer timestamp in milliseconds from the poloniexfutures server
677
783
  """
@@ -688,7 +794,9 @@ class poloniexfutures(Exchange, ImplicitAPI):
688
794
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
689
795
  """
690
796
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
691
- :see: https://futures-docs.poloniex.com/#k-chart
797
+
798
+ https://api-docs.poloniex.com/futures/api/kline#get-k-line-data-of-contract
799
+
692
800
  :param str symbol: unified symbol of the market to fetch OHLCV data for
693
801
  :param str timeframe: the length of time each candle represents
694
802
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -700,7 +808,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
700
808
  market = self.market(symbol)
701
809
  marketId = market['id']
702
810
  parsedTimeframe = self.safe_integer(self.timeframes, timeframe)
703
- request = {
811
+ request: dict = {
704
812
  'symbol': marketId,
705
813
  }
706
814
  if parsedTimeframe is not None:
@@ -729,11 +837,11 @@ class poloniexfutures(Exchange, ImplicitAPI):
729
837
  # ]
730
838
  # }
731
839
  #
732
- data = self.safe_value(response, 'data', [])
840
+ data = self.safe_list(response, 'data', [])
733
841
  return self.parse_ohlcvs(data, market, timeframe, since, limit)
734
842
 
735
843
  def parse_balance(self, response) -> Balances:
736
- result = {
844
+ result: dict = {
737
845
  'info': response,
738
846
  'timestamp': None,
739
847
  'datetime': None,
@@ -750,13 +858,15 @@ class poloniexfutures(Exchange, ImplicitAPI):
750
858
  def fetch_balance(self, params={}) -> Balances:
751
859
  """
752
860
  query for balance and get the amount of funds available for trading or funds locked in orders
753
- :see: https://futures-docs.poloniex.com/#get-account-overview
861
+
862
+ https://api-docs.poloniex.com/futures/api/account#get-account-overview
863
+
754
864
  :param dict [params]: extra parameters specific to the exchange API endpoint
755
865
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
756
866
  """
757
867
  self.load_markets()
758
868
  currencyId = self.safe_string(params, 'currency')
759
- request = {}
869
+ request: dict = {}
760
870
  if currencyId is not None:
761
871
  currency = self.currency(currencyId)
762
872
  request = {
@@ -783,15 +893,17 @@ class poloniexfutures(Exchange, ImplicitAPI):
783
893
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
784
894
  """
785
895
  Create an order on the exchange
786
- :see: https://futures-docs.poloniex.com/#place-an-order
896
+
897
+ https://api-docs.poloniex.com/futures/api/orders#place-an-order
898
+
787
899
  :param str symbol: Unified CCXT market symbol
788
900
  :param str type: 'limit' or 'market'
789
901
  :param str side: 'buy' or 'sell'
790
902
  :param float amount: the amount of currency to trade
791
- :param float [price]: *ignored in "market" orders* the price at which the order is to be fullfilled at in units of the quote currency
903
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
792
904
  :param dict [params]: extra parameters specific to the exchange API endpoint
793
905
  :param float [params.leverage]: Leverage size of the order
794
- :param float [params.stopPrice]: The price at which a trigger order is triggered at
906
+ :param float [params.triggerPrice]: The price at which a trigger order is triggered at
795
907
  :param bool [params.reduceOnly]: A mark to reduce the position size only. Set to False by default. Need to set the position size when reduceOnly is True.
796
908
  :param str [params.timeInForce]: GTC, GTT, IOC, or FOK, default is GTC, limit orders only
797
909
  :param str [params.postOnly]: Post only flag, invalid when timeInForce is IOC or FOK
@@ -811,7 +923,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
811
923
  if amount < 1:
812
924
  raise InvalidOrder(self.id + ' createOrder() minimum contract order amount is 1')
813
925
  preciseAmount = int(self.amount_to_precision(symbol, amount))
814
- request = {
926
+ request: dict = {
815
927
  'clientOid': clientOrderId,
816
928
  'side': side,
817
929
  'symbol': market['id'],
@@ -819,12 +931,12 @@ class poloniexfutures(Exchange, ImplicitAPI):
819
931
  'size': preciseAmount,
820
932
  'leverage': 1,
821
933
  }
822
- stopPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
823
- if stopPrice:
934
+ triggerPrice = self.safe_value_2(params, 'triggerPrice', 'stopPrice')
935
+ if triggerPrice:
824
936
  request['stop'] = 'up' if (side == 'buy') else 'down'
825
937
  stopPriceType = self.safe_string(params, 'stopPriceType', 'TP')
826
938
  request['stopPriceType'] = stopPriceType
827
- request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
939
+ request['stopPrice'] = self.price_to_precision(symbol, triggerPrice)
828
940
  timeInForce = self.safe_string_upper(params, 'timeInForce')
829
941
  if type == 'limit':
830
942
  if price is None:
@@ -873,21 +985,23 @@ class poloniexfutures(Exchange, ImplicitAPI):
873
985
  'trades': None,
874
986
  'timeInForce': None,
875
987
  'postOnly': None,
876
- 'stopPrice': None,
988
+ 'triggerPrice': None,
877
989
  'info': response,
878
990
  }, market)
879
991
 
880
992
  def cancel_order(self, id: str, symbol: Str = None, params={}):
881
993
  """
882
994
  cancels an open order
883
- :see: https://futures-docs.poloniex.com/#cancel-an-order
995
+
996
+ https://api-docs.poloniex.com/futures/api/orders#cancel-an-order
997
+
884
998
  :param str id: order id
885
999
  :param str symbol: unified symbol of the market the order was made in
886
1000
  :param dict [params]: extra parameters specific to the exchange API endpoint
887
1001
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
888
1002
  """
889
1003
  self.load_markets()
890
- request = {
1004
+ request: dict = {
891
1005
  'order-id': id,
892
1006
  }
893
1007
  response = self.privateDeleteOrdersOrderId(self.extend(request, params))
@@ -917,7 +1031,9 @@ class poloniexfutures(Exchange, ImplicitAPI):
917
1031
  def fetch_positions(self, symbols: Strings = None, params={}):
918
1032
  """
919
1033
  fetch all open positions
920
- :see: https://futures-docs.poloniex.com/#get-position-list
1034
+
1035
+ https://api-docs.poloniex.com/futures/api/positions#get-position-list
1036
+
921
1037
  :param str[]|None symbols: list of unified market symbols
922
1038
  :param dict [params]: extra parameters specific to the exchange API endpoint
923
1039
  :returns dict[]: a list of `position structure <https://docs.ccxt.com/#/?id=position-structure>`
@@ -970,10 +1086,10 @@ class poloniexfutures(Exchange, ImplicitAPI):
970
1086
  # ]
971
1087
  # }
972
1088
  #
973
- data = self.safe_value(response, 'data')
1089
+ data = self.safe_list(response, 'data')
974
1090
  return self.parse_positions(data, symbols)
975
1091
 
976
- def parse_position(self, position, market: Market = None):
1092
+ def parse_position(self, position: dict, market: Market = None):
977
1093
  #
978
1094
  # {
979
1095
  # "code": "200000",
@@ -1067,7 +1183,9 @@ class poloniexfutures(Exchange, ImplicitAPI):
1067
1183
  def fetch_funding_history(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1068
1184
  """
1069
1185
  fetch the history of funding payments paid and received on self account
1070
- :see: https://futures-docs.poloniex.com/#get-funding-history
1186
+
1187
+ https://api-docs.poloniex.com/futures/api/funding-fees#get-funding-history
1188
+
1071
1189
  :param str symbol: unified market symbol
1072
1190
  :param int [since]: the earliest time in ms to fetch funding history for
1073
1191
  :param int [limit]: the maximum number of funding history structures to retrieve
@@ -1078,7 +1196,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
1078
1196
  raise ArgumentsRequired(self.id + ' fetchFundingHistory() requires a symbol argument')
1079
1197
  self.load_markets()
1080
1198
  market = self.market(symbol)
1081
- request = {
1199
+ request: dict = {
1082
1200
  'symbol': market['id'],
1083
1201
  }
1084
1202
  if since is not None:
@@ -1136,17 +1254,17 @@ class poloniexfutures(Exchange, ImplicitAPI):
1136
1254
  cancel all open orders
1137
1255
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1138
1256
  :param dict [params]: extra parameters specific to the exchange API endpoint
1139
- :param dict [params.stop]: When True, all the trigger orders will be cancelled
1257
+ :param dict [params.trigger]: When True, all the trigger orders will be cancelled
1140
1258
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1141
1259
  """
1142
1260
  self.load_markets()
1143
- request = {}
1261
+ request: dict = {}
1144
1262
  if symbol is not None:
1145
1263
  request['symbol'] = self.market_id(symbol)
1146
- stop = self.safe_value_2(params, 'stop', 'trigger')
1264
+ trigger = self.safe_value_2(params, 'stop', 'trigger')
1147
1265
  params = self.omit(params, ['stop', 'trigger'])
1148
1266
  response = None
1149
- if stop:
1267
+ if trigger:
1150
1268
  response = self.privateDeleteStopOrders(self.extend(request, params))
1151
1269
  else:
1152
1270
  response = self.privateDeleteOrders(self.extend(request, params))
@@ -1166,7 +1284,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
1166
1284
  cancelledOrderIdsLength = len(cancelledOrderIds)
1167
1285
  for i in range(0, cancelledOrderIdsLength):
1168
1286
  cancelledOrderId = self.safe_string(cancelledOrderIds, i)
1169
- result.append({
1287
+ result.append(self.safe_order({
1170
1288
  'id': cancelledOrderId,
1171
1289
  'clientOrderId': None,
1172
1290
  'timestamp': None,
@@ -1186,16 +1304,18 @@ class poloniexfutures(Exchange, ImplicitAPI):
1186
1304
  'trades': None,
1187
1305
  'timeInForce': None,
1188
1306
  'postOnly': None,
1189
- 'stopPrice': None,
1307
+ 'triggerPrice': None,
1190
1308
  'info': response,
1191
- })
1309
+ }))
1192
1310
  return result
1193
1311
 
1194
1312
  def fetch_orders_by_status(self, status, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1195
1313
  """
1196
1314
  fetches a list of orders placed on the exchange
1197
- :see: https://futures-docs.poloniex.com/#get-order-list
1198
- :see: https://futures-docs.poloniex.com/#get-untriggered-stop-order-list
1315
+
1316
+ https://api-docs.poloniex.com/futures/api/orders#get-order-listdeprecated
1317
+ https://api-docs.poloniex.com/futures/api/orders#get-untriggered-stop-order-list
1318
+
1199
1319
  :param str status: 'active' or 'closed', only 'active' is valid for stop orders
1200
1320
  :param str symbol: unified symbol for the market to retrieve orders from
1201
1321
  :param int [since]: timestamp in ms of the earliest order to retrieve
@@ -1208,13 +1328,13 @@ class poloniexfutures(Exchange, ImplicitAPI):
1208
1328
  :returns: An `array of order structures <https://docs.ccxt.com/#/?id=order-structure>`
1209
1329
  """
1210
1330
  self.load_markets()
1211
- stop = self.safe_value_2(params, 'stop', 'trigger')
1212
- until = self.safe_integer_2(params, 'until', 'till')
1213
- params = self.omit(params, ['triger', 'stop', 'until', 'till'])
1331
+ trigger = self.safe_value_2(params, 'stop', 'trigger')
1332
+ until = self.safe_integer(params, 'until')
1333
+ params = self.omit(params, ['trigger', 'stop', 'until'])
1214
1334
  if status == 'closed':
1215
1335
  status = 'done'
1216
- request = {}
1217
- if not stop:
1336
+ request: dict = {}
1337
+ if not trigger:
1218
1338
  request['status'] = 'active' if (status == 'open') else 'done'
1219
1339
  elif status != 'open':
1220
1340
  raise BadRequest(self.id + ' fetchOrdersByStatus() can only fetch untriggered stop orders')
@@ -1227,7 +1347,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
1227
1347
  if until is not None:
1228
1348
  request['endAt'] = until
1229
1349
  response = None
1230
- if stop:
1350
+ if trigger:
1231
1351
  response = self.privateGetStopOrders(self.extend(request, params))
1232
1352
  else:
1233
1353
  response = self.privateGetOrders(self.extend(request, params))
@@ -1292,13 +1412,15 @@ class poloniexfutures(Exchange, ImplicitAPI):
1292
1412
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1293
1413
  """
1294
1414
  fetch all unfilled currently open orders
1295
- :see: https://futures-docs.poloniex.com/#get-order-list
1296
- :see: https://futures-docs.poloniex.com/#get-untriggered-stop-order-list
1415
+
1416
+ https://api-docs.poloniex.com/futures/api/orders#get-order-listdeprecated
1417
+ https://api-docs.poloniex.com/futures/api/orders#get-untriggered-stop-order-list
1418
+
1297
1419
  :param str symbol: unified market symbol
1298
1420
  :param int [since]: the earliest time in ms to fetch open orders for
1299
1421
  :param int [limit]: the maximum number of open orders structures to retrieve
1300
1422
  :param dict [params]: extra parameters specific to the exchange API endpoint
1301
- :param int [params.till]: end time in ms
1423
+ :param int [params.until]: end time in ms
1302
1424
  :param str [params.side]: buy or sell
1303
1425
  :param str [params.type]: limit, or market
1304
1426
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1308,13 +1430,15 @@ class poloniexfutures(Exchange, ImplicitAPI):
1308
1430
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1309
1431
  """
1310
1432
  fetches information on multiple closed orders made by the user
1311
- :see: https://futures-docs.poloniex.com/#get-order-list
1312
- :see: https://futures-docs.poloniex.com/#get-untriggered-stop-order-list
1433
+
1434
+ https://api-docs.poloniex.com/futures/api/orders#get-order-listdeprecated
1435
+ https://api-docs.poloniex.com/futures/api/orders#get-untriggered-stop-order-list
1436
+
1313
1437
  :param str symbol: unified market symbol of the market orders were made in
1314
1438
  :param int [since]: the earliest time in ms to fetch orders for
1315
1439
  :param int [limit]: the maximum number of order structures to retrieve
1316
1440
  :param dict [params]: extra parameters specific to the exchange API endpoint
1317
- :param int [params.till]: end time in ms
1441
+ :param int [params.until]: end time in ms
1318
1442
  :param str [params.side]: buy or sell
1319
1443
  :param str [params.type]: limit, or market
1320
1444
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1324,14 +1448,17 @@ class poloniexfutures(Exchange, ImplicitAPI):
1324
1448
  def fetch_order(self, id: Str = None, symbol: Str = None, params={}):
1325
1449
  """
1326
1450
  fetches information on an order made by the user
1327
- :see: https://futures-docs.poloniex.com/#get-details-of-a-single-order
1328
- :see: https://futures-docs.poloniex.com/#get-single-order-by-clientoid
1451
+
1452
+ https://api-docs.poloniex.com/futures/api/orders#get-details-of-a-single-order
1453
+ https://api-docs.poloniex.com/futures/api/orders#get-single-order-by-clientoid
1454
+
1455
+ :param str id: the order id
1329
1456
  :param str symbol: unified symbol of the market the order was made in
1330
1457
  :param dict [params]: extra parameters specific to the exchange API endpoint
1331
1458
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1332
1459
  """
1333
1460
  self.load_markets()
1334
- request = {}
1461
+ request: dict = {}
1335
1462
  response = None
1336
1463
  if id is None:
1337
1464
  clientOrderId = self.safe_string_2(params, 'clientOid', 'clientOrderId')
@@ -1389,10 +1516,10 @@ class poloniexfutures(Exchange, ImplicitAPI):
1389
1516
  # }
1390
1517
  #
1391
1518
  market = self.market(symbol) if (symbol is not None) else None
1392
- responseData = self.safe_value(response, 'data')
1519
+ responseData = self.safe_dict(response, 'data')
1393
1520
  return self.parse_order(responseData, market)
1394
1521
 
1395
- def parse_order(self, order, market: Market = None) -> Order:
1522
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1396
1523
  #
1397
1524
  # createOrder
1398
1525
  #
@@ -1496,7 +1623,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
1496
1623
  'side': self.safe_string(order, 'side'),
1497
1624
  'amount': self.safe_string(order, 'size'),
1498
1625
  'price': self.safe_string(order, 'price'),
1499
- 'stopPrice': self.safe_string(order, 'stopPrice'),
1626
+ 'triggerPrice': self.safe_string(order, 'stopPrice'),
1500
1627
  'cost': self.safe_string(order, 'dealValue'),
1501
1628
  'filled': filled,
1502
1629
  'remaining': None,
@@ -1512,17 +1639,19 @@ class poloniexfutures(Exchange, ImplicitAPI):
1512
1639
  'trades': None,
1513
1640
  }, market)
1514
1641
 
1515
- def fetch_funding_rate(self, symbol: str, params={}):
1642
+ def fetch_funding_rate(self, symbol: str, params={}) -> FundingRate:
1516
1643
  """
1517
1644
  fetch the current funding rate
1518
- :see: https://futures-docs.poloniex.com/#get-premium-index
1645
+
1646
+ https://api-docs.poloniex.com/futures/api/futures-index#get-premium-index
1647
+
1519
1648
  :param str symbol: unified market symbol
1520
1649
  :param dict [params]: extra parameters specific to the exchange API endpoint
1521
1650
  :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1522
1651
  """
1523
1652
  self.load_markets()
1524
1653
  market = self.market(symbol)
1525
- request = {
1654
+ request: dict = {
1526
1655
  'symbol': market['id'],
1527
1656
  }
1528
1657
  response = self.publicGetFundingRateSymbolCurrent(self.extend(request, params))
@@ -1535,45 +1664,82 @@ class poloniexfutures(Exchange, ImplicitAPI):
1535
1664
  # "predictedValue": 0.00375
1536
1665
  # }
1537
1666
  #
1538
- data = self.safe_value(response, 'data')
1667
+ data = self.safe_dict(response, 'data', {})
1668
+ return self.parse_funding_rate(data, market)
1669
+
1670
+ def fetch_funding_interval(self, symbol: str, params={}) -> FundingRate:
1671
+ """
1672
+ fetch the current funding rate interval
1673
+
1674
+ https://api-docs.poloniex.com/futures/api/futures-index#get-premium-index
1675
+
1676
+ :param str symbol: unified market symbol
1677
+ :param dict [params]: extra parameters specific to the exchange API endpoint
1678
+ :returns dict: a `funding rate structure <https://docs.ccxt.com/#/?id=funding-rate-structure>`
1679
+ """
1680
+ return self.fetch_funding_rate(symbol, params)
1681
+
1682
+ def parse_funding_rate(self, data, market: Market = None) -> FundingRate:
1683
+ #
1684
+ # {
1685
+ # "symbol": ".ETHUSDTMFPI8H",
1686
+ # "granularity": 28800000,
1687
+ # "timePoint": 1637380800000,
1688
+ # "value": 0.0001,
1689
+ # "predictedValue": 0.0001,
1690
+ # }
1691
+ #
1539
1692
  fundingTimestamp = self.safe_integer(data, 'timePoint')
1540
- # the website displayes the previous funding rate as "funding rate"
1693
+ marketId = self.safe_string(data, 'symbol')
1541
1694
  return {
1542
1695
  'info': data,
1543
- 'symbol': market['symbol'],
1696
+ 'symbol': self.safe_symbol(marketId, market, None, 'contract'),
1544
1697
  'markPrice': None,
1545
1698
  'indexPrice': None,
1546
1699
  'interestRate': None,
1547
1700
  'estimatedSettlePrice': None,
1548
1701
  'timestamp': None,
1549
1702
  'datetime': None,
1550
- 'fundingRate': self.safe_number(data, 'predictedValue'),
1551
- 'fundingTimestamp': None,
1552
- 'fundingDatetime': None,
1553
- 'nextFundingRate': None,
1703
+ 'fundingRate': self.safe_number(data, 'value'),
1704
+ 'fundingTimestamp': fundingTimestamp,
1705
+ 'fundingDatetime': self.iso8601(fundingTimestamp),
1706
+ 'nextFundingRate': self.safe_number(data, 'predictedValue'),
1554
1707
  'nextFundingTimestamp': None,
1555
1708
  'nextFundingDatetime': None,
1556
- 'previousFundingRate': self.safe_number(data, 'value'),
1557
- 'previousFundingTimestamp': fundingTimestamp,
1558
- 'previousFundingDatetime': self.iso8601(fundingTimestamp),
1709
+ 'previousFundingRate': None,
1710
+ 'previousFundingTimestamp': None,
1711
+ 'previousFundingDatetime': None,
1712
+ 'interval': self.parse_funding_interval(self.safe_string(data, 'granularity')),
1559
1713
  }
1560
1714
 
1715
+ def parse_funding_interval(self, interval):
1716
+ intervals: dict = {
1717
+ '3600000': '1h',
1718
+ '14400000': '4h',
1719
+ '28800000': '8h',
1720
+ '57600000': '16h',
1721
+ '86400000': '24h',
1722
+ }
1723
+ return self.safe_string(intervals, interval, interval)
1724
+
1561
1725
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1562
1726
  """
1563
1727
  fetch all trades made by the user
1564
- :see: https://futures-docs.poloniex.com/#get-fills
1728
+
1729
+ https://api-docs.poloniex.com/futures/api/fills#get-fillsdeprecated
1730
+
1565
1731
  :param str symbol: unified market symbol
1566
1732
  :param int [since]: the earliest time in ms to fetch trades for
1567
1733
  :param int [limit]: the maximum number of trades structures to retrieve
1568
1734
  :param dict [params]: extra parameters specific to the exchange API endpoint
1569
- :param str orderIdFills: filles for a specific order(other parameters can be ignored if specified)
1570
- :param str side: buy or sell
1571
- :param str type: limit, market, limit_stop or market_stop
1572
- :param int endAt: end time(milisecond)
1735
+ :param str [params.orderIdFills]: filles for a specific order(other parameters can be ignored if specified)
1736
+ :param str [params.side]: buy or sell
1737
+ :param str [params.type]: limit, market, limit_stop or market_stop
1738
+ :param int [params.endAt]: end time(milisecond)
1573
1739
  :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1574
1740
  """
1575
1741
  self.load_markets()
1576
- request = {
1742
+ request: dict = {
1577
1743
  }
1578
1744
  market = None
1579
1745
  if symbol is not None:
@@ -1616,13 +1782,15 @@ class poloniexfutures(Exchange, ImplicitAPI):
1616
1782
  # }
1617
1783
  #
1618
1784
  data = self.safe_value(response, 'data', {})
1619
- trades = self.safe_value(data, 'items', {})
1785
+ trades = self.safe_list(data, 'items', [])
1620
1786
  return self.parse_trades(trades, market, since, limit)
1621
1787
 
1622
1788
  def set_margin_mode(self, marginMode: str, symbol: Str = None, params={}):
1623
1789
  """
1624
1790
  set margin mode to 'cross' or 'isolated'
1625
- :see: https://futures-docs.poloniex.com/#change-margin-mode
1791
+
1792
+ https://api-docs.poloniex.com/futures/api/margin-mode#change-margin-mode
1793
+
1626
1794
  :param str marginMode: "0"(isolated) or "1"(cross)
1627
1795
  :param str symbol: unified market symbol
1628
1796
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1638,7 +1806,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
1638
1806
  if marginMode == 'cross':
1639
1807
  marginMode = '1'
1640
1808
  market = self.market(symbol)
1641
- request = {
1809
+ request: dict = {
1642
1810
  'symbol': market['id'],
1643
1811
  'marginType': self.parse_to_int(marginMode),
1644
1812
  }
@@ -1684,7 +1852,7 @@ class poloniexfutures(Exchange, ImplicitAPI):
1684
1852
  headers['Content-Type'] = 'application/json'
1685
1853
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1686
1854
 
1687
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1855
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1688
1856
  if not response:
1689
1857
  self.throw_broadly_matched_exception(self.exceptions['broad'], body, body)
1690
1858
  return None