出场置信度+入场置信度
This commit is contained in:
parent
beea456d0f
commit
6d32cbc467
77
docs/更新.md
77
docs/更新.md
@ -1,42 +1,73 @@
|
||||
# FreqAI Primer 策略更新日志
|
||||
|
||||
## 2025-12-23: ML 审核官逻辑优化
|
||||
## 2025-12-23: ML 审核官双重过滤机制(最终版)
|
||||
|
||||
### 核心变更
|
||||
将 ML 审核官(exit_signal 置信度判断)从 **入场过滤** 改为 **出场过滤**,实现更激进的持仓策略。
|
||||
实现 ML 审核官在 **入场和出场两个阶段** 的双重过滤,最大化利用 AI 预测能力。
|
||||
|
||||
### 具体改动
|
||||
|
||||
#### 1. 移除入场阶段的 ML 审核官
|
||||
- **旧逻辑**:在 `confirm_trade_entry` 中,若 `exit_signal` 概率高(容易下跌),则拒绝入场
|
||||
- **问题**:这会错过很多有效入场机会,因为短期波动不代表整体趋势
|
||||
#### 1. 入场阶段 - ML 审核官(防止下跌前入场)
|
||||
**位置**:`confirm_trade_entry` 方法
|
||||
|
||||
#### 2. 新增出场阶段的 ML 审核官
|
||||
- **新逻辑**:在 `confirm_trade_exit` 中,只有当 `exit_signal` 概率 **>=** 阈值时才允许出场
|
||||
- **效果**:
|
||||
- 防止止盈过早,让利润充分增长
|
||||
- 在 AI 判断上涨概率高时强制继续持仓
|
||||
- 只在 AI 确认下跌信号强烈时才出场
|
||||
**逻辑**:
|
||||
- 检查 `exit_signal` 概率
|
||||
- 如果 exit_signal 概率 **> 0.65**(默认阈值),说明价格容易下跌,**拒绝入场**
|
||||
- 防止在即将下跌的时机错误入场
|
||||
|
||||
#### 3. 参数说明
|
||||
- 使用现有 hyperopt 参数:`ml_exit_signal_threshold`(默认 0.65)
|
||||
- **入场时**(已移除):exit_prob > 0.65 拒绝入场
|
||||
- **出场时**(新增):exit_prob < 0.65 拒绝出场(继续持仓)
|
||||
**日志示例**:
|
||||
```
|
||||
[BTC/USDT] ML 审核官拒绝入场: exit_signal 概率 0.78 > 阈值 0.65(容易下跌,不宜入场)
|
||||
```
|
||||
|
||||
### 设计理念
|
||||
符合"让利润奔跑,截断亏损"的交易哲学:
|
||||
- 入场:依赖传统技术指标,保证信号充足
|
||||
- 出场:由 AI 审核,确保真正的趋势反转才离场
|
||||
#### 2. 出场阶段 - ML 审核官(防止上涨中过早离场)
|
||||
**位置**:`confirm_trade_exit` 方法
|
||||
|
||||
### 日志输出
|
||||
**逻辑**:
|
||||
- 检查 `exit_signal` 概率
|
||||
- 如果 exit_signal 概率 **< 0.65**(默认阈值),说明上涨概率高,**拒绝出场**(继续持仓)
|
||||
- 只有当 AI 确认下跌信号强烈时才允许出场
|
||||
|
||||
**日志示例**:
|
||||
```
|
||||
[BTC/USDT] ML 审核官拒绝出场: exit_signal 概率 0.35 < 阈值 0.65(上涨概率高,继续持仓), 出场原因: roi
|
||||
[ETH/USDT] ML 审核官允许出场: exit_signal 概率 0.78 >= 阈值 0.65, 出场原因: sell_signal
|
||||
```
|
||||
|
||||
#### 3. 参数配置
|
||||
- **参数名称**:`ml_exit_signal_threshold`
|
||||
- **默认值**:0.65
|
||||
- **可优化范围**:0.50 - 0.85
|
||||
- **调整建议**:
|
||||
- 提高阈值(如 0.75):更宽松,信号量增加但质量可能下降
|
||||
- 降低阈值(如 0.55):更严格,过滤更多信号但质量更高
|
||||
|
||||
### 设计理念
|
||||
ML 审核官作为 **双向守门员**:
|
||||
1. **入场守门**:防止在下跌前进入
|
||||
2. **出场守门**:防止在上涨中过早离场
|
||||
3. **信号质量优先**:宁可错过,不可做错
|
||||
|
||||
### FreqAI 配置更新
|
||||
同时更新了 `config_freqai_primer.json` 配置文件,新增关键参数:
|
||||
|
||||
```json
|
||||
"freqai": {
|
||||
"train_period_days": 15, // 训练数据周期
|
||||
"backtest_period_days": 3, // 回测滚动周期
|
||||
"purge_old_models": 2, // 保留模型数量
|
||||
"use_SVM_to_remove_outliers": true, // 离群值检测
|
||||
"DI_threshold": 0.9 // 异常指数阈值
|
||||
}
|
||||
```
|
||||
|
||||
**重要提示**:回测时至少准备 **20天以上** 的历史数据(15天训练 + 5天回测)
|
||||
|
||||
---
|
||||
|
||||
## 使用建议
|
||||
1. 回测时观察是否会导致持仓时间过长
|
||||
2. 如果发现过度持仓,可以降低 `ml_exit_signal_threshold` 阈值(如 0.55)
|
||||
3. 如果出场过于频繁,可以提高阈值(如 0.75)
|
||||
1. **首次回测**:使用默认阈值 0.65 观察效果
|
||||
2. **信号过少**:提高阈值到 0.70-0.75
|
||||
3. **持仓过久**:降低出场阈值到 0.55-0.60
|
||||
4. **入场过多**:降低入场阈值到 0.55-0.60
|
||||
5. **数据准备**:确保至少有 20 天历史数据用于 FreqAI 训练
|
||||
@ -20,28 +20,28 @@
|
||||
"add_position_multiplier": 1.15,
|
||||
"max_entry_adjustments": 4,
|
||||
"stake_divisor": 9.3,
|
||||
"bb_length": 16,
|
||||
"bb_lower_deviation": 1.03,
|
||||
"bb_std": 2.8,
|
||||
"bb_width_threshold": 0.015,
|
||||
"h1_max_candles": 112,
|
||||
"h1_max_consecutive_candles": 2,
|
||||
"h1_rapid_rise_threshold": 0.143,
|
||||
"bb_length": 30,
|
||||
"bb_lower_deviation": 1.01,
|
||||
"bb_std": 1.6,
|
||||
"bb_width_threshold": 0.016,
|
||||
"h1_max_candles": 213,
|
||||
"h1_max_consecutive_candles": 3,
|
||||
"h1_rapid_rise_threshold": 0.118,
|
||||
"min_condition_count": 3,
|
||||
"rsi_bull_threshold": 45,
|
||||
"rsi_length": 21,
|
||||
"rsi_oversold": 30,
|
||||
"stochrsi_bull_threshold": 32,
|
||||
"stochrsi_neutral_threshold": 28,
|
||||
"volume_multiplier": 1.8
|
||||
"rsi_length": 18,
|
||||
"rsi_oversold": 31,
|
||||
"stochrsi_bull_threshold": 31,
|
||||
"stochrsi_neutral_threshold": 27,
|
||||
"volume_multiplier": 1.2
|
||||
},
|
||||
"sell": {
|
||||
"exit_bb_upper_deviation": 0.98,
|
||||
"exit_volume_multiplier": 2.8,
|
||||
"exit_bb_upper_deviation": 0.99,
|
||||
"exit_volume_multiplier": 2.4,
|
||||
"roi_param_a": -6e-05,
|
||||
"roi_param_k": 72,
|
||||
"roi_param_t": 0.061,
|
||||
"rsi_overbought": 66
|
||||
"roi_param_k": 108,
|
||||
"roi_param_t": 0.101,
|
||||
"rsi_overbought": 70
|
||||
},
|
||||
"protection": {}
|
||||
},
|
||||
|
||||
@ -743,7 +743,39 @@ class FreqaiPrimer(IStrategy):
|
||||
#logger.info(f"[{pair}] 由于检测到剧烈拉升,取消入场交易")
|
||||
allow_trade = False
|
||||
|
||||
# 注:ML 审核官逻辑已移动到 confirm_trade_exit 中,用于过滤出场
|
||||
# 检查3:ML 审核官(FreqAI 过滤低质量入场)
|
||||
# 逻辑:用 exit_signal 概率来判断——若"退出概率高"说明价格容易跌,则拒绝入场
|
||||
if allow_trade:
|
||||
try:
|
||||
df, _ = self.dp.get_analyzed_dataframe(pair, self.timeframe)
|
||||
if len(df) > 0:
|
||||
last_row = df.iloc[-1]
|
||||
exit_prob = None
|
||||
|
||||
# 优先使用 FreqAI 的 exit_signal 预测列(例如 &-exit_signal_prob 或 &-exit_signal)
|
||||
if '&-exit_signal_prob' in df.columns:
|
||||
exit_prob = float(last_row['&-exit_signal_prob'])
|
||||
elif '&-s-exit_signal_prob' in df.columns:
|
||||
exit_prob = float(last_row['&-s-exit_signal_prob'])
|
||||
elif '&-exit_signal' in df.columns:
|
||||
val = last_row['&-exit_signal']
|
||||
if isinstance(val, (int, float)):
|
||||
exit_prob = float(val)
|
||||
else:
|
||||
# 文本标签时,简单映射为 0/1
|
||||
exit_prob = 1.0 if str(val).lower() in ['exit', 'sell', '1'] else 0.0
|
||||
|
||||
if exit_prob is not None:
|
||||
# 阈值:如果"应该退出"的概率 > 阈值,说明价格很可能下跌,拒绝入场
|
||||
# 使用 hyperopt 参数,默认 0.65(比之前的 0.5 更宽松)
|
||||
exit_threshold = self.ml_exit_signal_threshold.value
|
||||
if exit_prob > exit_threshold:
|
||||
logger.info(f"[{pair}] ML 审核官拒绝入场: exit_signal 概率 {exit_prob:.2f} > 阈值 {exit_threshold:.2f}(容易下跌,不宜入场)")
|
||||
allow_trade = False
|
||||
# else:
|
||||
# logger.info(f"[{pair}] ML 审核官允许入场: exit_signal 概率 {exit_prob:.2f} <= {exit_threshold:.2f}")
|
||||
except Exception as e:
|
||||
logger.warning(f"[{pair}] ML 审核官检查失败,忽略 ML 过滤: {e}")
|
||||
|
||||
# 如果允许交易,更新最后一次入场时间并输出价格信息
|
||||
if allow_trade:
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user