Skip to content

开发 (Development)

项目架构 (Project architecture)

FreqAI 的架构和功能被通用化,以鼓励开发特有的功能、函数、模型等。

类结构和详细的算法概览如下图所示:

image

如图所示,FreqAI 由三个不同的对象组成:

  • IFreqaiModel - 一个单一的持久化对象,包含收集、存储和处理数据、特征工程、运行训练和推理模型所需的所有逻辑。
  • FreqaiDataKitchen - 一个非持久化对象,为每个唯一的资产/模型唯一创建。除了元数据外,它还包含各种数据处理工具。
  • FreqaiDataDrawer - 一个单一的持久化对象,包含所有历史预测、模型以及保存/加载方法。

有各种内置的 预测模型,它们直接继承自 IFreqaiModel。这些模型中的每一个都可以完全访问 IFreqaiModel 中的所有方法,因此可以根据意愿覆盖任何这些函数。然而,高级用户可能会倾向于覆盖 fit()train()predict()data_cleaning_train/predict()

数据处理 (Data handling)

FreqAI 旨在以简化后处理并通过自动数据重新加载增强崩溃韧性的方式组织模型文件、预测数据和元数据。数据保存在文件结构 user_data_dir/models/ 中,其中包含与训练和回测相关的所有数据。FreqaiDataKitchen() 严重依赖于文件结构进行正确的训练和推理,因此不应手动修改。

文件结构 (File structure)

文件结构是根据 配置 中设置的模型 identifier(标识符)自动生成的。以下结构显示了数据存储用于后处理的位置:

结构描述
config_*.json指标特定配置文件的副本。
historic_predictions.pkl包含在 identifier 模型生命周期内及实盘部署期间生成的所有历史预测的文件。historic_predictions.pkl 用于在崩溃或配置更改后重新加载模型。始终持有一个备份文件以防主文件损坏。FreqAI 自动 检测损坏并用备份文件替换损坏的文件。
pair_dictionary.json包含训练队列以及磁盘上最近训练模型位置的文件。
sub-train-*_TIMESTAMP包含与单个模型关联的所有文件的文件夹,例如:
*_metadata.json - 模型的元数据,如归一化最大值/最小值、预期的训练特征列表等。
*_model.* - 保存到磁盘用于从崩溃中重新加载的模型文件。可以是 joblib(典型的 boosting 库)、zip(stable_baselines)、hd5(keras 类型)等。
*_pca_object.pkl - 主成分分析 (PCA) 转换(如果在配置中设置了 principal_component_analysis: True),将用于转换未见的预测特征。
*_svm_model.pkl - 支持向量机 (SVM) 模型(如果在配置中设置了 use_SVM_to_remove_outliers: True),用于检测未见预测特征中的异常值。
*_trained_df.pkl - 包含用于训练 identifier 模型的所有训练特征的数据帧。这用于计算 不相似度指数 (DI),也可用于后处理。
*_trained_dates.df.pkl - 与 trained_df.pkl 关联的日期,对后处理很有用。

示例文件结构看起来像这样:

├── models
│   └── unique-id
│       ├── config_freqai.example.json
│       ├── historic_predictions.backup.pkl
│       ├── historic_predictions.pkl
│       ├── pair_dictionary.json
│       ├── sub-train-1INCH_1662821319
│       │   ├── cb_1inch_1662821319_metadata.json
│       │   ├── cb_1inch_1662821319_model.joblib
│       │   ├── cb_1inch_1662821319_pca_object.pkl
│       │   ├── cb_1inch_1662821319_svm_model.joblib
│       │   ├── cb_1inch_1662821319_trained_dates_df.pkl
│       │   └── cb_1inch_1662821319_trained_df.pkl
│       ├── sub-train-1INCH_1662821371
│       │   ├── cb_1inch_1662821371_metadata.json
│       │   ├── cb_1inch_1662821371_model.joblib
│       │   ├── cb_1inch_1662821371_pca_object.pkl
│       │   ├── cb_1inch_1662821371_svm_model.joblib
│       │   ├── cb_1inch_1662821371_trained_dates_df.pkl
│       │   └── cb_1inch_1662821371_trained_df.pkl
│       ├── sub-train-ADA_1662821344
│       │   ├── cb_ada_1662821344_metadata.json
│       │   ├── cb_ada_1662821344_model.joblib
│       │   ├── cb_ada_1662821344_pca_object.pkl
│       │   ├── cb_ada_1662821344_svm_model.joblib
│       │   ├── cb_ada_1662821344_trained_dates_df.pkl
│       │   └── cb_ada_1662821344_trained_df.pkl
│       └── sub-train-ADA_1662821399
│           ├── cb_ada_1662821399_metadata.json
│           ├── cb_ada_1662821399_model.joblib
│           ├── cb_ada_1662821399_pca_object.pkl
│           ├── cb_ada_1662821399_svm_model.joblib
│           ├── cb_ada_1662821399_trained_dates_df.pkl
│           └── cb_ada_1662821399_trained_df.pkl