From 9898833120b424392135ddc5ca0dfce0e4364838 Mon Sep 17 00:00:00 2001 From: jichao <jichao614@foxmail.com> Date: Mon, 28 Nov 2022 12:40:01 +0800 Subject: [PATCH] =?UTF-8?q?=E5=AE=9E=E7=9B=98=E5=AE=8C=E6=88=90=E5=BE=85?= =?UTF-8?q?=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- robo_executor.py | 34 +++++++++++++++++++++++++--------- 1 file changed, 25 insertions(+), 9 deletions(-) diff --git a/robo_executor.py b/robo_executor.py index eefa425..6f0a6f6 100644 --- a/robo_executor.py +++ b/robo_executor.py @@ -1,10 +1,15 @@ +import sys +import time +from datetime import datetime as dt +from enum import Enum, unique + 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 datetime import datetime as dt -import time -from enum import Enum, unique +from framework import ( + component, autowired, block_execute, get_config, get_logger, filter_weekend, + workday_range, format_date, prev_workday, parse_date +) logger = get_logger(__name__) @@ -64,7 +69,8 @@ class BacktestExector(RoboExecutor): if self.start_step.within(BacktestStep.EWMA_VALUE): logger.info("start to build fund ewma value.".center(50, '-')) 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]") if self.start_step.within(BacktestStep.ASSET_POOL): logger.info("start to build asset pool".center(50, '-')) @@ -72,14 +78,16 @@ class BacktestExector(RoboExecutor): workdays = workday_range(self.start_date, self.end_date) for date in workdays: self._risk.get_risk_pool(date) - time.sleep(0.05) # 这里需è¦sleep,å¦åˆ™é‡Œé¢å¤šè¿›ç¨‹å¤ªå¿«ï¼Œæ•°æ®åº“连接容易超时 + time.sleep(0.05) # 这里需è¦sleep,å¦åˆ™é‡Œé¢å¤šè¿›ç¨‹å¤ªå¿«ï¼Œæ•°æ®åº“连接容易超时 for date in workdays: self._pool.get_pool(date) logger.info(f"build asset pool success, use[{(dt.now() - now).seconds}s]") if self.start_step.within(BacktestStep.NORMAL_PORTFOLIO): logger.info("start to build normal portfolios".center(50, '-')) 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]") if self.start_step.within(BacktestStep.HOLD_PORTFOLIO): logger.info("start to build hold portfolios".center(50, '-')) @@ -101,8 +109,17 @@ class RealExecutor(RoboExecutor): def start_date(self): 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): - date = dt.combine(dt.today().date(), dt.min.time()) + date = self.curt_date for risk in PortfoliosRisk: logger.info(f"start to build risk[{risk.name}] real for date[{format_date(date)}]".center(50, '-')) now = dt.now() @@ -112,4 +129,3 @@ class RealExecutor(RoboExecutor): if p_type is not PortfoliosType.NORMAL: 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]") - -- 2.18.1