移除了hyperopt逻辑和配置
This commit is contained in:
parent
35da096005
commit
9cfcd71970
@ -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]
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user