alleviate FutureWarning in sklearn about ensuring svm model features are passed with identical order
This commit is contained in:
@@ -63,7 +63,7 @@ class FreqaiExampleStrategy(IStrategy):
|
||||
def bot_start(self):
|
||||
self.model = CustomModel(self.config)
|
||||
|
||||
def populate_any_indicators(self, pair, df, tf, informative=None, coin=""):
|
||||
def populate_any_indicators(self, metadata, pair, df, tf, informative=None, coin=""):
|
||||
"""
|
||||
Function designed to automatically generate, name and merge features
|
||||
from user indicated timeframes in the configuration file. User controls the indicators
|
||||
@@ -124,8 +124,9 @@ class FreqaiExampleStrategy(IStrategy):
|
||||
|
||||
informative[coin + "pct-change"] = informative["close"].pct_change()
|
||||
|
||||
# The following code automatically adds features according to the `shift` parameter passed
|
||||
# in the config. Do not remove
|
||||
indicators = [col for col in informative if col.startswith('%')]
|
||||
|
||||
for n in range(self.freqai_info["feature_parameters"]["shift"] + 1):
|
||||
if n == 0:
|
||||
continue
|
||||
@@ -133,28 +134,38 @@ class FreqaiExampleStrategy(IStrategy):
|
||||
informative_shift = informative_shift.add_suffix("_shift-" + str(n))
|
||||
informative = pd.concat((informative, informative_shift), axis=1)
|
||||
|
||||
# The following code safely merges into the base timeframe.
|
||||
# Do not remove.
|
||||
df = merge_informative_pair(df, informative, self.config["timeframe"], tf, ffill=True)
|
||||
skip_columns = [(s + "_" + tf) for s in ["date", "open", "high", "low", "close", "volume"]]
|
||||
df = df.drop(columns=skip_columns)
|
||||
|
||||
# Add generalized indicators (not associated to any individual coin or timeframe) here
|
||||
# because in live, it will call this function to populate
|
||||
# indicators during training. Notice how we ensure not to add them multiple times
|
||||
if pair == metadata['pair'] and tf == self.timeframe:
|
||||
df['%-day_of_week'] = (df["date"].dt.dayofweek + 1) / 7
|
||||
df['%-hour_of_day'] = (df['date'].dt.hour + 1) / 25
|
||||
|
||||
return df
|
||||
|
||||
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
|
||||
|
||||
# the configuration file parameters are stored here
|
||||
self.freqai_info = self.config["freqai"]
|
||||
self.pair = metadata['pair']
|
||||
|
||||
# the following loops are necessary for building the features
|
||||
# indicated by the user in the configuration file.
|
||||
# All indicators must be populated by populate_any_indicators() for live functionality
|
||||
# to work correctly.
|
||||
for tf in self.freqai_info["timeframes"]:
|
||||
dataframe = self.populate_any_indicators(self.pair, dataframe.copy(), tf,
|
||||
dataframe = self.populate_any_indicators(metadata, self.pair, dataframe.copy(), tf,
|
||||
coin=self.pair.split("/")[0] + "-")
|
||||
for pair in self.freqai_info["corr_pairlist"]:
|
||||
if metadata['pair'] in pair:
|
||||
continue # do not include whitelisted pair twice if it is in corr_pairlist
|
||||
dataframe = self.populate_any_indicators(
|
||||
pair, dataframe.copy(), tf, coin=pair.split("/")[0] + "-"
|
||||
metadata, pair, dataframe.copy(), tf, coin=pair.split("/")[0] + "-"
|
||||
)
|
||||
|
||||
# the model will return 4 values, its prediction, an indication of whether or not the
|
||||
|
Reference in New Issue
Block a user