From 178c2014b044632c87c9295b37c7ef861fb0cf37 Mon Sep 17 00:00:00 2001 From: robcaulk Date: Fri, 6 May 2022 16:20:52 +0200 Subject: [PATCH] appease mypy --- freqtrade/freqai/data_kitchen.py | 23 +++++++++++++---------- freqtrade/freqai/freqai_interface.py | 16 ++++++++++++---- 2 files changed, 25 insertions(+), 14 deletions(-) diff --git a/freqtrade/freqai/data_kitchen.py b/freqtrade/freqai/data_kitchen.py index eac5eac30..b2ea71984 100644 --- a/freqtrade/freqai/data_kitchen.py +++ b/freqtrade/freqai/data_kitchen.py @@ -8,6 +8,7 @@ from pathlib import Path from typing import Any, Dict, List, Tuple import numpy as np +import numpy.typing as npt import pandas as pd from joblib import dump, load from pandas import DataFrame @@ -35,14 +36,14 @@ class FreqaiDataKitchen: self.data_dictionary: Dict[Any, Any] = {} self.config = config self.freqai_config = config["freqai"] - self.predictions = np.array([]) - self.do_predict = np.array([]) - self.target_mean = np.array([]) - self.target_std = np.array([]) - self.full_predictions = np.array([]) - self.full_do_predict = np.array([]) - self.full_target_mean = np.array([]) - self.full_target_std = np.array([]) + self.predictions: npt.ArrayLike = np.array([]) + self.do_predict: npt.ArrayLike = np.array([]) + self.target_mean: npt.ArrayLike = np.array([]) + self.target_std: npt.ArrayLike = np.array([]) + self.full_predictions: npt.ArrayLike = np.array([]) + self.full_do_predict: npt.ArrayLike = np.array([]) + self.full_target_mean: npt.ArrayLike = np.array([]) + self.full_target_std: npt.ArrayLike = np.array([]) self.model_path = Path() self.model_filename = "" @@ -123,6 +124,7 @@ class FreqaiDataKitchen: :labels: cleaned labels ready to be split. """ + weights: npt.ArrayLike if self.config["freqai"]["feature_parameters"]["weight_factor"] > 0: weights = self.set_weights_higher_recent(len(filtered_dataframe)) else: @@ -519,12 +521,13 @@ class FreqaiDataKitchen: self.do_predict += do_predict self.do_predict -= 1 - def set_weights_higher_recent(self, num_weights: int) -> int: + def set_weights_higher_recent(self, num_weights: int) -> npt.ArrayLike: """ Set weights so that recent data is more heavily weighted during training than older data. """ - weights = np.zeros(num_weights) + + weights = np.zeros_like(num_weights) for i in range(1, len(weights)): weights[len(weights) - i] = np.exp( -i / (self.config["freqai"]["feature_parameters"]["weight_factor"] * num_weights) diff --git a/freqtrade/freqai/freqai_interface.py b/freqtrade/freqai/freqai_interface.py index 002596fee..16b6fd9f9 100644 --- a/freqtrade/freqai/freqai_interface.py +++ b/freqtrade/freqai/freqai_interface.py @@ -4,10 +4,12 @@ from abc import ABC, abstractmethod from pathlib import Path from typing import Any, Dict, Tuple -import numpy as np +import numpy.typing as npt import pandas as pd from pandas import DataFrame +from freqtrade.data.dataprovider import DataProvider +from freqtrade.enums import RunMode from freqtrade.freqai.data_kitchen import FreqaiDataKitchen @@ -37,8 +39,9 @@ class IFreqaiModel(ABC): self.current_time = None self.model = None self.predictions = None + self.live_trained_timerange = None - def start(self, dataframe: DataFrame, metadata: dict) -> DataFrame: + def start(self, dataframe: DataFrame, metadata: dict, dp: DataProvider) -> DataFrame: """ Entry point to the FreqaiModel, it will train a new model if necesssary before making the prediction. @@ -57,6 +60,9 @@ class IFreqaiModel(ABC): self.pair = metadata["pair"] self.dh = FreqaiDataKitchen(self.config, dataframe) + if dp.runmode in (RunMode.DRY_RUN, RunMode.LIVE): + logger.info('testing live') + logger.info("going to train %s timeranges", len(self.dh.training_timeranges)) # Loop enforcing the sliding window training/backtesting paragigm @@ -99,7 +105,7 @@ class IFreqaiModel(ABC): :dataframe: the full dataframe for the present training period """ - return dataframe + return @abstractmethod def train(self, unfiltered_dataframe: DataFrame, metadata: dict) -> Any: @@ -124,8 +130,10 @@ class IFreqaiModel(ABC): all the training and test data/labels. """ + return + @abstractmethod - def predict(self, dataframe: DataFrame) -> Tuple[np.array, np.array]: + def predict(self, dataframe: DataFrame) -> Tuple[npt.ArrayLike, npt.ArrayLike]: """ Filter the prediction features data and predict with it. :param: unfiltered_dataframe: Full dataframe for the current backtest period.