动态调整 freqai_entry_up_percent 和 freqai_exit_down_percent
This commit is contained in:
parent
ae64b99f5d
commit
dcfae8286d
@ -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:
|
||||
|
||||
116
动态标签阈值实施完成.txt
Normal file
116
动态标签阈值实施完成.txt
Normal 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训练目标"
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user