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

8.9 KiB
Raw Permalink Blame History

  • 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.150.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 验证防止过拟合

📚 参考文档建议


下一步行动建议

  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 的实际效果