1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-01 10:01:19 +08:00

Add backend_freq_config parameter, support multi-freq uri

This commit is contained in:
zhupr
2021-08-26 14:14:54 +08:00
committed by you-n-g
parent e2739ac72c
commit e8126b0c39
2 changed files with 30 additions and 1 deletions

View File

@@ -83,6 +83,24 @@ _default_config = {
"provider": "LocalProvider",
# config it in qlib.init()
"provider_uri": "",
# backend_freq_config is dict: {"day": "1d dataset uri", "1min": "1min dataset uri"}
# If `backend_freq_config` is not None && is not empty && "freq" in `backend_freq_config.keys()`
# use `backend_freq_config` as backend-uri
# else:
# use `provider_uri` as backend-uri
# Examples:
# qlib.init(provider_uri="qlib_data/1d", backend_freq_config={"1min": "qlib_data/1min"})
# # using provider_uri
# D.features(D.instruments("all"), ["$close"], freq="day")
# # using backend_freq_config["1min"]
# D.features(D.instruments("all"), ["$close"], freq="1min")
# ########################
# qlib.init(provider_uri="qlib_data/1d", backend_freq_config={"1min": "qlib_data/1min", "day": "qlib_data/day"})
# # using backend_freq_config["day"]
# D.features(D.instruments("all"), ["$close"], freq="day")
# # raise ValueError
# D.features(D.instruments("all"), ["$close"], freq="week")
"backend_freq_config": None,
# cache
"expression_cache": None,
"dataset_cache": None,

View File

@@ -48,8 +48,19 @@ class ProviderBackendMixin:
# default provider_uri map
if "provider_uri" not in backend_kwargs:
# if the user has no uri configured, use: uri = uri_map[freq]
# NOTE: uri priority
# 1. backend_obj.kwargs["provider_uri"]
# 2. backend_obj.kwargs["backend_freq_config"]
# 3. C.backend_freq_config, or qlib.init(backend_freq_config={})
# 4. C.provider_uri, or qlib.init(provider_uri="")
provider_uri_map = backend_kwargs.setdefault("backend_freq_config", {})
freq = kwargs.get("freq", "day")
provider_uri_map = backend_kwargs.setdefault("provider_uri_map", {freq: C.get_data_path()})
if C.backend_freq_config is not None:
if freq not in provider_uri_map:
provider_uri_map[freq] = C.backend_freq_config.get(freq, C.get_data_path())
else:
if freq not in provider_uri_map:
provider_uri_map[freq] = C.get_data_path()
backend_kwargs["provider_uri"] = provider_uri_map[freq]
backend.setdefault("kwargs", {}).update(**kwargs)
return init_instance_by_config(backend)