第 8 章 · 03 配置与运行


文档摘要

第 8 章 · 03 配置与运行 本节摘要:本节把 FreqAI 的配置块和运行流程讲透。先看 配置块的最小必填项( 、 、 、 、 ),再看回测与实盘两条运行路径的差异——回测需要提前下载数据、按滑动窗口逐段重训练,实盘则自动下数据、后台线程持续重训练。还会讲清 的关键作用、模型过期、持续学习、Hyperopt 联用等进阶话题。读完你就能独立把一个 FreqAI 策略跑起来。 内容来源:原项目文档 、 ,汉化并套用体系化模板。 ⚠️ 风险提示:回测好看不等于实盘能赚。FreqAI 回测虽然模拟了重训练,但仍受数据覆盖、滑点、资金费率等限制。务必先 Dry-Run。 学习目标 阅读完本节,你应当能够: 写出 freqai 配置块的最小必填项。

第 8 章 · 03 配置与运行

本节摘要:本节把 FreqAI 的配置块和运行流程讲透。先看 freqai 配置块的最小必填项(enabledtrain_period_daysbacktest_period_daysidentifierfeature_parameters),再看回测与实盘两条运行路径的差异——回测需要提前下载数据、按滑动窗口逐段重训练,实盘则自动下数据、后台线程持续重训练。还会讲清 identifier 的关键作用、模型过期、持续学习、Hyperopt 联用等进阶话题。读完你就能独立把一个 FreqAI 策略跑起来。

内容来源:原项目文档 docs/freqai-configuration.mddocs/freqai-running.md,汉化并套用体系化模板。

⚠️ 风险提示:回测好看不等于实盘能赚。FreqAI 回测虽然模拟了重训练,但仍受数据覆盖、滑点、资金费率等限制。务必先 Dry-Run。

学习目标

阅读完本节,你应当能够:

  1. 写出 freqai 配置块的最小必填项。
  2. 说明 identifier 的作用与何时必须改它。
  3. 区分回测实盘在数据下载、重训练上的差异。
  4. 配置 live_retrain_hoursexpiration_hourspurge_old_models
  5. 理解持续学习Hyperopt 联用的限制。

一、配置块最小必填项

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: 30backtest_period_days: 7 为例:

  • FreqAI 先用 4 月 1 日到 4 月 30 日(30 天)训练模型 1,用它预测 5 月 1 日到 5 月 7 日(7 天)。
  • 窗口前移 7 天,用 4 月 8 日到 5 月 7 日(含上一轮的 7 天)训练模型 2,预测 5 月 8 日到 5 月 14 日。
  • 如此反复,整个 61 天回测会训练约 9 个模型。

⚠️ 数据下载:回测不会自动下数据,你必须提前用 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"]

五、持续学习、Hyperopt 与 Tensorboard

持续学习(continual_learning: true):首次从零训练后,后续训练以上一次模型为起点,给模型「记忆」。注意:

  • 开启后 PCA 会自动关闭(PCA 会改变特征空间维度,与持续学习不兼容)。
  • 官方提醒这是「朴素」的增量学习,有过拟合或陷入局部最优的风险,主要供实验用。

Hyperopt 联用:可以对 FreqAI 策略做超参优化,但有严格限制:

  • 不能 hyperopt feature_engineering_*set_freqai_targets 里的内容(改了预测就要重训)。
  • 只能 hyperopt 入场/出场阈值等不影响预测的参数。
  • --analyze-per-epoch 不兼容。
  • FreqAI 会缓存预测复用,所以 hyperopt 入场/出场条件很快。
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(会拖慢训练)。

本节要点回顾

  1. 最小配置:enabledtrain_period_daysbacktest_period_daysidentifierfeature_parameters 必填;identifier 改特征/模型时必须换。
  2. 回测:按 backtest_period_days 滑动窗口逐段重训练;需提前下载数据(范围往前推 train+startup);同 config 二次回测复用模型。
  3. 实盘:自动下数据、后台按 live_retrain_hours 重训练、expiration_hours 控模型老化、purge_old_models 清磁盘。
  4. 动态阈值:&*_mean/&*_std 可做 z-score 阈值;extra_returns_per_train 返回自定义指标。
  5. 持续学习:continual_learning 让模型有记忆,但会关 PCA,且过拟合风险高。
  6. Hyperopt:只能优化入场/出场阈值,不能动特征/标签;Tensorboard 默认开,生产建议关。

下一节,我们看 FreqAI 的内置模型库——LightGBM/XGBoost 的回归与分类、PyTorch MLP 与 Transformer,以及怎么按场景选型。


发布者: 作者: 灏天文库 转发
评论区 (0)
U