From e8126b0c39bb0008f02dbd2faa7424cd7ee26411 Mon Sep 17 00:00:00 2001 From: zhupr Date: Thu, 26 Aug 2021 14:14:54 +0800 Subject: [PATCH] Add `backend_freq_config` parameter, support multi-freq uri --- qlib/config.py | 18 ++++++++++++++++++ qlib/data/data.py | 13 ++++++++++++- 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/qlib/config.py b/qlib/config.py index 15c13a015..be29180f8 100644 --- a/qlib/config.py +++ b/qlib/config.py @@ -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, diff --git a/qlib/data/data.py b/qlib/data/data.py index 27c181164..8ec4355c6 100644 --- a/qlib/data/data.py +++ b/qlib/data/data.py @@ -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)