ccxt-ir 4.3.46.0.3__py2.py3-none-any.whl → 4.5.0__py2.py3-none-any.whl

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (529) hide show
  1. ccxt/__init__.py +39 -35
  2. ccxt/abantether.py +8 -8
  3. ccxt/abstract/alpaca.py +4 -0
  4. ccxt/abstract/apex.py +31 -0
  5. ccxt/abstract/bigone.py +1 -1
  6. ccxt/abstract/binance.py +106 -48
  7. ccxt/abstract/binancecoinm.py +106 -48
  8. ccxt/abstract/binanceus.py +141 -83
  9. ccxt/abstract/binanceusdm.py +106 -48
  10. ccxt/abstract/bingx.py +50 -1
  11. ccxt/abstract/bitbank.py +5 -0
  12. ccxt/abstract/bitfinex.py +136 -65
  13. ccxt/abstract/bitflyer.py +1 -0
  14. ccxt/abstract/bitget.py +67 -0
  15. ccxt/abstract/bitmart.py +19 -1
  16. ccxt/abstract/bitopro.py +1 -0
  17. ccxt/abstract/bitrue.py +68 -68
  18. ccxt/abstract/bitstamp.py +1 -0
  19. ccxt/abstract/blofin.py +30 -0
  20. ccxt/abstract/btcbox.py +2 -0
  21. ccxt/abstract/bybit.py +28 -13
  22. ccxt/abstract/cex.py +28 -29
  23. ccxt/abstract/coinbaseexchange.py +1 -0
  24. ccxt/abstract/coinbaseinternational.py +1 -1
  25. ccxt/abstract/cryptocom.py +16 -0
  26. ccxt/abstract/cryptomus.py +20 -0
  27. ccxt/abstract/defx.py +69 -0
  28. ccxt/abstract/deribit.py +1 -0
  29. ccxt/abstract/derive.py +117 -0
  30. ccxt/abstract/digifinex.py +1 -0
  31. ccxt/abstract/ellipx.py +25 -0
  32. ccxt/abstract/foxbit.py +26 -0
  33. ccxt/abstract/gate.py +19 -0
  34. ccxt/abstract/gateio.py +19 -0
  35. ccxt/abstract/gemini.py +1 -0
  36. ccxt/abstract/hibachi.py +26 -0
  37. ccxt/abstract/hyperliquid.py +1 -1
  38. ccxt/abstract/independentreserve.py +6 -0
  39. ccxt/abstract/kraken.py +1 -0
  40. ccxt/abstract/krakenfutures.py +4 -0
  41. ccxt/abstract/kucoin.py +10 -0
  42. ccxt/abstract/kucoinfutures.py +18 -0
  43. ccxt/abstract/lbank.py +2 -1
  44. ccxt/abstract/luno.py +1 -0
  45. ccxt/abstract/mexc.py +2 -0
  46. ccxt/abstract/modetrade.py +119 -0
  47. ccxt/abstract/myokx.py +349 -0
  48. ccxt/abstract/oceanex.py +5 -0
  49. ccxt/abstract/okx.py +25 -0
  50. ccxt/abstract/okxus.py +349 -0
  51. ccxt/abstract/onetrading.py +0 -12
  52. ccxt/abstract/paradex.py +23 -0
  53. ccxt/abstract/phemex.py +2 -0
  54. ccxt/abstract/poloniex.py +36 -0
  55. ccxt/abstract/tradeogre.py +3 -1
  56. ccxt/abstract/upbit.py +51 -34
  57. ccxt/abstract/whitebit.py +16 -0
  58. ccxt/abstract/woo.py +64 -6
  59. ccxt/abstract/xt.py +10 -5
  60. ccxt/afratether.py +7 -7
  61. ccxt/alpaca.py +828 -51
  62. ccxt/apex.py +1875 -0
  63. ccxt/arzinja.py +7 -7
  64. ccxt/arzplus.py +9 -9
  65. ccxt/ascendex.py +501 -306
  66. ccxt/async_support/__init__.py +39 -35
  67. ccxt/async_support/abantether.py +8 -8
  68. ccxt/async_support/afratether.py +9 -9
  69. ccxt/async_support/alpaca.py +828 -51
  70. ccxt/async_support/apex.py +1875 -0
  71. ccxt/async_support/arzinja.py +10 -10
  72. ccxt/async_support/arzplus.py +12 -12
  73. ccxt/async_support/ascendex.py +502 -306
  74. ccxt/async_support/base/exchange.py +303 -89
  75. ccxt/async_support/base/ws/cache.py +9 -3
  76. ccxt/async_support/base/ws/client.py +173 -38
  77. ccxt/async_support/base/ws/future.py +25 -37
  78. ccxt/async_support/bequant.py +5 -3
  79. ccxt/async_support/bigone.py +279 -144
  80. ccxt/async_support/binance.py +2347 -1158
  81. ccxt/async_support/binancecoinm.py +9 -3
  82. ccxt/async_support/binanceus.py +17 -3
  83. ccxt/async_support/binanceusdm.py +9 -4
  84. ccxt/async_support/bingx.py +2962 -920
  85. ccxt/async_support/bit2c.py +147 -27
  86. ccxt/async_support/bitbank.py +151 -23
  87. ccxt/async_support/bitbns.py +104 -30
  88. ccxt/async_support/bitfinex.py +3291 -1113
  89. ccxt/async_support/bitflyer.py +202 -27
  90. ccxt/async_support/bitget.py +3683 -1538
  91. ccxt/async_support/bithumb.py +195 -38
  92. ccxt/async_support/bitimen.py +12 -12
  93. ccxt/async_support/bitir.py +38 -38
  94. ccxt/async_support/bitmart.py +1288 -350
  95. ccxt/async_support/bitmex.py +260 -75
  96. ccxt/async_support/bitopro.py +262 -62
  97. ccxt/async_support/bitpin.py +17 -16
  98. ccxt/async_support/bitrue.py +459 -290
  99. ccxt/async_support/bitso.py +199 -54
  100. ccxt/async_support/bitstamp.py +230 -96
  101. ccxt/async_support/bitteam.py +167 -25
  102. ccxt/async_support/{huobijp.py → bittrade.py} +158 -30
  103. ccxt/async_support/bitvavo.py +213 -49
  104. ccxt/async_support/blockchaincom.py +160 -46
  105. ccxt/async_support/blofin.py +502 -120
  106. ccxt/async_support/btcalpha.py +169 -31
  107. ccxt/async_support/btcbox.py +292 -23
  108. ccxt/async_support/btcmarkets.py +211 -58
  109. ccxt/async_support/btcturk.py +161 -38
  110. ccxt/async_support/bybit.py +1775 -1030
  111. ccxt/async_support/cex.py +1440 -1303
  112. ccxt/async_support/coinbase.py +724 -212
  113. ccxt/async_support/coinbaseadvanced.py +2 -1
  114. ccxt/async_support/coinbaseexchange.py +388 -89
  115. ccxt/async_support/coinbaseinternational.py +412 -57
  116. ccxt/async_support/coincatch.py +177 -78
  117. ccxt/async_support/coincheck.py +135 -19
  118. ccxt/async_support/coinex.py +606 -232
  119. ccxt/async_support/coinmate.py +189 -63
  120. ccxt/async_support/coinmetro.py +195 -54
  121. ccxt/async_support/coinone.py +158 -51
  122. ccxt/async_support/coinsph.py +336 -61
  123. ccxt/async_support/coinspot.py +151 -52
  124. ccxt/async_support/cryptocom.py +661 -111
  125. ccxt/async_support/cryptomus.py +1137 -0
  126. ccxt/async_support/defx.py +2071 -0
  127. ccxt/async_support/delta.py +299 -99
  128. ccxt/async_support/deribit.py +348 -126
  129. ccxt/async_support/derive.py +2572 -0
  130. ccxt/async_support/digifinex.py +430 -214
  131. ccxt/async_support/ellipx.py +2029 -0
  132. ccxt/async_support/eterex.py +10 -10
  133. ccxt/async_support/excoino.py +31 -31
  134. ccxt/async_support/exir.py +14 -14
  135. ccxt/async_support/exmo.py +344 -131
  136. ccxt/async_support/exnovin.py +10 -10
  137. ccxt/async_support/farhadexchange.py +12 -12
  138. ccxt/async_support/fmfwio.py +2 -1
  139. ccxt/async_support/foxbit.py +1935 -0
  140. ccxt/async_support/gate.py +1351 -529
  141. ccxt/async_support/gateio.py +2 -1
  142. ccxt/async_support/gemini.py +144 -39
  143. ccxt/async_support/hashkey.py +152 -109
  144. ccxt/async_support/hibachi.py +2080 -0
  145. ccxt/async_support/hitbtc.py +395 -167
  146. ccxt/async_support/hitobit.py +12 -12
  147. ccxt/async_support/hollaex.py +307 -119
  148. ccxt/async_support/htx.py +851 -383
  149. ccxt/async_support/huobi.py +2 -1
  150. ccxt/async_support/hyperliquid.py +1848 -536
  151. ccxt/async_support/independentreserve.py +288 -15
  152. ccxt/async_support/indodax.py +190 -33
  153. ccxt/async_support/jibitex.py +12 -12
  154. ccxt/async_support/kraken.py +795 -351
  155. ccxt/async_support/krakenfutures.py +214 -62
  156. ccxt/async_support/kucoin.py +715 -396
  157. ccxt/async_support/kucoinfutures.py +652 -89
  158. ccxt/async_support/latoken.py +217 -113
  159. ccxt/async_support/lbank.py +425 -97
  160. ccxt/async_support/luno.py +382 -35
  161. ccxt/async_support/mercado.py +113 -6
  162. ccxt/async_support/mexc.py +874 -437
  163. ccxt/async_support/modetrade.py +2818 -0
  164. ccxt/async_support/myokx.py +54 -0
  165. ccxt/async_support/ndax.py +221 -64
  166. ccxt/async_support/nobitex.py +31 -37
  167. ccxt/async_support/novadax.py +190 -34
  168. ccxt/async_support/oceanex.py +217 -28
  169. ccxt/async_support/okcoin.py +253 -145
  170. ccxt/async_support/okexchange.py +11 -11
  171. ccxt/async_support/okx.py +1088 -351
  172. ccxt/async_support/okxus.py +54 -0
  173. ccxt/async_support/ompfinex.py +25 -24
  174. ccxt/async_support/onetrading.py +213 -392
  175. ccxt/async_support/oxfun.py +245 -166
  176. ccxt/async_support/p2b.py +151 -29
  177. ccxt/async_support/paradex.py +562 -49
  178. ccxt/async_support/paymium.py +82 -19
  179. ccxt/async_support/phemex.py +713 -172
  180. ccxt/async_support/poloniex.py +1602 -283
  181. ccxt/async_support/probit.py +224 -95
  182. ccxt/async_support/ramzinex.py +30 -27
  183. ccxt/async_support/sarmayex.py +9 -9
  184. ccxt/async_support/sarrafex.py +13 -13
  185. ccxt/async_support/tabdeal.py +14 -13
  186. ccxt/async_support/tetherland.py +9 -9
  187. ccxt/async_support/timex.py +210 -51
  188. ccxt/async_support/tokocrypto.py +167 -47
  189. ccxt/async_support/tradeogre.py +266 -31
  190. ccxt/async_support/twox.py +9 -9
  191. ccxt/async_support/ubitex.py +12 -12
  192. ccxt/async_support/upbit.py +568 -165
  193. ccxt/async_support/vertex.py +160 -32
  194. ccxt/async_support/wallex.py +12 -12
  195. ccxt/async_support/wavesexchange.py +165 -30
  196. ccxt/async_support/whitebit.py +975 -127
  197. ccxt/async_support/woo.py +1918 -1016
  198. ccxt/async_support/woofipro.py +433 -141
  199. ccxt/async_support/xt.py +649 -193
  200. ccxt/async_support/yobit.py +195 -70
  201. ccxt/async_support/zaif.py +91 -15
  202. ccxt/async_support/zonda.py +151 -36
  203. ccxt/base/decimal_to_precision.py +14 -10
  204. ccxt/base/errors.py +49 -18
  205. ccxt/base/exchange.py +1556 -450
  206. ccxt/base/precise.py +10 -0
  207. ccxt/base/types.py +114 -6
  208. ccxt/bequant.py +5 -3
  209. ccxt/bigone.py +279 -144
  210. ccxt/binance.py +2347 -1158
  211. ccxt/binancecoinm.py +9 -3
  212. ccxt/binanceus.py +17 -3
  213. ccxt/binanceusdm.py +9 -4
  214. ccxt/bingx.py +2962 -920
  215. ccxt/bit2c.py +147 -27
  216. ccxt/bitbank.py +151 -23
  217. ccxt/bitbns.py +104 -30
  218. ccxt/bitfinex.py +3290 -1113
  219. ccxt/bitflyer.py +202 -27
  220. ccxt/bitget.py +3683 -1538
  221. ccxt/bithumb.py +194 -38
  222. ccxt/bitimen.py +9 -9
  223. ccxt/bitir.py +35 -35
  224. ccxt/bitmart.py +1288 -350
  225. ccxt/bitmex.py +260 -75
  226. ccxt/bitopro.py +262 -62
  227. ccxt/bitpin.py +15 -14
  228. ccxt/bitrue.py +459 -290
  229. ccxt/bitso.py +199 -54
  230. ccxt/bitstamp.py +230 -96
  231. ccxt/bitteam.py +167 -25
  232. ccxt/{huobijp.py → bittrade.py} +158 -30
  233. ccxt/bitvavo.py +213 -49
  234. ccxt/blockchaincom.py +160 -46
  235. ccxt/blofin.py +502 -120
  236. ccxt/btcalpha.py +169 -31
  237. ccxt/btcbox.py +291 -23
  238. ccxt/btcmarkets.py +211 -58
  239. ccxt/btcturk.py +161 -38
  240. ccxt/bybit.py +1775 -1030
  241. ccxt/cex.py +1439 -1303
  242. ccxt/coinbase.py +724 -212
  243. ccxt/coinbaseadvanced.py +2 -1
  244. ccxt/coinbaseexchange.py +388 -89
  245. ccxt/coinbaseinternational.py +412 -57
  246. ccxt/coincatch.py +177 -78
  247. ccxt/coincheck.py +135 -19
  248. ccxt/coinex.py +606 -232
  249. ccxt/coinmate.py +189 -63
  250. ccxt/coinmetro.py +194 -54
  251. ccxt/coinone.py +158 -51
  252. ccxt/coinsph.py +336 -61
  253. ccxt/coinspot.py +151 -52
  254. ccxt/cryptocom.py +661 -111
  255. ccxt/cryptomus.py +1137 -0
  256. ccxt/defx.py +2070 -0
  257. ccxt/delta.py +299 -99
  258. ccxt/deribit.py +348 -126
  259. ccxt/derive.py +2571 -0
  260. ccxt/digifinex.py +430 -214
  261. ccxt/ellipx.py +2029 -0
  262. ccxt/eterex.py +7 -7
  263. ccxt/excoino.py +29 -29
  264. ccxt/exir.py +11 -11
  265. ccxt/exmo.py +343 -131
  266. ccxt/exnovin.py +8 -8
  267. ccxt/farhadexchange.py +10 -10
  268. ccxt/fmfwio.py +2 -1
  269. ccxt/foxbit.py +1935 -0
  270. ccxt/gate.py +1351 -529
  271. ccxt/gateio.py +2 -1
  272. ccxt/gemini.py +144 -39
  273. ccxt/hashkey.py +152 -109
  274. ccxt/hibachi.py +2079 -0
  275. ccxt/hitbtc.py +395 -167
  276. ccxt/hitobit.py +9 -9
  277. ccxt/hollaex.py +307 -119
  278. ccxt/htx.py +851 -383
  279. ccxt/huobi.py +2 -1
  280. ccxt/hyperliquid.py +1848 -536
  281. ccxt/independentreserve.py +287 -15
  282. ccxt/indodax.py +190 -33
  283. ccxt/jibitex.py +9 -9
  284. ccxt/kraken.py +794 -351
  285. ccxt/krakenfutures.py +214 -62
  286. ccxt/kucoin.py +715 -396
  287. ccxt/kucoinfutures.py +652 -89
  288. ccxt/latoken.py +217 -113
  289. ccxt/lbank.py +425 -97
  290. ccxt/luno.py +382 -35
  291. ccxt/mercado.py +113 -6
  292. ccxt/mexc.py +873 -437
  293. ccxt/modetrade.py +2818 -0
  294. ccxt/myokx.py +54 -0
  295. ccxt/ndax.py +221 -64
  296. ccxt/nobitex.py +29 -35
  297. ccxt/novadax.py +190 -34
  298. ccxt/oceanex.py +217 -28
  299. ccxt/okcoin.py +253 -145
  300. ccxt/okexchange.py +9 -9
  301. ccxt/okx.py +1088 -351
  302. ccxt/okxus.py +54 -0
  303. ccxt/ompfinex.py +22 -21
  304. ccxt/onetrading.py +213 -392
  305. ccxt/oxfun.py +245 -166
  306. ccxt/p2b.py +151 -29
  307. ccxt/paradex.py +562 -49
  308. ccxt/paymium.py +82 -19
  309. ccxt/phemex.py +712 -172
  310. ccxt/poloniex.py +1601 -283
  311. ccxt/pro/__init__.py +76 -17
  312. ccxt/pro/alpaca.py +21 -6
  313. ccxt/pro/apex.py +984 -0
  314. ccxt/pro/ascendex.py +58 -10
  315. ccxt/pro/bequant.py +6 -1
  316. ccxt/pro/binance.py +728 -156
  317. ccxt/pro/binancecoinm.py +6 -2
  318. ccxt/pro/binanceus.py +8 -4
  319. ccxt/pro/binanceusdm.py +7 -2
  320. ccxt/pro/bingx.py +333 -142
  321. ccxt/pro/bitfinex.py +727 -262
  322. ccxt/pro/bitget.py +570 -79
  323. ccxt/pro/bithumb.py +20 -6
  324. ccxt/pro/bitmart.py +216 -87
  325. ccxt/pro/bitmex.py +47 -9
  326. ccxt/pro/bitopro.py +26 -14
  327. ccxt/pro/bitrue.py +22 -22
  328. ccxt/pro/bitstamp.py +54 -21
  329. ccxt/pro/{huobijp.py → bittrade.py} +7 -6
  330. ccxt/pro/bitvavo.py +191 -67
  331. ccxt/pro/blockchaincom.py +21 -8
  332. ccxt/pro/blofin.py +9 -1
  333. ccxt/pro/bybit.py +632 -245
  334. ccxt/pro/cex.py +59 -24
  335. ccxt/pro/coinbase.py +102 -73
  336. ccxt/pro/coinbaseadvanced.py +2 -1
  337. ccxt/pro/coinbaseexchange.py +8 -8
  338. ccxt/pro/coinbaseinternational.py +181 -25
  339. ccxt/pro/coincatch.py +6 -7
  340. ccxt/pro/coincheck.py +11 -6
  341. ccxt/pro/coinex.py +967 -665
  342. ccxt/pro/coinone.py +16 -9
  343. ccxt/pro/cryptocom.py +448 -45
  344. ccxt/pro/defx.py +831 -0
  345. ccxt/pro/deribit.py +150 -14
  346. ccxt/pro/derive.py +704 -0
  347. ccxt/pro/exmo.py +239 -6
  348. ccxt/pro/gate.py +623 -65
  349. ccxt/pro/gateio.py +2 -1
  350. ccxt/pro/gemini.py +27 -11
  351. ccxt/pro/hashkey.py +2 -2
  352. ccxt/pro/hitbtc.py +196 -91
  353. ccxt/pro/hollaex.py +23 -7
  354. ccxt/pro/htx.py +51 -14
  355. ccxt/pro/huobi.py +2 -1
  356. ccxt/pro/hyperliquid.py +591 -27
  357. ccxt/pro/independentreserve.py +9 -6
  358. ccxt/pro/kraken.py +640 -320
  359. ccxt/pro/krakenfutures.py +62 -35
  360. ccxt/pro/kucoin.py +267 -46
  361. ccxt/pro/kucoinfutures.py +165 -21
  362. ccxt/pro/lbank.py +102 -21
  363. ccxt/pro/luno.py +12 -8
  364. ccxt/pro/mexc.py +877 -111
  365. ccxt/pro/modetrade.py +1271 -0
  366. ccxt/pro/myokx.py +38 -0
  367. ccxt/pro/ndax.py +15 -2
  368. ccxt/pro/okcoin.py +23 -4
  369. ccxt/pro/okx.py +573 -98
  370. ccxt/pro/okxus.py +38 -0
  371. ccxt/pro/onetrading.py +30 -13
  372. ccxt/pro/oxfun.py +131 -27
  373. ccxt/pro/p2b.py +88 -22
  374. ccxt/pro/paradex.py +3 -3
  375. ccxt/pro/phemex.py +75 -21
  376. ccxt/pro/poloniex.py +124 -41
  377. ccxt/pro/probit.py +87 -80
  378. ccxt/pro/tradeogre.py +272 -0
  379. ccxt/pro/upbit.py +152 -12
  380. ccxt/pro/vertex.py +8 -3
  381. ccxt/pro/whitebit.py +58 -5
  382. ccxt/pro/woo.py +228 -37
  383. ccxt/pro/woofipro.py +106 -18
  384. ccxt/pro/xt.py +111 -5
  385. ccxt/probit.py +224 -95
  386. ccxt/protobuf/__init__.py +0 -0
  387. ccxt/protobuf/mexc/PrivateAccountV3Api_pb2.py +37 -0
  388. ccxt/protobuf/mexc/PrivateDealsV3Api_pb2.py +37 -0
  389. ccxt/protobuf/mexc/PrivateOrdersV3Api_pb2.py +37 -0
  390. ccxt/protobuf/mexc/PublicAggreBookTickerV3Api_pb2.py +37 -0
  391. ccxt/protobuf/mexc/PublicAggreDealsV3Api_pb2.py +39 -0
  392. ccxt/protobuf/mexc/PublicAggreDepthsV3Api_pb2.py +39 -0
  393. ccxt/protobuf/mexc/PublicBookTickerBatchV3Api_pb2.py +38 -0
  394. ccxt/protobuf/mexc/PublicBookTickerV3Api_pb2.py +37 -0
  395. ccxt/protobuf/mexc/PublicDealsV3Api_pb2.py +39 -0
  396. ccxt/protobuf/mexc/PublicIncreaseDepthsBatchV3Api_pb2.py +38 -0
  397. ccxt/protobuf/mexc/PublicIncreaseDepthsV3Api_pb2.py +39 -0
  398. ccxt/protobuf/mexc/PublicLimitDepthsV3Api_pb2.py +39 -0
  399. ccxt/protobuf/mexc/PublicMiniTickerV3Api_pb2.py +37 -0
  400. ccxt/protobuf/mexc/PublicMiniTickersV3Api_pb2.py +38 -0
  401. ccxt/protobuf/mexc/PublicSpotKlineV3Api_pb2.py +37 -0
  402. ccxt/protobuf/mexc/PushDataV3ApiWrapper_pb2.py +52 -0
  403. ccxt/protobuf/mexc/__init__.py +0 -0
  404. ccxt/ramzinex.py +28 -25
  405. ccxt/sarmayex.py +7 -7
  406. ccxt/sarrafex.py +10 -10
  407. ccxt/static_dependencies/__init__.py +1 -1
  408. ccxt/static_dependencies/lark/py.typed +0 -0
  409. ccxt/static_dependencies/marshmallow/py.typed +0 -0
  410. ccxt/static_dependencies/marshmallow_dataclass/py.typed +0 -0
  411. ccxt/static_dependencies/marshmallow_oneofschema/py.typed +0 -0
  412. ccxt/tabdeal.py +12 -11
  413. ccxt/test/tests_async.py +261 -57
  414. ccxt/test/tests_helpers.py +1 -3
  415. ccxt/test/tests_init.py +4 -3
  416. ccxt/test/tests_sync.py +261 -57
  417. ccxt/tetherland.py +7 -7
  418. ccxt/timex.py +210 -51
  419. ccxt/tokocrypto.py +167 -47
  420. ccxt/tradeogre.py +266 -31
  421. ccxt/twox.py +7 -7
  422. ccxt/ubitex.py +9 -9
  423. ccxt/upbit.py +568 -165
  424. ccxt/vertex.py +160 -32
  425. ccxt/wallex.py +9 -9
  426. ccxt/wavesexchange.py +165 -30
  427. ccxt/whitebit.py +975 -127
  428. ccxt/woo.py +1917 -1016
  429. ccxt/woofipro.py +432 -141
  430. ccxt/xt.py +649 -193
  431. ccxt/yobit.py +194 -70
  432. ccxt/zaif.py +91 -15
  433. ccxt/zonda.py +151 -36
  434. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/METADATA +225 -73
  435. ccxt_ir-4.5.0.dist-info/RECORD +743 -0
  436. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/WHEEL +1 -1
  437. ccxt/__test__.py +0 -7
  438. ccxt/abstract/ace.py +0 -15
  439. ccxt/abstract/bitbay.py +0 -53
  440. ccxt/abstract/bitcoincom.py +0 -115
  441. ccxt/abstract/bitfinex2.py +0 -139
  442. ccxt/abstract/bitpanda.py +0 -35
  443. ccxt/abstract/bl3p.py +0 -19
  444. ccxt/abstract/coinlist.py +0 -54
  445. ccxt/abstract/currencycom.py +0 -68
  446. ccxt/abstract/hitbtc3.py +0 -115
  447. ccxt/abstract/idex.py +0 -26
  448. ccxt/abstract/kuna.py +0 -182
  449. ccxt/abstract/lykke.py +0 -29
  450. ccxt/abstract/poloniexfutures.py +0 -48
  451. ccxt/abstract/wazirx.py +0 -30
  452. ccxt/ace.py +0 -1012
  453. ccxt/async_support/ace.py +0 -1012
  454. ccxt/async_support/base/ws/aiohttp_client.py +0 -125
  455. ccxt/async_support/base/ws/fast_client.py +0 -96
  456. ccxt/async_support/bitbay.py +0 -17
  457. ccxt/async_support/bitcoincom.py +0 -17
  458. ccxt/async_support/bitfinex2.py +0 -3552
  459. ccxt/async_support/bitpanda.py +0 -16
  460. ccxt/async_support/bl3p.py +0 -485
  461. ccxt/async_support/coinlist.py +0 -2243
  462. ccxt/async_support/currencycom.py +0 -1950
  463. ccxt/async_support/hitbtc3.py +0 -16
  464. ccxt/async_support/idex.py +0 -1766
  465. ccxt/async_support/kuna.py +0 -1841
  466. ccxt/async_support/lykke.py +0 -1270
  467. ccxt/async_support/poloniexfutures.py +0 -1717
  468. ccxt/async_support/wazirx.py +0 -1224
  469. ccxt/bitbay.py +0 -17
  470. ccxt/bitcoincom.py +0 -17
  471. ccxt/bitfinex2.py +0 -3552
  472. ccxt/bitpanda.py +0 -16
  473. ccxt/bl3p.py +0 -485
  474. ccxt/coinlist.py +0 -2243
  475. ccxt/currencycom.py +0 -1950
  476. ccxt/hitbtc3.py +0 -16
  477. ccxt/idex.py +0 -1766
  478. ccxt/kuna.py +0 -1841
  479. ccxt/lykke.py +0 -1270
  480. ccxt/poloniexfutures.py +0 -1717
  481. ccxt/pro/bitcoincom.py +0 -34
  482. ccxt/pro/bitfinex2.py +0 -1083
  483. ccxt/pro/bitpanda.py +0 -15
  484. ccxt/pro/currencycom.py +0 -536
  485. ccxt/pro/idex.py +0 -672
  486. ccxt/pro/poloniexfutures.py +0 -990
  487. ccxt/pro/wazirx.py +0 -749
  488. ccxt/test/base/__init__.py +0 -29
  489. ccxt/test/base/test_account.py +0 -26
  490. ccxt/test/base/test_balance.py +0 -56
  491. ccxt/test/base/test_borrow_interest.py +0 -35
  492. ccxt/test/base/test_borrow_rate.py +0 -32
  493. ccxt/test/base/test_calculate_fee.py +0 -51
  494. ccxt/test/base/test_crypto.py +0 -127
  495. ccxt/test/base/test_currency.py +0 -76
  496. ccxt/test/base/test_datetime.py +0 -109
  497. ccxt/test/base/test_decimal_to_precision.py +0 -392
  498. ccxt/test/base/test_deep_extend.py +0 -68
  499. ccxt/test/base/test_deposit_withdrawal.py +0 -50
  500. ccxt/test/base/test_exchange_datetime_functions.py +0 -76
  501. ccxt/test/base/test_funding_rate_history.py +0 -29
  502. ccxt/test/base/test_last_price.py +0 -31
  503. ccxt/test/base/test_ledger_entry.py +0 -45
  504. ccxt/test/base/test_ledger_item.py +0 -48
  505. ccxt/test/base/test_leverage_tier.py +0 -33
  506. ccxt/test/base/test_liquidation.py +0 -50
  507. ccxt/test/base/test_margin_mode.py +0 -24
  508. ccxt/test/base/test_margin_modification.py +0 -35
  509. ccxt/test/base/test_market.py +0 -193
  510. ccxt/test/base/test_number.py +0 -411
  511. ccxt/test/base/test_ohlcv.py +0 -33
  512. ccxt/test/base/test_open_interest.py +0 -32
  513. ccxt/test/base/test_order.py +0 -64
  514. ccxt/test/base/test_order_book.py +0 -69
  515. ccxt/test/base/test_position.py +0 -60
  516. ccxt/test/base/test_shared_methods.py +0 -353
  517. ccxt/test/base/test_status.py +0 -24
  518. ccxt/test/base/test_throttle.py +0 -126
  519. ccxt/test/base/test_ticker.py +0 -92
  520. ccxt/test/base/test_trade.py +0 -47
  521. ccxt/test/base/test_trading_fee.py +0 -26
  522. ccxt/test/base/test_transaction.py +0 -39
  523. ccxt/test/test_async.py +0 -1649
  524. ccxt/test/test_sync.py +0 -1648
  525. ccxt/wazirx.py +0 -1224
  526. ccxt_ir-4.3.46.0.3.dist-info/RECORD +0 -773
  527. /ccxt/abstract/{huobijp.py → bittrade.py} +0 -0
  528. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info/licenses}/LICENSE.txt +0 -0
  529. {ccxt_ir-4.3.46.0.3.dist-info → ccxt_ir-4.5.0.dist-info}/top_level.txt +0 -0
ccxt/okcoin.py CHANGED
@@ -6,7 +6,7 @@
6
6
  from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.okcoin import ImplicitAPI
8
8
  import hashlib
9
- from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
9
+ from ccxt.base.types import Any, Balances, Currencies, Currency, DepositAddress, Int, LedgerEntry, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
12
  from ccxt.base.errors import AuthenticationError
@@ -20,7 +20,6 @@ from ccxt.base.errors import InsufficientFunds
20
20
  from ccxt.base.errors import InvalidAddress
21
21
  from ccxt.base.errors import InvalidOrder
22
22
  from ccxt.base.errors import OrderNotFound
23
- from ccxt.base.errors import CancelPending
24
23
  from ccxt.base.errors import NotSupported
25
24
  from ccxt.base.errors import NetworkError
26
25
  from ccxt.base.errors import RateLimitExceeded
@@ -28,13 +27,14 @@ from ccxt.base.errors import ExchangeNotAvailable
28
27
  from ccxt.base.errors import OnMaintenance
29
28
  from ccxt.base.errors import InvalidNonce
30
29
  from ccxt.base.errors import RequestTimeout
30
+ from ccxt.base.errors import CancelPending
31
31
  from ccxt.base.decimal_to_precision import TICK_SIZE
32
32
  from ccxt.base.precise import Precise
33
33
 
34
34
 
35
35
  class okcoin(Exchange, ImplicitAPI):
36
36
 
37
- def describe(self):
37
+ def describe(self) -> Any:
38
38
  return self.deep_extend(super(okcoin, self).describe(), {
39
39
  'id': 'okcoin',
40
40
  'name': 'OKCoin',
@@ -56,6 +56,12 @@ class okcoin(Exchange, ImplicitAPI):
56
56
  'createMarketOrderWithCost': False,
57
57
  'createMarketSellOrderWithCost': False,
58
58
  'createOrder': True,
59
+ 'createPostOnlyOrder': True,
60
+ 'createReduceOnlyOrder': True,
61
+ 'createStopLimitOrder': True,
62
+ 'createStopMarketOrder': True,
63
+ 'createStopOrder': True,
64
+ 'createTriggerOrder': True,
59
65
  'fetchBalance': True,
60
66
  'fetchBorrowInterest': False,
61
67
  'fetchBorrowRate': False,
@@ -66,10 +72,13 @@ class okcoin(Exchange, ImplicitAPI):
66
72
  'fetchClosedOrders': True,
67
73
  'fetchCurrencies': True, # see below
68
74
  'fetchDepositAddress': True,
75
+ 'fetchDepositAddresses': False,
76
+ 'fetchDepositAddressesByNetwork': False,
69
77
  'fetchDeposits': True,
70
78
  'fetchFundingHistory': False,
71
79
  'fetchFundingRate': False,
72
80
  'fetchFundingRateHistory': False,
81
+ 'fetchFundingRates': False,
73
82
  'fetchLedger': True,
74
83
  'fetchMarkets': True,
75
84
  'fetchMyTrades': True,
@@ -217,6 +226,87 @@ class okcoin(Exchange, ImplicitAPI):
217
226
  },
218
227
  },
219
228
  },
229
+ 'features': {
230
+ 'spot': {
231
+ 'sandbox': False,
232
+ 'createOrder': {
233
+ 'marginMode': True,
234
+ 'triggerPrice': True,
235
+ 'triggerDirection': True, # todo
236
+ 'triggerPriceType': {
237
+ 'last': True,
238
+ 'mark': False,
239
+ 'index': False,
240
+ },
241
+ 'stopLossPrice': True, # todo revise trigger
242
+ 'takeProfitPrice': True, # todo revise trigger
243
+ 'attachedStopLossTakeProfit': {
244
+ 'triggerPriceType': {
245
+ 'last': True,
246
+ 'mark': False,
247
+ 'index': False,
248
+ },
249
+ 'price': True,
250
+ },
251
+ 'timeInForce': {
252
+ 'IOC': True,
253
+ 'FOK': True,
254
+ 'PO': True,
255
+ 'GTD': False,
256
+ },
257
+ 'hedged': False,
258
+ 'trailing': True, # todo
259
+ 'leverage': False,
260
+ 'marketBuyByCost': True,
261
+ 'marketBuyRequiresPrice': True,
262
+ 'selfTradePrevention': False,
263
+ 'iceberg': True, # todo
264
+ },
265
+ 'createOrders': None, # todo
266
+ 'fetchMyTrades': {
267
+ 'marginMode': False,
268
+ 'limit': 100,
269
+ 'daysBack': 90,
270
+ 'untilDays': 90, # todo
271
+ 'symbolRequired': False,
272
+ },
273
+ 'fetchOrder': {
274
+ 'marginMode': False,
275
+ 'trigger': True,
276
+ 'trailing': True, # todo
277
+ 'symbolRequired': True,
278
+ },
279
+ 'fetchOpenOrders': {
280
+ 'marginMode': False,
281
+ 'limit': 100,
282
+ 'trigger': True,
283
+ 'trailing': True,
284
+ 'symbolRequired': False,
285
+ },
286
+ 'fetchOrders': None,
287
+ 'fetchClosedOrders': {
288
+ 'marginMode': False,
289
+ 'limit': 100,
290
+ 'daysBack': 90, # todo
291
+ 'daysBackCanceled': 1 / 12, # todo: possible more with history endpoint
292
+ 'untilDays': 90, # todo
293
+ 'trigger': True,
294
+ 'trailing': True,
295
+ 'symbolRequired': False,
296
+ },
297
+ 'fetchOHLCV': {
298
+ 'limit': 100, # 300 is only possible for 'recent' 1440 candles, which does not make much sense
299
+ },
300
+ },
301
+ 'swap': {
302
+ 'linear': None,
303
+ 'inverse': None,
304
+ },
305
+ 'future': {
306
+ 'linear': None,
307
+ 'inverse': None,
308
+ },
309
+ },
220
310
  'fees': {
221
311
  'trading': {
222
312
  'taker': 0.002,
@@ -598,6 +688,9 @@ class okcoin(Exchange, ImplicitAPI):
598
688
  'defaultNetwork': 'ERC20',
599
689
  'networks': {
600
690
  'ERC20': 'Ethereum',
691
+ 'BTC': 'Bitcoin',
692
+ 'OMNI': 'Omni',
693
+ 'TRC20': 'TRON',
601
694
  },
602
695
  },
603
696
  'commonCurrencies': {
@@ -614,7 +707,7 @@ class okcoin(Exchange, ImplicitAPI):
614
707
  },
615
708
  })
616
709
 
617
- def fetch_time(self, params={}):
710
+ def fetch_time(self, params={}) -> Int:
618
711
  """
619
712
  fetches the current integer timestamp in milliseconds from the exchange server
620
713
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -622,16 +715,26 @@ class okcoin(Exchange, ImplicitAPI):
622
715
  """
623
716
  response = self.publicGetPublicTime(params)
624
717
  #
625
- # {
626
- # "iso": "2015-01-07T23:47:25.201Z",
627
- # "epoch": 1420674445.201
628
- # }
718
+ # {
719
+ # "code": "0",
720
+ # "data":
721
+ # [
722
+ # {
723
+ # "ts": "1737379360033"
724
+ # }
725
+ # ],
726
+ # "msg": ""
727
+ # }
629
728
  #
630
- return self.parse8601(self.safe_string(response, 'iso'))
729
+ data = self.safe_list(response, 'data')
730
+ timestamp = self.safe_dict(data, 0)
731
+ return self.safe_integer(timestamp, 'ts')
631
732
 
632
733
  def fetch_markets(self, params={}) -> List[Market]:
633
734
  """
634
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-public-data-get-instruments
735
+
736
+ https://www.okcoin.com/docs-v5/en/#rest-api-public-data-get-instruments
737
+
635
738
  retrieves data on all markets for okcoin
636
739
  :param dict [params]: extra parameters specific to the exchange API endpoint
637
740
  :returns dict[]: an array of objects representing market data
@@ -725,14 +828,6 @@ class okcoin(Exchange, ImplicitAPI):
725
828
  'info': market,
726
829
  })
727
830
 
728
- def safe_network(self, networkId):
729
- networksById: dict = {
730
- 'Bitcoin': 'BTC',
731
- 'Omni': 'OMNI',
732
- 'TRON': 'TRC20',
733
- }
734
- return self.safe_string(networksById, networkId, networkId)
735
-
736
831
  def fetch_currencies(self, params={}) -> Currencies:
737
832
  """
738
833
  fetches all available currencies on an exchange
@@ -745,47 +840,30 @@ class okcoin(Exchange, ImplicitAPI):
745
840
  return None
746
841
  else:
747
842
  response = self.privateGetAssetCurrencies(params)
748
- data = self.safe_value(response, 'data', [])
843
+ data = self.safe_list(response, 'data', [])
749
844
  result: dict = {}
750
845
  dataByCurrencyId = self.group_by(data, 'ccy')
751
846
  currencyIds = list(dataByCurrencyId.keys())
752
847
  for i in range(0, len(currencyIds)):
753
848
  currencyId = currencyIds[i]
754
- currency = self.safe_currency(currencyId)
755
- code = currency['code']
849
+ code = self.safe_currency_code(currencyId)
756
850
  chains = dataByCurrencyId[currencyId]
757
851
  networks: dict = {}
758
- currencyActive = False
759
- depositEnabled = False
760
- withdrawEnabled = False
761
- maxPrecision = None
762
852
  for j in range(0, len(chains)):
763
853
  chain = chains[j]
764
- canDeposit = self.safe_value(chain, 'canDep')
765
- depositEnabled = canDeposit if (canDeposit) else depositEnabled
766
- canWithdraw = self.safe_value(chain, 'canWd')
767
- withdrawEnabled = canWithdraw if (canWithdraw) else withdrawEnabled
768
- canInternal = self.safe_value(chain, 'canInternal')
769
- active = True if (canDeposit and canWithdraw and canInternal) else False
770
- currencyActive = active if (active) else currencyActive
771
854
  networkId = self.safe_string(chain, 'chain')
772
855
  if (networkId is not None) and (networkId.find('-') >= 0):
773
856
  parts = networkId.split('-')
774
857
  chainPart = self.safe_string(parts, 1, networkId)
775
- networkCode = self.safe_network(chainPart)
776
- precision = self.parse_precision(self.safe_string(chain, 'wdTickSz'))
777
- if maxPrecision is None:
778
- maxPrecision = precision
779
- else:
780
- maxPrecision = Precise.string_min(maxPrecision, precision)
858
+ networkCode = self.network_id_to_code(chainPart)
781
859
  networks[networkCode] = {
782
860
  'id': networkId,
783
861
  'network': networkCode,
784
- 'active': active,
785
- 'deposit': canDeposit,
786
- 'withdraw': canWithdraw,
862
+ 'active': None,
863
+ 'deposit': self.safe_bool(chain, 'canDep'),
864
+ 'withdraw': self.safe_bool(chain, 'canWd'),
787
865
  'fee': self.safe_number(chain, 'minFee'),
788
- 'precision': self.parse_number(precision),
866
+ 'precision': self.parse_number(self.parse_precision(self.safe_string(chain, 'wdTickSz'))),
789
867
  'limits': {
790
868
  'withdraw': {
791
869
  'min': self.safe_number(chain, 'minWd'),
@@ -795,16 +873,16 @@ class okcoin(Exchange, ImplicitAPI):
795
873
  'info': chain,
796
874
  }
797
875
  firstChain = self.safe_value(chains, 0)
798
- result[code] = {
876
+ result[code] = self.safe_currency_structure({
799
877
  'info': chains,
800
878
  'code': code,
801
879
  'id': currencyId,
802
880
  'name': self.safe_string(firstChain, 'name'),
803
- 'active': currencyActive,
804
- 'deposit': depositEnabled,
805
- 'withdraw': withdrawEnabled,
881
+ 'active': None,
882
+ 'deposit': None,
883
+ 'withdraw': None,
806
884
  'fee': None,
807
- 'precision': self.parse_number(maxPrecision),
885
+ 'precision': None,
808
886
  'limits': {
809
887
  'amount': {
810
888
  'min': None,
@@ -812,12 +890,14 @@ class okcoin(Exchange, ImplicitAPI):
812
890
  },
813
891
  },
814
892
  'networks': networks,
815
- }
893
+ })
816
894
  return result
817
895
 
818
896
  def fetch_order_book(self, symbol: str, limit: Int = None, params={}) -> OrderBook:
819
897
  """
820
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-order-book
898
+
899
+ https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-order-book
900
+
821
901
  fetches information on open orders with bid(buy) and ask(sell) prices, volumes and other data
822
902
  :param str symbol: unified symbol of the market to fetch the order book for
823
903
  :param int [limit]: the maximum amount of order book entries to return
@@ -916,7 +996,9 @@ class okcoin(Exchange, ImplicitAPI):
916
996
 
917
997
  def fetch_ticker(self, symbol: str, params={}) -> Ticker:
918
998
  """
919
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-ticker
999
+
1000
+ https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-ticker
1001
+
920
1002
  fetches a price ticker, a statistical calculation with the information calculated over the past 24 hours for a specific market
921
1003
  :param str symbol: unified symbol of the market to fetch the ticker for
922
1004
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -960,7 +1042,9 @@ class okcoin(Exchange, ImplicitAPI):
960
1042
 
961
1043
  def fetch_tickers(self, symbols: Strings = None, params={}) -> Tickers:
962
1044
  """
963
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-tickers
1045
+
1046
+ https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-tickers
1047
+
964
1048
  fetches price tickers for multiple markets, statistical information calculated over the past 24 hours for each market
965
1049
  :param str[]|None symbols: unified symbols of the markets to fetch the ticker for, all market tickers are returned if not assigned
966
1050
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1049,8 +1133,10 @@ class okcoin(Exchange, ImplicitAPI):
1049
1133
 
1050
1134
  def fetch_trades(self, symbol: str, since: Int = None, limit: Int = None, params={}) -> List[Trade]:
1051
1135
  """
1052
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades
1053
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades-history
1136
+
1137
+ https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades
1138
+ https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-trades-history
1139
+
1054
1140
  get the list of most recent trades for a particular symbol
1055
1141
  :param str symbol: unified symbol of the market to fetch trades for
1056
1142
  :param int [since]: timestamp in ms of the earliest trade to fetch
@@ -1100,8 +1186,10 @@ class okcoin(Exchange, ImplicitAPI):
1100
1186
 
1101
1187
  def fetch_ohlcv(self, symbol: str, timeframe='1m', since: Int = None, limit: Int = None, params={}) -> List[list]:
1102
1188
  """
1103
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks
1104
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks-history
1189
+
1190
+ https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks
1191
+ https://www.okcoin.com/docs-v5/en/#rest-api-market-data-get-candlesticks-history
1192
+
1105
1193
  fetches historical candlestick data containing the open, high, low, and close price, and the volume of a market
1106
1194
  :param str symbol: unified symbol of the market to fetch OHLCV data for
1107
1195
  :param str timeframe: the length of time each candle represents
@@ -1274,7 +1362,9 @@ class okcoin(Exchange, ImplicitAPI):
1274
1362
  def create_market_buy_order_with_cost(self, symbol: str, cost: float, params={}):
1275
1363
  """
1276
1364
  create a market buy order by providing the symbol and cost
1277
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
1365
+
1366
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
1367
+
1278
1368
  :param str symbol: unified symbol of the market to create an order in
1279
1369
  :param float cost: how much you want to trade in units of the quote currency
1280
1370
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1290,16 +1380,18 @@ class okcoin(Exchange, ImplicitAPI):
1290
1380
 
1291
1381
  def create_order(self, symbol: str, type: OrderType, side: OrderSide, amount: float, price: Num = None, params={}):
1292
1382
  """
1293
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
1294
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-algo-order
1295
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-multiple-orders
1296
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1383
+
1384
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-order
1385
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-algo-order
1386
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-place-multiple-orders
1387
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1388
+
1297
1389
  create a trade order
1298
1390
  :param str symbol: unified symbol of the market to create an order in
1299
1391
  :param str type: 'market' or 'limit'
1300
1392
  :param str side: 'buy' or 'sell'
1301
1393
  :param float amount: how much of currency you want to trade in units of base currency
1302
- :param float price: the price at which the order is to be fullfilled, in units of the quote currency, ignored in market orders
1394
+ :param float price: the price at which the order is to be fulfilled, in units of the quote currency, ignored in market orders
1303
1395
  :param dict [params]: extra parameters specific to the exchange API endpoint
1304
1396
  :param bool [params.reduceOnly]: MARGIN orders only, or swap/future orders in net mode
1305
1397
  :param bool [params.postOnly]: True to place a post only order
@@ -1454,7 +1546,7 @@ class okcoin(Exchange, ImplicitAPI):
1454
1546
  if stopLossDefined:
1455
1547
  stopLossTriggerPrice = self.safe_value_n(stopLoss, ['triggerPrice', 'stopPrice', 'slTriggerPx'])
1456
1548
  if stopLossTriggerPrice is None:
1457
- raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"], or params["stopLoss"]["stopPrice"], or params["stopLoss"]["slTriggerPx"] for a stop loss order')
1549
+ raise InvalidOrder(self.id + ' createOrder() requires a trigger price in params["stopLoss"]["triggerPrice"] for a stop loss order')
1458
1550
  request['slTriggerPx'] = self.price_to_precision(symbol, stopLossTriggerPrice)
1459
1551
  stopLossLimitPrice = self.safe_value_n(stopLoss, ['price', 'stopLossPrice', 'slOrdPx'])
1460
1552
  stopLossOrderType = self.safe_string(stopLoss, 'type')
@@ -1465,7 +1557,7 @@ class okcoin(Exchange, ImplicitAPI):
1465
1557
  raise InvalidOrder(self.id + ' createOrder() params["stopLoss"]["type"] must be either "limit" or "market"')
1466
1558
  elif stopLossLimitOrderType:
1467
1559
  if stopLossLimitPrice is None:
1468
- raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] or params["stopLoss"]["slOrdPx"] for a stop loss limit order')
1560
+ raise InvalidOrder(self.id + ' createOrder() requires a limit price in params["stopLoss"]["price"] for a stop loss limit order')
1469
1561
  else:
1470
1562
  request['slOrdPx'] = self.price_to_precision(symbol, stopLossLimitPrice)
1471
1563
  elif stopLossOrderType == 'market':
@@ -1538,25 +1630,27 @@ class okcoin(Exchange, ImplicitAPI):
1538
1630
 
1539
1631
  def cancel_order(self, id: str, symbol: Str = None, params={}):
1540
1632
  """
1541
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-order
1542
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
1543
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1633
+
1634
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-order
1635
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
1636
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1637
+
1544
1638
  cancels an open order
1545
1639
  :param str id: order id
1546
1640
  :param str symbol: unified symbol of the market the order was made in
1547
1641
  :param dict [params]: extra parameters specific to the exchange API endpoint
1548
- :param bool [params.stop]: True if cancel trigger or conditional orders
1642
+ :param bool [params.trigger]: True if cancel trigger or conditional orders
1549
1643
  :param bool [params.advanced]: True if canceling advanced orders only
1550
1644
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
1551
1645
  """
1552
1646
  if symbol is None:
1553
1647
  raise ArgumentsRequired(self.id + ' cancelOrder() requires a symbol argument')
1554
1648
  self.load_markets()
1555
- stop = self.safe_value_2(params, 'stop', 'trigger')
1649
+ trigger = self.safe_value_2(params, 'stop', 'trigger')
1556
1650
  advanced = self.safe_value(params, 'advanced')
1557
- if stop or advanced:
1651
+ if trigger or advanced:
1558
1652
  orderInner = self.cancel_orders([id], symbol, params)
1559
- return self.safe_value(orderInner, 0)
1653
+ return self.safe_dict(orderInner, 0)
1560
1654
  market = self.market(symbol)
1561
1655
  request: dict = {
1562
1656
  'instId': market['id'],
@@ -1577,7 +1671,7 @@ class okcoin(Exchange, ImplicitAPI):
1577
1671
 
1578
1672
  def parse_ids(self, ids):
1579
1673
  """
1580
- * @ignore
1674
+ @ignore
1581
1675
  :param string[]|str ids: order ids
1582
1676
  :returns str[]: list of order ids
1583
1677
  """
@@ -1589,9 +1683,11 @@ class okcoin(Exchange, ImplicitAPI):
1589
1683
  def cancel_orders(self, ids, symbol: Str = None, params={}):
1590
1684
  """
1591
1685
  cancel multiple orders
1592
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-multiple-orders
1593
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
1594
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1686
+
1687
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-multiple-orders
1688
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-algo-order
1689
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-cancel-advance-algo-order
1690
+
1595
1691
  :param str[] ids: order ids
1596
1692
  :param str symbol: unified market symbol
1597
1693
  :param dict [params]: extra parameters specific to the exchange API endpoint
@@ -1600,7 +1696,7 @@ class okcoin(Exchange, ImplicitAPI):
1600
1696
  if symbol is None:
1601
1697
  raise ArgumentsRequired(self.id + ' cancelOrders() requires a symbol argument')
1602
1698
  self.load_markets()
1603
- stop = self.safe_value_2(params, 'stop', 'trigger')
1699
+ trigger = self.safe_value_2(params, 'stop', 'trigger')
1604
1700
  advanced = self.safe_value(params, 'advanced')
1605
1701
  params = self.omit(params, ['stop', 'trigger', 'advanced'])
1606
1702
  market = self.market(symbol)
@@ -1616,7 +1712,7 @@ class okcoin(Exchange, ImplicitAPI):
1616
1712
  'instId': market['id'],
1617
1713
  })
1618
1714
  for i in range(0, len(ids)):
1619
- if stop or advanced:
1715
+ if trigger or advanced:
1620
1716
  request.append({
1621
1717
  'algoId': ids[i],
1622
1718
  'instId': market['id'],
@@ -1633,7 +1729,7 @@ class okcoin(Exchange, ImplicitAPI):
1633
1729
  'clOrdId': clientOrderIds[i],
1634
1730
  })
1635
1731
  response = None
1636
- if stop:
1732
+ if trigger:
1637
1733
  response = self.privatePostTradeCancelAlgos(request)
1638
1734
  elif advanced:
1639
1735
  response = self.privatePostTradeCancelAdvanceAlgos(request)
@@ -1825,7 +1921,6 @@ class okcoin(Exchange, ImplicitAPI):
1825
1921
  clientOrderId = None # fix empty clientOrderId string
1826
1922
  stopLossPrice = self.safe_number_2(order, 'slTriggerPx', 'slOrdPx')
1827
1923
  takeProfitPrice = self.safe_number_2(order, 'tpTriggerPx', 'tpOrdPx')
1828
- stopPrice = self.safe_number_n(order, ['triggerPx', 'moveTriggerPx'])
1829
1924
  reduceOnlyRaw = self.safe_string(order, 'reduceOnly')
1830
1925
  reduceOnly = False
1831
1926
  if reduceOnly is not None:
@@ -1846,8 +1941,7 @@ class okcoin(Exchange, ImplicitAPI):
1846
1941
  'price': price,
1847
1942
  'stopLossPrice': stopLossPrice,
1848
1943
  'takeProfitPrice': takeProfitPrice,
1849
- 'stopPrice': stopPrice,
1850
- 'triggerPrice': stopPrice,
1944
+ 'triggerPrice': self.safe_number_n(order, ['triggerPx', 'moveTriggerPx']),
1851
1945
  'average': average,
1852
1946
  'cost': cost,
1853
1947
  'amount': amount,
@@ -1861,9 +1955,12 @@ class okcoin(Exchange, ImplicitAPI):
1861
1955
 
1862
1956
  def fetch_order(self, id: str, symbol: Str = None, params={}):
1863
1957
  """
1864
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-details
1865
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
1958
+
1959
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-details
1960
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
1961
+
1866
1962
  fetches information on an order made by the user
1963
+ :param str id: order id
1867
1964
  :param str symbol: unified symbol of the market the order was made in
1868
1965
  :param dict [params]: extra parameters specific to the exchange API endpoint
1869
1966
  :returns dict: An `order structure <https://docs.ccxt.com/#/?id=order-structure>`
@@ -1878,8 +1975,8 @@ class okcoin(Exchange, ImplicitAPI):
1878
1975
  # 'ordId': id,
1879
1976
  }
1880
1977
  clientOrderId = self.safe_string_2(params, 'clOrdId', 'clientOrderId')
1881
- stop = self.safe_value_2(params, 'stop', 'trigger')
1882
- if stop:
1978
+ trigger = self.safe_value_2(params, 'stop', 'trigger')
1979
+ if trigger:
1883
1980
  if clientOrderId is not None:
1884
1981
  request['algoClOrdId'] = clientOrderId
1885
1982
  else:
@@ -1891,7 +1988,7 @@ class okcoin(Exchange, ImplicitAPI):
1891
1988
  request['ordId'] = id
1892
1989
  query = self.omit(params, ['clientOrderId', 'stop', 'trigger'])
1893
1990
  response = None
1894
- if stop:
1991
+ if trigger:
1895
1992
  response = self.privateGetTradeOrderAlgo(self.extend(request, query))
1896
1993
  else:
1897
1994
  response = self.privateGetTradeOrder(self.extend(request, query))
@@ -1901,14 +1998,16 @@ class okcoin(Exchange, ImplicitAPI):
1901
1998
 
1902
1999
  def fetch_open_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1903
2000
  """
1904
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-list
1905
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
2001
+
2002
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-list
2003
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-list
2004
+
1906
2005
  fetch all unfilled currently open orders
1907
2006
  :param str symbol: unified market symbol
1908
2007
  :param int [since]: the earliest time in ms to fetch open orders for
1909
2008
  :param int [limit]: the maximum number of open orders structures to retrieve
1910
2009
  :param dict [params]: extra parameters specific to the exchange API endpoint
1911
- :param bool [params.stop]: True if fetching trigger or conditional orders
2010
+ :param bool [params.trigger]: True if fetching trigger or conditional orders
1912
2011
  :param str [params.ordType]: "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
1913
2012
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1914
2013
  """
@@ -1928,12 +2027,12 @@ class okcoin(Exchange, ImplicitAPI):
1928
2027
  if limit is not None:
1929
2028
  request['limit'] = limit # default 100, max 100
1930
2029
  ordType = self.safe_string(params, 'ordType')
1931
- stop = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
1932
- if stop and (ordType is None):
2030
+ trigger = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
2031
+ if trigger and (ordType is None):
1933
2032
  request['ordType'] = 'trigger' # default to trigger
1934
2033
  params = self.omit(params, ['stop'])
1935
2034
  response = None
1936
- if stop:
2035
+ if trigger:
1937
2036
  response = self.privateGetTradeOrdersAlgoPending(self.extend(request, params))
1938
2037
  else:
1939
2038
  response = self.privateGetTradeOrdersPending(self.extend(request, params))
@@ -1942,15 +2041,17 @@ class okcoin(Exchange, ImplicitAPI):
1942
2041
 
1943
2042
  def fetch_closed_orders(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Order]:
1944
2043
  """
1945
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-history
1946
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-3-months
1947
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-7-days
2044
+
2045
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-algo-order-history
2046
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-3-months
2047
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-order-history-last-7-days
2048
+
1948
2049
  fetches information on multiple closed orders made by the user
1949
2050
  :param str symbol: unified market symbol of the market orders were made in
1950
2051
  :param int [since]: the earliest time in ms to fetch orders for
1951
2052
  :param int [limit]: the maximum number of order structures to retrieve
1952
2053
  :param dict [params]: extra parameters specific to the exchange API endpoint
1953
- :param bool [params.stop]: True if fetching trigger or conditional orders
2054
+ :param bool [params.trigger]: True if fetching trigger or conditional orders
1954
2055
  :param str [params.ordType]: "conditional", "oco", "trigger", "move_order_stop", "iceberg", or "twap"
1955
2056
  :returns Order[]: a list of `order structures <https://docs.ccxt.com/#/?id=order-structure>`
1956
2057
  """
@@ -1963,12 +2064,12 @@ class okcoin(Exchange, ImplicitAPI):
1963
2064
  market = self.market(symbol)
1964
2065
  request['instId'] = market['id']
1965
2066
  ordType = self.safe_string(params, 'ordType')
1966
- stop = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
1967
- if stop and (ordType is None):
2067
+ trigger = self.safe_value(params, 'stop') or (self.safe_string(params, 'ordType') is not None)
2068
+ if trigger and (ordType is None):
1968
2069
  request['ordType'] = 'trigger' # default to trigger
1969
2070
  params = self.omit(params, ['stop'])
1970
2071
  response = None
1971
- if stop:
2072
+ if trigger:
1972
2073
  response = self.privateGetTradeOrdersAlgoHistory(self.extend(request, params))
1973
2074
  else:
1974
2075
  method = None
@@ -2021,7 +2122,7 @@ class okcoin(Exchange, ImplicitAPI):
2021
2122
  data = self.safe_list(response, 'data', [])
2022
2123
  return self.parse_orders(data, market, since, limit)
2023
2124
 
2024
- def parse_deposit_address(self, depositAddress, currency: Currency = None):
2125
+ def parse_deposit_address(self, depositAddress, currency: Currency = None) -> DepositAddress:
2025
2126
  #
2026
2127
  # {
2027
2128
  # "addr": "okbtothemoon",
@@ -2104,17 +2205,19 @@ class okcoin(Exchange, ImplicitAPI):
2104
2205
  #
2105
2206
  self.check_address(address)
2106
2207
  return {
2208
+ 'info': depositAddress,
2107
2209
  'currency': code,
2210
+ 'network': network,
2108
2211
  'address': address,
2109
2212
  'tag': tag,
2110
- 'network': network,
2111
- 'info': depositAddress,
2112
2213
  }
2113
2214
 
2114
- def fetch_deposit_address(self, code: str, params={}):
2215
+ def fetch_deposit_address(self, code: str, params={}) -> DepositAddress:
2115
2216
  """
2116
2217
  fetch the deposit address for a currency associated with self account
2117
- :see: https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
2218
+
2219
+ https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
2220
+
2118
2221
  :param str code: unified currency code
2119
2222
  :param dict [params]: extra parameters specific to the exchange API endpoint
2120
2223
  :returns dict: an `address structure <https://docs.ccxt.com/#/?id=address-structure>`
@@ -2130,10 +2233,12 @@ class okcoin(Exchange, ImplicitAPI):
2130
2233
  raise InvalidAddress(self.id + ' fetchDepositAddress() cannot find ' + networkCode + ' deposit address for ' + code)
2131
2234
  return result
2132
2235
 
2133
- def fetch_deposit_addresses_by_network(self, code: str, params={}):
2236
+ def fetch_deposit_addresses_by_network(self, code: str, params={}) -> List[DepositAddress]:
2134
2237
  """
2135
2238
  fetch a dictionary of addresses for a currency, indexed by network
2136
- :see: https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
2239
+
2240
+ https://www.okx.com/docs-v5/en/#funding-account-rest-api-get-deposit-address
2241
+
2137
2242
  :param str code: unified currency code of the currency for the deposit address
2138
2243
  :param dict [params]: extra parameters specific to the exchange API endpoint
2139
2244
  :returns dict: a dictionary of `address structures <https://docs.ccxt.com/#/?id=address-structure>` indexed by the network
@@ -2172,7 +2277,9 @@ class okcoin(Exchange, ImplicitAPI):
2172
2277
 
2173
2278
  def transfer(self, code: str, amount: float, fromAccount: str, toAccount: str, params={}) -> TransferEntry:
2174
2279
  """
2175
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-funding-funds-transfer
2280
+
2281
+ https://www.okcoin.com/docs-v5/en/#rest-api-funding-funds-transfer
2282
+
2176
2283
  transfer currency internally between wallets on the same account
2177
2284
  :param str code: unified currency code
2178
2285
  :param float amount: amount to transfer
@@ -2309,9 +2416,11 @@ class okcoin(Exchange, ImplicitAPI):
2309
2416
  }
2310
2417
  return self.safe_string(statuses, status, status)
2311
2418
 
2312
- def withdraw(self, code: str, amount: float, address: str, tag=None, params={}):
2419
+ def withdraw(self, code: str, amount: float, address: str, tag: Str = None, params={}) -> Transaction:
2313
2420
  """
2314
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-funding-withdrawal
2421
+
2422
+ https://www.okcoin.com/docs-v5/en/#rest-api-funding-withdrawal
2423
+
2315
2424
  make a withdrawal
2316
2425
  :param str code: unified currency code
2317
2426
  :param float amount: the amount to withdraw
@@ -2365,7 +2474,9 @@ class okcoin(Exchange, ImplicitAPI):
2365
2474
 
2366
2475
  def fetch_deposits(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2367
2476
  """
2368
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-deposit-history
2477
+
2478
+ https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-deposit-history
2479
+
2369
2480
  fetch all deposits made to an account
2370
2481
  :param str code: unified currency code
2371
2482
  :param int [since]: the earliest time in ms to fetch deposits for
@@ -2434,7 +2545,9 @@ class okcoin(Exchange, ImplicitAPI):
2434
2545
 
2435
2546
  def fetch_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[Transaction]:
2436
2547
  """
2437
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-withdrawal-history
2548
+
2549
+ https://www.okcoin.com/docs-v5/en/#rest-api-funding-get-withdrawal-history
2550
+
2438
2551
  fetch all withdrawals made from an account
2439
2552
  :param str code: unified currency code
2440
2553
  :param int [since]: the earliest time in ms to fetch withdrawals for
@@ -2625,8 +2738,10 @@ class okcoin(Exchange, ImplicitAPI):
2625
2738
 
2626
2739
  def fetch_my_trades(self, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
2627
2740
  """
2628
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-days
2629
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-months
2741
+
2742
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-days
2743
+ https://www.okcoin.com/docs-v5/en/#rest-api-trade-get-transaction-details-last-3-months
2744
+
2630
2745
  fetch all trades made by the user
2631
2746
  :param str symbol: unified market symbol
2632
2747
  :param int [since]: the earliest time in ms to fetch trades for
@@ -2673,17 +2788,19 @@ class okcoin(Exchange, ImplicitAPI):
2673
2788
  }
2674
2789
  return self.fetch_my_trades(symbol, since, limit, self.extend(request, params))
2675
2790
 
2676
- def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
2791
+ def fetch_ledger(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> List[LedgerEntry]:
2677
2792
  """
2678
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-funding-asset-bills-details
2679
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days
2680
- :see: https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months
2681
- fetch the history of changes, actions done by the user or operations that altered balance of the user
2682
- :param str code: unified currency code, default is None
2793
+ fetch the history of changes, actions done by the user or operations that altered the balance of the user
2794
+
2795
+ https://www.okcoin.com/docs-v5/en/#rest-api-funding-asset-bills-details
2796
+ https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-7-days
2797
+ https://www.okcoin.com/docs-v5/en/#rest-api-account-get-bills-details-last-3-months
2798
+
2799
+ :param str [code]: unified currency code, default is None
2683
2800
  :param int [since]: timestamp in ms of the earliest ledger entry, default is None
2684
- :param int [limit]: max number of ledger entrys to return, default is None
2801
+ :param int [limit]: max number of ledger entries to return, default is None
2685
2802
  :param dict [params]: extra parameters specific to the exchange API endpoint
2686
- :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger-structure>`
2803
+ :returns dict: a `ledger structure <https://docs.ccxt.com/#/?id=ledger>`
2687
2804
  """
2688
2805
  self.load_markets()
2689
2806
  method = None
@@ -2781,7 +2898,7 @@ class okcoin(Exchange, ImplicitAPI):
2781
2898
  }
2782
2899
  return self.safe_string(types, type, type)
2783
2900
 
2784
- def parse_ledger_entry(self, item: dict, currency: Currency = None):
2901
+ def parse_ledger_entry(self, item: dict, currency: Currency = None) -> LedgerEntry:
2785
2902
  #
2786
2903
  # privateGetAccountBills, privateGetAccountBillsArchive
2787
2904
  #
@@ -2818,45 +2935,36 @@ class okcoin(Exchange, ImplicitAPI):
2818
2935
  # "ts": "1597026383085"
2819
2936
  # }
2820
2937
  #
2821
- id = self.safe_string(item, 'billId')
2822
- account = None
2823
- referenceId = self.safe_string(item, 'ordId')
2824
- referenceAccount = None
2825
- type = self.parse_ledger_entry_type(self.safe_string(item, 'type'))
2826
- code = self.safe_currency_code(self.safe_string(item, 'ccy'), currency)
2827
- amountString = self.safe_string(item, 'balChg')
2828
- amount = self.parse_number(amountString)
2938
+ currencyId = self.safe_string(item, 'ccy')
2939
+ code = self.safe_currency_code(currencyId, currency)
2940
+ currency = self.safe_currency(currencyId, currency)
2829
2941
  timestamp = self.safe_integer(item, 'ts')
2830
2942
  feeCostString = self.safe_string(item, 'fee')
2831
2943
  fee = None
2832
2944
  if feeCostString is not None:
2833
2945
  fee = {
2834
- 'cost': self.parse_number(Precise.string_neg(feeCostString)),
2946
+ 'cost': self.parse_to_numeric(Precise.string_neg(feeCostString)),
2835
2947
  'currency': code,
2836
2948
  }
2837
- before = None
2838
- afterString = self.safe_string(item, 'bal')
2839
- after = self.parse_number(afterString)
2840
- status = 'ok'
2841
2949
  marketId = self.safe_string(item, 'instId')
2842
2950
  symbol = self.safe_symbol(marketId, None, '-')
2843
- return {
2844
- 'id': id,
2951
+ return self.safe_ledger_entry({
2845
2952
  'info': item,
2953
+ 'id': self.safe_string(item, 'billId'),
2846
2954
  'timestamp': timestamp,
2847
2955
  'datetime': self.iso8601(timestamp),
2848
- 'account': account,
2849
- 'referenceId': referenceId,
2850
- 'referenceAccount': referenceAccount,
2851
- 'type': type,
2956
+ 'account': None,
2957
+ 'referenceId': self.safe_string(item, 'ordId'),
2958
+ 'referenceAccount': None,
2959
+ 'type': self.parse_ledger_entry_type(self.safe_string(item, 'type')),
2852
2960
  'currency': code,
2853
2961
  'symbol': symbol,
2854
- 'amount': amount,
2855
- 'before': before, # balance before
2856
- 'after': after, # balance after
2857
- 'status': status,
2962
+ 'amount': self.safe_number(item, 'balChg'),
2963
+ 'before': None, # balance before
2964
+ 'after': self.safe_number(item, 'bal'), # balance after
2965
+ 'status': 'ok',
2858
2966
  'fee': fee,
2859
- }
2967
+ }, currency)
2860
2968
 
2861
2969
  def sign(self, path, api='public', method='GET', params={}, headers=None, body=None):
2862
2970
  isArray = isinstance(params, list)