移除了hyperopt逻辑和配置

This commit is contained in:
zhangkun9038@dingtalk.com 2025-08-13 00:34:38 +08:00
parent 35da096005
commit 9cfcd71970

View File

@ -20,20 +20,20 @@ class FreqaiPrimer(IStrategy):
基于 FreqAI 的动态阈值交易策略集成动态加仓减仓和自定义 ROI 逻辑兼容最新 Freqtrade 版本
"""
# --- 🧪 Hyperopt Parameters ---
TRAILING_STOP_START = DecimalParameter(0.01, 0.05, default=0.03, space='sell', optimize=True)
TRAILING_STOP_DISTANCE = DecimalParameter(0.005, 0.02, default=0.01, space='sell', optimize=True)
# --- 🧪 固定配置参数从hyperopt优化结果获取---
TRAILING_STOP_START = 0.016
TRAILING_STOP_DISTANCE = 0.015
BUY_THRESHOLD_MIN = DecimalParameter(-0.15, -0.03, default=-0.07, space='buy', optimize=True)
BUY_THRESHOLD_MAX = DecimalParameter(-0.04, -0.005, default=-0.01, space='buy', optimize=True)
SELL_THRESHOLD_MIN = DecimalParameter(0.001, 0.02, default=0.005, space='sell', optimize=True)
SELL_THRESHOLD_MAX = DecimalParameter(0.02, 0.1, default=0.05, space='sell', optimize=True)
BUY_THRESHOLD_MIN = -0.035
BUY_THRESHOLD_MAX = -0.001
SELL_THRESHOLD_MIN = 0.002
SELL_THRESHOLD_MAX = 0.065
# 新增:加仓和减仓参数
ADD_POSITION_THRESHOLD = DecimalParameter(-0.05, -0.01, default=-0.02, space='buy', optimize=True)
EXIT_POSITION_RATIO = DecimalParameter(0.2, 0.7, default=0.5, space='sell', optimize=True)
COOLDOWN_PERIOD_MINUTES = IntParameter(1, 10, default=5, space='buy', optimize=True)
MAX_ENTRY_POSITION_ADJUSTMENT = IntParameter(1, 3, default=2, space='buy', optimize=True)
ADD_POSITION_THRESHOLD = -0.021
EXIT_POSITION_RATIO = 0.472
COOLDOWN_PERIOD_MINUTES = 9
MAX_ENTRY_POSITION_ADJUSTMENT = 3
# --- 🛠️ 固定配置参数 ---
stoploss = -0.15
@ -246,19 +246,7 @@ class FreqaiPrimer(IStrategy):
return bearish_signal
def trailing_space(self):
return [
DecimalParameter(0.01, 0.05, name="trailing_stop_start"),
DecimalParameter(0.005, 0.02, name="trailing_stop_distance")
]
def leverage_space(self):
return [
DecimalParameter(-0.05, -0.01, name="add_position_threshold", default=-0.02),
DecimalParameter(0.2, 0.7, name="exit_position_ratio", default=0.5),
IntParameter(1, 10, name="cooldown_period_minutes", default=5),
IntParameter(1, 3, name="max_entry_position_adjustment", default=2)
]
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:
"""
@ -382,11 +370,11 @@ class FreqaiPrimer(IStrategy):
self.buy_threshold = labels_mean - k_buy * labels_std
self.sell_threshold = labels_mean + k_sell * labels_std
# 使用 Hyperopt 参数限制阈值
self.buy_threshold = max(self.buy_threshold, self.BUY_THRESHOLD_MIN.value)
self.buy_threshold = min(self.buy_threshold, self.BUY_THRESHOLD_MAX.value)
self.sell_threshold = min(self.sell_threshold, self.SELL_THRESHOLD_MAX.value)
self.sell_threshold = max(self.sell_threshold, self.SELL_THRESHOLD_MIN.value)
# 使用固定参数限制阈值
self.buy_threshold = max(self.buy_threshold, self.BUY_THRESHOLD_MIN)
self.buy_threshold = min(self.buy_threshold, self.BUY_THRESHOLD_MAX)
self.sell_threshold = min(self.sell_threshold, self.SELL_THRESHOLD_MAX)
self.sell_threshold = max(self.sell_threshold, self.SELL_THRESHOLD_MIN)
# 调试日志
logger.info(f"[{pair}] 市场趋势得分:{market_trend_score}, labels_mean{labels_mean:.4f}, labels_std{labels_std:.4f}")
@ -655,9 +643,9 @@ class FreqaiPrimer(IStrategy):
f"加仓次数: {trade.nr_of_successful_entries - 1}")
# 加仓逻辑
max_entry_adjustments = self.MAX_ENTRY_POSITION_ADJUSTMENT.value
max_entry_adjustments = self.MAX_ENTRY_POSITION_ADJUSTMENT
if trade.nr_of_successful_entries <= max_entry_adjustments + 1:
add_position_threshold = self.ADD_POSITION_THRESHOLD.value
add_position_threshold = self.ADD_POSITION_THRESHOLD
# 线性映射加仓阈值,趋势值越高,加仓越严格
add_threshold = 80 - 30 * (trend_score / 100) # 趋势值 100 -> 50, 0 -> 80
if profit_ratio <= add_position_threshold and hold_time > 5 and trend_score <= add_threshold:
@ -684,7 +672,7 @@ class FreqaiPrimer(IStrategy):
return (add_amount, f"Price dropped {profit_ratio*100:.2f}%, add {add_amount:.2f}")
# 减仓逻辑
exit_position_ratio = self.EXIT_POSITION_RATIO.value
exit_position_ratio = self.EXIT_POSITION_RATIO
if profit_ratio >= 0.03:
# 趋势值越高,减仓比例越低
reduce_factor = 0.6 + 0.4 * (1 - trend_score / 100) # 牛市(100) -> 0.6, 熊市(0) -> 1.0
@ -698,8 +686,8 @@ class FreqaiPrimer(IStrategy):
return (reduce_amount, f"Profit {profit_ratio*100:.2f}%")
# 追踪止损逻辑
trailing_stop_start = self.TRAILING_STOP_START.value
trailing_stop_distance = self.TRAILING_STOP_DISTANCE.value
trailing_stop_start = self.TRAILING_STOP_START
trailing_stop_distance = self.TRAILING_STOP_DISTANCE
# 使用 Sigmoid 映射调整追踪止损参数
sigmoid = 1 / (1 + np.exp(-0.1 * (trend_score - 50)))
trailing_factor = 0.8 + (1.2 - 0.8) * sigmoid # 牛市(100) -> 1.2, 熊市(0) -> 0.8
@ -740,7 +728,7 @@ class FreqaiPrimer(IStrategy):
last_candle = dataframe.iloc[-1]
market_trend_score = self.get_market_trend(dataframe=DataFrame, metadata={'pair': pair})
cooldown_period_minutes = self.COOLDOWN_PERIOD_MINUTES.value if market_trend_score > 50 else self.COOLDOWN_PERIOD_MINUTES.value // 2
cooldown_period_minutes = self.COOLDOWN_PERIOD_MINUTES if market_trend_score > 50 else self.COOLDOWN_PERIOD_MINUTES // 2
if pair in self.last_entry_time:
last_time = self.last_entry_time[pair]