ccxt 4.3.18__py2.py3-none-any.whl → 4.3.19__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 (193) hide show
  1. ccxt/__init__.py +3 -1
  2. ccxt/abstract/bybit.py +1 -0
  3. ccxt/abstract/okx.py +1 -0
  4. ccxt/abstract/woofipro.py +119 -0
  5. ccxt/ace.py +1 -1
  6. ccxt/ascendex.py +7 -8
  7. ccxt/async_support/__init__.py +3 -1
  8. ccxt/async_support/ace.py +1 -1
  9. ccxt/async_support/ascendex.py +7 -8
  10. ccxt/async_support/base/exchange.py +23 -2
  11. ccxt/async_support/bigone.py +4 -4
  12. ccxt/async_support/binance.py +9 -9
  13. ccxt/async_support/bingx.py +4 -4
  14. ccxt/async_support/bit2c.py +1 -1
  15. ccxt/async_support/bitbank.py +1 -1
  16. ccxt/async_support/bitbns.py +1 -1
  17. ccxt/async_support/bitfinex.py +28 -4
  18. ccxt/async_support/bitfinex2.py +62 -54
  19. ccxt/async_support/bitflyer.py +1 -1
  20. ccxt/async_support/bitget.py +8 -11
  21. ccxt/async_support/bithumb.py +1 -1
  22. ccxt/async_support/bitmart.py +8 -8
  23. ccxt/async_support/bitmex.py +2 -2
  24. ccxt/async_support/bitopro.py +1 -1
  25. ccxt/async_support/bitrue.py +3 -3
  26. ccxt/async_support/bitso.py +1 -1
  27. ccxt/async_support/bitstamp.py +3 -5
  28. ccxt/async_support/bitteam.py +1 -1
  29. ccxt/async_support/bitvavo.py +1 -1
  30. ccxt/async_support/bl3p.py +1 -1
  31. ccxt/async_support/blockchaincom.py +1 -1
  32. ccxt/async_support/blofin.py +3 -3
  33. ccxt/async_support/btcalpha.py +1 -1
  34. ccxt/async_support/btcbox.py +1 -1
  35. ccxt/async_support/btcmarkets.py +1 -1
  36. ccxt/async_support/btcturk.py +1 -1
  37. ccxt/async_support/bybit.py +9 -8
  38. ccxt/async_support/cex.py +1 -1
  39. ccxt/async_support/coinbase.py +2 -2
  40. ccxt/async_support/coinbasepro.py +1 -1
  41. ccxt/async_support/coincheck.py +1 -1
  42. ccxt/async_support/coinex.py +320 -520
  43. ccxt/async_support/coinlist.py +6 -7
  44. ccxt/async_support/coinmate.py +1 -1
  45. ccxt/async_support/coinmetro.py +1 -1
  46. ccxt/async_support/coinone.py +1 -1
  47. ccxt/async_support/coinsph.py +1 -1
  48. ccxt/async_support/coinspot.py +1 -1
  49. ccxt/async_support/cryptocom.py +1 -1
  50. ccxt/async_support/currencycom.py +2 -2
  51. ccxt/async_support/delta.py +4 -4
  52. ccxt/async_support/deribit.py +8 -8
  53. ccxt/async_support/digifinex.py +5 -5
  54. ccxt/async_support/exmo.py +1 -1
  55. ccxt/async_support/gate.py +5 -5
  56. ccxt/async_support/gemini.py +1 -1
  57. ccxt/async_support/hitbtc.py +3 -3
  58. ccxt/async_support/hollaex.py +4 -4
  59. ccxt/async_support/htx.py +2 -2
  60. ccxt/async_support/huobijp.py +1 -1
  61. ccxt/async_support/idex.py +1 -1
  62. ccxt/async_support/independentreserve.py +1 -1
  63. ccxt/async_support/indodax.py +2 -2
  64. ccxt/async_support/kraken.py +2 -2
  65. ccxt/async_support/krakenfutures.py +3 -3
  66. ccxt/async_support/kucoin.py +3 -3
  67. ccxt/async_support/kucoinfutures.py +3 -3
  68. ccxt/async_support/kuna.py +1 -1
  69. ccxt/async_support/latoken.py +6 -6
  70. ccxt/async_support/lbank.py +1 -1
  71. ccxt/async_support/luno.py +1 -1
  72. ccxt/async_support/lykke.py +1 -1
  73. ccxt/async_support/mercado.py +1 -1
  74. ccxt/async_support/mexc.py +7 -7
  75. ccxt/async_support/ndax.py +1 -1
  76. ccxt/async_support/novadax.py +3 -4
  77. ccxt/async_support/okcoin.py +3 -3
  78. ccxt/async_support/okx.py +27 -10
  79. ccxt/async_support/onetrading.py +1 -1
  80. ccxt/async_support/paymium.py +3 -3
  81. ccxt/async_support/phemex.py +5 -5
  82. ccxt/async_support/poloniex.py +3 -4
  83. ccxt/async_support/poloniexfutures.py +1 -1
  84. ccxt/async_support/probit.py +1 -1
  85. ccxt/async_support/timex.py +1 -1
  86. ccxt/async_support/tokocrypto.py +1 -1
  87. ccxt/async_support/upbit.py +1 -1
  88. ccxt/async_support/wavesexchange.py +3 -3
  89. ccxt/async_support/wazirx.py +1 -1
  90. ccxt/async_support/whitebit.py +2 -2
  91. ccxt/async_support/woo.py +25 -10
  92. ccxt/async_support/woofipro.py +2524 -0
  93. ccxt/async_support/yobit.py +1 -1
  94. ccxt/async_support/zaif.py +1 -1
  95. ccxt/async_support/zonda.py +3 -3
  96. ccxt/base/exchange.py +62 -16
  97. ccxt/base/types.py +20 -0
  98. ccxt/bigone.py +4 -4
  99. ccxt/binance.py +9 -9
  100. ccxt/bingx.py +4 -4
  101. ccxt/bit2c.py +1 -1
  102. ccxt/bitbank.py +1 -1
  103. ccxt/bitbns.py +1 -1
  104. ccxt/bitfinex.py +28 -4
  105. ccxt/bitfinex2.py +62 -54
  106. ccxt/bitflyer.py +1 -1
  107. ccxt/bitget.py +8 -11
  108. ccxt/bithumb.py +1 -1
  109. ccxt/bitmart.py +8 -8
  110. ccxt/bitmex.py +2 -2
  111. ccxt/bitopro.py +1 -1
  112. ccxt/bitrue.py +3 -3
  113. ccxt/bitso.py +1 -1
  114. ccxt/bitstamp.py +3 -5
  115. ccxt/bitteam.py +1 -1
  116. ccxt/bitvavo.py +1 -1
  117. ccxt/bl3p.py +1 -1
  118. ccxt/blockchaincom.py +1 -1
  119. ccxt/blofin.py +3 -3
  120. ccxt/btcalpha.py +1 -1
  121. ccxt/btcbox.py +1 -1
  122. ccxt/btcmarkets.py +1 -1
  123. ccxt/btcturk.py +1 -1
  124. ccxt/bybit.py +9 -8
  125. ccxt/cex.py +1 -1
  126. ccxt/coinbase.py +2 -2
  127. ccxt/coinbasepro.py +1 -1
  128. ccxt/coincheck.py +1 -1
  129. ccxt/coinex.py +320 -520
  130. ccxt/coinlist.py +6 -7
  131. ccxt/coinmate.py +1 -1
  132. ccxt/coinmetro.py +1 -1
  133. ccxt/coinone.py +1 -1
  134. ccxt/coinsph.py +1 -1
  135. ccxt/coinspot.py +1 -1
  136. ccxt/cryptocom.py +1 -1
  137. ccxt/currencycom.py +2 -2
  138. ccxt/delta.py +4 -4
  139. ccxt/deribit.py +8 -8
  140. ccxt/digifinex.py +5 -5
  141. ccxt/exmo.py +1 -1
  142. ccxt/gate.py +5 -5
  143. ccxt/gemini.py +1 -1
  144. ccxt/hitbtc.py +3 -3
  145. ccxt/hollaex.py +4 -4
  146. ccxt/htx.py +2 -2
  147. ccxt/huobijp.py +1 -1
  148. ccxt/idex.py +1 -1
  149. ccxt/independentreserve.py +1 -1
  150. ccxt/indodax.py +2 -2
  151. ccxt/kraken.py +2 -2
  152. ccxt/krakenfutures.py +3 -3
  153. ccxt/kucoin.py +3 -3
  154. ccxt/kucoinfutures.py +3 -3
  155. ccxt/kuna.py +1 -1
  156. ccxt/latoken.py +6 -6
  157. ccxt/lbank.py +1 -1
  158. ccxt/luno.py +1 -1
  159. ccxt/lykke.py +1 -1
  160. ccxt/mercado.py +1 -1
  161. ccxt/mexc.py +7 -7
  162. ccxt/ndax.py +1 -1
  163. ccxt/novadax.py +3 -4
  164. ccxt/okcoin.py +3 -3
  165. ccxt/okx.py +27 -10
  166. ccxt/onetrading.py +1 -1
  167. ccxt/paymium.py +3 -3
  168. ccxt/phemex.py +5 -5
  169. ccxt/poloniex.py +3 -4
  170. ccxt/poloniexfutures.py +1 -1
  171. ccxt/pro/__init__.py +3 -1
  172. ccxt/pro/bitget.py +127 -190
  173. ccxt/pro/coinbaseinternational.py +11 -4
  174. ccxt/pro/okx.py +79 -1
  175. ccxt/pro/woofipro.py +1183 -0
  176. ccxt/probit.py +1 -1
  177. ccxt/test/test_async.py +31 -1
  178. ccxt/test/test_sync.py +31 -1
  179. ccxt/timex.py +1 -1
  180. ccxt/tokocrypto.py +1 -1
  181. ccxt/upbit.py +1 -1
  182. ccxt/wavesexchange.py +3 -3
  183. ccxt/wazirx.py +1 -1
  184. ccxt/whitebit.py +2 -2
  185. ccxt/woo.py +25 -10
  186. ccxt/woofipro.py +2524 -0
  187. ccxt/yobit.py +1 -1
  188. ccxt/zaif.py +1 -1
  189. ccxt/zonda.py +3 -3
  190. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/METADATA +8 -6
  191. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/RECORD +193 -189
  192. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/WHEEL +0 -0
  193. {ccxt-4.3.18.dist-info → ccxt-4.3.19.dist-info}/top_level.txt +0 -0
ccxt/__init__.py CHANGED
@@ -22,7 +22,7 @@
22
22
 
23
23
  # ----------------------------------------------------------------------------
24
24
 
25
- __version__ = '4.3.18'
25
+ __version__ = '4.3.19'
26
26
 
27
27
  # ----------------------------------------------------------------------------
28
28
 
@@ -180,6 +180,7 @@ from ccxt.wavesexchange import wavesexchange # noqa: F4
180
180
  from ccxt.wazirx import wazirx # noqa: F401
181
181
  from ccxt.whitebit import whitebit # noqa: F401
182
182
  from ccxt.woo import woo # noqa: F401
183
+ from ccxt.woofipro import woofipro # noqa: F401
183
184
  from ccxt.yobit import yobit # noqa: F401
184
185
  from ccxt.zaif import zaif # noqa: F401
185
186
  from ccxt.zonda import zonda # noqa: F401
@@ -285,6 +286,7 @@ exchanges = [
285
286
  'wazirx',
286
287
  'whitebit',
287
288
  'woo',
289
+ 'woofipro',
288
290
  'yobit',
289
291
  'zaif',
290
292
  'zonda',
ccxt/abstract/bybit.py CHANGED
@@ -150,6 +150,7 @@ class ImplicitAPI:
150
150
  private_get_v5_asset_coin_query_info = privateGetV5AssetCoinQueryInfo = Entry('v5/asset/coin/query-info', 'private', 'GET', {'cost': 28})
151
151
  private_get_v5_asset_withdraw_query_record = privateGetV5AssetWithdrawQueryRecord = Entry('v5/asset/withdraw/query-record', 'private', 'GET', {'cost': 10})
152
152
  private_get_v5_asset_withdraw_withdrawable_amount = privateGetV5AssetWithdrawWithdrawableAmount = Entry('v5/asset/withdraw/withdrawable-amount', 'private', 'GET', {'cost': 5})
153
+ private_get_v5_asset_withdraw_vasp_list = privateGetV5AssetWithdrawVaspList = Entry('v5/asset/withdraw/vasp/list', 'private', 'GET', {'cost': 5})
153
154
  private_get_v5_user_query_sub_members = privateGetV5UserQuerySubMembers = Entry('v5/user/query-sub-members', 'private', 'GET', {'cost': 5})
154
155
  private_get_v5_user_query_api = privateGetV5UserQueryApi = Entry('v5/user/query-api', 'private', 'GET', {'cost': 5})
155
156
  private_get_v5_user_sub_apikeys = privateGetV5UserSubApikeys = Entry('v5/user/sub-apikeys', 'private', 'GET', {'cost': 5})
ccxt/abstract/okx.py CHANGED
@@ -267,6 +267,7 @@ class ImplicitAPI:
267
267
  private_post_tradingbot_grid_compute_margin_balance = privatePostTradingBotGridComputeMarginBalance = Entry('tradingBot/grid/compute-margin-balance', 'private', 'POST', {'cost': 1})
268
268
  private_post_tradingbot_grid_margin_balance = privatePostTradingBotGridMarginBalance = Entry('tradingBot/grid/margin-balance', 'private', 'POST', {'cost': 1})
269
269
  private_post_tradingbot_grid_min_investment = privatePostTradingBotGridMinInvestment = Entry('tradingBot/grid/min-investment', 'private', 'POST', {'cost': 1})
270
+ private_post_tradingbot_grid_adjust_investment = privatePostTradingBotGridAdjustInvestment = Entry('tradingBot/grid/adjust-investment', 'private', 'POST', {'cost': 1})
270
271
  private_post_tradingbot_signal_create_signal = privatePostTradingBotSignalCreateSignal = Entry('tradingBot/signal/create-signal', 'private', 'POST', {'cost': 1})
271
272
  private_post_tradingbot_signal_order_algo = privatePostTradingBotSignalOrderAlgo = Entry('tradingBot/signal/order-algo', 'private', 'POST', {'cost': 1})
272
273
  private_post_tradingbot_signal_stop_order_algo = privatePostTradingBotSignalStopOrderAlgo = Entry('tradingBot/signal/stop-order-algo', 'private', 'POST', {'cost': 1})
@@ -0,0 +1,119 @@
1
+ from ccxt.base.types import Entry
2
+
3
+
4
+ class ImplicitAPI:
5
+ v1_public_get_public_volume_stats = v1PublicGetPublicVolumeStats = Entry('public/volume/stats', ['v1', 'public'], 'GET', {'cost': 1})
6
+ v1_public_get_public_broker_name = v1PublicGetPublicBrokerName = Entry('public/broker/name', ['v1', 'public'], 'GET', {'cost': 1})
7
+ v1_public_get_public_chain_info_broker_id = v1PublicGetPublicChainInfoBrokerId = Entry('public/chain_info/{broker_id}', ['v1', 'public'], 'GET', {'cost': 1})
8
+ v1_public_get_public_system_info = v1PublicGetPublicSystemInfo = Entry('public/system_info', ['v1', 'public'], 'GET', {'cost': 1})
9
+ v1_public_get_public_vault_balance = v1PublicGetPublicVaultBalance = Entry('public/vault_balance', ['v1', 'public'], 'GET', {'cost': 1})
10
+ v1_public_get_public_insurancefund = v1PublicGetPublicInsurancefund = Entry('public/insurancefund', ['v1', 'public'], 'GET', {'cost': 1})
11
+ v1_public_get_public_chain_info = v1PublicGetPublicChainInfo = Entry('public/chain_info', ['v1', 'public'], 'GET', {'cost': 1})
12
+ v1_public_get_faucet_usdc = v1PublicGetFaucetUsdc = Entry('faucet/usdc', ['v1', 'public'], 'GET', {'cost': 1})
13
+ v1_public_get_public_account = v1PublicGetPublicAccount = Entry('public/account', ['v1', 'public'], 'GET', {'cost': 1})
14
+ v1_public_get_get_account = v1PublicGetGetAccount = Entry('get_account', ['v1', 'public'], 'GET', {'cost': 1})
15
+ v1_public_get_registration_nonce = v1PublicGetRegistrationNonce = Entry('registration_nonce', ['v1', 'public'], 'GET', {'cost': 1})
16
+ v1_public_get_get_orderly_key = v1PublicGetGetOrderlyKey = Entry('get_orderly_key', ['v1', 'public'], 'GET', {'cost': 1})
17
+ v1_public_get_public_liquidation = v1PublicGetPublicLiquidation = Entry('public/liquidation', ['v1', 'public'], 'GET', {'cost': 1})
18
+ v1_public_get_public_liquidated_positions = v1PublicGetPublicLiquidatedPositions = Entry('public/liquidated_positions', ['v1', 'public'], 'GET', {'cost': 1})
19
+ v1_public_get_public_config = v1PublicGetPublicConfig = Entry('public/config', ['v1', 'public'], 'GET', {'cost': 1})
20
+ v1_public_get_public_campaign_ranking = v1PublicGetPublicCampaignRanking = Entry('public/campaign/ranking', ['v1', 'public'], 'GET', {'cost': 10})
21
+ v1_public_get_public_campaign_stats = v1PublicGetPublicCampaignStats = Entry('public/campaign/stats', ['v1', 'public'], 'GET', {'cost': 10})
22
+ v1_public_get_public_campaign_user = v1PublicGetPublicCampaignUser = Entry('public/campaign/user', ['v1', 'public'], 'GET', {'cost': 10})
23
+ v1_public_get_public_campaign_stats_details = v1PublicGetPublicCampaignStatsDetails = Entry('public/campaign/stats/details', ['v1', 'public'], 'GET', {'cost': 10})
24
+ v1_public_get_public_campaigns = v1PublicGetPublicCampaigns = Entry('public/campaigns', ['v1', 'public'], 'GET', {'cost': 10})
25
+ v1_public_get_public_points_leaderboard = v1PublicGetPublicPointsLeaderboard = Entry('public/points/leaderboard', ['v1', 'public'], 'GET', {'cost': 1})
26
+ v1_public_get_client_points = v1PublicGetClientPoints = Entry('client/points', ['v1', 'public'], 'GET', {'cost': 1})
27
+ v1_public_get_public_points_epoch = v1PublicGetPublicPointsEpoch = Entry('public/points/epoch', ['v1', 'public'], 'GET', {'cost': 1})
28
+ v1_public_get_public_points_epoch_dates = v1PublicGetPublicPointsEpochDates = Entry('public/points/epoch_dates', ['v1', 'public'], 'GET', {'cost': 1})
29
+ v1_public_get_public_referral_check_ref_code = v1PublicGetPublicReferralCheckRefCode = Entry('public/referral/check_ref_code', ['v1', 'public'], 'GET', {'cost': 1})
30
+ v1_public_get_public_referral_verify_ref_code = v1PublicGetPublicReferralVerifyRefCode = Entry('public/referral/verify_ref_code', ['v1', 'public'], 'GET', {'cost': 1})
31
+ v1_public_get_referral_admin_info = v1PublicGetReferralAdminInfo = Entry('referral/admin_info', ['v1', 'public'], 'GET', {'cost': 1})
32
+ v1_public_get_referral_info = v1PublicGetReferralInfo = Entry('referral/info', ['v1', 'public'], 'GET', {'cost': 1})
33
+ v1_public_get_referral_referee_info = v1PublicGetReferralRefereeInfo = Entry('referral/referee_info', ['v1', 'public'], 'GET', {'cost': 1})
34
+ v1_public_get_referral_referee_rebate_summary = v1PublicGetReferralRefereeRebateSummary = Entry('referral/referee_rebate_summary', ['v1', 'public'], 'GET', {'cost': 1})
35
+ v1_public_get_referral_referee_history = v1PublicGetReferralRefereeHistory = Entry('referral/referee_history', ['v1', 'public'], 'GET', {'cost': 1})
36
+ v1_public_get_referral_referral_history = v1PublicGetReferralReferralHistory = Entry('referral/referral_history', ['v1', 'public'], 'GET', {'cost': 1})
37
+ v1_public_get_referral_rebate_summary = v1PublicGetReferralRebateSummary = Entry('referral/rebate_summary', ['v1', 'public'], 'GET', {'cost': 1})
38
+ v1_public_get_client_distribution_history = v1PublicGetClientDistributionHistory = Entry('client/distribution_history', ['v1', 'public'], 'GET', {'cost': 1})
39
+ v1_public_get_tv_config = v1PublicGetTvConfig = Entry('tv/config', ['v1', 'public'], 'GET', {'cost': 1})
40
+ v1_public_get_tv_history = v1PublicGetTvHistory = Entry('tv/history', ['v1', 'public'], 'GET', {'cost': 1})
41
+ v1_public_get_tv_symbol_info = v1PublicGetTvSymbolInfo = Entry('tv/symbol_info', ['v1', 'public'], 'GET', {'cost': 1})
42
+ v1_public_get_public_funding_rate_history = v1PublicGetPublicFundingRateHistory = Entry('public/funding_rate_history', ['v1', 'public'], 'GET', {'cost': 1})
43
+ v1_public_get_public_funding_rate_symbol = v1PublicGetPublicFundingRateSymbol = Entry('public/funding_rate/{symbol}', ['v1', 'public'], 'GET', {'cost': 0.33})
44
+ v1_public_get_public_funding_rates = v1PublicGetPublicFundingRates = Entry('public/funding_rates', ['v1', 'public'], 'GET', {'cost': 1})
45
+ v1_public_get_public_info = v1PublicGetPublicInfo = Entry('public/info', ['v1', 'public'], 'GET', {'cost': 1})
46
+ v1_public_get_public_info_symbol = v1PublicGetPublicInfoSymbol = Entry('public/info/{symbol}', ['v1', 'public'], 'GET', {'cost': 1})
47
+ v1_public_get_public_market_trades = v1PublicGetPublicMarketTrades = Entry('public/market_trades', ['v1', 'public'], 'GET', {'cost': 1})
48
+ v1_public_get_public_token = v1PublicGetPublicToken = Entry('public/token', ['v1', 'public'], 'GET', {'cost': 1})
49
+ v1_public_get_public_futures = v1PublicGetPublicFutures = Entry('public/futures', ['v1', 'public'], 'GET', {'cost': 1})
50
+ v1_public_get_public_futures_symbol = v1PublicGetPublicFuturesSymbol = Entry('public/futures/{symbol}', ['v1', 'public'], 'GET', {'cost': 1})
51
+ v1_public_post_register_account = v1PublicPostRegisterAccount = Entry('register_account', ['v1', 'public'], 'POST', {'cost': 1})
52
+ v1_private_get_client_key_info = v1PrivateGetClientKeyInfo = Entry('client/key_info', ['v1', 'private'], 'GET', {'cost': 6})
53
+ v1_private_get_client_orderly_key_ip_restriction = v1PrivateGetClientOrderlyKeyIpRestriction = Entry('client/orderly_key_ip_restriction', ['v1', 'private'], 'GET', {'cost': 6})
54
+ v1_private_get_order_oid = v1PrivateGetOrderOid = Entry('order/{oid}', ['v1', 'private'], 'GET', {'cost': 1})
55
+ v1_private_get_client_order_client_order_id = v1PrivateGetClientOrderClientOrderId = Entry('client/order/{client_order_id}', ['v1', 'private'], 'GET', {'cost': 1})
56
+ v1_private_get_algo_order_oid = v1PrivateGetAlgoOrderOid = Entry('algo/order/{oid}', ['v1', 'private'], 'GET', {'cost': 1})
57
+ v1_private_get_algo_client_order_client_order_id = v1PrivateGetAlgoClientOrderClientOrderId = Entry('algo/client/order/{client_order_id}', ['v1', 'private'], 'GET', {'cost': 1})
58
+ v1_private_get_orders = v1PrivateGetOrders = Entry('orders', ['v1', 'private'], 'GET', {'cost': 1})
59
+ v1_private_get_algo_orders = v1PrivateGetAlgoOrders = Entry('algo/orders', ['v1', 'private'], 'GET', {'cost': 1})
60
+ v1_private_get_trade_tid = v1PrivateGetTradeTid = Entry('trade/{tid}', ['v1', 'private'], 'GET', {'cost': 1})
61
+ v1_private_get_trades = v1PrivateGetTrades = Entry('trades', ['v1', 'private'], 'GET', {'cost': 1})
62
+ v1_private_get_order_oid_trades = v1PrivateGetOrderOidTrades = Entry('order/{oid}/trades', ['v1', 'private'], 'GET', {'cost': 1})
63
+ v1_private_get_client_liquidator_liquidations = v1PrivateGetClientLiquidatorLiquidations = Entry('client/liquidator_liquidations', ['v1', 'private'], 'GET', {'cost': 1})
64
+ v1_private_get_liquidations = v1PrivateGetLiquidations = Entry('liquidations', ['v1', 'private'], 'GET', {'cost': 1})
65
+ v1_private_get_asset_history = v1PrivateGetAssetHistory = Entry('asset/history', ['v1', 'private'], 'GET', {'cost': 60})
66
+ v1_private_get_client_holding = v1PrivateGetClientHolding = Entry('client/holding', ['v1', 'private'], 'GET', {'cost': 1})
67
+ v1_private_get_withdraw_nonce = v1PrivateGetWithdrawNonce = Entry('withdraw_nonce', ['v1', 'private'], 'GET', {'cost': 1})
68
+ v1_private_get_settle_nonce = v1PrivateGetSettleNonce = Entry('settle_nonce', ['v1', 'private'], 'GET', {'cost': 1})
69
+ v1_private_get_pnl_settlement_history = v1PrivateGetPnlSettlementHistory = Entry('pnl_settlement/history', ['v1', 'private'], 'GET', {'cost': 1})
70
+ v1_private_get_volume_user_daily = v1PrivateGetVolumeUserDaily = Entry('volume/user/daily', ['v1', 'private'], 'GET', {'cost': 60})
71
+ v1_private_get_volume_user_stats = v1PrivateGetVolumeUserStats = Entry('volume/user/stats', ['v1', 'private'], 'GET', {'cost': 60})
72
+ v1_private_get_client_statistics = v1PrivateGetClientStatistics = Entry('client/statistics', ['v1', 'private'], 'GET', {'cost': 60})
73
+ v1_private_get_client_info = v1PrivateGetClientInfo = Entry('client/info', ['v1', 'private'], 'GET', {'cost': 60})
74
+ v1_private_get_client_statistics_daily = v1PrivateGetClientStatisticsDaily = Entry('client/statistics/daily', ['v1', 'private'], 'GET', {'cost': 60})
75
+ v1_private_get_positions = v1PrivateGetPositions = Entry('positions', ['v1', 'private'], 'GET', {'cost': 3.33})
76
+ v1_private_get_position_symbol = v1PrivateGetPositionSymbol = Entry('position/{symbol}', ['v1', 'private'], 'GET', {'cost': 3.33})
77
+ v1_private_get_funding_fee_history = v1PrivateGetFundingFeeHistory = Entry('funding_fee/history', ['v1', 'private'], 'GET', {'cost': 30})
78
+ v1_private_get_notification_inbox_notifications = v1PrivateGetNotificationInboxNotifications = Entry('notification/inbox/notifications', ['v1', 'private'], 'GET', {'cost': 60})
79
+ v1_private_get_notification_inbox_unread = v1PrivateGetNotificationInboxUnread = Entry('notification/inbox/unread', ['v1', 'private'], 'GET', {'cost': 60})
80
+ v1_private_get_volume_broker_daily = v1PrivateGetVolumeBrokerDaily = Entry('volume/broker/daily', ['v1', 'private'], 'GET', {'cost': 60})
81
+ v1_private_get_broker_fee_rate_default = v1PrivateGetBrokerFeeRateDefault = Entry('broker/fee_rate/default', ['v1', 'private'], 'GET', {'cost': 10})
82
+ v1_private_get_broker_user_info = v1PrivateGetBrokerUserInfo = Entry('broker/user_info', ['v1', 'private'], 'GET', {'cost': 10})
83
+ v1_private_get_orderbook_symbol = v1PrivateGetOrderbookSymbol = Entry('orderbook/{symbol}', ['v1', 'private'], 'GET', {'cost': 1})
84
+ v1_private_get_kline = v1PrivateGetKline = Entry('kline', ['v1', 'private'], 'GET', {'cost': 1})
85
+ v1_private_post_orderly_key = v1PrivatePostOrderlyKey = Entry('orderly_key', ['v1', 'private'], 'POST', {'cost': 1})
86
+ v1_private_post_client_set_orderly_key_ip_restriction = v1PrivatePostClientSetOrderlyKeyIpRestriction = Entry('client/set_orderly_key_ip_restriction', ['v1', 'private'], 'POST', {'cost': 6})
87
+ v1_private_post_client_reset_orderly_key_ip_restriction = v1PrivatePostClientResetOrderlyKeyIpRestriction = Entry('client/reset_orderly_key_ip_restriction', ['v1', 'private'], 'POST', {'cost': 6})
88
+ v1_private_post_order = v1PrivatePostOrder = Entry('order', ['v1', 'private'], 'POST', {'cost': 1})
89
+ v1_private_post_batch_order = v1PrivatePostBatchOrder = Entry('batch-order', ['v1', 'private'], 'POST', {'cost': 10})
90
+ v1_private_post_algo_order = v1PrivatePostAlgoOrder = Entry('algo/order', ['v1', 'private'], 'POST', {'cost': 1})
91
+ v1_private_post_liquidation = v1PrivatePostLiquidation = Entry('liquidation', ['v1', 'private'], 'POST', {'cost': 1})
92
+ v1_private_post_claim_insurance_fund = v1PrivatePostClaimInsuranceFund = Entry('claim_insurance_fund', ['v1', 'private'], 'POST', {'cost': 1})
93
+ v1_private_post_withdraw_request = v1PrivatePostWithdrawRequest = Entry('withdraw_request', ['v1', 'private'], 'POST', {'cost': 1})
94
+ v1_private_post_settle_pnl = v1PrivatePostSettlePnl = Entry('settle_pnl', ['v1', 'private'], 'POST', {'cost': 1})
95
+ v1_private_post_notification_inbox_mark_read = v1PrivatePostNotificationInboxMarkRead = Entry('notification/inbox/mark_read', ['v1', 'private'], 'POST', {'cost': 60})
96
+ v1_private_post_notification_inbox_mark_read_all = v1PrivatePostNotificationInboxMarkReadAll = Entry('notification/inbox/mark_read_all', ['v1', 'private'], 'POST', {'cost': 60})
97
+ v1_private_post_client_leverage = v1PrivatePostClientLeverage = Entry('client/leverage', ['v1', 'private'], 'POST', {'cost': 120})
98
+ v1_private_post_client_maintenance_config = v1PrivatePostClientMaintenanceConfig = Entry('client/maintenance_config', ['v1', 'private'], 'POST', {'cost': 60})
99
+ v1_private_post_delegate_signer = v1PrivatePostDelegateSigner = Entry('delegate_signer', ['v1', 'private'], 'POST', {'cost': 10})
100
+ v1_private_post_delegate_orderly_key = v1PrivatePostDelegateOrderlyKey = Entry('delegate_orderly_key', ['v1', 'private'], 'POST', {'cost': 10})
101
+ v1_private_post_delegate_settle_pnl = v1PrivatePostDelegateSettlePnl = Entry('delegate_settle_pnl', ['v1', 'private'], 'POST', {'cost': 10})
102
+ v1_private_post_delegate_withdraw_request = v1PrivatePostDelegateWithdrawRequest = Entry('delegate_withdraw_request', ['v1', 'private'], 'POST', {'cost': 10})
103
+ v1_private_post_broker_fee_rate_set = v1PrivatePostBrokerFeeRateSet = Entry('broker/fee_rate/set', ['v1', 'private'], 'POST', {'cost': 10})
104
+ v1_private_post_broker_fee_rate_set_default = v1PrivatePostBrokerFeeRateSetDefault = Entry('broker/fee_rate/set_default', ['v1', 'private'], 'POST', {'cost': 10})
105
+ v1_private_post_broker_fee_rate_default = v1PrivatePostBrokerFeeRateDefault = Entry('broker/fee_rate/default', ['v1', 'private'], 'POST', {'cost': 10})
106
+ v1_private_post_referral_create = v1PrivatePostReferralCreate = Entry('referral/create', ['v1', 'private'], 'POST', {'cost': 10})
107
+ v1_private_post_referral_update = v1PrivatePostReferralUpdate = Entry('referral/update', ['v1', 'private'], 'POST', {'cost': 10})
108
+ v1_private_post_referral_bind = v1PrivatePostReferralBind = Entry('referral/bind', ['v1', 'private'], 'POST', {'cost': 10})
109
+ v1_private_post_referral_edit_split = v1PrivatePostReferralEditSplit = Entry('referral/edit_split', ['v1', 'private'], 'POST', {'cost': 10})
110
+ v1_private_put_order = v1PrivatePutOrder = Entry('order', ['v1', 'private'], 'PUT', {'cost': 1})
111
+ v1_private_put_algo_order = v1PrivatePutAlgoOrder = Entry('algo/order', ['v1', 'private'], 'PUT', {'cost': 1})
112
+ v1_private_delete_order = v1PrivateDeleteOrder = Entry('order', ['v1', 'private'], 'DELETE', {'cost': 1})
113
+ v1_private_delete_algo_order = v1PrivateDeleteAlgoOrder = Entry('algo/order', ['v1', 'private'], 'DELETE', {'cost': 1})
114
+ v1_private_delete_client_order = v1PrivateDeleteClientOrder = Entry('client/order', ['v1', 'private'], 'DELETE', {'cost': 1})
115
+ v1_private_delete_algo_client_order = v1PrivateDeleteAlgoClientOrder = Entry('algo/client/order', ['v1', 'private'], 'DELETE', {'cost': 1})
116
+ v1_private_delete_algo_orders = v1PrivateDeleteAlgoOrders = Entry('algo/orders', ['v1', 'private'], 'DELETE', {'cost': 1})
117
+ v1_private_delete_orders = v1PrivateDeleteOrders = Entry('orders', ['v1', 'private'], 'DELETE', {'cost': 1})
118
+ v1_private_delete_batch_order = v1PrivateDeleteBatchOrder = Entry('batch-order', ['v1', 'private'], 'DELETE', {'cost': 1})
119
+ v1_private_delete_client_batch_order = v1PrivateDeleteClientBatchOrder = Entry('client/batch-order', ['v1', 'private'], 'DELETE', {'cost': 1})
ccxt/ace.py CHANGED
@@ -259,7 +259,7 @@ class ace(Exchange, ImplicitAPI):
259
259
  'info': market,
260
260
  }
261
261
 
262
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
262
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
263
263
  #
264
264
  # {
265
265
  # "base_volume":229196.34035399999,
ccxt/ascendex.py CHANGED
@@ -938,7 +938,7 @@ class ascendex(Exchange, ImplicitAPI):
938
938
  result['nonce'] = self.safe_integer(orderbook, 'seqnum')
939
939
  return result
940
940
 
941
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
941
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
942
942
  #
943
943
  # {
944
944
  # "symbol":"QTUM/BTC",
@@ -2995,7 +2995,6 @@ class ascendex(Exchange, ImplicitAPI):
2995
2995
  account = self.safe_value(self.accounts, 0, {})
2996
2996
  accountGroup = self.safe_string(account, 'id')
2997
2997
  currency = self.currency(code)
2998
- amount = self.currency_to_precision(code, amount)
2999
2998
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
3000
2999
  fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
3001
3000
  toId = self.safe_string(accountsByType, toAccount, toAccount)
@@ -3003,7 +3002,7 @@ class ascendex(Exchange, ImplicitAPI):
3003
3002
  raise ExchangeError(self.id + ' transfer() only supports direct balance transfer between spot and swap, spot and margin')
3004
3003
  request = {
3005
3004
  'account-group': accountGroup,
3006
- 'amount': amount,
3005
+ 'amount': self.currency_to_precision(code, amount),
3007
3006
  'asset': currency['id'],
3008
3007
  'fromAccount': fromId,
3009
3008
  'toAccount': toId,
@@ -3022,11 +3021,11 @@ class ascendex(Exchange, ImplicitAPI):
3022
3021
  transfer['currency'] = code
3023
3022
  return transfer
3024
3023
 
3025
- def parse_transfer(self, transfer, currency: Currency = None):
3024
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
3026
3025
  #
3027
3026
  # {"code": "0"}
3028
3027
  #
3029
- status = self.safe_integer(transfer, 'code')
3028
+ status = self.safe_string(transfer, 'code')
3030
3029
  currencyCode = self.safe_currency_code(None, currency)
3031
3030
  return {
3032
3031
  'info': transfer,
@@ -3040,8 +3039,8 @@ class ascendex(Exchange, ImplicitAPI):
3040
3039
  'status': self.parse_transfer_status(status),
3041
3040
  }
3042
3041
 
3043
- def parse_transfer_status(self, status):
3044
- if status == 0:
3042
+ def parse_transfer_status(self, status: Str) -> Str:
3043
+ if status == '0':
3045
3044
  return 'ok'
3046
3045
  return 'failed'
3047
3046
 
@@ -3245,7 +3244,7 @@ class ascendex(Exchange, ImplicitAPI):
3245
3244
  leverages = self.safe_list(data, 'contracts', [])
3246
3245
  return self.parse_leverages(leverages, symbols, 'symbol')
3247
3246
 
3248
- def parse_leverage(self, leverage, market=None) -> Leverage:
3247
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
3249
3248
  marketId = self.safe_string(leverage, 'symbol')
3250
3249
  leverageValue = self.safe_integer(leverage, 'leverage')
3251
3250
  marginType = self.safe_string(leverage, 'marginType')
@@ -4,7 +4,7 @@
4
4
 
5
5
  # -----------------------------------------------------------------------------
6
6
 
7
- __version__ = '4.3.18'
7
+ __version__ = '4.3.19'
8
8
 
9
9
  # -----------------------------------------------------------------------------
10
10
 
@@ -160,6 +160,7 @@ from ccxt.async_support.wavesexchange import wavesexchange
160
160
  from ccxt.async_support.wazirx import wazirx # noqa: F401
161
161
  from ccxt.async_support.whitebit import whitebit # noqa: F401
162
162
  from ccxt.async_support.woo import woo # noqa: F401
163
+ from ccxt.async_support.woofipro import woofipro # noqa: F401
163
164
  from ccxt.async_support.yobit import yobit # noqa: F401
164
165
  from ccxt.async_support.zaif import zaif # noqa: F401
165
166
  from ccxt.async_support.zonda import zonda # noqa: F401
@@ -265,6 +266,7 @@ exchanges = [
265
266
  'wazirx',
266
267
  'whitebit',
267
268
  'woo',
269
+ 'woofipro',
268
270
  'yobit',
269
271
  'zaif',
270
272
  'zonda',
ccxt/async_support/ace.py CHANGED
@@ -259,7 +259,7 @@ class ace(Exchange, ImplicitAPI):
259
259
  'info': market,
260
260
  }
261
261
 
262
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
262
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
263
263
  #
264
264
  # {
265
265
  # "base_volume":229196.34035399999,
@@ -938,7 +938,7 @@ class ascendex(Exchange, ImplicitAPI):
938
938
  result['nonce'] = self.safe_integer(orderbook, 'seqnum')
939
939
  return result
940
940
 
941
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
941
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
942
942
  #
943
943
  # {
944
944
  # "symbol":"QTUM/BTC",
@@ -2995,7 +2995,6 @@ class ascendex(Exchange, ImplicitAPI):
2995
2995
  account = self.safe_value(self.accounts, 0, {})
2996
2996
  accountGroup = self.safe_string(account, 'id')
2997
2997
  currency = self.currency(code)
2998
- amount = self.currency_to_precision(code, amount)
2999
2998
  accountsByType = self.safe_value(self.options, 'accountsByType', {})
3000
2999
  fromId = self.safe_string(accountsByType, fromAccount, fromAccount)
3001
3000
  toId = self.safe_string(accountsByType, toAccount, toAccount)
@@ -3003,7 +3002,7 @@ class ascendex(Exchange, ImplicitAPI):
3003
3002
  raise ExchangeError(self.id + ' transfer() only supports direct balance transfer between spot and swap, spot and margin')
3004
3003
  request = {
3005
3004
  'account-group': accountGroup,
3006
- 'amount': amount,
3005
+ 'amount': self.currency_to_precision(code, amount),
3007
3006
  'asset': currency['id'],
3008
3007
  'fromAccount': fromId,
3009
3008
  'toAccount': toId,
@@ -3022,11 +3021,11 @@ class ascendex(Exchange, ImplicitAPI):
3022
3021
  transfer['currency'] = code
3023
3022
  return transfer
3024
3023
 
3025
- def parse_transfer(self, transfer, currency: Currency = None):
3024
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
3026
3025
  #
3027
3026
  # {"code": "0"}
3028
3027
  #
3029
- status = self.safe_integer(transfer, 'code')
3028
+ status = self.safe_string(transfer, 'code')
3030
3029
  currencyCode = self.safe_currency_code(None, currency)
3031
3030
  return {
3032
3031
  'info': transfer,
@@ -3040,8 +3039,8 @@ class ascendex(Exchange, ImplicitAPI):
3040
3039
  'status': self.parse_transfer_status(status),
3041
3040
  }
3042
3041
 
3043
- def parse_transfer_status(self, status):
3044
- if status == 0:
3042
+ def parse_transfer_status(self, status: Str) -> Str:
3043
+ if status == '0':
3045
3044
  return 'ok'
3046
3045
  return 'failed'
3047
3046
 
@@ -3245,7 +3244,7 @@ class ascendex(Exchange, ImplicitAPI):
3245
3244
  leverages = self.safe_list(data, 'contracts', [])
3246
3245
  return self.parse_leverages(leverages, symbols, 'symbol')
3247
3246
 
3248
- def parse_leverage(self, leverage, market=None) -> Leverage:
3247
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
3249
3248
  marketId = self.safe_string(leverage, 'symbol')
3250
3249
  leverageValue = self.safe_integer(leverage, 'leverage')
3251
3250
  marginType = self.safe_string(leverage, 'marginType')
@@ -2,7 +2,7 @@
2
2
 
3
3
  # -----------------------------------------------------------------------------
4
4
 
5
- __version__ = '4.3.18'
5
+ __version__ = '4.3.19'
6
6
 
7
7
  # -----------------------------------------------------------------------------
8
8
 
@@ -888,7 +888,7 @@ class Exchange(BaseExchange):
888
888
  async def fetch_positions_risk(self, symbols: List[str] = None, params={}):
889
889
  raise NotSupported(self.id + ' fetchPositionsRisk() is not supported yet')
890
890
 
891
- async def fetch_bids_asks(self, symbols: List[str] = None, params={}):
891
+ async def fetch_bids_asks(self, symbols: Strings = None, params={}):
892
892
  raise NotSupported(self.id + ' fetchBidsAsks() is not supported yet')
893
893
 
894
894
  async def fetch_borrow_interest(self, code: Str = None, symbol: Str = None, since: Int = None, limit: Int = None, params={}):
@@ -1924,3 +1924,24 @@ class Exchange(BaseExchange):
1924
1924
  :returns dict[]: a list of `position structures <https://docs.ccxt.com/#/?id=position-structure>`
1925
1925
  """
1926
1926
  raise NotSupported(self.id + ' fetchPositionsHistory() is not supported yet')
1927
+
1928
+ async def fetch_transfer(self, id: str, code: Str = None, params={}):
1929
+ """
1930
+ fetches a transfer
1931
+ :param str id: transfer id
1932
+ :param [str] code: unified currency code
1933
+ :param dict params: extra parameters specific to the exchange api endpoint
1934
+ :returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
1935
+ """
1936
+ raise NotSupported(self.id + ' fetchTransfer() is not supported yet')
1937
+
1938
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
1939
+ """
1940
+ fetches a transfer
1941
+ :param str id: transfer id
1942
+ :param int [since]: timestamp in ms of the earliest transfer to fetch
1943
+ :param int [limit]: the maximum amount of transfers to fetch
1944
+ :param dict params: extra parameters specific to the exchange api endpoint
1945
+ :returns dict: a `transfer structure <https://docs.ccxt.com/#/?id=transfer-structure>`
1946
+ """
1947
+ raise NotSupported(self.id + ' fetchTransfers() is not supported yet')
@@ -702,7 +702,7 @@ class bigone(Exchange, ImplicitAPI):
702
702
  }))
703
703
  return result
704
704
 
705
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
705
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
706
706
  #
707
707
  # spot
708
708
  #
@@ -2018,14 +2018,14 @@ class bigone(Exchange, ImplicitAPI):
2018
2018
  transfer['id'] = guid
2019
2019
  return transfer
2020
2020
 
2021
- def parse_transfer(self, transfer, currency: Currency = None):
2021
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
2022
2022
  #
2023
2023
  # {
2024
2024
  # "code": 0,
2025
2025
  # "data": null
2026
2026
  # }
2027
2027
  #
2028
- code = self.safe_number(transfer, 'code')
2028
+ code = self.safe_string(transfer, 'code')
2029
2029
  return {
2030
2030
  'info': transfer,
2031
2031
  'id': None,
@@ -2038,7 +2038,7 @@ class bigone(Exchange, ImplicitAPI):
2038
2038
  'status': self.parse_transfer_status(code),
2039
2039
  }
2040
2040
 
2041
- def parse_transfer_status(self, status):
2041
+ def parse_transfer_status(self, status: Str) -> Str:
2042
2042
  statuses = {
2043
2043
  '0': 'ok',
2044
2044
  }
@@ -8,7 +8,7 @@ from ccxt.abstract.binance import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
10
  import json
11
- from ccxt.base.types import Balances, Conversion, CrossBorrowRate, Currencies, Currency, Greeks, Int, IsolatedBorrowRate, IsolatedBorrowRates, Leverage, Leverages, MarginMode, MarginModes, MarginModification, Market, MarketInterface, Num, Option, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry
11
+ from ccxt.base.types import Balances, Conversion, CrossBorrowRate, Currencies, Currency, Greeks, Int, IsolatedBorrowRate, IsolatedBorrowRates, Leverage, Leverages, MarginMode, MarginModes, MarginModification, Market, MarketInterface, Num, Option, Order, OrderBook, OrderRequest, OrderSide, OrderType, Str, Strings, Ticker, Tickers, Trade, TradingFeeInterface, TradingFees, Transaction, TransferEntry, TransferEntries
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import AuthenticationError
@@ -3647,7 +3647,7 @@ class binance(Exchange, ImplicitAPI):
3647
3647
  orderbook['nonce'] = self.safe_integer_2(response, 'lastUpdateId', 'u')
3648
3648
  return orderbook
3649
3649
 
3650
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
3650
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
3651
3651
  #
3652
3652
  # {
3653
3653
  # "symbol": "ETHBTC",
@@ -7512,13 +7512,13 @@ class binance(Exchange, ImplicitAPI):
7512
7512
  'fee': fee,
7513
7513
  }
7514
7514
 
7515
- def parse_transfer_status(self, status):
7515
+ def parse_transfer_status(self, status: Str) -> Str:
7516
7516
  statuses = {
7517
7517
  'CONFIRMED': 'ok',
7518
7518
  }
7519
7519
  return self.safe_string(statuses, status, status)
7520
7520
 
7521
- def parse_transfer(self, transfer, currency: Currency = None):
7521
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
7522
7522
  #
7523
7523
  # transfer
7524
7524
  #
@@ -7676,7 +7676,7 @@ class binance(Exchange, ImplicitAPI):
7676
7676
  #
7677
7677
  return self.parse_transfer(response, currency)
7678
7678
 
7679
- async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
7679
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> TransferEntries:
7680
7680
  """
7681
7681
  fetch a history of internal transfers made on an account
7682
7682
  :see: https://binance-docs.github.io/apidocs/spot/en/#query-user-universal-transfer-history-user_data
@@ -9747,7 +9747,7 @@ class binance(Exchange, ImplicitAPI):
9747
9747
  leverages = self.safe_list(response, 'positions', [])
9748
9748
  return self.parse_leverages(leverages, symbols, 'symbol')
9749
9749
 
9750
- def parse_leverage(self, leverage, market=None) -> Leverage:
9750
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
9751
9751
  marketId = self.safe_string(leverage, 'symbol')
9752
9752
  marginModeRaw = self.safe_bool(leverage, 'isolated')
9753
9753
  marginMode = None
@@ -11341,7 +11341,7 @@ class binance(Exchange, ImplicitAPI):
11341
11341
  #
11342
11342
  return self.parse_greeks(response[0], market)
11343
11343
 
11344
- def parse_greeks(self, greeks, market: Market = None):
11344
+ def parse_greeks(self, greeks: dict, market: Market = None) -> Greeks:
11345
11345
  #
11346
11346
  # {
11347
11347
  # "symbol": "BTC-231229-40000-C",
@@ -11612,7 +11612,7 @@ class binance(Exchange, ImplicitAPI):
11612
11612
  chain = self.safe_dict(response, 0, {})
11613
11613
  return self.parse_option(chain, None, market)
11614
11614
 
11615
- def parse_option(self, chain, currency: Currency = None, market: Market = None):
11615
+ def parse_option(self, chain: dict, currency: Currency = None, market: Market = None) -> Option:
11616
11616
  #
11617
11617
  # {
11618
11618
  # "symbol": "BTC-241227-80000-C",
@@ -12001,7 +12001,7 @@ class binance(Exchange, ImplicitAPI):
12001
12001
  rows = self.safe_list(response, responseQuery, [])
12002
12002
  return self.parse_conversions(rows, code, fromCurrencyKey, toCurrencyKey, since, limit)
12003
12003
 
12004
- def parse_conversion(self, conversion, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
12004
+ def parse_conversion(self, conversion: dict, fromCurrency: Currency = None, toCurrency: Currency = None) -> Conversion:
12005
12005
  #
12006
12006
  # fetchConvertQuote
12007
12007
  #
@@ -8,7 +8,7 @@ from ccxt.abstract.bingx import ImplicitAPI
8
8
  import asyncio
9
9
  import hashlib
10
10
  import numbers
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
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, TransferEntries
12
12
  from typing import List
13
13
  from ccxt.base.errors import ExchangeError
14
14
  from ccxt.base.errors import AuthenticationError
@@ -3010,7 +3010,7 @@ class bingx(Exchange, ImplicitAPI):
3010
3010
  'status': None,
3011
3011
  }
3012
3012
 
3013
- async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}):
3013
+ async def fetch_transfers(self, code: Str = None, since: Int = None, limit: Int = None, params={}) -> TransferEntries:
3014
3014
  """
3015
3015
  fetch a history of internal transfers made on an account
3016
3016
  :see: https://bingx-api.github.io/docs/#/spot/account-api.html#Query%20User%20Universal%20Transfer%20History%20(USER_DATA)
@@ -3057,7 +3057,7 @@ class bingx(Exchange, ImplicitAPI):
3057
3057
  rows = self.safe_list(response, 'rows', [])
3058
3058
  return self.parse_transfers(rows, currency, since, limit)
3059
3059
 
3060
- def parse_transfer(self, transfer, currency: Currency = None):
3060
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
3061
3061
  tranId = self.safe_string(transfer, 'tranId')
3062
3062
  timestamp = self.safe_integer(transfer, 'timestamp')
3063
3063
  currencyCode = self.safe_currency_code(None, currency)
@@ -3487,7 +3487,7 @@ class bingx(Exchange, ImplicitAPI):
3487
3487
  data = self.safe_dict(response, 'data', {})
3488
3488
  return self.parse_leverage(data, market)
3489
3489
 
3490
- def parse_leverage(self, leverage, market=None) -> Leverage:
3490
+ def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
3491
3491
  marketId = self.safe_string(leverage, 'symbol')
3492
3492
  return {
3493
3493
  'info': leverage,
@@ -279,7 +279,7 @@ class bit2c(Exchange, ImplicitAPI):
279
279
  orderbook = await self.publicGetExchangesPairOrderbook(self.extend(request, params))
280
280
  return self.parse_order_book(orderbook, symbol)
281
281
 
282
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
282
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
283
283
  symbol = self.safe_symbol(None, market)
284
284
  averagePrice = self.safe_string(ticker, 'av')
285
285
  baseVolume = self.safe_string(ticker, 'a')
@@ -266,7 +266,7 @@ class bitbank(Exchange, ImplicitAPI):
266
266
  'info': entry,
267
267
  }
268
268
 
269
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
269
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
270
270
  symbol = self.safe_symbol(None, market)
271
271
  timestamp = self.safe_integer(ticker, 'timestamp')
272
272
  last = self.safe_string(ticker, 'last')
@@ -320,7 +320,7 @@ class bitbns(Exchange, ImplicitAPI):
320
320
  timestamp = self.safe_integer(response, 'timestamp')
321
321
  return self.parse_order_book(response, market['symbol'], timestamp)
322
322
 
323
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
323
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
324
324
  #
325
325
  # {
326
326
  # "symbol":"BTC/INR",
@@ -775,7 +775,7 @@ class bitfinex(Exchange, ImplicitAPI):
775
775
  'amount': self.parse_number(requestedAmount),
776
776
  })
777
777
 
778
- def parse_transfer(self, transfer, currency: Currency = None):
778
+ def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
779
779
  #
780
780
  # {
781
781
  # "status": "success",
@@ -794,7 +794,7 @@ class bitfinex(Exchange, ImplicitAPI):
794
794
  'status': self.parse_transfer_status(self.safe_string(transfer, 'status')),
795
795
  }
796
796
 
797
- def parse_transfer_status(self, status):
797
+ def parse_transfer_status(self, status: Str) -> Str:
798
798
  statuses = {
799
799
  'SUCCESS': 'ok',
800
800
  }
@@ -841,7 +841,7 @@ class bitfinex(Exchange, ImplicitAPI):
841
841
  response = await self.publicGetTickers(params)
842
842
  result = {}
843
843
  for i in range(0, len(response)):
844
- ticker = self.parse_ticker(response[i])
844
+ ticker = self.parse_ticker({'result': response[i]})
845
845
  symbol = ticker['symbol']
846
846
  result[symbol] = ticker
847
847
  return self.filter_by_array_tickers(result, 'symbol', symbols)
@@ -860,9 +860,33 @@ class bitfinex(Exchange, ImplicitAPI):
860
860
  'symbol': market['id'],
861
861
  }
862
862
  ticker = await self.publicGetPubtickerSymbol(self.extend(request, params))
863
+ #
864
+ # {
865
+ # mid: '63560.5',
866
+ # bid: '63560.0',
867
+ # ask: '63561.0',
868
+ # last_price: '63547.0',
869
+ # low: '62812.0',
870
+ # high: '64480.0',
871
+ # volume: '517.25634977',
872
+ # timestamp: '1715102384.9849467'
873
+ # }
874
+ #
863
875
  return self.parse_ticker(ticker, market)
864
876
 
865
- def parse_ticker(self, ticker, market: Market = None) -> Ticker:
877
+ def parse_ticker(self, ticker: dict, market: Market = None) -> Ticker:
878
+ #
879
+ # {
880
+ # mid: '63560.5',
881
+ # bid: '63560.0',
882
+ # ask: '63561.0',
883
+ # last_price: '63547.0',
884
+ # low: '62812.0',
885
+ # high: '64480.0',
886
+ # volume: '517.25634977',
887
+ # timestamp: '1715102384.9849467'
888
+ # }
889
+ #
866
890
  timestamp = self.safe_timestamp(ticker, 'timestamp')
867
891
  marketId = self.safe_string(ticker, 'pair')
868
892
  market = self.safe_market(marketId, market)