Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
wiseplat
GitHub Repository: wiseplat/python-code
Path: blob/master/ invest-robot-contest_TradingCompetition2022-main/stock/StockBuilder.py
5927 views
1
from stock.Stock import Stock
2
from logger.LoggerFactory import LoggerFactory
3
from logger.BusinessLogger import BusinessLogger
4
from models.ModelBuilder import ModelBuilder
5
from tinkoff.invest import InstrumentIdType, RequestError
6
from order.OrderStorage import OrderStorage
7
8
class StockBuilder:
9
@classmethod
10
def buildStock(cls, ticker, model_name, config, client) -> Stock:
11
stock = Stock(ticker)
12
stock.logger = LoggerFactory.get_business_logger_instance()
13
stock.model = ModelBuilder.buildModel(model_name, stock.ticker, config)
14
stock.model_name = model_name
15
stock.config = config
16
17
if stock:
18
try:
19
instrument = client.instruments.share_by(id_type=InstrumentIdType.INSTRUMENT_ID_TYPE_TICKER,
20
class_code='TQBR', id=stock.ticker).instrument
21
stock.figi = instrument.figi
22
stock.count_in_lot = instrument.lot
23
except RequestError as error:
24
# Log tech error
25
LoggerFactory.get_tech_logger_instance().add_except(error)
26
return stock
27
28
@classmethod
29
def re_init_stock(cls, stock: Stock, client):
30
new_stock = cls.buildStock(ticker=stock.ticker, model_name=stock.model_name,
31
config=stock.config, client=client)
32
order_storage = OrderStorage.get_order_storage()
33
order_storage.free_stock_orders(stock)
34
35
# Log data
36
LoggerFactory.get_business_logger_instance().add_event(BusinessLogger.STOCK_RE_INIT,
37
new_stock, new_stock.model)
38
return new_stock
39
40