mirror of
https://github.com/microsoft/qlib.git
synced 2026-07-10 22:36:55 +08:00
bug fixed
This commit is contained in:
@@ -262,12 +262,29 @@ class OnlineManager(Serializable):
|
||||
Prepare all models and signals if something is waiting for preparation.
|
||||
|
||||
Args:
|
||||
model_kwargs: the params for `prepare_online_models`
|
||||
model_kwargs: the params for `end_train`
|
||||
signal_kwargs: the params for `prepare_signals`
|
||||
"""
|
||||
last_models = {}
|
||||
signals_time = D.calendar()[0]
|
||||
need_prepare = False
|
||||
for cur_time, strategy_models in self.history.items():
|
||||
self.cur_time = cur_time
|
||||
|
||||
for strategy, models in strategy_models.items():
|
||||
models = self.trainer.end_train(models, experiment_name=strategy.name_id)
|
||||
# NOTE: Assumption: the predictions of online models need less than next cur_time, or this method will work in a wrong way.
|
||||
self.prepare_signals(**signal_kwargs)
|
||||
# only new online models need to prepare
|
||||
if last_models.setdefault(strategy, set()) != set(models):
|
||||
models = self.trainer.end_train(models, experiment_name=strategy.name_id, **model_kwargs)
|
||||
strategy.tool.reset_online_tag(models)
|
||||
need_prepare = True
|
||||
last_models[strategy] = set(models)
|
||||
|
||||
if need_prepare:
|
||||
# NOTE: Assumption: the predictions of online models need less than next cur_time, or this method will work in a wrong way.
|
||||
self.prepare_signals(**signal_kwargs)
|
||||
if signals_time > cur_time:
|
||||
self.logger.warn(
|
||||
f"The signals have already parpred to {signals_time} by last preparation, but current time is only {cur_time}. This may be because the online models predict more than they should, which can cause signals to be contaminated by the offline models."
|
||||
)
|
||||
need_prepare = False
|
||||
signals_time = self.signals.index.get_level_values("datetime").max()
|
||||
|
||||
@@ -39,6 +39,9 @@ class Recorder:
|
||||
def __str__(self):
|
||||
return str(self.info)
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return hash(self.info["id"])
|
||||
|
||||
@property
|
||||
def info(self):
|
||||
output = dict()
|
||||
@@ -232,6 +235,14 @@ class MLflowRecorder(Recorder):
|
||||
client=self.client,
|
||||
)
|
||||
|
||||
def __hash__(self) -> int:
|
||||
return hash(self.info["id"])
|
||||
|
||||
def __eq__(self, o: object) -> bool:
|
||||
if isinstance(o, MLflowRecorder):
|
||||
return self.info["id"] == o.info["id"]
|
||||
return False
|
||||
|
||||
@property
|
||||
def uri(self):
|
||||
return self._uri
|
||||
|
||||
Reference in New Issue
Block a user