Commit 98988331 authored by jichao's avatar jichao

实盘完成待测试

parent 7e202633
import sys
import time
from datetime import datetime as dt
from enum import Enum, unique
import pandas as pd import pandas as pd
from framework import component, autowired, block_execute, get_config, get_logger, filter_weekend, workday_range, format_date, prev_workday
from api import RoboExecutor, AssetRisk, Datum, AssetPool, PortfoliosBuilder, PortfoliosRisk, PortfoliosHolder, PortfoliosType from api import RoboExecutor, AssetRisk, Datum, AssetPool, PortfoliosBuilder, PortfoliosRisk, PortfoliosHolder, PortfoliosType
from datetime import datetime as dt from framework import (
import time component, autowired, block_execute, get_config, get_logger, filter_weekend,
from enum import Enum, unique workday_range, format_date, prev_workday, parse_date
)
logger = get_logger(__name__) logger = get_logger(__name__)
...@@ -64,7 +69,8 @@ class BacktestExector(RoboExecutor): ...@@ -64,7 +69,8 @@ class BacktestExector(RoboExecutor):
if self.start_step.within(BacktestStep.EWMA_VALUE): if self.start_step.within(BacktestStep.EWMA_VALUE):
logger.info("start to build fund ewma value.".center(50, '-')) logger.info("start to build fund ewma value.".center(50, '-'))
now = dt.now() now = dt.now()
block_execute(self._risk.build_risk_date, {x['id']: (x['id'], self.end_date) for x in self._datum.get_fund_datums(risk=(3, 4, 5))}, isolate=True, result=False) block_execute(self._risk.build_risk_date, {x['id']: (x['id'], self.end_date) for x in self._datum.get_fund_datums(risk=(3, 4, 5))}, isolate=True,
result=False)
logger.info(f"build fund ewma value success, use[{(dt.now() - now).seconds}s]") logger.info(f"build fund ewma value success, use[{(dt.now() - now).seconds}s]")
if self.start_step.within(BacktestStep.ASSET_POOL): if self.start_step.within(BacktestStep.ASSET_POOL):
logger.info("start to build asset pool".center(50, '-')) logger.info("start to build asset pool".center(50, '-'))
...@@ -79,7 +85,9 @@ class BacktestExector(RoboExecutor): ...@@ -79,7 +85,9 @@ class BacktestExector(RoboExecutor):
if self.start_step.within(BacktestStep.NORMAL_PORTFOLIO): if self.start_step.within(BacktestStep.NORMAL_PORTFOLIO):
logger.info("start to build normal portfolios".center(50, '-')) logger.info("start to build normal portfolios".center(50, '-'))
now = dt.now() now = dt.now()
block_execute(self._builder.get_portfolios, {f'{x.name}_{format_date(j)}': (j, x) for x in PortfoliosRisk for j in workday_range(self.start_date, self.end_date)}, isolate=True, result=False) block_execute(self._builder.get_portfolios,
{f'{x.name}_{format_date(j)}': (j, x) for x in PortfoliosRisk for j in workday_range(self.start_date, self.end_date)}, isolate=True,
result=False)
logger.info(f"build normal portfolios success, use[{(dt.now() - now).seconds}s]") logger.info(f"build normal portfolios success, use[{(dt.now() - now).seconds}s]")
if self.start_step.within(BacktestStep.HOLD_PORTFOLIO): if self.start_step.within(BacktestStep.HOLD_PORTFOLIO):
logger.info("start to build hold portfolios".center(50, '-')) logger.info("start to build hold portfolios".center(50, '-'))
...@@ -101,8 +109,17 @@ class RealExecutor(RoboExecutor): ...@@ -101,8 +109,17 @@ class RealExecutor(RoboExecutor):
def start_date(self): def start_date(self):
return pd.to_datetime(filter_weekend(self._config['start-date'])) return pd.to_datetime(filter_weekend(self._config['start-date']))
@property
def curt_date(self):
if len(sys.argv) > 1:
try:
return parse_date(sys.argv[1])
except Exception as e:
logger.warning(f'get curt date from argv failure.', e)
return dt.combine(dt.today().date(), dt.min.time())
def start_exec(self): def start_exec(self):
date = dt.combine(dt.today().date(), dt.min.time()) date = self.curt_date
for risk in PortfoliosRisk: for risk in PortfoliosRisk:
logger.info(f"start to build risk[{risk.name}] real for date[{format_date(date)}]".center(50, '-')) logger.info(f"start to build risk[{risk.name}] real for date[{format_date(date)}]".center(50, '-'))
now = dt.now() now = dt.now()
...@@ -112,4 +129,3 @@ class RealExecutor(RoboExecutor): ...@@ -112,4 +129,3 @@ class RealExecutor(RoboExecutor):
if p_type is not PortfoliosType.NORMAL: if p_type is not PortfoliosType.NORMAL:
self._builder.get_portfolios(prev_workday(date), p_type) self._builder.get_portfolios(prev_workday(date), p_type)
logger.info(f"build risk[{risk.name}] real for date[{format_date(date)}] success, use[{(dt.now() - now).seconds}s]") logger.info(f"build risk[{risk.name}] real for date[{format_date(date)}] success, use[{(dt.now() - now).seconds}s]")
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