ccxt 4.3.17__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.
- ccxt/__init__.py +3 -1
- ccxt/abstract/bybit.py +1 -0
- ccxt/abstract/okx.py +1 -0
- ccxt/abstract/woofipro.py +119 -0
- ccxt/ace.py +1 -1
- ccxt/ascendex.py +7 -8
- ccxt/async_support/__init__.py +3 -1
- ccxt/async_support/ace.py +1 -1
- ccxt/async_support/ascendex.py +7 -8
- ccxt/async_support/base/exchange.py +23 -2
- ccxt/async_support/bigone.py +4 -4
- ccxt/async_support/binance.py +34 -17
- ccxt/async_support/bingx.py +4 -4
- ccxt/async_support/bit2c.py +1 -1
- ccxt/async_support/bitbank.py +1 -1
- ccxt/async_support/bitbns.py +1 -1
- ccxt/async_support/bitfinex.py +28 -4
- ccxt/async_support/bitfinex2.py +62 -54
- ccxt/async_support/bitflyer.py +1 -1
- ccxt/async_support/bitget.py +8 -11
- ccxt/async_support/bithumb.py +1 -1
- ccxt/async_support/bitmart.py +8 -8
- ccxt/async_support/bitmex.py +2 -2
- ccxt/async_support/bitopro.py +1 -1
- ccxt/async_support/bitrue.py +3 -3
- ccxt/async_support/bitso.py +1 -1
- ccxt/async_support/bitstamp.py +3 -5
- ccxt/async_support/bitteam.py +1 -1
- ccxt/async_support/bitvavo.py +1 -1
- ccxt/async_support/bl3p.py +1 -1
- ccxt/async_support/blockchaincom.py +1 -1
- ccxt/async_support/blofin.py +3 -3
- ccxt/async_support/btcalpha.py +1 -1
- ccxt/async_support/btcbox.py +1 -1
- ccxt/async_support/btcmarkets.py +1 -1
- ccxt/async_support/btcturk.py +1 -1
- ccxt/async_support/bybit.py +9 -8
- ccxt/async_support/cex.py +1 -1
- ccxt/async_support/coinbase.py +2 -2
- ccxt/async_support/coinbasepro.py +1 -1
- ccxt/async_support/coincheck.py +1 -1
- ccxt/async_support/coinex.py +320 -520
- ccxt/async_support/coinlist.py +6 -7
- ccxt/async_support/coinmate.py +1 -1
- ccxt/async_support/coinmetro.py +1 -1
- ccxt/async_support/coinone.py +1 -1
- ccxt/async_support/coinsph.py +1 -1
- ccxt/async_support/coinspot.py +1 -1
- ccxt/async_support/cryptocom.py +1 -1
- ccxt/async_support/currencycom.py +2 -2
- ccxt/async_support/delta.py +4 -4
- ccxt/async_support/deribit.py +8 -8
- ccxt/async_support/digifinex.py +5 -5
- ccxt/async_support/exmo.py +1 -1
- ccxt/async_support/gate.py +5 -5
- ccxt/async_support/gemini.py +1 -1
- ccxt/async_support/hitbtc.py +3 -3
- ccxt/async_support/hollaex.py +4 -4
- ccxt/async_support/htx.py +4 -4
- ccxt/async_support/huobijp.py +1 -1
- ccxt/async_support/idex.py +1 -1
- ccxt/async_support/independentreserve.py +1 -1
- ccxt/async_support/indodax.py +2 -2
- ccxt/async_support/kraken.py +2 -2
- ccxt/async_support/krakenfutures.py +3 -3
- ccxt/async_support/kucoin.py +3 -3
- ccxt/async_support/kucoinfutures.py +3 -3
- ccxt/async_support/kuna.py +1 -1
- ccxt/async_support/latoken.py +6 -6
- ccxt/async_support/lbank.py +1 -1
- ccxt/async_support/luno.py +1 -1
- ccxt/async_support/lykke.py +1 -1
- ccxt/async_support/mercado.py +1 -1
- ccxt/async_support/mexc.py +7 -7
- ccxt/async_support/ndax.py +1 -1
- ccxt/async_support/novadax.py +3 -4
- ccxt/async_support/okcoin.py +3 -3
- ccxt/async_support/okx.py +27 -10
- ccxt/async_support/onetrading.py +1 -1
- ccxt/async_support/paymium.py +3 -3
- ccxt/async_support/phemex.py +5 -5
- ccxt/async_support/poloniex.py +3 -4
- ccxt/async_support/poloniexfutures.py +1 -1
- ccxt/async_support/probit.py +1 -1
- ccxt/async_support/timex.py +1 -1
- ccxt/async_support/tokocrypto.py +1 -1
- ccxt/async_support/upbit.py +1 -1
- ccxt/async_support/wavesexchange.py +3 -3
- ccxt/async_support/wazirx.py +1 -1
- ccxt/async_support/whitebit.py +2 -2
- ccxt/async_support/woo.py +25 -10
- ccxt/async_support/woofipro.py +2524 -0
- ccxt/async_support/yobit.py +1 -1
- ccxt/async_support/zaif.py +1 -1
- ccxt/async_support/zonda.py +3 -3
- ccxt/base/exchange.py +63 -17
- ccxt/base/types.py +20 -0
- ccxt/bigone.py +4 -4
- ccxt/binance.py +34 -17
- ccxt/bingx.py +4 -4
- ccxt/bit2c.py +1 -1
- ccxt/bitbank.py +1 -1
- ccxt/bitbns.py +1 -1
- ccxt/bitfinex.py +28 -4
- ccxt/bitfinex2.py +62 -54
- ccxt/bitflyer.py +1 -1
- ccxt/bitget.py +8 -11
- ccxt/bithumb.py +1 -1
- ccxt/bitmart.py +8 -8
- ccxt/bitmex.py +2 -2
- ccxt/bitopro.py +1 -1
- ccxt/bitrue.py +3 -3
- ccxt/bitso.py +1 -1
- ccxt/bitstamp.py +3 -5
- ccxt/bitteam.py +1 -1
- ccxt/bitvavo.py +1 -1
- ccxt/bl3p.py +1 -1
- ccxt/blockchaincom.py +1 -1
- ccxt/blofin.py +3 -3
- ccxt/btcalpha.py +1 -1
- ccxt/btcbox.py +1 -1
- ccxt/btcmarkets.py +1 -1
- ccxt/btcturk.py +1 -1
- ccxt/bybit.py +9 -8
- ccxt/cex.py +1 -1
- ccxt/coinbase.py +2 -2
- ccxt/coinbasepro.py +1 -1
- ccxt/coincheck.py +1 -1
- ccxt/coinex.py +320 -520
- ccxt/coinlist.py +6 -7
- ccxt/coinmate.py +1 -1
- ccxt/coinmetro.py +1 -1
- ccxt/coinone.py +1 -1
- ccxt/coinsph.py +1 -1
- ccxt/coinspot.py +1 -1
- ccxt/cryptocom.py +1 -1
- ccxt/currencycom.py +2 -2
- ccxt/delta.py +4 -4
- ccxt/deribit.py +8 -8
- ccxt/digifinex.py +5 -5
- ccxt/exmo.py +1 -1
- ccxt/gate.py +5 -5
- ccxt/gemini.py +1 -1
- ccxt/hitbtc.py +3 -3
- ccxt/hollaex.py +4 -4
- ccxt/htx.py +4 -4
- ccxt/huobijp.py +1 -1
- ccxt/idex.py +1 -1
- ccxt/independentreserve.py +1 -1
- ccxt/indodax.py +2 -2
- ccxt/kraken.py +2 -2
- ccxt/krakenfutures.py +3 -3
- ccxt/kucoin.py +3 -3
- ccxt/kucoinfutures.py +3 -3
- ccxt/kuna.py +1 -1
- ccxt/latoken.py +6 -6
- ccxt/lbank.py +1 -1
- ccxt/luno.py +1 -1
- ccxt/lykke.py +1 -1
- ccxt/mercado.py +1 -1
- ccxt/mexc.py +7 -7
- ccxt/ndax.py +1 -1
- ccxt/novadax.py +3 -4
- ccxt/okcoin.py +3 -3
- ccxt/okx.py +27 -10
- ccxt/onetrading.py +1 -1
- ccxt/paymium.py +3 -3
- ccxt/phemex.py +5 -5
- ccxt/poloniex.py +3 -4
- ccxt/poloniexfutures.py +1 -1
- ccxt/pro/__init__.py +3 -1
- ccxt/pro/bitget.py +127 -190
- ccxt/pro/bitvavo.py +1 -1
- ccxt/pro/bybit.py +4 -3
- ccxt/pro/coinbaseinternational.py +11 -4
- ccxt/pro/okx.py +79 -1
- ccxt/pro/woofipro.py +1183 -0
- ccxt/probit.py +1 -1
- ccxt/test/test_async.py +31 -1
- ccxt/test/test_sync.py +31 -1
- ccxt/timex.py +1 -1
- ccxt/tokocrypto.py +1 -1
- ccxt/upbit.py +1 -1
- ccxt/wavesexchange.py +3 -3
- ccxt/wazirx.py +1 -1
- ccxt/whitebit.py +2 -2
- ccxt/woo.py +25 -10
- ccxt/woofipro.py +2524 -0
- ccxt/yobit.py +1 -1
- ccxt/zaif.py +1 -1
- ccxt/zonda.py +3 -3
- {ccxt-4.3.17.dist-info → ccxt-4.3.19.dist-info}/METADATA +8 -6
- {ccxt-4.3.17.dist-info → ccxt-4.3.19.dist-info}/RECORD +195 -191
- {ccxt-4.3.17.dist-info → ccxt-4.3.19.dist-info}/WHEEL +0 -0
- {ccxt-4.3.17.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.
|
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.
|
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')
|
ccxt/async_support/__init__.py
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
|
5
5
|
# -----------------------------------------------------------------------------
|
6
6
|
|
7
|
-
__version__ = '4.3.
|
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,
|
ccxt/async_support/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.
|
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.
|
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:
|
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')
|
ccxt/async_support/bigone.py
CHANGED
@@ -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.
|
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
|
}
|
ccxt/async_support/binance.py
CHANGED
@@ -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",
|
@@ -5516,6 +5516,7 @@ class binance(Exchange, ImplicitAPI):
|
|
5516
5516
|
:param float [params.stopLossPrice]: the price that a stop loss order is triggered at
|
5517
5517
|
:param float [params.takeProfitPrice]: the price that a take profit order is triggered at
|
5518
5518
|
:param boolean [params.portfolioMargin]: set to True if you would like to create an order in a portfolio margin account
|
5519
|
+
:param str [params.stopLossOrTakeProfit]: 'stopLoss' or 'takeProfit', required for spot trailing orders
|
5519
5520
|
:returns dict: an `order structure <https://docs.ccxt.com/#/?id=order-structure>`
|
5520
5521
|
"""
|
5521
5522
|
await self.load_markets()
|
@@ -5614,8 +5615,8 @@ class binance(Exchange, ImplicitAPI):
|
|
5614
5615
|
stopLossPrice = self.safe_string(params, 'stopLossPrice', triggerPrice) # fallback to stopLoss
|
5615
5616
|
takeProfitPrice = self.safe_string(params, 'takeProfitPrice')
|
5616
5617
|
trailingDelta = self.safe_string(params, 'trailingDelta')
|
5617
|
-
trailingTriggerPrice = self.safe_string_2(params, 'trailingTriggerPrice', 'activationPrice'
|
5618
|
-
trailingPercent = self.
|
5618
|
+
trailingTriggerPrice = self.safe_string_2(params, 'trailingTriggerPrice', 'activationPrice')
|
5619
|
+
trailingPercent = self.safe_string_n(params, ['trailingPercent', 'callbackRate', 'trailingDelta'])
|
5619
5620
|
priceMatch = self.safe_string(params, 'priceMatch')
|
5620
5621
|
isTrailingPercentOrder = trailingPercent is not None
|
5621
5622
|
isStopLoss = stopLossPrice is not None or trailingDelta is not None
|
@@ -5627,10 +5628,26 @@ class binance(Exchange, ImplicitAPI):
|
|
5627
5628
|
uppercaseType = type.upper()
|
5628
5629
|
stopPrice = None
|
5629
5630
|
if isTrailingPercentOrder:
|
5630
|
-
|
5631
|
-
|
5632
|
-
|
5633
|
-
|
5631
|
+
if market['swap']:
|
5632
|
+
uppercaseType = 'TRAILING_STOP_MARKET'
|
5633
|
+
request['callbackRate'] = trailingPercent
|
5634
|
+
if trailingTriggerPrice is not None:
|
5635
|
+
request['activationPrice'] = self.price_to_precision(symbol, trailingTriggerPrice)
|
5636
|
+
else:
|
5637
|
+
if isMarketOrder:
|
5638
|
+
raise InvalidOrder(self.id + ' trailingPercent orders are not supported for ' + symbol + ' ' + type + ' orders')
|
5639
|
+
stopLossOrTakeProfit = self.safe_string(params, 'stopLossOrTakeProfit')
|
5640
|
+
params = self.omit(params, 'stopLossOrTakeProfit')
|
5641
|
+
if stopLossOrTakeProfit != 'stopLoss' and stopLossOrTakeProfit != 'takeProfit':
|
5642
|
+
raise InvalidOrder(self.id + symbol + ' trailingPercent orders require a stopLossOrTakeProfit parameter of either stopLoss or takeProfit')
|
5643
|
+
if stopLossOrTakeProfit == 'stopLoss':
|
5644
|
+
uppercaseType = 'STOP_LOSS_LIMIT'
|
5645
|
+
elif stopLossOrTakeProfit == 'takeProfit':
|
5646
|
+
uppercaseType = 'TAKE_PROFIT_LIMIT'
|
5647
|
+
if trailingTriggerPrice is not None:
|
5648
|
+
stopPrice = self.price_to_precision(symbol, trailingTriggerPrice)
|
5649
|
+
trailingPercentConverted = Precise.string_mul(trailingPercent, '100')
|
5650
|
+
request['trailingDelta'] = trailingPercentConverted
|
5634
5651
|
elif isStopLoss:
|
5635
5652
|
stopPrice = stopLossPrice
|
5636
5653
|
if isMarketOrder:
|
@@ -5770,8 +5787,8 @@ class binance(Exchange, ImplicitAPI):
|
|
5770
5787
|
raise InvalidOrder(self.id + ' createOrder() requires a stopPrice extra param for a ' + type + ' order')
|
5771
5788
|
else:
|
5772
5789
|
# check for delta price
|
5773
|
-
if trailingDelta is None and stopPrice is None:
|
5774
|
-
raise InvalidOrder(self.id + ' createOrder() requires a stopPrice or
|
5790
|
+
if trailingDelta is None and stopPrice is None and trailingPercent is None:
|
5791
|
+
raise InvalidOrder(self.id + ' createOrder() requires a stopPrice, trailingDelta or trailingPercent param for a ' + type + ' order')
|
5775
5792
|
if stopPrice is not None:
|
5776
5793
|
request['stopPrice'] = self.price_to_precision(symbol, stopPrice)
|
5777
5794
|
if timeInForceIsRequired and (self.safe_string(params, 'timeInForce') is None):
|
@@ -7495,13 +7512,13 @@ class binance(Exchange, ImplicitAPI):
|
|
7495
7512
|
'fee': fee,
|
7496
7513
|
}
|
7497
7514
|
|
7498
|
-
def parse_transfer_status(self, status):
|
7515
|
+
def parse_transfer_status(self, status: Str) -> Str:
|
7499
7516
|
statuses = {
|
7500
7517
|
'CONFIRMED': 'ok',
|
7501
7518
|
}
|
7502
7519
|
return self.safe_string(statuses, status, status)
|
7503
7520
|
|
7504
|
-
def parse_transfer(self, transfer, currency: Currency = None):
|
7521
|
+
def parse_transfer(self, transfer: dict, currency: Currency = None) -> TransferEntry:
|
7505
7522
|
#
|
7506
7523
|
# transfer
|
7507
7524
|
#
|
@@ -7659,7 +7676,7 @@ class binance(Exchange, ImplicitAPI):
|
|
7659
7676
|
#
|
7660
7677
|
return self.parse_transfer(response, currency)
|
7661
7678
|
|
7662
|
-
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:
|
7663
7680
|
"""
|
7664
7681
|
fetch a history of internal transfers made on an account
|
7665
7682
|
:see: https://binance-docs.github.io/apidocs/spot/en/#query-user-universal-transfer-history-user_data
|
@@ -9730,7 +9747,7 @@ class binance(Exchange, ImplicitAPI):
|
|
9730
9747
|
leverages = self.safe_list(response, 'positions', [])
|
9731
9748
|
return self.parse_leverages(leverages, symbols, 'symbol')
|
9732
9749
|
|
9733
|
-
def parse_leverage(self, leverage, market=None) -> Leverage:
|
9750
|
+
def parse_leverage(self, leverage: dict, market: Market = None) -> Leverage:
|
9734
9751
|
marketId = self.safe_string(leverage, 'symbol')
|
9735
9752
|
marginModeRaw = self.safe_bool(leverage, 'isolated')
|
9736
9753
|
marginMode = None
|
@@ -11324,7 +11341,7 @@ class binance(Exchange, ImplicitAPI):
|
|
11324
11341
|
#
|
11325
11342
|
return self.parse_greeks(response[0], market)
|
11326
11343
|
|
11327
|
-
def parse_greeks(self, greeks, market: Market = None):
|
11344
|
+
def parse_greeks(self, greeks: dict, market: Market = None) -> Greeks:
|
11328
11345
|
#
|
11329
11346
|
# {
|
11330
11347
|
# "symbol": "BTC-231229-40000-C",
|
@@ -11595,7 +11612,7 @@ class binance(Exchange, ImplicitAPI):
|
|
11595
11612
|
chain = self.safe_dict(response, 0, {})
|
11596
11613
|
return self.parse_option(chain, None, market)
|
11597
11614
|
|
11598
|
-
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:
|
11599
11616
|
#
|
11600
11617
|
# {
|
11601
11618
|
# "symbol": "BTC-241227-80000-C",
|
@@ -11984,7 +12001,7 @@ class binance(Exchange, ImplicitAPI):
|
|
11984
12001
|
rows = self.safe_list(response, responseQuery, [])
|
11985
12002
|
return self.parse_conversions(rows, code, fromCurrencyKey, toCurrencyKey, since, limit)
|
11986
12003
|
|
11987
|
-
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:
|
11988
12005
|
#
|
11989
12006
|
# fetchConvertQuote
|
11990
12007
|
#
|
ccxt/async_support/bingx.py
CHANGED
@@ -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,
|
ccxt/async_support/bit2c.py
CHANGED
@@ -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')
|
ccxt/async_support/bitbank.py
CHANGED
@@ -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')
|