コード例 #1
0
ファイル: bybit_gateway.py プロジェクト: gcoinman/vnpy
    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)
コード例 #2
0
    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)
コード例 #3
0
    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)
コード例 #4
0
 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()  # 执行
コード例 #5
0
    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)
コード例 #6
0
 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)
コード例 #7
0
 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)
コード例 #8
0
ファイル: okex_gateway.py プロジェクト: jiangyuexi/fruitday
    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))
コード例 #9
0
ファイル: alpaca_gateway.py プロジェクト: edword01/vnpy
 def on_account(self, data):
     """"""
     account = AccountData(
         accountid=data["id"],
         balance=float(data["equity"]),
         gateway_name=self.gateway_name
     )
     self.gateway.on_account(account)
コード例 #10
0
 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)
コード例 #11
0
ファイル: mt5_gateway.py プロジェクト: edword01/vnpy
    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)
コード例 #12
0
 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)
コード例 #13
0
    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)
コード例 #14
0
 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)
コード例 #15
0
ファイル: binance_gateway.py プロジェクト: gcoinman/vnpy
    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)
コード例 #16
0
ファイル: okex_gateway.py プロジェクト: jiangyuexi/fruitday
    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 账户资金查询成功")
コード例 #17
0
 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)
コード例 #18
0
ファイル: kaisa_gateway.py プロジェクト: edword01/vnpy
    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)
コード例 #19
0
 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("账户资金查询成功")
コード例 #20
0
    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)
コード例 #21
0
 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)
コード例 #22
0
ファイル: binance_gateway.py プロジェクト: gcoinman/vnpy
    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)
コード例 #23
0
ファイル: tap_gateway.py プロジェクト: lbcliu/vnpy-1
    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)
コード例 #24
0
ファイル: deribit_gateway.py プロジェクト: zly111/vnpy
    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)
コード例 #25
0
    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)
コード例 #26
0
ファイル: huobio_gateway.py プロジェクト: flaybugs/demo
    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)
コード例 #27
0
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
コード例 #28
0
ファイル: sec_gateway.py プロジェクト: xiaohuid/vnpy-1
    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)
コード例 #29
0
ファイル: ksgold_gateway.py プロジェクト: edword01/vnpy
    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)
コード例 #30
0
    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("账户资金查询成功")