merge hyperopted

This commit is contained in:
zhangkun9038@dingtalk.com 2025-11-24 19:56:07 +08:00
parent 24eaf74159
commit e9af186dcf

View File

@ -35,6 +35,15 @@ class FreqaiPrimer(IStrategy):
super().__init__(config) # 调用父类的初始化方法并传递config
# 存储从配置文件加载的默认值
self._trailing_stop_positive_default = 0.004 # 降低默认值以更容易触发跟踪止盈
# 验证 FreqAI 配置
if self.config and "freqai" in self.config:
logger.info(f"FreqAI 已启用: {self.config['freqai'].get('model', 'Unknown')}")
else:
logger.warning("FreqAI 未在配置文件中启用或配置缺失")
# 验证 h1_max_candles 参数
assert self.h1_max_candles.value <= 50, f"h1_max_candles={self.h1_max_candles.value} 超出安全范围!"
@property
def protections(self):
@ -84,6 +93,47 @@ class FreqaiPrimer(IStrategy):
can_short = False # 禁用做空
freqai_predicted_add_step = 0.057 # 默认0.5%
# FreqAI 配置
freqai_info = {
"enabled": True,
"identifier": "freqai_primer_mixed",
"model": "LightGBMRegressor",
"feature_parameters": {
"include_timeframes": ["3m", "15m", "1h"],
"include_shifted_candles": 2,
"label_period_candles": 12
},
"data_split_parameters": {
"test_size": 0.2,
"shuffle": False
},
"model_training_parameters": {
"price_value_divergence": {
"model": "LightGBMRegressor",
"model_params": {
"n_estimators": 200,
"learning_rate": 0.05,
"num_leaves": 31,
"verbose": -1
}
},
"optimal_first_length": {
"model": "LightGBMClassifier",
"model_params": {
"n_estimators": 150,
"learning_rate": 0.1,
"num_leaves": 15,
"max_depth": 8,
"min_child_samples": 10,
"class_weight": "balanced",
"verbose": -1
}
}
},
"fit_live_predictions_candles": 100,
"live_retrain_candles": 100
}
# [propertiesGrp_List]--------------------------------------------------------------------------------------------------------------------------------------
# [propertiesGrp step="1" name="第一轮优化" epochs="300" space="buy " description="入场基础条件优化,入场确认条件优化"]
bb_std = DecimalParameter(2.0, 5.0, decimals=1, default=3.5, optimize=True, load=True, space='buy') # 安全2.0-5.0
@ -408,6 +458,8 @@ class FreqaiPrimer(IStrategy):
return dataframe
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
# 🔧 调用FreqAI进行预测
dataframe = self.freqai.start(dataframe, metadata, self)
# 计算 3m 周期的指标
bb_length_value = self.bb_length.value
@ -525,6 +577,11 @@ class FreqaiPrimer(IStrategy):
# 合并 1h 数据
dataframe = dataframe.merge(df_1h, how='left', on='date').ffill()
# 🔧 验证 FreqAI 预测列是否存在
if '&-add_position_step' not in dataframe.columns:
logger.debug(f"[{metadata['pair']}] FreqAI预测列不存在将在训练后自动生成")
dataframe['&-add_position_step'] = self.freqai_predicted_add_step # 使用默认值
# 验证合并后的列
#logger.info(f"[{metadata['pair']}] 合并后的数据框列名: {list(dataframe.columns)}")