跳至内容

参数表

下表将列出 FreqAI 支持的所有配置参数。部分参数在 config_examples/config_freqai.example.json 中有示例。

必填参数标记为 必需,并需通过建议的方式之一进行设置。

通用配置参数

参数 描述
位于 config.freqai 树中的通用配置参数
freqai 必需。
包含控制 FreqAI 所有参数的父级字典。
数据类型: 字典。
train_period_days 必需。
用于训练数据的天数(滑动窗口的宽度)。
数据类型: 正整数。
backtest_period_days 必需。
在回测期间,使用训练好的模型进行推理的天数,之后滑动上方定义的 train_period_days 窗口并重新训练模型(更多信息见此处)。该值可以是小数天,但请注意,提供的 timerange 将被此数值整除,以确定完成回测所需的训练次数。
数据类型: 浮点数。
identifier 必需。
当前模型的唯一标识符。如果模型保存到磁盘,identifier 可用于重新加载特定的预训练模型/数据。
数据类型: 字符串。
live_retrain_hours 在模拟/实盘运行期间重新训练的频率。
数据类型: 浮点数 > 0。
默认值:0(尽可能频繁地重新训练模型)。
expiration_hours 如果模型的年龄超过 expiration_hours,则避免进行预测。
数据类型: 正整数。
默认值:0(模型永不过期)。
purge_old_models 保留在磁盘上的模型数量(与回测无关)。默认值为 2,表示模拟/实盘运行将保留最新的 2 个模型。设置为 0 表示保留所有模型。此参数也支持布尔值以保持向后兼容性。
数据类型: 整数。
默认值:2
save_backtest_models 在运行回测时将模型保存到磁盘。回测通过保存预测数据并在后续运行中直接重用这些数据(例如调整入场/出场参数时)来实现最高效率。将回测模型保存到磁盘还可以在启动模拟或实盘实例时使用相同的模型文件,前提是模型的identifier相同。
数据类型:布尔值。
默认值:False(不保存任何模型)。
fit_live_predictions_candles 用于从预测数据(而非训练数据集)计算目标(标签)统计信息的历史 K 线数量(更多信息请参见此处)。
数据类型:正整数。
continual_learning 使用最近训练完成的模型的最终状态作为新模型的初始状态,从而实现增量学习(更多信息请参见此处)。请注意,目前这是一种简单的增量学习方法,存在较高的过拟合风险,或在市场行情变化时导致模型陷入局部最优而无法适应。我们提供此功能主要是出于实验目的,并为未来在加密市场等复杂动态系统中实现更成熟的持续学习方法做好准备。
数据类型:布尔值。
默认值:False
write_metrics_to_disk 将训练时间、推理时间和 CPU 使用情况收集到 JSON 文件中。
数据类型:布尔值。
默认值:False
data_kitchen_thread_count
指定用于数据处理(如异常值处理、归一化等)的线程数量。此设置不影响训练所用的线程数。若用户未设置(默认情况),FreqAI 将使用最大线程数减去 2(为 Freqtrade 机器人和 FreqUI 保留 1 个物理核心)。
数据类型:正整数。
activate_tensorboard
指示是否为支持 TensorBoard 的模块启用 TensorBoard(当前包括强化学习、XGBoost、CatBoost 和 PyTorch)。使用 TensorBoard 需要安装 Torch,因此您需要使用包含 Torch/强化学习的 Docker 镜像,或在安装过程中回答“是否安装 Torch”时选择“是”。
数据类型:布尔值。
默认值:True
wait_for_training_iteration_on_reload
当使用/reload 命令或按下 Ctrl+C 时,是否等待当前训练迭代完成后才执行优雅关闭。若设置为False,FreqAI 将中断当前训练迭代,使您能更快地完成关闭操作,但会丢失本次训练的结果。
数据类型:布尔值。
默认值:True

特征参数

参数 描述
位于freqai.feature_parameters子字典中的特征参数
feature_parameters 包含用于构建特征集的参数的字典。详细说明和示例见此处
数据类型:字典。
include_timeframes 指定在feature_engineering_expand_*()中为哪些时间周期生成所有指标。这些时间周期将作为特征添加到基础指标数据集中。
数据类型:时间周期列表(字符串)。
include_corr_pairlist FreqAI 将添加为所有 pair_whitelist 交易对的附加特征的相关币种列表。在特征工程期间(详见此处),feature_engineering_expand_*() 中设置的所有指标都将为每个相关币种生成。相关币种的特征将被添加到基础指标数据集中。
数据类型:资产列表(字符串)。
label_period_candles 用于创建标签的未来 K 线数量。该参数可用于 set_freqai_targets()(详细用法请参见 templates/FreqaiExampleStrategy.py)。此参数并非必需,您可以创建自定义标签,并自行决定是否使用该参数。具体示例用法请参见 templates/FreqaiExampleStrategy.py
数据类型:正整数。
include_shifted_candles 将前几根 K 线的特征复制到后续 K 线中,以增加历史信息。如果启用,FreqAI 会复制并前移 include_shifted_candles 根先前 K 线的所有特征,使其可用于后续 K 线。
数据类型:正整数。
weight_factor 根据训练数据点的新旧程度进行加权(详见此处)。
数据类型:正浮点数(通常 < 1)。
indicator_max_period_candles 已不再使用 (#7325)。由策略中设置的 startup_candle_count 取代。startup_candle_count 与时间框架无关,定义了在 feature_engineering_*() 中用于指标创建的最大周期。FreqAI 使用此参数结合 include_time_frames 中的最大时间框架,计算需要下载的数据点数量,以确保第一个数据点不包含 NaN 值。
数据类型:正整数。
indicator_periods_candles 用于计算指标的时间周期。这些指标将被添加到基础指标数据集中。
数据类型:正整数列表。
principal_component_analysis 使用主成分分析(PCA)自动降低数据集的维度。有关其工作原理的详细信息,请参见此处
数据类型:布尔值。
默认值:False
plot_feature_importances 为每个模型生成特征重要性图,显示最重要和最不重要的 plot_feature_importances 个特征。图表存储于 user_data/models/<identifier>/sub-train-<COIN>_<timestamp>.html
数据类型:整数。
默认值:0
DI_threshold 当设置为大于 0 时,启用相异指数(Dissimilarity Index)进行异常值检测。有关其工作原理的详细信息,请参见此处
数据类型:正浮点数(通常 < 1)。
use_SVM_to_remove_outliers 训练一个支持向量机(SVM),用于检测并移除训练数据集以及新进数据点中的异常值。有关其工作原理的详细信息,请参见此处
数据类型:布尔值。
svm_params Sklearn 的 SGDOneClassSVM() 中所有可用参数。有关部分选定参数的详细信息,请参见此处
数据类型:字典。
使用 DBSCAN 去除异常值 使用 DBSCAN 算法对数据进行聚类,以识别并从训练和预测数据中移除异常值。关于其工作原理的详细信息,请参见此处
数据类型:布尔值。
噪声标准差 如果设置此参数,FreqAI 会向训练特征添加噪声,以防止过拟合。FreqAI 会从标准差为noise_standard_deviation的高斯分布中生成随机偏差,并将其添加到所有数据点上。noise_standard_deviation应保持在归一化空间范围内,即介于-1 和 1 之间。换句话说,由于 FreqAI 中的数据始终被归一化到-1 和 1 之间,因此noise_standard_deviation: 0.05将导致 32%的数据随机增加或减少超过 2.5%(即落在第一个标准差范围内的数据比例)。
数据类型:整数。
默认值:0
异常值保护百分比 启用后可防止异常值检测方法丢弃过多数据。如果 SVM 或 DBSCAN 检测到的异常值超过outlier_protection_percentage%,FreqAI 将记录警告信息并忽略异常值检测,即原始数据集将保持不变。如果触发了异常值保护,则不会基于该训练数据集进行任何预测。
数据类型:浮点数。
默认值:30
反转训练测试顺序 将特征数据集(见下文)分割,并使用最新的数据部分进行训练,而在历史数据部分上进行测试。这使得模型可以训练至最新数据点,同时避免过拟合。然而,在使用此参数之前,您应充分理解其非传统特性。
数据类型:布尔值。
默认值:False(不反转)。
分割后打乱数据 将数据分割为训练集和测试集,然后分别对两个集合进行独立打乱。
数据类型:布尔值。
默认值:False
训练数据缓冲蜡烛图数量 在指标填充完成后,从训练数据的开头和结尾各截去buffer_train_data_candles个蜡烛图。一个典型应用场景是预测极值时,argrelextrema 函数无法知道时间范围边缘处的极大值/极小值。为了提高模型准确性,最好在整个时间范围内计算 argrelextrema,然后使用此功能按核大小裁剪边缘(缓冲区)。另一种情况是,如果目标设置为偏移的价格变动,则此缓冲区没有必要,因为在时间范围末尾的偏移蜡烛图将为 NaN,FreqAI 会自动将其从训练数据集中剔除。
数据类型:整数。
默认值:0

数据分割参数

参数 描述
freqai.data_split_parameters子字典中的数据分割参数
data_split_parameters 包含 scikit-learn train_test_split()中可用的任何其他参数,具体参数列表见此处(外部网站)。
数据类型:字典。
test_size 用于测试而非训练的数据所占的比例。
数据类型:小于 1 的正浮点数。
shuffle 在训练期间打乱训练数据点的顺序。通常,在时间序列预测中为了避免破坏数据的时间顺序,此参数设置为 False
数据类型:布尔值。
默认值:False

模型训练参数

参数 描述
freqai.model_training_parameters 子字典中的模型训练参数
model_training_parameters 一个灵活的字典,包含所选模型库支持的所有参数。例如,如果你使用 LightGBMRegressor,该字典可以包含 LightGBMRegressor 支持的任何参数(详见此处,外部网站)。如果选择其他模型,该字典则可包含对应模型的任意参数。当前可用模型的列表请参见此处
数据类型:字典。
n_estimators 模型训练过程中拟合的增强树数量。
数据类型:整数。
learning_rate 模型训练过程中的增强学习率。
数据类型:浮点数。
n_jobsthread_counttask_type 设置并行处理的线程数以及 task_typegpucpu)。不同模型库使用不同的参数名称。
数据类型:浮点数。

强化学习参数

参数 描述
freqai.rl_config 子字典中的强化学习参数
rl_config 包含强化学习模型控制参数的字典。
数据类型:字典。
train_cycles 训练的时间步数将基于 `train_cycles * 训练数据点数量` 来设置。
数据类型:整数。
max_trade_duration_candles 指导智能体训练时将交易持续时间控制在期望长度以内。示例用法见 prediction_models/ReinforcementLearner.py 中可自定义的 calculate_reward() 函数。
数据类型:int。
model_type 来自 stable_baselines3 或 SBcontrib 的模型名称字符串。可用选项包括:'TRPO', 'ARS', 'RecurrentPPO', 'MaskablePPO', 'PPO', 'A2C', 'DQN'。用户应确保 model_training_parameters 与 stable_baselines3 对应模型支持的参数匹配,详情请参考其文档。PPO 文档(外部网站)
数据类型:字符串。
policy_type stable_baselines3 中可用的策略类型之一。
数据类型:字符串。
max_training_drawdown_pct 智能体在训练过程中允许经历的最大回撤比例。
数据类型:浮点数。
默认值:0.8
cpu_count 用于强化学习训练过程的线程/核心数量(取决于是否选择了 ReinforcementLearning_multiproc)。建议保持默认值,该值默认设置为总物理核心数减 1。
数据类型:int。
model_reward_parameters ReinforcementLearner.py 中可自定义的 calculate_reward() 函数内使用的参数。
数据类型:int。
add_state_info 告诉 FreqAI 在训练和推理的特征集中包含状态信息。当前的状态变量包括交易持续时间、当前利润、交易仓位。此功能仅在模拟/实盘运行中可用,在回测时会自动切换为 false。
数据类型: bool。
默认值:False
net_arch 网络架构,其详细说明见 stable_baselines3 文档。简而言之:[<共享层>, dict(vf=[<非共享的价值网络层>], pi=[<非共享的策略网络层>])]。默认设置为 [128, 128],表示两个共享隐藏层,每层有 128 个单元。
randomize_starting_position 随机化每个训练周期的起始位置,以避免过拟合。
数据类型: bool。
默认值:False
drop_ohlc_from_features 在训练期间传递给智能体的特征集中不包含标准化的 OHLC 数据(在所有情况下,OHLC 仍用于驱动环境)
数据类型: Boolean。
默认值:False
progress_bar 显示一个进度条,展示当前进度、已用时间和预计剩余时间。
数据类型: Boolean。
默认值:False

PyTorch 参数

通用

参数 描述
freqai.model_training_parameters 子字典中的模型训练参数
learning_rate 传递给优化器的学习率。
数据类型: float。
默认值:3e-4
model_kwargs 传递给模型类的参数。
数据类型: dict。
默认值:{}
trainer_kwargs 传递给训练器类的参数。
数据类型: dict。
默认值:{}

trainer_kwargs

参数 描述
位于 freqai.model_training_parameters.model_kwargs 子字典中的模型训练参数
n_epochs n_epochs 参数是 PyTorch 训练循环中的关键设置,用于确定整个训练数据集将被用来更新模型参数的次数。一个 epoch 表示对整个训练数据集的一次完整遍历。该参数会覆盖 n_steps。必须设置 n_epochsn_steps 中的一个。

数据类型: int。可选。
默认值:10
n_steps 设置 n_epochs 的另一种方式——指定要运行的训练迭代次数。此处的“迭代”指的是调用 optimizer.step() 的次数。如果设置了 n_epochs,则此参数将被忽略。其简化公式如下:

n_epochs = n_steps / (n_obs / batch_size)

这样设计的动机是,n_steps 更易于优化,并且在不同数量的数据点(n_obs)下保持稳定。

数据类型: int。可选。
默认值:None
batch_size 训练期间使用的批次大小。

数据类型: int。
默认值:64

附加参数

参数 描述
其他参数
freqai.keras 如果所选模型使用 Keras(基于 TensorFlow 的预测模型通常如此),则需要激活此标志,以便模型的保存/加载遵循 Keras 标准。
数据类型:布尔值。
默认值:False
freqai.conv_width 神经网络输入张量的宽度。通过将历史数据点作为张量的第二维度输入,该参数取代了移动蜡烛图(include_shifted_candles)的需求。从技术上讲,此参数也可用于回归器,但只会增加计算开销,而不会改变模型训练或预测结果。
数据类型:整数。
默认值:2
freqai.reduce_df_footprint 将所有数值列重新设置为 float32/int32,旨在减少内存/磁盘占用并缩短训练/推理时间。此参数应设置在 Freqtrade 配置文件的主层级中(而非 FreqAI 内部)。
数据类型:布尔值。
默认值:False