FreqAI¶
介绍¶
FreqAI是一种软件,旨在自动化与训练预测性机器学习模型相关的各种任务,以生成给定一组输入信号的市场预测。总的来说,FreqAI旨在成为一个沙盒,方便地在实时数据上部署强大的机器学习库(详细信息)。
注意
FreqAI是一个非盈利的开源项目。FreqAI没有加密代币,FreqAI没有出售信号,除了目前的freqtrade文档之外,FreqAI没有域名。
功能包括:
- 自适应重新训练 - 在实时部署期间重新训练模型,以以监督的方式自适应市场
- 快速特征工程 - 基于用户创建的简单策略创建大量丰富的特征集(10k+个特征)
- 高性能 - 线程允许在单独的线程(或可用的GPU上)上进行自适应模型重新训练,而不干扰模型推理(预测)和机器人交易操作。最新的模型和数据保存在RAM中,以实现快速推理
- 真实的回测 - 使用回测模块在历史数据中模拟自适应训练
- 可扩展性 - 通用而健壮的架构允许将Python中提供的任何机器学习库/方法纳入进来。目前提供了八个示例,包括分类器、回归器和卷积神经网络
- 智能异常值移除 - 使用各种异常值检测技术从训练和预测数据集中移除异常值
- 崩溃恢复能力 - 将训练好的模型存储到磁盘上,以便从崩溃中快速和轻松地重新加载,并为持续的干/实时运行清除过时文件
- 自动数据归一化 - 智能和统计上安全地归一化数据
- 自动数据下载 - 计算数据下载的时间范围,并更新历史数据(在实时部署中)
- 清理传入数据 - 在训练和模型推断之前,安全地处理NaN值
- 降维 - 通过主成分分析减小训练数据的大小
- 部署机器人群集 - 设置一个机器人来训练模型,同时有一群消费者使用信号。
快速入门¶
快速测试FreqAI的最简便方法是以干模式运行以下命令:
freqtrade trade --config config_examples/config_freqai.example.json --strategy FreqaiExampleStrategy --freqaimodel LightGBMRegressor --strategy-path freqtrade/templates
您将看到自动数据下载的启动过程,紧接着是同时进行训练和交易。
非生产环境
Freqtrade来源代码提供的示例策略旨在展示/测试各种FreqAI功能。它也设计为在小型计算机上运行,以便作为开发人员和用户之间的基准。它不设计为在生产环境中运行。
可以在freqtrade/templates/FreqaiExampleStrategy.py
、freqtrade/freqai/prediction_models/LightGBMRegressor.py
和config_examples/config_freqai.example.json
中找到用作起点的示例策略、预测模型和配置。
一般方法¶
您向FreqAI提供一组自定义的基础指标(就像在典型的Freqtrade策略中一样),以及目标值(标签)。对于白名单中的每一对,FreqAI训练一个模型,根据自定义指标的输入来预测目标值。然后,这些模型将被持续重新训练,按照预定的频率,以适应市场条件。FreqAI能够回测策略(在历史数据上模拟实际情况,并定期重新训练)并部署干/实盘交易。在干/实盘交易条件下,FreqAI可以设置为在后台线程中进行恒定的重新训练,以使模型尽可能地保持最新。
下图显示了算法的概述,说明了数据处理流程和模型的使用情况。
重要的机器学习术语¶
特征 - 在历史数据的基础上,模型接受训练的参数。单个蜡烛的所有特征都被存储为一个向量。在FreqAI中,您可以从策略中构建一个特征数据集。
标签 - 模型接受训练的目标值。每个特征向量都与一个由您在策略中定义的单个标签相关联。这些标签有意地向未来看,并且是您训练模型能够预测的内容。训练 - 将模型“教导”匹配特征集与相关标签的过程。不同类型的模型以不同的方式“学习”,这意味着某个模型在特定应用中可能比另一个模型更好。有关已在 FreqAI 中实现的不同模型的更多信息可以在这里找到。
训练数据 - 特征数据集的子集,用于在训练过程中向模型提供数据以“教导”模型如何预测目标值。这些数据直接影响模型中的权重连接。
测试数据 - 特征数据集的子集,用于在训练之后评估模型的性能。这些数据不会影响模型中的节点权重。
推理 - 在训练模型之后,将未见过的新数据输入模型进行预测的过程。
安装先决条件¶
正常的 Freqtrade 安装过程将询问您是否希望安装 FreqAI 依赖项。如果您希望使用 FreqAI,则应回答“yes”。如果您没有回答 yes,那么您可以在安装后手动安装这些依赖项,方法如下:
pip install -r requirements-freqai.txt
注意
Catboost 在低功耗的 ARM 设备(树莓派)上不会安装,因为它不提供该平台的 wheels 文件。
使用 Docker¶
如果您使用 Docker,可以使用 :freqai
作为专门包含 FreqAI 依赖项的标签。因此,您可以将 docker-compose 文件中的镜像行替换为 image: freqtradeorg/freqtrade:develop_freqai
。该镜像包含常规的 FreqAI 依赖项。与本地安装类似,Catboost 在基于 ARM 的设备上不可用。如果您想使用 PyTorch 或强化学习,您应该使用 torch
标签或 RL
标签,例如 image: freqtradeorg/freqtrade:develop_freqaitorch
、image: freqtradeorg/freqtrade:develop_freqairl
。!!!注意 "docker-compose-freqai.yml"
我们提供了一个明确的 docker-compose
文件用于此功能,在 docker/docker-compose-freqai.yml
中可以使用,可以通过 docker compose -f docker/docker-compose-freqai.yml run ...
命令进行使用,或者可以复制并替换原始的 Docker 文件。这个 docker-compose
文件还包含了一个(被禁用的)部分,可以在 Docker 容器中启用 GPU 资源。当然,这需要系统上有可用的 GPU 资源。
FreqAI在开源机器学习领域中的位置¶
对于预测混沌的时间序列系统,如股票/加密货币市场,需要一系列可用于测试各种假设的工具。幸运的是,最近出现了强大的机器学习库(例如scikit-learn
),为研究提供了广泛的可能性。来自各个领域的科学家现在可以在众多已建立的机器学习算法上轻松地进行原型研究。同样,这些易用的库使得“公民科学家”可以利用他们的基本Python技能进行数据探索。然而,在历史数据和实时混乱数据源上利用这些机器学习库可能在逻辑上存在困难和昂贵的问题。此外,强大的数据收集、存储和处理也带来了不同的挑战。FreqAI
旨在提供一个通用的、可扩展的开源框架,用于市场预测中的自适应建模的实时部署。FreqAI
框架实际上就是一个丰富的开源机器学习库的沙盒。在FreqAI
沙盒中,用户发现他们可以结合各种第三方库,在一个自由的实时24/7混乱数据源 - 加密货币交易所数据上,测试创造性的假设。
引用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: 混沌时间序列市场预测的通用自适应建模},
journal = {Journal of Open Source Software}
}
常见问题¶
FreqAI不能与动态 VolumePairlists
(或任何会动态添加和删除货币对的过滤器)结合使用。
这是为了性能原因 - FreqAI 需要快速进行预测和重新训练。为了有效地做到这一点,它需要在干/实例开始时下载所有的训练数据。FreqAI会自动存储和追加新的蜡烛数据以供将来的重新训练之用。这意味着,如果在干跑期间由于VolumePairlist
而出现新的货币对到达,它将无法准备好使用数据。然而,FreqAI可以与 ShufflePairlist
或 VolumePairlist
一起使用,后者保持总的货币对数目不变(但根据交易量重新排序)。
更多学习资料¶
在这里我们汇总了一些外部资料,提供了关于FreqAI各组成部分的深入了解:
支持¶
您可以在各种地方找到 FreqAI 的支持,包括Freqtrade Discord、专用的FreqAI Discord和GitHub 问题。
鸣谢¶
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