ccxt 4.2.77__py2.py3-none-any.whl → 4.4.49__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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  126. ccxt/async_support/digifinex.py +465 -233
  127. ccxt/async_support/ellipx.py +1887 -0
  128. ccxt/async_support/exmo.py +317 -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 +433 -178
  133. ccxt/async_support/hollaex.py +207 -83
  134. ccxt/async_support/htx.py +1095 -563
  135. ccxt/async_support/huobijp.py +178 -56
  136. ccxt/async_support/hyperliquid.py +1678 -292
  137. ccxt/async_support/idex.py +219 -95
  138. ccxt/async_support/independentreserve.py +300 -31
  139. ccxt/async_support/indodax.py +226 -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 +198 -107
  145. ccxt/async_support/latoken.py +199 -79
  146. ccxt/async_support/lbank.py +360 -113
  147. ccxt/async_support/luno.py +185 -62
  148. ccxt/async_support/lykke.py +168 -55
  149. ccxt/async_support/mercado.py +101 -29
  150. ccxt/async_support/mexc.py +995 -429
  151. ccxt/async_support/myokx.py +53 -0
  152. ccxt/async_support/ndax.py +234 -82
  153. ccxt/async_support/novadax.py +195 -75
  154. ccxt/async_support/oceanex.py +244 -59
  155. ccxt/async_support/okcoin.py +301 -165
  156. ccxt/async_support/okx.py +1776 -454
  157. ccxt/async_support/onetrading.py +198 -414
  158. ccxt/async_support/oxfun.py +2898 -0
  159. ccxt/async_support/p2b.py +142 -52
  160. ccxt/async_support/paradex.py +2085 -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 +3205 -937
  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 +1525 -573
  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 +223 -97
  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 +639 -323
  234. ccxt/digifinex.py +465 -233
  235. ccxt/ellipx.py +1887 -0
  236. ccxt/exmo.py +317 -128
  237. ccxt/gate.py +1472 -463
  238. ccxt/gemini.py +206 -84
  239. ccxt/hashkey.py +4164 -0
  240. ccxt/hitbtc.py +433 -178
  241. ccxt/hollaex.py +207 -83
  242. ccxt/htx.py +1095 -563
  243. ccxt/huobijp.py +178 -56
  244. ccxt/hyperliquid.py +1677 -292
  245. ccxt/idex.py +219 -95
  246. ccxt/independentreserve.py +299 -31
  247. ccxt/indodax.py +226 -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 +198 -107
  253. ccxt/latoken.py +199 -79
  254. ccxt/lbank.py +360 -113
  255. ccxt/luno.py +185 -62
  256. ccxt/lykke.py +168 -55
  257. ccxt/mercado.py +101 -29
  258. ccxt/mexc.py +994 -429
  259. ccxt/myokx.py +53 -0
  260. ccxt/ndax.py +234 -82
  261. ccxt/novadax.py +195 -75
  262. ccxt/oceanex.py +244 -59
  263. ccxt/okcoin.py +301 -165
  264. ccxt/okx.py +1776 -454
  265. ccxt/onetrading.py +198 -414
  266. ccxt/oxfun.py +2897 -0
  267. ccxt/p2b.py +142 -52
  268. ccxt/paradex.py +2085 -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 +143 -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.49.dist-info/LICENSE.txt +21 -0
  496. ccxt-4.4.49.dist-info/METADATA +646 -0
  497. ccxt-4.4.49.dist-info/RECORD +669 -0
  498. {ccxt-4.2.77.dist-info → ccxt-4.4.49.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.49.dist-info}/top_level.txt +0 -0
ccxt/onetrading.py CHANGED
@@ -5,9 +5,10 @@
5
5
 
6
6
  from ccxt.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': {
@@ -308,11 +302,80 @@ class onetrading(Exchange, ImplicitAPI):
308
302
  },
309
303
  'fiat': ['EUR', 'CHF'],
310
304
  },
305
+ 'features': {
306
+ 'spot': {
307
+ 'sandbox': False,
308
+ 'createOrder': {
309
+ 'marginMode': False,
310
+ 'triggerPrice': False,
311
+ 'triggerDirection': False,
312
+ 'triggerPriceType': None,
313
+ 'stopLossPrice': False,
314
+ 'takeProfitPrice': False,
315
+ 'attachedStopLossTakeProfit': None,
316
+ 'timeInForce': {
317
+ 'IOC': True,
318
+ 'FOK': True,
319
+ 'PO': True,
320
+ 'GTD': False,
321
+ },
322
+ 'hedged': False,
323
+ 'trailing': False,
324
+ 'leverage': False,
325
+ 'marketBuyByCost': False,
326
+ 'marketBuyRequiresPrice': False,
327
+ 'selfTradePrevention': False,
328
+ 'iceberg': False,
329
+ },
330
+ 'createOrders': None,
331
+ 'fetchMyTrades': {
332
+ 'marginMode': False,
333
+ 'limit': 100,
334
+ 'daysBack': 100000, # todo
335
+ 'untilDays': 100000, # todo
336
+ },
337
+ 'fetchOrder': {
338
+ 'marginMode': False,
339
+ 'trigger': False,
340
+ 'trailing': False,
341
+ },
342
+ 'fetchOpenOrders': {
343
+ 'marginMode': False,
344
+ 'limit': 100,
345
+ 'trigger': False,
346
+ 'trailing': False,
347
+ },
348
+ 'fetchOrders': None, # todo
349
+ 'fetchClosedOrders': {
350
+ 'marginMode': False,
351
+ 'limit': 100,
352
+ 'daysBack': 100000, # todo
353
+ 'daysBackCanceled': 1 / 12, # todo
354
+ 'untilDays': 100000, # todo
355
+ 'trigger': False,
356
+ 'trailing': False,
357
+ },
358
+ 'fetchOHLCV': {
359
+ 'limit': 5000,
360
+ },
361
+ },
362
+ 'swap': {
363
+ 'linear': None,
364
+ 'inverse': None,
365
+ },
366
+ 'future': {
367
+ 'linear': None,
368
+ 'inverse': None,
369
+ },
370
+ },
311
371
  })
312
372
 
313
373
  def fetch_time(self, params={}):
314
374
  """
315
375
  fetches the current integer timestamp in milliseconds from the exchange server
376
+
377
+ https://docs.onetrading.com/#time
378
+
316
379
  :param dict [params]: extra parameters specific to the exchange API endpoint
317
380
  :returns int: the current integer timestamp in milliseconds from the exchange server
318
381
  """
@@ -325,9 +388,12 @@ class onetrading(Exchange, ImplicitAPI):
325
388
  #
326
389
  return self.safe_integer(response, 'epoch_millis')
327
390
 
328
- def fetch_currencies(self, params={}):
391
+ def fetch_currencies(self, params={}) -> Currencies:
329
392
  """
330
393
  fetches all available currencies on an exchange
394
+
395
+ https://docs.onetrading.com/#currencies
396
+
331
397
  :param dict [params]: extra parameters specific to the exchange API endpoint
332
398
  :returns dict: an associative dictionary of currencies
333
399
  """
@@ -340,7 +406,7 @@ class onetrading(Exchange, ImplicitAPI):
340
406
  # }
341
407
  # ]
342
408
  #
343
- result = {}
409
+ result: dict = {}
344
410
  for i in range(0, len(response)):
345
411
  currency = response[i]
346
412
  id = self.safe_string(currency, 'code')
@@ -363,9 +429,12 @@ class onetrading(Exchange, ImplicitAPI):
363
429
  }
364
430
  return result
365
431
 
366
- def fetch_markets(self, params={}):
432
+ def fetch_markets(self, params={}) -> List[Market]:
367
433
  """
368
434
  retrieves data on all markets for onetrading
435
+
436
+ https://docs.onetrading.com/#instruments
437
+
369
438
  :param dict [params]: extra parameters specific to the exchange API endpoint
370
439
  :returns dict[]: an array of objects representing market data
371
440
  """
@@ -384,7 +453,7 @@ class onetrading(Exchange, ImplicitAPI):
384
453
  #
385
454
  return self.parse_markets(response)
386
455
 
387
- def parse_market(self, market) -> Market:
456
+ def parse_market(self, market: dict) -> Market:
388
457
  baseAsset = self.safe_value(market, 'base', {})
389
458
  quoteAsset = self.safe_value(market, 'quote', {})
390
459
  baseId = self.safe_string(baseAsset, 'code')
@@ -443,9 +512,13 @@ class onetrading(Exchange, ImplicitAPI):
443
512
  'info': market,
444
513
  }
445
514
 
446
- def fetch_trading_fees(self, params={}):
515
+ def fetch_trading_fees(self, params={}) -> TradingFees:
447
516
  """
448
517
  fetch the trading fees for multiple markets
518
+
519
+ https://docs.onetrading.com/#fee-groups
520
+ https://docs.onetrading.com/#fees
521
+
449
522
  :param dict [params]: extra parameters specific to the exchange API endpoint
450
523
  :returns dict: a dictionary of `fee structures <https://docs.ccxt.com/#/?id=fee-structure>` indexed by market symbols
451
524
  """
@@ -454,7 +527,12 @@ class onetrading(Exchange, ImplicitAPI):
454
527
  if method is None:
455
528
  options = self.safe_value(self.options, 'fetchTradingFees', {})
456
529
  method = self.safe_string(options, 'method', 'fetchPrivateTradingFees')
457
- return getattr(self, method)(params)
530
+ if method == 'fetchPrivateTradingFees':
531
+ return self.fetch_private_trading_fees(params)
532
+ elif method == 'fetchPublicTradingFees':
533
+ return self.fetch_public_trading_fees(params)
534
+ else:
535
+ raise NotSupported(self.id + ' fetchTradingFees() does not support ' + method + ', fetchPrivateTradingFees and fetchPublicTradingFees are supported')
458
536
 
459
537
  def fetch_public_trading_fees(self, params={}):
460
538
  self.load_markets()
@@ -482,7 +560,7 @@ class onetrading(Exchange, ImplicitAPI):
482
560
  feeTiers = self.safe_value(first, 'fee_tiers')
483
561
  tiers = self.parse_fee_tiers(feeTiers)
484
562
  firstTier = self.safe_value(feeTiers, 0, {})
485
- result = {}
563
+ result: dict = {}
486
564
  for i in range(0, len(self.symbols)):
487
565
  symbol = self.symbols[i]
488
566
  result[symbol] = {
@@ -526,7 +604,7 @@ class onetrading(Exchange, ImplicitAPI):
526
604
  makerFee = Precise.string_div(makerFee, '100')
527
605
  takerFee = Precise.string_div(takerFee, '100')
528
606
  feeTiers = self.safe_value(response, 'fee_tiers')
529
- result = {}
607
+ result: dict = {}
530
608
  tiers = self.parse_fee_tiers(feeTiers)
531
609
  for i in range(0, len(self.symbols)):
532
610
  symbol = self.symbols[i]
@@ -558,7 +636,7 @@ class onetrading(Exchange, ImplicitAPI):
558
636
  'taker': takerFees,
559
637
  }
560
638
 
561
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
639
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
562
640
  #
563
641
  # fetchTicker, fetchTickers
564
642
  #
@@ -613,13 +691,16 @@ class onetrading(Exchange, ImplicitAPI):
613
691
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
614
692
  """
615
693
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
694
+
695
+ https://docs.onetrading.com/#market-ticker-for-instrument
696
+
616
697
  :param str symbol: unified symbol of the market to fetch the ticker for
617
698
  :param dict [params]: extra parameters specific to the exchange API endpoint
618
699
  :returns dict: a `ticker structure <https://docs.ccxt.com/#/?id=ticker-structure>`
619
700
  """
620
701
  self.load_markets()
621
702
  market = self.market(symbol)
622
- request = {
703
+ request: dict = {
623
704
  'instrument_code': market['id'],
624
705
  }
625
706
  response = self.publicGetMarketTickerInstrumentCode(self.extend(request, params))
@@ -646,7 +727,10 @@ class onetrading(Exchange, ImplicitAPI):
646
727
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
647
728
  """
648
729
  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
730
+
731
+ https://docs.onetrading.com/#market-ticker
732
+
733
+ :param str[] [symbols]: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
650
734
  :param dict [params]: extra parameters specific to the exchange API endpoint
651
735
  :returns dict: a dictionary of `ticker structures <https://docs.ccxt.com/#/?id=ticker-structure>`
652
736
  """
@@ -673,7 +757,7 @@ class onetrading(Exchange, ImplicitAPI):
673
757
  # }
674
758
  # ]
675
759
  #
676
- result = {}
760
+ result: dict = {}
677
761
  for i in range(0, len(response)):
678
762
  ticker = self.parse_ticker(response[i])
679
763
  symbol = ticker['symbol']
@@ -683,6 +767,9 @@ class onetrading(Exchange, ImplicitAPI):
683
767
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
684
768
  """
685
769
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
770
+
771
+ https://docs.onetrading.com/#order-book
772
+
686
773
  :param str symbol: unified symbol of the market to fetch the order book for
687
774
  :param int [limit]: the maximum amount of order book entries to return
688
775
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -690,7 +777,7 @@ class onetrading(Exchange, ImplicitAPI):
690
777
  """
691
778
  self.load_markets()
692
779
  market = self.market(symbol)
693
- request = {
780
+ request: dict = {
694
781
  'instrument_code': market['id'],
695
782
  # level 1 means only the best bid and ask
696
783
  # level 2 is a compiled order book up to market precision
@@ -778,7 +865,7 @@ class onetrading(Exchange, ImplicitAPI):
778
865
  granularity = self.safe_value(ohlcv, 'granularity')
779
866
  unit = self.safe_string(granularity, 'unit')
780
867
  period = self.safe_string(granularity, 'period')
781
- units = {
868
+ units: dict = {
782
869
  'MINUTES': 'm',
783
870
  'HOURS': 'h',
784
871
  'DAYS': 'd',
@@ -805,6 +892,9 @@ class onetrading(Exchange, ImplicitAPI):
805
892
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
806
893
  """
807
894
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
895
+
896
+ https://docs.onetrading.com/#candlesticks
897
+
808
898
  :param str symbol: unified symbol of the market to fetch OHLCV data for
809
899
  :param str timeframe: the length of time each candle represents
810
900
  :param int [since]: timestamp in ms of the earliest candle to fetch
@@ -820,7 +910,7 @@ class onetrading(Exchange, ImplicitAPI):
820
910
  duration = durationInSeconds * 1000
821
911
  if limit is None:
822
912
  limit = 1500
823
- request = {
913
+ request: dict = {
824
914
  'instrument_code': market['id'],
825
915
  # 'from': self.iso8601(since),
826
916
  # 'to': self.iso8601(self.milliseconds()),
@@ -842,9 +932,10 @@ class onetrading(Exchange, ImplicitAPI):
842
932
  # {"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
933
  # ]
844
934
  #
845
- return self.parse_ohlcvs(response, market, timeframe, since, limit)
935
+ ohlcv = self.safe_list(response, 'candlesticks')
936
+ return self.parse_ohlcvs(ohlcv, market, timeframe, since, limit)
846
937
 
847
- def parse_trade(self, trade, market: Market = None) -> Trade:
938
+ def parse_trade(self, trade: dict, market: Market = None) -> Trade:
848
939
  #
849
940
  # fetchTrades(public)
850
941
  #
@@ -923,47 +1014,9 @@ class onetrading(Exchange, ImplicitAPI):
923
1014
  'info': trade,
924
1015
  }, market)
925
1016
 
926
- 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
- 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 = 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
1017
  def parse_balance(self, response) -> Balances:
965
1018
  balances = self.safe_value(response, 'balances', [])
966
- result = {'info': response}
1019
+ result: dict = {'info': response}
967
1020
  for i in range(0, len(balances)):
968
1021
  balance = balances[i]
969
1022
  currencyId = self.safe_string(balance, 'currency_code')
@@ -977,6 +1030,9 @@ class onetrading(Exchange, ImplicitAPI):
977
1030
  def fetch_balance(self, params={}) -> Balances:
978
1031
  """
979
1032
  query for balance and get the amount of funds available for trading or funds locked in orders
1033
+
1034
+ https://docs.onetrading.com/#balances
1035
+
980
1036
  :param dict [params]: extra parameters specific to the exchange API endpoint
981
1037
  :returns dict: a `balance structure <https://docs.ccxt.com/#/?id=balance-structure>`
982
1038
  """
@@ -1000,319 +1056,8 @@ class onetrading(Exchange, ImplicitAPI):
1000
1056
  #
1001
1057
  return self.parse_balance(response)
1002
1058
 
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
- 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
- self.load_markets()
1026
- currency = self.currency(code)
1027
- request = {
1028
- 'currency': currency['id'],
1029
- }
1030
- response = 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
- 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
- self.load_markets()
1049
- currency = self.currency(code)
1050
- request = {
1051
- 'currency_code': currency['id'],
1052
- }
1053
- response = 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
- 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
- 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 = 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
- 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
- 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 = 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
- 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
- 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 = 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 = {
1059
+ def parse_order_status(self, status: Str):
1060
+ statuses: dict = {
1316
1061
  'FILLED': 'open',
1317
1062
  'FILLED_FULLY': 'closed',
1318
1063
  'FILLED_CLOSED': 'canceled',
@@ -1322,10 +1067,11 @@ class onetrading(Exchange, ImplicitAPI):
1322
1067
  'CLOSED': 'canceled',
1323
1068
  'FAILED': 'failed',
1324
1069
  'STOP_TRIGGERED': 'triggered',
1070
+ 'DONE': 'closed',
1325
1071
  }
1326
1072
  return self.safe_string(statuses, status, status)
1327
1073
 
1328
- def parse_order(self, order, market: Market = None) -> Order:
1074
+ def parse_order(self, order: dict, market: Market = None) -> Order:
1329
1075
  #
1330
1076
  # createOrder
1331
1077
  #
@@ -1406,7 +1152,6 @@ class onetrading(Exchange, ImplicitAPI):
1406
1152
  side = self.safe_string_lower(rawOrder, 'side')
1407
1153
  type = self.safe_string_lower(rawOrder, 'type')
1408
1154
  timeInForce = self.parse_time_in_force(self.safe_string(rawOrder, 'time_in_force'))
1409
- stopPrice = self.safe_number(rawOrder, 'trigger_price')
1410
1155
  postOnly = self.safe_value(rawOrder, 'is_post_only')
1411
1156
  rawTrades = self.safe_value(order, 'trades', [])
1412
1157
  return self.safe_order({
@@ -1417,13 +1162,12 @@ class onetrading(Exchange, ImplicitAPI):
1417
1162
  'datetime': self.iso8601(timestamp),
1418
1163
  'lastTradeTimestamp': None,
1419
1164
  'symbol': symbol,
1420
- 'type': type,
1165
+ 'type': self.parse_order_type(type),
1421
1166
  'timeInForce': timeInForce,
1422
1167
  'postOnly': postOnly,
1423
1168
  'side': side,
1424
1169
  'price': price,
1425
- 'stopPrice': stopPrice,
1426
- 'triggerPrice': stopPrice,
1170
+ 'triggerPrice': self.safe_number(rawOrder, 'trigger_price'),
1427
1171
  'amount': amount,
1428
1172
  'cost': None,
1429
1173
  'average': None,
@@ -1434,8 +1178,14 @@ class onetrading(Exchange, ImplicitAPI):
1434
1178
  'trades': rawTrades,
1435
1179
  }, market)
1436
1180
 
1437
- def parse_time_in_force(self, timeInForce):
1438
- timeInForces = {
1181
+ def parse_order_type(self, type: Str):
1182
+ types: dict = {
1183
+ 'booked': 'limit',
1184
+ }
1185
+ return self.safe_string(types, type, type)
1186
+
1187
+ def parse_time_in_force(self, timeInForce: Str):
1188
+ timeInForces: dict = {
1439
1189
  'GOOD_TILL_CANCELLED': 'GTC',
1440
1190
  'GOOD_TILL_TIME': 'GTT',
1441
1191
  'IMMEDIATE_OR_CANCELLED': 'IOC',
@@ -1446,12 +1196,14 @@ class onetrading(Exchange, ImplicitAPI):
1446
1196
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1447
1197
  """
1448
1198
  create a trade order
1449
- :see: https://docs.onetrading.com/#create-order
1199
+
1200
+ https://docs.onetrading.com/#create-order
1201
+
1450
1202
  :param str symbol: unified symbol of the market to create an order in
1451
1203
  :param str type: 'market' or 'limit'
1452
1204
  :param str side: 'buy' or 'sell'
1453
1205
  :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
1206
+ :param float [price]: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1455
1207
  :param dict [params]: extra parameters specific to the exchange API endpoint
1456
1208
  :param float [params.triggerPrice]: onetrading only does stop limit orders and does not do stop market
1457
1209
  :returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1459,7 +1211,7 @@ class onetrading(Exchange, ImplicitAPI):
1459
1211
  self.load_markets()
1460
1212
  market = self.market(symbol)
1461
1213
  uppercaseType = type.upper()
1462
- request = {
1214
+ request: dict = {
1463
1215
  'instrument_code': market['id'],
1464
1216
  'type': uppercaseType, # LIMIT, MARKET, STOP
1465
1217
  'side': side.upper(), # or SELL
@@ -1489,6 +1241,9 @@ class onetrading(Exchange, ImplicitAPI):
1489
1241
  if clientOrderId is not None:
1490
1242
  request['client_id'] = clientOrderId
1491
1243
  params = self.omit(params, ['clientOrderId', 'client_id'])
1244
+ timeInForce = self.safe_string_2(params, 'timeInForce', 'time_in_force', 'GOOD_TILL_CANCELLED')
1245
+ params = self.omit(params, 'timeInForce')
1246
+ request['time_in_force'] = timeInForce
1492
1247
  response = self.privatePostAccountOrders(self.extend(request, params))
1493
1248
  #
1494
1249
  # {
@@ -1510,6 +1265,9 @@ class onetrading(Exchange, ImplicitAPI):
1510
1265
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1511
1266
  """
1512
1267
  cancels an open order
1268
+
1269
+ https://docs.onetrading.com/#close-order-by-order-id
1270
+
1513
1271
  :param str id: order id
1514
1272
  :param str symbol: not used by bitmex cancelOrder()
1515
1273
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1519,27 +1277,34 @@ class onetrading(Exchange, ImplicitAPI):
1519
1277
  clientOrderId = self.safe_string_2(params, 'clientOrderId', 'client_id')
1520
1278
  params = self.omit(params, ['clientOrderId', 'client_id'])
1521
1279
  method = 'privateDeleteAccountOrdersOrderId'
1522
- request = {}
1280
+ request: dict = {}
1523
1281
  if clientOrderId is not None:
1524
1282
  method = 'privateDeleteAccountOrdersClientClientId'
1525
1283
  request['client_id'] = clientOrderId
1526
1284
  else:
1527
1285
  request['order_id'] = id
1528
- response = getattr(self, method)(self.extend(request, params))
1286
+ response = None
1287
+ if method == 'privateDeleteAccountOrdersOrderId':
1288
+ response = self.privateDeleteAccountOrdersOrderId(self.extend(request, params))
1289
+ else:
1290
+ response = self.privateDeleteAccountOrdersClientClientId(self.extend(request, params))
1529
1291
  #
1530
1292
  # responds with an empty body
1531
1293
  #
1532
- return response
1294
+ return self.parse_order(response)
1533
1295
 
1534
1296
  def cancel_all_orders(self, symbol: Str = None, params={}):
1535
1297
  """
1536
1298
  cancel all open orders
1299
+
1300
+ https://docs.onetrading.com/#close-all-orders
1301
+
1537
1302
  :param str symbol: unified market symbol, only orders in the market of self symbol are cancelled when symbol is not None
1538
1303
  :param dict [params]: extra parameters specific to the exchange API endpoint
1539
1304
  :returns dict[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1540
1305
  """
1541
1306
  self.load_markets()
1542
- request = {}
1307
+ request: dict = {}
1543
1308
  if symbol is not None:
1544
1309
  market = self.market(symbol)
1545
1310
  request['instrument_code'] = market['id']
@@ -1554,13 +1319,16 @@ class onetrading(Exchange, ImplicitAPI):
1554
1319
  def cancel_orders(self, ids, symbol: Str = None, params={}):
1555
1320
  """
1556
1321
  cancel multiple orders
1322
+
1323
+ https://docs.onetrading.com/#close-all-orders
1324
+
1557
1325
  :param str[] ids: order ids
1558
1326
  :param str symbol: unified market symbol, default is None
1559
1327
  :param dict [params]: extra parameters specific to the exchange API endpoint
1560
1328
  :returns dict: an list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1561
1329
  """
1562
1330
  self.load_markets()
1563
- request = {
1331
+ request: dict = {
1564
1332
  'ids': ','.join(ids),
1565
1333
  }
1566
1334
  response = self.privateDeleteAccountOrders(self.extend(request, params))
@@ -1574,12 +1342,16 @@ class onetrading(Exchange, ImplicitAPI):
1574
1342
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1575
1343
  """
1576
1344
  fetches information on an order made by the user
1345
+
1346
+ https://docs.onetrading.com/#get-order
1347
+
1348
+ :param str id: the order id
1577
1349
  :param str symbol: not used by onetrading fetchOrder
1578
1350
  :param dict [params]: extra parameters specific to the exchange API endpoint
1579
1351
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1580
1352
  """
1581
1353
  self.load_markets()
1582
- request = {
1354
+ request: dict = {
1583
1355
  'order_id': id,
1584
1356
  }
1585
1357
  response = self.privateGetAccountOrdersOrderId(self.extend(request, params))
@@ -1629,6 +1401,9 @@ class onetrading(Exchange, ImplicitAPI):
1629
1401
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1630
1402
  """
1631
1403
  fetch all unfilled currently open orders
1404
+
1405
+ https://docs.onetrading.com/#get-orders
1406
+
1632
1407
  :param str symbol: unified market symbol
1633
1408
  :param int [since]: the earliest time in ms to fetch open orders for
1634
1409
  :param int [limit]: the maximum number of open orders structures to retrieve
@@ -1636,7 +1411,7 @@ class onetrading(Exchange, ImplicitAPI):
1636
1411
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1637
1412
  """
1638
1413
  self.load_markets()
1639
- request = {
1414
+ request: dict = {
1640
1415
  # 'from': self.iso8601(since),
1641
1416
  # 'to': self.iso8601(self.milliseconds()), # max range is 100 days
1642
1417
  # 'instrument_code': market['id'],
@@ -1737,19 +1512,22 @@ class onetrading(Exchange, ImplicitAPI):
1737
1512
  # "max_page_size": 100
1738
1513
  # }
1739
1514
  #
1740
- orderHistory = self.safe_value(response, 'order_history', [])
1515
+ orderHistory = self.safe_list(response, 'order_history', [])
1741
1516
  return self.parse_orders(orderHistory, market, since, limit)
1742
1517
 
1743
1518
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1744
1519
  """
1745
1520
  fetches information on multiple closed orders made by the user
1521
+
1522
+ https://docs.onetrading.com/#get-orders
1523
+
1746
1524
  :param str symbol: unified market symbol of the market orders were made in
1747
1525
  :param int [since]: the earliest time in ms to fetch orders for
1748
1526
  :param int [limit]: the maximum number of order structures to retrieve
1749
1527
  :param dict [params]: extra parameters specific to the exchange API endpoint
1750
1528
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1751
1529
  """
1752
- request = {
1530
+ request: dict = {
1753
1531
  '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
1532
  }
1755
1533
  return self.fetch_open_orders(symbol, since, limit, self.extend(request, params))
@@ -1757,6 +1535,9 @@ class onetrading(Exchange, ImplicitAPI):
1757
1535
  def fetch_order_trades(self, id: str, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1758
1536
  """
1759
1537
  fetch all the trades made from a single order
1538
+
1539
+ https://docs.onetrading.com/#trades-for-order
1540
+
1760
1541
  :param str id: order id
1761
1542
  :param str symbol: unified market symbol
1762
1543
  :param int [since]: the earliest time in ms to fetch trades for
@@ -1765,7 +1546,7 @@ class onetrading(Exchange, ImplicitAPI):
1765
1546
  :returns dict[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1766
1547
  """
1767
1548
  self.load_markets()
1768
- request = {
1549
+ request: dict = {
1769
1550
  'order_id': id,
1770
1551
  # 'max_page_size': 100,
1771
1552
  # 'cursor': 'string', # pointer specifying the position from which the next pages should be returned
@@ -1812,6 +1593,9 @@ class onetrading(Exchange, ImplicitAPI):
1812
1593
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
1813
1594
  """
1814
1595
  fetch all trades made by the user
1596
+
1597
+ https://docs.onetrading.com/#all-trades
1598
+
1815
1599
  :param str symbol: unified market symbol
1816
1600
  :param int [since]: the earliest time in ms to fetch trades for
1817
1601
  :param int [limit]: the maximum number of trades structures to retrieve
@@ -1819,7 +1603,7 @@ class onetrading(Exchange, ImplicitAPI):
1819
1603
  :returns Trade[]: a list of `trade structures <https://docs.ccxt.com/#/?id=trade-structure>`
1820
1604
  """
1821
1605
  self.load_markets()
1822
- request = {
1606
+ request: dict = {
1823
1607
  # 'from': self.iso8601(since),
1824
1608
  # 'to': self.iso8601(self.milliseconds()), # max range is 100 days
1825
1609
  # 'instrument_code': market['id'],
@@ -1868,7 +1652,7 @@ class onetrading(Exchange, ImplicitAPI):
1868
1652
  # "cursor": "string"
1869
1653
  # }
1870
1654
  #
1871
- tradeHistory = self.safe_value(response, 'trade_history', [])
1655
+ tradeHistory = self.safe_list(response, 'trade_history', [])
1872
1656
  return self.parse_trades(tradeHistory, market, since, limit)
1873
1657
 
1874
1658
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
@@ -1891,7 +1675,7 @@ class onetrading(Exchange, ImplicitAPI):
1891
1675
  url += '?' + self.urlencode(query)
1892
1676
  return {'url': url, 'method': method, 'body': body, 'headers': headers}
1893
1677
 
1894
- def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
1678
+ def handle_errors(self, code: int, reason: str, url: str, method: str, headers: dict, body: str, response, requestHeaders, requestBody):
1895
1679
  if response is None:
1896
1680
  return None
1897
1681
  #