ccxt 4.2.93__py2.py3-none-any.whl → 4.2.95__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 (190) hide show
  1. ccxt/__init__.py +2 -2
  2. ccxt/abstract/binance.py +1 -0
  3. ccxt/abstract/binancecoinm.py +1 -0
  4. ccxt/abstract/binanceus.py +1 -0
  5. ccxt/abstract/binanceusdm.py +1 -0
  6. ccxt/abstract/bitstamp.py +6 -0
  7. ccxt/ace.py +1 -1
  8. ccxt/ascendex.py +1 -1
  9. ccxt/async_support/__init__.py +2 -2
  10. ccxt/async_support/ace.py +1 -1
  11. ccxt/async_support/ascendex.py +1 -1
  12. ccxt/async_support/base/exchange.py +7 -1
  13. ccxt/async_support/bigone.py +1 -1
  14. ccxt/async_support/binance.py +63 -5
  15. ccxt/async_support/bingx.py +1 -1
  16. ccxt/async_support/bit2c.py +1 -1
  17. ccxt/async_support/bitbank.py +1 -1
  18. ccxt/async_support/bitfinex.py +1 -1
  19. ccxt/async_support/bitfinex2.py +1 -1
  20. ccxt/async_support/bitget.py +136 -2
  21. ccxt/async_support/bithumb.py +1 -1
  22. ccxt/async_support/bitmart.py +1 -1
  23. ccxt/async_support/bitmex.py +1 -1
  24. ccxt/async_support/bitopro.py +1 -1
  25. ccxt/async_support/bitrue.py +1 -1
  26. ccxt/async_support/bitso.py +1 -1
  27. ccxt/async_support/bitstamp.py +7 -1
  28. ccxt/async_support/bitteam.py +1 -1
  29. ccxt/async_support/bitvavo.py +1 -1
  30. ccxt/async_support/blockchaincom.py +1 -1
  31. ccxt/async_support/blofin.py +1 -1
  32. ccxt/async_support/btcalpha.py +1 -1
  33. ccxt/async_support/btcbox.py +1 -1
  34. ccxt/async_support/bybit.py +2 -2
  35. ccxt/async_support/cex.py +1 -1
  36. ccxt/async_support/coinbase.py +1 -1
  37. ccxt/async_support/coinbaseinternational.py +1 -1
  38. ccxt/async_support/coinbasepro.py +1 -1
  39. ccxt/async_support/coincheck.py +1 -1
  40. ccxt/async_support/coinex.py +62 -56
  41. ccxt/async_support/coinlist.py +1 -1
  42. ccxt/async_support/coinmate.py +1 -1
  43. ccxt/async_support/coinsph.py +1 -1
  44. ccxt/async_support/cryptocom.py +1 -1
  45. ccxt/async_support/currencycom.py +1 -1
  46. ccxt/async_support/delta.py +1 -1
  47. ccxt/async_support/deribit.py +1 -1
  48. ccxt/async_support/digifinex.py +1 -1
  49. ccxt/async_support/exmo.py +1 -1
  50. ccxt/async_support/gate.py +1 -1
  51. ccxt/async_support/gemini.py +3 -2
  52. ccxt/async_support/hitbtc.py +1 -1
  53. ccxt/async_support/hollaex.py +1 -1
  54. ccxt/async_support/htx.py +117 -116
  55. ccxt/async_support/huobijp.py +1 -1
  56. ccxt/async_support/idex.py +1 -1
  57. ccxt/async_support/indodax.py +1 -1
  58. ccxt/async_support/kraken.py +1 -1
  59. ccxt/async_support/krakenfutures.py +2 -2
  60. ccxt/async_support/kucoin.py +1 -1
  61. ccxt/async_support/kucoinfutures.py +1 -1
  62. ccxt/async_support/latoken.py +1 -1
  63. ccxt/async_support/lbank.py +1 -1
  64. ccxt/async_support/mexc.py +1 -1
  65. ccxt/async_support/ndax.py +1 -1
  66. ccxt/async_support/novadax.py +1 -1
  67. ccxt/async_support/oceanex.py +1 -1
  68. ccxt/async_support/okcoin.py +1 -1
  69. ccxt/async_support/okx.py +191 -43
  70. ccxt/async_support/onetrading.py +1 -1
  71. ccxt/async_support/p2b.py +1 -1
  72. ccxt/async_support/phemex.py +1 -1
  73. ccxt/async_support/poloniex.py +1 -1
  74. ccxt/async_support/poloniexfutures.py +1 -1
  75. ccxt/async_support/probit.py +1 -1
  76. ccxt/async_support/timex.py +1 -1
  77. ccxt/async_support/tokocrypto.py +1 -1
  78. ccxt/async_support/tradeogre.py +1 -1
  79. ccxt/async_support/upbit.py +2 -2
  80. ccxt/async_support/wavesexchange.py +1 -1
  81. ccxt/async_support/whitebit.py +1 -1
  82. ccxt/async_support/woo.py +136 -2
  83. ccxt/async_support/yobit.py +1 -1
  84. ccxt/async_support/zonda.py +1 -1
  85. ccxt/base/errors.py +7 -7
  86. ccxt/base/exchange.py +18 -1
  87. ccxt/base/types.py +13 -0
  88. ccxt/bigone.py +1 -1
  89. ccxt/binance.py +63 -5
  90. ccxt/bingx.py +1 -1
  91. ccxt/bit2c.py +1 -1
  92. ccxt/bitbank.py +1 -1
  93. ccxt/bitfinex.py +1 -1
  94. ccxt/bitfinex2.py +1 -1
  95. ccxt/bitget.py +136 -2
  96. ccxt/bithumb.py +1 -1
  97. ccxt/bitmart.py +1 -1
  98. ccxt/bitmex.py +1 -1
  99. ccxt/bitopro.py +1 -1
  100. ccxt/bitrue.py +1 -1
  101. ccxt/bitso.py +1 -1
  102. ccxt/bitstamp.py +7 -1
  103. ccxt/bitteam.py +1 -1
  104. ccxt/bitvavo.py +1 -1
  105. ccxt/blockchaincom.py +1 -1
  106. ccxt/blofin.py +1 -1
  107. ccxt/btcalpha.py +1 -1
  108. ccxt/btcbox.py +1 -1
  109. ccxt/bybit.py +2 -2
  110. ccxt/cex.py +1 -1
  111. ccxt/coinbase.py +1 -1
  112. ccxt/coinbaseinternational.py +1 -1
  113. ccxt/coinbasepro.py +1 -1
  114. ccxt/coincheck.py +1 -1
  115. ccxt/coinex.py +62 -56
  116. ccxt/coinlist.py +1 -1
  117. ccxt/coinmate.py +1 -1
  118. ccxt/coinsph.py +1 -1
  119. ccxt/cryptocom.py +1 -1
  120. ccxt/currencycom.py +1 -1
  121. ccxt/delta.py +1 -1
  122. ccxt/deribit.py +1 -1
  123. ccxt/digifinex.py +1 -1
  124. ccxt/exmo.py +1 -1
  125. ccxt/gate.py +1 -1
  126. ccxt/gemini.py +3 -2
  127. ccxt/hitbtc.py +1 -1
  128. ccxt/hollaex.py +1 -1
  129. ccxt/htx.py +117 -116
  130. ccxt/huobijp.py +1 -1
  131. ccxt/idex.py +1 -1
  132. ccxt/indodax.py +1 -1
  133. ccxt/kraken.py +1 -1
  134. ccxt/krakenfutures.py +2 -2
  135. ccxt/kucoin.py +1 -1
  136. ccxt/kucoinfutures.py +1 -1
  137. ccxt/latoken.py +1 -1
  138. ccxt/lbank.py +1 -1
  139. ccxt/mexc.py +1 -1
  140. ccxt/ndax.py +1 -1
  141. ccxt/novadax.py +1 -1
  142. ccxt/oceanex.py +1 -1
  143. ccxt/okcoin.py +1 -1
  144. ccxt/okx.py +191 -43
  145. ccxt/onetrading.py +1 -1
  146. ccxt/p2b.py +1 -1
  147. ccxt/phemex.py +1 -1
  148. ccxt/poloniex.py +1 -1
  149. ccxt/poloniexfutures.py +1 -1
  150. ccxt/pro/__init__.py +1 -1
  151. ccxt/pro/ascendex.py +1 -1
  152. ccxt/pro/bitfinex2.py +1 -1
  153. ccxt/pro/bitget.py +1 -1
  154. ccxt/pro/bitmart.py +1 -1
  155. ccxt/pro/bitmex.py +1 -1
  156. ccxt/pro/bitstamp.py +1 -1
  157. ccxt/pro/bitvavo.py +1 -1
  158. ccxt/pro/blockchaincom.py +1 -1
  159. ccxt/pro/bybit.py +1 -1
  160. ccxt/pro/coinbase.py +12 -0
  161. ccxt/pro/coinbaseinternational.py +1 -1
  162. ccxt/pro/coinbasepro.py +1 -1
  163. ccxt/pro/coinex.py +1 -1
  164. ccxt/pro/cryptocom.py +1 -1
  165. ccxt/pro/gate.py +1 -1
  166. ccxt/pro/hitbtc.py +1 -1
  167. ccxt/pro/hollaex.py +1 -1
  168. ccxt/pro/htx.py +1 -1
  169. ccxt/pro/kraken.py +97 -19
  170. ccxt/pro/krakenfutures.py +105 -40
  171. ccxt/pro/kucoin.py +25 -16
  172. ccxt/pro/okcoin.py +1 -1
  173. ccxt/pro/okx.py +1 -1
  174. ccxt/pro/poloniex.py +1 -1
  175. ccxt/pro/poloniexfutures.py +1 -1
  176. ccxt/pro/whitebit.py +1 -1
  177. ccxt/probit.py +1 -1
  178. ccxt/timex.py +1 -1
  179. ccxt/tokocrypto.py +1 -1
  180. ccxt/tradeogre.py +1 -1
  181. ccxt/upbit.py +2 -2
  182. ccxt/wavesexchange.py +1 -1
  183. ccxt/whitebit.py +1 -1
  184. ccxt/woo.py +136 -2
  185. ccxt/yobit.py +1 -1
  186. ccxt/zonda.py +1 -1
  187. {ccxt-4.2.93.dist-info → ccxt-4.2.95.dist-info}/METADATA +4 -4
  188. {ccxt-4.2.93.dist-info → ccxt-4.2.95.dist-info}/RECORD +190 -190
  189. {ccxt-4.2.93.dist-info → ccxt-4.2.95.dist-info}/WHEEL +0 -0
  190. {ccxt-4.2.93.dist-info → ccxt-4.2.95.dist-info}/top_level.txt +0 -0
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.2.93'
25
+ __version__ = '4.2.95'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -68,6 +68,7 @@ from ccxt.base.errors import DuplicateOrderId # noqa: F4
68
68
  from ccxt.base.errors import ContractUnavailable # noqa: F401
69
69
  from ccxt.base.errors import NotSupported # noqa: F401
70
70
  from ccxt.base.errors import ProxyError # noqa: F401
71
+ from ccxt.base.errors import ExchangeClosedByUser # noqa: F401
71
72
  from ccxt.base.errors import OperationFailed # noqa: F401
72
73
  from ccxt.base.errors import NetworkError # noqa: F401
73
74
  from ccxt.base.errors import DDoSProtection # noqa: F401
@@ -76,7 +77,6 @@ from ccxt.base.errors import ExchangeNotAvailable # noqa: F4
76
77
  from ccxt.base.errors import OnMaintenance # noqa: F401
77
78
  from ccxt.base.errors import InvalidNonce # noqa: F401
78
79
  from ccxt.base.errors import RequestTimeout # noqa: F401
79
- from ccxt.base.errors import ExchangeClosedByUser # noqa: F401
80
80
  from ccxt.base.errors import error_hierarchy # noqa: F401
81
81
 
82
82
  from ccxt.ace import ace # noqa: F401
ccxt/abstract/binance.py CHANGED
@@ -608,6 +608,7 @@ class ImplicitAPI:
608
608
  private_get_myallocations = privateGetMyAllocations = Entry('myAllocations', 'private', 'GET', {'cost': 4})
609
609
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
610
610
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
611
+ private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
611
612
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
612
613
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
613
614
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
@@ -608,6 +608,7 @@ class ImplicitAPI:
608
608
  private_get_myallocations = privateGetMyAllocations = Entry('myAllocations', 'private', 'GET', {'cost': 4})
609
609
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
610
610
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
611
+ private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
611
612
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
612
613
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
613
614
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
@@ -660,6 +660,7 @@ class ImplicitAPI:
660
660
  private_get_myallocations = privateGetMyAllocations = Entry('myAllocations', 'private', 'GET', {'cost': 4})
661
661
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
662
662
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
663
+ private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
663
664
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
664
665
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
665
666
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
@@ -608,6 +608,7 @@ class ImplicitAPI:
608
608
  private_get_myallocations = privateGetMyAllocations = Entry('myAllocations', 'private', 'GET', {'cost': 4})
609
609
  private_get_account_commission = privateGetAccountCommission = Entry('account/commission', 'private', 'GET', {'cost': 4})
610
610
  private_post_order_oco = privatePostOrderOco = Entry('order/oco', 'private', 'POST', {'cost': 0.2})
611
+ private_post_orderlist_oco = privatePostOrderListOco = Entry('orderList/oco', 'private', 'POST', {'cost': 0.2})
611
612
  private_post_sor_order = privatePostSorOrder = Entry('sor/order', 'private', 'POST', {'cost': 0.2})
612
613
  private_post_sor_order_test = privatePostSorOrderTest = Entry('sor/order/test', 'private', 'POST', {'cost': 0.2})
613
614
  private_post_order = privatePostOrder = Entry('order', 'private', 'POST', {'cost': 0.2})
ccxt/abstract/bitstamp.py CHANGED
@@ -234,3 +234,9 @@ class ImplicitAPI:
234
234
  private_post_blur_address = privatePostBlurAddress = Entry('blur_address/', 'private', 'POST', {'cost': 1})
235
235
  private_post_vext_withdrawal = privatePostVextWithdrawal = Entry('vext_withdrawal/', 'private', 'POST', {'cost': 1})
236
236
  private_post_vext_address = privatePostVextAddress = Entry('vext_address/', 'private', 'POST', {'cost': 1})
237
+ private_post_cspr_withdrawal = privatePostCsprWithdrawal = Entry('cspr_withdrawal/', 'private', 'POST', {'cost': 1})
238
+ private_post_cspr_address = privatePostCsprAddress = Entry('cspr_address/', 'private', 'POST', {'cost': 1})
239
+ private_post_vchf_withdrawal = privatePostVchfWithdrawal = Entry('vchf_withdrawal/', 'private', 'POST', {'cost': 1})
240
+ private_post_vchf_address = privatePostVchfAddress = Entry('vchf_address/', 'private', 'POST', {'cost': 1})
241
+ private_post_veur_withdrawal = privatePostVeurWithdrawal = Entry('veur_withdrawal/', 'private', 'POST', {'cost': 1})
242
+ private_post_veur_address = privatePostVeurAddress = Entry('veur_address/', 'private', 'POST', {'cost': 1})
ccxt/ace.py CHANGED
@@ -7,11 +7,11 @@ from ccxt.base.exchange import Exchange
7
7
  from ccxt.abstract.ace import ImplicitAPI
8
8
  from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
9
9
  from typing import List
10
+ from ccxt.base.errors import AuthenticationError
10
11
  from ccxt.base.errors import ArgumentsRequired
11
12
  from ccxt.base.errors import BadRequest
12
13
  from ccxt.base.errors import InsufficientFunds
13
14
  from ccxt.base.errors import InvalidOrder
14
- from ccxt.base.errors import AuthenticationError
15
15
  from ccxt.base.decimal_to_precision import TICK_SIZE
16
16
  from ccxt.base.precise import Precise
17
17
 
ccxt/ascendex.py CHANGED
@@ -9,6 +9,7 @@ import hashlib
9
9
  from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Leverage, Leverages, MarginMode, MarginModes, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
@@ -16,7 +17,6 @@ from ccxt.base.errors import BadSymbol
16
17
  from ccxt.base.errors import InsufficientFunds
17
18
  from ccxt.base.errors import InvalidOrder
18
19
  from ccxt.base.errors import NotSupported
19
- from ccxt.base.errors import AuthenticationError
20
20
  from ccxt.base.decimal_to_precision import TICK_SIZE
21
21
  from ccxt.base.precise import Precise
22
22
 
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.2.93'
7
+ __version__ = '4.2.95'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -47,6 +47,7 @@ from ccxt.base.errors import DuplicateOrderId # noqa: F4
47
47
  from ccxt.base.errors import ContractUnavailable # noqa: F401
48
48
  from ccxt.base.errors import NotSupported # noqa: F401
49
49
  from ccxt.base.errors import ProxyError # noqa: F401
50
+ from ccxt.base.errors import ExchangeClosedByUser # noqa: F401
50
51
  from ccxt.base.errors import OperationFailed # noqa: F401
51
52
  from ccxt.base.errors import NetworkError # noqa: F401
52
53
  from ccxt.base.errors import DDoSProtection # noqa: F401
@@ -55,7 +56,6 @@ from ccxt.base.errors import ExchangeNotAvailable # noqa: F4
55
56
  from ccxt.base.errors import OnMaintenance # noqa: F401
56
57
  from ccxt.base.errors import InvalidNonce # noqa: F401
57
58
  from ccxt.base.errors import RequestTimeout # noqa: F401
58
- from ccxt.base.errors import ExchangeClosedByUser # noqa: F401
59
59
  from ccxt.base.errors import error_hierarchy # noqa: F401
60
60
 
61
61
 
ccxt/async_support/ace.py CHANGED
@@ -7,11 +7,11 @@ from ccxt.async_support.base.exchange import Exchange
7
7
  from ccxt.abstract.ace import ImplicitAPI
8
8
  from ccxt.base.types import Balances, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade
9
9
  from typing import List
10
+ from ccxt.base.errors import AuthenticationError
10
11
  from ccxt.base.errors import ArgumentsRequired
11
12
  from ccxt.base.errors import BadRequest
12
13
  from ccxt.base.errors import InsufficientFunds
13
14
  from ccxt.base.errors import InvalidOrder
14
- from ccxt.base.errors import AuthenticationError
15
15
  from ccxt.base.decimal_to_precision import TICK_SIZE
16
16
  from ccxt.base.precise import Precise
17
17
 
@@ -9,6 +9,7 @@ import hashlib
9
9
  from ccxt.base.types import Account, Balances, Currencies, Currency, Int, Leverage, Leverages, MarginMode, MarginModes, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
@@ -16,7 +17,6 @@ from ccxt.base.errors import BadSymbol
16
17
  from ccxt.base.errors import InsufficientFunds
17
18
  from ccxt.base.errors import InvalidOrder
18
19
  from ccxt.base.errors import NotSupported
19
- from ccxt.base.errors import AuthenticationError
20
20
  from ccxt.base.decimal_to_precision import TICK_SIZE
21
21
  from ccxt.base.precise import Precise
22
22
 
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.2.93'
5
+ __version__ = '4.2.95'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -1281,6 +1281,9 @@ class Exchange(BaseExchange):
1281
1281
  async def fetch_option(self, symbol: str, params={}):
1282
1282
  raise NotSupported(self.id + ' fetchOption() is not supported yet')
1283
1283
 
1284
+ async def fetch_convert_quote(self, fromCode: str, toCode: str, amount: Num = None, params={}):
1285
+ raise NotSupported(self.id + ' fetchConvertQuote() is not supported yet')
1286
+
1284
1287
  async def fetch_deposits_withdrawals(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1285
1288
  """
1286
1289
  fetch history of deposits and withdrawals
@@ -1421,6 +1424,9 @@ class Exchange(BaseExchange):
1421
1424
  fees = await self.fetch_trading_fees(params)
1422
1425
  return self.safe_dict(fees, symbol)
1423
1426
 
1427
+ async def fetch_convert_currencies(self, params={}):
1428
+ raise NotSupported(self.id + ' fetchConvertCurrencies() is not supported yet')
1429
+
1424
1430
  async def fetch_funding_rate(self, symbol: str, params={}):
1425
1431
  if self.has['fetchFundingRates']:
1426
1432
  await self.load_markets()
@@ -9,6 +9,7 @@ import asyncio
9
9
  from ccxt.base.types import Balances, Bool, Currencies, Currency, Int, 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
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
@@ -17,7 +18,6 @@ from ccxt.base.errors import InsufficientFunds
17
18
  from ccxt.base.errors import InvalidOrder
18
19
  from ccxt.base.errors import NotSupported
19
20
  from ccxt.base.errors import RateLimitExceeded
20
- from ccxt.base.errors import AuthenticationError
21
21
  from ccxt.base.decimal_to_precision import TICK_SIZE
22
22
  from ccxt.base.precise import Precise
23
23
 
@@ -11,11 +11,13 @@ import json
11
11
  from ccxt.base.types import Balances, Currencies, Currency, Greeks, Int, Leverage, Leverages, MarginMode, MarginModes, MarginModification, Market, MarketInterface, Num, Option, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
+ from ccxt.base.errors import AuthenticationError
14
15
  from ccxt.base.errors import PermissionDenied
15
16
  from ccxt.base.errors import AccountSuspended
16
17
  from ccxt.base.errors import ArgumentsRequired
17
18
  from ccxt.base.errors import BadRequest
18
19
  from ccxt.base.errors import BadSymbol
20
+ from ccxt.base.errors import OperationRejected
19
21
  from ccxt.base.errors import MarginModeAlreadySet
20
22
  from ccxt.base.errors import BadResponse
21
23
  from ccxt.base.errors import InsufficientFunds
@@ -24,14 +26,12 @@ from ccxt.base.errors import OrderNotFound
24
26
  from ccxt.base.errors import OrderImmediatelyFillable
25
27
  from ccxt.base.errors import OrderNotFillable
26
28
  from ccxt.base.errors import NotSupported
29
+ from ccxt.base.errors import OperationFailed
27
30
  from ccxt.base.errors import DDoSProtection
28
31
  from ccxt.base.errors import RateLimitExceeded
29
32
  from ccxt.base.errors import OnMaintenance
30
33
  from ccxt.base.errors import InvalidNonce
31
34
  from ccxt.base.errors import RequestTimeout
32
- from ccxt.base.errors import AuthenticationError
33
- from ccxt.base.errors import OperationRejected
34
- from ccxt.base.errors import OperationFailed
35
35
  from ccxt.base.decimal_to_precision import TRUNCATE
36
36
  from ccxt.base.decimal_to_precision import DECIMAL_PLACES
37
37
  from ccxt.base.precise import Precise
@@ -94,6 +94,8 @@ class binance(Exchange, ImplicitAPI):
94
94
  'fetchCanceledOrders': 'emulated',
95
95
  'fetchClosedOrder': False,
96
96
  'fetchClosedOrders': 'emulated',
97
+ 'fetchConvertCurrencies': True,
98
+ 'fetchConvertQuote': False,
97
99
  'fetchCrossBorrowRate': True,
98
100
  'fetchCrossBorrowRates': False,
99
101
  'fetchCurrencies': True,
@@ -993,6 +995,7 @@ class binance(Exchange, ImplicitAPI):
993
995
  },
994
996
  'post': {
995
997
  'order/oco': 0.2,
998
+ 'orderList/oco': 0.2,
996
999
  'sor/order': 0.2,
997
1000
  'sor/order/test': 0.2,
998
1001
  'order': 0.2,
@@ -4109,10 +4112,13 @@ class binance(Exchange, ImplicitAPI):
4109
4112
  'interval': self.safe_string(self.timeframes, timeframe, timeframe),
4110
4113
  'limit': limit,
4111
4114
  }
4115
+ marketId = market['id']
4112
4116
  if price == 'index':
4113
- request['pair'] = market['id'] # Index price takes self argument instead of symbol
4117
+ parts = marketId.split('_')
4118
+ pair = self.safe_string(parts, 0)
4119
+ request['pair'] = pair # Index price takes self argument instead of symbol
4114
4120
  else:
4115
- request['symbol'] = market['id']
4121
+ request['symbol'] = marketId
4116
4122
  # duration = self.parse_timeframe(timeframe)
4117
4123
  if since is not None:
4118
4124
  request['startTime'] = since
@@ -11578,3 +11584,55 @@ class binance(Exchange, ImplicitAPI):
11578
11584
  #
11579
11585
  modifications = self.parse_margin_modifications(response)
11580
11586
  return self.filter_by_symbol_since_limit(modifications, symbol, since, limit)
11587
+
11588
+ async def fetch_convert_currencies(self, params={}) -> Currencies:
11589
+ """
11590
+ fetches all available currencies that can be converted
11591
+ :see: https://binance-docs.github.io/apidocs/spot/en/#query-order-quantity-precision-per-asset-user_data
11592
+ :param dict [params]: extra parameters specific to the exchange API endpoint
11593
+ :returns dict: an associative dictionary of currencies
11594
+ """
11595
+ await self.load_markets()
11596
+ response = await self.sapiGetConvertAssetInfo(params)
11597
+ #
11598
+ # [
11599
+ # {
11600
+ # "asset": "BTC",
11601
+ # "fraction": 8
11602
+ # },
11603
+ # ]
11604
+ #
11605
+ result = {}
11606
+ for i in range(0, len(response)):
11607
+ entry = response[i]
11608
+ id = self.safe_string(entry, 'asset')
11609
+ code = self.safe_currency_code(id)
11610
+ result[code] = {
11611
+ 'info': entry,
11612
+ 'id': id,
11613
+ 'code': code,
11614
+ 'networks': None,
11615
+ 'type': None,
11616
+ 'name': None,
11617
+ 'active': None,
11618
+ 'deposit': None,
11619
+ 'withdraw': None,
11620
+ 'fee': None,
11621
+ 'precision': self.safe_integer(entry, 'fraction'),
11622
+ 'limits': {
11623
+ 'amount': {
11624
+ 'min': None,
11625
+ 'max': None,
11626
+ },
11627
+ 'withdraw': {
11628
+ 'min': None,
11629
+ 'max': None,
11630
+ },
11631
+ 'deposit': {
11632
+ 'min': None,
11633
+ 'max': None,
11634
+ },
11635
+ },
11636
+ 'created': None,
11637
+ }
11638
+ return result
@@ -11,6 +11,7 @@ import numbers
11
11
  from ccxt.base.types import Balances, Currencies, Currency, Int, Leverage, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, Transaction, TransferEntry
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
+ from ccxt.base.errors import AuthenticationError
14
15
  from ccxt.base.errors import PermissionDenied
15
16
  from ccxt.base.errors import AccountSuspended
16
17
  from ccxt.base.errors import ArgumentsRequired
@@ -20,7 +21,6 @@ from ccxt.base.errors import InsufficientFunds
20
21
  from ccxt.base.errors import OrderNotFound
21
22
  from ccxt.base.errors import NotSupported
22
23
  from ccxt.base.errors import DDoSProtection
23
- from ccxt.base.errors import AuthenticationError
24
24
  from ccxt.base.decimal_to_precision import DECIMAL_PLACES
25
25
  from ccxt.base.precise import Precise
26
26
 
@@ -9,12 +9,12 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import OrderNotFound
15
16
  from ccxt.base.errors import NotSupported
16
17
  from ccxt.base.errors import InvalidNonce
17
- from ccxt.base.errors import AuthenticationError
18
18
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
19
  from ccxt.base.precise import Precise
20
20
 
@@ -9,12 +9,12 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Ticker, Trade, TradingFees, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import InsufficientFunds
14
15
  from ccxt.base.errors import InvalidOrder
15
16
  from ccxt.base.errors import OrderNotFound
16
17
  from ccxt.base.errors import InvalidNonce
17
- from ccxt.base.errors import AuthenticationError
18
18
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
19
 
20
20
 
@@ -9,6 +9,7 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadSymbol
@@ -19,7 +20,6 @@ from ccxt.base.errors import NotSupported
19
20
  from ccxt.base.errors import RateLimitExceeded
20
21
  from ccxt.base.errors import ExchangeNotAvailable
21
22
  from ccxt.base.errors import InvalidNonce
22
- from ccxt.base.errors import AuthenticationError
23
23
  from ccxt.base.decimal_to_precision import ROUND
24
24
  from ccxt.base.decimal_to_precision import TRUNCATE
25
25
  from ccxt.base.decimal_to_precision import DECIMAL_PLACES
@@ -9,6 +9,7 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Currencies, Currency, Int, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
@@ -22,7 +23,6 @@ from ccxt.base.errors import RateLimitExceeded
22
23
  from ccxt.base.errors import ExchangeNotAvailable
23
24
  from ccxt.base.errors import OnMaintenance
24
25
  from ccxt.base.errors import InvalidNonce
25
- from ccxt.base.errors import AuthenticationError
26
26
  from ccxt.base.decimal_to_precision import ROUND
27
27
  from ccxt.base.decimal_to_precision import TRUNCATE
28
28
  from ccxt.base.decimal_to_precision import DECIMAL_PLACES
@@ -8,9 +8,10 @@ from ccxt.abstract.bitget import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
10
  import json
11
- from ccxt.base.types import Balances, Currencies, Currency, FundingHistory, Int, Liquidation, Leverage, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
11
+ from ccxt.base.types import Balances, Conversion, Currencies, Currency, FundingHistory, Int, Liquidation, Leverage, MarginMode, MarginModification, Market, Num, Order, OrderBook, OrderRequest, OrderSide, OrderType, Position, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
+ from ccxt.base.errors import AuthenticationError
14
15
  from ccxt.base.errors import PermissionDenied
15
16
  from ccxt.base.errors import AccountSuspended
16
17
  from ccxt.base.errors import ArgumentsRequired
@@ -28,7 +29,6 @@ from ccxt.base.errors import ExchangeNotAvailable
28
29
  from ccxt.base.errors import OnMaintenance
29
30
  from ccxt.base.errors import InvalidNonce
30
31
  from ccxt.base.errors import RequestTimeout
31
- from ccxt.base.errors import AuthenticationError
32
32
  from ccxt.base.decimal_to_precision import TICK_SIZE
33
33
  from ccxt.base.precise import Precise
34
34
 
@@ -85,6 +85,8 @@ class bitget(Exchange, ImplicitAPI):
85
85
  'fetchCanceledAndClosedOrders': True,
86
86
  'fetchCanceledOrders': True,
87
87
  'fetchClosedOrders': True,
88
+ 'fetchConvertCurrencies': True,
89
+ 'fetchConvertQuote': True,
88
90
  'fetchCrossBorrowRate': True,
89
91
  'fetchCrossBorrowRates': False,
90
92
  'fetchCurrencies': True,
@@ -7853,6 +7855,138 @@ class bitget(Exchange, ImplicitAPI):
7853
7855
  'marginMode': marginType,
7854
7856
  }
7855
7857
 
7858
+ async def fetch_convert_quote(self, fromCode: str, toCode: str, amount: Num = None, params={}) -> Conversion:
7859
+ """
7860
+ fetch a quote for converting from one currency to another
7861
+ :see: https://www.bitget.com/api-doc/common/convert/Get-Quoted-Price
7862
+ :param str fromCode: the currency that you want to sell and convert from
7863
+ :param str toCode: the currency that you want to buy and convert into
7864
+ :param float [amount]: how much you want to trade in units of the from currency
7865
+ :param dict [params]: extra parameters specific to the exchange API endpoint
7866
+ :returns dict: a `conversion structure <https://docs.ccxt.com/#/?id=conversion-structure>`
7867
+ """
7868
+ await self.load_markets()
7869
+ request = {
7870
+ 'fromCoin': fromCode.upper(),
7871
+ 'toCoin': toCode.upper(),
7872
+ 'fromCoinSize': self.number_to_string(amount),
7873
+ }
7874
+ response = await self.privateConvertGetV2ConvertQuotedPrice(self.extend(request, params))
7875
+ #
7876
+ # {
7877
+ # "code": "00000",
7878
+ # "msg": "success",
7879
+ # "requestTime": 1712121940158,
7880
+ # "data": {
7881
+ # "fromCoin": "USDT",
7882
+ # "fromCoinSize": "5",
7883
+ # "cnvtPrice": "0.9993007892377704",
7884
+ # "toCoin": "USDC",
7885
+ # "toCoinSize": "4.99650394",
7886
+ # "traceId": "1159288930228187140",
7887
+ # "fee": "0"
7888
+ # }
7889
+ # }
7890
+ #
7891
+ data = self.safe_dict(response, 'data', {})
7892
+ fromCurrencyId = self.safe_string(data, 'fromCoin', fromCode)
7893
+ fromCurrency = self.currency(fromCurrencyId)
7894
+ toCurrencyId = self.safe_string(data, 'toCoin', toCode)
7895
+ toCurrency = self.currency(toCurrencyId)
7896
+ return self.parse_conversion(data, fromCurrency, toCurrency)
7897
+
7898
+ def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
7899
+ #
7900
+ # fetchConvertQuote
7901
+ #
7902
+ # {
7903
+ # "fromCoin": "USDT",
7904
+ # "fromCoinSize": "5",
7905
+ # "cnvtPrice": "0.9993007892377704",
7906
+ # "toCoin": "USDC",
7907
+ # "toCoinSize": "4.99650394",
7908
+ # "traceId": "1159288930228187140",
7909
+ # "fee": "0"
7910
+ # }
7911
+ #
7912
+ timestamp = self.safe_integer(conversion, 'ts')
7913
+ fromCoin = self.safe_string(conversion, 'fromCoin')
7914
+ fromCode = self.safe_currency_code(fromCoin, fromCurrency)
7915
+ to = self.safe_string(conversion, 'toCoin')
7916
+ toCode = self.safe_currency_code(to, toCurrency)
7917
+ return {
7918
+ 'info': conversion,
7919
+ 'timestamp': timestamp,
7920
+ 'datetime': self.iso8601(timestamp),
7921
+ 'id': self.safe_string(conversion, 'traceId'),
7922
+ 'fromCurrency': fromCode,
7923
+ 'fromAmount': self.safe_number(conversion, 'fromCoinSize'),
7924
+ 'toCurrency': toCode,
7925
+ 'toAmount': self.safe_number(conversion, 'toCoinSize'),
7926
+ 'price': self.safe_number(conversion, 'cnvtPrice'),
7927
+ 'fee': self.safe_number(conversion, 'fee'),
7928
+ }
7929
+
7930
+ async def fetch_convert_currencies(self, params={}) -> Currencies:
7931
+ """
7932
+ fetches all available currencies that can be converted
7933
+ :see: https://www.bitget.com/api-doc/common/convert/Get-Convert-Currencies
7934
+ :param dict [params]: extra parameters specific to the exchange API endpoint
7935
+ :returns dict: an associative dictionary of currencies
7936
+ """
7937
+ await self.load_markets()
7938
+ response = await self.privateConvertGetV2ConvertCurrencies(params)
7939
+ #
7940
+ # {
7941
+ # "code": "00000",
7942
+ # "msg": "success",
7943
+ # "requestTime": 1712121755897,
7944
+ # "data": [
7945
+ # {
7946
+ # "coin": "BTC",
7947
+ # "available": "0.00009850",
7948
+ # "maxAmount": "0.756266",
7949
+ # "minAmount": "0.00001"
7950
+ # },
7951
+ # ]
7952
+ # }
7953
+ #
7954
+ result = {}
7955
+ data = self.safe_list(response, 'data', [])
7956
+ for i in range(0, len(data)):
7957
+ entry = data[i]
7958
+ id = self.safe_string(entry, 'coin')
7959
+ code = self.safe_currency_code(id)
7960
+ result[code] = {
7961
+ 'info': entry,
7962
+ 'id': id,
7963
+ 'code': code,
7964
+ 'networks': None,
7965
+ 'type': None,
7966
+ 'name': None,
7967
+ 'active': None,
7968
+ 'deposit': None,
7969
+ 'withdraw': self.safe_number(entry, 'available'),
7970
+ 'fee': None,
7971
+ 'precision': None,
7972
+ 'limits': {
7973
+ 'amount': {
7974
+ 'min': self.safe_number(entry, 'minAmount'),
7975
+ 'max': self.safe_number(entry, 'maxAmount'),
7976
+ },
7977
+ 'withdraw': {
7978
+ 'min': None,
7979
+ 'max': None,
7980
+ },
7981
+ 'deposit': {
7982
+ 'min': None,
7983
+ 'max': None,
7984
+ },
7985
+ },
7986
+ 'created': None,
7987
+ }
7988
+ return result
7989
+
7856
7990
  def handle_errors(self, code, reason, url, method, headers, body, response, requestHeaders, requestBody):
7857
7991
  if not response:
7858
7992
  return None # fallback to default error handler
@@ -9,13 +9,13 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Currency, Int, Market, MarketInterface, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
15
16
  from ccxt.base.errors import InvalidAddress
16
17
  from ccxt.base.errors import InvalidOrder
17
18
  from ccxt.base.errors import ExchangeNotAvailable
18
- from ccxt.base.errors import AuthenticationError
19
19
  from ccxt.base.decimal_to_precision import TRUNCATE
20
20
  from ccxt.base.decimal_to_precision import DECIMAL_PLACES
21
21
  from ccxt.base.decimal_to_precision import SIGNIFICANT_DIGITS
@@ -9,6 +9,7 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, Transaction, TransferEntry
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import AccountSuspended
14
15
  from ccxt.base.errors import ArgumentsRequired
@@ -24,7 +25,6 @@ from ccxt.base.errors import RateLimitExceeded
24
25
  from ccxt.base.errors import ExchangeNotAvailable
25
26
  from ccxt.base.errors import OnMaintenance
26
27
  from ccxt.base.errors import InvalidNonce
27
- from ccxt.base.errors import AuthenticationError
28
28
  from ccxt.base.decimal_to_precision import TRUNCATE
29
29
  from ccxt.base.decimal_to_precision import TICK_SIZE
30
30
  from ccxt.base.precise import Precise
@@ -9,6 +9,7 @@ import hashlib
9
9
  from ccxt.base.types import Balances, Currencies, Currency, Int, Leverage, Leverages, Market, MarketType, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, Transaction
10
10
  from typing import List
11
11
  from ccxt.base.errors import ExchangeError
12
+ from ccxt.base.errors import AuthenticationError
12
13
  from ccxt.base.errors import PermissionDenied
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
@@ -18,7 +19,6 @@ from ccxt.base.errors import InvalidOrder
18
19
  from ccxt.base.errors import OrderNotFound
19
20
  from ccxt.base.errors import DDoSProtection
20
21
  from ccxt.base.errors import ExchangeNotAvailable
21
- from ccxt.base.errors import AuthenticationError
22
22
  from ccxt.base.decimal_to_precision import TICK_SIZE
23
23
  from ccxt.base.precise import Precise
24
24
 
@@ -10,11 +10,11 @@ import math
10
10
  from ccxt.base.types import Balances, Currencies, Currency, Int, Market, Num, Order, OrderBook, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFees, Transaction
11
11
  from typing import List
12
12
  from ccxt.base.errors import ExchangeError
13
+ from ccxt.base.errors import AuthenticationError
13
14
  from ccxt.base.errors import ArgumentsRequired
14
15
  from ccxt.base.errors import BadRequest
15
16
  from ccxt.base.errors import InsufficientFunds
16
17
  from ccxt.base.errors import InvalidOrder
17
- from ccxt.base.errors import AuthenticationError
18
18
  from ccxt.base.decimal_to_precision import TICK_SIZE
19
19
  from ccxt.base.precise import Precise
20
20