跳至内容

freqai-logo

FreqAI

简介

FreqAI 是一款软件,旨在自动化一系列与训练预测性机器学习模型相关的任务,以在给定一组输入信号的情况下生成市场预测。通常,FreqAI 旨在成为一个沙箱环境,用于在实时数据上轻松部署强大的机器学习库(详情)。

注意

FreqAI 是一个非营利性的开源项目,并将永远保持如此。FreqAI 没有加密货币代币,出售交易信号,除了当前的 freqtrade 文档 外也没有其他官方域名。

主要功能包括:

  • 自适应重新训练 - 在实盘运行期间重新训练模型,以监督学习方式实现模型对市场的自我适应
  • 快速特征工程 - 基于用户自定义策略,生成庞大且丰富的特征集(超过 10,000 个特征)
  • 高性能 - 通过多线程技术,将模型重新训练(可在独立线程或 GPU 上运行)与模型推理(预测)及交易机器人操作分离。最新模型和数据保留在内存中,以实现快速推理
  • 贴近现实的回测 - 使用一个回测模块在历史数据上模拟自适应训练过程,该模块可自动完成模型重新训练
  • 高度可扩展性 - 通用且稳健的架构支持集成 Python 中任意可用的机器学习库/方法。目前已提供八个示例,涵盖分类器、回归器以及卷积神经网络
  • 智能异常值剔除 - 使用多种异常检测技术从训练和预测数据集中剔除异常值
  • 崩溃恢复能力 - 将已训练模型保存到磁盘,以便崩溃后能快速轻松地重新加载,并可清理过期文件以保障长期模拟或实盘运行的稳定性
  • 自动数据归一化 - 以智能且符合统计安全原则的方式对数据进行归一化处理
  • 自动数据下载 - 自动计算数据下载的时间范围,并更新历史数据(在实盘部署中)
  • 输入数据清洗 - 在训练和模型推理前安全地处理缺失值(NaN)
  • 降维处理 - 通过主成分分析(PCA)减少训练数据的维度
  • 部署机器人集群 - 设置一个机器人负责训练模型,而由多个使用者组成的集群则共享生成的信号

快速开始

快速测试 FreqAI 最简单的方法是使用以下命令以模拟模式运行:

freqtrade trade --config config_examples/config_freqai.example.json --strategy FreqaiExampleStrategy --freqaimodel LightGBMRegressor --strategy-path freqtrade/templates

你将看到系统启动时自动下载数据的过程,随后是模型训练与交易操作的并行执行。

不适用于生产环境

Freqtrade 源代码中提供的示例策略旨在展示/测试 FreqAI 的多种功能。它还被设计为可在小型计算机上运行,以便开发者和用户之间进行性能基准比较。该策略不适合用于实际生产环境。

可分别在 freqtrade/templates/FreqaiExampleStrategy.pyfreqtrade/freqai/prediction_models/LightGBMRegressor.pyconfig_examples/config_freqai.example.json 中找到用作起点的示例策略、预测模型和配置文件。

通用方法

您需要向 FreqAI 提供一组自定义的基础指标(方式与典型的 Freqtrade 策略相同)以及目标值(标签)。对于白名单中的每一对交易对,FreqAI 会训练一个模型,根据自定义指标的输入来预测目标值。这些模型会以预设的频率持续重新训练,以适应市场状况。FreqAI 支持回测策略(通过在历史数据上周期性地重新训练来模拟真实情况),也支持模拟/实盘运行。在模拟或实盘条件下,FreqAI 可设置为在后台线程中持续重新训练,以尽可能保持模型最新。

下图展示了该算法的概览,解释了数据处理流程和模型的使用方式。

freqai-algo

重要的机器学习术语

特征(Features) - 基于历史数据的参数,用于训练模型。单根 K 线的所有特征被存储为一个向量。在 FreqAI 中,您可以从策略中构建的任何内容来创建特征数据集。

标签(Labels) - 模型训练所要逼近的目标值。每个特征向量都关联一个由您在策略中定义的标签。这些标签有意地指向未来,也就是您希望模型能够预测的内容。

训练(Training) - “教导”模型将特征集与对应标签匹配的过程。不同类型的模型以不同的方式“学习”,这意味着某种模型可能在特定应用中优于其他模型。有关 FreqAI 中已实现的不同模型的更多信息,可以在此处找到。

训练数据(Train data) - 特征数据集中的一部分,用于在训练期间输入模型,以“教会”模型如何预测目标值。这部分数据直接影响模型中的权重连接。

测试数据(Test data) - 特征数据集中的一部分,用于训练后评估模型的性能。这部分数据不会影响模型内部节点的权重。

推理(Inferencing) - 将训练好的模型应用于新的、未见过的数据,并由模型做出预测的过程。

安装先决条件

正常的 Freqtrade 安装过程会询问您是否希望安装 FreqAI 的依赖项。如果您打算使用 FreqAI,应选择“是”。如果您当时未选择,可以在安装后手动安装这些依赖项,命令如下:

pip install -r requirements-freqai.txt

注意

Catboost 不会在低性能的 ARM 设备(如树莓派)上安装,因为该平台没有提供相应的预编译包(wheels)。

Docker 中的使用

如果您使用 Docker,我们提供了一个包含 FreqAI 依赖项的专用标签 :freqai。因此,您可以在 Docker Compose 文件中将镜像行替换为 image: freqtradeorg/freqtrade:stable_freqai。该镜像包含了常规的 FreqAI 依赖项。与本地安装类似,Catboost 在基于 ARM 的设备上不可用。如果您想使用 PyTorch 或强化学习,请使用 torch 或 RL 标签:image: freqtradeorg/freqtrade:stable_freqaitorchimage: freqtradeorg/freqtrade:stable_freqairl

docker-compose-freqai.yml

我们在 docker/docker-compose-freqai.yml 中为此提供了明确的 docker-compose 文件,可通过 docker compose -f docker/docker-compose-freqai.yml run ... 使用,也可以复制并替换原始的 docker 文件。此 docker-compose 文件还包含一个(已禁用)部分,用于在 Docker 容器内启用 GPU 资源。这显然要求系统具备可用的 GPU 资源。

FreqAI 在开源机器学习领域中的定位

预测混沌时间序列系统(如股票/加密货币市场)需要一套广泛的工具,以测试各种假设。幸运的是,近年来强大的机器学习库(例如 scikit-learn)日趋成熟,开辟了广泛的研究可能性。来自不同领域的科研人员现在可以轻松地基于大量成熟的机器学习算法快速搭建研究原型。同样,这些用户友好的库也让“民间科学家”能够利用基础的 Python 技能进行数据探索。然而,在历史和实时的混沌数据源上应用这些机器学习库在操作上可能非常困难且成本高昂。此外,可靠的数据采集、存储和处理也带来了另一重挑战。FreqAI 旨在提供一个通用且可扩展的开源框架,专注于市场预测中自适应模型的实时部署。FreqAI 框架实际上是一个丰富开源机器学习库的沙箱环境。在这个 FreqAI 沙箱中,用户可以结合多种第三方库,对免费、全天候实时的混沌数据源——加密货币交易所数据——进行创造性假设的验证。

引用 FreqAI

FreqAI 已发表于《Journal of Open Source Software》。如果您的研究中使用了 FreqAI,请引用以下文献:

@article{Caulk2022, 
    doi = {10.21105/joss.04864},
    url = {https://doi.org/10.21105/joss.04864},
    year = {2022}, publisher = {The Open Journal},
    volume = {7}, number = {80}, pages = {4864},
    author = {Robert A. Caulk and Elin Törnquist and Matthias Voppichler and Andrew R. Lawless and Ryan McMullan and Wagner Costa Santos and Timothy C. Pogue and Johan van der Vlugt and Stefan P. Gehring and Pascal Schmidt},
    title = {FreqAI: generalizing adaptive modeling for chaotic time-series market forecasts},
    journal = {Journal of Open Source Software} } 

常见陷阱

FreqAI 不能与动态的 VolumePairlists(或任何动态增减交易对的配对列表过滤器)结合使用。这是出于性能考虑——FreqAI 依赖于快速完成预测和重新训练。为了高效实现这一点,它需要在模拟或实盘运行开始时下载所有训练数据。FreqAI 会自动存储并追加新的 K 线数据,以便后续重新训练。这意味着,如果在运行过程中由于 volume pairlist 引入了新的交易对,则系统将没有相应的数据准备。不过,FreqAI 可以与 ShufflePairlist 或保持总交易对数量不变(仅按交易量重新排序)的 VolumePairlist 配合使用。

更多学习资料

以下是我们整理的一些外部资料,深入探讨了 FreqAI 的各个组成部分:

支持

您可以在多个地方获得 FreqAI 的支持,包括 Freqtrade discord、专用的 FreqAI discord 以及 github issues

致谢

FreqAI 由一群个人开发者共同开发,每位成员都为项目贡献了特定的专业技能。

概念设计与软件开发:Robert Caulk @robcaulk

理论构思与数据分析:Elin Törnquist @th0rntwig

代码审查与软件架构讨论:@xmatthias

软件开发:Wagner Costa @wagnercosta,Emre Suzen @aemr3,Timothy Pogue @wizrds

Beta 测试与错误报告:Stefan Gehring @bloodhunter4rc,@longyu,Andrew Lawless @paranoidandy,Pascal Schmidt @smidelis,Ryan McMullan @smarmau,Juha Nykänen @suikula,Johan van der Vlugt @jooopiert,Richárd Józsa @richardjosza