Path: blob/master/ invest-robot-contest_TradingCompetition2022-main/stock/StockStorage.py
5931 views
from stock.Stock import Stock1from collections import defaultdict2from stock.StockBuilder import StockBuilder3from tinkoff.invest import InstrumentIdType, RequestError4from logger.LoggerFactory import LoggerFactory5from logger.BusinessLogger import BusinessLogger678class StockStorage:9"""10Class for storage all stock instance11"""1213@staticmethod14def collect_stock(client, config, stock_storage):15""" Create instance of stock, set FIGI from market and save instance into Storage16"""17# List of tickers for trading18tickers_name = config.get(section='TradingStrategy', option='ticker_list').split(',')19# Model name for trading20model_name = config.get(section='TradingStrategy', option='model') # Trading model name21for ticker_name in tickers_name:22stock: Stock = StockBuilder.buildStock(ticker=ticker_name, model_name=model_name,23config=config, client=client)24if stock:25stock_storage.add(stock)26# Log data27LoggerFactory.get_business_logger_instance().add_event(BusinessLogger.STOCK_IN_WORK, stock)2829return stock_storage3031def __init__(self):32self._storage = defaultdict(Stock)3334''' { Iteration for stock in Storage '''3536def __iter__(self):37self._iteration_cursor = 038self._iteration_keys = list(self._storage.keys())39return self4041def __next__(self):42if self._iteration_cursor < len(self._iteration_keys):43stock = self._storage[self._iteration_keys[self._iteration_cursor]]44self._iteration_cursor += 145return stock46else:47raise StopIteration4849''' Iteration for stock in Storage } '''5051def add(self, stock: Stock):52self._storage[stock.ticker] = stock5354def delete(self, stock: Stock) -> Stock:55stock = self._storage[stock.ticker]56del self._storage[stock.ticker]57return stock5859def get_stock(self, ticker):60return self._storage[ticker]6162def get_all_figis(self):63figis = set()64for stock in self:65figis.add(stock.figi)66return figis6768def get_stock_by_figi(self, figi) -> Stock:69# ToDo Do optimize, figi should be dict key as ticker70for stock in self:71if stock.figi == figi:72return stock7374@property75def is_empty(self):76return True if len(self._storage) == 0 else False777879