websocket 如何在Python中从“Bingx”上的字典中获取资产

34gzjxbg  于 2023-10-20  发布在  Python
关注(0)|答案(2)|浏览(150)

我写了“def”,它会像下面这样获取合同:

instruments =send_request(.......)
contractdict = dict()        
if instruments is not None:
   for s in instruments['data']:          
       contractdict [s['symbol']] = Contract(s, "bingx")

它工作正常。
现在我写另一个“def”像这样,但我想获取'资产',我把它放在下面:

margindata =send_request(.......)
balancedic = dict()
if margindata is not None:            
   for b in margindata ['balance']:
       balancedic [b['asset']] = balance(b, "bingx")

但是,它有类型错误!
TypeError:字符串索引必须是整数,而不是'str'
Send_request将返回正确的答案。
我也把参考链接放在下面:
文本
我也试过修改“key”的名字,比如“asset”、“data”、“balance”,但是它们也是错误的。请告诉我如何获取像instrumentsmargindata字典的每一个字段。* 我没有使用任何像ccxt库,..

mlnl4t2r

mlnl4t2r1#

您正在向/openApi/swap/v2/user/balance端点发送请求。它返回一个类似于以下内容的json响应:

response = {"code":0,"msg":"","data":{"balance":{"userId":"12345","asset":"USDT","balance":"0.0000","equity":"0.0000","unrealizedProfit":"0.0000","realisedProfit":"0.0000","availableMargin":"0.0000","usedMargin":"0.0000","freezedMargin":"0.0000"}}}

请注意,如果您正在交易永续期货,那么开仓不会将该代码添加到您的永续余额中。
我想这可以解决你的问题:

balancedic = dict()
if response is not None:            
    for b in response["data"]["balance"]:
        balancedic[b["asset"]] = balance(b, "bingx")
nkcskrwz

nkcskrwz2#

所以这里发生的是,“B”被赋予“Balance”类是一个字符串,它不是一个JSON对象。所以你的类不能正确初始化。
以下是如何使用py-bingx解决此问题:

from bingx.api import BingxAPI

bingx = BingxAPI(API_KEY, SECRET_KEY, timestamp="local")

class Balance(dict):
    """
    Returns a python dict object
    """
    def __init__(self, data, exchange):
        if exchange == "bingx":
            balance_data = data['data']['balance']
            my_dict = {
                'balance': float(balance_data['balance']),
                'equity': float(balance_data['equity']),
                'unrealizedProfit': float(balance_data['unrealizedProfit']),
                'realizedProfit': float(balance_data['realisedProfit']),
                'availableMargin': float(balance_data['availableMargin']),
                'usedMargin': float(balance_data['usedMargin']),
                'freezedMargin': float(balance_data['freezedMargin'])
            }
            super().__init__(my_dict)

data = bingx.get_perpetual_balance()
if data is not None:
    balancedic = Balance(data, "bingx")
    print(balancedic)
    print(balancedic['balance'])

输出量:

{'balance': '0.0000', 'equity': '0.0000', 'unrealizedProfit': '0.0000', 'realizedProfit': '0.0000', 'availableMargin': '0.0000', 'usedMargin': '0.0000', 'freezedMargin': '0.0000'}
0.0000

希望能帮上忙!

相关问题