我正在尝试使用order_market_buy和order_markt_sell进行买卖,以BTCUSDT为例,当购买时,我想使用我所有的美元,当出售时,我想要出售所有的BTC。
我使用
order_buy = Client.order_market_buy(symbol='BTCUSDT', quoteOrderQty=my_USDT_position)
order_sell = Client.order_market_sell(symbol='BTCUSDT', quoteOrderQty=my_BTC_position)
它不起作用,流行起来"缺少1个必需的位置参数:"self";
请帮我解决这个问题,谢谢!
您可以获得特定资产的当前余额,然后将其作为参数传递给order_market_buy方法。
示例:
usdtBalance = client.get_asset_balance(asset='USDT').get('free')
btcBalance = client.get_asset_balance(asset='BTC').get('free')
order_buy = Client.order_market_buy(symbol='BTCUSDT', quantity=usdtBalance)
order_sell = Client.order_market_sell(symbol='BTCUSDT', quantity=btcBalance)
从他们的文档中:https://python-binance.readthedocs.io/en/latest/binance.html?highlight=order_market_buy#binance.client.Client.order_market_buy
在order_market_buy和order_market _sell的函数调用中似乎没有输入数量参数,这就是为什么会出现错误的原因。数量和符号是这些函数所必需的参数。
所以我认为要解决";缺少1个必需的位置参数:"self";你应该做的错误:
order_buy = Client.order_market_buy(symbol='BTCUSDT', quantity=<your quantity>, quoteOrderQty=my_USDT_position)
order_sell = Client.order_market_sell(symbol='BTCUSDT', quantity=<your quantity>, quoteOrderQty=my_BTC_position)
你也试过这样的东西吗?
usdtBalance = Client.get_asset_balance(asset='USDT').get('free')
#use param quoteOrderQty instead of param quantity when buying
order_buy = Client.order_market_buy(symbol='BTCUSDT', quoteOrderQty=usdtBalance)
##Some time later##
btcBalance = Client.get_asset_balance(asset='BTC').get('free')
#use param quantity instead of param quoteOrderQty when selling
order_sell = Client.order_market_sell(symbol='BTCUSDT', quantity=btcBalance)
根据您的评论,Client.order_market_buy(symbol='BTCUSDT', quoteOrderQty=usdtBalance)
似乎适用于购买,但Client.order_market_sell(symbol='BTCUSDT', quantity=btcBalance)
不适用于出售。
我倾向于认为这是因为您在btcBalance
中存储的信息是在您初始化btcBalance
之后进行购买之前,这是有意义的,因为这样您就可以存储0.00
或只是"灰尘">这是基础资产的一个非常低的金额,不能用于币安交易,而只能转换为BNB。
在本指南中,有一个使用Testnet Binance Vision
的示例,尽管它很好地说明了如何使用Python Binance
包设置Market Sell Order
:
from binance.exceptions import BinanceAPIException
api_key = '<testnet api_key>'
api_secret = '<testnet api_secret>'
async def main():
quantity = '0.000001'
client = await AsyncClient.create(api_key=api_key, api_secret=api_secret, testnet=True)
try:
market_res = await client.order_market_sell(symbol='BTCUSDT', quantity=quantity)
except BinanceAPIException as e:
print(e)
else:
print(json.dumps(market_res, indent=2))
await client.close_connection()
它甚至说,如果存储在quantity
中的值不大于MIN_NOTIONAL
的值,您将得到以下错误:
APIError(code=-1013): Filter failure: MIN_NOTIONAL
我建议你去看看,它可能会在处理这个话题时帮助你更好。
交易一对(BTC和USDT(时,您可以在quantity
参数中指定要买入/卖出的BTC金额,也可以在quoteOrderQty
参数中指定想要买入/售出的USDT。
btc_balance = client.get_asset_balance(asset='BTC')
btc_balance = btc_balance['free']
usdt_balance = client.get_asset_balance(asset='USDT')
usdt_balance = usdt_balance['free']
# Sell BTC
sell_order = client.order_market_sell(
symbol='BTCUSDT',
quantity=btc_balance
)
# Buy BTC
buy_order = client.order_market_buy(
symbol='BTCUSDT',
quoteOrderQty = usdt_balance
)