8.9 KiB
8.9 KiB
-
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 配置
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. 特征工程
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 特征工程文档
- ATR 和 ADX 的使用较为基础,可结合更多衍生特征(如 ADX 斜率、ATR 波动百分位)提升模型识别能力
🧠 模型训练表现
1. RMSE 指标
- 训练 RMSE: ~0.33
- 测试 RMSE: ~0.15–0.17
✅ 合理之处
- 测试 RMSE 接近训练 RMSE,说明模型泛化能力尚可。
⚠️ 可改进之处
- 模型参数中包含
min_depth,但 XGBoost 报告该参数未被使用,应移除无效参数。 - 可尝试其他模型(如 LightGBM、CatBoost)进行对比实验。
🛠️ 入场逻辑分析
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)。
🛑 出场逻辑分析
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,系统不具备统计优势 |
📦 配置文件分析
"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:添加更多高级特征(如波动率斜率、趋势强度)
- FreqAI Parameter Table:检查参数有效性,去除冗余参数
- FreqAI Running:确保模型定期更新,避免数据漂移
- Strategy Customization:优化 exit logic,结合多个退出条件(signal + trailing stop + callback)
✅ 下一步行动建议
- 恢复并优化 trailing stop loss,使用 ADX 和波动率百分位动态调整 ATR multiplier
- 引入回调止损逻辑(callback stop loss),防止趋势中途反转造成大幅回撤
- 动态 ROI 调整,根据 ADX 判断趋势强度,设置不同 ROI 阈值
- 加入交叉验证(CV),提高模型稳定性
- 运行新的 backtest,观察 exit_signal vs dynamic stop loss 的实际效果