出场置信度+入场置信度+log+7

This commit is contained in:
zhangkun9038@dingtalk.com 2025-12-23 15:03:01 +08:00
parent c862416d84
commit e124c6af97

View File

@ -249,9 +249,18 @@ class FreqaiPrimer(IStrategy):
# 入场间隔控制参数(分钟)
entry_interval_minutes = IntParameter(20, 200, default=42, optimize=True, load=True, space='buy')
# ML 审核官exit_signal 拒绝入场/出场的阈值(越高越宽松,越低越严格)
# ML 审核官entry_signal 拒绝入场的阈值(越高越宽松,越低越严格)
ml_entry_signal_threshold = DecimalParameter(0.05, 0.85, decimals=2, default=0.15, optimize=True, load=True, space='buy')
# ML 审核官exit_signal 拒绝出场的阈值(越高越宽松,越低越严格)
ml_exit_signal_threshold = DecimalParameter(0.05, 0.85, decimals=2, default=0.15, optimize=True, load=True, space='buy')
# FreqAI 标签定义entry_signal 的洛底上涨幅度(%
freqai_entry_up_percent = DecimalParameter(0.5, 3.0, decimals=2, default=1.0, optimize=True, load=True, space='buy')
# FreqAI 标签定义exit_signal 的洛底下跌幅度(%
freqai_exit_down_percent = DecimalParameter(0.5, 3.0, decimals=2, default=1.0, optimize=True, load=True, space='buy')
# 定义可优化参数
# 初始入场金额: 75.00
@ -323,9 +332,12 @@ class FreqaiPrimer(IStrategy):
"""定义 FreqAI 训练标签:简单二分类版本。"""
label_horizon = 6 # 与 config 中 label_period_candles 对齐
# 避免除法:用乘法比较未来收益
entry_up_threshold = 1.01 # 未来价格 > 当前价格 * 1.01 视为“好入场”
exit_down_threshold = 0.99 # 未来价格 < 当前价格 * 0.99 视为“应尽早退出”
# 动态计算上涨/下跌阈值
entry_up_percent = self.freqai_entry_up_percent.value / 100.0 # 转换为小数(如 0.01 表示 1%
exit_down_percent = self.freqai_exit_down_percent.value / 100.0
entry_up_threshold = 1.0 + entry_up_percent # 例如 1.01 表示 +1%
exit_down_threshold = 1.0 - exit_down_percent # 例如 0.99 表示 -1%
# 入场标签:未来窗口内的最高价是否超过 +1%
future_max = dataframe["close"].rolling(window=label_horizon, min_periods=1).max().shift(-label_horizon + 1)
@ -771,7 +783,7 @@ class FreqaiPrimer(IStrategy):
if entry_prob is not None:
# 确保概率在 [0, 1] 范围内(分类器输出可能有浮点误差)
entry_prob = max(0.0, min(1.0, entry_prob))
entry_threshold = self.ml_exit_signal_threshold.value
entry_threshold = self.ml_entry_signal_threshold.value
if entry_prob < entry_threshold:
logger.info(f"[{pair}] ML 审核官拒绝入场: entry_signal 概率 {entry_prob:.2f} < 阈值 {entry_threshold:.2f}(上涨概率低,不宜入场)")
allow_trade = False
@ -879,9 +891,7 @@ class FreqaiPrimer(IStrategy):
)
except Exception as e:
logger.warning(f"[{pair}] ML 审核官出场检查失败,允许出场: {e}")
# 极端模式:彻底不拦截出场信号
logger.info(f"[{pair}] 极端模式允许出场ML 审核官已禁用),出场原因: {exit_reason}")
return True
return allow_exit
def custom_stoploss(self, pair: str, trade: 'Trade', current_time, current_rate: float,
current_profit: float, **kwargs) -> float: