VibeTradingVibeTrading
返回博客
Also available inEnglish
TutorialsJuly 20, 202614 min read

freqtrade FreqAI 指南:为加密货币机器人添加机器学习

本文是实用指南:在 freqtrade 中使用 FreqAI 模块构建自适应、机器学习驱动的加密货币交易策略。涵盖 FreqAI 设置、特征工程、模型选择、避免过拟合的关键实践与实盘监控要点,是想为加密机器人添加 ML 的进阶教程,并讨论特征重要性分析与模型监控的常用方法。

#freqtrade#freqai#machine learning#crypto#algo trading#open source
Risk Disclaimer: This content is for educational purposes only. Trading involves significant risk of loss. Past performance does not guarantee future results. Always do your own research before using any trading tool or strategy.

freqtrade 已是最强的开源加密货币机器人之一。它的 FreqAI 模块在此基础上增加机器学习,让策略能随市场状况自适应调整。本文教你如何在不过度复杂的情况下入门 FreqAI。

FreqAI 是什么

FreqAI 是集成在 freqtrade 中的机器学习框架。它在历史特征上训练模型并生成预测供策略使用。例如,FreqAI 可能基于近期指标和订单簿数据预测 BTC 一小时后价格是否上涨。

主要能力:

  • 自动特征工程
  • 模型训练和再训练
  • 实盘预测生成
  • 支持分类、回归和预测
  • 集成 scikit-learn、XGBoost 和 LightGBM

FreqAI 什么时候有用

最有用时:

  • 市场状况频繁变化
  • 简单规则策略表现不佳
  • 你有能预测短期走势的清晰特征
  • 能严格样本外验证模型

不太有用时:

  • 历史数据不足
  • 策略本身已很稳健
  • 无法解释模型为何做出预测

FreqAI 设置

FreqAI 随 freqtrade 提供。确保安装较新版本:

pip install -U freqtrade

在配置文件中启用 FreqAI:

"freqai": {
  "enabled": true,
  "identifier": "my_freqai_model",
  "feature_parameters": {
    "include_timeframes": ["5m", "15m", "1h"],
    "include_corr_pairlist": ["BTC/USDT", "ETH/USDT"],
    "label_period_candles": 24,
    "include_shifted_candles": 2,
    "DI_threshold": 0.9,
    "use_SVM_to_remove_outliers": true
  },
  "data_split_parameters": {
    "test_size": 0.2,
    "random_state": 1
  },
  "model_training_parameters": {
    "n_estimators": 100
  }
}

此配置让 FreqAI 使用 5 分钟、15 分钟和 1 小时 K 线,预测未来 24 根 K 线,用 20% 数据验证。

创建 FreqAI 策略

FreqAI 策略继承自 IFreqaiStrategy 而非普通 IStrategy。关键区别是可以访问模型预测。

from freqtrade.strategy import IStrategy
import talib.abstract as ta
 
class FreqaiExample(IStrategy):
    def populate_indicators(self, dataframe, metadata):
        dataframe = self.freqai.start(dataframe, metadata, self)
        return dataframe
 
    def populate_entry_trend(self, dataframe, metadata):
        dataframe.loc[
            (dataframe['&-s_target'] > 0.02),
            'enter_long'] = 1
        return dataframe
 
    def populate_exit_trend(self, dataframe, metadata):
        dataframe.loc[
            (dataframe['&-s_target'] < -0.01),
            'exit_long'] = 1
        return dataframe

&-s_target 列包含模型预测。本例中预测收益高于 2% 时开多。

特征工程

FreqAI 可自动生成特征,但深思熟虑的特征设计通常效果最好。常见特征:

  • 滞后收益和波动率
  • 移动平均和 RSI
  • 订单簿不平衡
  • 资金费率
  • 情绪分数

避免创建数百个随机特征,那会导致过拟合。

模型选择

FreqAI 支持多种模型:

  • LightGBMRegressor:快速梯度提升,好默认
  • XGBoostRegressor:强但慢
  • CatboostRegressor:类别特征处理佳
  • SKLearnRandomForestRegressor:简单可解释

从 LightGBM 开始。它快、准,处理金融表格数据表现出色。

避免过拟合

这是 FreqAI 最难的部分。常见错误:

  • 特征太多
  • 训练历史太短
  • 预测周期超出模型信号范围
  • 忽略交易成本

使用这些 safeguard:

  • 样本外验证
  • 滚动前向分析
  • 模拟盘数周
  • 限制特征数量
  • 回测包含真实手续费

FreqAI 实盘交易

FreqAI 按设定计划自动重训练模型。实盘模式下它会:

  1. 下载最新数据
  2. 有足够新数据时重训练模型
  3. 为当前 K 线生成预测
  4. 把预测传给策略

先用 dry-run 模式确保训练和预测流水线无误。

监控 FreqAI 表现

长期跟踪:

  • 预测准确率 vs 实际收益
  • 特征重要性漂移
  • 模型重训练频率
  • 实盘盈亏 vs 回测

如果预测质量下降,可能是市场机制变化,需要重训练或重新设计模型。

总结

FreqAI 确实增强了 freqtrade,但不是魔法升级。成功依赖好特征、谨慎验证和纪律风险管理。把 FreqAI 当作稳健策略上的自适应层,而不是替代。

从简单开始,诚实验证,只有模拟盘显示持续优势后再扩大。


相关阅读: Freqtrade 新手指南 | FinRL vs Stable Baselines 3 | 如何回测而不自欺欺人