243 lines
8.9 KiB
Markdown
243 lines
8.9 KiB
Markdown
- 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.15–0.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 的实际效果
|