动态调整 freqai_entry_up_percent 和 freqai_exit_down_percent

This commit is contained in:
zhangkun9038@dingtalk.com 2026-01-09 01:13:27 +08:00
parent ae64b99f5d
commit dcfae8286d
2 changed files with 136 additions and 0 deletions

View File

@ -403,6 +403,26 @@ class FreqaiPrimer(IStrategy):
0 # 未来低波动(震荡市),快速止盈
)
# ========== 诊断日志:输出动态阈值示例 ==========
if len(dataframe) > 0:
# 获取最后一行的动态阈值
last_row = dataframe.iloc[-1]
market_state = str(last_row.get('market_state', 'unknown'))
entry_threshold_pct = last_row.get('dynamic_entry_up_percent', 0.5)
exit_threshold_pct = last_row.get('dynamic_exit_down_percent', 0.5)
entry_signal = int(last_row.get('&s-entry_signal', 0))
exit_signal = int(last_row.get('&s-exit_signal', 0))
self.strategy_log(
f"[{metadata['pair']}] 动态标签阈值 | "
f"市场: {market_state} | "
f"入场阈值: {entry_threshold_pct:.2f}% | "
f"出场阈值: {exit_threshold_pct:.2f}% | "
f"入场标签: {entry_signal} | "
f"出场标签: {exit_signal}"
)
# ========== 诊断日志结束 ==========
return dataframe
def populate_indicators(self, dataframe: DataFrame, metadata: dict) -> DataFrame:

View File

@ -0,0 +1,116 @@
✅ 动态标签阈值实施完成
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📊 动态调整 freqai_entry_up_percent 和 freqai_exit_down_percent
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
【修改位置】
文件freqtrade/templates/freqaiprimer.py
方法set_freqai_targets()
行数:约 317-406 行
【核心逻辑】
1⃣ 基础阈值映射(根据市场状态)
市场状态 entry_up_percent exit_down_percent 说明
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
strong_bull 1.5% 0.3% 要求更大涨幅,快速止损
weak_bull 1.0% 0.4% 适度提高门槛
neutral 0.5% 0.5% 当前默认值
weak_bear 0.4% 0.8% 降低门槛找反弹
strong_bear 0.3% 1.0% 更低门槛,宽容止损
逻辑:
- 牛市中:提高入场门槛(避免追高),快速止损
- 熊市中:降低入场门槛(寻找反弹),宽容止损
2⃣ 波动率微调±20%
volatility = ATR / close
vol_factor = 1.0 + (volatility - 0.02) * 5
vol_factor = clip(0.8, 1.2) # 限制在 80%-120% 范围
final_threshold = base_threshold * vol_factor
逻辑:
- 高波动市场:提高阈值(避免噪音)
- 低波动市场:降低阈值(捕捉小波动)
3⃣ 按行计算动态阈值
每根K线根据当时的市场状态和波动率计算独立的阈值
dataframe['dynamic_entry_up_percent']
dataframe['dynamic_exit_down_percent']
4⃣ 应用到标签生成
entry_up_threshold = 1.0 + dynamic_entry_up_percent / 100.0
exit_down_threshold = 1.0 - dynamic_exit_down_percent / 100.0
入场标签: future_max > close * entry_up_threshold
出场标签: future_min < close * exit_down_threshold
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🎯 预期效果
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. ML模型在不同市场环境下的训练目标更合理
✅ 牛市不会因为0.5%太容易达到而过度乐观
✅ 熊市不会因为0.5%难以达到而样本不足
2. 训练标签分布更平衡
✅ 目标:各市场状态下保持 15-25% 的正样本比例
✅ 避免样本不平衡导致的模型偏差
3. 与策略整体一致
✅ 与动态ML阈值方案B协同
✅ 与双重过滤机制方案A+B协同
✅ 形成完整的自适应交易系统
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
📋 诊断日志示例
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
[BTC/USDT] 动态标签阈值 | 市场: strong_bull | 入场阈值: 1.65% | 出场阈值: 0.27% | 入场标签: 1 | 出场标签: 0
[ETH/USDT] 动态标签阈值 | 市场: strong_bear | 入场阈值: 0.32% | 出场阈值: 1.05% | 入场标签: 0 | 出场标签: 1
说明:
- 强牛市中,入场阈值自动提高到 1.65%比默认0.5%高3倍
- 强熊市中,入场阈值自动降低到 0.32%比默认0.5%低35%
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
⚠️ 注意事项
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 需要重新训练ML模型
- 标签定义已改变,旧模型无效
- 建议:删除 user_data/models/ 下的所有模型
- 重新运行训练
2. 回测时会看到诊断日志
- 每个币种会输出最新一根K线的动态阈值
- 可以观察不同市场状态下的阈值变化
3. 参数不再需要 Hyperopt 优化
- freqai_entry_up_percent 和 freqai_exit_down_percent
- 可以从参数列表中移除或设为固定值
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
🚀 下一步
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
1. 清理旧模型:
rm -rf user_data/models/*
2. 重新训练(如果是 FreqAI 策略):
freqtrade trade --strategy FreqaiPrimer --config config.json --freqaimodel LightGBMClassifier
3. 观察日志中的动态阈值是否合理
4. 回测验证效果(建议使用更长时间段):
freqtrade backtesting --config config.json --strategy FreqaiPrimer --timerange=20251101-20260108
建议commit信息
git commit -m "实施动态标签阈值根据市场状态和波动率自适应调整FreqAI训练目标"