Path: blob/master/ invest-robot-contest_tinkoff-trading-bot-develop/app/client.py
5932 views
from datetime import datetime1from typing import Optional, List23from tinkoff.invest import (4AsyncClient,5CandleInterval,6Quotation,7OrderDirection,8OrderType,9PostOrderResponse,10GetLastPricesResponse,11OrderState,12GetTradingStatusResponse,13)14from tinkoff.invest.async_services import AsyncServices1516from app.settings import settings171819class TinkoffClient:20"""21Wrapper for tinkoff.invest.AsyncClient.22Takes responsibility for choosing correct function to call basing on sandbox mode flag.23"""2425def __init__(self, token: str, sandbox: bool = False):26self.token = token27self.sandbox = sandbox28self.client: Optional[AsyncServices] = None2930async def ainit(self):31self.client = await AsyncClient(token=self.token, app_name="qwertyo1").__aenter__()3233async def get_orders(self, **kwargs):34if self.sandbox:35return await self.client.sandbox.get_sandbox_orders(**kwargs)36return await self.client.orders.get_orders(**kwargs)3738async def get_portfolio(self, **kwargs):39if self.sandbox:40return await self.client.sandbox.get_sandbox_portfolio(**kwargs)41return await self.client.operations.get_portfolio(**kwargs)4243async def get_accounts(self):44if self.sandbox:45return await self.client.sandbox.get_sandbox_accounts()46return await self.client.users.get_accounts()4748async def get_all_candles(self, **kwargs):49async for candle in self.client.get_all_candles(**kwargs):50yield candle5152async def get_last_prices(self, **kwargs) -> GetLastPricesResponse:53return await self.client.market_data.get_last_prices(**kwargs)5455async def post_order(self, **kwargs) -> PostOrderResponse:56if self.sandbox:57return await self.client.sandbox.post_sandbox_order(**kwargs)58return await self.client.orders.post_order(**kwargs)5960async def get_order_state(self, **kwargs) -> OrderState:61if self.sandbox:62return await self.client.sandbox.get_sandbox_order_state(**kwargs)63return await self.client.orders.get_order_state(**kwargs)6465async def get_trading_status(self, **kwargs) -> GetTradingStatusResponse:66return await self.client.market_data.get_trading_status(**kwargs)676869client = TinkoffClient(token=settings.token, sandbox=settings.sandbox)707172