from abc import ABC, abstractmethod from py_jftech import autowired from api import RebalanceSignal, PortfoliosBuilder, PortfoliosRisk from rebalance.dao import robo_rebalance_signal as rrs class BaseRebalanceSignal(RebalanceSignal, ABC): @autowired def __init__(self, builder: PortfoliosBuilder = None): self._builder = builder def get_signal(self, day, risk: PortfoliosRisk): signal = rrs.get_one(type=self.signal_type, risk=risk, date=day) if signal: return signal trigger = self.is_trigger(day, risk) if trigger: portfolio = self._builder.get_portfolios(day, risk, self.signal_type.p_type) id = rrs.insert({ 'date': day, 'type': self.signal_type, 'risk': risk, 'portfolio_type': self.signal_type.p_type, 'portfolio': portfolio }) return rrs.get_by_id(id) return None @abstractmethod def is_trigger(self, day, risk: PortfoliosRisk) -> bool: pass