no_improvement_callback = StopTrainingOnNoModelImprovement(
max_no_improvement_evals=self.max_no_improvement_evals,
min_evals=self.min_evals,
- verbose=1,
+ verbose=verbose,
)
if self.activate_tensorboard:
prediction_thresholds_smoothing = self.freqai_info.get(
"prediction_thresholds_smoothing", "mean"
)
- if prediction_thresholds_smoothing == "quantile":
- return self.quantile_min_max_pred(
- pred_df, fit_live_predictions_candles, label_period_candles
- )
- elif prediction_thresholds_smoothing == "mean":
- return mean_min_max_pred(
- pred_df, fit_live_predictions_candles, label_period_candles
- )
- elif prediction_thresholds_smoothing == "median":
- return median_min_max_pred(
- pred_df, fit_live_predictions_candles, label_period_candles
- )
- else:
- raise ValueError(
- f"Invalid prediction_thresholds_smoothing value: '{prediction_thresholds_smoothing}'"
- )
+ return {
+ "quantile": self.quantile_min_max_pred,
+ "mean": mean_min_max_pred,
+ "median": median_min_max_pred,
+ }[prediction_thresholds_smoothing](
+ pred_df, fit_live_predictions_candles, label_period_candles
+ )
def optuna_hp_enqueue_previous_best_trial(
self,
prediction_thresholds_smoothing = self.freqai_info.get(
"prediction_thresholds_smoothing", "mean"
)
- if prediction_thresholds_smoothing == "quantile":
- return self.quantile_min_max_pred(
- pred_df, fit_live_predictions_candles, label_period_candles
- )
- elif prediction_thresholds_smoothing == "mean":
- return mean_min_max_pred(
- pred_df, fit_live_predictions_candles, label_period_candles
- )
- elif prediction_thresholds_smoothing == "median":
- return median_min_max_pred(
- pred_df, fit_live_predictions_candles, label_period_candles
- )
- else:
- raise ValueError(
- f"Invalid prediction_thresholds_smoothing value: '{prediction_thresholds_smoothing}'"
- )
+ return {
+ "quantile": self.quantile_min_max_pred,
+ "mean": mean_min_max_pred,
+ "median": median_min_max_pred,
+ }[prediction_thresholds_smoothing](
+ pred_df, fit_live_predictions_candles, label_period_candles
+ )
def optuna_hp_enqueue_previous_best_trial(
self,
dataframe.at[mp, EXTREMA_COLUMN] = 1
dataframe["minima"] = np.where(dataframe[EXTREMA_COLUMN] == -1, -1, 0)
dataframe["maxima"] = np.where(dataframe[EXTREMA_COLUMN] == 1, 1, 0)
- dataframe[EXTREMA_COLUMN] = (
- dataframe[EXTREMA_COLUMN]
- .rolling(window=5, win_type="gaussian", center=True)
- .mean(std=0.5)
- )
- return dataframe
+ return self.smooth_extrema(dataframe, EXTREMA_COLUMN, 5)
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
dataframe = self.freqai.start(dataframe, metadata, self)
else:
raise ValueError(f"Invalid trading_mode: {trading_mode}")
+ def smooth_extrema(
+ self,
+ dataframe: DataFrame,
+ extrema_column: str,
+ window: int,
+ center: bool = True,
+ std: float = 0.5,
+ ) -> DataFrame:
+ extrema_smoothing = self.freqai_info.get("extrema_smoothing", "gaussian")
+ dataframe[extrema_column] = {
+ "gaussian": (
+ dataframe[extrema_column]
+ .rolling(window=window, win_type="gaussian", center=center)
+ .mean(std=std)
+ ),
+ "triang": (
+ dataframe[extrema_column]
+ .rolling(window=window, win_type="triang", center=center)
+ .mean()
+ ),
+ "ewma": dataframe[extrema_column].ewm(span=window).mean(),
+ }[extrema_smoothing]
+ return dataframe
+
def top_percent_change(dataframe: DataFrame, length: int) -> float:
"""