myTestFreqAI/chat/report.md
zhangkun9038@dingtalk.com bef42674f6 log
2025-05-05 10:40:46 +08:00

243 lines
8.9 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

- Datetime: 2025-05-05 10:06:53
- Model: _qwen3/qwen-plus-latest
- Selected files:
- neo-tree filesystem [1]
- result/backtest-result-2025-05-04_18-41-05.json
- result/backtest-result-2025-05-04_18-41-05.meta.json
- result/backtest-result-2025-05-04_18-41-05_OKXRegressionStrategy.py
- result/backtest-result-2025-05-04_18-41-05_config.json
- result/output_filted.log
> 请根据log中的运行结果,对策略,配置的表现进行点评, 参考依据可以从下面的官方文档中查看
>
> 自定义策略: https://www.freqtrade.io/en/stable/strategy-customization/
> freqai 特征工程 : https://www.freqtrade.io/en/stable/freqai-feature-engineering/
> freqai 参数表: https://www.freqtrade.io/en/stable/freqai-parameter-table/
> freqai 配置: https://www.freqtrade.io/en/stable/freqai-configuration/
> freaai 运行: https://www.freqtrade.io/en/stable/freqai-running/
> freqai 开发手册: https://www.freqtrade.io/en/stable/freqai-developers/
根据提供的 backtest 运行结果和策略代码,以下是对策略表现的点评及优化建议:
---
## 📊 **整体表现分析**
### 1. **交易统计**
- **总交易数**: 38 笔
- **胜率 (Win Rate)**: 50%19 胜 / 19 败)
- **平均盈利**: -0.16%
- **总亏损**: -1.225 USDT
- **最大回撤 (Max Drawdown)**: -2.52 USDT占账户的 0.25%
**问题点**
- 尽管胜率达到了 50%,但总体仍为小幅亏损。
- 平均盈利为负,说明即使在赢的情况下,盈利幅度也小于亏损。
### 2. **退出机制分析**
- 所有退出都基于 `exit_signal`,没有使用 trailing stop loss 或 take profit。
- 然而从日志来看trailing_stop_loss 曾被启用,但在最新修改中已被注释掉。
**结论**
- 当前退出逻辑可能过于依赖单一信号,缺乏动态止盈止损机制来保护利润或控制风险。
---
## 🔍 **策略配置与特征工程分析**
### 1. **FreqAI 配置**
```python
freqai_config = {
"enabled": True,
"identifier": "okx_regression_v1",
"model_training_parameters": {
"n_estimators": 100,
"learning_rate": 0.05,
"max_depth": 6
},
"feature_parameters": {
"include_timeframes": ["5m", "15m", "1h"],
"include_corr_pairlist": ["BTC/USDT", "ETH/USDT"],
"label_period_candles": 12,
"include_shifted_candles": 2,
"principal_component_analysis": True
},
"data_split_parameters": {
"test_size": 0.2,
"random_state": 42,
"shuffle": False
},
"train_period_days": 90,
"backtest_period_days": 30,
"purge_old_models": True
}
```
#### ✅ 合理之处
- 使用了多时间框架5m, 15m, 1h和相关币种BTC/USDT, ETH/USDT有助于捕捉市场联动性。
- PCA 降维可以减少过拟合风险。
- 每 90 天重新训练模型,适应市场变化。
#### ⚠️ 可改进之处
- `label_period_candles`: 12 根 K 线预测未来价格变动。对于 OKB/USDT 这类波动较大的币种,这个周期可能偏长,导致模型难以准确预测短期反转。
- `test_size=0.2`测试集占比合理但未看到是否使用交叉验证CV可考虑加入以提高模型稳定性评估。
---
### 2. **特征工程**
```python
def feature_engineering_expand_all(self, dataframe: DataFrame, period: int, metadata: Dict, **kwargs) -> DataFrame:
# RSI, MACD, Bollinger Bands, Volume MA
```
#### ✅ 合理之处
- 常用技术指标RSI、MACD、布林带、成交量均线是合理的起点。
- 数据清洗ffill + fillna(0))避免 NaN 导致模型不稳定。
#### ⚠️ 可改进之处
- 缺乏高阶特征(如趋势强度、波动率变化、动量衰减等),可参考 [FreqAI 特征工程文档](https://www.freqtrade.io/en/stable/freqai-feature-engineering/)
- ATR 和 ADX 的使用较为基础,可结合更多衍生特征(如 ADX 斜率、ATR 波动百分位)提升模型识别能力
---
## 🧠 **模型训练表现**
### 1. **RMSE 指标**
- 训练 RMSE: ~0.33
- 测试 RMSE: ~0.150.17
#### ✅ 合理之处
- 测试 RMSE 接近训练 RMSE说明模型泛化能力尚可。
#### ⚠️ 可改进之处
- 模型参数中包含 `min_depth`,但 XGBoost 报告该参数未被使用,应移除无效参数。
- 可尝试其他模型(如 LightGBM、CatBoost进行对比实验。
---
## 🛠️ **入场逻辑分析**
```python
def populate_entry_trend(self, dataframe: DataFrame, metadata: Dict) -> DataFrame:
dataframe.loc[
(
(dataframe["&-s_close"] > 0.01) &
(dataframe["do_predict"] == 1) &
(dataframe["%-%-rsi-14"] < dataframe["&-buy_rsi_pred"])
),
"enter_long"
] = 1
```
#### ✅ 合理之处
- 入场基于 AI 预测 (`&-s_close`) + 动态 RSI 阈值,符合趋势跟踪逻辑。
#### ⚠️ 可改进之处
- `&-s_close > 0.01` 是一个固定阈值,可考虑使用动态阈值(如历史分位数)来适配不同波动率币种。
- `do_predict == 1` 表示只在模型预测可靠时入场,但未看到如何定义“可靠性”,可增加置信度过滤(如 `&-s_close_conf`)。
---
## 🛑 **出场逻辑分析**
```python
def _dynamic_stop_loss(...)
def _dynamic_take_profit(...)
```
#### ✅ 合理之处
- 使用 ATR 和 ADX 判断市场状态(趋势 vs 震荡),并据此调整止损/止盈距离,是一个良好的自适应思路。
#### ⚠️ 可改进之处
- 最新版本已注释掉 `_dynamic_stop_loss(...)`,仅保留 `_dynamic_take_profit(...)`,这可能导致部分本应止损的交易最终亏损。
- OKB/USDT 属于高波动资产,当前 ATR multiplier 固定为 2.0,可能不适合所有市场状态。建议使用波动率百分位动态调整 ATR multiplier。
---
## 📈 **绩效指标分析**
| 指标 | 数值 | 分析 |
|------|------|------|
| CAGR | -0.20% | 收益曲线下降,长期持有将亏损 |
| Sharpe | -0.37 | 收益风险比为负,说明风险大于收益 |
| Sortino | -0.62 | 下行风险较大 |
| Calmar | -4.11 | 回撤远大于收益,资金曲线不健康 |
| SQN | -0.71 | 低于 1.0,系统不具备统计优势 |
---
## 📦 **配置文件分析**
```json
"freqai": {
"enabled": true,
"identifier": "test175",
"freqaimodel": "XGBoostRegressor",
"train_period_days": 60,
"backtest_period_days": 10,
...
}
```
#### ✅ 合理之处
- 使用 XGBoostRegressor 是回归任务的标准选择。
- 每 60 天训练一次,适合中长期趋势识别。
#### ⚠️ 可改进之处
- `backtest_period_days=10` 偏短,建议延长至 30 天以上,以更准确评估模型表现。
- `early_stopping_rounds=50` 设置较高,可适当降低以加快训练速度。
---
## 📉 **回撤分析**
- **最大回撤**: -2.52 USDT发生在 2024-10-01 至 2025-01-27
- **最长连续亏损笔数**: 5 笔
- **最大单笔亏损**: -3.10%
#### ✅ 合理之处
- 回撤监控完整,包括起止时间和高低点。
#### ⚠️ 可改进之处
- 回撤过大说明模型对趋势反转反应迟钝,需加强回调止损逻辑。
- 可引入 Volatility Stop Loss如 Chandelier Exit替代简单 ATR 止损。
---
## 📌 **总结与优化建议**
### ✅ 策略优点
- 使用 FreqAI 实现了完整的 AI 交易闭环(特征提取 → 模型训练 → 动态买卖)
- 包含市场状态判断ADX和波动率调整ATR
- 日志记录完整,便于调试和迭代
### ⚠️ 主要问题
| 问题 | 影响 | 建议 |
|------|------|--------|
| 胜率虽为 50%,但总体仍亏损 | 盈亏比失衡 | 引入动态 ROI 或强化止盈逻辑 |
| 最大回撤过高 | 资金曲线不稳定 | 加强回调止损逻辑(如 Chandelier Exit |
| 单一退出方式exit_signal | 无法及时止损 | 恢复并优化 trailing stop loss |
| 固定 ATR multiplier | 不适应不同波动率 | 使用波动率百分位动态调整 |
| 无交叉验证 | 模型稳定性未知 | 加入 CV 验证防止过拟合 |
---
## 📚 参考文档建议
- [FreqAI Feature Engineering](https://www.freqtrade.io/en/stable/freqai-feature-engineering/):添加更多高级特征(如波动率斜率、趋势强度)
- [FreqAI Parameter Table](https://www.freqtrade.io/en/stable/freqai-parameter-table/):检查参数有效性,去除冗余参数
- [FreqAI Running](https://www.freqtrade.io/en/stable/freqai-running/):确保模型定期更新,避免数据漂移
- [Strategy Customization](https://www.freqtrade.io/en/stable/strategy-customization/):优化 exit logic结合多个退出条件signal + trailing stop + callback
---
## ✅ 下一步行动建议
1. **恢复并优化 trailing stop loss**,使用 ADX 和波动率百分位动态调整 ATR multiplier
2. **引入回调止损逻辑**callback stop loss防止趋势中途反转造成大幅回撤
3. **动态 ROI 调整**,根据 ADX 判断趋势强度,设置不同 ROI 阈值
4. **加入交叉验证**CV提高模型稳定性
5. **运行新的 backtest**,观察 exit_signal vs dynamic stop loss 的实际效果