Commit ce024def authored by jichao's avatar jichao

依赖注入实现中

parent e3f3a32e
...@@ -175,10 +175,10 @@ class PortfoliosBuilder(ABC): ...@@ -175,10 +175,10 @@ class PortfoliosBuilder(ABC):
pass pass
class ControlSignal(ABC): class RebalanceSignal(ABC):
''' '''
控制信号,发起是否调仓服务 控制信号,发起是否调仓服务
''' '''
@abstractmethod @abstractmethod
def handle(self, day, risk: PortfoliosRisk): def do_signal(self, day, risk: PortfoliosRisk):
pass pass
...@@ -72,7 +72,7 @@ class MptSolver: ...@@ -72,7 +72,7 @@ class MptSolver:
return round(len(self.rtn_history) * self.beta + 0.499999) return round(len(self.rtn_history) * self.beta + 0.499999)
@property @property
def pct_value(self): def quantile(self):
return self.get_config('mpt.quantile') return self.get_config('mpt.quantile')
def solve_max_rtn(self): def solve_max_rtn(self):
...@@ -110,8 +110,8 @@ class MptSolver: ...@@ -110,8 +110,8 @@ class MptSolver:
def solve_mpt(self, min_rtn, max_rtn): def solve_mpt(self, min_rtn, max_rtn):
logger.debug(f'...... ...... ...... ...... ...... ...... ...... ...... ' logger.debug(f'...... ...... ...... ...... ...... ...... ...... ...... '
f'MPT ... sub risk : pct_value = {self.pct_value}') f'MPT ... sub risk : pct_value = {self.quantile}')
big_y = min_rtn + self.pct_value * (max_rtn - min_rtn) big_y = min_rtn + self.quantile * (max_rtn - min_rtn)
logger.debug(f'big_Y = target_Return = {big_y}') logger.debug(f'big_Y = target_Return = {big_y}')
model = self.create_model() model = self.create_model()
model.cons_rtn = Constraint(expr=sum([model.w[i] * self.rtn_annualized[i] for i in model.indices]) >= big_y) model.cons_rtn = Constraint(expr=sum([model.w[i] * self.rtn_annualized[i] for i in model.indices]) >= big_y)
...@@ -128,7 +128,7 @@ class MptSolver: ...@@ -128,7 +128,7 @@ class MptSolver:
def solve_poem(self, min_rtn, max_rtn, base_cvar, max_cvar): def solve_poem(self, min_rtn, max_rtn, base_cvar, max_cvar):
k_history = len(self.rtn_history) k_history = len(self.rtn_history)
quantile = self.pct_value quantile = self.quantile
logger.debug(f'...... ...... ...... ...... ...... ...... ...... ...... ' logger.debug(f'...... ...... ...... ...... ...... ...... ...... ...... '
f'POEM With CVaR constraints ... sub risk : pct_value = {quantile}') f'POEM With CVaR constraints ... sub risk : pct_value = {quantile}')
big_y = min_rtn + quantile * (max_rtn - min_rtn) big_y = min_rtn + quantile * (max_rtn - min_rtn)
......
...@@ -8,7 +8,7 @@ class PortfoliosTest(unittest.TestCase): ...@@ -8,7 +8,7 @@ class PortfoliosTest(unittest.TestCase):
logger = get_logger(__name__) logger = get_logger(__name__)
@autowired(names={'builder': 'poem'}) @autowired(names={'builder': 'poem'})
def test_portfolio_builder(self, builder: PortfoliosBuilder = None): def test_poem_portfolio_builder(self, builder: PortfoliosBuilder = None):
result, detail = builder.build_portfolio(parse_date('2011-11-07'), PortfoliosType.NORMAL) result, detail = builder.build_portfolio(parse_date('2011-11-07'), PortfoliosType.NORMAL)
self.logger.info("portfolios: ") self.logger.info("portfolios: ")
for risk, portfolio in result.items(): for risk, portfolio in result.items():
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment