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
@@ -1,45 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_ledger_entry(exchange, skipped_properties, method, entry, requested_code, now):
18
- format = {
19
- 'info': {},
20
- 'id': 'x1234',
21
- 'currency': 'BTC',
22
- 'account': 'spot',
23
- 'referenceId': 'foo',
24
- 'referenceAccount': 'bar',
25
- 'status': 'ok',
26
- 'amount': exchange.parse_number('22'),
27
- 'before': exchange.parse_number('111'),
28
- 'after': exchange.parse_number('133'),
29
- 'fee': {},
30
- 'direction': 'in',
31
- 'timestamp': 1638230400000,
32
- 'datetime': '2021-11-30T00:00:00.000Z',
33
- 'type': 'deposit',
34
- }
35
- empty_allowed_for = ['referenceId', 'referenceAccount', 'id']
36
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
37
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry, now)
38
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['currency'], requested_code)
39
- #
40
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'direction', ['in', 'out'])
41
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'type', ['trade', 'transaction', 'margin', 'cashback', 'referral', 'transfer', 'fee'])
42
- # testSharedMethods.assertInArray (exchange, skippedProperties, method, entry, 'account', ['spot', 'swap', .. ]); # todo
43
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'amount', '0')
44
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'before', '0')
45
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'after', '0')
@@ -1,48 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
-
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
-
19
- def test_ledger_item(exchange, method, entry, requested_code, now):
20
- format = {
21
- 'info': {},
22
- 'id': 'x1234',
23
- 'currency': 'BTC',
24
- 'account': 'spot',
25
- 'referenceId': '',
26
- 'referenceAccount': '',
27
- 'status': 'ok',
28
- 'amount': exchange.parse_number('22'),
29
- 'before': exchange.parse_number('111'),
30
- 'after': exchange.parse_number('133'),
31
- 'fee': {},
32
- 'direction': 'in',
33
- 'timestamp': 1638230400000,
34
- 'datetime': '2021-11-30T00:00:00.000Z',
35
- 'type': 'deposit',
36
- }
37
- empty_not_allowed_for = ['id', 'currency', 'account', 'status', 'direction']
38
- test_shared_methods.assert_structure(exchange, method, entry, format, empty_not_allowed_for)
39
- test_shared_methods.assert_timestamp(exchange, method, entry, now)
40
- test_shared_methods.assert_currency_code(exchange, method, entry, entry['currency'], requested_code)
41
- #
42
- test_shared_methods.assert_in_array(exchange, method, entry, 'direction', ['in', 'out'])
43
- # testSharedMethods.assertInArray (exchange, method, entry, 'type', ['trade', 'transaction', 'margin', 'cashback', 'referral', 'transfer', 'fee', ]);
44
- # testSharedMethods.assertInArray (exchange, method, entry, 'account', ['spot', 'swap', .. ]);
45
- test_shared_methods.assert_greater_or_equal(exchange, method, entry, 'amount', '0')
46
- test_shared_methods.assert_greater_or_equal(exchange, method, entry, 'before', '0')
47
- test_shared_methods.assert_greater_or_equal(exchange, method, entry, 'after', '0')
48
- test_shared_methods.assert_fee(exchange, method, entry['fee'])
@@ -1,33 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_leverage_tier(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'tier': exchange.parse_number('1'),
20
- 'minNotional': exchange.parse_number('0'),
21
- 'maxNotional': exchange.parse_number('5000'),
22
- 'maintenanceMarginRate': exchange.parse_number('0.01'),
23
- 'maxLeverage': exchange.parse_number('25'),
24
- 'info': {},
25
- }
26
- empty_allowed_for = ['maintenanceMarginRate']
27
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
28
- #
29
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'tier', '0')
30
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'minNotional', '0')
31
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'maxNotional', '0')
32
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'maxLeverage', '1')
33
- test_shared_methods.assert_less_or_equal(exchange, skipped_properties, method, entry, 'maintenanceMarginRate', '1')
@@ -1,50 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.base.precise import Precise # noqa E402
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
- def test_liquidation(exchange, skipped_properties, method, entry, symbol):
19
- format = {
20
- 'info': {},
21
- 'symbol': 'ETH/BTC',
22
- 'contracts': exchange.parse_number('1.234'),
23
- 'contractSize': exchange.parse_number('1.234'),
24
- 'price': exchange.parse_number('1.234'),
25
- 'baseValue': exchange.parse_number('1.234'),
26
- 'quoteValue': exchange.parse_number('1.234'),
27
- 'timestamp': 1502962946216,
28
- 'datetime': '2017-09-01T00:00:00',
29
- }
30
- # todo: atm, many exchanges fail, so temporarily decrease stict mode
31
- empty_allowed_for = ['timestamp', 'datetime', 'quoteValue', 'baseValue', 'previousClose', 'price', 'contractSize', 'contracts']
32
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
33
- test_shared_methods.assert_timestamp_and_datetime(exchange, skipped_properties, method, entry)
34
- log_text = test_shared_methods.log_template(exchange, method, entry)
35
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'contracts', '0')
36
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'contractSize', '0')
37
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'price', '0')
38
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'baseValue', '0')
39
- test_shared_methods.assert_greater(exchange, skipped_properties, method, entry, 'quoteValue', '0')
40
- contracts = exchange.safe_string(entry, 'contracts')
41
- contract_size = exchange.safe_string(entry, 'contractSize')
42
- price = exchange.safe_string(entry, 'price')
43
- base_value = exchange.safe_string(entry, 'baseValue')
44
- if contracts and contract_size:
45
- assert Precise.string_eq(base_value, Precise.string_mul(contracts, contract_size)), 'baseValue == contracts * contractSize' + log_text
46
- if price:
47
- assert Precise.string_eq(base_value, Precise.string_mul(Precise.string_mul(contracts, contract_size), price)), 'quoteValue == contracts * contractSize * price' + log_text
48
- # if singular was called, then symbol needs to be asserted
49
- if method == 'watchLiquidations' or method == 'fetchLiquidations':
50
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, entry, 'symbol', symbol)
@@ -1,24 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_margin_mode(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'info': {},
20
- 'symbol': 'BTC/USDT:USDT',
21
- 'marginMode': 'cross',
22
- }
23
- empty_allowed_for = ['symbol']
24
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
@@ -1,35 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.test.base import test_shared_methods # noqa E402
16
-
17
- def test_margin_modification(exchange, skipped_properties, method, entry):
18
- format = {
19
- 'info': {},
20
- 'type': 'add',
21
- 'amount': exchange.parse_number('0.1'),
22
- 'total': exchange.parse_number('0.29934828'),
23
- 'code': 'USDT',
24
- 'symbol': 'ADA/USDT:USDT',
25
- 'status': 'ok',
26
- }
27
- empty_allowed_for = ['status', 'symbol', 'code', 'total', 'amount']
28
- test_shared_methods.assert_structure(exchange, skipped_properties, method, entry, format, empty_allowed_for)
29
- test_shared_methods.assert_currency_code(exchange, skipped_properties, method, entry, entry['code'])
30
- #
31
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'amount', '0')
32
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, entry, 'total', '0')
33
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'type', ['add', 'reduce', 'set'])
34
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, entry, 'status', ['ok', 'pending', 'canceled', 'failed'])
35
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, entry, 'symbol')
@@ -1,193 +0,0 @@
1
- import os
2
- import sys
3
-
4
- root = os.path.dirname(os.path.dirname(os.path.dirname(os.path.dirname(os.path.abspath(__file__)))))
5
- sys.path.append(root)
6
-
7
- # ----------------------------------------------------------------------------
8
-
9
- # PLEASE DO NOT EDIT THIS FILE, IT IS GENERATED AND WILL BE OVERWRITTEN:
10
- # https://github.com/ccxt/ccxt/blob/master/CONTRIBUTING.md#how-to-contribute-code
11
-
12
- # ----------------------------------------------------------------------------
13
- # -*- coding: utf-8 -*-
14
-
15
- from ccxt.base.precise import Precise # noqa E402
16
- from ccxt.test.base import test_shared_methods # noqa E402
17
-
18
- def test_market(exchange, skipped_properties, method, market):
19
- format = {
20
- 'id': 'btcusd',
21
- 'symbol': 'BTC/USD',
22
- 'base': 'BTC',
23
- 'quote': 'USD',
24
- 'taker': exchange.parse_number('0.0011'),
25
- 'maker': exchange.parse_number('0.0009'),
26
- 'baseId': 'btc',
27
- 'quoteId': 'usd',
28
- 'active': False,
29
- 'type': 'spot',
30
- 'linear': False,
31
- 'inverse': False,
32
- 'spot': False,
33
- 'swap': False,
34
- 'future': False,
35
- 'option': False,
36
- 'margin': False,
37
- 'contract': False,
38
- 'contractSize': exchange.parse_number('0.001'),
39
- 'expiry': 1656057600000,
40
- 'expiryDatetime': '2022-06-24T08:00:00.000Z',
41
- 'optionType': 'put',
42
- 'strike': exchange.parse_number('56000'),
43
- 'settle': 'XYZ',
44
- 'settleId': 'Xyz',
45
- 'precision': {
46
- 'price': exchange.parse_number('0.001'),
47
- 'amount': exchange.parse_number('0.001'),
48
- 'cost': exchange.parse_number('0.001'),
49
- },
50
- 'limits': {
51
- 'amount': {
52
- 'min': exchange.parse_number('0.01'),
53
- 'max': exchange.parse_number('1000'),
54
- },
55
- 'price': {
56
- 'min': exchange.parse_number('0.01'),
57
- 'max': exchange.parse_number('1000'),
58
- },
59
- 'cost': {
60
- 'min': exchange.parse_number('0.01'),
61
- 'max': exchange.parse_number('1000'),
62
- },
63
- },
64
- 'info': {},
65
- }
66
- empty_allowed_for = ['linear', 'inverse', 'settle', 'settleId', 'expiry', 'expiryDatetime', 'optionType', 'strike', 'margin', 'contractSize']
67
- test_shared_methods.assert_structure(exchange, skipped_properties, method, market, format, empty_allowed_for)
68
- test_shared_methods.assert_symbol(exchange, skipped_properties, method, market, 'symbol')
69
- log_text = test_shared_methods.log_template(exchange, method, market)
70
- #
71
- valid_types = ['spot', 'margin', 'swap', 'future', 'option', 'index']
72
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'type', valid_types)
73
- has_index = ('index' in market) # todo: add in all
74
- # check if string is consistent with 'type'
75
- if market['spot']:
76
- assert market['type'] == 'spot', '"type" string should be "spot" when spot is true' + log_text
77
- elif market['swap']:
78
- assert market['type'] == 'swap', '"type" string should be "swap" when swap is true' + log_text
79
- elif market['future']:
80
- assert market['type'] == 'future', '"type" string should be "future" when future is true' + log_text
81
- elif market['option']:
82
- assert market['type'] == 'option', '"type" string should be "option" when option is true' + log_text
83
- elif has_index and market['index']:
84
- # todo: add index in all implementations
85
- assert market['type'] == 'index', '"type" string should be "index" when index is true' + log_text
86
- # margin check (todo: add margin as mandatory, instead of undefined)
87
- if market['spot']:
88
- # for spot market, 'margin' can be either true/false or undefined
89
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'margin', [True, False, None])
90
- else:
91
- # otherwise, it must be false or undefined
92
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'margin', [False, None])
93
- if not ('contractSize' in skipped_properties):
94
- if not market['spot']:
95
- # if not spot, then contractSize should be defined
96
- assert market['contractSize'] is not None, '"contractSize" must be defined when "spot" is false' + log_text
97
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'contractSize', '0')
98
- # typical values
99
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'expiry', '0')
100
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'strike', '0')
101
- test_shared_methods.assert_in_array(exchange, skipped_properties, method, market, 'optionType', ['put', 'call'])
102
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'taker', '-100')
103
- test_shared_methods.assert_greater(exchange, skipped_properties, method, market, 'maker', '-100')
104
- # 'contract' boolean check
105
- if market['future'] or market['swap'] or market['option'] or (has_index and market['index']):
106
- # if it's some kind of contract market, then `conctract` should be true
107
- assert market['contract'], '"contract" must be true when "future", "swap", "option" or "index" is true' + log_text
108
- else:
109
- assert not market['contract'], '"contract" must be false when neither "future", "swap","option" or "index" is true' + log_text
110
- is_swap_or_future = market['swap'] or market['future']
111
- contract_size = exchange.safe_string(market, 'contractSize')
112
- # contract fields
113
- if market['contract']:
114
- # linear & inverse should have different values (true/false)
115
- # todo: expand logic on other market types
116
- if is_swap_or_future:
117
- assert market['linear'] != market['inverse'], 'market linear and inverse must not be the same' + log_text
118
- if not ('contractSize' in skipped_properties):
119
- # contract size should be defined
120
- assert contract_size is not None, '"contractSize" must be defined when "contract" is true' + log_text
121
- # contract size should be above zero
122
- assert Precise.string_gt(contract_size, '0'), '"contractSize" must be > 0 when "contract" is true' + log_text
123
- if not ('settle' in skipped_properties):
124
- # settle should be defined
125
- assert (market['settle'] is not None) and (market['settleId'] is not None), '"settle" & "settleId" must be defined when "contract" is true' + log_text
126
- # spot should be false
127
- assert not market['spot'], '"spot" must be false when "contract" is true' + log_text
128
- else:
129
- # linear & inverse needs to be undefined
130
- assert (market['linear'] is None) and (market['inverse'] is None), 'market linear and inverse must be undefined when "contract" is false' + log_text
131
- # contract size should be undefined
132
- if not ('contractSize' in skipped_properties):
133
- assert contract_size is None, '"contractSize" must be undefined when "contract" is false' + log_text
134
- # settle should be undefined
135
- assert (market['settle'] is None) and (market['settleId'] is None), '"settle" must be undefined when "contract" is false' + log_text
136
- # spot should be true
137
- assert market['spot'], '"spot" must be true when "contract" is false' + log_text
138
- # option fields
139
- if market['option']:
140
- # if option, then strike and optionType should be defined
141
- assert market['strike'] is not None, '"strike" must be defined when "option" is true' + log_text
142
- assert market['optionType'] is not None, '"optionType" must be defined when "option" is true' + log_text
143
- else:
144
- # if not option, then strike and optionType should be undefined
145
- assert market['strike'] is None, '"strike" must be undefined when "option" is false' + log_text
146
- assert market['optionType'] is None, '"optionType" must be undefined when "option" is false' + log_text
147
- # future, swap and option should be mutually exclusive
148
- if market['future']:
149
- assert not market['swap'] and not market['option'], 'market swap and option must be false when "future" is true' + log_text
150
- elif market['swap']:
151
- assert not market['future'] and not market['option'], 'market future and option must be false when "swap" is true' + log_text
152
- elif market['option']:
153
- assert not market['future'] and not market['swap'], 'market future and swap must be false when "option" is true' + log_text
154
- # expiry field
155
- if market['future'] or market['option']:
156
- # future or option markets need 'expiry' and 'expiryDatetime'
157
- assert market['expiry'] is not None, '"expiry" must be defined when "future" is true' + log_text
158
- assert market['expiryDatetime'] is not None, '"expiryDatetime" must be defined when "future" is true' + log_text
159
- # expiry datetime should be correct
160
- iso_string = exchange.iso8601(market['expiry'])
161
- assert market['expiryDatetime'] == iso_string, 'expiryDatetime ("' + market['expiryDatetime'] + '") must be equal to expiry in iso8601 format "' + iso_string + '"' + log_text
162
- else:
163
- # otherwise, they need to be undefined
164
- assert (market['expiry'] is None) and (market['expiryDatetime'] is None), '"expiry" and "expiryDatetime" must be undefined when it is not future|option market' + log_text
165
- # check precisions
166
- if not ('precision' in skipped_properties):
167
- precision_keys = list(market['precision'].keys())
168
- keys_length = len(precision_keys)
169
- assert keys_length >= 2, 'precision should have "amount" and "price" keys at least' + log_text
170
- for i in range(0, len(precision_keys)):
171
- test_shared_methods.check_precision_accuracy(exchange, skipped_properties, method, market['precision'], precision_keys[i])
172
- # check limits
173
- if not ('limits' in skipped_properties):
174
- limits_keys = list(market['limits'].keys())
175
- keys_length = len(limits_keys)
176
- assert keys_length >= 3, 'limits should have "amount", "price" and "cost" keys at least' + log_text
177
- for i in range(0, len(limits_keys)):
178
- key = limits_keys[i]
179
- limit_entry = market['limits'][key]
180
- # min >= 0
181
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, limit_entry, 'min', '0')
182
- # max >= 0
183
- test_shared_methods.assert_greater(exchange, skipped_properties, method, limit_entry, 'max', '0')
184
- # max >= min
185
- min_string = exchange.safe_string(limit_entry, 'min')
186
- if min_string is not None:
187
- test_shared_methods.assert_greater_or_equal(exchange, skipped_properties, method, limit_entry, 'max', min_string)
188
- # check whether valid currency ID and CODE is used
189
- if not ('currency' in skipped_properties) and not ('currencyIdAndCode' in skipped_properties):
190
- test_shared_methods.assert_valid_currency_id_and_code(exchange, skipped_properties, method, market, market['baseId'], market['base'])
191
- test_shared_methods.assert_valid_currency_id_and_code(exchange, skipped_properties, method, market, market['quoteId'], market['quote'])
192
- test_shared_methods.assert_valid_currency_id_and_code(exchange, skipped_properties, method, market, market['settleId'], market['settle'])
193
- test_shared_methods.assert_timestamp(exchange, skipped_properties, method, market, None, 'created')