mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-13 15:56:57 +08:00
Merge remote-tracking branch 'origin/main' into nested_decision_exe
This commit is contained in:
117
tests/rolling_tests/test_update_pred.py
Normal file
117
tests/rolling_tests/test_update_pred.py
Normal file
@@ -0,0 +1,117 @@
|
||||
import copy
|
||||
import unittest
|
||||
|
||||
import fire
|
||||
import pandas as pd
|
||||
|
||||
import qlib
|
||||
from qlib.config import REG_CN
|
||||
from qlib.data import D
|
||||
from qlib.model.trainer import task_train
|
||||
from qlib.tests import TestAutoData
|
||||
from qlib.tests.config import CSI300_GBDT_TASK
|
||||
from qlib.workflow.online.utils import OnlineToolR
|
||||
from qlib.workflow.online.update import LabelUpdater
|
||||
|
||||
|
||||
class TestRolling(TestAutoData):
|
||||
_setup_kwargs = dict(expression_cache=None, dataset_cache=None)
|
||||
|
||||
def test_update_pred(self):
|
||||
"""
|
||||
This test is for testing if it will raise error if the `to_date` is out of the boundary.
|
||||
"""
|
||||
task = copy.deepcopy(CSI300_GBDT_TASK)
|
||||
|
||||
task["record"] = {
|
||||
"class": "SignalRecord",
|
||||
"module_path": "qlib.workflow.record_temp",
|
||||
}
|
||||
|
||||
exp_name = "online_srv_test"
|
||||
|
||||
cal = D.calendar()
|
||||
latest_date = cal[-1]
|
||||
|
||||
train_start = latest_date - pd.Timedelta(days=61)
|
||||
train_end = latest_date - pd.Timedelta(days=41)
|
||||
task["dataset"]["kwargs"]["segments"] = {
|
||||
"train": (train_start, train_end),
|
||||
"valid": (latest_date - pd.Timedelta(days=40), latest_date - pd.Timedelta(days=21)),
|
||||
"test": (latest_date - pd.Timedelta(days=20), latest_date),
|
||||
}
|
||||
|
||||
task["dataset"]["kwargs"]["handler"]["kwargs"] = {
|
||||
"start_time": train_start,
|
||||
"end_time": latest_date,
|
||||
"fit_start_time": train_start,
|
||||
"fit_end_time": train_end,
|
||||
"instruments": "csi300",
|
||||
}
|
||||
|
||||
rec = task_train(task, exp_name)
|
||||
|
||||
pred = rec.load_object("pred.pkl")
|
||||
|
||||
online_tool = OnlineToolR(exp_name)
|
||||
online_tool.reset_online_tag(rec) # set to online model
|
||||
|
||||
online_tool.update_online_pred(to_date=latest_date + pd.Timedelta(days=10))
|
||||
|
||||
def test_update_label(self):
|
||||
|
||||
task = copy.deepcopy(CSI300_GBDT_TASK)
|
||||
|
||||
task["record"] = {
|
||||
"class": "SignalRecord",
|
||||
"module_path": "qlib.workflow.record_temp",
|
||||
}
|
||||
|
||||
exp_name = "online_srv_test"
|
||||
|
||||
cal = D.calendar()
|
||||
shift = 10
|
||||
latest_date = cal[-1 - shift]
|
||||
|
||||
train_start = latest_date - pd.Timedelta(days=61)
|
||||
train_end = latest_date - pd.Timedelta(days=41)
|
||||
task["dataset"]["kwargs"]["segments"] = {
|
||||
"train": (train_start, train_end),
|
||||
"valid": (latest_date - pd.Timedelta(days=40), latest_date - pd.Timedelta(days=21)),
|
||||
"test": (latest_date - pd.Timedelta(days=20), latest_date),
|
||||
}
|
||||
|
||||
task["dataset"]["kwargs"]["handler"]["kwargs"] = {
|
||||
"start_time": train_start,
|
||||
"end_time": latest_date,
|
||||
"fit_start_time": train_start,
|
||||
"fit_end_time": train_end,
|
||||
"instruments": "csi300",
|
||||
}
|
||||
|
||||
rec = task_train(task, exp_name)
|
||||
|
||||
pred = rec.load_object("pred.pkl")
|
||||
|
||||
online_tool = OnlineToolR(exp_name)
|
||||
online_tool.reset_online_tag(rec) # set to online model
|
||||
online_tool.update_online_pred()
|
||||
|
||||
new_pred = rec.load_object("pred.pkl")
|
||||
label = rec.load_object("label.pkl")
|
||||
label_date = label.dropna().index.get_level_values("datetime").max()
|
||||
pred_date = new_pred.dropna().index.get_level_values("datetime").max()
|
||||
|
||||
# The prediction is updated, but the label is not updated.
|
||||
self.assertTrue(label_date < pred_date)
|
||||
|
||||
# Update label now
|
||||
lu = LabelUpdater(rec)
|
||||
lu.update()
|
||||
new_label = rec.load_object("label.pkl")
|
||||
new_label_date = new_label.index.get_level_values("datetime").max()
|
||||
self.assertTrue(new_label_date == pred_date) # make sure the label is updated now
|
||||
|
||||
|
||||
if __name__ == "__main__":
|
||||
unittest.main()
|
||||
@@ -149,15 +149,15 @@ class TestStorage(TestAutoData):
|
||||
|
||||
"""
|
||||
|
||||
feature = FeatureStorage(instrument="SH600004", field="close", freq="day", provider_uri=self.provider_uri)
|
||||
feature = FeatureStorage(instrument="SZ300677", field="close", freq="day", provider_uri=self.provider_uri)
|
||||
|
||||
with self.assertRaises(IndexError):
|
||||
print(feature[0])
|
||||
assert isinstance(
|
||||
feature[815][1], (float, np.float32)
|
||||
feature[3049][1], (float, np.float32)
|
||||
), f"{feature.__class__.__name__}.__getitem__(i: int) error"
|
||||
assert len(feature[815:818]) == 3, f"{feature.__class__.__name__}.__getitem__(s: slice) error"
|
||||
print(f"feature[815: 818]: \n{feature[815: 818]}")
|
||||
assert len(feature[3049:3052]) == 3, f"{feature.__class__.__name__}.__getitem__(s: slice) error"
|
||||
print(f"feature[3049: 3052]: \n{feature[3049: 3052]}")
|
||||
|
||||
print(f"feature[:].tail(): \n{feature[:].tail()}")
|
||||
|
||||
|
||||
Reference in New Issue
Block a user