1
0
mirror of https://github.com/microsoft/qlib.git synced 2026-07-14 08:16:54 +08:00

Merge github.com:microsoft/qlib into qlib_register_ops

This commit is contained in:
bxdd
2021-01-22 00:52:30 +09:00
5 changed files with 52 additions and 9 deletions

1
.gitignore vendored
View File

@@ -2,6 +2,7 @@
__pycache__/ __pycache__/
*.pyc *.pyc
*.pyd
*.so *.so
*.ipynb *.ipynb
.ipynb_checkpoints .ipynb_checkpoints

View File

@@ -312,6 +312,7 @@ Qlib data are stored in a compact format, which is efficient to be combined into
# Related Reports # Related Reports
- [Guide To Qlib: Microsofts AI Investment Platform](https://analyticsindiamag.com/qlib/)
- [【华泰金工林晓明团队】微软AI量化投资平台Qlib体验——华泰人工智能系列之四十](https://mp.weixin.qq.com/s/Brcd7im4NibJOJzZfMn6tQ) - [【华泰金工林晓明团队】微软AI量化投资平台Qlib体验——华泰人工智能系列之四十](https://mp.weixin.qq.com/s/Brcd7im4NibJOJzZfMn6tQ)
- [微软也搞AI量化平台还是开源的](https://mp.weixin.qq.com/s/47bP5YwxfTp2uTHjUBzJQQ) - [微软也搞AI量化平台还是开源的](https://mp.weixin.qq.com/s/47bP5YwxfTp2uTHjUBzJQQ)
- [微矿Qlib业内首个AI量化投资开源平台](https://mp.weixin.qq.com/s/vsJv7lsgjEi-ALYUz4CvtQ) - [微矿Qlib业内首个AI量化投资开源平台](https://mp.weixin.qq.com/s/vsJv7lsgjEi-ALYUz4CvtQ)

View File

@@ -106,6 +106,11 @@ if __name__ == "__main__":
model = init_instance_by_config(task["model"]) model = init_instance_by_config(task["model"])
dataset = init_instance_by_config(task["dataset"]) dataset = init_instance_by_config(task["dataset"])
# NOTE: This line is optional
# It demonstrates that the dataset can be used standalone.
example_df = dataset.prepare("train")
print(example_df.head())
# start exp # start exp
with R.start(experiment_name="workflow"): with R.start(experiment_name="workflow"):
R.log_params(**flatten_dict(task)) R.log_params(**flatten_dict(task))

View File

@@ -221,7 +221,11 @@ class InstrumentProvider(abc.ABC):
_df_list = [] _df_list = []
# FIXME: each process will read these files # FIXME: each process will read these files
for _path in Path(C.get_data_path()).joinpath("instruments").glob("*.txt"): for _path in Path(C.get_data_path()).joinpath("instruments").glob("*.txt"):
_df = pd.read_csv(_path, sep="\t", names=["inst", "start_datetime", "end_datetime", "save_inst"]) _df = pd.read_csv(
_path,
sep="\t",
names=["inst", "start_datetime", "end_datetime", "save_inst"],
)
_df_list.append(_df.iloc[:, [0, -1]]) _df_list.append(_df.iloc[:, [0, -1]])
df = pd.concat(_df_list, sort=False).sort_values("save_inst") df = pd.concat(_df_list, sort=False).sort_values("save_inst")
df = df.drop_duplicates(subset=["save_inst"], keep="first").fillna(axis=1, method="ffill") df = df.drop_duplicates(subset=["save_inst"], keep="first").fillna(axis=1, method="ffill")
@@ -587,7 +591,11 @@ class LocalInstrumentProvider(InstrumentProvider):
if not os.path.exists(fname): if not os.path.exists(fname):
raise ValueError("instruments not exists for market " + market) raise ValueError("instruments not exists for market " + market)
_instruments = dict() _instruments = dict()
df = pd.read_csv(fname, sep="\t", names=["inst", "start_datetime", "end_datetime", "save_inst"]) df = pd.read_csv(
fname,
sep="\t",
names=["inst", "start_datetime", "end_datetime", "save_inst"],
)
df["start_datetime"] = pd.to_datetime(df["start_datetime"]) df["start_datetime"] = pd.to_datetime(df["start_datetime"])
df["end_datetime"] = pd.to_datetime(df["end_datetime"]) df["end_datetime"] = pd.to_datetime(df["end_datetime"])
for row in df.itertuples(index=False): for row in df.itertuples(index=False):
@@ -1034,12 +1042,31 @@ class ClientProvider(BaseProvider):
DatasetD.set_conn(self.client) DatasetD.set_conn(self.client)
Cal = Wrapper() import sys
Inst = Wrapper()
FeatureD = Wrapper() if sys.version_info >= (3, 9):
ExpressionD = Wrapper() from typing import Annotated
DatasetD = Wrapper()
D = Wrapper() CalendarProviderWrapper = Annotated[CalendarProvider, Wrapper]
InstrumentProviderWrapper = Annotated[InstrumentProvider, Wrapper]
FeatureProviderWrapper = Annotated[FeatureProvider, Wrapper]
ExpressionProviderWrapper = Annotated[ExpressionProvider, Wrapper]
DatasetProviderWrapper = Annotated[DatasetProvider, Wrapper]
BaseProviderWrapper = Annotated[BaseProvider, Wrapper]
else:
CalendarProviderWrapper = CalendarProvider
InstrumentProviderWrapper = InstrumentProvider
FeatureProviderWrapper = FeatureProvider
ExpressionProviderWrapper = ExpressionProvider
DatasetProviderWrapper = DatasetProvider
BaseProviderWrapper = BaseProvider
Cal: CalendarProviderWrapper = Wrapper()
Inst: InstrumentProviderWrapper = Wrapper()
FeatureD: FeatureProviderWrapper = Wrapper()
ExpressionD: ExpressionProviderWrapper = Wrapper()
DatasetD: DatasetProviderWrapper = Wrapper()
D: BaseProviderWrapper = Wrapper()
def register_all_wrappers(C): def register_all_wrappers(C):

View File

@@ -461,5 +461,14 @@ class QlibRecorder:
self.get_exp().get_recorder().set_tags(**kwargs) self.get_exp().get_recorder().set_tags(**kwargs)
import sys
if sys.version_info >= (3, 9):
from typing import Annotated
QlibRecorderWrapper = Annotated[QlibRecorder, Wrapper]
else:
QlibRecorderWrapper = QlibRecorder
# global record # global record
R = Wrapper() R: QlibRecorderWrapper = Wrapper()