Path: blob/master/ invest-robot-contest_tinkoff_invest_robot-main/src/algotrading/get_account.py
7815 views
from tinkoff.invest import GetMarginAttributesResponse1from tinkoff.invest import RequestError23from loguru import logger45from . import glossary, utils678def print_accounts(accounts):9print(f"У вас счетов: {len(accounts)} ")10accounts_id = []11for account in accounts:12accounts_id.append(account.id)13print(account.id, " ".join(account.type._name_.split('_')[2:]), account.name,14" ".join(account.status._name_.split('_')[2:]),15account.opened_date.strftime("%Y-%m-%d")16)1718return accounts_id192021def get_users_info(client):22user_info = client.users.get_info()23users = {}24users.update(user_info.__dict__)2526users['qualified_for_work_with'] = [glossary.qualified_for_work_with[qualified] for qualified in27user_info.qualified_for_work_with]2829return users303132def get_margin_attributes(client, account_id: int) -> GetMarginAttributesResponse:33try:34margin_attributes = client.users.get_margin_attributes(account_id=account_id)3536except RequestError as err:37logger.debug(f"для счета {account_id}, {err.metadata.message}")38return None3940return margin_attributes414243def get_user_accounts(client):44accounts = {}4546for account in client.users.get_accounts().accounts:47accounts[account.id] = {}48accounts[account.id]["account"] = {}49accounts[account.id]["account"]['name'] = account.name50accounts[account.id]["account"]['id'] = account.id51accounts[account.id]["account"]['status'] = " ".join(account.status._name_.split('_')[2:])52accounts[account.id]["account"]['opened_date'] = account.opened_date.strftime("%Y-%m-%d")53accounts[account.id]["account"]['token_access_level'] = " ".join(account.access_level._name_.split('_')[3:])5455margin_attr = get_margin_attributes(client, account.id)56accounts[account.id]["margin_attributes"] = {}57if margin_attr:58liquid_portfolio = f"{margin_attr.liquid_portfolio.units} {margin_attr.liquid_portfolio.currency}"59starting_margin = f"{margin_attr.starting_margin.units} {margin_attr.starting_margin.currency}"60minimal_margin = f"{margin_attr.minimal_margin.units} {margin_attr.minimal_margin.currency}"61amount_of_missing_funds = f"{margin_attr.amount_of_missing_funds.units} {margin_attr.amount_of_missing_funds.currency}"6263accounts[account.id]["margin_attributes"]['liquid_portfolio'] = liquid_portfolio64accounts[account.id]["margin_attributes"]['starting_margin'] = starting_margin65accounts[account.id]["margin_attributes"]['minimal_margin'] = minimal_margin66accounts[account.id]["margin_attributes"]['amount_of_missing_funds'] = amount_of_missing_funds6768else:69accounts[account.id]["margin_attributes"]["status"] = "margin status is disabled"7071return accounts727374def get_account(client):75user_info = get_users_info(client)7677return user_info787980def main():81api_client = utils.api_client_configure()82with api_client as client:83user_info = get_account(client)84user_info['accounts'] = get_user_accounts(client)8586return user_info878889def test_connect():90api_client = utils.api_client_configure()91try:92with api_client as client:93get_account(client)9495except RequestError as err:96logger.critical(err.metadata.message)97raise err9899100if __name__ == "__main__":101main()102103104