def parse_config(config_args, config_path=None, click_type=False, source_code=None, user_funcs=None): conf = default_config() deep_update(user_config(), conf) deep_update(project_config(), conf) if config_path is not None: deep_update(load_yaml(config_path), conf) if 'base__strategy_file' in config_args and config_args[ 'base__strategy_file']: # FIXME: ugly, we need this to get code conf['base']['strategy_file'] = config_args['base__strategy_file'] elif ('base' in config_args and 'strategy_file' in config_args['base'] and config_args['base']['strategy_file']): conf['base']['strategy_file'] = config_args['base']['strategy_file'] if user_funcs is None: for k, v in code_config(conf, source_code).items(): if k in conf['whitelist']: deep_update(v, conf[k]) mod_configs = config_args.pop('mod_configs', []) for k, v in mod_configs: key = 'mod__{}'.format(k.replace('.', '__')) config_args[key] = mod_config_value_parse(v) if click_type: for k, v in config_args.items(): # click multiple=True时传入tuple类型 无输入时为tuple() if v is None or (v == tuple()): continue if k == 'base__accounts' and not v: continue key_path = k.split('__') sub_dict = conf for p in key_path[:-1]: if p not in sub_dict: sub_dict[p] = {} sub_dict = sub_dict[p] sub_dict[key_path[-1]] = v else: deep_update(config_args, conf) config = RqAttrDict(conf) set_locale(config.extra.locale) def _to_date(v): return pd.Timestamp(v).date() config.base.start_date = _to_date(config.base.start_date) config.base.end_date = _to_date(config.base.end_date) if config.base.data_bundle_path is None: config.base.data_bundle_path = os.path.join( os.path.expanduser(rqalpha_path), "bundle") config.base.run_type = parse_run_type(config.base.run_type) config.base.accounts = parse_accounts(config.base.accounts) config.base.init_positions = parse_init_positions( config.base.init_positions) config.base.persist_mode = parse_persist_mode(config.base.persist_mode) config.base.future_info = parse_future_info(config.base.future_info) if config.extra.context_vars: if isinstance(config.extra.context_vars, six.string_types): config.extra.context_vars = json.loads(config.extra.context_vars) if config.base.frequency == "1d": logger.DATETIME_FORMAT = "%Y-%m-%d" return config
def parse_config(config_args, config_path=None, click_type=False, source_code=None, user_funcs=None): conf = default_config() deep_update(user_config(), conf) deep_update(project_config(), conf) if config_path is not None: deep_update(load_yaml(config_path), conf) if 'base__strategy_file' in config_args and config_args['base__strategy_file']: # FIXME: ugly, we need this to get code conf['base']['strategy_file'] = config_args['base__strategy_file'] elif ('base' in config_args and 'strategy_file' in config_args['base'] and config_args['base']['strategy_file']): conf['base']['strategy_file'] = config_args['base']['strategy_file'] if user_funcs is None: for k, v in six.iteritems(code_config(conf, source_code)): if k in conf['whitelist']: deep_update(v, conf[k]) mod_configs = config_args.pop('mod_configs', []) for k, v in mod_configs: key = 'mod__{}'.format(k.replace('.', '__')) config_args[key] = mod_config_value_parse(v) if click_type: for k, v in six.iteritems(config_args): if v is None: continue if k == 'base__accounts' and not v: continue key_path = k.split('__') sub_dict = conf for p in key_path[:-1]: if p not in sub_dict: sub_dict[p] = {} sub_dict = sub_dict[p] sub_dict[key_path[-1]] = v else: deep_update(config_args, conf) config = RqAttrDict(conf) set_locale(config.extra.locale) def _to_date(v): return pd.Timestamp(v).date() config.base.start_date = _to_date(config.base.start_date) config.base.end_date = _to_date(config.base.end_date) if config.base.data_bundle_path is None: config.base.data_bundle_path = os.path.join(os.path.expanduser(rqalpha_path), "bundle") config.base.run_type = parse_run_type(config.base.run_type) config.base.accounts = parse_accounts(config.base.accounts) config.base.init_positions = parse_init_positions(config.base.init_positions) config.base.persist_mode = parse_persist_mode(config.base.persist_mode) config.base.market = parse_market(config.base.market) config.base.future_info = parse_future_info(config.base.future_info) if config.extra.context_vars: if isinstance(config.extra.context_vars, six.string_types): config.extra.context_vars = json.loads(to_utf8(config.extra.context_vars)) if config.base.frequency == "1d": logger.DATETIME_FORMAT = "%Y-%m-%d" return config
def parse_config(config_args, config_path=None, click_type=False, source_code=None, user_funcs=None): conf = default_config() deep_update(user_config(), conf) deep_update(project_config(), conf) if 'base__strategy_file' in config_args and config_args[ 'base__strategy_file']: # FIXME: ugly, we need this to get code conf['base']['strategy_file'] = config_args['base__strategy_file'] elif ('base' in config_args and 'strategy_file' in config_args['base'] and config_args['base']['strategy_file']): conf['base']['strategy_file'] = config_args['base']['strategy_file'] if user_funcs is None: for k, v in six.iteritems(code_config(conf, source_code)): if k in conf['whitelist']: deep_update(v, conf[k]) mod_configs = config_args.pop('mod_configs', []) for k, v in mod_configs: key = 'mod__{}'.format(k.replace('.', '__')) config_args[key] = mod_config_value_parse(v) if click_type: for k, v in six.iteritems(config_args): if v is None: continue if k == 'base__accounts' and not v: continue key_path = k.split('__') sub_dict = conf for p in key_path[:-1]: if p not in sub_dict: sub_dict[p] = {} sub_dict = sub_dict[p] sub_dict[key_path[-1]] = v else: deep_update(config_args, conf) config = RqAttrDict(conf) set_locale(config.extra.locale) def _to_date(v): return pd.Timestamp(v).date() config.base.start_date = _to_date(config.base.start_date) config.base.end_date = _to_date(config.base.end_date) if config.base.data_bundle_path is None: config.base.data_bundle_path = os.path.join( os.path.expanduser(rqalpha_path), "bundle") config.base.run_type = parse_run_type(config.base.run_type) config.base.accounts = parse_accounts(config.base.accounts) config.base.persist_mode = parse_persist_mode(config.base.persist_mode) if config.extra.context_vars: if isinstance(config.extra.context_vars, six.string_types): config.extra.context_vars = json.loads( to_utf8(config.extra.context_vars)) system_log.level = getattr(logbook, config.extra.log_level.upper(), logbook.NOTSET) std_log.level = getattr(logbook, config.extra.log_level.upper(), logbook.NOTSET) user_log.level = getattr(logbook, config.extra.log_level.upper(), logbook.NOTSET) user_system_log.level = getattr(logbook, config.extra.log_level.upper(), logbook.NOTSET) if config.base.frequency == "1d": logger.DATETIME_FORMAT = "%Y-%m-%d" system_log.debug("\n" + pformat(config.convert_to_dict())) return config