def on_query_position(self, data: dict, request: Request) -> None: """""" if self.check_error("查询持仓", data): return for d in data["result"]: if d["side"] == "Buy": volume = d["size"] else: volume = -d["size"] position = PositionData(symbol=d["symbol"], exchange=Exchange.BYBIT, direction=Direction.NET, volume=volume, price=d["entry_price"], gateway_name=self.gateway_name) self.gateway.on_position(position) if not self.usdt_base: account = AccountData( accountid=d["symbol"].replace("USD", ""), balance=d["wallet_balance"], frozen=d["order_margin"], gateway_name=self.gateway_name, ) self.gateway.on_account(account)
def on_account(self, packet: dict) -> None: """ websocket返回得Balance/Position信息更新 """ if not self.accountid: self.accountid = f"{self.gateway_name}_USDT" for acc_data in packet["a"]["B"]: account = AccountData(accountid=acc_data["a"], balance=float(acc_data["wb"]), frozen=float(acc_data["wb"]) - float(acc_data["cw"]), gateway_name=self.gateway_name) if account.balance: self.gateway.on_account(account) for pos_data in packet["a"]["P"]: position = PositionData( symbol=pos_data["s"], exchange=Exchange.BINANCE, direction=Direction.NET, volume=int(float(pos_data["pa"])), price=float(pos_data["ep"]), pnl=float(pos_data["cr"]), gateway_name=self.gateway_name, ) self.gateway.on_position(position)
def on_query_account_balance(self, data, request): """ 查询账户资金 :param data: :param request: :return: """ if self.check_error(data, "查询账户资金"): return buf = {} for d in data["data"]["list"]: currency = d["currency"] currency_data = buf.setdefault(currency, {}) currency_data[d["type"]] = float(d["balance"]) for currency, currency_data in buf.items(): account = AccountData( accountid=currency, balance=currency_data["trade"] + currency_data["frozen"], frozen=currency_data["frozen"], gateway_name=self.gateway_name, ) if account.balance: self.gateway.on_account(account)
def on_account(self, d): """ 处理账号资金信息 可以用资金,冻结资金,总资金 :param d: :return: """ accountid = str(d["account"]) account = self.accounts.get(accountid, None) if not account: account = AccountData(accountid=accountid, gateway_name=self.gateway_name) self.accounts[accountid] = account # 总金额(xbt) account.balance = float(d.get("marginBalance", account.balance)) / 1000000000 # 可用xbt account.available = float(d.get("availableMargin", account.available)) / 1000000000 # 冻结 xbt account.frozen = account.balance - account.available # 备注名 user_id = self.user_id # 删除数据 o_money = Money.delete().where(Money.money_user_id == user_id, Money.money_accountid == accountid) o_money.execute() # 执行指令 # 插入数据库 o_money = Money().insert(money_user_id=user_id, money_balance=account.balance, money_available=account.available, money_frozen=account.frozen, money_accountid=accountid) o_money.execute() # 执行
def on_account(self, data: dict) -> None: """""" if not data: return currency = data["currency"] change_type = data["changeType"] if not change_type: balance = float(data["balance"]) frozen = balance - float(data["available"]) currency_balance[currency] = balance elif "place" in change_type: if "available" not in data: return balance = currency_balance[currency] frozen = balance - float(data["available"]) else: frozen = 0.0 if "balance" in data: balance = float(data["balance"]) else: balance = float(data["available"]) currency_balance[currency] = balance account = AccountData( accountid=currency, balance=balance, frozen=frozen, gateway_name=self.gateway_name, ) self.gateway.on_account(account)
def on_account(self, data: dict) -> None: """""" account = AccountData(accountid=data["underlying"], balance=float(data["equity"]), frozen=float(data.get("margin_for_unfilled", 0)), gateway_name=self.gateway_name) self.gateway.on_account(account)
def on_account_event(self, data: dict) -> None: """""" account = AccountData(accountid=self.token, balance=data["assets"], frozen=data["assets"] - data["available"], gateway_name=self.gateway_name) self.gateway.on_account(account)
def on_account(self, d): """""" account = AccountData(accountid=d["currency"], balance=float(d["balance"]), frozen=float(d["hold"]), gateway_name=self.gateway_name) self.gateway.on_account(copy(account))
def on_account(self, data): """""" account = AccountData( accountid=data["id"], balance=float(data["equity"]), gateway_name=self.gateway_name ) self.gateway.on_account(account)
def onQueryCashRsp(self, data: dict, error: dict, reqid: int) -> None: """""" account = AccountData( accountid=data["account_id"], balance=data["total_amount"] / 10000, frozen=(data["total_amount"] - data["avail_amount"]) / 10000, gateway_name=self.gateway_name) self.gateway.on_account(account)
def on_account_info(self, packet: dict) -> None: """""" data = packet["data"] account = AccountData(accountid=data["name"], balance=data["balance"], frozen=data["margin"], gateway_name=self.gateway_name) self.on_account(account)
def OnQueryAsset(self, asset: XTPQueryAssetRsp, error_info: XTPRspInfoStruct, request_id: int, is_last: bool, session_id: int) -> Any: """""" account = AccountData(accountid=self.userid, balance=asset.buying_power, frozen=asset.withholding_amount, gateway_name=self.gateway_name) self.gateway.on_account(account)
def onRspQryInvestorAccount(self, data: dict, error: dict, reqid: int, last: bool): """""" account = AccountData( accountid=data["AccountID"], frozen=data["LongMargin"] + data["ShortMargin"], balance=data["PreBalance"], gateway_name=self.gateway_name, ) self.gateway.on_account(account)
def on_account(self, d): """""" for key in d: account_data = d[key] account = AccountData(accountid=key, balance=float(account_data["equity"]), frozen=float(d.get("margin_for_unfilled", 0)), gateway_name=self.gateway_name) self.gateway.on_account(account)
def on_account(self, packet): """""" for d in packet["B"]: account = AccountData(accountid=d["a"], balance=float(d["f"]) + float(d["l"]), frozen=float(d["l"]), gateway_name=self.gateway_name) if account.balance: self.gateway.on_account(account)
def on_query_account(self, data, request): """""" for account_data in data: account = AccountData(accountid=account_data["currency"], balance=float(account_data["balance"]), frozen=float(account_data["hold"]), gateway_name=self.gateway_name) self.gateway.on_account(account) self.gateway.write_log("OKEX 账户资金查询成功")
def on_account(self, packet: dict) -> None: """""" for d in packet["data"]: account = AccountData( accountid="USDT", balance=d["wallet_balance"], frozen=d["wallet_balance"] - d["available_balance"], gateway_name=self.gateway_name, ) self.gateway.on_account(account)
def on_account(self, data: dict) -> None: """""" account = AccountData( accountid=data["accountCode"], balance=float(data["cash"]), frozen=float(data["frozenCash"]), gateway_name=self.gateway_name, ) self.gateway.on_account(account)
def on_query_account(self, data, request): """""" for currency, d in data["info"].items(): account = AccountData( accountid=currency.upper(), balance=float(d["equity"]), frozen=float(d.get("margin_for_unfilled", 0)), gateway_name=self.gateway_name, ) self.gateway.on_account(account) self.gateway.write_log("账户资金查询成功")
def update_account(self, info: TapAPIFundData): """ Convert TAP fund data structure into AccountData event and push it. """ self.account_no = info.AccountNo account = AccountData(accountid=info.AccountNo, balance=info.Balance, frozen=info.Balance - info.Available, gateway_name=self.gateway_name) self.gateway.on_account(account)
def OnRspQryTradingAccount(self, info: CTORATstpTradingAccountField, error_info: CTORATstpRspInfoField, request_id: int, is_last: bool) -> None: """""" self.session_info.account_id = info.AccountID account_data = AccountData(gateway_name=self.gateway.gateway_name, accountid=info.AccountID, balance=info.Available, frozen=info.FrozenCash + info.FrozenMargin + info.FrozenCommission) self.gateway.on_account(account_data)
def on_query_account(self, data, request): """""" for account_data in data["balances"]: account = AccountData(accountid=account_data["asset"], balance=float(account_data["free"]) + float(account_data["locked"]), frozen=float(account_data["locked"]), gateway_name=self.gateway_name) if account.balance: self.gateway.on_account(account)
def update_account(self, data: dict) -> None: """ Convert TAP fund data structure into AccountData event and push it. """ self.account_no = data["AccountNo"] account = AccountData(accountid=data["AccountNo"], balance=data["Balance"], frozen=data["Balance"] - data["Available"], gateway_name=self.gateway_name) self.gateway.on_account(account)
def on_account(self, packet: dict): """""" data = packet["params"]["data"] account = AccountData( accountid=data["currency"], balance=data["balance"], frozen=data["balance"] - data["available_funds"], gateway_name=self.gateway_name, ) self.gateway.on_account(account)
def onRspQryTradingAccount(self, data: dict, error: dict, reqid: int, last: bool): """""" account = AccountData(accountid=data["AccountID"], balance=data["Balance"], frozen=data["FrozenMargin"] + data["FrozenCash"] + data["FrozenCommission"], gateway_name=self.gateway_name) account.available = data["Available"] self.gateway.on_account(account)
def on_query_account(self, data: dict, request: Request) -> None: """""" for d in data["data"]: account = AccountData( accountid=d["symbol"], balance=d["margin_balance"], frozen=d["margin_frozen"], gateway_name=self.gateway_name, ) self.gateway.on_account(account)
def _parse_account_info(info, gateway_name): """ parse single 'info' record inside account reply to AccountData. """ account = AccountData( accountid=info['instrument_id'].upper(), balance=float(info["equity"]), frozen=float(info["margin_frozen"]), gateway_name=gateway_name, ) return account
def onRspSOPQryCapitalAccountInfo(self, data: dict, error: dict) -> None: """""" if not data: return account = AccountData(accountid=data["accountID"] + "_Option", balance=data["totalFunds"], frozen=data["totalFunds"] - data["availableFunds"], gateway_name=self.gateway_name) self.gateway.on_account(account)
def onRspQryTradingAccount(self, data: dict, error: dict, reqid: int, last: bool) -> None: """""" if "ClientID" not in data: return account = AccountData(accountid=data["ClientID"], balance=data["TotalFrozen"] + data["AvailCap"], frozen=data["TotalFrozen"], gateway_name=self.gateway_name) self.gateway.on_account(account)
def on_query_account(self, data: dict, request: Request) -> None: """""" for asset in data["assets"]: account = AccountData(accountid=asset["asset"], balance=float(asset["walletBalance"]), frozen=float(asset["maintMargin"]), gateway_name=self.gateway_name) if account.balance: self.gateway.on_account(account) self.gateway.write_log("账户资金查询成功")