backtesting 通过了, 继续优化

This commit is contained in:
zhangkun9038@dingtalk.com 2025-04-23 21:32:58 +08:00
parent cbb1de8a02
commit a6ef1ce401
3 changed files with 33 additions and 20 deletions

View File

@ -67,7 +67,7 @@
"freqaimodel": "CatboostClassifier", "freqaimodel": "CatboostClassifier",
"purge_old_models": 2, "purge_old_models": 2,
"train_period_days": 15, "train_period_days": 15,
"identifier": "test58", "identifier": "test62",
"train_period_days": 30, "train_period_days": 30,
"backtest_period_days": 10, "backtest_period_days": 10,
"live_retrain_hours": 0, "live_retrain_hours": 0,

View File

@ -49,23 +49,24 @@ services:
# --strategy FreqaiExampleStrategy # --strategy FreqaiExampleStrategy
# --timerange 20250310-20250410 # --timerange 20250310-20250410
# --export trades # --export trades
command: >
hyperopt
--logfile /freqtrade/user_data/logs/freqtrade.log
--freqaimodel LightGBMRegressor
--config /freqtrade/config_examples/config_freqai.okx.json
--strategy-path /freqtrade/templates
--strategy FreqaiExampleStrategy
--timerange 20250301-20250420
--hyperopt-loss SharpeHyperOptLoss
--spaces roi stoploss
-e 200
# command: > # command: >
# backtesting # hyperopt
# --logfile /freqtrade/user_data/logs/freqtrade.log # --logfile /freqtrade/user_data/logs/freqtrade.log
# --freqaimodel LightGBMRegressor # --freqaimodel LightGBMRegressor
# --config /freqtrade/config_examples/config_freqai.okx.json # --config /freqtrade/config_examples/config_freqai.okx.json
# --strategy-path /freqtrade/templates # --strategy-path /freqtrade/templates
# --strategy FreqaiExampleStrategy # --strategy FreqaiExampleStrategy
# --timerange 20250301-20250420 # --timerange 20250301-20250420
# --hyperopt-loss SharpeHyperOptLoss
# --spaces roi stoploss
# -e 200
command: >
backtesting
--logfile /freqtrade/user_data/logs/freqtrade.log
--freqaimodel LightGBMRegressor
--config /freqtrade/config_examples/config_freqai.okx.json
--config /freqtrade/templates/FreqaiExampleStrategy.json
--strategy-path /freqtrade/templates
--strategy FreqaiExampleStrategy
--timerange 20240920-20250420

View File

@ -79,7 +79,7 @@ class FreqaiExampleStrategy(IStrategy):
dataframe["volume"] / dataframe["volume"].rolling(period).mean() dataframe["volume"] / dataframe["volume"].rolling(period).mean()
) )
dataframe.replace([np.inf, -np.inf], 0, inplace=True) dataframe.replace([np.inf, -np.inf], 0, inplace=True)
dataframe.fillna(method='ffill', inplace=True) dataframe.ffill(inplace=True)
dataframe.fillna(0, inplace=True) dataframe.fillna(0, inplace=True)
return dataframe return dataframe
@ -156,9 +156,21 @@ class FreqaiExampleStrategy(IStrategy):
# 限制预测值,添加平滑 # 限制预测值,添加平滑
dataframe["buy_rsi_pred"] = dataframe["&-buy_rsi"].rolling(5).mean().clip(10, 50) dataframe["buy_rsi_pred"] = dataframe["&-buy_rsi"].rolling(5).mean().clip(10, 50)
dataframe["buy_rsi_pred"].fillna(dataframe["buy_rsi_pred"].mean(), inplace=True)
if dataframe["buy_rsi_pred"].isna().any():
logger.warning("buy_rsi_pred 列包含 NaN已填充为默认值")
dataframe["sell_rsi_pred"] = dataframe["&-sell_rsi"].rolling(5).mean().clip(50, 90) dataframe["sell_rsi_pred"] = dataframe["&-sell_rsi"].rolling(5).mean().clip(50, 90)
dataframe["sell_rsi_pred"].fillna(dataframe["sell_rsi_pred"].mean(), inplace=True)
if dataframe["sell_rsi_pred"].isna().any():
logger.warning("sell_rsi_pred 列包含 NaN已填充为默认值")
dataframe["stoploss_pred"] = dataframe["&-stoploss"].clip(-0.35, -0.1) dataframe["stoploss_pred"] = dataframe["&-stoploss"].clip(-0.35, -0.1)
dataframe["stoploss_pred"].fillna(dataframe["stoploss_pred"].mean(), inplace=True)
if dataframe["stoploss_pred"].isna().any():
logger.warning("stoploss_pred 列包含 NaN已填充为默认值")
dataframe["roi_0_pred"] = dataframe["&-roi_0"].clip(0.01, 0.2) dataframe["roi_0_pred"] = dataframe["&-roi_0"].clip(0.01, 0.2)
dataframe["roi_0_pred"].fillna(dataframe["roi_0_pred"].mean(), inplace=True)
if dataframe["roi_0_pred"].isna().any():
logger.warning("roi_0_pred 列包含 NaN已填充为默认值")
# 检查预测值 # 检查预测值
for col in ["buy_rsi_pred", "sell_rsi_pred", "stoploss_pred", "roi_0_pred", "&-sell_rsi", "&-stoploss", "&-roi_0"]: for col in ["buy_rsi_pred", "sell_rsi_pred", "stoploss_pred", "roi_0_pred", "&-sell_rsi", "&-stoploss", "&-roi_0"]:
@ -175,10 +187,10 @@ class FreqaiExampleStrategy(IStrategy):
self.sell_rsi.value = float(dataframe["sell_rsi_pred"].iloc[-1]) self.sell_rsi.value = float(dataframe["sell_rsi_pred"].iloc[-1])
self.stoploss = float(self.stoploss_param.value) self.stoploss = float(self.stoploss_param.value)
self.minimal_roi = { self.minimal_roi = {
"0": float(self.roi_0.value), 0: float(self.roi_0.value),
"15": float(self.roi_15.value), 15: float(self.roi_15.value),
"30": float(self.roi_30.value), 30: float(self.roi_30.value),
"60": 0 60: 0
} }
self.trailing_stop_positive = float(dataframe["trailing_stop_positive"].iloc[-1]) self.trailing_stop_positive = float(dataframe["trailing_stop_positive"].iloc[-1])
self.trailing_stop_positive_offset = float(dataframe["trailing_stop_positive_offset"].iloc[-1]) self.trailing_stop_positive_offset = float(dataframe["trailing_stop_positive_offset"].iloc[-1])