ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

Freqtrade FreqAI 数据转换 5 步入门:如何把原始 K 线变成 PyTorch 模型输入

Freqtrade FreqAI 数据转换 5 步入门:如何把原始 K 线变成 PyTorch 模型输入 Freqtrade FreqAI 数据转换 5 步入门如何把原始 K 线变成 PyTorch 模型输入【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade这份教程带你用 Freqtrade 的 FreqAI 模块完成 AI 交易的数据转换全流程从原始 K 线清洗、特征工程、滑动窗口切分训练集到最终生成 PyTorch 张量并喂给深度学习模型。跟着 5 个步骤走你不需要手写任何数据预处理代码一次跑通第一个 AI 回测。第一次写 AI 策略时数据总不听话你是不是也遇到过这种情况K 线里前几十根全是 NaN特征列里混着无穷大训练集和测试集一划分就泄露了未来价格模型回测收益漂亮得像画出来的——实盘却完全不复现。这些坑本质上都是数据管道的问题。FreqAIFreqtrade 内置的机器学习模块把清洗、特征识别、时间切分、张量转换全部封装好了你只负责定义哪些列是特征、哪列是要预测的目标剩下的交给它。读完这篇你能省掉至少几个小时的手写预处理工作并直接拿到一个可运行的 PyTorch 模型回测。FreqAI 数据管道能帮你做什么能力说明你得到的结果特征/标签自动识别以%开头的列自动当特征开头自动当标签不用手动维护特征列表数据清洗自动处理 NaN 与无穷大训练模式直接丢弃坏行干净的训练矩阵滑动窗口切分按训练 N 天→回测 M 天滚动推进绝不跨窗口无未来数据泄露的回测预处理管道基于 datasieve 的 Pipeline可接缩放、PCA、异常值移除特征尺度统一PyTorch 张量转换DataFrame 一键转torch.float32张量支持窗口数据集直接喂给 MLP/LSTM/Transformer准备工作环境与依赖先装好项目并准备 FreqAI PyTorch 依赖整个过程在终端里敲三条命令git clone https://gitcode.com/GitHub_Trending/fr/freqtrade cd freqtrade ./setup.sh -r requirements-freqai.txt # 基础依赖 FreqAI 依赖 pip install torch # PyTorch 深度学习框架前置条件只有三个Python 3.9、已安装 TA-Libsetup.sh会提示、一台有 8GB 内存的机器。如果只想用 LightGBM 等树模型验证流程torch可以最后再装先跑通再升级能少踩一半的坑。配置文件可以直接从示例改起这份示例就是 FreqAI 的完整模板{ freqai: { enabled: true, train_period_days: 15, backtest_period_days: 7, data_split_parameters: { test_size: 0.33, random_state: 1 } } }这段在干什么打开 FreqAI 开关并声明每 15 天训一次模型之后 7 天用来验证。核心流程5 步从原始 K 线到模型训练第 1 步创建 AI 策略并定义特征新建策略时别从零写直接基于官方示例改它演示了全部约定templates/FreqaiExampleStrategy.py。关键就两点特征列名前加%标签列名前加FreqAI 靠这个命名约定自动识别def feature_engineering_expand_all(self, dataframe, period, metadata, **kwargs): # 一行代码FreqAI 会自动把它展开到多个周期上 dataframe[%-rsi-period] ta.RSI(dataframe, timeperiodperiod) dataframe[%-roc-period] ta.ROC(dataframe, timeperiodperiod) return dataframe def set_freqai_targets(self, dataframe, metadata): # 标签告诉模型预测未来 20 根 K 线的收益率 label_period self.dp.get_label_period() dataframe[-s_close] dataframe[close].shift(-label_period) return dataframe注意shift(-label_period)标签是未来的值回测时它不会提前出现在训练数据里这正是避免未来泄露的关键设计。第 2 步下载足够长的历史数据这是新手最常翻车的一步。回测起点之前必须多下train_period_daysstartup_candle_count的数据否则第一个训练窗口根本凑不满。freqtrade download-data --pairs BTC/USDT ETH/USDT \ --timeframe 5m --timerange 20240101-20240401这段在干什么按 5 分钟周期下载 3 个月数据。假设train_period_days是 15回测从 20240201 开始你就得保证 20240116 之前的数据也存在——上面的下载区间已经覆盖了。更精确的换算方法见 docs/freqai-running.md。第 3 步运行回测观察数据管道工作freqtrade backtesting --strategy FreqaiExampleStrategy \ --strategy-path freqtrade/templates \ --config config_examples/config_freqai.example.json \ --freqaimodel LightGBMRegressor --timerange 20240201-20240301这段在干什么跑一次完整回测。日志里你会看到滑动窗口一个接一个地推进每个窗口内 FreqAI 自动完成拉取数据 → 过滤坏行 → 提取%特征 → 按test_size切训练/验证 → 训练模型 → 在窗口尾部预测。回测结束后模型文件会存进models_freqai/目录。第 4 步切换到 PyTorch 模型想上深度学习只需把--freqaimodel换成 PyTorch 模型比如 MLP 回归器 freqai/prediction_models/PyTorchMLPRegressor.pyfreqtrade backtesting --freqaimodel PyTorchMLPRegressor \ --strategy MyFreqaiStrat --strategy-path user_data/strategies ...训练超参在配置文件的model_training_parameters里给不用改代码model_training_parameters: { learning_rate: 3e-4, trainer_kwargs: { n_steps: 5000, batch_size: 64 }, model_kwargs: { hidden_dim: 512, n_layer: 1 } }第 5 步确认张量转换已生效模型内部的数据流长这样DataKitchen 交出的train_featuresDataFrame先经过 datasieve 管道标准化再由DefaultPyTorchDataConvertor转成float32张量并送进 GPU# 源码位置freqtrade/freqai/torch/PyTorchDataConvertor.py x torch.tensor(df.values, devicecuda, dtypetorch.float32)如果你要写时序模型LSTM/Transformer项目自带WindowDatasetfreqtrade/freqai/torch/datasets.py把 K 线序列按window_size切成窗口特征 → 单点标签的样本对形状直接满足(批次, 时间步, 特征数)的时序模型输入要求。关键参数与调优这些是数据行为最敏感的旋钮都藏在配置的freqai段里参数默认值示例配置调大 / 调小的影响train_period_days15训练窗口越长模型越稳但重训越慢backtest_period_days7决定多久用新模型重验一次data_split_parameters.test_size0.33验证集比例调大会吃掉训练样本label_period_candles20预测多远的未来调大后信号更钝include_timeframes3m/15m/1h引入多时间框架特征数量会乘法级膨胀DI_threshold/weight_factor0.9 / 0.9前者剔除剧烈异常时段后者让近期数据权重更高data_kitchen_thread_countCPU 核数×2−2数据处理并行度机器吃紧时手动调小一个实用组合新手先关掉 PCAprincipal_component_analysis: false和异常值移除用最简单的管道跑通确认流程后再按需开启出问题才好在日志里定位是数据还是模型。常见坑与最快排错法现象日志提示未找到特征或模型输入是 0 维→ 原因特征列名漏了%前缀或标签漏了。 → 解法回策略里检查feature_engineering_*和set_freqai_targets两个函数命名约定一个字母都不能少。现象训练样本被大量丢弃日志里 NaN 比例偏高→ 原因startup_candle_count不够指标计算的前几十根 K 线全是空值。 → 解法把策略里的startup_candle_count提到最大指标周期之上示例里是 40用长周期布林带就应更高同时确认下载数据覆盖了这段前置期。现象回测一开始就报数据不足或第一个窗口没训出模型→ 原因回测起点之前没下载train_period_days的额外数据。 → 解法按回测起点 − train_period_days − startup_candle_count往前补数据文档 docs/freqai-running.md 里有逐步换算的例子。现象PyTorch 训练时报张量形状不匹配→ 原因分类任务标签必须是torch.long回归任务是float两者弄反了。 → 解法看DefaultPyTorchDataConvertor的target_tensor_type参数freqtrade/freqai/torch/PyTorchDataConvertor.py按任务类型选对 dtype。进阶与延伸方向流程跑通后这几条路值得走特征重要性分析配置里plot_feature_importances: 20训练后自动输出 Top20 特征图快速淘汰无效指标。训练过程可视化接上 TensorBoardtb_logger在训练器里已内置损失曲线实时可查。时序深度模型用WindowDataset 自定义模型类参考 freqtrade/freqai/prediction_models/ 里的 PyTorch 变体写自己的 LSTM/Transformer 回归器。强化学习FreqAI 的 RL 模块支持 3~5 个离散动作环境目录在 freqtrade/freqai/RL/。异常值处理默认用 SVM 移除离群点换成 DBSCAN 的思路见 docs/assets/freqai_dbscan.jpg 对应的文档说明。资源汇总类型位置FreqAI 总览docs/freqai.md特征工程指南%/约定详解docs/freqai-feature-engineering.md配置说明docs/freqai-configuration.md运行与数据量换算docs/freqai-running.md全部参数速查表docs/freqai-parameter-table.md示例策略freqtrade/templates/FreqaiExampleStrategy.py数据厨房源码freqtrade/freqai/data_kitchen.pyPyTorch 数据转换freqtrade/freqai/torch/示例配置config_examples/config_freqai.example.json【免费下载链接】freqtradeFree, open source crypto trading bot项目地址: https://gitcode.com/GitHub_Trending/fr/freqtrade创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表