Commit ce024def authored by jichao's avatar jichao

依赖注入实现中

parent e3f3a32e
......@@ -175,10 +175,10 @@ class PortfoliosBuilder(ABC):
pass
class ControlSignal(ABC):
class RebalanceSignal(ABC):
'''
控制信号,发起是否调仓服务
'''
@abstractmethod
def handle(self, day, risk: PortfoliosRisk):
def do_signal(self, day, risk: PortfoliosRisk):
pass
......@@ -72,7 +72,7 @@ class MptSolver:
return round(len(self.rtn_history) * self.beta + 0.499999)
@property
def pct_value(self):
def quantile(self):
return self.get_config('mpt.quantile')
def solve_max_rtn(self):
......@@ -110,8 +110,8 @@ class MptSolver:
def solve_mpt(self, min_rtn, max_rtn):
logger.debug(f'...... ...... ...... ...... ...... ...... ...... ...... '
f'MPT ... sub risk : pct_value = {self.pct_value}')
big_y = min_rtn + self.pct_value * (max_rtn - min_rtn)
f'MPT ... sub risk : pct_value = {self.quantile}')
big_y = min_rtn + self.quantile * (max_rtn - min_rtn)
logger.debug(f'big_Y = target_Return = {big_y}')
model = self.create_model()
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:
def solve_poem(self, min_rtn, max_rtn, base_cvar, max_cvar):
k_history = len(self.rtn_history)
quantile = self.pct_value
quantile = self.quantile
logger.debug(f'...... ...... ...... ...... ...... ...... ...... ...... '
f'POEM With CVaR constraints ... sub risk : pct_value = {quantile}')
big_y = min_rtn + quantile * (max_rtn - min_rtn)
......
......@@ -8,7 +8,7 @@ class PortfoliosTest(unittest.TestCase):
logger = get_logger(__name__)
@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)
self.logger.info("portfolios: ")
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