fix bug returning multiple targets for training

This commit is contained in:
robcaulk 2022-07-03 12:15:59 +02:00
parent ffb39a5029
commit 4ff0ef7359
3 changed files with 31 additions and 15 deletions

View File

@ -1066,11 +1066,18 @@ class FreqaiDataKitchen:
""" """
dataframe = base_dataframes[self.config["timeframe"]].copy() dataframe = base_dataframes[self.config["timeframe"]].copy()
pairs = self.freqai_config.get("corr_pairlist", []) pairs = self.freqai_config.get("corr_pairlist", [])
sgi = True
for tf in self.freqai_config.get("timeframes"): for tf in self.freqai_config.get("timeframes"):
dataframe = strategy.populate_any_indicators( dataframe = strategy.populate_any_indicators(
pair, pair, dataframe.copy(), tf, base_dataframes[tf], coin=pair.split("/")[0] + "-" pair,
pair,
dataframe.copy(),
tf,
base_dataframes[tf],
coin=pair.split("/")[0] + "-",
set_generalized_indicators=sgi,
) )
sgi = False
if pairs: if pairs:
for i in pairs: for i in pairs:
if pair in i: if pair in i:

View File

@ -533,7 +533,8 @@ class IStrategy(ABC, HyperStrategyMixin):
return None return None
def populate_any_indicators(self, basepair: str, pair: str, df: DataFrame, tf: str, def populate_any_indicators(self, basepair: str, pair: str, df: DataFrame, tf: str,
informative: DataFrame = None, coin: str = "") -> DataFrame: informative: DataFrame = None, coin: str = "",
set_generalized_indicators: bool = False) -> DataFrame:
""" """
Function designed to automatically generate, name and merge features Function designed to automatically generate, name and merge features
from user indicated timeframes in the configuration file. User can add from user indicated timeframes in the configuration file. User can add

View File

@ -70,7 +70,9 @@ class FreqaiExampleStrategy(IStrategy):
def bot_start(self): def bot_start(self):
self.model = CustomModel(self.config) self.model = CustomModel(self.config)
def populate_any_indicators(self, metadata, pair, df, tf, informative=None, coin=""): def populate_any_indicators(
self, metadata, pair, df, tf, informative=None, coin="", set_generalized_indicators=False
):
""" """
Function designed to automatically generate, name and merge features Function designed to automatically generate, name and merge features
from user indicated timeframes in the configuration file. User controls the indicators from user indicated timeframes in the configuration file. User controls the indicators
@ -150,7 +152,7 @@ class FreqaiExampleStrategy(IStrategy):
# Add generalized indicators here (because in live, it will call this # Add generalized indicators here (because in live, it will call this
# function to populate indicators during training). Notice how we ensure not to # function to populate indicators during training). Notice how we ensure not to
# add them multiple times # add them multiple times
if pair == self.freqai_info["corr_pairlist"][0] and tf == self.timeframe: if set_generalized_indicators:
df["%-day_of_week"] = (df["date"].dt.dayofweek + 1) / 7 df["%-day_of_week"] = (df["date"].dt.dayofweek + 1) / 7
df["%-hour_of_day"] = (df["date"].dt.hour + 1) / 25 df["%-hour_of_day"] = (df["date"].dt.hour + 1) / 25
@ -172,15 +174,21 @@ class FreqaiExampleStrategy(IStrategy):
self.freqai_info = self.config["freqai"] self.freqai_info = self.config["freqai"]
self.pair = metadata["pair"] self.pair = metadata["pair"]
sgi = True
# the following loops are necessary for building the features # the following loops are necessary for building the features
# indicated by the user in the configuration file. # indicated by the user in the configuration file.
# All indicators must be populated by populate_any_indicators() for live functionality # All indicators must be populated by populate_any_indicators() for live functionality
# to work correctly. # to work correctly.
for tf in self.freqai_info["timeframes"]: for tf in self.freqai_info["timeframes"]:
dataframe = self.populate_any_indicators( dataframe = self.populate_any_indicators(
metadata, self.pair, dataframe.copy(), tf, coin=self.pair.split("/")[0] + "-" metadata,
self.pair,
dataframe.copy(),
tf,
coin=self.pair.split("/")[0] + "-",
set_generalized_indicators=sgi,
) )
sgi = False
for pair in self.freqai_info["corr_pairlist"]: for pair in self.freqai_info["corr_pairlist"]:
if metadata["pair"] in pair: if metadata["pair"] in pair:
continue # do not include whitelisted pair twice if it is in corr_pairlist continue # do not include whitelisted pair twice if it is in corr_pairlist
@ -245,9 +253,9 @@ class FreqaiExampleStrategy(IStrategy):
follow_mode = self.config.get("freqai", {}).get("follow_mode", False) follow_mode = self.config.get("freqai", {}).get("follow_mode", False)
if not follow_mode: if not follow_mode:
pair_dict = self.model.bridge.data_drawer.pair_dict pair_dict = self.model.bridge.dd.pair_dict
else: else:
pair_dict = self.model.bridge.data_drawer.follower_dict pair_dict = self.model.bridge.dd.follower_dict
entry_tag = trade.enter_tag entry_tag = trade.enter_tag
@ -258,9 +266,9 @@ class FreqaiExampleStrategy(IStrategy):
with self.model.bridge.lock: with self.model.bridge.lock:
pair_dict[pair]["prediction" + entry_tag] = abs(trade_candle["&-s_close"]) pair_dict[pair]["prediction" + entry_tag] = abs(trade_candle["&-s_close"])
if not follow_mode: if not follow_mode:
self.model.bridge.data_drawer.save_drawer_to_disk() self.model.bridge.dd.save_drawer_to_disk()
else: else:
self.model.bridge.data_drawer.save_follower_dict_to_disk() self.model.bridge.dd.save_follower_dict_to_disk()
roi_price = pair_dict[pair]["prediction" + entry_tag] roi_price = pair_dict[pair]["prediction" + entry_tag]
roi_time = self.max_roi_time_long.value roi_time = self.max_roi_time_long.value
@ -295,16 +303,16 @@ class FreqaiExampleStrategy(IStrategy):
entry_tag = trade.enter_tag entry_tag = trade.enter_tag
follow_mode = self.config.get("freqai", {}).get("follow_mode", False) follow_mode = self.config.get("freqai", {}).get("follow_mode", False)
if not follow_mode: if not follow_mode:
pair_dict = self.model.bridge.data_drawer.pair_dict pair_dict = self.model.bridge.dd.pair_dict
else: else:
pair_dict = self.model.bridge.data_drawer.follower_dict pair_dict = self.model.bridge.dd.follower_dict
with self.model.bridge.lock: with self.model.bridge.lock:
pair_dict[pair]["prediction" + entry_tag] = 0 pair_dict[pair]["prediction" + entry_tag] = 0
if not follow_mode: if not follow_mode:
self.model.bridge.data_drawer.save_drawer_to_disk() self.model.bridge.dd.save_drawer_to_disk()
else: else:
self.model.bridge.data_drawer.save_follower_dict_to_disk() self.model.bridge.dd.save_follower_dict_to_disk()
return True return True