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
@@ -5,9 +5,10 @@
5
5
 
6
6
  from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.onetrading import ImplicitAPI
8
- from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
8
+ from ccxt.base.types import Balances, Currencies, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees
9
9
  from typing import List
10
10
  from ccxt.base.errors import ExchangeError
11
+ from ccxt.base.errors import AuthenticationError
11
12
  from ccxt.base.errors import PermissionDenied
12
13
  from ccxt.base.errors import ArgumentsRequired
13
14
  from ccxt.base.errors import BadRequest
@@ -15,9 +16,9 @@ from ccxt.base.errors import InsufficientFunds
15
16
  from ccxt.base.errors import InvalidAddress
16
17
  from ccxt.base.errors import InvalidOrder
17
18
  from ccxt.base.errors import OrderNotFound
19
+ from ccxt.base.errors import NotSupported
18
20
  from ccxt.base.errors import DDoSProtection
19
21
  from ccxt.base.errors import ExchangeNotAvailable
20
- from ccxt.base.errors import AuthenticationError
21
22
  from ccxt.base.decimal_to_precision import TICK_SIZE
22
23
  from ccxt.base.precise import Precise
23
24
 
@@ -46,7 +47,7 @@ class onetrading(Exchange, ImplicitAPI):
46
47
  'cancelOrders': True,
47
48
  'closeAllPositions': False,
48
49
  'closePosition': False,
49
- 'createDepositAddress': True,
50
+ 'createDepositAddress': False,
50
51
  'createOrder': True,
51
52
  'createReduceOnlyOrder': False,
52
53
  'createStopLimitOrder': True,
@@ -61,9 +62,10 @@ class onetrading(Exchange, ImplicitAPI):
61
62
  'fetchCrossBorrowRates': False,
62
63
  'fetchCurrencies': True,
63
64
  'fetchDeposit': False,
64
- 'fetchDepositAddress': True,
65
+ 'fetchDepositAddress': False,
65
66
  'fetchDepositAddresses': False,
66
- 'fetchDeposits': True,
67
+ 'fetchDepositAddressesByNetwork': False,
68
+ 'fetchDeposits': False,
67
69
  'fetchDepositsWithdrawals': False,
68
70
  'fetchFundingHistory': False,
69
71
  'fetchFundingRate': False,
@@ -86,14 +88,17 @@ class onetrading(Exchange, ImplicitAPI):
86
88
  'fetchOrders': False,
87
89
  'fetchOrderTrades': True,
88
90
  'fetchPosition': False,
91
+ 'fetchPositionHistory': False,
89
92
  'fetchPositionMode': False,
90
93
  'fetchPositions': False,
94
+ 'fetchPositionsForSymbol': False,
95
+ 'fetchPositionsHistory': False,
91
96
  'fetchPositionsRisk': False,
92
97
  'fetchPremiumIndexOHLCV': False,
93
98
  'fetchTicker': True,
94
99
  'fetchTickers': True,
95
100
  'fetchTime': True,
96
- 'fetchTrades': True,
101
+ 'fetchTrades': False,
97
102
  'fetchTradingFee': False,
98
103
  'fetchTradingFees': True,
99
104
  'fetchTransactionFee': False,
@@ -102,14 +107,14 @@ class onetrading(Exchange, ImplicitAPI):
102
107
  'fetchTransfer': False,
103
108
  'fetchTransfers': False,
104
109
  'fetchWithdrawal': False,
105
- 'fetchWithdrawals': True,
110
+ 'fetchWithdrawals': False,
106
111
  'reduceMargin': False,
107
112
  'setLeverage': False,
108
113
  'setMargin': False,
109
114
  'setMarginMode': False,
110
115
  'setPositionMode': False,
111
116
  'transfer': False,
112
- 'withdraw': True,
117
+ 'withdraw': False,
113
118
  },
114
119
  'timeframes': {
115
120
  '1m': '1/MINUTES',
@@ -125,8 +130,8 @@ class onetrading(Exchange, ImplicitAPI):
125
130
  'urls': {
126
131
  'logo': 'https://github.com/ccxt/ccxt/assets/43336371/bdbc26fd-02f2-4ca7-9f1e-17333690bb1c',
127
132
  'api': {
128
- 'public': 'https://api.onetrading.com/public',
129
- 'private': 'https://api.onetrading.com/public',
133
+ 'public': 'https://api.onetrading.com/fast',
134
+ 'private': 'https://api.onetrading.com/fast',
130
135
  },
131
136
  'www': 'https://onetrading.com/',
132
137
  'doc': [
@@ -144,32 +149,20 @@ class onetrading(Exchange, ImplicitAPI):
144
149
  'order-book/{instrument_code}',
145
150
  'market-ticker',
146
151
  'market-ticker/{instrument_code}',
147
- 'price-ticks/{instrument_code}',
148
152
  'time',
149
153
  ],
150
154
  },
151
155
  'private': {
152
156
  'get': [
153
157
  'account/balances',
154
- 'account/deposit/crypto/{currency_code}',
155
- 'account/deposit/fiat/EUR',
156
- 'account/deposits',
157
- 'account/deposits/bitpanda',
158
- 'account/withdrawals',
159
- 'account/withdrawals/bitpanda',
160
158
  'account/fees',
161
159
  'account/orders',
162
160
  'account/orders/{order_id}',
163
161
  'account/orders/{order_id}/trades',
164
162
  'account/trades',
165
163
  'account/trades/{trade_id}',
166
- 'account/trading-volume',
167
164
  ],
168
165
  'post': [
169
- 'account/deposit/crypto',
170
- 'account/withdraw/crypto',
171
- 'account/withdraw/fiat',
172
- 'account/fees',
173
166
  'account/orders',
174
167
  ],
175
168
  'delete': [
@@ -296,6 +289,7 @@ class onetrading(Exchange, ImplicitAPI):
296
289
  'INTERNAL_SERVER_ERROR': ExchangeError,
297
290
  },
298
291
  'broad': {
292
+ 'Order not found.': OrderNotFound,
299
293
  },
300
294
  },
301
295
  'commonCurrencies': {
@@ -313,6 +307,9 @@ class onetrading(Exchange, ImplicitAPI):
313
307
  async def fetch_time(self, params={}):
314
308
  """
315
309
  fetches the current integer timestamp in milliseconds from the exchange server
310
+
311
+ https://docs.onetrading.com/#time
312
+
316
313
  :param dict [params]: extra parameters specific to the exchange API endpoint
317
314
  :returns int: the current integer timestamp in milliseconds from the exchange server
318
315
  """
@@ -325,9 +322,12 @@ class onetrading(Exchange, ImplicitAPI):
325
322
  #
326
323
  return self.safe_integer(response, 'epoch_millis')
327
324
 
328
- async def fetch_currencies(self, params={}):
325
+ async def fetch_currencies(self, params={}) -> Currencies:
329
326
  """
330
327
  fetches all available currencies on an exchange
328
+
329
+ https://docs.onetrading.com/#currencies
330
+
331
331
  :param dict [params]: extra parameters specific to the exchange API endpoint
332
332
  :returns dict: an associative dictionary of currencies
333
333
  """
@@ -340,7 +340,7 @@ class onetrading(Exchange, ImplicitAPI):
340
340
  # }
341
341
  # ]
342
342
  #
343
- result = {}
343
+ result: dict = {}
344
344
  for i in range(0, len(response)):
345
345
  currency = response[i]
346
346
  id = self.safe_string(currency, 'code')
@@ -363,9 +363,12 @@ class onetrading(Exchange, ImplicitAPI):
363
363
  }
364
364
  return result
365
365
 
366
- async def fetch_markets(self, params={}):
366
+ async def fetch_markets(self, params={}) -> List[Market]:
367
367
  """
368
368
  retrieves data on all markets for onetrading
369
+
370
+ https://docs.onetrading.com/#instruments
371
+
369
372
  :param dict [params]: extra parameters specific to the exchange API endpoint
370
373
  :returns dict[]: an array of objects representing market data
371
374
  """
@@ -384,7 +387,7 @@ class onetrading(Exchange, ImplicitAPI):
384
387
  #
385
388
  return self.parse_markets(response)
386
389
 
387
- def parse_market(self, market) -> Market:
390
+ def parse_market(self, market: dict) -> Market:
388
391
  baseAsset = self.safe_value(market, 'base', {})
389
392
  quoteAsset = self.safe_value(market, 'quote', {})
390
393
  baseId = self.safe_string(baseAsset, 'code')
@@ -443,9 +446,13 @@ class onetrading(Exchange, ImplicitAPI):
443
446
  'info': market,
444
447
  }
445
448
 
446
- async def fetch_trading_fees(self, params={}):
449
+ async def fetch_trading_fees(self, params={}) -> TradingFees:
447
450
  """
448
451
  fetch the trading fees for multiple markets
452
+
453
+ https://docs.onetrading.com/#fee-groups
454
+ https://docs.onetrading.com/#fees
455
+
449
456
  :param dict [params]: extra parameters specific to the exchange API endpoint
450
457
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
451
458
  """
@@ -454,7 +461,12 @@ class onetrading(Exchange, ImplicitAPI):
454
461
  if method is None:
455
462
  options = self.safe_value(self.options, 'fetchTradingFees', {})
456
463
  method = self.safe_string(options, 'method', 'fetchPrivateTradingFees')
457
- return await getattr(self, method)(params)
464
+ if method == 'fetchPrivateTradingFees':
465
+ return await self.fetch_private_trading_fees(params)
466
+ elif method == 'fetchPublicTradingFees':
467
+ return await self.fetch_public_trading_fees(params)
468
+ else:
469
+ raise NotSupported(self.id + ' fetchTradingFees() does not support ' + method + ', fetchPrivateTradingFees and fetchPublicTradingFees are supported')
458
470
 
459
471
  async def fetch_public_trading_fees(self, params={}):
460
472
  await self.load_markets()
@@ -482,7 +494,7 @@ class onetrading(Exchange, ImplicitAPI):
482
494
  feeTiers = self.safe_value(first, 'fee_tiers')
483
495
  tiers = self.parse_fee_tiers(feeTiers)
484
496
  firstTier = self.safe_value(feeTiers, 0, {})
485
- result = {}
497
+ result: dict = {}
486
498
  for i in range(0, len(self.symbols)):
487
499
  symbol = self.symbols[i]
488
500
  result[symbol] = {
@@ -526,7 +538,7 @@ class onetrading(Exchange, ImplicitAPI):
526
538
  makerFee = Precise.string_div(makerFee, '100')
527
539
  takerFee = Precise.string_div(takerFee, '100')
528
540
  feeTiers = self.safe_value(response, 'fee_tiers')
529
- result = {}
541
+ result: dict = {}
530
542
  tiers = self.parse_fee_tiers(feeTiers)
531
543
  for i in range(0, len(self.symbols)):
532
544
  symbol = self.symbols[i]
@@ -558,7 +570,7 @@ class onetrading(Exchange, ImplicitAPI):
558
570
  'taker': takerFees,
559
571
  }
560
572
 
561
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
573
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
562
574
  #
563
575
  # fetchTicker, fetchTickers
564
576
  #
@@ -613,13 +625,16 @@ class onetrading(Exchange, ImplicitAPI):
613
625
  async def fetch_ticker(self, symbol: str, params={}) -> Ticker:
614
626
  """
615
627
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
628
+
629
+ https://docs.onetrading.com/#market-ticker-for-instrument
630
+
616
631
  :param str symbol: unified symbol of the market to fetch the ticker for
617
632
  :param dict [params]: extra parameters specific to the exchange API endpoint
618
633
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
619
634
  """
620
635
  await self.load_markets()
621
636
  market = self.market(symbol)
622
- request = {
637
+ request: dict = {
623
638
  'instrument_code': market['id'],
624
639
  }
625
640
  response = await self.publicGetMarketTickerInstrumentCode(self.extend(request, params))
@@ -646,7 +661,10 @@ class onetrading(Exchange, ImplicitAPI):
646
661
  async def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
647
662
  """
648
663
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
649
- :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
664
+
665
+ https://docs.onetrading.com/#market-ticker
666
+
667
+ :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
650
668
  :param dict [params]: extra parameters specific to the exchange API endpoint
651
669
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
652
670
  """
@@ -673,7 +691,7 @@ class onetrading(Exchange, ImplicitAPI):
673
691
  # }
674
692
  # ]
675
693
  #
676
- result = {}
694
+ result: dict = {}
677
695
  for i in range(0, len(response)):
678
696
  ticker = self.parse_ticker(response[i])
679
697
  symbol = ticker['symbol']
@@ -683,6 +701,9 @@ class onetrading(Exchange, ImplicitAPI):
683
701
  async def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
684
702
  """
685
703
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
704
+
705
+ https://docs.onetrading.com/#order-book
706
+
686
707
  :param str symbol: unified symbol of the market to fetch the order book for
687
708
  :param int [limit]: the maximum amount of order book entries to return
688
709
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -690,7 +711,7 @@ class onetrading(Exchange, ImplicitAPI):
690
711
  """
691
712
  await self.load_markets()
692
713
  market = self.market(symbol)
693
- request = {
714
+ request: dict = {
694
715
  'instrument_code': market['id'],
695
716
  # level 1 means only the best bid and ask
696
717
  # level 2 is a compiled order book up to market precision
@@ -778,7 +799,7 @@ class onetrading(Exchange, ImplicitAPI):
778
799
  granularity = self.safe_value(ohlcv, 'granularity')
779
800
  unit = self.safe_string(granularity, 'unit')
780
801
  period = self.safe_string(granularity, 'period')
781
- units = {
802
+ units: dict = {
782
803
  'MINUTES': 'm',
783
804
  'HOURS': 'h',
784
805
  'DAYS': 'd',
@@ -805,6 +826,9 @@ class onetrading(Exchange, ImplicitAPI):
805
826
  async def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
806
827
  """
807
828
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
829
+
830
+ https://docs.onetrading.com/#candlesticks
831
+
808
832
  :param str symbol: unified symbol of the market to fetch OHLCV data for
809
833
  :param str timeframe: the length of time each candle represents
810
834
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -820,7 +844,7 @@ class onetrading(Exchange, ImplicitAPI):
820
844
  duration = durationInSeconds * 1000
821
845
  if limit is None:
822
846
  limit = 1500
823
- request = {
847
+ request: dict = {
824
848
  'instrument_code': market['id'],
825
849
  # 'from': self.iso8601(since),
826
850
  # 'to': self.iso8601(self.milliseconds()),
@@ -842,9 +866,10 @@ class onetrading(Exchange, ImplicitAPI):
842
866
  # {"instrument_code":"BTC_EUR","granularity":{"unit":"HOURS","period":1},"high":"9135.7","low":"9002.59","open":"9055.45","close":"9133.98","total_amount":"26.21919","volume":"238278.8724959","time":"2020-05-09T00:59:59.999Z","last_sequence":461521},
843
867
  # ]
844
868
  #
845
- return self.parse_ohlcvs(response, market, timeframe, since, limit)
869
+ ohlcv = self.safe_list(response, 'candlesticks')
870
+ return self.parse_ohlcvs(ohlcv, market, timeframe, since, limit)
846
871
 
847
- def parse_trade(self, trade, market: Market = None) -> Trade:
872
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
848
873
  #
849
874
  # fetchTrades(public)
850
875
  #
@@ -923,47 +948,9 @@ class onetrading(Exchange, ImplicitAPI):
923
948
  'info': trade,
924
949
  }, market)
925
950
 
926
- async def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
927
- """
928
- get the list of most recent trades for a particular symbol
929
- :param str symbol: unified symbol of the market to fetch trades for
930
- :param int [since]: timestamp in ms of the earliest trade to fetch
931
- :param int [limit]: the maximum amount of trades to fetch
932
- :param dict [params]: extra parameters specific to the exchange API endpoint
933
- :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=public-trades>`
934
- """
935
- await self.load_markets()
936
- market = self.market(symbol)
937
- request = {
938
- 'instrument_code': market['id'],
939
- # 'from': self.iso8601(since),
940
- # 'to': self.iso8601(self.milliseconds()),
941
- }
942
- if since is not None:
943
- # returns price ticks for a specific market with an interval of maximum of 4 hours
944
- # sorted by latest first
945
- request['from'] = self.iso8601(since)
946
- request['to'] = self.iso8601(self.sum(since, 14400000))
947
- response = await self.publicGetPriceTicksInstrumentCode(self.extend(request, params))
948
- #
949
- # [
950
- # {
951
- # "instrument_code":"BTC_EUR",
952
- # "price":"8137.28",
953
- # "amount":"0.22269",
954
- # "taker_side":"BUY",
955
- # "volume":"1812.0908832",
956
- # "time":"2020-07-10T14:44:32.299Z",
957
- # "trade_timestamp":1594392272299,
958
- # "sequence":603047
959
- # }
960
- # ]
961
- #
962
- return self.parse_trades(response, market, since, limit)
963
-
964
951
  def parse_balance(self, response) -> Balances:
965
952
  balances = self.safe_value(response, 'balances', [])
966
- result = {'info': response}
953
+ result: dict = {'info': response}
967
954
  for i in range(0, len(balances)):
968
955
  balance = balances[i]
969
956
  currencyId = self.safe_string(balance, 'currency_code')
@@ -977,6 +964,9 @@ class onetrading(Exchange, ImplicitAPI):
977
964
  async def fetch_balance(self, params={}) -> Balances:
978
965
  """
979
966
  query for balance and get the amount of funds available for trading or funds locked in orders
967
+
968
+ https://docs.onetrading.com/#balances
969
+
980
970
  :param dict [params]: extra parameters specific to the exchange API endpoint
981
971
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
982
972
  """
@@ -1000,319 +990,8 @@ class onetrading(Exchange, ImplicitAPI):
1000
990
  #
1001
991
  return self.parse_balance(response)
1002
992
 
1003
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
1004
- code = None
1005
- if currency is not None:
1006
- code = currency['code']
1007
- address = self.safe_string(depositAddress, 'address')
1008
- tag = self.safe_string(depositAddress, 'destination_tag')
1009
- self.check_address(address)
1010
- return {
1011
- 'currency': code,
1012
- 'address': address,
1013
- 'tag': tag,
1014
- 'network': None,
1015
- 'info': depositAddress,
1016
- }
1017
-
1018
- async def create_deposit_address(self, code: str, params={}):
1019
- """
1020
- create a currency deposit address
1021
- :param str code: unified currency code of the currency for the deposit address
1022
- :param dict [params]: extra parameters specific to the exchange API endpoint
1023
- :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1024
- """
1025
- await self.load_markets()
1026
- currency = self.currency(code)
1027
- request = {
1028
- 'currency': currency['id'],
1029
- }
1030
- response = await self.privatePostAccountDepositCrypto(self.extend(request, params))
1031
- #
1032
- # {
1033
- # "address":"rBnNhk95FrdNisZtXcStzriFS8vEzz53DM",
1034
- # "destination_tag":"865690307",
1035
- # "enabled":true,
1036
- # "is_smart_contract":false
1037
- # }
1038
- #
1039
- return self.parse_deposit_address(response, currency)
1040
-
1041
- async def fetch_deposit_address(self, code: str, params={}):
1042
- """
1043
- fetch the deposit address for a currency associated with self account
1044
- :param str code: unified currency code
1045
- :param dict [params]: extra parameters specific to the exchange API endpoint
1046
- :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
1047
- """
1048
- await self.load_markets()
1049
- currency = self.currency(code)
1050
- request = {
1051
- 'currency_code': currency['id'],
1052
- }
1053
- response = await self.privateGetAccountDepositCryptoCurrencyCode(self.extend(request, params))
1054
- #
1055
- # {
1056
- # "address":"rBnNhk95FrdNisZtXcStzriFS8vEzz53DM",
1057
- # "destination_tag":"865690307",
1058
- # "enabled":true,
1059
- # "is_smart_contract":false,
1060
- # "can_create_more":false
1061
- # }
1062
- #
1063
- return self.parse_deposit_address(response, currency)
1064
-
1065
- async def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1066
- """
1067
- fetch all deposits made to an account
1068
- :param str code: unified currency code
1069
- :param int [since]: the earliest time in ms to fetch deposits for
1070
- :param int [limit]: the maximum number of deposits structures to retrieve
1071
- :param dict [params]: extra parameters specific to the exchange API endpoint
1072
- :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1073
- """
1074
- await self.load_markets()
1075
- request = {
1076
- # 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
1077
- }
1078
- currency = None
1079
- if code is not None:
1080
- currency = self.currency(code)
1081
- request['currency_code'] = currency['id']
1082
- if limit is not None:
1083
- request['max_page_size'] = limit
1084
- if since is not None:
1085
- to = self.safe_string(params, 'to')
1086
- if to is None:
1087
- raise ArgumentsRequired(self.id + ' fetchDeposits() requires a "to" iso8601 string param with the since argument is specified')
1088
- request['from'] = self.iso8601(since)
1089
- response = await self.privateGetAccountDeposits(self.extend(request, params))
1090
- #
1091
- # {
1092
- # "deposit_history": [
1093
- # {
1094
- # "transaction_id": "e5342efcd-d5b7-4a56-8e12-b69ffd68c5ef",
1095
- # "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
1096
- # "amount": "100",
1097
- # "type": "CRYPTO",
1098
- # "funds_source": "INTERNAL",
1099
- # "time": "2020-04-22T09:57:47Z",
1100
- # "currency": "BTC",
1101
- # "fee_amount": "0.0",
1102
- # "fee_currency": "BTC"
1103
- # },
1104
- # {
1105
- # "transaction_id": "79793d00-2899-4a4d-95b7-73ae6b31384f",
1106
- # "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
1107
- # "time": "2020-05-05T11:22:07.925Z",
1108
- # "currency": "EUR",
1109
- # "funds_source": "EXTERNAL",
1110
- # "type": "FIAT",
1111
- # "amount": "50.0",
1112
- # "fee_amount": "0.01",
1113
- # "fee_currency": "EUR"
1114
- # }
1115
- # ],
1116
- # "max_page_size": 2,
1117
- # "cursor": "eyJhY2NvdW50X2lkIjp7InMiOiJlMzY5YWM4MC00NTc3LTExZTktYWUwOC05YmVkYzQ3OTBiODQiLCJzcyI6W10sIm5zIjpbXSwiYnMiOltdLCJtIjp7fSwibCI6W119LCJpdGVtX2tleSI6eyJzIjoiV0lUSERSQVdBTDo6MmFlMjYwY2ItOTk3MC00YmNiLTgxNmEtZGY4MDVmY2VhZTY1Iiwic3MiOltdLCJucyI6W10sImJzIjpbXSwibSI6e30sImwiOltdfSwiZ2xvYmFsX3dpdGhkcmF3YWxfaW5kZXhfaGFzaF9rZXkiOnsicyI6ImUzNjlhYzgwLTQ1NzctMTFlOS1hZTA4LTliZWRjNDc5MGI4NCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX0sInRpbWVzdGFtcCI6eyJuIjoiMTU4ODA1ODc2Nzk0OCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX19"
1118
- # }
1119
- #
1120
- depositHistory = self.safe_value(response, 'deposit_history', [])
1121
- return self.parse_transactions(depositHistory, currency, since, limit, {'type': 'deposit'})
1122
-
1123
- async def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
1124
- """
1125
- fetch all withdrawals made from an account
1126
- :param str code: unified currency code
1127
- :param int [since]: the earliest time in ms to fetch withdrawals for
1128
- :param int [limit]: the maximum number of withdrawals structures to retrieve
1129
- :param dict [params]: extra parameters specific to the exchange API endpoint
1130
- :returns dict[]: a list of `transaction structures <https://docs.ccxt.com/#/?id=transaction-structure>`
1131
- """
1132
- await self.load_markets()
1133
- request = {
1134
- # 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
1135
- }
1136
- currency = None
1137
- if code is not None:
1138
- currency = self.currency(code)
1139
- request['currency_code'] = currency['id']
1140
- if limit is not None:
1141
- request['max_page_size'] = limit
1142
- if since is not None:
1143
- to = self.safe_string(params, 'to')
1144
- if to is None:
1145
- raise ArgumentsRequired(self.id + ' fetchWithdrawals() requires a "to" iso8601 string param with the since argument is specified')
1146
- request['from'] = self.iso8601(since)
1147
- response = await self.privateGetAccountWithdrawals(self.extend(request, params))
1148
- #
1149
- # {
1150
- # "withdrawal_history": [
1151
- # {
1152
- # "account_id": "e369ac80-4577-11e9-ae08-9bedc4790b84",
1153
- # "amount": "0.1",
1154
- # "currency": "BTC",
1155
- # "fee_amount": "0.00002",
1156
- # "fee_currency": "BTC",
1157
- # "funds_source": "EXTERNAL",
1158
- # "related_transaction_id": "e298341a-3855-405e-bce3-92db368a3157",
1159
- # "time": "2020-05-05T11:11:32.110Z",
1160
- # "transaction_id": "6693ff40-bb10-4dcf-ada7-3b287727c882",
1161
- # "type": "CRYPTO"
1162
- # },
1163
- # {
1164
- # "account_id": "e369ac80-4577-11e9-ae08-9bedc4790b84",
1165
- # "amount": "0.1",
1166
- # "currency": "BTC",
1167
- # "fee_amount": "0.0",
1168
- # "fee_currency": "BTC",
1169
- # "funds_source": "INTERNAL",
1170
- # "time": "2020-05-05T10:29:53.464Z",
1171
- # "transaction_id": "ec9703b1-954b-4f76-adea-faac66eabc0b",
1172
- # "type": "CRYPTO"
1173
- # }
1174
- # ],
1175
- # "cursor": "eyJhY2NvdW50X2lkIjp7InMiOiJlMzY5YWM4MC00NTc3LTExZTktYWUwOC05YmVkYzQ3OTBiODQiLCJzcyI6W10sIm5zIjpbXSwiYnMiOltdLCJtIjp7fSwibCI6W119LCJpdGVtX2tleSI6eyJzIjoiV0lUSERSQVdBTDo6ZWM5NzAzYjEtOTU0Yi00Zjc2LWFkZWEtZmFhYzY2ZWFiYzBiIiwic3MiOltdLCJucyI6W10sImJzIjpbXSwibSI6e30sImwiOltdfSwiZ2xvYmFsX3dpdGhkcmF3YWxfaW5kZXhfaGFzaF9rZXkiOnsicyI6ImUzNjlhYzgwLTQ1NzctMTFlOS1hZTA4LTliZWRjNDc5MGI4NCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX0sInRpbWVzdGFtcCI6eyJuIjoiMTU4ODY3NDU5MzQ2NCIsInNzIjpbXSwibnMiOltdLCJicyI6W10sIm0iOnt9LCJsIjpbXX19",
1176
- # "max_page_size": 2
1177
- # }
1178
- #
1179
- withdrawalHistory = self.safe_value(response, 'withdrawal_history', [])
1180
- return self.parse_transactions(withdrawalHistory, currency, since, limit, {'type': 'withdrawal'})
1181
-
1182
- async def withdraw(self, code: str, amount: float, address, tag=None, params={}):
1183
- """
1184
- make a withdrawal
1185
- :param str code: unified currency code
1186
- :param float amount: the amount to withdraw
1187
- :param str address: the address to withdraw to
1188
- :param str tag:
1189
- :param dict [params]: extra parameters specific to the exchange API endpoint
1190
- :returns dict: a `transaction structure <https://docs.ccxt.com/#/?id=transaction-structure>`
1191
- """
1192
- tag, params = self.handle_withdraw_tag_and_params(tag, params)
1193
- self.check_address(address)
1194
- await self.load_markets()
1195
- currency = self.currency(code)
1196
- request = {
1197
- 'currency': code,
1198
- 'amount': self.currency_to_precision(code, amount),
1199
- # 'payout_account_id': '66756a10-3e86-48f4-9678-b634c4b135b2', # fiat only
1200
- # 'recipient': { # crypto only
1201
- # 'address': address,
1202
- # # 'destination_tag': '',
1203
- # },
1204
- }
1205
- options = self.safe_value(self.options, 'fiat', [])
1206
- isFiat = self.in_array(code, options)
1207
- method = 'privatePostAccountWithdrawFiat' if isFiat else 'privatePostAccountWithdrawCrypto'
1208
- if isFiat:
1209
- payoutAccountId = self.safe_string(params, 'payout_account_id')
1210
- if payoutAccountId is None:
1211
- raise ArgumentsRequired(self.id + ' withdraw() requires a payout_account_id param for fiat ' + code + ' withdrawals')
1212
- else:
1213
- recipient = {'address': address}
1214
- if tag is not None:
1215
- recipient['destination_tag'] = tag
1216
- request['recipient'] = recipient
1217
- response = await getattr(self, method)(self.extend(request, params))
1218
- #
1219
- # crypto
1220
- #
1221
- # {
1222
- # "amount": "1234.5678",
1223
- # "fee": "1234.5678",
1224
- # "recipient": "3NacQ7rzZdhfyAtfJ5a11k8jFPdcMP2Bq7",
1225
- # "destination_tag": "",
1226
- # "transaction_id": "d0f8529f-f832-4e6a-9dc5-b8d5797badb2"
1227
- # }
1228
- #
1229
- # fiat
1230
- #
1231
- # {
1232
- # "transaction_id": "54236cd0-4413-11e9-93fb-5fea7e5b5df6"
1233
- # }
1234
- #
1235
- return self.parse_transaction(response, currency)
1236
-
1237
- def parse_transaction(self, transaction, currency: Currency = None) -> Transaction:
1238
- #
1239
- # fetchDeposits, fetchWithdrawals
1240
- #
1241
- # {
1242
- # "transaction_id": "C2b42efcd-d5b7-4a56-8e12-b69ffd68c5ef",
1243
- # "type": "FIAT",
1244
- # "account_id": "c2d0076a-c20d-41f8-9e9a-1a1d028b2b58",
1245
- # "amount": "1234.5678",
1246
- # "time": "2019-08-24T14:15:22Z",
1247
- # "funds_source": "INTERNAL",
1248
- # "currency": "BTC",
1249
- # "fee_amount": "1234.5678",
1250
- # "fee_currency": "BTC",
1251
- # "blockchain_transaction_id": "f4184fc596403b9d638783cf57adfe4c75c605f6356fbc91338530e9831e9e16",
1252
- # "related_transaction_id": "e298341a-3855-405e-bce3-92db368a3157"
1253
- # }
1254
- #
1255
- # withdraw
1256
- #
1257
- #
1258
- # crypto
1259
- #
1260
- # {
1261
- # "amount": "1234.5678",
1262
- # "fee": "1234.5678",
1263
- # "recipient": "3NacQ7rzZdhfyAtfJ5a11k8jFPdcMP2Bq7",
1264
- # "destination_tag": "",
1265
- # "transaction_id": "d0f8529f-f832-4e6a-9dc5-b8d5797badb2"
1266
- # }
1267
- #
1268
- # fiat
1269
- #
1270
- # {
1271
- # "transaction_id": "54236cd0-4413-11e9-93fb-5fea7e5b5df6"
1272
- # }
1273
- #
1274
- id = self.safe_string(transaction, 'transaction_id')
1275
- amount = self.safe_number(transaction, 'amount')
1276
- timestamp = self.parse8601(self.safe_string(transaction, 'time'))
1277
- currencyId = self.safe_string(transaction, 'currency')
1278
- currency = self.safe_currency(currencyId, currency)
1279
- status = 'ok' # the exchange returns cleared transactions only
1280
- feeCost = self.safe_number_2(transaction, 'fee_amount', 'fee')
1281
- fee = None
1282
- addressTo = self.safe_string(transaction, 'recipient')
1283
- tagTo = self.safe_string(transaction, 'destination_tag')
1284
- if feeCost is not None:
1285
- feeCurrencyId = self.safe_string(transaction, 'fee_currency', currencyId)
1286
- feeCurrencyCode = self.safe_currency_code(feeCurrencyId)
1287
- fee = {
1288
- 'cost': feeCost,
1289
- 'currency': feeCurrencyCode,
1290
- }
1291
- return {
1292
- 'info': transaction,
1293
- 'id': id,
1294
- 'currency': currency['code'],
1295
- 'amount': amount,
1296
- 'network': None,
1297
- 'address': addressTo,
1298
- 'addressFrom': None,
1299
- 'addressTo': addressTo,
1300
- 'tag': tagTo,
1301
- 'tagFrom': None,
1302
- 'tagTo': tagTo,
1303
- 'status': status,
1304
- 'type': None,
1305
- 'updated': None,
1306
- 'txid': self.safe_string(transaction, 'blockchain_transaction_id'),
1307
- 'comment': None,
1308
- 'internal': None,
1309
- 'timestamp': timestamp,
1310
- 'datetime': self.iso8601(timestamp),
1311
- 'fee': fee,
1312
- }
1313
-
1314
- def parse_order_status(self, status):
1315
- statuses = {
993
+ def parse_order_status(self, status: Str):
994
+ statuses: dict = {
1316
995
  'FILLED': 'open',
1317
996
  'FILLED_FULLY': 'closed',
1318
997
  'FILLED_CLOSED': 'canceled',
@@ -1322,10 +1001,11 @@ class onetrading(Exchange, ImplicitAPI):
1322
1001
  'CLOSED': 'canceled',
1323
1002
  'FAILED': 'failed',
1324
1003
  'STOP_TRIGGERED': 'triggered',
1004
+ 'DONE': 'closed',
1325
1005
  }
1326
1006
  return self.safe_string(statuses, status, status)
1327
1007
 
1328
- def parse_order(self, order, market: Market = None) -> Order:
1008
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1329
1009
  #
1330
1010
  # createOrder
1331
1011
  #
@@ -1406,7 +1086,6 @@ class onetrading(Exchange, ImplicitAPI):
1406
1086
  side = self.safe_string_lower(rawOrder, 'side')
1407
1087
  type = self.safe_string_lower(rawOrder, 'type')
1408
1088
  timeInForce = self.parse_time_in_force(self.safe_string(rawOrder, 'time_in_force'))
1409
- stopPrice = self.safe_number(rawOrder, 'trigger_price')
1410
1089
  postOnly = self.safe_value(rawOrder, 'is_post_only')
1411
1090
  rawTrades = self.safe_value(order, 'trades', [])
1412
1091
  return self.safe_order({
@@ -1417,13 +1096,12 @@ class onetrading(Exchange, ImplicitAPI):
1417
1096
  'datetime': self.iso8601(timestamp),
1418
1097
  'lastTradeTimestamp': None,
1419
1098
  'symbol': symbol,
1420
- 'type': type,
1099
+ 'type': self.parse_order_type(type),
1421
1100
  'timeInForce': timeInForce,
1422
1101
  'postOnly': postOnly,
1423
1102
  'side': side,
1424
1103
  'price': price,
1425
- 'stopPrice': stopPrice,
1426
- 'triggerPrice': stopPrice,
1104
+ 'triggerPrice': self.safe_number(rawOrder, 'trigger_price'),
1427
1105
  'amount': amount,
1428
1106
  'cost': None,
1429
1107
  'average': None,
@@ -1434,8 +1112,14 @@ class onetrading(Exchange, ImplicitAPI):
1434
1112
  'trades': rawTrades,
1435
1113
  }, market)
1436
1114
 
1437
- def parse_time_in_force(self, timeInForce):
1438
- timeInForces = {
1115
+ def parse_order_type(self, type: Str):
1116
+ types: dict = {
1117
+ 'booked': 'limit',
1118
+ }
1119
+ return self.safe_string(types, type, type)
1120
+
1121
+ def parse_time_in_force(self, timeInForce: Str):
1122
+ timeInForces: dict = {
1439
1123
  'GOOD_TILL_CANCELLED': 'GTC',
1440
1124
  'GOOD_TILL_TIME': 'GTT',
1441
1125
  'IMMEDIATE_OR_CANCELLED': 'IOC',
@@ -1446,12 +1130,14 @@ class onetrading(Exchange, ImplicitAPI):
1446
1130
  async def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1447
1131
  """
1448
1132
  create a trade order
1449
- :see: https://docs.onetrading.com/#create-order
1133
+
1134
+ https://docs.onetrading.com/#create-order
1135
+
1450
1136
  :param str symbol: unified symbol of the market to create an order in
1451
1137
  :param str type: 'market' or 'limit'
1452
1138
  :param str side: 'buy' or 'sell'
1453
1139
  :param float amount: how much of currency you want to trade in units of base currency
1454
- :param float [price]: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1140
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1455
1141
  :param dict [params]: extra parameters specific to the exchange API endpoint
1456
1142
  :param float [params.triggerPrice]: onetrading only does stop limit orders and does not do stop market
1457
1143
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1459,7 +1145,7 @@ class onetrading(Exchange, ImplicitAPI):
1459
1145
  await self.load_markets()
1460
1146
  market = self.market(symbol)
1461
1147
  uppercaseType = type.upper()
1462
- request = {
1148
+ request: dict = {
1463
1149
  'instrument_code': market['id'],
1464
1150
  'type': uppercaseType, # LIMIT, MARKET, STOP
1465
1151
  'side': side.upper(), # or SELL
@@ -1489,6 +1175,9 @@ class onetrading(Exchange, ImplicitAPI):
1489
1175
  if clientOrderId is not None:
1490
1176
  request['client_id'] = clientOrderId
1491
1177
  params = self.omit(params, ['clientOrderId', 'client_id'])
1178
+ timeInForce = self.safe_string_2(params, 'timeInForce', 'time_in_force', 'GOOD_TILL_CANCELLED')
1179
+ params = self.omit(params, 'timeInForce')
1180
+ request['time_in_force'] = timeInForce
1492
1181
  response = await self.privatePostAccountOrders(self.extend(request, params))
1493
1182
  #
1494
1183
  # {
@@ -1510,6 +1199,9 @@ class onetrading(Exchange, ImplicitAPI):
1510
1199
  async def cancel_order(self, id: str, symbol: Str = None, params={}):
1511
1200
  """
1512
1201
  cancels an open order
1202
+
1203
+ https://docs.onetrading.com/#close-order-by-order-id
1204
+
1513
1205
  :param str id: order id
1514
1206
  :param str symbol: not used by bitmex cancelOrder()
1515
1207
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1519,27 +1211,34 @@ class onetrading(Exchange, ImplicitAPI):
1519
1211
  clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_id')
1520
1212
  params = self.omit(params, ['clientOrderId', 'client_id'])
1521
1213
  method = 'privateDeleteAccountOrdersOrderId'
1522
- request = {}
1214
+ request: dict = {}
1523
1215
  if clientOrderId is not None:
1524
1216
  method = 'privateDeleteAccountOrdersClientClientId'
1525
1217
  request['client_id'] = clientOrderId
1526
1218
  else:
1527
1219
  request['order_id'] = id
1528
- response = await getattr(self, method)(self.extend(request, params))
1220
+ response = None
1221
+ if method == 'privateDeleteAccountOrdersOrderId':
1222
+ response = await self.privateDeleteAccountOrdersOrderId(self.extend(request, params))
1223
+ else:
1224
+ response = await self.privateDeleteAccountOrdersClientClientId(self.extend(request, params))
1529
1225
  #
1530
1226
  # responds with an empty body
1531
1227
  #
1532
- return response
1228
+ return self.parse_order(response)
1533
1229
 
1534
1230
  async def cancel_all_orders(self, symbol: Str = None, params={}):
1535
1231
  """
1536
1232
  cancel all open orders
1233
+
1234
+ https://docs.onetrading.com/#close-all-orders
1235
+
1537
1236
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1538
1237
  :param dict [params]: extra parameters specific to the exchange API endpoint
1539
1238
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1540
1239
  """
1541
1240
  await self.load_markets()
1542
- request = {}
1241
+ request: dict = {}
1543
1242
  if symbol is not None:
1544
1243
  market = self.market(symbol)
1545
1244
  request['instrument_code'] = market['id']
@@ -1554,13 +1253,16 @@ class onetrading(Exchange, ImplicitAPI):
1554
1253
  async def cancel_orders(self, ids, symbol: Str = None, params={}):
1555
1254
  """
1556
1255
  cancel multiple orders
1256
+
1257
+ https://docs.onetrading.com/#close-all-orders
1258
+
1557
1259
  :param str[] ids: order ids
1558
1260
  :param str symbol: unified market symbol, default is None
1559
1261
  :param dict [params]: extra parameters specific to the exchange API endpoint
1560
1262
  :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1561
1263
  """
1562
1264
  await self.load_markets()
1563
- request = {
1265
+ request: dict = {
1564
1266
  'ids': ','.join(ids),
1565
1267
  }
1566
1268
  response = await self.privateDeleteAccountOrders(self.extend(request, params))
@@ -1574,12 +1276,16 @@ class onetrading(Exchange, ImplicitAPI):
1574
1276
  async def fetch_order(self, id: str, symbol: Str = None, params={}):
1575
1277
  """
1576
1278
  fetches information on an order made by the user
1279
+
1280
+ https://docs.onetrading.com/#get-order
1281
+
1282
+ :param str id: the order id
1577
1283
  :param str symbol: not used by onetrading fetchOrder
1578
1284
  :param dict [params]: extra parameters specific to the exchange API endpoint
1579
1285
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1580
1286
  """
1581
1287
  await self.load_markets()
1582
- request = {
1288
+ request: dict = {
1583
1289
  'order_id': id,
1584
1290
  }
1585
1291
  response = await self.privateGetAccountOrdersOrderId(self.extend(request, params))
@@ -1629,6 +1335,9 @@ class onetrading(Exchange, ImplicitAPI):
1629
1335
  async def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1630
1336
  """
1631
1337
  fetch all unfilled currently open orders
1338
+
1339
+ https://docs.onetrading.com/#get-orders
1340
+
1632
1341
  :param str symbol: unified market symbol
1633
1342
  :param int [since]: the earliest time in ms to fetch open orders for
1634
1343
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1636,7 +1345,7 @@ class onetrading(Exchange, ImplicitAPI):
1636
1345
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1637
1346
  """
1638
1347
  await self.load_markets()
1639
- request = {
1348
+ request: dict = {
1640
1349
  # 'from': self.iso8601(since),
1641
1350
  # 'to': self.iso8601(self.milliseconds()), # max range is 100 days
1642
1351
  # 'instrument_code': market['id'],
@@ -1737,19 +1446,22 @@ class onetrading(Exchange, ImplicitAPI):
1737
1446
  # "max_page_size": 100
1738
1447
  # }
1739
1448
  #
1740
- orderHistory = self.safe_value(response, 'order_history', [])
1449
+ orderHistory = self.safe_list(response, 'order_history', [])
1741
1450
  return self.parse_orders(orderHistory, market, since, limit)
1742
1451
 
1743
1452
  async def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1744
1453
  """
1745
1454
  fetches information on multiple closed orders made by the user
1455
+
1456
+ https://docs.onetrading.com/#get-orders
1457
+
1746
1458
  :param str symbol: unified market symbol of the market orders were made in
1747
1459
  :param int [since]: the earliest time in ms to fetch orders for
1748
1460
  :param int [limit]: the maximum number of order structures to retrieve
1749
1461
  :param dict [params]: extra parameters specific to the exchange API endpoint
1750
1462
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1751
1463
  """
1752
- request = {
1464
+ request: dict = {
1753
1465
  'with_cancelled_and_rejected': True, # default is False, orders which have been cancelled by the user before being filled or rejected by the system, additionally, all inactive filled orders which would return with "with_just_filled_inactive"
1754
1466
  }
1755
1467
  return await self.fetch_open_orders(symbol, since, limit, self.extend(request, params))
@@ -1757,6 +1469,9 @@ class onetrading(Exchange, ImplicitAPI):
1757
1469
  async def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1758
1470
  """
1759
1471
  fetch all the trades made from a single order
1472
+
1473
+ https://docs.onetrading.com/#trades-for-order
1474
+
1760
1475
  :param str id: order id
1761
1476
  :param str symbol: unified market symbol
1762
1477
  :param int [since]: the earliest time in ms to fetch trades for
@@ -1765,7 +1480,7 @@ class onetrading(Exchange, ImplicitAPI):
1765
1480
  :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1766
1481
  """
1767
1482
  await self.load_markets()
1768
- request = {
1483
+ request: dict = {
1769
1484
  'order_id': id,
1770
1485
  # 'max_page_size': 100,
1771
1486
  # 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
@@ -1812,6 +1527,9 @@ class onetrading(Exchange, ImplicitAPI):
1812
1527
  async def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1813
1528
  """
1814
1529
  fetch all trades made by the user
1530
+
1531
+ https://docs.onetrading.com/#all-trades
1532
+
1815
1533
  :param str symbol: unified market symbol
1816
1534
  :param int [since]: the earliest time in ms to fetch trades for
1817
1535
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1819,7 +1537,7 @@ class onetrading(Exchange, ImplicitAPI):
1819
1537
  :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1820
1538
  """
1821
1539
  await self.load_markets()
1822
- request = {
1540
+ request: dict = {
1823
1541
  # 'from': self.iso8601(since),
1824
1542
  # 'to': self.iso8601(self.milliseconds()), # max range is 100 days
1825
1543
  # 'instrument_code': market['id'],
@@ -1868,7 +1586,7 @@ class onetrading(Exchange, ImplicitAPI):
1868
1586
  # "cursor": "string"
1869
1587
  # }
1870
1588
  #
1871
- tradeHistory = self.safe_value(response, 'trade_history', [])
1589
+ tradeHistory = self.safe_list(response, 'trade_history', [])
1872
1590
  return self.parse_trades(tradeHistory, market, since, limit)
1873
1591
 
1874
1592
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
@@ -1891,7 +1609,7 @@ class onetrading(Exchange, ImplicitAPI):
1891
1609
  url += '?' + self.urlencode(query)
1892
1610
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1893
1611
 
1894
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1612
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1895
1613
  if response is None:
1896
1614
  return None
1897
1615
  #