第 8 章 · 03 配置与运行 本节摘要:本节把 FreqAI 的配置块和运行流程讲透。先看 配置块的最小必填项( 、 、 、 、 ),再看回测与实盘两条运行路径的差异——回测需要提前下载数据、按滑动窗口逐段重训练,实盘则自动下数据、后台线程持续重训练。还会讲清 的关键作用、模型过期、持续学习、Hyperopt 联用等进阶话题。读完你就能独立把一个 FreqAI 策略跑起来。 内容来源:原项目文档 、 ,汉化并套用体系化模板。 ⚠️ 风险提示:回测好看不等于实盘能赚。FreqAI 回测虽然模拟了重训练,但仍受数据覆盖、滑点、资金费率等限制。务必先 Dry-Run。 学习目标 阅读完本节,你应当能够: 写出 freqai 配置块的最小必填项。
本节摘要:本节把 FreqAI 的配置块和运行流程讲透。先看
freqai配置块的最小必填项(enabled、train_period_days、backtest_period_days、identifier、feature_parameters),再看回测与实盘两条运行路径的差异——回测需要提前下载数据、按滑动窗口逐段重训练,实盘则自动下数据、后台线程持续重训练。还会讲清identifier的关键作用、模型过期、持续学习、Hyperopt 联用等进阶话题。读完你就能独立把一个 FreqAI 策略跑起来。
内容来源:原项目文档
docs/freqai-configuration.md、docs/freqai-running.md,汉化并套用体系化模板。
⚠️ 风险提示:回测好看不等于实盘能赚。FreqAI 回测虽然模拟了重训练,但仍受数据覆盖、滑点、资金费率等限制。务必先 Dry-Run。
阅读完本节,你应当能够:
FreqAI 的配置都在主配置文件的 "freqai" 字典里。最小必填项如下:
"freqai": { "enabled": true, "purge_old_models": 2, "train_period_days": 30, "backtest_period_days": 7, "identifier": "unique-id", "feature_parameters": { "include_timeframes": ["5m", "15m", "4h"], "include_corr_pairlist": ["ETH/USD", "LINK/USD", "BNB/USD"], "label_period_candles": 24, "include_shifted_candles": 2, "indicator_periods_candles": [10, 20] }, "data_split_parameters": { "test_size": 0.25 } }
核心参数解读:
| 参数 | 必填 | 含义 |
|---|---|---|
enabled |
是 | 开启 FreqAI |
train_period_days |
是 | 每次训练用多少天的数据(滑动窗口宽度) |
backtest_period_days |
是 | 回测时每个模型负责预测多少天后重训练 |
identifier |
是 | 本次实验的唯一 ID,决定模型存取路径 |
feature_parameters |
是 | 特征工程裂变配置(上一节讲过) |
data_split_parameters |
否 | 训练/测试集切分,传给 sklearn 的 train_test_split |
⚠️ identifier 最容易被新手忽视。它不只是个名字——保持不变能享受崩溃恢复和回测加速;改了特征或模型必须换 identifier(或删掉
user_data/models/<identifier>/文件夹),否则 FreqAI 会复用旧模型,结果与你的改动不符。
回测命令和普通策略很像,多加一个 --freqaimodel:
freqtrade backtesting \ --strategy FreqaiExampleStrategy \ --strategy-path freqtrade/templates \ --config config_examples/config_freqai.example.json \ --freqaimodel LightGBMRegressor \ --timerange 20210501-20210701
回测的核心机制是滑动窗口:
以 --timerange 20210501-20210701(约 61 天)、train_period_days: 30、backtest_period_days: 7 为例:
⚠️ 数据下载:回测不会自动下数据,你必须提前用
download-data下载。而且下载范围要比--timerange往前推train_period_days+startup_candle_count对应的天数。比如回测 5 月 1 日起、训练窗口 30 天、最大时间周期 1h 的 startup 40 根,下载起点要往前推 30 + 40/24 ≈ 31.7 天,即 3 月 30 日。
模型复用:首次回测训练完所有模型后,再次用相同 config 回测会直接加载已有模型,不再训练。这让你可以反复调入场/出场阈值而不重训。但只要你改了特征或模型,就必须换 identifier。
# 复用已有回测模型启动实盘(省去首次训练) # 只要 identifier 对得上,且设了 save_backtest_models: true
💡 ** fractional backtest_period_days**:
backtest_period_days可以是小数(如 0.1),但--timerange会被它整除来决定训练次数。10 天 timerange 配 0.1 天 backtest = 100 个模型/币对,回测会非常慢。真要充分验证,不如直接 dry-run。
实盘/dry 命令:
freqtrade trade \ --strategy FreqaiExampleStrategy \ --config config_examples/config_freqai.example.json \ --freqaimodel LightGBMRegressor \ --strategy-path freqtrade/templates
与回测的关键差异:
| 维度 | 回测 | 实盘/Dry |
|---|---|---|
| 数据下载 | 必须手动 download-data |
自动下载并增量追加 |
| 重训练频率 | 由 backtest_period_days 决定 |
由 live_retrain_hours 决定 |
| 模型老化 | 不适用 | expiration_hours 控制 |
| 状态信息 | 无 add_state_info(RL 专属) |
可开 |
实盘运行时,FreqAI 在独立线程(或 GPU)上训练,主线程继续用当前最新模型推理,训练完成后无缝替换。几个关键参数:
live_retrain_hours(默认 0):多久重训练一次。0 表示尽可能频繁。expiration_hours(默认 0):模型超过这个时长就不再用它预测(策略里 do_predict 会变 2)。purge_old_models(默认 2):磁盘上保留几个最近模型,0 表示全留。fit_live_predictions_candles:用最近 N 根 K 线的实盘预测(而非训练集统计)来算标签的均值/标准差,做动态阈值。"freqai": { "identifier": "example", "live_retrain_hours": 0.5, "expiration_hours": 2, "purge_old_models": 4, "fit_live_predictions_candles": 300 }
💡 从回测模型启动实盘:把回测时的
identifier填到实盘 config 里,FreqAI 会先加载已有模型,再按live_retrain_hours判断是否需要重训练。这能省去实盘冷启动的漫长首次训练。
FreqAI 支持从训练中返回额外指标给策略。最典型的用法是 &*_mean 和 &*_std——标签在训练时的均值和标准差。FreqaiExampleStrategy 用它做动态阈值:
# 预测值离均值 1.25 个标准差以外才下单,过滤掉「平庸」预测 dataframe["target_roi"] = dataframe["&-s_close_mean"] + dataframe["&-s_close_std"] * 1.25 dataframe["sell_roi"] = dataframe["&-s_close_mean"] - dataframe["&-s_close_std"] * 1.25
如果你想返回自定义指标,在 config 里声明默认值(形状占位):
"freqai": { "extra_returns_per_train": {"total_profit": 4} }
然后在自定义模型的 train() 里给它赋真实值,策略里就能用 dataframe["total_profit"]。
持续学习(continual_learning: true):首次从零训练后,后续训练以上一次模型为起点,给模型「记忆」。注意:
Hyperopt 联用:可以对 FreqAI 策略做超参优化,但有严格限制:
feature_engineering_* 和 set_freqai_targets 里的内容(改了预测就要重训)。--analyze-per-epoch 不兼容。freqtrade hyperopt \ --hyperopt-loss SharpeHyperOptLoss \ --strategy FreqaiExampleStrategy \ --freqaimodel LightGBMRegressor \ --config config_examples/config_freqai.example.json \ --timerange 20220428-20220507
Tensorboard:FreqAI 为 XGBoost、PyTorch、强化学习、CatBoost 集成了 Tensorboard(需 torch 环境)。配置里 activate_tensorboard: true(默认开),另开终端:
tensorboard --logdir user_data/models/unique-id # 浏览器访问 127.0.0.1:6060
💡 生产环境建议关掉 Tensorboard(会拖慢训练)。
enabled、train_period_days、backtest_period_days、identifier、feature_parameters 必填;identifier 改特征/模型时必须换。backtest_period_days 滑动窗口逐段重训练;需提前下载数据(范围往前推 train+startup);同 config 二次回测复用模型。live_retrain_hours 重训练、expiration_hours 控模型老化、purge_old_models 清磁盘。&*_mean/&*_std 可做 z-score 阈值;extra_returns_per_train 返回自定义指标。continual_learning 让模型有记忆,但会关 PCA,且过拟合风险高。下一节,我们看 FreqAI 的内置模型库——LightGBM/XGBoost 的回归与分类、PyTorch MLP 与 Transformer,以及怎么按场景选型。