Repository navigation
v0.2.15
Full Changelog: v0.2.14...v0.2.15
def set_freqai_targets(
self,
dataframe: DataFrame,
metadata: dict,
**kwargs
) -> DataFrame:
"""
FreqAI target definition for:
- Classifier
- ClassifierMultiTarget
- Regressor
- RegressorMultiTarget
"""
model_name = self.model_name.lower()
is_classifier = "classifier" in model_name
is_multi_target = "multitarget" in model_name
label_period = self.freqai_info["feature_parameters"]["label_period_candles"]
if is_classifier:
# ==================================================
# CLASSIFIERS
# ==================================================
if is_multi_target:
# CatboostClassifierMultiTarget
# IMPORTANT:
# - class labels must be UNIQUE across targets
# - target 1 uses {0, 1}
# - target 2 uses {2, 3}
self.freqai.class_names = [0, 1, 2, 3]
# Target 1: direction (0 = down, 1 = up)
dataframe["&s-up_or_down"] = (
dataframe["close"].shift(-label_period) > dataframe["close"]
).astype(int)
# Target 2: volatility (2 = low, 3 = high)
dataframe["&s-volatility"] = (
(
dataframe["close"].rolling(label_period).std()
> dataframe["close"].rolling(label_period).std().median()
).astype(int)
+ 2
)
else:
# CatboostClassifier (single target)
self.freqai.class_names = [0, 1]
dataframe["&s-up_or_down"] = (
dataframe["close"].shift(-label_period) > dataframe["close"]
).astype(int)
else:
# ==================================================
# REGRESSORS
# ==================================================
if is_multi_target:
# CatboostRegressorMultiTarget
dataframe["&-s_close"] = (
dataframe["close"]
.shift(-label_period) hi
.rolling(label_period)
.mean()
/ dataframe["close"]
- 1
)
dataframe["&-s_range"] = (
dataframe["close"]
.shift(-label_period)
.rolling(label_period)
.max()
-
dataframe["close"]
.shift(-label_period)
.rolling(label_period)
.min()
)
else:
# CatboostRegressor
dataframe["&-s_close"] = (
dataframe["close"]
.shift(-label_period)
.rolling(label_period)
.mean()
/ dataframe["close"]
- 1
)
return dataframe

